gss-1.0.3/0000755000000000000000000000000012415510376007262 500000000000000gss-1.0.3/tests/0000755000000000000000000000000012415510376010424 500000000000000gss-1.0.3/tests/utils.c0000664000000000000000000000152612012453517011652 00000000000000#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 static void fail (const char *format, ...) __attribute__ ((format (printf, 1, 2))); static void success (const char *format, ...) __attribute__ ((format (printf, 1, 2))); static int debug = 0; static int error_count = 0; static int break_on_error = 0; static void fail (const char *format, ...) { va_list arg_ptr; va_start (arg_ptr, format); vfprintf (stderr, format, arg_ptr); va_end (arg_ptr); error_count++; if (break_on_error) exit (EXIT_FAILURE); } static void success (const char *format, ...) { va_list arg_ptr; va_start (arg_ptr, format); if (debug) vfprintf (stdout, format, arg_ptr); va_end (arg_ptr); } gss-1.0.3/tests/basic.c0000664000000000000000000003231712415506237011602 00000000000000/* basic.c --- Basic GSS self tests. * Copyright (C) 2003-2014 Simon Josefsson * * This file is part of the Generic Security Service (GSS). * * GSS 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. * * GSS 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 GSS; if not, see http://www.gnu.org/licenses or write to * the Free Software Foundation, Inc., 51 Franklin Street, Fifth * Floor, Boston, MA 02110-1301, USA. * */ #include "config.h" #include #include #include #include #include /* Get GSS prototypes. */ #include #include "utils.c" int main (int argc, char *argv[]) { gss_uint32 maj_stat, min_stat, msgctx; gss_buffer_desc bufdesc, bufdesc2; gss_name_t service; gss_OID_set oids; int n; do if (strcmp (argv[argc - 1], "-v") == 0 || strcmp (argv[argc - 1], "--verbose") == 0) debug = 1; else if (strcmp (argv[argc - 1], "-b") == 0 || strcmp (argv[argc - 1], "--break-on-error") == 0) break_on_error = 1; else if (strcmp (argv[argc - 1], "-h") == 0 || strcmp (argv[argc - 1], "-?") == 0 || strcmp (argv[argc - 1], "--help") == 0) { printf ("Usage: %s [-vbh?] [--verbose] [--break-on-error] [--help]\n", argv[0]); return 1; } while (argc-- > 1); /* OID set tests */ oids = GSS_C_NO_OID_SET; maj_stat = gss_create_empty_oid_set (&min_stat, &oids); if (maj_stat == GSS_S_COMPLETE) success ("gss_create_empty_oid_set() OK\n"); else fail ("gss_create_empty_oid_set() failed (%d,%d)\n", maj_stat, min_stat); /* Test empty set */ maj_stat = gss_test_oid_set_member (&min_stat, GSS_C_NT_USER_NAME, oids, &n); if (maj_stat == GSS_S_COMPLETE) success ("gss_test_oid_set_member() OK\n"); else fail ("gss_test_oid_set_member() failed (%d,%d)\n", maj_stat, min_stat); if (debug) printf (" OID present in empty set => %d\n", n); if (!n) success ("gss_test_oid_set_member() OK\n"); else fail ("gss_test_oid_set_member() failed (%d,%d)\n", maj_stat, min_stat); /* Add an OID */ maj_stat = gss_add_oid_set_member (&min_stat, GSS_C_NT_USER_NAME, &oids); if (maj_stat == GSS_S_COMPLETE) success ("gss_add_oid_set_member() OK\n"); else fail ("gss_add_oid_set_member() failed (%d,%d)\n", maj_stat, min_stat); /* Test set for added OID */ maj_stat = gss_test_oid_set_member (&min_stat, GSS_C_NT_USER_NAME, oids, &n); if (maj_stat == GSS_S_COMPLETE) success ("gss_test_oid_set_member() OK\n"); else fail ("gss_test_oid_set_member() failed (%d,%d)\n", maj_stat, min_stat); if (debug) printf (" OID present in set with the OID added to it => %d\n", n); if (n) success ("gss_test_oid_set_member() OK\n"); else fail ("gss_test_oid_set_member() failed (%d,%d)\n", maj_stat, min_stat); /* Test set for another OID */ maj_stat = gss_test_oid_set_member (&min_stat, GSS_C_NT_ANONYMOUS, oids, &n); if (maj_stat == GSS_S_COMPLETE) success ("gss_test_oid_set_member() OK\n"); else fail ("gss_test_oid_set_member() failed (%d,%d)\n", maj_stat, min_stat); if (debug) printf (" Another OID present in set without the OID => %d\n", n); if (!n) success ("gss_test_oid_set_member() OK\n"); else fail ("gss_test_oid_set_member() failed (%d,%d)\n", maj_stat, min_stat); /* Add another OID */ maj_stat = gss_add_oid_set_member (&min_stat, GSS_C_NT_ANONYMOUS, &oids); if (maj_stat == GSS_S_COMPLETE) success ("gss_add_oid_set_member() OK\n"); else fail ("gss_add_oid_set_member() failed (%d,%d)\n", maj_stat, min_stat); /* Test set for added OID */ maj_stat = gss_test_oid_set_member (&min_stat, GSS_C_NT_ANONYMOUS, oids, &n); if (maj_stat == GSS_S_COMPLETE) success ("gss_test_oid_set_member() OK\n"); else fail ("gss_test_oid_set_member() failed (%d,%d)\n", maj_stat, min_stat); if (debug) printf (" Another OID present in set with it added => %d\n", n); if (n) success ("gss_test_oid_set_member() OK\n"); else fail ("gss_test_oid_set_member() failed (%d,%d)\n", maj_stat, min_stat); /* Test set for first OID */ maj_stat = gss_test_oid_set_member (&min_stat, GSS_C_NT_USER_NAME, oids, &n); if (maj_stat == GSS_S_COMPLETE) success ("gss_test_oid_set_member() OK\n"); else fail ("gss_test_oid_set_member() failed (%d,%d)\n", maj_stat, min_stat); if (debug) printf (" First OID present in set => %d\n", n); if (n) success ("gss_test_oid_set_member() OK\n"); else fail ("gss_test_oid_set_member() failed (%d,%d)\n", maj_stat, min_stat); maj_stat = gss_release_oid_set (&min_stat, &oids); if (maj_stat == GSS_S_COMPLETE) success ("gss_release_oid_set() OK\n"); else fail ("gss_release_oid_set() failed (%d,%d)\n", maj_stat, min_stat); /* Check mechs */ oids = GSS_C_NO_OID_SET; maj_stat = gss_indicate_mechs (&min_stat, &oids); if (maj_stat == GSS_S_COMPLETE) success ("gss_indicate_mechs() OK\n"); else fail ("gss_indicate_mechs() failed (%d,%d)\n", maj_stat, min_stat); #ifdef USE_KERBEROS5 maj_stat = gss_test_oid_set_member (&min_stat, GSS_KRB5, oids, &n); if (maj_stat == GSS_S_COMPLETE) success ("gss_test_oid_set_member() OK\n"); else fail ("gss_test_oid_set_member() failed (%d,%d)\n", maj_stat, min_stat); if (debug) printf (" kerberos5 supported => %d\n", n); if (n) success ("gss_test_oid_set_member() OK\n"); else fail ("gss_test_oid_set_member() failed (%d,%d)\n", maj_stat, min_stat); #endif maj_stat = gss_release_oid_set (&min_stat, &oids); if (maj_stat == GSS_S_COMPLETE) success ("gss_release_oid_set() OK\n"); else fail ("gss_release_oid_set() failed (%d,%d)\n", maj_stat, min_stat); #ifdef USE_KERBEROS5 maj_stat = gss_inquire_names_for_mech (&min_stat, GSS_KRB5, &oids); if (maj_stat == GSS_S_COMPLETE) success ("gss_inquire_names_for_mech() OK\n"); else fail ("gss_inquire_names_for_mech() failed (%d,%d)\n", maj_stat, min_stat); /* Check if KRB5 supports PRINCIPAL_NAME name type */ maj_stat = gss_test_oid_set_member (&min_stat, GSS_KRB5_NT_PRINCIPAL_NAME, oids, &n); if (maj_stat == GSS_S_COMPLETE) success ("gss_test_oid_set_member() OK\n"); else fail ("gss_test_oid_set_member() failed (%d,%d)\n", maj_stat, min_stat); if (debug) printf (" kerberos5 supports PRINCIPAL_NAME name type => %d\n", n); if (n) success ("gss_test_oid_set_member() OK\n"); else fail ("gss_test_oid_set_member() failed (%d,%d)\n", maj_stat, min_stat); /* Check if KRB5 supports HOSTBASED NAME name type */ maj_stat = gss_test_oid_set_member (&min_stat, GSS_C_NT_HOSTBASED_SERVICE, oids, &n); if (maj_stat == GSS_S_COMPLETE) success ("gss_test_oid_set_member() OK\n"); else fail ("gss_test_oid_set_member() failed (%d,%d)\n", maj_stat, min_stat); if (debug) printf (" kerberos5 supports HOSTBASED_SERVICE name type => %d\n", n); if (n) success ("gss_test_oid_set_member() OK\n"); else fail ("gss_test_oid_set_member() failed (%d,%d)\n", maj_stat, min_stat); /* Check if KRB5 supports ANONYMOUS name type */ maj_stat = gss_test_oid_set_member (&min_stat, GSS_C_NT_ANONYMOUS, oids, &n); if (maj_stat == GSS_S_COMPLETE) success ("gss_test_oid_set_member() OK\n"); else fail ("gss_test_oid_set_member() failed (%d,%d)\n", maj_stat, min_stat); if (debug) printf (" kerberos5 supports ANONYMOUS name type => %d\n", n); if (!n) success ("gss_test_oid_set_member() OK\n"); else fail ("gss_test_oid_set_member() failed (%d,%d)\n", maj_stat, min_stat); maj_stat = gss_release_oid_set (&min_stat, &oids); if (maj_stat == GSS_S_COMPLETE) success ("gss_release_oid_set() OK\n"); else fail ("gss_release_oid_set() failed (%d,%d)\n", maj_stat, min_stat); #endif /* Check name */ service = NULL; bufdesc.value = (char *) "imap@server.example.org@FOO"; bufdesc.length = strlen (bufdesc.value); maj_stat = gss_import_name (&min_stat, &bufdesc, GSS_C_NT_HOSTBASED_SERVICE, &service); if (maj_stat == GSS_S_COMPLETE) success ("gss_import_name() OK\n"); else fail ("gss_import_name() failed (%d,%d)\n", maj_stat, min_stat); maj_stat = gss_display_name (&min_stat, service, &bufdesc2, NULL); if (maj_stat == GSS_S_COMPLETE) success ("gss_display_name() OK\n"); else fail ("gss_display_name() failed (%d,%d)\n", maj_stat, min_stat); if (debug) printf (" display_name() => %d: %.*s\n", (int) bufdesc2.length, (int) bufdesc2.length, (char *) bufdesc2.value); maj_stat = gss_release_buffer (&min_stat, &bufdesc2); if (maj_stat == GSS_S_COMPLETE) success ("gss_release_buffer() OK\n"); else fail ("gss_release_buffer() failed (%d,%d)\n", maj_stat, min_stat); #ifdef USE_KERBEROS5 /* NB: "service" resused from previous test */ maj_stat = gss_inquire_mechs_for_name (&min_stat, service, &oids); if (maj_stat == GSS_S_COMPLETE) success ("gss_inquire_mechs_for_name() OK\n"); else fail ("gss_inquire_mechs_for_name() failed (%d,%d)\n", maj_stat, min_stat); /* Check GSS_C_NT_HOSTBASED_SERVICE name type is supported by KRB5 */ maj_stat = gss_test_oid_set_member (&min_stat, GSS_KRB5, oids, &n); if (maj_stat == GSS_S_COMPLETE) success ("gss_test_oid_set_member() OK\n"); else fail ("gss_test_oid_set_member() failed (%d,%d)\n", maj_stat, min_stat); if (debug) printf (" HOSTBASED_SERVICE supported by kerberos5 => %d\n", n); if (n) success ("gss_test_oid_set_member() OK\n"); else fail ("gss_test_oid_set_member() failed (%d,%d)\n", maj_stat, min_stat); /* Dummy OID check */ maj_stat = gss_test_oid_set_member (&min_stat, GSS_C_NT_ANONYMOUS, oids, &n); if (maj_stat == GSS_S_COMPLETE) success ("gss_test_oid_set_member() OK\n"); else fail ("gss_test_oid_set_member() failed (%d,%d)\n", maj_stat, min_stat); if (debug) printf (" Dummy oid supported by kerberos5 => %d\n", n); if (!n) success ("gss_test_oid_set_member() OK\n"); else fail ("gss_test_oid_set_member() failed (%d,%d)\n", maj_stat, min_stat); maj_stat = gss_release_oid_set (&min_stat, &oids); if (maj_stat == GSS_S_COMPLETE) success ("gss_release_oid_set() OK\n"); else fail ("gss_release_oid_set() failed (%d,%d)\n", maj_stat, min_stat); #endif /* Release service allocated earlier. */ maj_stat = gss_release_name (&min_stat, &service); if (maj_stat == GSS_S_COMPLETE) success ("gss_release_name() OK\n"); else fail ("gss_release_name() failed (%d,%d)\n", maj_stat, min_stat); /* Check display_status */ msgctx = 0; maj_stat = gss_display_status (&min_stat, GSS_S_COMPLETE, GSS_C_GSS_CODE, GSS_C_NO_OID, &msgctx, &bufdesc); if (maj_stat == GSS_S_COMPLETE) success ("gss_display_status() OK\n"); else fail ("gss_display_status() failed (%d,%d)\n", maj_stat, min_stat); if (debug) printf (" Display status for GSS_S_COMPLETE => %*s\n", (int) bufdesc.length, (char *) bufdesc.value); maj_stat = gss_release_buffer (&min_stat, &bufdesc); if (maj_stat == GSS_S_COMPLETE) success ("gss_release_buffer() OK\n"); else fail ("gss_release_buffer() failed (%d,%d)\n", maj_stat, min_stat); /* Encapsulate. */ bufdesc.value = (char *) "context token"; bufdesc.length = strlen (bufdesc.value); maj_stat = gss_encapsulate_token (&bufdesc, GSS_C_NT_USER_NAME, &bufdesc2); if (maj_stat == GSS_S_COMPLETE) success ("gss_encapsulate_token() OK\n"); else fail ("gss_encapsulate_token() failed (%d)\n", maj_stat); maj_stat = gss_decapsulate_token (&bufdesc2, GSS_C_NT_ANONYMOUS, &bufdesc); if (maj_stat == GSS_S_DEFECTIVE_TOKEN) success ("gss_decapsulate_token(bad oid) OK\n"); else fail ("gss_decapsulate_token() failed (%d)\n", maj_stat); n = ((char *)bufdesc2.value)[3]; ((char *)bufdesc2.value)[3] = 42; maj_stat = gss_decapsulate_token (&bufdesc2, GSS_C_NT_USER_NAME, &bufdesc); ((char *)bufdesc2.value)[3] = n; if (maj_stat == GSS_S_DEFECTIVE_TOKEN) success ("gss_decapsulate_token(bad length) OK\n"); else fail ("gss_decapsulate_token() failed (%d)\n", maj_stat); maj_stat = gss_decapsulate_token (&bufdesc2, GSS_C_NT_USER_NAME, &bufdesc); if (maj_stat == GSS_S_COMPLETE) success ("gss_decapsulate_token() OK\n"); else fail ("gss_decapsulate_token() failed (%d)\n", maj_stat); maj_stat = gss_release_buffer (&min_stat, &bufdesc); if (maj_stat == GSS_S_COMPLETE) success ("gss_release_buffer() OK\n"); else fail ("gss_release_buffer() failed (%d,%d)\n", maj_stat, min_stat); maj_stat = gss_release_buffer (&min_stat, &bufdesc2); if (maj_stat == GSS_S_COMPLETE) success ("gss_release_buffer() OK\n"); else fail ("gss_release_buffer() failed (%d,%d)\n", maj_stat, min_stat); if (debug) printf ("Basic self tests done with %d errors\n", error_count); return error_count ? 1 : 0; } gss-1.0.3/tests/Makefile.am0000664000000000000000000000324712415506237012411 00000000000000## Process this file with automake to produce Makefile.in # Copyright (C) 2003-2014 Simon Josefsson # # This file is part of the Generic Security Service (GSS). # # GSS 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. # # GSS 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 GSS; if not, see http://www.gnu.org/licenses or write to # the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, # Boston, MA 02110-1301, USA. AM_CFLAGS = $(WARN_CFLAGS) $(WERROR_CFLAGS) AM_CPPFLAGS = -I$(top_builddir)/lib/headers -I$(top_srcdir)/lib/headers AM_LDFLAGS = -no-install LDADD = ../lib/libgss.la @LTLIBINTL@ TESTS_ENVIRONMENT = \ SHISHI_KEYS=$(srcdir)/krb5context.key \ SHISHI_TICKETS=$(srcdir)/krb5context.tkt \ SHISHI_CONFIG=$(srcdir)/shishi.conf \ SHISHI_HOME=$(srcdir) \ SHISHI_USER=ignore-this-warning \ THREADSAFETY_FILES="$(top_srcdir)/lib/*.c $(top_srcdir)/lib/krb5/*.c" \ $(VALGRIND) buildtests = basic saslname if KRB5 buildtests += krb5context endif TESTS = $(buildtests) threadsafety check_PROGRAMS = $(buildtests) dist_check_SCRIPTS = threadsafety krb5context_LDADD = $(LDADD) @LTLIBSHISHI@ EXTRA_DIST = krb5context.key krb5context.tkt utils.c shishi.conf localedir = $(datadir)/locale DEFS = -DLOCALEDIR=\"$(localedir)\" @DEFS@ gss-1.0.3/tests/krb5context.c0000664000000000000000000002363712415506237012776 00000000000000/* krb5context.c --- Kerberos 5 security context self tests. * Copyright (C) 2003-2014 Simon Josefsson * * This file is part of the Generic Security Service (GSS). * * GSS 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. * * GSS 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 GSS; if not, see http://www.gnu.org/licenses or write to * the Free Software Foundation, Inc., 51 Franklin Street, Fifth * Floor, Boston, MA 02110-1301, USA. * */ #include "config.h" #include #include #include #include #include /* Get GSS prototypes. */ #include /* Get Shishi prototypes. */ #include #include "utils.c" static void display_status_1 (const char *m, OM_uint32 code, int type) { OM_uint32 maj_stat, min_stat; gss_buffer_desc msg; OM_uint32 msg_ctx; msg_ctx = 0; do { maj_stat = gss_display_status (&min_stat, code, type, GSS_C_NO_OID, &msg_ctx, &msg); if (GSS_ERROR (maj_stat)) printf ("GSS-API display_status failed on code %d type %d\n", code, type); else { printf ("GSS-API error %s (%s): %.*s\n", m, type == GSS_C_GSS_CODE ? "major" : "minor", (int) msg.length, (char *) msg.value); gss_release_buffer (&min_stat, &msg); } } while (!GSS_ERROR (maj_stat) && msg_ctx); } static void display_status (const char *msg, OM_uint32 maj_stat, OM_uint32 min_stat) { display_status_1 (msg, maj_stat, GSS_C_GSS_CODE); display_status_1 (msg, min_stat, GSS_C_MECH_CODE); } int main (int argc, char *argv[]) { gss_uint32 maj_stat, min_stat, ret_flags, time_rec; gss_buffer_desc bufdesc, bufdesc2; gss_name_t servername = GSS_C_NO_NAME, name; gss_ctx_id_t cctx = GSS_C_NO_CONTEXT; gss_ctx_id_t sctx = GSS_C_NO_CONTEXT; gss_cred_id_t server_creds; Shishi *handle; size_t i; struct gss_channel_bindings_struct cb; memset (&cb, 0, sizeof (cb)); cb.application_data.length = 3; cb.application_data.value = (char *) "hej"; do if (strcmp (argv[argc - 1], "-v") == 0 || strcmp (argv[argc - 1], "--verbose") == 0) debug = 1; else if (strcmp (argv[argc - 1], "-b") == 0 || strcmp (argv[argc - 1], "--break-on-error") == 0) break_on_error = 1; else if (strcmp (argv[argc - 1], "-h") == 0 || strcmp (argv[argc - 1], "-?") == 0 || strcmp (argv[argc - 1], "--help") == 0) { printf ("Usage: %s [-vbh?] [--verbose] [--break-on-error] [--help]\n", argv[0]); return 1; } while (argc-- > 1); handle = shishi (); /* Name of service. */ bufdesc.value = (char *) "host@latte.josefsson.org"; bufdesc.length = strlen (bufdesc.value); maj_stat = gss_import_name (&min_stat, &bufdesc, GSS_C_NT_HOSTBASED_SERVICE, &servername); if (GSS_ERROR (maj_stat)) fail ("gss_import_name (host/server)\n"); /* Get credential, for server. */ maj_stat = gss_acquire_cred (&min_stat, servername, 0, GSS_C_NULL_OID_SET, GSS_C_ACCEPT, &server_creds, NULL, NULL); if (GSS_ERROR (maj_stat)) { fail ("gss_acquire_cred"); display_status ("acquire credentials", maj_stat, min_stat); } for (i = 0; i < 3; i++) { /* Start client. */ switch (i) { case 0: maj_stat = gss_init_sec_context (&min_stat, GSS_C_NO_CREDENTIAL, &cctx, servername, GSS_KRB5, GSS_C_MUTUAL_FLAG | GSS_C_REPLAY_FLAG | GSS_C_SEQUENCE_FLAG, 0, GSS_C_NO_CHANNEL_BINDINGS, GSS_C_NO_BUFFER, NULL, &bufdesc2, NULL, NULL); if (maj_stat != GSS_S_CONTINUE_NEEDED) fail ("loop 0 init failure\n"); break; case 1: /* Default OID, channel bindings. */ maj_stat = gss_init_sec_context (&min_stat, GSS_C_NO_CREDENTIAL, &cctx, servername, GSS_C_NO_OID, GSS_C_MUTUAL_FLAG | GSS_C_REPLAY_FLAG | GSS_C_SEQUENCE_FLAG, 0, &cb, GSS_C_NO_BUFFER, NULL, &bufdesc2, NULL, NULL); if (maj_stat != GSS_S_CONTINUE_NEEDED) fail ("loop 0 init failure\n"); break; case 2: /* No mutual authentication. */ maj_stat = gss_init_sec_context (&min_stat, GSS_C_NO_CREDENTIAL, &cctx, servername, GSS_KRB5, GSS_C_REPLAY_FLAG | GSS_C_CONF_FLAG | GSS_C_SEQUENCE_FLAG, 0, GSS_C_NO_CHANNEL_BINDINGS, GSS_C_NO_BUFFER, NULL, &bufdesc2, &ret_flags, NULL); if (ret_flags != (GSS_C_REPLAY_FLAG | GSS_C_CONF_FLAG | GSS_C_SEQUENCE_FLAG | GSS_C_PROT_READY_FLAG)) fail ("loop 2 ret_flags failure (%d)\n", ret_flags); if (maj_stat != GSS_S_COMPLETE) fail ("loop 1 init failure\n"); break; default: fail ("default?!\n"); break; } if (GSS_ERROR (maj_stat)) { fail ("gss_accept_sec_context failure\n"); display_status ("accept_sec_context", maj_stat, min_stat); } if (debug) { char *p = bufdesc2.value; Shishi_asn1 apreq = shishi_der2asn1_apreq (handle, p + 17, bufdesc2.length - 17); printf ("\nClient AP-REQ:\n\n"); shishi_apreq_print (handle, stdout, apreq); } /* Start server. */ switch (i) { case 0: maj_stat = gss_accept_sec_context (&min_stat, &sctx, server_creds, &bufdesc2, GSS_C_NO_CHANNEL_BINDINGS, &name, NULL, &bufdesc, &ret_flags, &time_rec, NULL); if (ret_flags != (GSS_C_MUTUAL_FLAG | /* XXX GSS_C_REPLAY_FLAG | GSS_C_SEQUENCE_FLAG | */ GSS_C_PROT_READY_FLAG)) fail ("loop 0 accept flag failure (%d)\n", ret_flags); break; case 1: maj_stat = gss_accept_sec_context (&min_stat, &sctx, server_creds, &bufdesc2, &cb, &name, NULL, &bufdesc, &ret_flags, &time_rec, NULL); break; case 2: maj_stat = gss_accept_sec_context (&min_stat, &sctx, server_creds, &bufdesc2, GSS_C_NO_CHANNEL_BINDINGS, &name, NULL, &bufdesc, &ret_flags, &time_rec, NULL); break; default: fail ("default?!\n"); break; } if (GSS_ERROR (maj_stat)) { fail ("gss_accept_sec_context failure\n"); display_status ("accept_sec_context", maj_stat, min_stat); } if (debug) { char *p = bufdesc2.value; Shishi_asn1 aprep = shishi_der2asn1_aprep (handle, p + 15, bufdesc.length - 15); printf ("\nServer AP-REP:\n\n"); shishi_aprep_print (handle, stdout, aprep); } switch (i) { case 0: maj_stat = gss_init_sec_context (&min_stat, GSS_C_NO_CREDENTIAL, &cctx, servername, GSS_KRB5, GSS_C_MUTUAL_FLAG | GSS_C_REPLAY_FLAG | GSS_C_SEQUENCE_FLAG, 0, GSS_C_NO_CHANNEL_BINDINGS, &bufdesc, NULL, &bufdesc2, NULL, NULL); break; case 1: /* Check ret_flags. */ maj_stat = gss_init_sec_context (&min_stat, GSS_C_NO_CREDENTIAL, &cctx, servername, GSS_KRB5, GSS_C_MUTUAL_FLAG | GSS_C_REPLAY_FLAG | GSS_C_SEQUENCE_FLAG, 0, GSS_C_NO_CHANNEL_BINDINGS, &bufdesc, NULL, &bufdesc2, &ret_flags, &time_rec); if (ret_flags != (GSS_C_MUTUAL_FLAG | GSS_C_REPLAY_FLAG | GSS_C_SEQUENCE_FLAG | GSS_C_PROT_READY_FLAG)) fail ("loop 1 ret_flags failure (%d)\n", ret_flags); break; /* No case 2. */ default: break; } if (GSS_ERROR (maj_stat)) { fail ("gss_init_sec_context failure (2)\n"); display_status ("init_sec_context", maj_stat, min_stat); } { gss_buffer_desc pt, pt2, ct; int conf_state; gss_qop_t qop_state; pt.value = (char *) "foo"; pt.length = strlen (pt.value) + 1; maj_stat = gss_wrap (&min_stat, cctx, 0, 0, &pt, &conf_state, &ct); if (GSS_ERROR (maj_stat)) { fail ("client gss_wrap failure\n"); display_status ("client wrap", maj_stat, min_stat); } maj_stat = gss_unwrap (&min_stat, sctx, &ct, &pt2, &conf_state, &qop_state); if (GSS_ERROR (maj_stat)) { fail ("server gss_unwrap failure\n"); display_status ("client wrap", maj_stat, min_stat); } if (pt.length != pt2.length || memcmp (pt2.value, pt.value, pt.length) != 0) fail ("wrap+unwrap failed (%d, %d, %.*s)\n", (int) pt.length, (int) pt2.length, (int) pt2.length, (char *) pt2.value); gss_release_buffer (&min_stat, &ct); gss_release_buffer (&min_stat, &pt2); } maj_stat = gss_delete_sec_context (&min_stat, &cctx, GSS_C_NO_BUFFER); if (GSS_ERROR (maj_stat)) { fail ("client gss_delete_sec_context failure\n"); display_status ("client delete_sec_context", maj_stat, min_stat); } maj_stat = gss_delete_sec_context (&min_stat, &sctx, GSS_C_NO_BUFFER); if (GSS_ERROR (maj_stat)) { fail ("server gss_delete_sec_context failure\n"); display_status ("server delete_sec_context", maj_stat, min_stat); } success ("loop %d ok\n", (int) i); } /* Clean up. */ maj_stat = gss_release_cred (&min_stat, &server_creds); if (GSS_ERROR (maj_stat)) { fail ("gss_release_cred"); display_status ("release credentials", maj_stat, min_stat); } maj_stat = gss_release_name (&min_stat, &servername); if (GSS_ERROR (maj_stat)) { fail ("gss_release_name failure\n"); display_status ("gss_release_name", maj_stat, min_stat); } shishi_done (handle); /* We're done. */ if (debug) printf ("Kerberos 5 security context self tests done with %d errors\n", error_count); return error_count ? 1 : 0; } gss-1.0.3/tests/saslname.c0000664000000000000000000001357412415506237012330 00000000000000/* saslname.c --- Test of new SASL GS2 related GSS-API functions * Copyright (C) 2003-2014 Simon Josefsson * * This file is part of the Generic Security Service (GSS). * * GSS 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. * * GSS 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 GSS; if not, see http://www.gnu.org/licenses or write to * the Free Software Foundation, Inc., 51 Franklin Street, Fifth * Floor, Boston, MA 02110-1301, USA. * */ #include "config.h" #include #include #include #include #include /* Get GSS prototypes. */ #include #include "utils.c" int main (int argc, char *argv[]) { gss_uint32 maj_stat, min_stat; gss_buffer_desc bufdesc; gss_OID oid; do if (strcmp (argv[argc - 1], "-v") == 0 || strcmp (argv[argc - 1], "--verbose") == 0) debug = 1; else if (strcmp (argv[argc - 1], "-b") == 0 || strcmp (argv[argc - 1], "--break-on-error") == 0) break_on_error = 1; else if (strcmp (argv[argc - 1], "-h") == 0 || strcmp (argv[argc - 1], "-?") == 0 || strcmp (argv[argc - 1], "--help") == 0) { printf ("Usage: %s [-vbh?] [--verbose] [--break-on-error] [--help]\n", argv[0]); return 1; } while (argc-- > 1); maj_stat = gss_inquire_mech_for_saslname (&min_stat, NULL, NULL); if (maj_stat == GSS_S_CALL_INACCESSIBLE_READ) success ("gss_inquire_mech_for_saslname (NULL, NULL) success\n"); else fail ("gss_inquire_mech_for_saslname (NULL, NULL) failed (%d,%d)\n", maj_stat, min_stat); bufdesc.value = NULL; bufdesc.length = 0; maj_stat = gss_inquire_mech_for_saslname (&min_stat, &bufdesc, NULL); if (maj_stat == GSS_S_BAD_MECH) success ("gss_inquire_mech_for_saslname (EMPTY, NULL) success\n"); else fail ("gss_inquire_mech_for_saslname (EMPTY, NULL) failed (%d,%d)\n", maj_stat, min_stat); #ifdef USE_KERBEROS5 bufdesc.length = 8; bufdesc.value = malloc (bufdesc.length); memcpy (bufdesc.value, "GS2-KRB5", bufdesc.length); maj_stat = gss_inquire_mech_for_saslname (&min_stat, &bufdesc, NULL); if (maj_stat == GSS_S_COMPLETE) success ("gss_inquire_mech_for_saslname (GS2-KRB5, NULL) success\n"); else fail ("gss_inquire_mech_for_saslname (GS2-KRB5, NULL) failed (%d,%d)\n", maj_stat, min_stat); maj_stat = gss_inquire_mech_for_saslname (&min_stat, &bufdesc, &oid); if (maj_stat == GSS_S_COMPLETE) success ("gss_inquire_mech_for_saslname (GS2-KRB5, OID) success\n"); else fail ("gss_inquire_mech_for_saslname (GS2-KRB5, OID) failed (%d,%d)\n", maj_stat, min_stat); if (oid != GSS_KRB5 || !gss_oid_equal (oid, GSS_KRB5)) fail ("GS2-OID not Krb5?!\n"); free (bufdesc.value); #endif maj_stat = gss_inquire_saslname_for_mech (&min_stat, NULL, NULL, NULL, NULL); if (maj_stat == GSS_S_CALL_INACCESSIBLE_READ) success ("gss_inquire_saslname_for_mech (NULL) success\n"); else fail ("gss_inquire_saslname_for_mech (NULL) failed (%d,%d)\n", maj_stat, min_stat); maj_stat = gss_inquire_saslname_for_mech (&min_stat, GSS_C_NT_USER_NAME, NULL, NULL, NULL); if (maj_stat == GSS_S_BAD_MECH) success ("gss_inquire_saslname_for_mech (NT_USER_NAME) success\n"); else fail ("gss_inquire_saslname_for_mech (NT_USER_NAME) failed (%d,%d)\n", maj_stat, min_stat); #ifdef USE_KERBEROS5 maj_stat = gss_inquire_saslname_for_mech (&min_stat, GSS_KRB5, NULL, NULL, NULL); if (maj_stat == GSS_S_COMPLETE) success ("gss_inquire_saslname_for_mech (GSS-KRB5) success\n"); else fail ("gss_inquire_saslname_for_mech (GSS-KRB5) failed (%d,%d)\n", maj_stat, min_stat); bufdesc.value = NULL; bufdesc.length = 0; maj_stat = gss_inquire_saslname_for_mech (&min_stat, GSS_KRB5, &bufdesc, NULL, NULL); if (maj_stat == GSS_S_COMPLETE) success ("gss_inquire_saslname_for_mech (GSS-KRB5) success: %.*s\n", (int) bufdesc.length, (char *) bufdesc.value); else fail ("gss_inquire_saslname_for_mech (GSS-KRB5) failed (%d,%d)\n", maj_stat, min_stat); maj_stat = gss_release_buffer (&min_stat, &bufdesc); if (maj_stat == GSS_S_COMPLETE) success ("gss_release_buffer() OK\n"); else fail ("gss_release_buffer() failed (%d,%d)\n", maj_stat, min_stat); maj_stat = gss_inquire_saslname_for_mech (&min_stat, GSS_KRB5, NULL, &bufdesc, NULL); if (maj_stat == GSS_S_COMPLETE) success ("gss_inquire_saslname_for_mech (GSS-KRB5-2) success: %.*s\n", (int) bufdesc.length, (char *) bufdesc.value); else fail ("gss_inquire_saslname_for_mech (GSS-KRB5-2) failed (%d,%d)\n", maj_stat, min_stat); maj_stat = gss_release_buffer (&min_stat, &bufdesc); if (maj_stat == GSS_S_COMPLETE) success ("gss_release_buffer() OK\n"); else fail ("gss_release_buffer() failed (%d,%d)\n", maj_stat, min_stat); maj_stat = gss_inquire_saslname_for_mech (&min_stat, GSS_KRB5, NULL, NULL, &bufdesc); if (maj_stat == GSS_S_COMPLETE) success ("gss_inquire_saslname_for_mech (GSS-KRB5-3) success: %.*s\n", (int) bufdesc.length, (char *) bufdesc.value); else fail ("gss_inquire_saslname_for_mech (GSS-KRB5-3) failed (%d,%d)\n", maj_stat, min_stat); maj_stat = gss_release_buffer (&min_stat, &bufdesc); if (maj_stat == GSS_S_COMPLETE) success ("gss_release_buffer() OK\n"); else fail ("gss_release_buffer() failed (%d,%d)\n", maj_stat, min_stat); #endif if (debug) printf ("Basic self tests done with %d errors\n", error_count); return error_count ? 1 : 0; } gss-1.0.3/tests/krb5context.tkt0000664000000000000000000002166212012453517013345 00000000000000name:NULL type:SEQUENCE name:pvno type:INTEGER value:0x05 name:msg-type type:INTEGER value:0x0b name:crealm type:GENERALSTRING value:4a4f53454653534f4e2e4f5247 name:cname type:SEQUENCE name:name-type type:INTEGER value:0x00 name:name-string type:SEQ_OF name:NULL type:GENERALSTRING name:?1 type:GENERALSTRING value:6a6173 name:ticket type:SEQUENCE name:tkt-vno type:INTEGER value:0x05 name:realm type:GENERALSTRING value:4a4f53454653534f4e2e4f5247 name:sname type:SEQUENCE name:name-type type:INTEGER value:0x01 name:name-string type:SEQ_OF name:NULL type:GENERALSTRING name:?1 type:GENERALSTRING value:6b7262746774 name:?2 type:GENERALSTRING value:4a4f53454653534f4e2e4f5247 name:enc-part type:SEQUENCE name:etype type:INTEGER value:0x03 name:cipher type:OCT_STR value:2cfc45fc973b8a8f8dc9dbdba1e5b7fc6d1c6d7929abb91ddac6c6dc5a96eafdbf38d24b2e4e8847215b2d47c771310b6f2ccf6ad4d2a961d37f466810c6f66941e776bdfeaa712a78b346de634efb3e524c36877bf9e393c615f052cf6dadd256304894b93a77d891a7fa738c636146c35fa379b7c4bc9fbde7224bd45d992ab9c5ac3c041419872beaec83c6fa1e95 name:enc-part type:SEQUENCE name:etype type:INTEGER value:0x03 name:cipher type:OCT_STR value:db294db40293d895918c50032d1666b0e0eb2408202a9282d68173af833a32a412ceb91a51f29aadc2913de2b01e779b1dd85528151653646b14c4be2b93a2fccc906011a024a975153acc9b6be255093d5ce7912c651bf4cb04b041e60f04d00b6364b4023b3284f436ef1eeaa7aae15d77ce643daff4e764433c1af43c4591d23e2945d0b27b9709e3c79629484c1e9aefba783570dff7848e6c1b3f861de74a89250fbd125ab2 -----BEGIN SHISHI KDC-REP----- a4IBzjCCAcqgAwIBBaEDAgELow8bDUpPU0VGU1NPTi5PUkekEDAOoAMCAQChBzAF GwNqYXOlgeFhgd4wgdugAwIBBaEPGw1KT1NFRlNTT04uT1JHoiIwIKADAgEBoRkw FxsGa3JidGd0Gw1KT1NFRlNTT04uT1JHo4GeMIGboAMCAQOigZMEgZAs/EX8lzuK j43J29uh5bf8bRxteSmruR3axsbcWpbq/b840ksuTohHIVstR8dxMQtvLM9q1NKp YdN/RmgQxvZpQed2vf6qcSp4s0beY077PlJMNod7+eOTxhXwUs9trdJWMEiUuTp3 2JGn+nOMY2FGw1+jebfEvJ+95yJL1F2ZKrnFrDwEFBmHK+rsg8b6HpWmgbYwgbOg AwIBA6KBqwSBqNspTbQCk9iVkYxQAy0WZrDg6yQIICqSgtaBc6+DOjKkEs65GlHy mq3CkT3isB53mx3YVSgVFlNkaxTEviuTovzMkGARoCSpdRU6zJtr4lUJPVznkSxl G/TLBLBB5g8E0AtjZLQCOzKE9DbvHuqnquFdd85kPa/052RDPBr0PEWR0j4pRdCy e5cJ48eWKUhMHprvung1cN/3hI5sGz+GHedKiSUPvRJasg== -----END SHISHI KDC-REP----- name:NULL type:SEQUENCE name:key type:SEQUENCE name:keytype type:INTEGER value:0x03 name:keyvalue type:OCT_STR value:d63e808cfe7f643d name:last-req type:SEQ_OF name:NULL type:SEQUENCE name:lr-type type:INTEGER name:lr-value type:TIME name:nonce type:INTEGER value:0x0c418523 name:flags type:BIT_STR value(32):00400000 name:authtime type:TIME value:20040711155558Z name:endtime type:TIME value:20240711155558Z name:srealm type:GENERALSTRING value:4a4f53454653534f4e2e4f5247 name:sname type:SEQUENCE name:name-type type:INTEGER value:0x01 name:name-string type:SEQ_OF name:NULL type:GENERALSTRING name:?1 type:GENERALSTRING value:6b7262746774 name:?2 type:GENERALSTRING value:4a4f53454653534f4e2e4f5247 -----BEGIN SHISHI EncKDCRepPart----- eYGIMIGFoBMwEaADAgEDoQoECNY+gIz+f2Q9oQIwAKIGAgQMQYUjpAcDBQAAQAAA pREYDzIwMDQwNzExMTU1NTU4WqcRGA8yMDI0MDcxMTE1NTU1OFqpDxsNSk9TRUZT U09OLk9SR6oiMCCgAwIBAaEZMBcbBmtyYnRndBsNSk9TRUZTU09OLk9SRw== -----END SHISHI EncKDCRepPart----- name:NULL type:SEQUENCE name:tkt-vno type:INTEGER value:0x05 name:realm type:GENERALSTRING value:4a4f53454653534f4e2e4f5247 name:sname type:SEQUENCE name:name-type type:INTEGER value:0x01 name:name-string type:SEQ_OF name:NULL type:GENERALSTRING name:?1 type:GENERALSTRING value:6b7262746774 name:?2 type:GENERALSTRING value:4a4f53454653534f4e2e4f5247 name:enc-part type:SEQUENCE name:etype type:INTEGER value:0x03 name:cipher type:OCT_STR value:2cfc45fc973b8a8f8dc9dbdba1e5b7fc6d1c6d7929abb91ddac6c6dc5a96eafdbf38d24b2e4e8847215b2d47c771310b6f2ccf6ad4d2a961d37f466810c6f66941e776bdfeaa712a78b346de634efb3e524c36877bf9e393c615f052cf6dadd256304894b93a77d891a7fa738c636146c35fa379b7c4bc9fbde7224bd45d992ab9c5ac3c041419872beaec83c6fa1e95 -----BEGIN SHISHI Ticket----- YYHeMIHboAMCAQWhDxsNSk9TRUZTU09OLk9SR6IiMCCgAwIBAaEZMBcbBmtyYnRn dBsNSk9TRUZTU09OLk9SR6OBnjCBm6ADAgEDooGTBIGQLPxF/Jc7io+NydvboeW3 /G0cbXkpq7kd2sbG3FqW6v2/ONJLLk6IRyFbLUfHcTELbyzPatTSqWHTf0ZoEMb2 aUHndr3+qnEqeLNG3mNO+z5STDaHe/njk8YV8FLPba3SVjBIlLk6d9iRp/pzjGNh RsNfo3m3xLyfveciS9RdmSq5xaw8BBQZhyvq7IPG+h6V -----END SHISHI Ticket----- name:NULL type:SEQUENCE name:pvno type:INTEGER value:0x05 name:msg-type type:INTEGER value:0x0d name:crealm type:GENERALSTRING value:4a4f53454653534f4e2e4f5247 name:cname type:SEQUENCE name:name-type type:INTEGER value:0x00 name:name-string type:SEQ_OF name:NULL type:GENERALSTRING name:?1 type:GENERALSTRING value:6a6173 name:ticket type:SEQUENCE name:tkt-vno type:INTEGER value:0x05 name:realm type:GENERALSTRING value:4a4f53454653534f4e2e4f5247 name:sname type:SEQUENCE name:name-type type:INTEGER value:0x01 name:name-string type:SEQ_OF name:NULL type:GENERALSTRING name:?1 type:GENERALSTRING value:686f7374 name:?2 type:GENERALSTRING value:6c617474652e6a6f73656673736f6e2e6f7267 name:enc-part type:SEQUENCE name:etype type:INTEGER value:0x03 name:cipher type:OCT_STR value:80f8af4800aecb22c4852cc25cad377332375c7365f4eca15a99c1c13ff785be023e7d0315bd53d2937541aada9b672c62b1df632d33cb85de83e7e7efa2f0fa6551dcab98ac0a910fdb916ea816554fb9aed666133a58984be22d37da46d98252b883a0acee17d8c98c097428866a0906a1dc70c1909eb511618fdadf8c435c39ec154a564a1a2b7508051c663ca8a5 name:enc-part type:SEQUENCE name:etype type:INTEGER value:0x03 name:cipher type:OCT_STR value:87359dbbdd34da11cc17e22e1edb181f14be09749c81af24bb00c0ebe4ae9132449e710a4c455b28f48509ca01ef3ff883c7d9da57bca4e37959e45c1e3fca2355236c3edc87233d30577d5d79f5395d29133c44cac7e5af077d0f40c4e8ab1134c86dad8ebc7251e8178e3f8df4eb3ae00760889716ff4443a40d1ba5995d3a48bea574f41a019fc8467a944f3c700233a6fe42e42057b6e4419cd173e483c8cf3119c39e064cda -----BEGIN SHISHI KDC-REP----- bYIB0jCCAc6gAwIBBaEDAgENow8bDUpPU0VGU1NPTi5PUkekEDAOoAMCAQChBzAF GwNqYXOlgeVhgeIwgd+gAwIBBaEPGw1KT1NFRlNTT04uT1JHoiYwJKADAgEBoR0w GxsEaG9zdBsTbGF0dGUuam9zZWZzc29uLm9yZ6OBnjCBm6ADAgEDooGTBIGQgPiv SACuyyLEhSzCXK03czI3XHNl9OyhWpnBwT/3hb4CPn0DFb1T0pN1Qaram2csYrHf Yy0zy4Xeg+fn76Lw+mVR3KuYrAqRD9uRbqgWVU+5rtZmEzpYmEviLTfaRtmCUriD oKzuF9jJjAl0KIZqCQah3HDBkJ61EWGP2t+MQ1w57BVKVkoaK3UIBRxmPKilpoG2 MIGzoAMCAQOigasEgaiHNZ273TTaEcwX4i4e2xgfFL4JdJyBryS7AMDr5K6RMkSe cQpMRVso9IUJygHvP/iDx9naV7yk43lZ5FweP8ojVSNsPtyHIz0wV31defU5XSkT PETKx+WvB30PQMToqxE0yG2tjrxyUegXjj+N9Os64AdgiJcW/0RDpA0bpZldOki+ pXT0GgGfyEZ6lE88cAIzpv5C5CBXtuRBnNFz5IPIzzEZw54GTNo= -----END SHISHI KDC-REP----- name:NULL type:SEQUENCE name:key type:SEQUENCE name:keytype type:INTEGER value:0x03 name:keyvalue type:OCT_STR value:37705d1c54a84683 name:last-req type:SEQ_OF name:NULL type:SEQUENCE name:lr-type type:INTEGER name:lr-value type:TIME name:nonce type:INTEGER value:0x22cc41a9 name:flags type:BIT_STR value(32):00000000 name:authtime type:TIME value:20040711155559Z name:endtime type:TIME value:20240711155558Z name:srealm type:GENERALSTRING value:4a4f53454653534f4e2e4f5247 name:sname type:SEQUENCE name:name-type type:INTEGER value:0x01 name:name-string type:SEQ_OF name:NULL type:GENERALSTRING name:?1 type:GENERALSTRING value:686f7374 name:?2 type:GENERALSTRING value:6c617474652e6a6f73656673736f6e2e6f7267 -----BEGIN SHISHI EncKDCRepPart----- eYGMMIGJoBMwEaADAgEDoQoECDdwXRxUqEaDoQIwAKIGAgQizEGppAcDBQAAAAAA pREYDzIwMDQwNzExMTU1NTU5WqcRGA8yMDI0MDcxMTE1NTU1OFqpDxsNSk9TRUZT U09OLk9SR6omMCSgAwIBAaEdMBsbBGhvc3QbE2xhdHRlLmpvc2Vmc3Nvbi5vcmc= -----END SHISHI EncKDCRepPart----- name:NULL type:SEQUENCE name:tkt-vno type:INTEGER value:0x05 name:realm type:GENERALSTRING value:4a4f53454653534f4e2e4f5247 name:sname type:SEQUENCE name:name-type type:INTEGER value:0x01 name:name-string type:SEQ_OF name:NULL type:GENERALSTRING name:?1 type:GENERALSTRING value:686f7374 name:?2 type:GENERALSTRING value:6c617474652e6a6f73656673736f6e2e6f7267 name:enc-part type:SEQUENCE name:etype type:INTEGER value:0x03 name:cipher type:OCT_STR value:80f8af4800aecb22c4852cc25cad377332375c7365f4eca15a99c1c13ff785be023e7d0315bd53d2937541aada9b672c62b1df632d33cb85de83e7e7efa2f0fa6551dcab98ac0a910fdb916ea816554fb9aed666133a58984be22d37da46d98252b883a0acee17d8c98c097428866a0906a1dc70c1909eb511618fdadf8c435c39ec154a564a1a2b7508051c663ca8a5 -----BEGIN SHISHI Ticket----- YYHiMIHfoAMCAQWhDxsNSk9TRUZTU09OLk9SR6ImMCSgAwIBAaEdMBsbBGhvc3Qb E2xhdHRlLmpvc2Vmc3Nvbi5vcmejgZ4wgZugAwIBA6KBkwSBkID4r0gArssixIUs wlytN3MyN1xzZfTsoVqZwcE/94W+Aj59AxW9U9KTdUGq2ptnLGKx32MtM8uF3oPn 5++i8PplUdyrmKwKkQ/bkW6oFlVPua7WZhM6WJhL4i032kbZglK4g6Cs7hfYyYwJ dCiGagkGodxwwZCetRFhj9rfjENcOewVSlZKGit1CAUcZjyopQ== -----END SHISHI Ticket----- gss-1.0.3/tests/krb5context.key0000664000000000000000000000022412012453517013322 00000000000000-----BEGIN SHISHI KEY----- Keytype: 3 (des-cbc-md5) Principal: host/latte.josefsson.org Realm: JOSEFSSON.ORG s3WXrcITWPE= -----END SHISHI KEY----- gss-1.0.3/tests/Makefile.in0000644000000000000000000014213612415507622012420 00000000000000# Makefile.in generated by automake 1.14.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 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) 2003-2014 Simon Josefsson # # This file is part of the Generic Security Service (GSS). # # GSS 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. # # GSS 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 GSS; if not, see http://www.gnu.org/licenses or write to # the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, # Boston, MA 02110-1301, USA. VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ @KRB5_TRUE@am__append_1 = krb5context TESTS = $(am__EXEEXT_2) threadsafety check_PROGRAMS = $(am__EXEEXT_2) subdir = tests DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(dist_check_SCRIPTS) $(top_srcdir)/build-aux/depcomp \ $(top_srcdir)/build-aux/test-driver ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/src/gl/m4/base64.m4 \ $(top_srcdir)/src/gl/m4/errno_h.m4 \ $(top_srcdir)/src/gl/m4/error.m4 \ $(top_srcdir)/src/gl/m4/getopt.m4 \ $(top_srcdir)/src/gl/m4/gnulib-comp.m4 \ $(top_srcdir)/src/gl/m4/memchr.m4 \ $(top_srcdir)/src/gl/m4/mmap-anon.m4 \ $(top_srcdir)/src/gl/m4/msvc-inval.m4 \ $(top_srcdir)/src/gl/m4/msvc-nothrow.m4 \ $(top_srcdir)/src/gl/m4/nocrash.m4 \ $(top_srcdir)/src/gl/m4/off_t.m4 \ $(top_srcdir)/src/gl/m4/ssize_t.m4 \ $(top_srcdir)/src/gl/m4/stdarg.m4 \ $(top_srcdir)/src/gl/m4/stdbool.m4 \ $(top_srcdir)/src/gl/m4/stdio_h.m4 \ $(top_srcdir)/src/gl/m4/strerror.m4 \ $(top_srcdir)/src/gl/m4/sys_socket_h.m4 \ $(top_srcdir)/src/gl/m4/sys_types_h.m4 \ $(top_srcdir)/src/gl/m4/unistd_h.m4 \ $(top_srcdir)/src/gl/m4/version-etc.m4 \ $(top_srcdir)/lib/gl/m4/absolute-header.m4 \ $(top_srcdir)/lib/gl/m4/extensions.m4 \ $(top_srcdir)/lib/gl/m4/gnulib-comp.m4 \ $(top_srcdir)/lib/gl/m4/include_next.m4 \ $(top_srcdir)/lib/gl/m4/ld-output-def.m4 \ $(top_srcdir)/lib/gl/m4/stddef_h.m4 \ $(top_srcdir)/lib/gl/m4/string_h.m4 \ $(top_srcdir)/lib/gl/m4/strverscmp.m4 \ $(top_srcdir)/lib/gl/m4/warn-on-use.m4 \ $(top_srcdir)/gl/m4/00gnulib.m4 \ $(top_srcdir)/gl/m4/autobuild.m4 \ $(top_srcdir)/gl/m4/gnulib-common.m4 \ $(top_srcdir)/gl/m4/gnulib-comp.m4 \ $(top_srcdir)/gl/m4/ld-version-script.m4 \ $(top_srcdir)/gl/m4/manywarnings.m4 \ $(top_srcdir)/gl/m4/valgrind-tests.m4 \ $(top_srcdir)/gl/m4/warnings.m4 \ $(top_srcdir)/m4/extern-inline.m4 $(top_srcdir)/m4/gettext.m4 \ $(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \ $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.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/nls.m4 \ $(top_srcdir)/m4/pkg.m4 $(top_srcdir)/m4/po-suffix.m4 \ $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \ $(top_srcdir)/m4/wchar_t.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 = @KRB5_TRUE@am__EXEEXT_1 = krb5context$(EXEEXT) am__EXEEXT_2 = basic$(EXEEXT) saslname$(EXEEXT) $(am__EXEEXT_1) basic_SOURCES = basic.c basic_OBJECTS = basic.$(OBJEXT) basic_LDADD = $(LDADD) basic_DEPENDENCIES = ../lib/libgss.la AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = krb5context_SOURCES = krb5context.c krb5context_OBJECTS = krb5context.$(OBJEXT) am__DEPENDENCIES_1 = ../lib/libgss.la krb5context_DEPENDENCIES = $(am__DEPENDENCIES_1) saslname_SOURCES = saslname.c saslname_OBJECTS = saslname.$(OBJEXT) saslname_LDADD = $(LDADD) saslname_DEPENDENCIES = ../lib/libgss.la AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = 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) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = basic.c krb5context.c saslname.c DIST_SOURCES = basic.c krb5context.c saslname.c am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags am__tty_colors_dummy = \ mgn= red= grn= lgn= blu= brg= std=; \ am__color_tests=no am__tty_colors = { \ $(am__tty_colors_dummy); \ if test "X$(AM_COLOR_TESTS)" = Xno; then \ am__color_tests=no; \ elif test "X$(AM_COLOR_TESTS)" = Xalways; then \ am__color_tests=yes; \ elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \ am__color_tests=yes; \ fi; \ if test $$am__color_tests = yes; then \ red=''; \ grn=''; \ lgn=''; \ blu=''; \ mgn=''; \ brg=''; \ std=''; \ fi; \ } am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__recheck_rx = ^[ ]*:recheck:[ ]* am__global_test_result_rx = ^[ ]*:global-test-result:[ ]* am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]* # A command that, given a newline-separated list of test names on the # standard input, print the name of the tests that are to be re-run # upon "make recheck". am__list_recheck_tests = $(AWK) '{ \ recheck = 1; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ { \ if ((getline line2 < ($$0 ".log")) < 0) \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \ { \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \ { \ break; \ } \ }; \ if (recheck) \ print $$0; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # A command that, given a newline-separated list of test names on the # standard input, create the global log from their .trs and .log files. am__create_global_log = $(AWK) ' \ function fatal(msg) \ { \ print "fatal: making $@: " msg | "cat >&2"; \ exit 1; \ } \ function rst_section(header) \ { \ print header; \ len = length(header); \ for (i = 1; i <= len; i = i + 1) \ printf "="; \ printf "\n\n"; \ } \ { \ copy_in_global_log = 1; \ global_test_result = "RUN"; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".trs"); \ if (line ~ /$(am__global_test_result_rx)/) \ { \ sub("$(am__global_test_result_rx)", "", line); \ sub("[ ]*$$", "", line); \ global_test_result = line; \ } \ else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \ copy_in_global_log = 0; \ }; \ if (copy_in_global_log) \ { \ rst_section(global_test_result ": " $$0); \ while ((rc = (getline line < ($$0 ".log"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".log"); \ print line; \ }; \ printf "\n"; \ }; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # Restructured Text title. am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; } # Solaris 10 'make', and several other traditional 'make' implementations, # pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it # by disabling -e (using the XSI extension "set +e") if it's set. am__sh_e_setup = case $$- in *e*) set +e;; esac # Default flags passed to test drivers. am__common_driver_flags = \ --color-tests "$$am__color_tests" \ --enable-hard-errors "$$am__enable_hard_errors" \ --expect-failure "$$am__expect_failure" # To be inserted before the command running the test. Creates the # directory for the log if needed. Stores in $dir the directory # containing $f, in $tst the test, in $log the log. Executes the # developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and # passes TESTS_ENVIRONMENT. Set up options for the wrapper that # will run the test scripts (or their associated LOG_COMPILER, if # thy have one). am__check_pre = \ $(am__sh_e_setup); \ $(am__vpath_adj_setup) $(am__vpath_adj) \ $(am__tty_colors); \ srcdir=$(srcdir); export srcdir; \ case "$@" in \ */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \ *) am__odir=.;; \ esac; \ test "x$$am__odir" = x"." || test -d "$$am__odir" \ || $(MKDIR_P) "$$am__odir" || exit $$?; \ if test -f "./$$f"; then dir=./; \ elif test -f "$$f"; then dir=; \ else dir="$(srcdir)/"; fi; \ tst=$$dir$$f; log='$@'; \ if test -n '$(DISABLE_HARD_ERRORS)'; then \ am__enable_hard_errors=no; \ else \ am__enable_hard_errors=yes; \ fi; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \ am__expect_failure=yes;; \ *) \ am__expect_failure=no;; \ esac; \ $(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT) # A shell command to get the names of the tests scripts with any registered # extension removed (i.e., equivalently, the names of the test logs, with # the '.log' extension removed). The result is saved in the shell variable # '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly, # we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)", # since that might cause problem with VPATH rewrites for suffix-less tests. # See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'. am__set_TESTS_bases = \ bases='$(TEST_LOGS)'; \ bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \ bases=`echo $$bases` RECHECK_LOGS = $(TEST_LOGS) AM_RECURSIVE_TARGETS = check recheck TEST_SUITE_LOG = test-suite.log TEST_EXTENSIONS = @EXEEXT@ .test LOG_DRIVER = $(SHELL) $(top_srcdir)/build-aux/test-driver LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS) am__set_b = \ case '$@' in \ */*) \ case '$*' in \ */*) b='$*';; \ *) b=`echo '$@' | sed 's/\.log$$//'`; \ esac;; \ *) \ b='$*';; \ esac am__test_logs1 = $(TESTS:=.log) am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log) TEST_LOGS = $(am__test_logs2:.test.log=.log) TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/build-aux/test-driver TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \ $(TEST_LOG_FLAGS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ ARFLAGS = @ARFLAGS@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CONFIG_INCLUDE = @CONFIG_INCLUDE@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = -DLOCALEDIR=\"$(localedir)\" @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DLL_VERSION = @DLL_VERSION@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EMULTIHOP_HIDDEN = @EMULTIHOP_HIDDEN@ EMULTIHOP_VALUE = @EMULTIHOP_VALUE@ ENOLINK_HIDDEN = @ENOLINK_HIDDEN@ ENOLINK_VALUE = @ENOLINK_VALUE@ EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@ EOVERFLOW_VALUE = @EOVERFLOW_VALUE@ ERRNO_H = @ERRNO_H@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GETOPT_H = @GETOPT_H@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GNULIB_CHDIR = @GNULIB_CHDIR@ GNULIB_CHOWN = @GNULIB_CHOWN@ GNULIB_CLOSE = @GNULIB_CLOSE@ GNULIB_DPRINTF = @GNULIB_DPRINTF@ GNULIB_DUP = @GNULIB_DUP@ GNULIB_DUP2 = @GNULIB_DUP2@ GNULIB_DUP3 = @GNULIB_DUP3@ GNULIB_ENVIRON = @GNULIB_ENVIRON@ GNULIB_EUIDACCESS = @GNULIB_EUIDACCESS@ GNULIB_FACCESSAT = @GNULIB_FACCESSAT@ GNULIB_FCHDIR = @GNULIB_FCHDIR@ GNULIB_FCHOWNAT = @GNULIB_FCHOWNAT@ GNULIB_FCLOSE = @GNULIB_FCLOSE@ GNULIB_FDATASYNC = @GNULIB_FDATASYNC@ GNULIB_FDOPEN = @GNULIB_FDOPEN@ GNULIB_FFLUSH = @GNULIB_FFLUSH@ GNULIB_FFSL = @GNULIB_FFSL@ GNULIB_FFSLL = @GNULIB_FFSLL@ GNULIB_FGETC = @GNULIB_FGETC@ GNULIB_FGETS = @GNULIB_FGETS@ GNULIB_FOPEN = @GNULIB_FOPEN@ GNULIB_FPRINTF = @GNULIB_FPRINTF@ GNULIB_FPRINTF_POSIX = @GNULIB_FPRINTF_POSIX@ GNULIB_FPURGE = @GNULIB_FPURGE@ GNULIB_FPUTC = @GNULIB_FPUTC@ GNULIB_FPUTS = @GNULIB_FPUTS@ GNULIB_FREAD = @GNULIB_FREAD@ GNULIB_FREOPEN = @GNULIB_FREOPEN@ GNULIB_FSCANF = @GNULIB_FSCANF@ GNULIB_FSEEK = @GNULIB_FSEEK@ GNULIB_FSEEKO = @GNULIB_FSEEKO@ GNULIB_FSYNC = @GNULIB_FSYNC@ GNULIB_FTELL = @GNULIB_FTELL@ GNULIB_FTELLO = @GNULIB_FTELLO@ GNULIB_FTRUNCATE = @GNULIB_FTRUNCATE@ GNULIB_FWRITE = @GNULIB_FWRITE@ GNULIB_GETC = @GNULIB_GETC@ GNULIB_GETCHAR = @GNULIB_GETCHAR@ GNULIB_GETCWD = @GNULIB_GETCWD@ GNULIB_GETDELIM = @GNULIB_GETDELIM@ GNULIB_GETDOMAINNAME = @GNULIB_GETDOMAINNAME@ GNULIB_GETDTABLESIZE = @GNULIB_GETDTABLESIZE@ GNULIB_GETGROUPS = @GNULIB_GETGROUPS@ GNULIB_GETHOSTNAME = @GNULIB_GETHOSTNAME@ GNULIB_GETLINE = @GNULIB_GETLINE@ GNULIB_GETLOGIN = @GNULIB_GETLOGIN@ GNULIB_GETLOGIN_R = @GNULIB_GETLOGIN_R@ GNULIB_GETPAGESIZE = @GNULIB_GETPAGESIZE@ GNULIB_GETUSERSHELL = @GNULIB_GETUSERSHELL@ GNULIB_GL_SRCGL_UNISTD_H_GETOPT = @GNULIB_GL_SRCGL_UNISTD_H_GETOPT@ GNULIB_GROUP_MEMBER = @GNULIB_GROUP_MEMBER@ GNULIB_ISATTY = @GNULIB_ISATTY@ GNULIB_LCHOWN = @GNULIB_LCHOWN@ GNULIB_LINK = @GNULIB_LINK@ GNULIB_LINKAT = @GNULIB_LINKAT@ GNULIB_LSEEK = @GNULIB_LSEEK@ GNULIB_MBSCASECMP = @GNULIB_MBSCASECMP@ GNULIB_MBSCASESTR = @GNULIB_MBSCASESTR@ GNULIB_MBSCHR = @GNULIB_MBSCHR@ GNULIB_MBSCSPN = @GNULIB_MBSCSPN@ GNULIB_MBSLEN = @GNULIB_MBSLEN@ GNULIB_MBSNCASECMP = @GNULIB_MBSNCASECMP@ GNULIB_MBSNLEN = @GNULIB_MBSNLEN@ GNULIB_MBSPBRK = @GNULIB_MBSPBRK@ GNULIB_MBSPCASECMP = @GNULIB_MBSPCASECMP@ GNULIB_MBSRCHR = @GNULIB_MBSRCHR@ GNULIB_MBSSEP = @GNULIB_MBSSEP@ GNULIB_MBSSPN = @GNULIB_MBSSPN@ GNULIB_MBSSTR = @GNULIB_MBSSTR@ GNULIB_MBSTOK_R = @GNULIB_MBSTOK_R@ GNULIB_MEMCHR = @GNULIB_MEMCHR@ GNULIB_MEMMEM = @GNULIB_MEMMEM@ GNULIB_MEMPCPY = @GNULIB_MEMPCPY@ GNULIB_MEMRCHR = @GNULIB_MEMRCHR@ GNULIB_OBSTACK_PRINTF = @GNULIB_OBSTACK_PRINTF@ GNULIB_OBSTACK_PRINTF_POSIX = @GNULIB_OBSTACK_PRINTF_POSIX@ GNULIB_PCLOSE = @GNULIB_PCLOSE@ GNULIB_PERROR = @GNULIB_PERROR@ GNULIB_PIPE = @GNULIB_PIPE@ GNULIB_PIPE2 = @GNULIB_PIPE2@ GNULIB_POPEN = @GNULIB_POPEN@ GNULIB_PREAD = @GNULIB_PREAD@ GNULIB_PRINTF = @GNULIB_PRINTF@ GNULIB_PRINTF_POSIX = @GNULIB_PRINTF_POSIX@ GNULIB_PUTC = @GNULIB_PUTC@ GNULIB_PUTCHAR = @GNULIB_PUTCHAR@ GNULIB_PUTS = @GNULIB_PUTS@ GNULIB_PWRITE = @GNULIB_PWRITE@ GNULIB_RAWMEMCHR = @GNULIB_RAWMEMCHR@ GNULIB_READ = @GNULIB_READ@ GNULIB_READLINK = @GNULIB_READLINK@ GNULIB_READLINKAT = @GNULIB_READLINKAT@ GNULIB_REMOVE = @GNULIB_REMOVE@ GNULIB_RENAME = @GNULIB_RENAME@ GNULIB_RENAMEAT = @GNULIB_RENAMEAT@ GNULIB_RMDIR = @GNULIB_RMDIR@ GNULIB_SCANF = @GNULIB_SCANF@ GNULIB_SETHOSTNAME = @GNULIB_SETHOSTNAME@ GNULIB_SLEEP = @GNULIB_SLEEP@ GNULIB_SNPRINTF = @GNULIB_SNPRINTF@ GNULIB_SPRINTF_POSIX = @GNULIB_SPRINTF_POSIX@ GNULIB_STDIO_H_NONBLOCKING = @GNULIB_STDIO_H_NONBLOCKING@ GNULIB_STDIO_H_SIGPIPE = @GNULIB_STDIO_H_SIGPIPE@ GNULIB_STPCPY = @GNULIB_STPCPY@ GNULIB_STPNCPY = @GNULIB_STPNCPY@ GNULIB_STRCASESTR = @GNULIB_STRCASESTR@ GNULIB_STRCHRNUL = @GNULIB_STRCHRNUL@ GNULIB_STRDUP = @GNULIB_STRDUP@ GNULIB_STRERROR = @GNULIB_STRERROR@ GNULIB_STRERROR_R = @GNULIB_STRERROR_R@ GNULIB_STRNCAT = @GNULIB_STRNCAT@ GNULIB_STRNDUP = @GNULIB_STRNDUP@ GNULIB_STRNLEN = @GNULIB_STRNLEN@ GNULIB_STRPBRK = @GNULIB_STRPBRK@ GNULIB_STRSEP = @GNULIB_STRSEP@ GNULIB_STRSIGNAL = @GNULIB_STRSIGNAL@ GNULIB_STRSTR = @GNULIB_STRSTR@ GNULIB_STRTOK_R = @GNULIB_STRTOK_R@ GNULIB_STRVERSCMP = @GNULIB_STRVERSCMP@ GNULIB_SYMLINK = @GNULIB_SYMLINK@ GNULIB_SYMLINKAT = @GNULIB_SYMLINKAT@ GNULIB_TMPFILE = @GNULIB_TMPFILE@ GNULIB_TTYNAME_R = @GNULIB_TTYNAME_R@ GNULIB_UNISTD_H_NONBLOCKING = @GNULIB_UNISTD_H_NONBLOCKING@ GNULIB_UNISTD_H_SIGPIPE = @GNULIB_UNISTD_H_SIGPIPE@ GNULIB_UNLINK = @GNULIB_UNLINK@ GNULIB_UNLINKAT = @GNULIB_UNLINKAT@ GNULIB_USLEEP = @GNULIB_USLEEP@ GNULIB_VASPRINTF = @GNULIB_VASPRINTF@ GNULIB_VDPRINTF = @GNULIB_VDPRINTF@ GNULIB_VFPRINTF = @GNULIB_VFPRINTF@ GNULIB_VFPRINTF_POSIX = @GNULIB_VFPRINTF_POSIX@ GNULIB_VFSCANF = @GNULIB_VFSCANF@ GNULIB_VPRINTF = @GNULIB_VPRINTF@ GNULIB_VPRINTF_POSIX = @GNULIB_VPRINTF_POSIX@ GNULIB_VSCANF = @GNULIB_VSCANF@ GNULIB_VSNPRINTF = @GNULIB_VSNPRINTF@ GNULIB_VSPRINTF_POSIX = @GNULIB_VSPRINTF_POSIX@ GNULIB_WRITE = @GNULIB_WRITE@ GREP = @GREP@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ HAVE_CHOWN = @HAVE_CHOWN@ HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@ HAVE_DECL_FCHDIR = @HAVE_DECL_FCHDIR@ HAVE_DECL_FDATASYNC = @HAVE_DECL_FDATASYNC@ HAVE_DECL_FPURGE = @HAVE_DECL_FPURGE@ HAVE_DECL_FSEEKO = @HAVE_DECL_FSEEKO@ HAVE_DECL_FTELLO = @HAVE_DECL_FTELLO@ HAVE_DECL_GETDELIM = @HAVE_DECL_GETDELIM@ HAVE_DECL_GETDOMAINNAME = @HAVE_DECL_GETDOMAINNAME@ HAVE_DECL_GETLINE = @HAVE_DECL_GETLINE@ HAVE_DECL_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_OBSTACK_PRINTF = @HAVE_DECL_OBSTACK_PRINTF@ HAVE_DECL_SETHOSTNAME = @HAVE_DECL_SETHOSTNAME@ HAVE_DECL_SNPRINTF = @HAVE_DECL_SNPRINTF@ HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@ HAVE_DECL_STRERROR_R = @HAVE_DECL_STRERROR_R@ HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@ HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@ HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@ HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@ HAVE_DECL_TTYNAME_R = @HAVE_DECL_TTYNAME_R@ HAVE_DECL_VSNPRINTF = @HAVE_DECL_VSNPRINTF@ HAVE_DPRINTF = @HAVE_DPRINTF@ HAVE_DUP2 = @HAVE_DUP2@ HAVE_DUP3 = @HAVE_DUP3@ HAVE_EUIDACCESS = @HAVE_EUIDACCESS@ HAVE_FACCESSAT = @HAVE_FACCESSAT@ HAVE_FCHDIR = @HAVE_FCHDIR@ HAVE_FCHOWNAT = @HAVE_FCHOWNAT@ HAVE_FDATASYNC = @HAVE_FDATASYNC@ HAVE_FFSL = @HAVE_FFSL@ HAVE_FFSLL = @HAVE_FFSLL@ HAVE_FSEEKO = @HAVE_FSEEKO@ HAVE_FSYNC = @HAVE_FSYNC@ HAVE_FTELLO = @HAVE_FTELLO@ HAVE_FTRUNCATE = @HAVE_FTRUNCATE@ 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_GROUP_MEMBER = @HAVE_GROUP_MEMBER@ HAVE_LCHOWN = @HAVE_LCHOWN@ HAVE_LIBSHISHI = @HAVE_LIBSHISHI@ HAVE_LINK = @HAVE_LINK@ HAVE_LINKAT = @HAVE_LINKAT@ HAVE_MBSLEN = @HAVE_MBSLEN@ HAVE_MEMCHR = @HAVE_MEMCHR@ HAVE_MEMPCPY = @HAVE_MEMPCPY@ HAVE_MSVC_INVALID_PARAMETER_HANDLER = @HAVE_MSVC_INVALID_PARAMETER_HANDLER@ HAVE_OS_H = @HAVE_OS_H@ HAVE_PCLOSE = @HAVE_PCLOSE@ HAVE_PIPE = @HAVE_PIPE@ HAVE_PIPE2 = @HAVE_PIPE2@ HAVE_POPEN = @HAVE_POPEN@ HAVE_PREAD = @HAVE_PREAD@ HAVE_PWRITE = @HAVE_PWRITE@ HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@ HAVE_READLINK = @HAVE_READLINK@ HAVE_READLINKAT = @HAVE_READLINKAT@ HAVE_RENAMEAT = @HAVE_RENAMEAT@ HAVE_SETHOSTNAME = @HAVE_SETHOSTNAME@ HAVE_SLEEP = @HAVE_SLEEP@ 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_STRVERSCMP = @HAVE_STRVERSCMP@ HAVE_SYMLINK = @HAVE_SYMLINK@ HAVE_SYMLINKAT = @HAVE_SYMLINKAT@ HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@ HAVE_UNISTD_H = @HAVE_UNISTD_H@ HAVE_UNLINKAT = @HAVE_UNLINKAT@ HAVE_USLEEP = @HAVE_USLEEP@ HAVE_VASPRINTF = @HAVE_VASPRINTF@ HAVE_VDPRINTF = @HAVE_VDPRINTF@ HAVE_WCHAR_T = @HAVE_WCHAR_T@ HAVE_WINSOCK2_H = @HAVE_WINSOCK2_H@ HAVE__BOOL = @HAVE__BOOL@ HELP2MAN = @HELP2MAN@ HTML_DIR = @HTML_DIR@ INCLUDE_GSS_KRB5 = @INCLUDE_GSS_KRB5@ INCLUDE_GSS_KRB5_EXT = @INCLUDE_GSS_KRB5_EXT@ 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@ INTLLIBS = @INTLLIBS@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBSHISHI = @LIBSHISHI@ LIBSHISHI_PREFIX = @LIBSHISHI_PREFIX@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBOBJS = @LTLIBOBJS@ LTLIBSHISHI = @LTLIBSHISHI@ LT_AGE = @LT_AGE@ LT_CURRENT = @LT_CURRENT@ LT_REVISION = @LT_REVISION@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = @NEXT_AS_FIRST_DIRECTIVE_ERRNO_H@ NEXT_AS_FIRST_DIRECTIVE_GETOPT_H = @NEXT_AS_FIRST_DIRECTIVE_GETOPT_H@ NEXT_AS_FIRST_DIRECTIVE_STDARG_H = @NEXT_AS_FIRST_DIRECTIVE_STDARG_H@ NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@ NEXT_AS_FIRST_DIRECTIVE_STDIO_H = @NEXT_AS_FIRST_DIRECTIVE_STDIO_H@ NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H@ NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@ NEXT_ERRNO_H = @NEXT_ERRNO_H@ NEXT_GETOPT_H = @NEXT_GETOPT_H@ NEXT_STDARG_H = @NEXT_STDARG_H@ NEXT_STDDEF_H = @NEXT_STDDEF_H@ NEXT_STDIO_H = @NEXT_STDIO_H@ NEXT_STRING_H = @NEXT_STRING_H@ NEXT_SYS_TYPES_H = @NEXT_SYS_TYPES_H@ NEXT_UNISTD_H = @NEXT_UNISTD_H@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ PKG_CONFIG = @PKG_CONFIG@ PMCCABE = @PMCCABE@ POSUB = @POSUB@ PO_SUFFIX = @PO_SUFFIX@ PRAGMA_COLUMNS = @PRAGMA_COLUMNS@ PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@ RANLIB = @RANLIB@ REPLACE_CHOWN = @REPLACE_CHOWN@ REPLACE_CLOSE = @REPLACE_CLOSE@ REPLACE_DPRINTF = @REPLACE_DPRINTF@ REPLACE_DUP = @REPLACE_DUP@ REPLACE_DUP2 = @REPLACE_DUP2@ REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@ REPLACE_FCLOSE = @REPLACE_FCLOSE@ REPLACE_FDOPEN = @REPLACE_FDOPEN@ REPLACE_FFLUSH = @REPLACE_FFLUSH@ REPLACE_FOPEN = @REPLACE_FOPEN@ REPLACE_FPRINTF = @REPLACE_FPRINTF@ REPLACE_FPURGE = @REPLACE_FPURGE@ REPLACE_FREOPEN = @REPLACE_FREOPEN@ REPLACE_FSEEK = @REPLACE_FSEEK@ REPLACE_FSEEKO = @REPLACE_FSEEKO@ REPLACE_FTELL = @REPLACE_FTELL@ REPLACE_FTELLO = @REPLACE_FTELLO@ REPLACE_FTRUNCATE = @REPLACE_FTRUNCATE@ REPLACE_GETCWD = @REPLACE_GETCWD@ REPLACE_GETDELIM = @REPLACE_GETDELIM@ REPLACE_GETDOMAINNAME = @REPLACE_GETDOMAINNAME@ REPLACE_GETDTABLESIZE = @REPLACE_GETDTABLESIZE@ REPLACE_GETGROUPS = @REPLACE_GETGROUPS@ REPLACE_GETLINE = @REPLACE_GETLINE@ REPLACE_GETLOGIN_R = @REPLACE_GETLOGIN_R@ REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@ REPLACE_ISATTY = @REPLACE_ISATTY@ REPLACE_LCHOWN = @REPLACE_LCHOWN@ REPLACE_LINK = @REPLACE_LINK@ REPLACE_LINKAT = @REPLACE_LINKAT@ REPLACE_LSEEK = @REPLACE_LSEEK@ REPLACE_MEMCHR = @REPLACE_MEMCHR@ REPLACE_MEMMEM = @REPLACE_MEMMEM@ REPLACE_NULL = @REPLACE_NULL@ REPLACE_OBSTACK_PRINTF = @REPLACE_OBSTACK_PRINTF@ REPLACE_PERROR = @REPLACE_PERROR@ REPLACE_POPEN = @REPLACE_POPEN@ REPLACE_PREAD = @REPLACE_PREAD@ REPLACE_PRINTF = @REPLACE_PRINTF@ REPLACE_PWRITE = @REPLACE_PWRITE@ REPLACE_READ = @REPLACE_READ@ REPLACE_READLINK = @REPLACE_READLINK@ REPLACE_REMOVE = @REPLACE_REMOVE@ REPLACE_RENAME = @REPLACE_RENAME@ REPLACE_RENAMEAT = @REPLACE_RENAMEAT@ REPLACE_RMDIR = @REPLACE_RMDIR@ REPLACE_SLEEP = @REPLACE_SLEEP@ REPLACE_SNPRINTF = @REPLACE_SNPRINTF@ REPLACE_SPRINTF = @REPLACE_SPRINTF@ REPLACE_STDIO_READ_FUNCS = @REPLACE_STDIO_READ_FUNCS@ REPLACE_STDIO_WRITE_FUNCS = @REPLACE_STDIO_WRITE_FUNCS@ REPLACE_STPNCPY = @REPLACE_STPNCPY@ REPLACE_STRCASESTR = @REPLACE_STRCASESTR@ REPLACE_STRCHRNUL = @REPLACE_STRCHRNUL@ REPLACE_STRDUP = @REPLACE_STRDUP@ REPLACE_STRERROR = @REPLACE_STRERROR@ REPLACE_STRERROR_R = @REPLACE_STRERROR_R@ REPLACE_STRNCAT = @REPLACE_STRNCAT@ REPLACE_STRNDUP = @REPLACE_STRNDUP@ REPLACE_STRNLEN = @REPLACE_STRNLEN@ REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@ REPLACE_STRSTR = @REPLACE_STRSTR@ REPLACE_STRTOK_R = @REPLACE_STRTOK_R@ REPLACE_SYMLINK = @REPLACE_SYMLINK@ REPLACE_TMPFILE = @REPLACE_TMPFILE@ REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@ REPLACE_UNLINK = @REPLACE_UNLINK@ REPLACE_UNLINKAT = @REPLACE_UNLINKAT@ REPLACE_USLEEP = @REPLACE_USLEEP@ REPLACE_VASPRINTF = @REPLACE_VASPRINTF@ REPLACE_VDPRINTF = @REPLACE_VDPRINTF@ REPLACE_VFPRINTF = @REPLACE_VFPRINTF@ REPLACE_VPRINTF = @REPLACE_VPRINTF@ REPLACE_VSNPRINTF = @REPLACE_VSNPRINTF@ REPLACE_VSPRINTF = @REPLACE_VSPRINTF@ REPLACE_WRITE = @REPLACE_WRITE@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STDARG_H = @STDARG_H@ STDBOOL_H = @STDBOOL_H@ STDDEF_H = @STDDEF_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@ USE_NLS = @USE_NLS@ VALGRIND = @VALGRIND@ VERSION = @VERSION@ VERSION_MAJOR = @VERSION_MAJOR@ VERSION_MINOR = @VERSION_MINOR@ VERSION_NUMBER = @VERSION_NUMBER@ VERSION_PATCH = @VERSION_PATCH@ WARN_CFLAGS = @WARN_CFLAGS@ WERROR_CFLAGS = @WERROR_CFLAGS@ WINDOWS_64_BIT_OFF_T = @WINDOWS_64_BIT_OFF_T@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gl_LIBOBJS = @gl_LIBOBJS@ gl_LTLIBOBJS = @gl_LTLIBOBJS@ gltests_LIBOBJS = @gltests_LIBOBJS@ gltests_LTLIBOBJS = @gltests_LTLIBOBJS@ gltests_WITNESS = @gltests_WITNESS@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ libgl_LIBOBJS = @libgl_LIBOBJS@ libgl_LTLIBOBJS = @libgl_LTLIBOBJS@ libgltests_LIBOBJS = @libgltests_LIBOBJS@ libgltests_LTLIBOBJS = @libgltests_LTLIBOBJS@ libgltests_WITNESS = @libgltests_WITNESS@ localedir = $(datadir)/locale localstatedir = @localstatedir@ 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@ srcgl_LIBOBJS = @srcgl_LIBOBJS@ srcgl_LTLIBOBJS = @srcgl_LTLIBOBJS@ srcgltests_LIBOBJS = @srcgltests_LIBOBJS@ srcgltests_LTLIBOBJS = @srcgltests_LTLIBOBJS@ srcgltests_WITNESS = @srcgltests_WITNESS@ 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_builddir)/lib/headers -I$(top_srcdir)/lib/headers AM_LDFLAGS = -no-install LDADD = ../lib/libgss.la @LTLIBINTL@ TESTS_ENVIRONMENT = \ SHISHI_KEYS=$(srcdir)/krb5context.key \ SHISHI_TICKETS=$(srcdir)/krb5context.tkt \ SHISHI_CONFIG=$(srcdir)/shishi.conf \ SHISHI_HOME=$(srcdir) \ SHISHI_USER=ignore-this-warning \ THREADSAFETY_FILES="$(top_srcdir)/lib/*.c $(top_srcdir)/lib/krb5/*.c" \ $(VALGRIND) buildtests = basic saslname $(am__append_1) dist_check_SCRIPTS = threadsafety krb5context_LDADD = $(LDADD) @LTLIBSHISHI@ EXTRA_DIST = krb5context.key krb5context.tkt utils.c shishi.conf all: all-am .SUFFIXES: .SUFFIXES: .c .lo .log .o .obj .test .test$(EXEEXT) .trs $(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 basic$(EXEEXT): $(basic_OBJECTS) $(basic_DEPENDENCIES) $(EXTRA_basic_DEPENDENCIES) @rm -f basic$(EXEEXT) $(AM_V_CCLD)$(LINK) $(basic_OBJECTS) $(basic_LDADD) $(LIBS) krb5context$(EXEEXT): $(krb5context_OBJECTS) $(krb5context_DEPENDENCIES) $(EXTRA_krb5context_DEPENDENCIES) @rm -f krb5context$(EXEEXT) $(AM_V_CCLD)$(LINK) $(krb5context_OBJECTS) $(krb5context_LDADD) $(LIBS) saslname$(EXEEXT): $(saslname_OBJECTS) $(saslname_DEPENDENCIES) $(EXTRA_saslname_DEPENDENCIES) @rm -f saslname$(EXEEXT) $(AM_V_CCLD)$(LINK) $(saslname_OBJECTS) $(saslname_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/basic.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/krb5context.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/saslname.Po@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags # Recover from deleted '.trs' file; this should ensure that # "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create # both 'foo.log' and 'foo.trs'. Break the recipe in two subshells # to avoid problems with "make -n". .log.trs: rm -f $< $@ $(MAKE) $(AM_MAKEFLAGS) $< # Leading 'am--fnord' is there to ensure the list of targets does not # expand to empty, as could happen e.g. with make check TESTS=''. am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck) am--force-recheck: @: $(TEST_SUITE_LOG): $(TEST_LOGS) @$(am__set_TESTS_bases); \ am__f_ok () { test -f "$$1" && test -r "$$1"; }; \ redo_bases=`for i in $$bases; do \ am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \ done`; \ if test -n "$$redo_bases"; then \ redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \ redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \ if $(am__make_dryrun); then :; else \ rm -f $$redo_logs && rm -f $$redo_results || exit 1; \ fi; \ fi; \ if test -n "$$am__remaking_logs"; then \ echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \ "recursion detected" >&2; \ else \ am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \ fi; \ if $(am__make_dryrun); then :; else \ st=0; \ errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \ for i in $$redo_bases; do \ test -f $$i.trs && test -r $$i.trs \ || { echo "$$errmsg $$i.trs" >&2; st=1; }; \ test -f $$i.log && test -r $$i.log \ || { echo "$$errmsg $$i.log" >&2; st=1; }; \ done; \ test $$st -eq 0 || exit 1; \ fi @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \ ws='[ ]'; \ results=`for b in $$bases; do echo $$b.trs; done`; \ test -n "$$results" || results=/dev/null; \ all=` grep "^$$ws*:test-result:" $$results | wc -l`; \ pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \ fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \ skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \ xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \ xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \ error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \ if test `expr $$fail + $$xpass + $$error` -eq 0; then \ success=true; \ else \ success=false; \ fi; \ br='==================='; br=$$br$$br$$br$$br; \ result_count () \ { \ if test x"$$1" = x"--maybe-color"; then \ maybe_colorize=yes; \ elif test x"$$1" = x"--no-color"; then \ maybe_colorize=no; \ else \ echo "$@: invalid 'result_count' usage" >&2; exit 4; \ fi; \ shift; \ desc=$$1 count=$$2; \ if test $$maybe_colorize = yes && test $$count -gt 0; then \ color_start=$$3 color_end=$$std; \ else \ color_start= color_end=; \ fi; \ echo "$${color_start}# $$desc $$count$${color_end}"; \ }; \ create_testsuite_report () \ { \ result_count $$1 "TOTAL:" $$all "$$brg"; \ result_count $$1 "PASS: " $$pass "$$grn"; \ result_count $$1 "SKIP: " $$skip "$$blu"; \ result_count $$1 "XFAIL:" $$xfail "$$lgn"; \ result_count $$1 "FAIL: " $$fail "$$red"; \ result_count $$1 "XPASS:" $$xpass "$$red"; \ result_count $$1 "ERROR:" $$error "$$mgn"; \ }; \ { \ echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \ $(am__rst_title); \ create_testsuite_report --no-color; \ echo; \ echo ".. contents:: :depth: 2"; \ echo; \ for b in $$bases; do echo $$b; done \ | $(am__create_global_log); \ } >$(TEST_SUITE_LOG).tmp || exit 1; \ mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \ if $$success; then \ col="$$grn"; \ else \ col="$$red"; \ test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \ fi; \ echo "$${col}$$br$${std}"; \ echo "$${col}Testsuite summary for $(PACKAGE_STRING)$${std}"; \ echo "$${col}$$br$${std}"; \ create_testsuite_report --maybe-color; \ echo "$$col$$br$$std"; \ if $$success; then :; else \ echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \ if test -n "$(PACKAGE_BUGREPORT)"; then \ echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \ fi; \ echo "$$col$$br$$std"; \ fi; \ $$success || exit 1 check-TESTS: @list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ log_list=`for i in $$bases; do echo $$i.log; done`; \ trs_list=`for i in $$bases; do echo $$i.trs; done`; \ log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \ exit $$?; recheck: all $(check_PROGRAMS) $(dist_check_SCRIPTS) @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ bases=`for i in $$bases; do echo $$i; done \ | $(am__list_recheck_tests)` || exit 1; \ log_list=`for i in $$bases; do echo $$i.log; done`; \ log_list=`echo $$log_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \ am__force_recheck=am--force-recheck \ TEST_LOGS="$$log_list"; \ exit $$? basic.log: basic$(EXEEXT) @p='basic$(EXEEXT)'; \ b='basic'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) saslname.log: saslname$(EXEEXT) @p='saslname$(EXEEXT)'; \ b='saslname'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) krb5context.log: krb5context$(EXEEXT) @p='krb5context$(EXEEXT)'; \ b='krb5context'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) threadsafety.log: threadsafety @p='threadsafety'; \ b='threadsafety'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) .test.log: @p='$<'; \ $(am__set_b); \ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) @am__EXEEXT_TRUE@.test$(EXEEXT).log: @am__EXEEXT_TRUE@ @p='$<'; \ @am__EXEEXT_TRUE@ $(am__set_b); \ @am__EXEEXT_TRUE@ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ @am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \ @am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ @am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) 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: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS) -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs) -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) 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 TAGS all all-am check check-TESTS check-am clean \ clean-checkPROGRAMS clean-generic clean-libtool cscopelist-am \ ctags ctags-am 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 \ recheck tags tags-am 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: gss-1.0.3/tests/shishi.conf0000664000000000000000000000001512012453517012474 00000000000000quick-random gss-1.0.3/tests/threadsafety0000775000000000000000000000366712415506237012774 00000000000000#!/bin/sh # Copyright (C) 2004-2014 Simon Josefsson # # 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 3 of the License, or # (at your option) any later version. # # This 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 file; if not, see http://www.gnu.org/licenses or # write to the Free Software Foundation, Inc., 51 Franklin Street, # Fifth Floor, Boston, MA 02110-1301, USA. FILES="$@" FILES=${FILES:-$THREADSAFETY_FILES} if test -z "$FILES"; then echo "Usage: $0 [FILE...]" exit 1 fi # http://www.opengroup.org/onlinepubs/009695399/functions/xsh_chap02_09.html UNSAFE="asctime basename catgets crypt ctime dbm_clearerr dbm_close dbm_delete dbm_error dbm_fetch dbm_firstkey dbm_nextkey dbm_open dbm_store dirname dlerror drand48 ecvt encrypt endgrent endpwent endutxent fcvt ftw gcvt getc_unlocked getchar_unlocked getdate getenv getgrent getgrgid getgrnam gethostbyaddr gethostbyname gethostent getlogin getnetbyaddr getnetbyname getnetent getopt getprotobyname getprotobynumber getprotoent getpwent getpwnam getpwuid getservbyname getservbyport getservent getutxent getutxid getutxline gmtime hcreate hdestroy hsearch inet_ntoa l64a lgamma lgammaf lgammal localeconv localtime lrand48 mrand48 nftw nl_langinfo ptsname putc_unlocked putchar_unlocked putenv pututxline rand readdir setenv setgrent setkey setpwent setutxent strerror strtok ttyname unsetenv wcstombs wctomb" 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 gss-1.0.3/configure0000755000000000000000000246720112415507617011131 00000000000000#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.69 for GNU Generic Security Service 1.0.3. # # Report bugs to . # # # Copyright (C) 1992-1996, 1998-2012 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. as_myself= 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 # Use a proper internal environment variable to ensure we don't fall # into an infinite loop, continuously re-executing ourselves. if test x"${_as_can_reexec}" != xno && test "x$CONFIG_SHELL" != x; then _as_can_reexec=no; export _as_can_reexec; # 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. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 as_fn_exit 255 fi # We don't want this to propagate to other subprocesses. { _as_can_reexec=; unset _as_can_reexec;} 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 test -x / || 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 test -n \"\${ZSH_VERSION+set}\${BASH_VERSION+set}\" || ( ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO PATH=/empty FPATH=/empty; export PATH FPATH test \"X\`printf %s \$ECHO\`\" = \"X\$ECHO\" \\ || test \"X\`print -r -- \$ECHO\`\" = \"X\$ECHO\" ) || 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 : export CONFIG_SHELL # 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. # Preserve -v and -x to the replacement shell. BASH_ENV=/dev/null ENV=/dev/null (unset BASH_ENV) >/dev/null 2>&1 && unset BASH_ENV ENV case $- in # (((( *v*x* | *x*v* ) as_opts=-vx ;; *v* ) as_opts=-v ;; *x* ) as_opts=-x ;; * ) as_opts= ;; esac exec $CONFIG_SHELL $as_opts "$as_myself" ${1+"$@"} # Admittedly, this is quite paranoid, since all the known shells bail # out after a failed `exec'. $as_echo "$0: could not re-execute with $CONFIG_SHELL" >&2 exit 255 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-gss@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_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_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 STATUS 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=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&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; } # If we had to re-execute with $CONFIG_SHELL, we're ensured to have # already done that, so ensure we don't try to do so again and fall # in an infinite loop. This has already happened in practice. _as_can_reexec=no; export _as_can_reexec # 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 -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' 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 as_test_x='test -x' as_executable_p=as_fn_executable_p # 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'" SHELL=${CONFIG_SHELL-/bin/sh} test -n "$DJDIR" || exec 7<&0 &1 # Name of the host. # hostname on some systems (SVR3.2, old GNU/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 Generic Security Service' PACKAGE_TARNAME='gss' PACKAGE_VERSION='1.0.3' PACKAGE_STRING='GNU Generic Security Service 1.0.3' PACKAGE_BUGREPORT='bug-gss@gnu.org' PACKAGE_URL='http://www.gnu.org/software/gss/' # Factoring default headers for most tests. ac_includes_default="\ #include #ifdef HAVE_SYS_TYPES_H # include #endif #ifdef HAVE_SYS_STAT_H # include #endif #ifdef STDC_HEADERS # include # include #else # ifdef HAVE_STDLIB_H # include # endif #endif #ifdef HAVE_STRING_H # if !defined STDC_HEADERS && defined HAVE_MEMORY_H # include # endif # include #endif #ifdef HAVE_STRINGS_H # include #endif #ifdef HAVE_INTTYPES_H # include #endif #ifdef HAVE_STDINT_H # include #endif #ifdef HAVE_UNISTD_H # include #endif" gt_needs= gl_getopt_required=POSIX ac_header_list= gl_getopt_required=POSIX ac_func_list= ac_subst_vars='srcgltests_LTLIBOBJS srcgltests_LIBOBJS srcgl_LTLIBOBJS srcgl_LIBOBJS libgltests_LTLIBOBJS libgltests_LIBOBJS libgl_LTLIBOBJS libgl_LIBOBJS gltests_LTLIBOBJS gltests_LIBOBJS gl_LTLIBOBJS gl_LIBOBJS CONFIG_INCLUDE am__EXEEXT_FALSE am__EXEEXT_TRUE LTLIBOBJS LIBOBJS WARN_CFLAGS WERROR_CFLAGS PO_SUFFIX 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 HTML_DIR GTKDOC_MKPDF GTKDOC_REBASE GTKDOC_CHECK PKG_CONFIG INCLUDE_GSS_KRB5_EXT INCLUDE_GSS_KRB5 KRB5_FALSE KRB5_TRUE LIBSHISHI_PREFIX LTLIBSHISHI LIBSHISHI HAVE_LIBSHISHI VERSION_NUMBER VERSION_PATCH VERSION_MINOR VERSION_MAJOR srcgltests_WITNESS HAVE_UNISTD_H NEXT_AS_FIRST_DIRECTIVE_UNISTD_H NEXT_UNISTD_H WINDOWS_64_BIT_OFF_T NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H NEXT_SYS_TYPES_H HAVE_WINSOCK2_H NEXT_AS_FIRST_DIRECTIVE_STDIO_H NEXT_STDIO_H REPLACE_VSPRINTF REPLACE_VSNPRINTF REPLACE_VPRINTF REPLACE_VFPRINTF REPLACE_VDPRINTF REPLACE_VASPRINTF REPLACE_TMPFILE REPLACE_STDIO_WRITE_FUNCS REPLACE_STDIO_READ_FUNCS REPLACE_SPRINTF REPLACE_SNPRINTF REPLACE_RENAMEAT REPLACE_RENAME REPLACE_REMOVE REPLACE_PRINTF REPLACE_POPEN REPLACE_PERROR REPLACE_OBSTACK_PRINTF REPLACE_GETLINE REPLACE_GETDELIM REPLACE_FTELLO REPLACE_FTELL REPLACE_FSEEKO REPLACE_FSEEK REPLACE_FREOPEN REPLACE_FPURGE REPLACE_FPRINTF REPLACE_FOPEN REPLACE_FFLUSH REPLACE_FDOPEN REPLACE_FCLOSE REPLACE_DPRINTF HAVE_VDPRINTF HAVE_VASPRINTF HAVE_RENAMEAT HAVE_POPEN HAVE_PCLOSE HAVE_FTELLO HAVE_FSEEKO HAVE_DPRINTF HAVE_DECL_VSNPRINTF HAVE_DECL_SNPRINTF HAVE_DECL_OBSTACK_PRINTF HAVE_DECL_GETLINE HAVE_DECL_GETDELIM HAVE_DECL_FTELLO HAVE_DECL_FSEEKO HAVE_DECL_FPURGE GNULIB_VSPRINTF_POSIX GNULIB_VSNPRINTF GNULIB_VPRINTF_POSIX GNULIB_VPRINTF GNULIB_VFPRINTF_POSIX GNULIB_VFPRINTF GNULIB_VDPRINTF GNULIB_VSCANF GNULIB_VFSCANF GNULIB_VASPRINTF GNULIB_TMPFILE GNULIB_STDIO_H_SIGPIPE GNULIB_STDIO_H_NONBLOCKING GNULIB_SPRINTF_POSIX GNULIB_SNPRINTF GNULIB_SCANF GNULIB_RENAMEAT GNULIB_RENAME GNULIB_REMOVE GNULIB_PUTS GNULIB_PUTCHAR GNULIB_PUTC GNULIB_PRINTF_POSIX GNULIB_PRINTF GNULIB_POPEN GNULIB_PERROR GNULIB_PCLOSE GNULIB_OBSTACK_PRINTF_POSIX GNULIB_OBSTACK_PRINTF GNULIB_GETLINE GNULIB_GETDELIM GNULIB_GETCHAR GNULIB_GETC GNULIB_FWRITE GNULIB_FTELLO GNULIB_FTELL GNULIB_FSEEKO GNULIB_FSEEK GNULIB_FSCANF GNULIB_FREOPEN GNULIB_FREAD GNULIB_FPUTS GNULIB_FPUTC GNULIB_FPURGE GNULIB_FPRINTF_POSIX GNULIB_FPRINTF GNULIB_FOPEN GNULIB_FGETS GNULIB_FGETC GNULIB_FFLUSH GNULIB_FDOPEN GNULIB_FCLOSE GNULIB_DPRINTF HAVE__BOOL GL_GENERATE_STDBOOL_H_FALSE GL_GENERATE_STDBOOL_H_TRUE STDBOOL_H GL_GENERATE_STDARG_H_FALSE GL_GENERATE_STDARG_H_TRUE STDARG_H NEXT_AS_FIRST_DIRECTIVE_STDARG_H NEXT_STDARG_H HAVE_MSVC_INVALID_PARAMETER_HANDLER GNULIB_GL_SRCGL_UNISTD_H_GETOPT GETOPT_H HAVE_GETOPT_H NEXT_AS_FIRST_DIRECTIVE_GETOPT_H NEXT_GETOPT_H 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_READ REPLACE_PWRITE REPLACE_PREAD REPLACE_LSEEK REPLACE_LINKAT REPLACE_LINK REPLACE_LCHOWN REPLACE_ISATTY REPLACE_GETPAGESIZE REPLACE_GETGROUPS REPLACE_GETLOGIN_R REPLACE_GETDTABLESIZE REPLACE_GETDOMAINNAME REPLACE_GETCWD REPLACE_FTRUNCATE REPLACE_FCHOWNAT REPLACE_DUP2 REPLACE_DUP REPLACE_CLOSE REPLACE_CHOWN HAVE_SYS_PARAM_H HAVE_OS_H HAVE_DECL_TTYNAME_R HAVE_DECL_SETHOSTNAME HAVE_DECL_GETUSERSHELL HAVE_DECL_GETPAGESIZE HAVE_DECL_GETLOGIN_R HAVE_DECL_GETDOMAINNAME HAVE_DECL_FDATASYNC HAVE_DECL_FCHDIR HAVE_DECL_ENVIRON HAVE_USLEEP HAVE_UNLINKAT HAVE_SYMLINKAT HAVE_SYMLINK HAVE_SLEEP HAVE_SETHOSTNAME HAVE_READLINKAT HAVE_READLINK HAVE_PWRITE HAVE_PREAD HAVE_PIPE2 HAVE_PIPE HAVE_LINKAT HAVE_LINK HAVE_LCHOWN HAVE_GROUP_MEMBER HAVE_GETPAGESIZE HAVE_GETLOGIN HAVE_GETHOSTNAME HAVE_GETGROUPS HAVE_GETDTABLESIZE HAVE_FTRUNCATE HAVE_FSYNC HAVE_FDATASYNC 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_NONBLOCKING GNULIB_TTYNAME_R GNULIB_SYMLINKAT GNULIB_SYMLINK GNULIB_SLEEP GNULIB_SETHOSTNAME GNULIB_RMDIR GNULIB_READLINKAT GNULIB_READLINK GNULIB_READ GNULIB_PWRITE GNULIB_PREAD GNULIB_PIPE2 GNULIB_PIPE GNULIB_LSEEK GNULIB_LINKAT GNULIB_LINK GNULIB_LCHOWN GNULIB_ISATTY GNULIB_GROUP_MEMBER GNULIB_GETUSERSHELL GNULIB_GETPAGESIZE GNULIB_GETLOGIN_R GNULIB_GETLOGIN GNULIB_GETHOSTNAME GNULIB_GETGROUPS GNULIB_GETDTABLESIZE GNULIB_GETDOMAINNAME GNULIB_GETCWD GNULIB_FTRUNCATE GNULIB_FSYNC GNULIB_FDATASYNC GNULIB_FCHOWNAT GNULIB_FCHDIR GNULIB_FACCESSAT GNULIB_EUIDACCESS GNULIB_ENVIRON GNULIB_DUP3 GNULIB_DUP2 GNULIB_DUP GNULIB_CLOSE GNULIB_CHOWN GNULIB_CHDIR EOVERFLOW_VALUE EOVERFLOW_HIDDEN ENOLINK_VALUE ENOLINK_HIDDEN EMULTIHOP_VALUE EMULTIHOP_HIDDEN GL_GENERATE_ERRNO_H_FALSE GL_GENERATE_ERRNO_H_TRUE ERRNO_H NEXT_AS_FIRST_DIRECTIVE_ERRNO_H NEXT_ERRNO_H libgltests_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_R REPLACE_STRERROR REPLACE_STRCHRNUL REPLACE_STRCASESTR REPLACE_STRSTR REPLACE_STRDUP REPLACE_STPNCPY REPLACE_MEMMEM REPLACE_MEMCHR HAVE_STRVERSCMP HAVE_DECL_STRSIGNAL HAVE_DECL_STRERROR_R 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_FFSLL HAVE_FFSL HAVE_MBSLEN GNULIB_STRVERSCMP GNULIB_STRSIGNAL GNULIB_STRERROR_R 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 GNULIB_FFSLL GNULIB_FFSL NEXT_AS_FIRST_DIRECTIVE_STDDEF_H NEXT_STDDEF_H PRAGMA_COLUMNS PRAGMA_SYSTEM_HEADER INCLUDE_NEXT_AS_FIRST_DIRECTIVE INCLUDE_NEXT GL_GENERATE_STDDEF_H_FALSE GL_GENERATE_STDDEF_H_TRUE STDDEF_H HAVE_WCHAR_T REPLACE_NULL HAVE_LD_OUTPUT_DEF_FALSE HAVE_LD_OUTPUT_DEF_TRUE gltests_WITNESS VALGRIND PMCCABE HAVE_LD_VERSION_SCRIPT_FALSE HAVE_LD_VERSION_SCRIPT_TRUE GL_COND_LIBTOOL_FALSE GL_COND_LIBTOOL_TRUE POSUB LTLIBINTL LIBINTL INTLLIBS LTLIBICONV LIBICONV INTL_MACOSX_LIBS XGETTEXT_EXTRA_OPTIONS MSGMERGE XGETTEXT_015 XGETTEXT GMSGFMT_015 MSGFMT_015 GMSGFMT MSGFMT GETTEXT_MACRO_VERSION USE_NLS DLL_VERSION HELP2MAN PERL OTOOL64 OTOOL LIPO NMEDIT DSYMUTIL MANIFEST_TOOL LN_S NM ac_ct_DUMPBIN DUMPBIN LD FGREP SED LIBTOOL OBJDUMP DLLTOOL AS ac_ct_AR host_os host_vendor host_cpu host build_os build_vendor build_cpu build RANLIB ARFLAGS AR EGREP GREP CPP am__fastdepCC_FALSE am__fastdepCC_TRUE CCDEPMODE am__nodep 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_BACKSLASH AM_DEFAULT_VERBOSITY AM_DEFAULT_V AM_V 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_silent_rules enable_dependency_tracking enable_shared enable_static with_pic enable_fast_install with_gnu_ld with_sysroot enable_libtool_lock enable_nls enable_rpath with_libiconv_prefix with_libintl_prefix enable_ld_version_script enable_valgrind_tests with_packager with_packager_version with_packager_bug_reports enable_kerberos5 with_libshishi_prefix with_html_dir enable_gtk_doc enable_gtk_doc_html enable_gtk_doc_pdf with_po_suffix enable_gcc_warnings ' ac_precious_vars='build_alias host_alias target_alias CC CFLAGS LDFLAGS LIBS CPPFLAGS CPP 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= ;; *) 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 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 Generic Security Service 1.0.3 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/gss] --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 Generic Security Service 1.0.3:";; 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] --enable-silent-rules less verbose build output (undo: "make V=1") --disable-silent-rules verbose build output (undo: "make V=0") --enable-dependency-tracking do not reject slow dependency extractors --disable-dependency-tracking speeds up one-time build --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) --disable-nls do not use Native Language Support --disable-rpath do not hardcode runtime library paths --enable-ld-version-script enable linker version script (default is enabled when possible) --disable-valgrind-tests don't try to run self tests under valgrind --disable-kerberos5 disable Kerberos V5 mechanism unconditionally --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-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[=PKGS] try to use only PIC/non-PIC objects [default=use both] --with-gnu-ld assume the C compiler uses GNU ld [default=no] --with-sysroot=DIR Search for dependent libraries within DIR (or the compiler's sysroot if not specified). --with-gnu-ld assume the C compiler uses GNU ld [default=no] --with-libiconv-prefix[=DIR] search for libiconv in DIR/include and DIR/lib --without-libiconv-prefix don't search for libiconv in includedir and libdir --with-libintl-prefix[=DIR] search for libintl in DIR/include and DIR/lib --without-libintl-prefix don't search for libintl in includedir and libdir --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/...) --with-libshishi-prefix[=DIR] search for libshishi in DIR/include and DIR/lib --without-libshishi-prefix don't search for libshishi in includedir and libdir --with-html-dir=PATH path to installed docs --with-po-suffix=STR add suffix to gettext translation domain Some influential environment variables: CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L if you have libraries in a nonstandard directory LIBS libraries to pass to the linker, e.g. -l CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I if you have headers in a nonstandard directory CPP C preprocessor 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 . GNU Generic Security Service home page: . General help using GNU software: . _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 Generic Security Service configure 1.0.3 generated by GNU Autoconf 2.69 Copyright (C) 2012 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; ${as_lineno_stack:+:} 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; } > conftest.i && { 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; ${as_lineno_stack:+:} 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 eval \${$3+:} false; then : { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $2" >&5 $as_echo_n "checking for $2... " >&6; } if eval \${$3+:} false; 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.i 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;} ( $as_echo "## ------------------------------ ## ## Report this to bug-gss@gnu.org ## ## ------------------------------ ##" ) | 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 eval \${$3+:} false; 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; ${as_lineno_stack:+:} 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; ${as_lineno_stack:+:} 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 eval \${$3+:} false; 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; ${as_lineno_stack:+:} 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 || 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; ${as_lineno_stack:+:} 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 eval \${$3+:} false; 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 declares $2. For example, HP-UX 11i declares gettimeofday. */ #define $2 innocuous_$2 /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $2 (); below. Prefer to if __STDC__ is defined, since exists even on freestanding compilers. */ #ifdef __STDC__ # include #else # include #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; ${as_lineno_stack:+:} 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 test_array [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 test_array [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 test_array [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 test_array [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 test_array [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 #include 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 &5 $as_echo_n "checking whether $as_decl_name is declared... " >&6; } if eval \${$3+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main () { #ifndef $as_decl_name #ifdef __cplusplus (void) $as_decl_use; #else (void) $as_decl_name; #endif #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; ${as_lineno_stack:+:} 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 eval \${$3+:} false; 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; ${as_lineno_stack:+:} 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 Generic Security Service $as_me 1.0.3, which was generated by GNU Autoconf 2.69. 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 $as_echo "## ---------------- ## ## Cache variables. ## ## ---------------- ##" 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 $as_echo "## ----------------- ## ## Output variables. ## ## ----------------- ##" 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 $as_echo "## ------------------- ## ## File substitutions. ## ## ------------------- ##" 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 $as_echo "## ----------- ## ## confdefs.h. ## ## ----------- ##" 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 # We do not want a PATH search for config.site. case $CONFIG_SITE in #(( -*) ac_site_file1=./$CONFIG_SITE;; */*) ac_site_file1=$CONFIG_SITE;; *) ac_site_file1=./$CONFIG_SITE;; esac 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" \ || { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5 $as_echo "$as_me: error: in \`$ac_pwd':" >&2;} as_fn_error $? "failed to load site script $ac_site_file See \`config.log' for more details" "$LINENO" 5; } 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 gt_needs="$gt_needs " gl_getopt_required=GNU as_fn_append ac_header_list " getopt.h" as_fn_append ac_header_list " sys/mman.h" as_fn_append ac_func_list " mprotect" as_fn_append ac_func_list " _set_invalid_parameter_handler" as_fn_append ac_header_list " sys/socket.h" as_fn_append ac_header_list " unistd.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 if test -f "$ac_dir/install-sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install-sh -c" break elif test -f "$ac_dir/install.sh"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install.sh -c" break elif test -f "$ac_dir/shtool"; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/shtool install -c" break fi 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.14' # 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 ${ac_cv_path_install+:} false; 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 as_fn_executable_p "$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; } # 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 ( am_has_slept=no for am_try in 1 2; do echo "timestamp, slept: $am_has_slept" > conftest.file 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 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 if test "$2" = conftest.file || test $am_try -eq 2; then break fi # Just in case. sleep 1 am_has_slept=yes done 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; } # If we didn't sleep, we still need to ensure time stamps of config.status and # generated files are strictly newer. am_sleep_pid= if grep 'slept: no' conftest.file >/dev/null 2>&1; then ( sleep 1 ) & am_sleep_pid=$! fi rm -f conftest.file 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 --is-lightweight"; then am_missing_run="$MISSING " 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 ${ac_cv_prog_STRIP+:} false; 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 as_fn_executable_p "$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 ${ac_cv_prog_ac_ct_STRIP+:} false; 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 as_fn_executable_p "$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 ${ac_cv_path_mkdir+:} false; 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 as_fn_executable_p "$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; } 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 ${ac_cv_prog_AWK+:} false; 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 as_fn_executable_p "$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 eval \${ac_cv_prog_make_${ac_make}_set+:} false; 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 # Check whether --enable-silent-rules was given. if test "${enable_silent_rules+set}" = set; then : enableval=$enable_silent_rules; fi case $enable_silent_rules in # ((( yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=1;; esac am_make=${MAKE-make} { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 $as_echo_n "checking whether $am_make supports nested variables... " >&6; } if ${am_cv_make_support_nested_variables+:} false; then : $as_echo_n "(cached) " >&6 else if $as_echo 'TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 $as_echo "$am_cv_make_support_nested_variables" >&6; } if test $am_cv_make_support_nested_variables = yes; then AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi AM_BACKSLASH='\' 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='gss' VERSION='1.0.3' 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"} # For better backward compatibility. To be removed once Automake 1.9.x # dies out for good. For more background, see: # # mkdir_p='$(MKDIR_P)' # We need awk for the "check" target. The system "awk" is bad on # some platforms. # Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AMTAR='$${TAR-tar}' # We'll loop over all known methods to create a tar archive until one works. _am_tools='gnutar pax cpio none' am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -' # POSIX will say in a future version that running "rm -f" with no argument # is OK; and we want to be able to make that assumption in our Makefile # recipes. So use an aggressive probe to check that the usage we want is # actually supported "in the wild" to an acceptable degree. # See automake bug#10828. # To make any issue more visible, cause the running configure to be aborted # by default if the 'rm' program in use doesn't match our expectations; the # user can still override this though. if rm -f && rm -fr && rm -rf; then : OK; else cat >&2 <<'END' Oops! Your 'rm' program seems unable to run without file operands specified on the command line, even when the '-f' option is present. This is contrary to the behaviour of most rm programs out there, and not conforming with the upcoming POSIX standard: Please tell bug-automake@gnu.org about your system, including the value of your $PATH and any error possibly output before this message. This can help us improve future automake versions. END if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then echo 'Configuration will proceed anyway, since you have set the' >&2 echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2 echo >&2 else cat >&2 <<'END' Aborting the configuration process, to ensure you take notice of the issue. You can download and install GNU coreutils to get an 'rm' implementation that behaves properly: . If you want to complete the configuration process using your problematic 'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM to "yes", and re-run configure. END as_fn_error $? "Your 'rm' program is bad, sorry." "$LINENO" 5 fi fi # Check whether --enable-silent-rules was given. if test "${enable_silent_rules+set}" = set; then : enableval=$enable_silent_rules; fi case $enable_silent_rules in # ((( yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=0;; esac am_make=${MAKE-make} { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 $as_echo_n "checking whether $am_make supports nested variables... " >&6; } if ${am_cv_make_support_nested_variables+:} false; then : $as_echo_n "(cached) " >&6 else if $as_echo 'TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 $as_echo "$am_cv_make_support_nested_variables" >&6; } if test $am_cv_make_support_nested_variables = yes; then AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi AM_BACKSLASH='\' # Library code modified: REVISION++ # Interfaces changed/added/removed: CURRENT++ REVISION=0 # Interfaces added: AGE++ # Interfaces removed: AGE=0 LT_CURRENT=3 LT_REVISION=3 LT_AGE=0 # Checks for programs. 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 ${ac_cv_prog_CC+:} false; 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 as_fn_executable_p "$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 ${ac_cv_prog_ac_ct_CC+:} false; 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 as_fn_executable_p "$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 ${ac_cv_prog_CC+:} false; 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 as_fn_executable_p "$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 ${ac_cv_prog_CC+:} false; 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 as_fn_executable_p "$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 ${ac_cv_prog_CC+:} false; 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 as_fn_executable_p "$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 ${ac_cv_prog_ac_ct_CC+:} false; 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 as_fn_executable_p "$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_error 77 "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 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 ${ac_cv_objext+:} false; 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 ${ac_cv_c_compiler_gnu+:} false; 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 ${ac_cv_prog_cc_g+:} false; 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 ${ac_cv_prog_cc_c89+:} false; 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 #include struct stat; /* 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 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 whether $CC understands -c and -o together" >&5 $as_echo_n "checking whether $CC understands -c and -o together... " >&6; } if ${am_cv_prog_cc_c_o+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF # Make sure it works both with $CC and with simple cc. # Following AC_PROG_CC_C_O, we do the test twice because some # compilers refuse to overwrite an existing .o file with -o, # though they will create one. am_cv_prog_cc_c_o=yes for am_i in 1 2; do if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5 ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } \ && test -f conftest2.$ac_objext; then : OK else am_cv_prog_cc_c_o=no break fi done rm -f core conftest* unset am_i fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5 $as_echo "$am_cv_prog_cc_c_o" >&6; } if test "$am_cv_prog_cc_c_o" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__CC in this case, # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" CC="$am_aux_dir/compile $CC" 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='\' am__nodep='_no' 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 ${am_cv_CC_dependencies_compiler_type+:} false; 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". rm -rf conftest.dir 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 10 /bin/sh. echo '/* dummy */' > 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 ;; msvc7 | msvc7msys | 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 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 ${ac_cv_prog_CPP+:} false; 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 to if __STDC__ is defined, since # 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 #else # include #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.i 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 _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.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i 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 to if __STDC__ is defined, since # 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 #else # include #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.i 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 _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.i conftest.$ac_ext done # Because of `break', _AC_PREPROC_IFELSE's cleaning code was skipped. rm -f conftest.i 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 ${ac_cv_path_GREP+:} false; 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" as_fn_executable_p "$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 ${ac_cv_path_EGREP+:} false; 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" as_fn_executable_p "$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 Minix Amsterdam compiler" >&5 $as_echo_n "checking for Minix Amsterdam compiler... " >&6; } if ${gl_cv_c_amsterdam_compiler+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __ACK__ Amsterdam #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "Amsterdam" >/dev/null 2>&1; then : gl_cv_c_amsterdam_compiler=yes else gl_cv_c_amsterdam_compiler=no fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_c_amsterdam_compiler" >&5 $as_echo "$gl_cv_c_amsterdam_compiler" >&6; } if test -z "$AR"; then if test $gl_cv_c_amsterdam_compiler = yes; then AR='cc -c.a' if test -z "$ARFLAGS"; then ARFLAGS='-o' fi else 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 ${ac_cv_prog_AR+:} false; 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 as_fn_executable_p "$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 ${ac_cv_prog_ac_ct_AR+:} false; 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 as_fn_executable_p "$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="ar" 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 if test -z "$ARFLAGS"; then ARFLAGS='cru' fi fi else if test -z "$ARFLAGS"; then ARFLAGS='cru' fi fi if test -z "$RANLIB"; then if test $gl_cv_c_amsterdam_compiler = yes; then RANLIB=':' else 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 ${ac_cv_prog_RANLIB+:} false; 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 as_fn_executable_p "$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 ${ac_cv_prog_ac_ct_RANLIB+:} false; 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 as_fn_executable_p "$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 fi 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 ${ac_cv_build+:} false; 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 ${ac_cv_host+:} false; 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 # 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 fdl-1.3: # Code from module gendocs: # Code from module gnumakefile: # Code from module gnupload: # Code from module havelib: # Code from module lib-symbol-versions: # Code from module maintainer-makefile: # Code from module manywarnings: # Code from module pmccabe2html: # 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 warnings: { $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 ${ac_cv_header_stdc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include 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 _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 _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 #include #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 " if eval test \"x\$"$as_ac_Header"\" = 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" = xyes; 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 $as_echo "#define _NETBSD_SOURCE 1" >>confdefs.h fi { $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 ${ac_cv_safe_to_define___extensions__+:} false; 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 _DARWIN_C_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 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether _XOPEN_SOURCE should be defined" >&5 $as_echo_n "checking whether _XOPEN_SOURCE should be defined... " >&6; } if ${ac_cv_should_define__xopen_source+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_should_define__xopen_source=no cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include mbstate_t x; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _XOPEN_SOURCE 500 #include mbstate_t x; int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_should_define__xopen_source=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 { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_should_define__xopen_source" >&5 $as_echo "$ac_cv_should_define__xopen_source" >&6; } test $ac_cv_should_define__xopen_source = yes && $as_echo "#define _XOPEN_SOURCE 500" >>confdefs.h # Code from module absolute-header: # Code from module extensions: # Code from module extern-inline: # Code from module gettext-h: # Code from module include_next: # Code from module lib-msvc-compat: # Code from module snippet/arg-nonnull: # Code from module snippet/c++defs: # Code from module snippet/warn-on-use: # Code from module stddef: # Code from module string: # Code from module strverscmp: 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 ${ac_cv_prog_cc_c99+:} false; 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 #include #include #include #include // 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 -D_STDC_C99= -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 ${ac_cv_prog_cc_c89+:} false; 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 #include struct stat; /* 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 ${ac_cv_prog_cc_stdc+:} false; 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 absolute-header: # Code from module base64: # Code from module errno: # Code from module error: # Code from module extensions: # Code from module extern-inline: # Code from module getopt-gnu: # Code from module getopt-posix: # Code from module gettext-h: # Code from module include_next: # Code from module intprops: # Code from module memchr: # Code from module msvc-inval: # Code from module msvc-nothrow: # Code from module nocrash: # Code from module progname: # Code from module snippet/arg-nonnull: # Code from module snippet/c++defs: # Code from module snippet/warn-on-use: # Code from module ssize_t: # Code from module stdarg: # Code from module stdbool: # Code from module stddef: # Code from module stdio: # Code from module strerror: # Code from module strerror-override: # Code from module string: # Code from module sys_types: # Code from module unistd: # Code from module verify: # Code from module version-etc: if test -n "$ac_tool_prefix"; then for ac_prog in ar lib "link -lib" 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 ${ac_cv_prog_AR+:} false; 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AR="$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 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 test -n "$AR" && break done fi if test -z "$AR"; then ac_ct_AR=$AR for ac_prog in ar lib "link -lib" 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 ${ac_cv_prog_ac_ct_AR+:} false; 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_AR="$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_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 test -n "$ac_ct_AR" && break done 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 fi : ${AR=ar} { $as_echo "$as_me:${as_lineno-$LINENO}: checking the archiver ($AR) interface" >&5 $as_echo_n "checking the archiver ($AR) interface... " >&6; } if ${am_cv_ar_interface+:} false; 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 am_cv_ar_interface=ar cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int some_variable = 0; _ACEOF if ac_fn_c_try_compile "$LINENO"; then : am_ar_try='$AR cru libconftest.a conftest.$ac_objext >&5' { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$am_ar_try\""; } >&5 (eval $am_ar_try) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if test "$ac_status" -eq 0; then am_cv_ar_interface=ar else am_ar_try='$AR -NOLOGO -OUT:conftest.lib conftest.$ac_objext >&5' { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$am_ar_try\""; } >&5 (eval $am_ar_try) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if test "$ac_status" -eq 0; then am_cv_ar_interface=lib else am_cv_ar_interface=unknown fi fi rm -f conftest.lib libconftest.a fi rm -f core conftest.err conftest.$ac_objext 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: $am_cv_ar_interface" >&5 $as_echo "$am_cv_ar_interface" >&6; } case $am_cv_ar_interface in ar) ;; lib) # Microsoft lib, so override with the ar-lib wrapper script. # FIXME: It is wrong to rewrite AR. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__AR in this case, # and then we could set am__AR="$am_aux_dir/ar-lib \$(AR)" or something # similar. AR="$am_aux_dir/ar-lib $AR" ;; unknown) as_fn_error $? "could not determine $AR interface" "$LINENO" 5 ;; esac 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.4.2' macro_revision='1.3337' ltmain="$ac_aux_dir/ltmain.sh" # Backslashify 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' ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5 $as_echo_n "checking how to print strings... " >&6; } # Test print first, because it will be a builtin if present. if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='print -r --' elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='printf %s\n' else # Use this function as a fallback that always works. func_fallback_echo () { eval 'cat <<_LTECHO_EOF $1 _LTECHO_EOF' } ECHO='func_fallback_echo' fi # func_echo_all arg... # Invoke $ECHO with all args, space-separated. func_echo_all () { $ECHO "" } case "$ECHO" in printf*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: printf" >&5 $as_echo "printf" >&6; } ;; print*) { $as_echo "$as_me:${as_lineno-$LINENO}: result: print -r" >&5 $as_echo "print -r" >&6; } ;; *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: cat" >&5 $as_echo "cat" >&6; } ;; esac { $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 ${ac_cv_path_SED+:} false; 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" as_fn_executable_p "$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 ${ac_cv_path_FGREP+:} false; 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" as_fn_executable_p "$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 ${lt_cv_path_LD+:} false; 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 &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 ${lt_cv_prog_gnu_ld+:} false; 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 &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 ${lt_cv_path_NM+:} false; 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 "$DUMPBIN"; then : # Let the user override the test. else if test -n "$ac_tool_prefix"; then for ac_prog in dumpbin "link -dump" 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 ${ac_cv_prog_DUMPBIN+:} false; 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 as_fn_executable_p "$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 "link -dump" 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 ${ac_cv_prog_ac_ct_DUMPBIN+:} false; 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 as_fn_executable_p "$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 case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in *COFF*) DUMPBIN="$DUMPBIN -symbols" ;; *) DUMPBIN=: ;; esac 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 ${lt_cv_nm_interface+:} false; 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:$LINENO: $ac_compile\"" >&5) (eval "$ac_compile" 2>conftest.err) cat conftest.err >&5 (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&5) (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) cat conftest.err >&5 (eval echo "\"\$as_me:$LINENO: 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; } { $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 # 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 ${lt_cv_sys_max_cmd_len+:} false; 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; ;; mint*) # On MiNT this can take a long time and run out of memory. 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 ;; os2*) # The test takes a long time on OS/2. lt_cv_sys_max_cmd_len=8192 ;; 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" && \ test undefined != "$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"`env echo "$teststring$teststring" 2>/dev/null` \ = "X$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%"$_lt_dummy"}, \ = c,a/b,b/c, \ && 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 how to convert $build file names to $host format" >&5 $as_echo_n "checking how to convert $build file names to $host format... " >&6; } if ${lt_cv_to_host_file_cmd+:} false; then : $as_echo_n "(cached) " >&6 else case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 ;; esac ;; *-*-cygwin* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_noop ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin ;; esac ;; * ) # unhandled hosts (and "normal" native builds) lt_cv_to_host_file_cmd=func_convert_file_noop ;; esac fi to_host_file_cmd=$lt_cv_to_host_file_cmd { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5 $as_echo "$lt_cv_to_host_file_cmd" >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5 $as_echo_n "checking how to convert $build file names to toolchain format... " >&6; } if ${lt_cv_to_tool_file_cmd+:} false; then : $as_echo_n "(cached) " >&6 else #assume ordinary cross tools, or native build. lt_cv_to_tool_file_cmd=func_convert_file_noop case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 ;; esac ;; esac fi to_tool_file_cmd=$lt_cv_to_tool_file_cmd { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5 $as_echo "$lt_cv_to_tool_file_cmd" >&6; } { $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 ${lt_cv_ld_reload_flag+:} false; 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 cygwin* | mingw* | pw32* | cegcc*) if test "$GCC" != yes; then reload_cmds=false fi ;; 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 ${ac_cv_prog_OBJDUMP+:} false; 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 as_fn_executable_p "$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 ${ac_cv_prog_ac_ct_OBJDUMP+:} false; 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 as_fn_executable_p "$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 ${lt_cv_deplibs_check_method+:} false; 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. # func_win32_libid assumes BSD nm, so disallow it if using MS dumpbin. if ( test "$lt_cv_nm_interface" = "BSD nm" && 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 # Keep this pattern in sync with the one in func_win32_libid. lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' 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 ;; haiku*) 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])(-bit)?( [LM]SB)? 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 glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu | 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_glob= want_nocaseglob=no if test "$build" = "$host"; then case $host_os in mingw* | pw32*) if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then want_nocaseglob=yes else file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[\1]\/[\1]\/g;/g"` fi ;; esac fi 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}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 ${ac_cv_prog_DLLTOOL+:} false; 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 as_fn_executable_p "$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 ${ac_cv_prog_ac_ct_DLLTOOL+:} false; 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 as_fn_executable_p "$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 test -z "$DLLTOOL" && DLLTOOL=dlltool { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5 $as_echo_n "checking how to associate runtime and link libraries... " >&6; } if ${lt_cv_sharedlib_from_linklib_cmd+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_sharedlib_from_linklib_cmd='unknown' case $host_os in cygwin* | mingw* | pw32* | cegcc*) # two different shell functions defined in ltmain.sh # decide which to use based on capabilities of $DLLTOOL case `$DLLTOOL --help 2>&1` in *--identify-strict*) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib ;; *) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback ;; esac ;; *) # fallback: assume linklib IS sharedlib lt_cv_sharedlib_from_linklib_cmd="$ECHO" ;; esac fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5 $as_echo "$lt_cv_sharedlib_from_linklib_cmd" >&6; } sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO if test -n "$ac_tool_prefix"; then for ac_prog in ar 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 ${ac_cv_prog_AR+:} false; 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_AR="$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 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 test -n "$AR" && break done fi if test -z "$AR"; then ac_ct_AR=$AR for ac_prog in ar 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 ${ac_cv_prog_ac_ct_AR+:} false; 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_AR="$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_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 test -n "$ac_ct_AR" && break done 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 fi : ${AR=ar} : ${AR_FLAGS=cru} { $as_echo "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5 $as_echo_n "checking for archiver @FILE support... " >&6; } if ${lt_cv_ar_at_file+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ar_at_file=no cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : echo conftest.$ac_objext > conftest.lst lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&5' { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 (eval $lt_ar_try) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if test "$ac_status" -eq 0; then # Ensure the archiver fails upon bogus file names. rm -f conftest.$ac_objext libconftest.a { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 (eval $lt_ar_try) 2>&5 ac_status=$? $as_echo "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if test "$ac_status" -ne 0; then lt_cv_ar_at_file=@ fi fi rm -f conftest.* libconftest.a fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5 $as_echo "$lt_cv_ar_at_file" >&6; } if test "x$lt_cv_ar_at_file" = xno; then archiver_list_spec= else archiver_list_spec=$lt_cv_ar_at_file fi 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 ${ac_cv_prog_STRIP+:} false; 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 as_fn_executable_p "$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 ${ac_cv_prog_ac_ct_STRIP+:} false; 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 as_fn_executable_p "$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 ${ac_cv_prog_RANLIB+:} false; 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 as_fn_executable_p "$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 ${ac_cv_prog_ac_ct_RANLIB+:} false; 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 as_fn_executable_p "$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 \$tool_oldlib" ;; *) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib" ;; esac old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib" fi case $host_os in darwin*) lock_old_archive_extraction=yes ;; *) lock_old_archive_extraction=no ;; esac # 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 ${lt_cv_sys_global_symbol_pipe+:} false; 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};"\ " /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\ " /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 lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" # 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 /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ #if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) /* DATA imports from DLLs on WIN32 con't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */ # define LT_DLSYM_CONST #elif defined(__osf__) /* This system does not cope well with relocations in const data. */ # define LT_DLSYM_CONST #else # define LT_DLSYM_CONST const #endif #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. */ LT_DLSYM_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_globsym_save_LIBS=$LIBS lt_globsym_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_globsym_save_LIBS CFLAGS=$lt_globsym_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 # Response file support. if test "$lt_cv_nm_interface" = "MS dumpbin"; then nm_file_list_spec='@' elif $NM --help 2>/dev/null | grep '[@]FILE' >/dev/null; then nm_file_list_spec='@' fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5 $as_echo_n "checking for sysroot... " >&6; } # Check whether --with-sysroot was given. if test "${with_sysroot+set}" = set; then : withval=$with_sysroot; else with_sysroot=no fi lt_sysroot= case ${with_sysroot} in #( yes) if test "$GCC" = yes; then lt_sysroot=`$CC --print-sysroot 2>/dev/null` fi ;; #( /*) lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` ;; #( no|'') ;; #( *) { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${with_sysroot}" >&5 $as_echo "${with_sysroot}" >&6; } as_fn_error $? "The sysroot must be an absolute path." "$LINENO" 5 ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}" >&5 $as_echo "${lt_sysroot:-no}" >&6; } # 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 '$LINENO' "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*|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*) case `/usr/bin/file conftest.o` in *x86-64*) LD="${LD-ld} -m elf32_x86_64" ;; *) LD="${LD-ld} -m elf_i386" ;; esac ;; powerpc64le-*) LD="${LD-ld} -m elf32lppclinux" ;; powerpc64-*) 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" ;; powerpcle-*) LD="${LD-ld} -m elf64lppc" ;; powerpc-*) 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 ${lt_cv_cc_needs_belf+:} false; 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 ;; *-*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*) case $host in i?86-*-solaris*) LD="${LD-ld} -m elf_x86_64" ;; sparc*-*-solaris*) LD="${LD-ld} -m elf64_sparc" ;; esac # GNU ld 2.21 introduced _sol2 emulations. Use them if available. if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then LD="${LD-ld}_sol2" fi ;; *) 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" if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}mt", so it can be a program name with args. set dummy ${ac_tool_prefix}mt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_MANIFEST_TOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$MANIFEST_TOOL"; then ac_cv_prog_MANIFEST_TOOL="$MANIFEST_TOOL" # 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_MANIFEST_TOOL="${ac_tool_prefix}mt" $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 MANIFEST_TOOL=$ac_cv_prog_MANIFEST_TOOL if test -n "$MANIFEST_TOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5 $as_echo "$MANIFEST_TOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi fi if test -z "$ac_cv_prog_MANIFEST_TOOL"; then ac_ct_MANIFEST_TOOL=$MANIFEST_TOOL # Extract the first word of "mt", so it can be a program name with args. set dummy mt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_prog_ac_ct_MANIFEST_TOOL+:} false; then : $as_echo_n "(cached) " >&6 else if test -n "$ac_ct_MANIFEST_TOOL"; then ac_cv_prog_ac_ct_MANIFEST_TOOL="$ac_ct_MANIFEST_TOOL" # 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_prog_ac_ct_MANIFEST_TOOL="mt" $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_MANIFEST_TOOL=$ac_cv_prog_ac_ct_MANIFEST_TOOL if test -n "$ac_ct_MANIFEST_TOOL"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5 $as_echo "$ac_ct_MANIFEST_TOOL" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi if test "x$ac_ct_MANIFEST_TOOL" = x; then MANIFEST_TOOL=":" 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 MANIFEST_TOOL=$ac_ct_MANIFEST_TOOL fi else MANIFEST_TOOL="$ac_cv_prog_MANIFEST_TOOL" fi test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5 $as_echo_n "checking if $MANIFEST_TOOL is a manifest tool... " >&6; } if ${lt_cv_path_mainfest_tool+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_path_mainfest_tool=no echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&5 $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out cat conftest.err >&5 if $GREP 'Manifest Tool' conftest.out > /dev/null; then lt_cv_path_mainfest_tool=yes fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5 $as_echo "$lt_cv_path_mainfest_tool" >&6; } if test "x$lt_cv_path_mainfest_tool" != xyes; then MANIFEST_TOOL=: fi 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 ${ac_cv_prog_DSYMUTIL+:} false; 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 as_fn_executable_p "$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 ${ac_cv_prog_ac_ct_DSYMUTIL+:} false; 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 as_fn_executable_p "$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 ${ac_cv_prog_NMEDIT+:} false; 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 as_fn_executable_p "$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 ${ac_cv_prog_ac_ct_NMEDIT+:} false; 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 as_fn_executable_p "$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 ${ac_cv_prog_LIPO+:} false; 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 as_fn_executable_p "$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 ${ac_cv_prog_ac_ct_LIPO+:} false; 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 as_fn_executable_p "$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 ${ac_cv_prog_OTOOL+:} false; 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 as_fn_executable_p "$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 ${ac_cv_prog_ac_ct_OTOOL+:} false; 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 as_fn_executable_p "$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 ${ac_cv_prog_OTOOL64+:} false; 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 as_fn_executable_p "$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 ${ac_cv_prog_ac_ct_OTOOL64+:} false; 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 as_fn_executable_p "$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 ${lt_cv_apple_cc_single_mod+:} false; 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 there is a non-empty error log, and "single_module" # appears in it, assume the flag caused a linker warning if test -s conftest.err && $GREP single_module conftest.err; then cat conftest.err >&5 # Otherwise, if the output was created with a 0 exit code from # the compiler, it worked. elif test -f libconftest.dylib && test $_lt_result -eq 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 ${lt_cv_ld_exported_symbols_list+:} false; 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; } { $as_echo "$as_me:${as_lineno-$LINENO}: checking for -force_load linker flag" >&5 $as_echo_n "checking for -force_load linker flag... " >&6; } if ${lt_cv_ld_force_load+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_ld_force_load=no cat > conftest.c << _LT_EOF int forced_loaded() { return 2;} _LT_EOF echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&5 $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&5 echo "$AR cru libconftest.a conftest.o" >&5 $AR cru libconftest.a conftest.o 2>&5 echo "$RANLIB libconftest.a" >&5 $RANLIB libconftest.a 2>&5 cat > conftest.c << _LT_EOF int main() { return 0;} _LT_EOF echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&5 $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err _lt_result=$? if test -s conftest.err && $GREP force_load conftest.err; then cat conftest.err >&5 elif test -f conftest && test $_lt_result -eq 0 && $GREP forced_load conftest >/dev/null 2>&1 ; then lt_cv_ld_force_load=yes else cat conftest.err >&5 fi rm -f conftest.err libconftest.a conftest conftest.c rm -rf conftest.dSYM fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_force_load" >&5 $as_echo "$lt_cv_ld_force_load" >&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" != ":" && test "$lt_cv_ld_force_load" = "no"; 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" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_DLFCN_H 1 _ACEOF fi done # Set options 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 ${ac_cv_prog_AS+:} false; 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 as_fn_executable_p "$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 ${ac_cv_prog_ac_ct_AS+:} false; 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 as_fn_executable_p "$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 ${ac_cv_prog_DLLTOOL+:} false; 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 as_fn_executable_p "$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 ${ac_cv_prog_ac_ct_DLLTOOL+:} false; 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 as_fn_executable_p "$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 ${ac_cv_prog_OBJDUMP+:} false; 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 as_fn_executable_p "$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 ${ac_cv_prog_ac_ct_OBJDUMP+:} false; 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 as_fn_executable_p "$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 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; lt_p=${PACKAGE-default} case $withval in yes|no) pic_mode=$withval ;; *) pic_mode=default # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for lt_pkg in $withval; do IFS="$lt_save_ifs" if test "X$lt_pkg" = "X$lt_p"; then pic_mode=yes fi done IFS="$lt_save_ifs" ;; esac 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 ${lt_cv_objdir+:} false; 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 # 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 "$cc_temp" | $SED "s%.*/%%; 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 ${lt_cv_path_MAGIC_CMD+:} false; 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 ${lt_cv_path_MAGIC_CMD+:} false; 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 case $cc_basename in nvcc*) lt_prog_compiler_no_builtin_flag=' -Xcompiler -fno-builtin' ;; *) lt_prog_compiler_no_builtin_flag=' -fno-builtin' ;; esac { $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 ${lt_cv_prog_compiler_rtti_exceptions+:} false; 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:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $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 "$_lt_compiler_boilerplate" | $SED '/^$/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= 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' ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. lt_prog_compiler_static= ;; 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 case $cc_basename in nvcc*) # Cuda Compiler Driver 2.2 lt_prog_compiler_wl='-Xlinker ' if test -n "$lt_prog_compiler_pic"; then lt_prog_compiler_pic="-Xcompiler $lt_prog_compiler_pic" fi ;; 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 | 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' ;; nagfor*) # NAG Fortran compiler lt_prog_compiler_wl='-Wl,-Wl,,' lt_prog_compiler_pic='-PIC' lt_prog_compiler_static='-Bstatic' ;; pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) # 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* | bgxl* | bgf* | mpixl*) # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-qpic' lt_prog_compiler_static='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [1-7].* | *Sun*Fortran*\ 8.[0-3]*) # 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='' ;; *Sun\ F* | *Sun*Fortran*) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='-Qoption ld ' ;; *Sun\ C*) # Sun C 5.9 lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='-Wl,' ;; *Intel*\ [CF]*Compiler*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fPIC' lt_prog_compiler_static='-static' ;; *Portland\ Group*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fpic' lt_prog_compiler_static='-Bstatic' ;; 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* | sunf77* | sunf90* | sunf95*) 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}: checking for $compiler option to produce PIC" >&5 $as_echo_n "checking for $compiler option to produce PIC... " >&6; } if ${lt_cv_prog_compiler_pic+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler_pic=$lt_prog_compiler_pic fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5 $as_echo "$lt_cv_prog_compiler_pic" >&6; } lt_prog_compiler_pic=$lt_cv_prog_compiler_pic # # 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 ${lt_cv_prog_compiler_pic_works+:} false; 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:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $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 "$_lt_compiler_boilerplate" | $SED '/^$/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 ${lt_cv_prog_compiler_static_works+:} false; 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 "$_lt_linker_boilerplate" | $SED '/^$/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 ${lt_cv_prog_compiler_c_o+:} false; 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:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:$LINENO: \$? = $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 "$_lt_compiler_boilerplate" | $SED '/^$/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 ${lt_cv_prog_compiler_c_o+:} false; 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:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:$LINENO: \$? = $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 "$_lt_compiler_boilerplate" | $SED '/^$/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_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 | gnu*) link_all_deplibs=no ;; esac ld_shlibs=yes # On some targets, GNU ld is compatible enough with the native linker # that we're better off using the native interface for both. lt_use_gnu_ld_interface=no if test "$with_gnu_ld" = yes; then case $host_os in aix*) # The AIX port of GNU ld has always aspired to compatibility # with the native linker. However, as the warning in the GNU ld # block says, versions before 2.19.5* couldn't really create working # shared libraries, regardless of the interface used. case `$LD -v 2>&1` in *\ \(GNU\ Binutils\)\ 2.19.5*) ;; *\ \(GNU\ Binutils\)\ 2.[2-9]*) ;; *\ \(GNU\ Binutils\)\ [3-9]*) ;; *) lt_use_gnu_ld_interface=yes ;; esac ;; *) lt_use_gnu_ld_interface=yes ;; esac fi if test "$lt_use_gnu_ld_interface" = 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.19, 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 install binutils *** 2.20 or above, or modify your PATH so that a non-GNU linker is found. *** You will then need to restart the configuration process. _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 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' export_dynamic_flag_spec='${wl}--export-all-symbols' 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/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols' exclude_expsyms='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname' 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 ;; haiku*) archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' link_all_deplibs=yes ;; 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=' $pic_flag' 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; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag' ;; pgf77* | pgf90* | pgf95* | pgfortran*) # 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; func_echo_all \"$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]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below) tmp_sharedflag='-qmkshrobj' tmp_addflag= ;; nvcc*) # Cuda Compiler Driver 2.2 whole_archive_flag_spec='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' compiler_needs_object=yes ;; 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; func_echo_all \"$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* | bgf* | bgxlf* | mpixlf*) # 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='${wl}-rpath ${wl}$libdir' archive_cmds='$LD -shared $libobjs $deplibs $linker_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 $linker_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 $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $pic_flag $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 $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $pic_flag $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 $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $pic_flag $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 # Also, AIX nm treats weak defined symbols like other global # defined symbols, whereas GNU nm marks them as "W". 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") || (\$ 2 == "W")) && (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. if test "${lt_cv_aix_libpath+set}" = set; then aix_libpath=$lt_cv_aix_libpath else if ${lt_cv_aix_libpath_+:} false; then : $as_echo_n "(cached) " >&6 else 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 } }' lt_cv_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 "$lt_cv_aix_libpath_"; then lt_cv_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 "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_="/usr/lib:/lib" fi fi aix_libpath=$lt_cv_aix_libpath_ 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 func_echo_all "${wl}${allow_undefined_flag}"; 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. if test "${lt_cv_aix_libpath+set}" = set; then aix_libpath=$lt_cv_aix_libpath else if ${lt_cv_aix_libpath_+:} false; then : $as_echo_n "(cached) " >&6 else 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 } }' lt_cv_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 "$lt_cv_aix_libpath_"; then lt_cv_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 "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_="/usr/lib:/lib" fi fi aix_libpath=$lt_cv_aix_libpath_ 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' if test "$with_gnu_ld" = yes; then # We only use this code for GNU lds that support --whole-archive. whole_archive_flag_spec='${wl}--whole-archive$convenience ${wl}--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives whole_archive_flag_spec='$convenience' fi 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. case $cc_basename in cl*) # Native MSVC hardcode_libdir_flag_spec=' ' allow_undefined_flag=unsupported always_export_symbols=yes file_list_spec='@' # 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 $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' archive_expsym_cmds='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; else sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, )='true' enable_shared_with_static_runtimes=yes exclude_expsyms='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1,DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' # Don't use ranlib old_postinstall_cmds='chmod 644 $oldlib' postlink_cmds='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile="$lt_outputfile.exe" lt_tool_outputfile="$lt_tool_outputfile.exe" ;; esac~ if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # Assume MSVC wrapper 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 `func_echo_all "$deplibs" | $SED '\''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' enable_shared_with_static_runtimes=yes ;; esac ;; darwin* | rhapsody*) archive_cmds_need_lc=no hardcode_direct=no hardcode_automatic=yes hardcode_shlibpath_var=unsupported if test "$lt_cv_ld_force_load" = "yes"; then whole_archive_flag_spec='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' else whole_archive_flag_spec='' fi 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=func_echo_all 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 ;; # 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 $pic_flag -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 $pic_flag ${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 && test "$with_gnu_ld" = no; then archive_cmds='$CC -shared $pic_flag ${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_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 && test "$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 $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds='$CC -shared $pic_flag ${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' ;; *) # Older versions of the 11.00 compiler do not understand -b yet # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) { $as_echo "$as_me:${as_lineno-$LINENO}: checking if $CC understands -b" >&5 $as_echo_n "checking if $CC understands -b... " >&6; } if ${lt_cv_prog_compiler__b+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_prog_compiler__b=no save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS -b" 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 "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler__b=yes fi else lt_cv_prog_compiler__b=yes fi fi $RM -r conftest* LDFLAGS="$save_LDFLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler__b" >&5 $as_echo "$lt_cv_prog_compiler__b" >&6; } if test x"$lt_cv_prog_compiler__b" = xyes; then archive_cmds='$CC -b ${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 ;; 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 $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${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. # This should be the same for all languages, so no per-tag cache variable. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5 $as_echo_n "checking whether the $host_os linker accepts -exported_symbol... " >&6; } if ${lt_cv_irix_exported_symbol+:} false; then : $as_echo_n "(cached) " >&6 else 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) { return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : lt_cv_irix_exported_symbol=yes else lt_cv_irix_exported_symbol=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_irix_exported_symbol" >&5 $as_echo "$lt_cv_irix_exported_symbol" >&6; } if test "$lt_cv_irix_exported_symbol" = yes; then archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' fi else archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry ${output_objdir}/so_locations -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -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" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${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" && func_echo_all "-set_version $verstring"` -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} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${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" && func_echo_all "-set_version $verstring"` -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 "-set_version $verstring"` -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 $pic_flag ${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 $pic_flag ${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; } if ${lt_cv_archive_cmds_need_lc+:} false; then : $as_echo_n "(cached) " >&6 else $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 lt_cv_archive_cmds_need_lc=no else lt_cv_archive_cmds_need_lc=yes fi allow_undefined_flag=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $RM conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc" >&5 $as_echo "$lt_cv_archive_cmds_need_lc" >&6; } archive_cmds_need_lc=$lt_cv_archive_cmds_need_lc ;; 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 case $host_os in mingw* | cegcc*) lt_sed_strip_eq="s,=\([A-Za-z]:\),\1,g" ;; *) lt_sed_strip_eq="s,=/,/,g" ;; esac lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` case $lt_search_path_spec in *\;*) # 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 's/;/ /g'` ;; *) lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` ;; esac # 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; } }'` # AWK program above erroneously prepends '/' to C:/dos/paths # for these hosts. case $host_os in mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ $SED 's,/\([A-Za-z]:\),\1,g'` ;; esac sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` 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 # correct to gnu/linux during the next big refactor 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 # correct to gnu/linux during the next big refactor 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.so # instead of lib.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=`func_echo_all "$lib" | $SED '\''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 # correct to gnu/linux during the next big refactor 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,$cc_basename in yes,*) # gcc 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="$sys_lib_search_path_spec /usr/lib/w32api" ;; mingw* | cegcc*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' ;; 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 dynamic_linker='Win32 ld.exe' ;; *,cl*) # Native MSVC libname_spec='$name' soname_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext}' library_names_spec='${libname}.dll.lib' case $build_os in mingw*) sys_lib_search_path_spec= lt_save_ifs=$IFS IFS=';' for lt_path in $LIB do IFS=$lt_save_ifs # Let DOS variable expansion print the short 8.3 style file name. lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" done IFS=$lt_save_ifs # Convert to MSYS style. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'` ;; cygwin*) # Convert to unix form, then to dos form, then back to unix form # but this time dos style (no spaces!) so that the unix form looks # like /cygdrive/c/PROGRA~1:/cygdr... sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` ;; *) sys_lib_search_path_spec="$LIB" if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then # It is most probably a Windows format PATH. 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 # FIXME: find the short name or the path components, as spaces are # common. (e.g. "Program Files" -> "PROGRA~1") ;; esac # 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' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes dynamic_linker='Win32 link.exe' ;; *) # Assume MSVC wrapper library_names_spec='${libname}`echo ${release} | $SED -e 's/[.]/-/g'`${versuffix}${shared_ext} $libname.lib' dynamic_linker='Win32 ld.exe' ;; esac # 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 # correct to gnu/linux during the next big refactor 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 ;; 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[23].*) 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 ;; haiku*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no dynamic_linker="$host_os runtime_loader" 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=LIBRARY_PATH shlibpath_overrides_runpath=yes sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' 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' # or fails outright, so override atomically: install_override_mode=555 ;; interix[3-9]*) version_type=linux # correct to gnu/linux during the next big refactor 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 # correct to gnu/linux during the next big refactor 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 glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) version_type=linux # correct to gnu/linux during the next big refactor 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 if ${lt_cv_shlibpath_overrides_runpath+:} false; then : $as_echo_n "(cached) " >&6 else lt_cv_shlibpath_overrides_runpath=no 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 : lt_cv_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 fi shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath # 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;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 # correct to gnu/linux during the next big refactor 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 # correct to gnu/linux during the next big refactor 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 # correct to gnu/linux during the next big refactor 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 # correct to gnu/linux during the next big refactor 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 # correct to gnu/linux during the next big refactor 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 # correct to gnu/linux during the next big refactor 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 ${ac_cv_lib_dl_dlopen+:} false; 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" = xyes; 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" = xyes; 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 ${ac_cv_lib_dld_shl_load+:} false; 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" = xyes; 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" = xyes; 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 ${ac_cv_lib_dl_dlopen+:} false; 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" = xyes; 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 ${ac_cv_lib_svld_dlopen+:} false; 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" = xyes; 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 ${ac_cv_lib_dld_dld_link+:} false; 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" = xyes; 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 ${lt_cv_dlopen_self+:} false; 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 $LINENO "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include #endif #include #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 /* When -fvisbility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ #if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) int fnord () __attribute__((visibility("default"))); #endif int fnord () { return 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; else puts (dlerror ()); } /* 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 ${lt_cv_dlopen_self_static+:} false; 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 $LINENO "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include #endif #include #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 /* When -fvisbility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ #if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) int fnord () __attribute__((visibility("default"))); #endif int fnord () { return 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; else puts (dlerror ()); } /* 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: PERL=${PERL-"${am_missing_run}perl"} HELP2MAN=${HELP2MAN-"${am_missing_run}help2man"} # Used when creating libgss-XX.def. DLL_VERSION=`expr ${LT_CURRENT} - ${LT_AGE}` # Internationalization. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether NLS is requested" >&5 $as_echo_n "checking whether NLS is requested... " >&6; } # Check whether --enable-nls was given. if test "${enable_nls+set}" = set; then : enableval=$enable_nls; USE_NLS=$enableval else USE_NLS=yes fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_NLS" >&5 $as_echo "$USE_NLS" >&6; } GETTEXT_MACRO_VERSION=0.19 # Prepare PATH_SEPARATOR. # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then # Determine PATH_SEPARATOR by trying to find /bin/sh in a PATH which # contains only /bin. Note that ksh looks also at the FPATH variable, # so we have to set that as well for the test. 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 # Find out how to test for executable files. Don't use a zero-byte file, # as systems may use methods other than mode bits to determine executability. cat >conf$$.file <<_ASEOF #! /bin/sh exit 0 _ASEOF chmod +x conf$$.file if test -x conf$$.file >/dev/null 2>&1; then ac_executable_p="test -x" else ac_executable_p="test -f" fi rm -f conf$$.file # Extract the first word of "msgfmt", so it can be a program name with args. set dummy msgfmt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_MSGFMT+:} false; then : $as_echo_n "(cached) " >&6 else case "$MSGFMT" in [\\/]* | ?:[\\/]*) ac_cv_path_MSGFMT="$MSGFMT" # Let the user override the test with a path. ;; *) ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$ac_save_IFS" test -z "$ac_dir" && ac_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then echo "$as_me: trying $ac_dir/$ac_word..." >&5 if $ac_dir/$ac_word --statistics /dev/null >&5 2>&1 && (if $ac_dir/$ac_word --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then ac_cv_path_MSGFMT="$ac_dir/$ac_word$ac_exec_ext" break 2 fi fi done done IFS="$ac_save_IFS" test -z "$ac_cv_path_MSGFMT" && ac_cv_path_MSGFMT=":" ;; esac fi MSGFMT="$ac_cv_path_MSGFMT" if test "$MSGFMT" != ":"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MSGFMT" >&5 $as_echo "$MSGFMT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi # Extract the first word of "gmsgfmt", so it can be a program name with args. set dummy gmsgfmt; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_GMSGFMT+:} false; then : $as_echo_n "(cached) " >&6 else case $GMSGFMT in [\\/]* | ?:[\\/]*) ac_cv_path_GMSGFMT="$GMSGFMT" # 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 as_fn_executable_p "$as_dir/$ac_word$ac_exec_ext"; then ac_cv_path_GMSGFMT="$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_GMSGFMT" && ac_cv_path_GMSGFMT="$MSGFMT" ;; esac fi GMSGFMT=$ac_cv_path_GMSGFMT if test -n "$GMSGFMT"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $GMSGFMT" >&5 $as_echo "$GMSGFMT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi case `$MSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) MSGFMT_015=: ;; *) MSGFMT_015=$MSGFMT ;; esac case `$GMSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) GMSGFMT_015=: ;; *) GMSGFMT_015=$GMSGFMT ;; esac # Prepare PATH_SEPARATOR. # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then # Determine PATH_SEPARATOR by trying to find /bin/sh in a PATH which # contains only /bin. Note that ksh looks also at the FPATH variable, # so we have to set that as well for the test. 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 # Find out how to test for executable files. Don't use a zero-byte file, # as systems may use methods other than mode bits to determine executability. cat >conf$$.file <<_ASEOF #! /bin/sh exit 0 _ASEOF chmod +x conf$$.file if test -x conf$$.file >/dev/null 2>&1; then ac_executable_p="test -x" else ac_executable_p="test -f" fi rm -f conf$$.file # Extract the first word of "xgettext", so it can be a program name with args. set dummy xgettext; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_XGETTEXT+:} false; then : $as_echo_n "(cached) " >&6 else case "$XGETTEXT" in [\\/]* | ?:[\\/]*) ac_cv_path_XGETTEXT="$XGETTEXT" # Let the user override the test with a path. ;; *) ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$ac_save_IFS" test -z "$ac_dir" && ac_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then echo "$as_me: trying $ac_dir/$ac_word..." >&5 if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >&5 2>&1 && (if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then ac_cv_path_XGETTEXT="$ac_dir/$ac_word$ac_exec_ext" break 2 fi fi done done IFS="$ac_save_IFS" test -z "$ac_cv_path_XGETTEXT" && ac_cv_path_XGETTEXT=":" ;; esac fi XGETTEXT="$ac_cv_path_XGETTEXT" if test "$XGETTEXT" != ":"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $XGETTEXT" >&5 $as_echo "$XGETTEXT" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi rm -f messages.po case `$XGETTEXT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) XGETTEXT_015=: ;; *) XGETTEXT_015=$XGETTEXT ;; esac # Prepare PATH_SEPARATOR. # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then # Determine PATH_SEPARATOR by trying to find /bin/sh in a PATH which # contains only /bin. Note that ksh looks also at the FPATH variable, # so we have to set that as well for the test. 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 # Find out how to test for executable files. Don't use a zero-byte file, # as systems may use methods other than mode bits to determine executability. cat >conf$$.file <<_ASEOF #! /bin/sh exit 0 _ASEOF chmod +x conf$$.file if test -x conf$$.file >/dev/null 2>&1; then ac_executable_p="test -x" else ac_executable_p="test -f" fi rm -f conf$$.file # Extract the first word of "msgmerge", so it can be a program name with args. set dummy msgmerge; ac_word=$2 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for $ac_word" >&5 $as_echo_n "checking for $ac_word... " >&6; } if ${ac_cv_path_MSGMERGE+:} false; then : $as_echo_n "(cached) " >&6 else case "$MSGMERGE" in [\\/]* | ?:[\\/]*) ac_cv_path_MSGMERGE="$MSGMERGE" # Let the user override the test with a path. ;; *) ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$ac_save_IFS" test -z "$ac_dir" && ac_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then echo "$as_me: trying $ac_dir/$ac_word..." >&5 if $ac_dir/$ac_word --update -q /dev/null /dev/null >&5 2>&1; then ac_cv_path_MSGMERGE="$ac_dir/$ac_word$ac_exec_ext" break 2 fi fi done done IFS="$ac_save_IFS" test -z "$ac_cv_path_MSGMERGE" && ac_cv_path_MSGMERGE=":" ;; esac fi MSGMERGE="$ac_cv_path_MSGMERGE" if test "$MSGMERGE" != ":"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $MSGMERGE" >&5 $as_echo "$MSGMERGE" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5 $as_echo "no" >&6; } fi test -n "$localedir" || localedir='${datadir}/locale' test -n "${XGETTEXT_EXTRA_OPTIONS+set}" || XGETTEXT_EXTRA_OPTIONS= ac_config_commands="$ac_config_commands po-directories" if test "X$prefix" = "XNONE"; then acl_final_prefix="$ac_default_prefix" else acl_final_prefix="$prefix" fi if test "X$exec_prefix" = "XNONE"; then acl_final_exec_prefix='${prefix}' else acl_final_exec_prefix="$exec_prefix" fi acl_save_prefix="$prefix" prefix="$acl_final_prefix" eval acl_final_exec_prefix=\"$acl_final_exec_prefix\" prefix="$acl_save_prefix" # 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 # Prepare PATH_SEPARATOR. # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then # Determine PATH_SEPARATOR by trying to find /bin/sh in a PATH which # contains only /bin. Note that ksh looks also at the FPATH variable, # so we have to set that as well for the test. 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 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 ${acl_cv_path_LD+:} false; then : $as_echo_n "(cached) " >&6 else if test -z "$LD"; then acl_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$acl_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then acl_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 `"$acl_cv_path_LD" -v 2>&1 &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 ${acl_cv_prog_gnu_ld+:} false; 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 &5 $as_echo "$acl_cv_prog_gnu_ld" >&6; } with_gnu_ld=$acl_cv_prog_gnu_ld { $as_echo "$as_me:${as_lineno-$LINENO}: checking for shared library run path origin" >&5 $as_echo_n "checking for shared library run path origin... " >&6; } if ${acl_cv_rpath+:} false; then : $as_echo_n "(cached) " >&6 else CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \ ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh . ./conftest.sh rm -f ./conftest.sh acl_cv_rpath=done fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $acl_cv_rpath" >&5 $as_echo "$acl_cv_rpath" >&6; } wl="$acl_cv_wl" acl_libext="$acl_cv_libext" acl_shlibext="$acl_cv_shlibext" acl_libname_spec="$acl_cv_libname_spec" acl_library_names_spec="$acl_cv_library_names_spec" acl_hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec" acl_hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator" acl_hardcode_direct="$acl_cv_hardcode_direct" acl_hardcode_minus_L="$acl_cv_hardcode_minus_L" # Check whether --enable-rpath was given. if test "${enable_rpath+set}" = set; then : enableval=$enable_rpath; : else enable_rpath=yes fi acl_libdirstem=lib acl_libdirstem2= case "$host_os" in solaris*) { $as_echo "$as_me:${as_lineno-$LINENO}: checking for 64-bit host" >&5 $as_echo_n "checking for 64-bit host... " >&6; } if ${gl_cv_solaris_64bit+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef _LP64 sixtyfour bits #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "sixtyfour bits" >/dev/null 2>&1; then : gl_cv_solaris_64bit=yes else gl_cv_solaris_64bit=no fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_solaris_64bit" >&5 $as_echo "$gl_cv_solaris_64bit" >&6; } if test $gl_cv_solaris_64bit = yes; then acl_libdirstem=lib/64 case "$host_cpu" in sparc*) acl_libdirstem2=lib/sparcv9 ;; i*86 | x86_64) acl_libdirstem2=lib/amd64 ;; esac fi ;; *) searchpath=`(LC_ALL=C $CC -print-search-dirs) 2>/dev/null | sed -n -e 's,^libraries: ,,p' | sed -e 's,^=,,'` if test -n "$searchpath"; then acl_save_IFS="${IFS= }"; IFS=":" for searchdir in $searchpath; do if test -d "$searchdir"; then case "$searchdir" in */lib64/ | */lib64 ) acl_libdirstem=lib64 ;; */../ | */.. ) # Better ignore directories of this form. They are misleading. ;; *) searchdir=`cd "$searchdir" && pwd` case "$searchdir" in */lib64 ) acl_libdirstem=lib64 ;; esac ;; esac fi done IFS="$acl_save_IFS" fi ;; esac test -n "$acl_libdirstem2" || acl_libdirstem2="$acl_libdirstem" use_additional=yes acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" # Check whether --with-libiconv-prefix was given. if test "${with_libiconv_prefix+set}" = set; then : withval=$with_libiconv_prefix; if test "X$withval" = "Xno"; then use_additional=no else if test "X$withval" = "X"; then acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" else additional_includedir="$withval/include" additional_libdir="$withval/$acl_libdirstem" if test "$acl_libdirstem2" != "$acl_libdirstem" \ && ! test -d "$withval/$acl_libdirstem"; then additional_libdir="$withval/$acl_libdirstem2" fi fi fi fi LIBICONV= LTLIBICONV= INCICONV= LIBICONV_PREFIX= HAVE_LIBICONV= rpathdirs= ltrpathdirs= names_already_handled= names_next_round='iconv ' while test -n "$names_next_round"; do names_this_round="$names_next_round" names_next_round= for name in $names_this_round; do already_handled= for n in $names_already_handled; do if test "$n" = "$name"; then already_handled=yes break fi done if test -z "$already_handled"; then names_already_handled="$names_already_handled $name" uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./+-|ABCDEFGHIJKLMNOPQRSTUVWXYZ____|'` eval value=\"\$HAVE_LIB$uppername\" if test -n "$value"; then if test "$value" = yes; then eval value=\"\$LIB$uppername\" test -z "$value" || LIBICONV="${LIBICONV}${LIBICONV:+ }$value" eval value=\"\$LTLIB$uppername\" test -z "$value" || LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }$value" else : fi else found_dir= found_la= found_so= found_a= eval libname=\"$acl_libname_spec\" # typically: libname=lib$name if test -n "$acl_shlibext"; then shrext=".$acl_shlibext" # typically: shrext=.so else shrext= fi if test $use_additional = yes; then dir="$additional_libdir" if test -n "$acl_shlibext"; then if test -f "$dir/$libname$shrext"; then found_dir="$dir" found_so="$dir/$libname$shrext" else if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then ver=`(cd "$dir" && \ for f in "$libname$shrext".*; do echo "$f"; done \ | sed -e "s,^$libname$shrext\\\\.,," \ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ | sed 1q ) 2>/dev/null` if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then found_dir="$dir" found_so="$dir/$libname$shrext.$ver" fi else eval library_names=\"$acl_library_names_spec\" for f in $library_names; do if test -f "$dir/$f"; then found_dir="$dir" found_so="$dir/$f" break fi done fi fi fi if test "X$found_dir" = "X"; then if test -f "$dir/$libname.$acl_libext"; then found_dir="$dir" found_a="$dir/$libname.$acl_libext" fi fi if test "X$found_dir" != "X"; then if test -f "$dir/$libname.la"; then found_la="$dir/$libname.la" fi fi fi if test "X$found_dir" = "X"; then for x in $LDFLAGS $LTLIBICONV; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" case "$x" in -L*) dir=`echo "X$x" | sed -e 's/^X-L//'` if test -n "$acl_shlibext"; then if test -f "$dir/$libname$shrext"; then found_dir="$dir" found_so="$dir/$libname$shrext" else if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then ver=`(cd "$dir" && \ for f in "$libname$shrext".*; do echo "$f"; done \ | sed -e "s,^$libname$shrext\\\\.,," \ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ | sed 1q ) 2>/dev/null` if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then found_dir="$dir" found_so="$dir/$libname$shrext.$ver" fi else eval library_names=\"$acl_library_names_spec\" for f in $library_names; do if test -f "$dir/$f"; then found_dir="$dir" found_so="$dir/$f" break fi done fi fi fi if test "X$found_dir" = "X"; then if test -f "$dir/$libname.$acl_libext"; then found_dir="$dir" found_a="$dir/$libname.$acl_libext" fi fi if test "X$found_dir" != "X"; then if test -f "$dir/$libname.la"; then found_la="$dir/$libname.la" fi fi ;; esac if test "X$found_dir" != "X"; then break fi done fi if test "X$found_dir" != "X"; then LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-L$found_dir -l$name" if test "X$found_so" != "X"; then if test "$enable_rpath" = no \ || test "X$found_dir" = "X/usr/$acl_libdirstem" \ || test "X$found_dir" = "X/usr/$acl_libdirstem2"; then LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" else haveit= for x in $ltrpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $found_dir" fi if test "$acl_hardcode_direct" = yes; then LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" else if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" haveit= for x in $rpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $found_dir" fi else haveit= for x in $LDFLAGS $LIBICONV; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-L$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then LIBICONV="${LIBICONV}${LIBICONV:+ }-L$found_dir" fi if test "$acl_hardcode_minus_L" != no; then LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" else LIBICONV="${LIBICONV}${LIBICONV:+ }-l$name" fi fi fi fi else if test "X$found_a" != "X"; then LIBICONV="${LIBICONV}${LIBICONV:+ }$found_a" else LIBICONV="${LIBICONV}${LIBICONV:+ }-L$found_dir -l$name" fi fi additional_includedir= case "$found_dir" in */$acl_libdirstem | */$acl_libdirstem/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'` if test "$name" = 'iconv'; then LIBICONV_PREFIX="$basedir" fi additional_includedir="$basedir/include" ;; */$acl_libdirstem2 | */$acl_libdirstem2/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem2/"'*$,,'` if test "$name" = 'iconv'; then LIBICONV_PREFIX="$basedir" fi additional_includedir="$basedir/include" ;; esac if test "X$additional_includedir" != "X"; then if test "X$additional_includedir" != "X/usr/include"; then haveit= if test "X$additional_includedir" = "X/usr/local/include"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then for x in $CPPFLAGS $INCICONV; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-I$additional_includedir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_includedir"; then INCICONV="${INCICONV}${INCICONV:+ }-I$additional_includedir" fi fi fi fi fi if test -n "$found_la"; then save_libdir="$libdir" case "$found_la" in */* | *\\*) . "$found_la" ;; *) . "./$found_la" ;; esac libdir="$save_libdir" for dep in $dependency_libs; do case "$dep" in -L*) additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'` if test "X$additional_libdir" != "X/usr/$acl_libdirstem" \ && test "X$additional_libdir" != "X/usr/$acl_libdirstem2"; then haveit= if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem" \ || test "X$additional_libdir" = "X/usr/local/$acl_libdirstem2"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then haveit= for x in $LDFLAGS $LIBICONV; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_libdir"; then LIBICONV="${LIBICONV}${LIBICONV:+ }-L$additional_libdir" fi fi haveit= for x in $LDFLAGS $LTLIBICONV; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_libdir"; then LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-L$additional_libdir" fi fi fi fi ;; -R*) dir=`echo "X$dep" | sed -e 's/^X-R//'` if test "$enable_rpath" != no; then haveit= for x in $rpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $dir" fi haveit= for x in $ltrpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $dir" fi fi ;; -l*) names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'` ;; *.la) names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` ;; *) LIBICONV="${LIBICONV}${LIBICONV:+ }$dep" LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }$dep" ;; esac done fi else LIBICONV="${LIBICONV}${LIBICONV:+ }-l$name" LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-l$name" fi fi fi done done if test "X$rpathdirs" != "X"; then if test -n "$acl_hardcode_libdir_separator"; then alldirs= for found_dir in $rpathdirs; do alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir" done acl_save_libdir="$libdir" libdir="$alldirs" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIBICONV="${LIBICONV}${LIBICONV:+ }$flag" else for found_dir in $rpathdirs; do acl_save_libdir="$libdir" libdir="$found_dir" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIBICONV="${LIBICONV}${LIBICONV:+ }$flag" done fi fi if test "X$ltrpathdirs" != "X"; then for found_dir in $ltrpathdirs; do LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-R$found_dir" done fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for CFPreferencesCopyAppValue" >&5 $as_echo_n "checking for CFPreferencesCopyAppValue... " >&6; } if ${gt_cv_func_CFPreferencesCopyAppValue+:} false; then : $as_echo_n "(cached) " >&6 else gt_save_LIBS="$LIBS" LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { CFPreferencesCopyAppValue(NULL, NULL) ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : gt_cv_func_CFPreferencesCopyAppValue=yes else gt_cv_func_CFPreferencesCopyAppValue=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS="$gt_save_LIBS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_CFPreferencesCopyAppValue" >&5 $as_echo "$gt_cv_func_CFPreferencesCopyAppValue" >&6; } if test $gt_cv_func_CFPreferencesCopyAppValue = yes; then $as_echo "#define HAVE_CFPREFERENCESCOPYAPPVALUE 1" >>confdefs.h fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for CFLocaleCopyCurrent" >&5 $as_echo_n "checking for CFLocaleCopyCurrent... " >&6; } if ${gt_cv_func_CFLocaleCopyCurrent+:} false; then : $as_echo_n "(cached) " >&6 else gt_save_LIBS="$LIBS" LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { CFLocaleCopyCurrent(); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : gt_cv_func_CFLocaleCopyCurrent=yes else gt_cv_func_CFLocaleCopyCurrent=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS="$gt_save_LIBS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_CFLocaleCopyCurrent" >&5 $as_echo "$gt_cv_func_CFLocaleCopyCurrent" >&6; } if test $gt_cv_func_CFLocaleCopyCurrent = yes; then $as_echo "#define HAVE_CFLOCALECOPYCURRENT 1" >>confdefs.h fi INTL_MACOSX_LIBS= if test $gt_cv_func_CFPreferencesCopyAppValue = yes || test $gt_cv_func_CFLocaleCopyCurrent = yes; then INTL_MACOSX_LIBS="-Wl,-framework -Wl,CoreFoundation" fi LIBINTL= LTLIBINTL= POSUB= case " $gt_needs " in *" need-formatstring-macros "*) gt_api_version=3 ;; *" need-ngettext "*) gt_api_version=2 ;; *) gt_api_version=1 ;; esac gt_func_gnugettext_libc="gt_cv_func_gnugettext${gt_api_version}_libc" gt_func_gnugettext_libintl="gt_cv_func_gnugettext${gt_api_version}_libintl" if test "$USE_NLS" = "yes"; then gt_use_preinstalled_gnugettext=no if test $gt_api_version -ge 3; then gt_revision_test_code=' #ifndef __GNU_GETTEXT_SUPPORTED_REVISION #define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1) #endif typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1]; ' else gt_revision_test_code= fi if test $gt_api_version -ge 2; then gt_expression_test_code=' + * ngettext ("", "", 0)' else gt_expression_test_code= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU gettext in libc" >&5 $as_echo_n "checking for GNU gettext in libc... " >&6; } if eval \${$gt_func_gnugettext_libc+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include $gt_revision_test_code extern int _nl_msg_cat_cntr; extern int *_nl_domain_bindings; int main () { bindtextdomain ("", ""); return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_domain_bindings ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$gt_func_gnugettext_libc=yes" else eval "$gt_func_gnugettext_libc=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi eval ac_res=\$$gt_func_gnugettext_libc { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" != "yes"; }; then am_save_CPPFLAGS="$CPPFLAGS" for element in $INCICONV; do haveit= for x in $CPPFLAGS; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X$element"; then haveit=yes break fi done if test -z "$haveit"; then CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }$element" fi done { $as_echo "$as_me:${as_lineno-$LINENO}: checking for iconv" >&5 $as_echo_n "checking for iconv... " >&6; } if ${am_cv_func_iconv+:} false; then : $as_echo_n "(cached) " >&6 else am_cv_func_iconv="no, consider installing GNU libiconv" am_cv_lib_iconv=no cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { iconv_t cd = iconv_open("",""); iconv(cd,NULL,NULL,NULL,NULL); iconv_close(cd); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : am_cv_func_iconv=yes fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test "$am_cv_func_iconv" != yes; then am_save_LIBS="$LIBS" LIBS="$LIBS $LIBICONV" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { iconv_t cd = iconv_open("",""); iconv(cd,NULL,NULL,NULL,NULL); iconv_close(cd); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : am_cv_lib_iconv=yes am_cv_func_iconv=yes fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS="$am_save_LIBS" fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_func_iconv" >&5 $as_echo "$am_cv_func_iconv" >&6; } if test "$am_cv_func_iconv" = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working iconv" >&5 $as_echo_n "checking for working iconv... " >&6; } if ${am_cv_func_iconv_works+:} false; then : $as_echo_n "(cached) " >&6 else am_save_LIBS="$LIBS" if test $am_cv_lib_iconv = yes; then LIBS="$LIBS $LIBICONV" fi if test "$cross_compiling" = yes; then : case "$host_os" in aix* | hpux*) am_cv_func_iconv_works="guessing no" ;; *) am_cv_func_iconv_works="guessing yes" ;; esac else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { int result = 0; /* Test against AIX 5.1 bug: Failures are not distinguishable from successful returns. */ { iconv_t cd_utf8_to_88591 = iconv_open ("ISO8859-1", "UTF-8"); if (cd_utf8_to_88591 != (iconv_t)(-1)) { static const char input[] = "\342\202\254"; /* EURO SIGN */ char buf[10]; const char *inptr = input; size_t inbytesleft = strlen (input); char *outptr = buf; size_t outbytesleft = sizeof (buf); size_t res = iconv (cd_utf8_to_88591, (char **) &inptr, &inbytesleft, &outptr, &outbytesleft); if (res == 0) result |= 1; iconv_close (cd_utf8_to_88591); } } /* Test against Solaris 10 bug: Failures are not distinguishable from successful returns. */ { iconv_t cd_ascii_to_88591 = iconv_open ("ISO8859-1", "646"); if (cd_ascii_to_88591 != (iconv_t)(-1)) { static const char input[] = "\263"; char buf[10]; const char *inptr = input; size_t inbytesleft = strlen (input); char *outptr = buf; size_t outbytesleft = sizeof (buf); size_t res = iconv (cd_ascii_to_88591, (char **) &inptr, &inbytesleft, &outptr, &outbytesleft); if (res == 0) result |= 2; iconv_close (cd_ascii_to_88591); } } /* Test against AIX 6.1..7.1 bug: Buffer overrun. */ { iconv_t cd_88591_to_utf8 = iconv_open ("UTF-8", "ISO-8859-1"); if (cd_88591_to_utf8 != (iconv_t)(-1)) { static const char input[] = "\304"; static char buf[2] = { (char)0xDE, (char)0xAD }; const char *inptr = input; size_t inbytesleft = 1; char *outptr = buf; size_t outbytesleft = 1; size_t res = iconv (cd_88591_to_utf8, (char **) &inptr, &inbytesleft, &outptr, &outbytesleft); if (res != (size_t)(-1) || outptr - buf > 1 || buf[1] != (char)0xAD) result |= 4; iconv_close (cd_88591_to_utf8); } } #if 0 /* This bug could be worked around by the caller. */ /* Test against HP-UX 11.11 bug: Positive return value instead of 0. */ { iconv_t cd_88591_to_utf8 = iconv_open ("utf8", "iso88591"); if (cd_88591_to_utf8 != (iconv_t)(-1)) { static const char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337"; char buf[50]; const char *inptr = input; size_t inbytesleft = strlen (input); char *outptr = buf; size_t outbytesleft = sizeof (buf); size_t res = iconv (cd_88591_to_utf8, (char **) &inptr, &inbytesleft, &outptr, &outbytesleft); if ((int)res > 0) result |= 8; iconv_close (cd_88591_to_utf8); } } #endif /* Test against HP-UX 11.11 bug: No converter from EUC-JP to UTF-8 is provided. */ if (/* Try standardized names. */ iconv_open ("UTF-8", "EUC-JP") == (iconv_t)(-1) /* Try IRIX, OSF/1 names. */ && iconv_open ("UTF-8", "eucJP") == (iconv_t)(-1) /* Try AIX names. */ && iconv_open ("UTF-8", "IBM-eucJP") == (iconv_t)(-1) /* Try HP-UX names. */ && iconv_open ("utf8", "eucJP") == (iconv_t)(-1)) result |= 16; return result; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : am_cv_func_iconv_works=yes else am_cv_func_iconv_works=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi LIBS="$am_save_LIBS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $am_cv_func_iconv_works" >&5 $as_echo "$am_cv_func_iconv_works" >&6; } case "$am_cv_func_iconv_works" in *no) am_func_iconv=no am_cv_lib_iconv=no ;; *) am_func_iconv=yes ;; esac else am_func_iconv=no am_cv_lib_iconv=no fi if test "$am_func_iconv" = yes; then $as_echo "#define HAVE_ICONV 1" >>confdefs.h fi if test "$am_cv_lib_iconv" = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to link with libiconv" >&5 $as_echo_n "checking how to link with libiconv... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIBICONV" >&5 $as_echo "$LIBICONV" >&6; } else CPPFLAGS="$am_save_CPPFLAGS" LIBICONV= LTLIBICONV= fi use_additional=yes acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" # Check whether --with-libintl-prefix was given. if test "${with_libintl_prefix+set}" = set; then : withval=$with_libintl_prefix; if test "X$withval" = "Xno"; then use_additional=no else if test "X$withval" = "X"; then acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" else additional_includedir="$withval/include" additional_libdir="$withval/$acl_libdirstem" if test "$acl_libdirstem2" != "$acl_libdirstem" \ && ! test -d "$withval/$acl_libdirstem"; then additional_libdir="$withval/$acl_libdirstem2" fi fi fi fi LIBINTL= LTLIBINTL= INCINTL= LIBINTL_PREFIX= HAVE_LIBINTL= rpathdirs= ltrpathdirs= names_already_handled= names_next_round='intl ' while test -n "$names_next_round"; do names_this_round="$names_next_round" names_next_round= for name in $names_this_round; do already_handled= for n in $names_already_handled; do if test "$n" = "$name"; then already_handled=yes break fi done if test -z "$already_handled"; then names_already_handled="$names_already_handled $name" uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./+-|ABCDEFGHIJKLMNOPQRSTUVWXYZ____|'` eval value=\"\$HAVE_LIB$uppername\" if test -n "$value"; then if test "$value" = yes; then eval value=\"\$LIB$uppername\" test -z "$value" || LIBINTL="${LIBINTL}${LIBINTL:+ }$value" eval value=\"\$LTLIB$uppername\" test -z "$value" || LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }$value" else : fi else found_dir= found_la= found_so= found_a= eval libname=\"$acl_libname_spec\" # typically: libname=lib$name if test -n "$acl_shlibext"; then shrext=".$acl_shlibext" # typically: shrext=.so else shrext= fi if test $use_additional = yes; then dir="$additional_libdir" if test -n "$acl_shlibext"; then if test -f "$dir/$libname$shrext"; then found_dir="$dir" found_so="$dir/$libname$shrext" else if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then ver=`(cd "$dir" && \ for f in "$libname$shrext".*; do echo "$f"; done \ | sed -e "s,^$libname$shrext\\\\.,," \ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ | sed 1q ) 2>/dev/null` if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then found_dir="$dir" found_so="$dir/$libname$shrext.$ver" fi else eval library_names=\"$acl_library_names_spec\" for f in $library_names; do if test -f "$dir/$f"; then found_dir="$dir" found_so="$dir/$f" break fi done fi fi fi if test "X$found_dir" = "X"; then if test -f "$dir/$libname.$acl_libext"; then found_dir="$dir" found_a="$dir/$libname.$acl_libext" fi fi if test "X$found_dir" != "X"; then if test -f "$dir/$libname.la"; then found_la="$dir/$libname.la" fi fi fi if test "X$found_dir" = "X"; then for x in $LDFLAGS $LTLIBINTL; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" case "$x" in -L*) dir=`echo "X$x" | sed -e 's/^X-L//'` if test -n "$acl_shlibext"; then if test -f "$dir/$libname$shrext"; then found_dir="$dir" found_so="$dir/$libname$shrext" else if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then ver=`(cd "$dir" && \ for f in "$libname$shrext".*; do echo "$f"; done \ | sed -e "s,^$libname$shrext\\\\.,," \ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ | sed 1q ) 2>/dev/null` if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then found_dir="$dir" found_so="$dir/$libname$shrext.$ver" fi else eval library_names=\"$acl_library_names_spec\" for f in $library_names; do if test -f "$dir/$f"; then found_dir="$dir" found_so="$dir/$f" break fi done fi fi fi if test "X$found_dir" = "X"; then if test -f "$dir/$libname.$acl_libext"; then found_dir="$dir" found_a="$dir/$libname.$acl_libext" fi fi if test "X$found_dir" != "X"; then if test -f "$dir/$libname.la"; then found_la="$dir/$libname.la" fi fi ;; esac if test "X$found_dir" != "X"; then break fi done fi if test "X$found_dir" != "X"; then LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-L$found_dir -l$name" if test "X$found_so" != "X"; then if test "$enable_rpath" = no \ || test "X$found_dir" = "X/usr/$acl_libdirstem" \ || test "X$found_dir" = "X/usr/$acl_libdirstem2"; then LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so" else haveit= for x in $ltrpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $found_dir" fi if test "$acl_hardcode_direct" = yes; then LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so" else if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so" haveit= for x in $rpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $found_dir" fi else haveit= for x in $LDFLAGS $LIBINTL; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-L$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then LIBINTL="${LIBINTL}${LIBINTL:+ }-L$found_dir" fi if test "$acl_hardcode_minus_L" != no; then LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so" else LIBINTL="${LIBINTL}${LIBINTL:+ }-l$name" fi fi fi fi else if test "X$found_a" != "X"; then LIBINTL="${LIBINTL}${LIBINTL:+ }$found_a" else LIBINTL="${LIBINTL}${LIBINTL:+ }-L$found_dir -l$name" fi fi additional_includedir= case "$found_dir" in */$acl_libdirstem | */$acl_libdirstem/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'` if test "$name" = 'intl'; then LIBINTL_PREFIX="$basedir" fi additional_includedir="$basedir/include" ;; */$acl_libdirstem2 | */$acl_libdirstem2/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem2/"'*$,,'` if test "$name" = 'intl'; then LIBINTL_PREFIX="$basedir" fi additional_includedir="$basedir/include" ;; esac if test "X$additional_includedir" != "X"; then if test "X$additional_includedir" != "X/usr/include"; then haveit= if test "X$additional_includedir" = "X/usr/local/include"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then for x in $CPPFLAGS $INCINTL; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-I$additional_includedir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_includedir"; then INCINTL="${INCINTL}${INCINTL:+ }-I$additional_includedir" fi fi fi fi fi if test -n "$found_la"; then save_libdir="$libdir" case "$found_la" in */* | *\\*) . "$found_la" ;; *) . "./$found_la" ;; esac libdir="$save_libdir" for dep in $dependency_libs; do case "$dep" in -L*) additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'` if test "X$additional_libdir" != "X/usr/$acl_libdirstem" \ && test "X$additional_libdir" != "X/usr/$acl_libdirstem2"; then haveit= if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem" \ || test "X$additional_libdir" = "X/usr/local/$acl_libdirstem2"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then haveit= for x in $LDFLAGS $LIBINTL; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_libdir"; then LIBINTL="${LIBINTL}${LIBINTL:+ }-L$additional_libdir" fi fi haveit= for x in $LDFLAGS $LTLIBINTL; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_libdir"; then LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-L$additional_libdir" fi fi fi fi ;; -R*) dir=`echo "X$dep" | sed -e 's/^X-R//'` if test "$enable_rpath" != no; then haveit= for x in $rpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $dir" fi haveit= for x in $ltrpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $dir" fi fi ;; -l*) names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'` ;; *.la) names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` ;; *) LIBINTL="${LIBINTL}${LIBINTL:+ }$dep" LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }$dep" ;; esac done fi else LIBINTL="${LIBINTL}${LIBINTL:+ }-l$name" LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-l$name" fi fi fi done done if test "X$rpathdirs" != "X"; then if test -n "$acl_hardcode_libdir_separator"; then alldirs= for found_dir in $rpathdirs; do alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir" done acl_save_libdir="$libdir" libdir="$alldirs" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIBINTL="${LIBINTL}${LIBINTL:+ }$flag" else for found_dir in $rpathdirs; do acl_save_libdir="$libdir" libdir="$found_dir" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIBINTL="${LIBINTL}${LIBINTL:+ }$flag" done fi fi if test "X$ltrpathdirs" != "X"; then for found_dir in $ltrpathdirs; do LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-R$found_dir" done fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for GNU gettext in libintl" >&5 $as_echo_n "checking for GNU gettext in libintl... " >&6; } if eval \${$gt_func_gnugettext_libintl+:} false; then : $as_echo_n "(cached) " >&6 else gt_save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$CPPFLAGS $INCINTL" gt_save_LIBS="$LIBS" LIBS="$LIBS $LIBINTL" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include $gt_revision_test_code extern int _nl_msg_cat_cntr; extern #ifdef __cplusplus "C" #endif const char *_nl_expand_alias (const char *); int main () { bindtextdomain ("", ""); return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_expand_alias ("") ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$gt_func_gnugettext_libintl=yes" else eval "$gt_func_gnugettext_libintl=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" != yes; } && test -n "$LIBICONV"; then LIBS="$LIBS $LIBICONV" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include $gt_revision_test_code extern int _nl_msg_cat_cntr; extern #ifdef __cplusplus "C" #endif const char *_nl_expand_alias (const char *); int main () { bindtextdomain ("", ""); return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_expand_alias ("") ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : LIBINTL="$LIBINTL $LIBICONV" LTLIBINTL="$LTLIBINTL $LTLIBICONV" eval "$gt_func_gnugettext_libintl=yes" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext fi CPPFLAGS="$gt_save_CPPFLAGS" LIBS="$gt_save_LIBS" fi eval ac_res=\$$gt_func_gnugettext_libintl { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } fi if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" = "yes"; } \ || { { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; } \ && test "$PACKAGE" != gettext-runtime \ && test "$PACKAGE" != gettext-tools; }; then gt_use_preinstalled_gnugettext=yes else LIBINTL= LTLIBINTL= INCINTL= fi if test -n "$INTL_MACOSX_LIBS"; then if test "$gt_use_preinstalled_gnugettext" = "yes" \ || test "$nls_cv_use_gnu_gettext" = "yes"; then LIBINTL="$LIBINTL $INTL_MACOSX_LIBS" LTLIBINTL="$LTLIBINTL $INTL_MACOSX_LIBS" fi fi if test "$gt_use_preinstalled_gnugettext" = "yes" \ || test "$nls_cv_use_gnu_gettext" = "yes"; then $as_echo "#define ENABLE_NLS 1" >>confdefs.h else USE_NLS=no fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether to use NLS" >&5 $as_echo_n "checking whether to use NLS... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $USE_NLS" >&5 $as_echo "$USE_NLS" >&6; } if test "$USE_NLS" = "yes"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking where the gettext function comes from" >&5 $as_echo_n "checking where the gettext function comes from... " >&6; } if test "$gt_use_preinstalled_gnugettext" = "yes"; then if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then gt_source="external libintl" else gt_source="libc" fi else gt_source="included intl directory" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gt_source" >&5 $as_echo "$gt_source" >&6; } fi if test "$USE_NLS" = "yes"; then if test "$gt_use_preinstalled_gnugettext" = "yes"; then if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to link with libintl" >&5 $as_echo_n "checking how to link with libintl... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIBINTL" >&5 $as_echo "$LIBINTL" >&6; } for element in $INCINTL; do haveit= for x in $CPPFLAGS; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X$element"; then haveit=yes break fi done if test -z "$haveit"; then CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }$element" fi done fi $as_echo "#define HAVE_GETTEXT 1" >>confdefs.h $as_echo "#define HAVE_DCGETTEXT 1" >>confdefs.h fi POSUB=po fi INTLLIBS="$LIBINTL" # For gnulib stuff. LIBC_FATAL_STDERR_=1 export LIBC_FATAL_STDERR_ 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' # 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" # 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 <conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : accepts_syntax_errors=yes else accepts_syntax_errors=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext if test "$accepts_syntax_errors" = no; then cat > conftest.map <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 else have_ld_version_script=no fi 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 # 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 ${ac_cv_path_PMCCABE+:} false; 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 as_fn_executable_p "$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 # 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 ${ac_cv_prog_VALGRIND+:} false; 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 as_fn_executable_p "$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 OPTS="-q --error-exitcode=1 --leak-check=no" if test -n "$VALGRIND" \ && $VALGRIND $OPTS $SHELL -c 'exit 0' > /dev/null 2>&1; then opt_valgrind_tests=yes VALGRIND="$VALGRIND $OPTS" 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; } # End of code from modules gltests_libdeps= gltests_ltlibdeps= gl_source_base='gl/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 ${ac_cv_prog_VALGRIND+:} false; 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 as_fn_executable_p "$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 OPTS="-q --error-exitcode=1 --leak-check=no" if test -n "$VALGRIND" \ && $VALGRIND $OPTS $SHELL -c 'exit 0' > /dev/null 2>&1; then opt_valgrind_tests=yes VALGRIND="$VALGRIND $OPTS" 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; } REPLACE_NULL=0; HAVE_WCHAR_T=1; { $as_echo "$as_me:${as_lineno-$LINENO}: checking for wchar_t" >&5 $as_echo_n "checking for wchar_t... " >&6; } if ${gt_cv_c_wchar_t+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include 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 whether the preprocessor supports include_next" >&5 $as_echo_n "checking whether the preprocessor supports include_next... " >&6; } if ${gl_cv_have_include_next+:} false; then : $as_echo_n "(cached) " >&6 else rm -rf conftestd1a conftestd1b conftestd2 mkdir conftestd1a conftestd1b conftestd2 cat < conftestd1a/conftest.h #define DEFINED_IN_CONFTESTD1 #include_next #ifdef DEFINED_IN_CONFTESTD2 int foo; #else #error "include_next doesn't work" #endif EOF cat < conftestd1b/conftest.h #define DEFINED_IN_CONFTESTD1 #include #include_next #ifdef DEFINED_IN_CONFTESTD2 int foo; #else #error "include_next doesn't work" #endif EOF cat < 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 _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 _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 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether system header files limit the line length" >&5 $as_echo_n "checking whether system header files limit the line length... " >&6; } if ${gl_cv_pragma_columns+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __TANDEM choke me #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "choke me" >/dev/null 2>&1; then : gl_cv_pragma_columns=yes else gl_cv_pragma_columns=no fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_pragma_columns" >&5 $as_echo "$gl_cv_pragma_columns" >&6; } if test $gl_cv_pragma_columns = yes; then PRAGMA_COLUMNS="#pragma COLUMNS 10000" else PRAGMA_COLUMNS= fi { $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 ${ac_cv_c_restrict+:} false; 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 bar (int [$ac_kw]); /* Catch GCC bug 14050. */ int bar (int ip[$ac_kw]) { return ip[0]; } int main () { int s[1]; int *$ac_kw t = s; t[0] = 0; return foo (t) + bar (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_FFSL=0; GNULIB_FFSLL=0; 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_STRERROR_R=0; GNULIB_STRSIGNAL=0; GNULIB_STRVERSCMP=0; HAVE_MBSLEN=0; HAVE_FFSL=1; HAVE_FFSLL=1; 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_STRERROR_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_STRCHRNUL=0; REPLACE_STRERROR=0; REPLACE_STRERROR_R=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 " >&5 $as_echo_n "checking absolute name of ... " >&6; } if ${gl_cv_next_string_h+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'string.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_absolute_string_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` gl_header=$gl_cv_absolute_string_h gl_cv_next_string_h='"'$gl_header'"' 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 ffsl ffsll memmem mempcpy memrchr rawmemchr stpcpy stpncpy strchrnul strdup strncat strndup strnlen strpbrk strsep strcasestr strtok_r strerror_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 eval \${$as_gl_Symbol+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include 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; } if eval test \"x\$"$as_gl_Symbol"\" = 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/gl/m4' gl_source_base='lib/gl' { $as_echo "$as_me:${as_lineno-$LINENO}: checking if gcc/ld supports -Wl,--output-def" >&5 $as_echo_n "checking if gcc/ld supports -Wl,--output-def... " >&6; } if ${gl_cv_ld_output_def+:} false; then : $as_echo_n "(cached) " >&6 else if test "$enable_shared" = no; then gl_cv_ld_output_def="not needed, shared libraries are disabled" else gl_ldflags_save=$LDFLAGS LDFLAGS="-Wl,--output-def,conftest.def" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : gl_cv_ld_output_def=yes else gl_cv_ld_output_def=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext rm -f conftest.def LDFLAGS="$gl_ldflags_save" fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_ld_output_def" >&5 $as_echo "$gl_cv_ld_output_def" >&6; } if test "x$gl_cv_ld_output_def" = "xyes"; then HAVE_LD_OUTPUT_DEF_TRUE= HAVE_LD_OUTPUT_DEF_FALSE='#' else HAVE_LD_OUTPUT_DEF_TRUE='#' HAVE_LD_OUTPUT_DEF_FALSE= fi STDDEF_H= 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 ${gl_cv_decl_null_works+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include 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 GL_GENERATE_STDDEF_H_TRUE= GL_GENERATE_STDDEF_H_FALSE='#' else GL_GENERATE_STDDEF_H_TRUE='#' GL_GENERATE_STDDEF_H_FALSE= 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 " >&5 $as_echo_n "checking absolute name of ... " >&6; } if ${gl_cv_next_stddef_h+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'stddef.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_absolute_stddef_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` gl_header=$gl_cv_absolute_stddef_h gl_cv_next_stddef_h='"'$gl_header'"' 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 for ac_func in strverscmp do : ac_fn_c_check_func "$LINENO" "strverscmp" "ac_cv_func_strverscmp" if test "x$ac_cv_func_strverscmp" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_STRVERSCMP 1 _ACEOF fi done if test $ac_cv_func_strverscmp = no; then HAVE_STRVERSCMP=0 fi if test $HAVE_STRVERSCMP = 0; then libgl_LIBOBJS="$libgl_LIBOBJS strverscmp.$ac_objext" : fi GNULIB_STRVERSCMP=1 $as_echo "#define GNULIB_TEST_STRVERSCMP 1" >>confdefs.h # End of code from modules gltests_libdeps= gltests_ltlibdeps= gl_source_base='lib/gl/tests' libgltests_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=$libgltests_WITNESS { $as_echo "$as_me:${as_lineno-$LINENO}: checking for complete errno.h" >&5 $as_echo_n "checking for complete errno.h... " >&6; } if ${gl_cv_header_errno_h_complete+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #if !defined ETXTBSY booboo #endif #if !defined ENOMSG booboo #endif #if !defined EIDRM booboo #endif #if !defined ENOLINK booboo #endif #if !defined EPROTO booboo #endif #if !defined EMULTIHOP booboo #endif #if !defined EBADMSG booboo #endif #if !defined EOVERFLOW booboo #endif #if !defined ENOTSUP booboo #endif #if !defined ENETRESET booboo #endif #if !defined ECONNABORTED booboo #endif #if !defined ESTALE booboo #endif #if !defined EDQUOT booboo #endif #if !defined ECANCELED booboo #endif #if !defined EOWNERDEAD booboo #endif #if !defined ENOTRECOVERABLE booboo #endif #if !defined EILSEQ booboo #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "booboo" >/dev/null 2>&1; then : gl_cv_header_errno_h_complete=no else gl_cv_header_errno_h_complete=yes fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_errno_h_complete" >&5 $as_echo "$gl_cv_header_errno_h_complete" >&6; } if test $gl_cv_header_errno_h_complete = yes; then ERRNO_H='' else if test $gl_cv_have_include_next = yes; then gl_cv_next_errno_h='<'errno.h'>' else { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of " >&5 $as_echo_n "checking absolute name of ... " >&6; } if ${gl_cv_next_errno_h+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'errno.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_absolute_errno_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` gl_header=$gl_cv_absolute_errno_h gl_cv_next_errno_h='"'$gl_header'"' fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_errno_h" >&5 $as_echo "$gl_cv_next_errno_h" >&6; } fi NEXT_ERRNO_H=$gl_cv_next_errno_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='<'errno.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=$gl_cv_next_errno_h fi NEXT_AS_FIRST_DIRECTIVE_ERRNO_H=$gl_next_as_first_directive ERRNO_H='errno.h' fi if test -n "$ERRNO_H"; then GL_GENERATE_ERRNO_H_TRUE= GL_GENERATE_ERRNO_H_FALSE='#' else GL_GENERATE_ERRNO_H_TRUE='#' GL_GENERATE_ERRNO_H_FALSE= fi if test -n "$ERRNO_H"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for EMULTIHOP value" >&5 $as_echo_n "checking for EMULTIHOP value... " >&6; } if ${gl_cv_header_errno_h_EMULTIHOP+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #ifdef EMULTIHOP yes #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "yes" >/dev/null 2>&1; then : gl_cv_header_errno_h_EMULTIHOP=yes else gl_cv_header_errno_h_EMULTIHOP=no fi rm -f conftest* if test $gl_cv_header_errno_h_EMULTIHOP = no; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _XOPEN_SOURCE_EXTENDED 1 #include #ifdef EMULTIHOP yes #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "yes" >/dev/null 2>&1; then : gl_cv_header_errno_h_EMULTIHOP=hidden fi rm -f conftest* if test $gl_cv_header_errno_h_EMULTIHOP = hidden; then if ac_fn_c_compute_int "$LINENO" "EMULTIHOP" "gl_cv_header_errno_h_EMULTIHOP" " #define _XOPEN_SOURCE_EXTENDED 1 #include /* The following two lines are a workaround against an autoconf-2.52 bug. */ #include #include "; then : fi fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_errno_h_EMULTIHOP" >&5 $as_echo "$gl_cv_header_errno_h_EMULTIHOP" >&6; } case $gl_cv_header_errno_h_EMULTIHOP in yes | no) EMULTIHOP_HIDDEN=0; EMULTIHOP_VALUE= ;; *) EMULTIHOP_HIDDEN=1; EMULTIHOP_VALUE="$gl_cv_header_errno_h_EMULTIHOP" ;; esac fi if test -n "$ERRNO_H"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ENOLINK value" >&5 $as_echo_n "checking for ENOLINK value... " >&6; } if ${gl_cv_header_errno_h_ENOLINK+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #ifdef ENOLINK yes #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "yes" >/dev/null 2>&1; then : gl_cv_header_errno_h_ENOLINK=yes else gl_cv_header_errno_h_ENOLINK=no fi rm -f conftest* if test $gl_cv_header_errno_h_ENOLINK = no; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _XOPEN_SOURCE_EXTENDED 1 #include #ifdef ENOLINK yes #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "yes" >/dev/null 2>&1; then : gl_cv_header_errno_h_ENOLINK=hidden fi rm -f conftest* if test $gl_cv_header_errno_h_ENOLINK = hidden; then if ac_fn_c_compute_int "$LINENO" "ENOLINK" "gl_cv_header_errno_h_ENOLINK" " #define _XOPEN_SOURCE_EXTENDED 1 #include /* The following two lines are a workaround against an autoconf-2.52 bug. */ #include #include "; then : fi fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_errno_h_ENOLINK" >&5 $as_echo "$gl_cv_header_errno_h_ENOLINK" >&6; } case $gl_cv_header_errno_h_ENOLINK in yes | no) ENOLINK_HIDDEN=0; ENOLINK_VALUE= ;; *) ENOLINK_HIDDEN=1; ENOLINK_VALUE="$gl_cv_header_errno_h_ENOLINK" ;; esac fi if test -n "$ERRNO_H"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for EOVERFLOW value" >&5 $as_echo_n "checking for EOVERFLOW value... " >&6; } if ${gl_cv_header_errno_h_EOVERFLOW+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #ifdef EOVERFLOW yes #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "yes" >/dev/null 2>&1; then : gl_cv_header_errno_h_EOVERFLOW=yes else gl_cv_header_errno_h_EOVERFLOW=no fi rm -f conftest* if test $gl_cv_header_errno_h_EOVERFLOW = no; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _XOPEN_SOURCE_EXTENDED 1 #include #ifdef EOVERFLOW yes #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "yes" >/dev/null 2>&1; then : gl_cv_header_errno_h_EOVERFLOW=hidden fi rm -f conftest* if test $gl_cv_header_errno_h_EOVERFLOW = hidden; then if ac_fn_c_compute_int "$LINENO" "EOVERFLOW" "gl_cv_header_errno_h_EOVERFLOW" " #define _XOPEN_SOURCE_EXTENDED 1 #include /* The following two lines are a workaround against an autoconf-2.52 bug. */ #include #include "; then : fi fi fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_errno_h_EOVERFLOW" >&5 $as_echo "$gl_cv_header_errno_h_EOVERFLOW" >&6; } case $gl_cv_header_errno_h_EOVERFLOW in yes | no) EOVERFLOW_HIDDEN=0; EOVERFLOW_VALUE= ;; *) EOVERFLOW_HIDDEN=1; EOVERFLOW_VALUE="$gl_cv_header_errno_h_EOVERFLOW" ;; esac fi ac_fn_c_check_decl "$LINENO" "strerror_r" "ac_cv_have_decl_strerror_r" "$ac_includes_default" if test "x$ac_cv_have_decl_strerror_r" = xyes; then : ac_have_decl=1 else ac_have_decl=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL_STRERROR_R $ac_have_decl _ACEOF for ac_func in strerror_r do : ac_fn_c_check_func "$LINENO" "strerror_r" "ac_cv_func_strerror_r" if test "x$ac_cv_func_strerror_r" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_STRERROR_R 1 _ACEOF fi done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether strerror_r returns char *" >&5 $as_echo_n "checking whether strerror_r returns char *... " >&6; } if ${ac_cv_func_strerror_r_char_p+:} false; then : $as_echo_n "(cached) " >&6 else ac_cv_func_strerror_r_char_p=no if test $ac_cv_have_decl_strerror_r = yes; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default int main () { char buf[100]; char x = *strerror_r (0, buf, sizeof buf); char *p = strerror_r (0, buf, sizeof buf); return !p || x; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_func_strerror_r_char_p=yes fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext else # strerror_r is not declared. Choose between # systems that have relatively inaccessible declarations for the # function. BeOS and DEC UNIX 4.0 fall in this category, but the # former has a strerror_r that returns char*, while the latter # has a strerror_r that returns `int'. # This test should segfault on the DEC system. if test "$cross_compiling" = yes; then : : else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default extern char *strerror_r (); int main () { char buf[100]; char x = *strerror_r (0, buf, sizeof buf); return ! isalpha (x); ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : ac_cv_func_strerror_r_char_p=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 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_strerror_r_char_p" >&5 $as_echo "$ac_cv_func_strerror_r_char_p" >&6; } if test $ac_cv_func_strerror_r_char_p = yes; then $as_echo "#define STRERROR_R_CHAR_P 1" >>confdefs.h fi XGETTEXT_EXTRA_OPTIONS= GNULIB_CHDIR=0; GNULIB_CHOWN=0; GNULIB_CLOSE=0; GNULIB_DUP=0; GNULIB_DUP2=0; GNULIB_DUP3=0; GNULIB_ENVIRON=0; GNULIB_EUIDACCESS=0; GNULIB_FACCESSAT=0; GNULIB_FCHDIR=0; GNULIB_FCHOWNAT=0; GNULIB_FDATASYNC=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_GROUP_MEMBER=0; GNULIB_ISATTY=0; GNULIB_LCHOWN=0; GNULIB_LINK=0; GNULIB_LINKAT=0; GNULIB_LSEEK=0; GNULIB_PIPE=0; GNULIB_PIPE2=0; GNULIB_PREAD=0; GNULIB_PWRITE=0; GNULIB_READ=0; GNULIB_READLINK=0; GNULIB_READLINKAT=0; GNULIB_RMDIR=0; GNULIB_SETHOSTNAME=0; GNULIB_SLEEP=0; GNULIB_SYMLINK=0; GNULIB_SYMLINKAT=0; GNULIB_TTYNAME_R=0; GNULIB_UNISTD_H_NONBLOCKING=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_FDATASYNC=1; HAVE_FSYNC=1; HAVE_FTRUNCATE=1; HAVE_GETDTABLESIZE=1; HAVE_GETGROUPS=1; HAVE_GETHOSTNAME=1; HAVE_GETLOGIN=1; HAVE_GETPAGESIZE=1; HAVE_GROUP_MEMBER=1; HAVE_LCHOWN=1; HAVE_LINK=1; HAVE_LINKAT=1; HAVE_PIPE=1; HAVE_PIPE2=1; HAVE_PREAD=1; HAVE_PWRITE=1; HAVE_READLINK=1; HAVE_READLINKAT=1; HAVE_SETHOSTNAME=1; HAVE_SLEEP=1; HAVE_SYMLINK=1; HAVE_SYMLINKAT=1; HAVE_UNLINKAT=1; HAVE_USLEEP=1; HAVE_DECL_ENVIRON=1; HAVE_DECL_FCHDIR=1; HAVE_DECL_FDATASYNC=1; HAVE_DECL_GETDOMAINNAME=1; HAVE_DECL_GETLOGIN_R=1; HAVE_DECL_GETPAGESIZE=1; HAVE_DECL_GETUSERSHELL=1; HAVE_DECL_SETHOSTNAME=1; HAVE_DECL_TTYNAME_R=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_FTRUNCATE=0; REPLACE_GETCWD=0; REPLACE_GETDOMAINNAME=0; REPLACE_GETDTABLESIZE=0; REPLACE_GETLOGIN_R=0; REPLACE_GETGROUPS=0; REPLACE_GETPAGESIZE=0; REPLACE_ISATTY=0; REPLACE_LCHOWN=0; REPLACE_LINK=0; REPLACE_LINKAT=0; REPLACE_LSEEK=0; REPLACE_PREAD=0; REPLACE_PWRITE=0; REPLACE_READ=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; 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 " if eval test \"x\$"$as_ac_Header"\" = 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 " >&5 $as_echo_n "checking absolute name of ... " >&6; } if ${gl_cv_next_getopt_h+:} false; 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 _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'getopt.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_absolute_getopt_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` gl_header=$gl_cv_absolute_getopt_h gl_cv_next_getopt_h='"'$gl_header'"' 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" = xyes; 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" = xyes; 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 { $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 ${gl_cv_func_getopt_posix+:} false; then : $as_echo_n "(cached) " >&6 else if test $cross_compiling = no; then if test "$cross_compiling" = 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_error $? "cannot run test program while cross compiling See \`config.log' for more details" "$LINENO" 5; } else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include int main () { static char program[] = "program"; static char a[] = "-a"; static char foo[] = "foo"; static char bar[] = "bar"; char *argv[] = { program, a, foo, bar, NULL }; int c; c = getopt (4, argv, "ab"); if (!(c == 'a')) return 1; c = getopt (4, argv, "ab"); if (!(c == -1)) return 2; if (!(optind == 2)) return 3; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : gl_cv_func_getopt_posix=maybe 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 if test $gl_cv_func_getopt_posix = maybe; then if test "$cross_compiling" = 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_error $? "cannot run test program while cross compiling See \`config.log' for more details" "$LINENO" 5; } else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include int main () { static char program[] = "program"; static char donald[] = "donald"; static char p[] = "-p"; static char billy[] = "billy"; static char duck[] = "duck"; static char a[] = "-a"; static char bar[] = "bar"; char *argv[] = { program, donald, p, billy, duck, a, bar, NULL }; int c; c = getopt (7, 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; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : gl_cv_func_getopt_posix=maybe 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 if test $gl_cv_func_getopt_posix = maybe; then if test "$cross_compiling" = 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_error $? "cannot run test program while cross compiling See \`config.log' for more details" "$LINENO" 5; } else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include int main () { static char program[] = "program"; static char ab[] = "-ab"; char *argv[3] = { program, ab, NULL }; 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 else case "$host_os" in darwin* | aix* | mingw*) gl_cv_func_getopt_posix="guessing no";; *) gl_cv_func_getopt_posix="guessing yes";; esac 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 ${gl_cv_func_getopt_gnu+:} false; 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. # Bash ties 'set -o posix' to a non-exported POSIXLY_CORRECT; # so take care to revert to the correct (non-)export state. gl_awk_probe='BEGIN { if ("POSIXLY_CORRECT" in ENVIRON) print "x" }' case ${POSIXLY_CORRECT+x}`$AWK "$gl_awk_probe" conftest.$ac_ext /* end confdefs.h. */ #include #include #include #include #if defined __MACH__ && defined __APPLE__ /* Avoid a crash on Mac OS X. */ #include #include #include #include #include #include /* The exception port on which our thread listens. */ static mach_port_t our_exception_port; /* The main function of the thread listening for exceptions of type EXC_BAD_ACCESS. */ static void * mach_exception_thread (void *arg) { /* Buffer for a message to be received. */ struct { mach_msg_header_t head; mach_msg_body_t msgh_body; char data[1024]; } msg; mach_msg_return_t retval; /* Wait for a message on the exception port. */ retval = mach_msg (&msg.head, MACH_RCV_MSG | MACH_RCV_LARGE, 0, sizeof (msg), our_exception_port, MACH_MSG_TIMEOUT_NONE, MACH_PORT_NULL); if (retval != MACH_MSG_SUCCESS) abort (); exit (1); } static void nocrash_init (void) { mach_port_t self = mach_task_self (); /* Allocate a port on which the thread shall listen for exceptions. */ if (mach_port_allocate (self, MACH_PORT_RIGHT_RECEIVE, &our_exception_port) == KERN_SUCCESS) { /* See http://web.mit.edu/darwin/src/modules/xnu/osfmk/man/mach_port_insert_right.html. */ if (mach_port_insert_right (self, our_exception_port, our_exception_port, MACH_MSG_TYPE_MAKE_SEND) == KERN_SUCCESS) { /* The exceptions we want to catch. Only EXC_BAD_ACCESS is interesting for us. */ exception_mask_t mask = EXC_MASK_BAD_ACCESS; /* Create the thread listening on the exception port. */ pthread_attr_t attr; pthread_t thread; if (pthread_attr_init (&attr) == 0 && pthread_attr_setdetachstate (&attr, PTHREAD_CREATE_DETACHED) == 0 && pthread_create (&thread, &attr, mach_exception_thread, NULL) == 0) { pthread_attr_destroy (&attr); /* Replace the exception port info for these exceptions with our own. Note that we replace the exception port for the entire task, not only for a particular thread. This has the effect that when our exception port gets the message, the thread specific exception port has already been asked, and we don't need to bother about it. See http://web.mit.edu/darwin/src/modules/xnu/osfmk/man/task_set_exception_ports.html. */ task_set_exception_ports (self, mask, our_exception_port, EXCEPTION_DEFAULT, MACHINE_THREAD_STATE); } } } } #elif (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ /* Avoid a crash on native Windows. */ #define WIN32_LEAN_AND_MEAN #include #include static LONG WINAPI exception_filter (EXCEPTION_POINTERS *ExceptionInfo) { switch (ExceptionInfo->ExceptionRecord->ExceptionCode) { case EXCEPTION_ACCESS_VIOLATION: case EXCEPTION_IN_PAGE_ERROR: case EXCEPTION_STACK_OVERFLOW: case EXCEPTION_GUARD_PAGE: case EXCEPTION_PRIV_INSTRUCTION: case EXCEPTION_ILLEGAL_INSTRUCTION: case EXCEPTION_DATATYPE_MISALIGNMENT: case EXCEPTION_ARRAY_BOUNDS_EXCEEDED: case EXCEPTION_NONCONTINUABLE_EXCEPTION: exit (1); } return EXCEPTION_CONTINUE_SEARCH; } static void nocrash_init (void) { SetUnhandledExceptionFilter ((LPTOP_LEVEL_EXCEPTION_FILTER) exception_filter); } #else /* Avoid a crash on POSIX systems. */ #include /* A POSIX signal handler. */ static void exception_handler (int sig) { exit (1); } static void nocrash_init (void) { #ifdef SIGSEGV signal (SIGSEGV, exception_handler); #endif #ifdef SIGBUS signal (SIGBUS, exception_handler); #endif } #endif int main () { int result = 0; nocrash_init(); /* This code succeeds on glibc 2.8, OpenBSD 4.0, Cygwin, mingw, and fails on Mac OS X 10.5, AIX 5.2, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 10. */ { static char conftest[] = "conftest"; static char plus[] = "-+"; char *argv[3] = { conftest, plus, NULL }; opterr = 0; if (getopt (2, argv, "+a") != '?') result |= 1; } /* This code succeeds on glibc 2.8, mingw, and fails on Mac OS 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. */ { static char program[] = "program"; static char p[] = "-p"; static char foo[] = "foo"; static char bar[] = "bar"; char *argv[] = { program, p, foo, bar, NULL }; optind = 1; if (getopt (4, argv, "p::") != 'p') result |= 2; else if (optarg != NULL) result |= 4; else if (getopt (4, argv, "p::") != -1) result |= 6; else if (optind != 2) result |= 8; } /* This code succeeds on glibc 2.8 and fails on Cygwin 1.7.0. */ { static char program[] = "program"; static char foo[] = "foo"; static char p[] = "-p"; char *argv[] = { program, foo, p, NULL }; optind = 0; if (getopt (3, argv, "-p") != 1) result |= 16; else if (getopt (3, argv, "-p") != 'p') result |= 16; } /* This code fails on glibc 2.11. */ { static char program[] = "program"; static char b[] = "-b"; static char a[] = "-a"; char *argv[] = { program, b, a, NULL }; optind = opterr = 0; if (getopt (3, argv, "+:a:b") != 'b') result |= 32; else if (getopt (3, argv, "+:a:b") != ':') result |= 32; } /* This code dumps core on glibc 2.14. */ { static char program[] = "program"; static char w[] = "-W"; static char dummy[] = "dummy"; char *argv[] = { program, w, dummy, NULL }; optind = opterr = 1; if (getopt (3, argv, "W;") != 'W') result |= 64; } return result; ; 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 case $gl_had_POSIXLY_CORRECT in exported) ;; yes) { POSIXLY_CORRECT=; unset POSIXLY_CORRECT;}; POSIXLY_CORRECT=1 ;; *) { POSIXLY_CORRECT=; unset POSIXLY_CORRECT;} ;; esac 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" != yes; then gl_replace_getopt=yes else { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working GNU getopt_long function" >&5 $as_echo_n "checking for working GNU getopt_long function... " >&6; } if ${gl_cv_func_getopt_long_gnu+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : case "$host_os" in openbsd*) gl_cv_func_getopt_long_gnu="guessing no";; *) gl_cv_func_getopt_long_gnu="guessing yes";; esac else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include #include int main () { static const struct option long_options[] = { { "xtremely-",no_argument, NULL, 1003 }, { "xtra", no_argument, NULL, 1001 }, { "xtreme", no_argument, NULL, 1002 }, { "xtremely", no_argument, NULL, 1003 }, { NULL, 0, NULL, 0 } }; /* This code fails on OpenBSD 5.0. */ { static char program[] = "program"; static char xtremel[] = "--xtremel"; char *argv[] = { program, xtremel, NULL }; int option_index; optind = 1; opterr = 0; if (getopt_long (2, argv, "", long_options, &option_index) != 1003) return 1; } return 0; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : gl_cv_func_getopt_long_gnu=yes else gl_cv_func_getopt_long_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 fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_getopt_long_gnu" >&5 $as_echo "$gl_cv_func_getopt_long_gnu" >&6; } case "$gl_cv_func_getopt_long_gnu" in *yes) ;; *) gl_replace_getopt=yes ;; esac fi fi REPLACE_GETOPT=0 if test -n "$gl_replace_getopt"; then REPLACE_GETOPT=1 fi if test $REPLACE_GETOPT = 1; then GETOPT_H=getopt.h $as_echo "#define __GETOPT_PREFIX rpl_" >>confdefs.h fi ac_fn_c_check_decl "$LINENO" "getenv" "ac_cv_have_decl_getenv" "$ac_includes_default" if test "x$ac_cv_have_decl_getenv" = xyes; then : ac_have_decl=1 else ac_have_decl=0 fi cat >>confdefs.h <<_ACEOF #define HAVE_DECL_GETENV $ac_have_decl _ACEOF for ac_func in $ac_func_list do : as_ac_var=`$as_echo "ac_cv_func_$ac_func" | $as_tr_sh` ac_fn_c_check_func "$LINENO" "$ac_func" "$as_ac_var" if eval test \"x\$"$as_ac_var"\" = x"yes"; then : cat >>confdefs.h <<_ACEOF #define `$as_echo "HAVE_$ac_func" | $as_tr_cpp` 1 _ACEOF fi done # Check for mmap(). Don't use AC_FUNC_MMAP, because it checks too much: it # fails on HP-UX 11, because MAP_FIXED mappings do not work. But this is # irrelevant for anonymous mappings. ac_fn_c_check_func "$LINENO" "mmap" "ac_cv_func_mmap" if test "x$ac_cv_func_mmap" = xyes; then : gl_have_mmap=yes else gl_have_mmap=no fi # Try to allow MAP_ANONYMOUS. gl_have_mmap_anonymous=no if test $gl_have_mmap = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for MAP_ANONYMOUS" >&5 $as_echo_n "checking for MAP_ANONYMOUS... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #ifdef MAP_ANONYMOUS I cannot identify this map #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "I cannot identify this map" >/dev/null 2>&1; then : gl_have_mmap_anonymous=yes fi rm -f conftest* if test $gl_have_mmap_anonymous != yes; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #ifdef MAP_ANON I cannot identify this map #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "I cannot identify this map" >/dev/null 2>&1; then : $as_echo "#define MAP_ANONYMOUS MAP_ANON" >>confdefs.h gl_have_mmap_anonymous=yes fi rm -f conftest* fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_have_mmap_anonymous" >&5 $as_echo "$gl_have_mmap_anonymous" >&6; } if test $gl_have_mmap_anonymous = yes; then $as_echo "#define HAVE_MAP_ANONYMOUS 1" >>confdefs.h fi fi if test $HAVE_MEMCHR = 1; then # Detect platform-specific bugs in some versions of glibc: # memchr should not dereference anything with length 0 # http://bugzilla.redhat.com/499689 # memchr should not dereference overestimated length after a match # http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=521737 # http://sourceware.org/bugzilla/show_bug.cgi?id=10162 # Assume that memchr works on platforms that lack mprotect. { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether memchr works" >&5 $as_echo_n "checking whether memchr works... " >&6; } if ${gl_cv_func_memchr_works+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : gl_cv_func_memchr_works="guessing no" else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #if HAVE_SYS_MMAN_H # include # include # include # include # ifndef MAP_FILE # define MAP_FILE 0 # endif #endif int main () { int result = 0; char *fence = NULL; #if HAVE_SYS_MMAN_H && HAVE_MPROTECT # if HAVE_MAP_ANONYMOUS const int flags = MAP_ANONYMOUS | MAP_PRIVATE; const int fd = -1; # else /* !HAVE_MAP_ANONYMOUS */ const int flags = MAP_FILE | MAP_PRIVATE; int fd = open ("/dev/zero", O_RDONLY, 0666); if (fd >= 0) # endif { int pagesize = getpagesize (); char *two_pages = (char *) mmap (NULL, 2 * pagesize, PROT_READ | PROT_WRITE, flags, fd, 0); if (two_pages != (char *)(-1) && mprotect (two_pages + pagesize, pagesize, PROT_NONE) == 0) fence = two_pages + pagesize; } #endif if (fence) { if (memchr (fence, 0, 0)) result |= 1; strcpy (fence - 9, "12345678"); if (memchr (fence - 9, 0, 79) != fence - 1) result |= 2; if (memchr (fence - 1, 0, 3) != fence - 1) result |= 4; } return result; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : gl_cv_func_memchr_works=yes else gl_cv_func_memchr_works=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_memchr_works" >&5 $as_echo "$gl_cv_func_memchr_works" >&6; } if test "$gl_cv_func_memchr_works" != yes; then REPLACE_MEMCHR=1 fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking for stdbool.h that conforms to C99" >&5 $as_echo_n "checking for stdbool.h that conforms to C99... " >&6; } if ${ac_cv_header_stdbool_h+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #ifndef bool "error: bool is not defined" #endif #ifndef false "error: false is not defined" #endif #if false "error: false is not 0" #endif #ifndef true "error: true is not defined" #endif #if true != 1 "error: true is not 1" #endif #ifndef __bool_true_false_are_defined "error: __bool_true_false_are_defined is not defined" #endif struct s { _Bool s: 1; _Bool t; } s; char a[true == 1 ? 1 : -1]; char b[false == 0 ? 1 : -1]; char c[__bool_true_false_are_defined == 1 ? 1 : -1]; char d[(bool) 0.5 == true ? 1 : -1]; /* See body of main program for 'e'. */ char f[(_Bool) 0.0 == false ? 1 : -1]; char g[true]; char h[sizeof (_Bool)]; char i[sizeof s.t]; enum { j = false, k = true, l = false * true, m = true * 256 }; /* The following fails for HP aC++/ANSI C B3910B A.05.55 [Dec 04 2003]. */ _Bool n[m]; char o[sizeof n == m * sizeof n[0] ? 1 : -1]; char p[-1 - (_Bool) 0 < 0 && -1 - (bool) 0 < 0 ? 1 : -1]; /* Catch a bug in an HP-UX C compiler. See http://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html http://lists.gnu.org/archive/html/bug-coreutils/2005-11/msg00161.html */ _Bool q = true; _Bool *pq = &q; int main () { bool e = &s; *pq |= q; *pq |= ! q; /* Refer to every declared value, to avoid compiler optimizations. */ return (!a + !b + !c + !d + !e + !f + !g + !h + !i + !!j + !k + !!l + !m + !n + !o + !p + !q + !pq); ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : ac_cv_header_stdbool_h=yes else ac_cv_header_stdbool_h=no fi rm -f core conftest.err conftest.$ac_objext conftest.$ac_ext fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_stdbool_h" >&5 $as_echo "$ac_cv_header_stdbool_h" >&6; } ac_fn_c_check_type "$LINENO" "_Bool" "ac_cv_type__Bool" "$ac_includes_default" if test "x$ac_cv_type__Bool" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE__BOOL 1 _ACEOF fi GNULIB_DPRINTF=0; GNULIB_FCLOSE=0; GNULIB_FDOPEN=0; GNULIB_FFLUSH=0; GNULIB_FGETC=0; GNULIB_FGETS=0; GNULIB_FOPEN=0; GNULIB_FPRINTF=0; GNULIB_FPRINTF_POSIX=0; GNULIB_FPURGE=0; GNULIB_FPUTC=0; GNULIB_FPUTS=0; GNULIB_FREAD=0; GNULIB_FREOPEN=0; GNULIB_FSCANF=0; GNULIB_FSEEK=0; GNULIB_FSEEKO=0; GNULIB_FTELL=0; GNULIB_FTELLO=0; GNULIB_FWRITE=0; GNULIB_GETC=0; GNULIB_GETCHAR=0; GNULIB_GETDELIM=0; GNULIB_GETLINE=0; GNULIB_OBSTACK_PRINTF=0; GNULIB_OBSTACK_PRINTF_POSIX=0; GNULIB_PCLOSE=0; GNULIB_PERROR=0; GNULIB_POPEN=0; GNULIB_PRINTF=0; GNULIB_PRINTF_POSIX=0; GNULIB_PUTC=0; GNULIB_PUTCHAR=0; GNULIB_PUTS=0; GNULIB_REMOVE=0; GNULIB_RENAME=0; GNULIB_RENAMEAT=0; GNULIB_SCANF=0; GNULIB_SNPRINTF=0; GNULIB_SPRINTF_POSIX=0; GNULIB_STDIO_H_NONBLOCKING=0; GNULIB_STDIO_H_SIGPIPE=0; GNULIB_TMPFILE=0; GNULIB_VASPRINTF=0; GNULIB_VFSCANF=0; GNULIB_VSCANF=0; GNULIB_VDPRINTF=0; GNULIB_VFPRINTF=0; GNULIB_VFPRINTF_POSIX=0; GNULIB_VPRINTF=0; GNULIB_VPRINTF_POSIX=0; GNULIB_VSNPRINTF=0; GNULIB_VSPRINTF_POSIX=0; HAVE_DECL_FPURGE=1; HAVE_DECL_FSEEKO=1; HAVE_DECL_FTELLO=1; HAVE_DECL_GETDELIM=1; HAVE_DECL_GETLINE=1; HAVE_DECL_OBSTACK_PRINTF=1; HAVE_DECL_SNPRINTF=1; HAVE_DECL_VSNPRINTF=1; HAVE_DPRINTF=1; HAVE_FSEEKO=1; HAVE_FTELLO=1; HAVE_PCLOSE=1; HAVE_POPEN=1; HAVE_RENAMEAT=1; HAVE_VASPRINTF=1; HAVE_VDPRINTF=1; REPLACE_DPRINTF=0; REPLACE_FCLOSE=0; REPLACE_FDOPEN=0; REPLACE_FFLUSH=0; REPLACE_FOPEN=0; REPLACE_FPRINTF=0; REPLACE_FPURGE=0; REPLACE_FREOPEN=0; REPLACE_FSEEK=0; REPLACE_FSEEKO=0; REPLACE_FTELL=0; REPLACE_FTELLO=0; REPLACE_GETDELIM=0; REPLACE_GETLINE=0; REPLACE_OBSTACK_PRINTF=0; REPLACE_PERROR=0; REPLACE_POPEN=0; REPLACE_PRINTF=0; REPLACE_REMOVE=0; REPLACE_RENAME=0; REPLACE_RENAMEAT=0; REPLACE_SNPRINTF=0; REPLACE_SPRINTF=0; REPLACE_STDIO_READ_FUNCS=0; REPLACE_STDIO_WRITE_FUNCS=0; REPLACE_TMPFILE=0; REPLACE_VASPRINTF=0; REPLACE_VDPRINTF=0; REPLACE_VFPRINTF=0; REPLACE_VPRINTF=0; REPLACE_VSNPRINTF=0; REPLACE_VSPRINTF=0; REPLACE_STRERROR_0=0 { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether strerror(0) succeeds" >&5 $as_echo_n "checking whether strerror(0) succeeds... " >&6; } if ${gl_cv_func_strerror_0_works+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : case "$host_os" in # Guess yes on glibc systems. *-gnu*) gl_cv_func_strerror_0_works="guessing yes" ;; # If we don't know, assume the worst. *) gl_cv_func_strerror_0_works="guessing no" ;; esac else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include #include int main () { int result = 0; char *str; errno = 0; str = strerror (0); if (!*str) result |= 1; if (errno) result |= 2; if (strstr (str, "nknown") || strstr (str, "ndefined")) result |= 4; return result; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : gl_cv_func_strerror_0_works=yes else gl_cv_func_strerror_0_works=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_strerror_0_works" >&5 $as_echo "$gl_cv_func_strerror_0_works" >&6; } case "$gl_cv_func_strerror_0_works" in *yes) ;; *) REPLACE_STRERROR_0=1 $as_echo "#define REPLACE_STRERROR_0 1" >>confdefs.h ;; esac ac_fn_c_check_type "$LINENO" "pid_t" "ac_cv_type_pid_t" "$ac_includes_default" if test "x$ac_cv_type_pid_t" = xyes; then : else cat >>confdefs.h <<_ACEOF #define pid_t int _ACEOF fi ac_fn_c_check_type "$LINENO" "mode_t" "ac_cv_type_mode_t" "$ac_includes_default" if test "x$ac_cv_type_mode_t" = xyes; then : else cat >>confdefs.h <<_ACEOF #define mode_t int _ACEOF fi WINDOWS_64_BIT_OFF_T=0 if test $gl_cv_have_include_next = yes; then gl_cv_next_sys_types_h='<'sys/types.h'>' else { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of " >&5 $as_echo_n "checking absolute name of ... " >&6; } if ${gl_cv_next_sys_types_h+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'sys/types.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_absolute_sys_types_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` gl_header=$gl_cv_absolute_sys_types_h gl_cv_next_sys_types_h='"'$gl_header'"' fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_sys_types_h" >&5 $as_echo "$gl_cv_next_sys_types_h" >&6; } fi NEXT_SYS_TYPES_H=$gl_cv_next_sys_types_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='<'sys/types.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=$gl_cv_next_sys_types_h fi NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H=$gl_next_as_first_directive 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='src/gl/m4' gl_source_base='src/gl' { $as_echo "$as_me:${as_lineno-$LINENO}: checking for error_at_line" >&5 $as_echo_n "checking for error_at_line... " >&6; } if ${ac_cv_lib_error_at_line+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { error_at_line (0, 0, "", 0, "an error occurred"); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_lib_error_at_line=yes else ac_cv_lib_error_at_line=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_lib_error_at_line" >&5 $as_echo "$ac_cv_lib_error_at_line" >&6; } if test $ac_cv_lib_error_at_line = no; then srcgl_LIBOBJS="$srcgl_LIBOBJS error.$ac_objext" : fi XGETTEXT_EXTRA_OPTIONS="$XGETTEXT_EXTRA_OPTIONS --flag=error:3:c-format" XGETTEXT_EXTRA_OPTIONS="$XGETTEXT_EXTRA_OPTIONS --flag=error_at_line:5:c-format" if test $REPLACE_GETOPT = 1; then srcgl_LIBOBJS="$srcgl_LIBOBJS getopt.$ac_objext" srcgl_LIBOBJS="$srcgl_LIBOBJS getopt1.$ac_objext" GNULIB_GL_SRCGL_UNISTD_H_GETOPT=1 fi $as_echo "#define GNULIB_TEST_GETOPT_GNU 1" >>confdefs.h REPLACE_GETOPT=0 if test -n "$gl_replace_getopt"; then REPLACE_GETOPT=1 fi if test $REPLACE_GETOPT = 1; then GETOPT_H=getopt.h $as_echo "#define __GETOPT_PREFIX rpl_" >>confdefs.h fi if test $REPLACE_GETOPT = 1; then srcgl_LIBOBJS="$srcgl_LIBOBJS getopt.$ac_objext" srcgl_LIBOBJS="$srcgl_LIBOBJS getopt1.$ac_objext" GNULIB_GL_SRCGL_UNISTD_H_GETOPT=1 fi if test $HAVE_MEMCHR = 0 || test $REPLACE_MEMCHR = 1; then srcgl_LIBOBJS="$srcgl_LIBOBJS memchr.$ac_objext" for ac_header in bp-sym.h do : ac_fn_c_check_header_mongrel "$LINENO" "bp-sym.h" "ac_cv_header_bp_sym_h" "$ac_includes_default" if test "x$ac_cv_header_bp_sym_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_BP_SYM_H 1 _ACEOF fi done fi GNULIB_MEMCHR=1 $as_echo "#define GNULIB_TEST_MEMCHR 1" >>confdefs.h if test $ac_cv_func__set_invalid_parameter_handler = yes; then HAVE_MSVC_INVALID_PARAMETER_HANDLER=1 $as_echo "#define HAVE_MSVC_INVALID_PARAMETER_HANDLER 1" >>confdefs.h else HAVE_MSVC_INVALID_PARAMETER_HANDLER=0 fi if test $HAVE_MSVC_INVALID_PARAMETER_HANDLER = 1; then srcgl_LIBOBJS="$srcgl_LIBOBJS msvc-inval.$ac_objext" fi if test $HAVE_MSVC_INVALID_PARAMETER_HANDLER = 1; then srcgl_LIBOBJS="$srcgl_LIBOBJS msvc-nothrow.$ac_objext" fi ac_fn_c_check_decl "$LINENO" "program_invocation_name" "ac_cv_have_decl_program_invocation_name" "#include " if test "x$ac_cv_have_decl_program_invocation_name" = xyes; 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 " if test "x$ac_cv_have_decl_program_invocation_short_name" = xyes; 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 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for ssize_t" >&5 $as_echo_n "checking for ssize_t... " >&6; } if ${gt_cv_ssize_t+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { int x = sizeof (ssize_t *) + sizeof (ssize_t); return !x; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gt_cv_ssize_t=yes else gt_cv_ssize_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_ssize_t" >&5 $as_echo "$gt_cv_ssize_t" >&6; } if test $gt_cv_ssize_t = no; then $as_echo "#define ssize_t int" >>confdefs.h fi STDARG_H='' NEXT_STDARG_H='' { $as_echo "$as_me:${as_lineno-$LINENO}: checking for va_copy" >&5 $as_echo_n "checking for va_copy... " >&6; } if ${gl_cv_func_va_copy+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include 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 " >&5 $as_echo_n "checking absolute name of ... " >&6; } if ${gl_cv_next_stdarg_h+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'stdarg.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_absolute_stdarg_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` gl_header=$gl_cv_absolute_stdarg_h gl_cv_next_stdarg_h='"'$gl_header'"' 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 ${gl_cv_func___va_copy+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include 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 if test -n "$STDARG_H"; then GL_GENERATE_STDARG_H_TRUE= GL_GENERATE_STDARG_H_FALSE='#' else GL_GENERATE_STDARG_H_TRUE='#' GL_GENERATE_STDARG_H_FALSE= fi # Define two additional variables used in the Makefile substitution. if test "$ac_cv_header_stdbool_h" = yes; then STDBOOL_H='' else STDBOOL_H='stdbool.h' fi if test -n "$STDBOOL_H"; then GL_GENERATE_STDBOOL_H_TRUE= GL_GENERATE_STDBOOL_H_FALSE='#' else GL_GENERATE_STDBOOL_H_TRUE='#' GL_GENERATE_STDBOOL_H_FALSE= fi if test "$ac_cv_type__Bool" = yes; then HAVE__BOOL=1 else HAVE__BOOL=0 fi STDDEF_H= 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 ${gl_cv_decl_null_works+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include 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 GL_GENERATE_STDDEF_H_TRUE= GL_GENERATE_STDDEF_H_FALSE='#' else GL_GENERATE_STDDEF_H_TRUE='#' GL_GENERATE_STDDEF_H_FALSE= 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 " >&5 $as_echo_n "checking absolute name of ... " >&6; } if ${gl_cv_next_stddef_h+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'stddef.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_absolute_stddef_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` gl_header=$gl_cv_absolute_stddef_h gl_cv_next_stddef_h='"'$gl_header'"' 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 if test $gl_cv_have_include_next = yes; then gl_cv_next_stdio_h='<'stdio.h'>' else { $as_echo "$as_me:${as_lineno-$LINENO}: checking absolute name of " >&5 $as_echo_n "checking absolute name of ... " >&6; } if ${gl_cv_next_stdio_h+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'stdio.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_absolute_stdio_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` gl_header=$gl_cv_absolute_stdio_h gl_cv_next_stdio_h='"'$gl_header'"' fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_stdio_h" >&5 $as_echo "$gl_cv_next_stdio_h" >&6; } fi NEXT_STDIO_H=$gl_cv_next_stdio_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='<'stdio.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=$gl_cv_next_stdio_h fi NEXT_AS_FIRST_DIRECTIVE_STDIO_H=$gl_next_as_first_directive GNULIB_FSCANF=1 cat >>confdefs.h <<_ACEOF #define GNULIB_FSCANF 1 _ACEOF GNULIB_SCANF=1 cat >>confdefs.h <<_ACEOF #define GNULIB_SCANF 1 _ACEOF GNULIB_FGETC=1 GNULIB_GETC=1 GNULIB_GETCHAR=1 GNULIB_FGETS=1 GNULIB_FREAD=1 GNULIB_FPRINTF=1 GNULIB_PRINTF=1 GNULIB_VFPRINTF=1 GNULIB_VPRINTF=1 GNULIB_FPUTC=1 GNULIB_PUTC=1 GNULIB_PUTCHAR=1 GNULIB_FPUTS=1 GNULIB_PUTS=1 GNULIB_FWRITE=1 for gl_func in dprintf fpurge fseeko ftello getdelim getline gets pclose popen renameat snprintf tmpfile vdprintf vsnprintf; 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 eval \${$as_gl_Symbol+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include 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; } if eval test \"x\$"$as_gl_Symbol"\" = 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 test "$ERRNO_H:$REPLACE_STRERROR_0" = :0; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking for working strerror function" >&5 $as_echo_n "checking for working strerror function... " >&6; } if ${gl_cv_func_working_strerror+:} false; then : $as_echo_n "(cached) " >&6 else if test "$cross_compiling" = yes; then : case "$host_os" in # Guess yes on glibc systems. *-gnu*) gl_cv_func_working_strerror="guessing yes" ;; # If we don't know, assume the worst. *) gl_cv_func_working_strerror="guessing no" ;; esac else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { if (!*strerror (-2)) return 1; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO"; then : gl_cv_func_working_strerror=yes else gl_cv_func_working_strerror=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_working_strerror" >&5 $as_echo "$gl_cv_func_working_strerror" >&6; } case "$gl_cv_func_working_strerror" in *yes) ;; *) REPLACE_STRERROR=1 ;; esac else REPLACE_STRERROR=1 fi if test $REPLACE_STRERROR = 1; then srcgl_LIBOBJS="$srcgl_LIBOBJS strerror.$ac_objext" fi cat >>confdefs.h <<_ACEOF #define GNULIB_STRERROR 1 _ACEOF GNULIB_STRERROR=1 $as_echo "#define GNULIB_TEST_STRERROR 1" >>confdefs.h if test -n "$ERRNO_H" || test $REPLACE_STRERROR_0 = 1; then srcgl_LIBOBJS="$srcgl_LIBOBJS strerror-override.$ac_objext" if test $ac_cv_header_sys_socket_h != yes; then for ac_header in winsock2.h do : ac_fn_c_check_header_mongrel "$LINENO" "winsock2.h" "ac_cv_header_winsock2_h" "$ac_includes_default" if test "x$ac_cv_header_winsock2_h" = xyes; then : cat >>confdefs.h <<_ACEOF #define HAVE_WINSOCK2_H 1 _ACEOF fi done fi if test "$ac_cv_header_winsock2_h" = yes; then HAVE_WINSOCK2_H=1 UNISTD_H_HAVE_WINSOCK2_H=1 SYS_IOCTL_H_HAVE_WINSOCK2_H=1 else HAVE_WINSOCK2_H=0 fi fi 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 " >&5 $as_echo_n "checking absolute name of ... " >&6; } if ${gl_cv_next_unistd_h+:} false; 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 _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'unistd.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_absolute_unistd_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` gl_header=$gl_cv_absolute_unistd_h gl_cv_next_unistd_h='"'$gl_header'"' 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 chdir chown dup dup2 dup3 environ euidaccess faccessat fchdir fchownat fdatasync fsync ftruncate getcwd getdomainname getdtablesize getgroups gethostname getlogin getlogin_r getpagesize getusershell setusershell endusershell group_member isatty lchown link linkat lseek pipe pipe2 pread pwrite readlink readlinkat rmdir sethostname 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 eval \${$as_gl_Symbol+:} false; then : $as_echo_n "(cached) " >&6 else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if HAVE_UNISTD_H # include #endif /* Some systems declare various items in the wrong headers. */ #if !(defined __GLIBC__ && !defined __UCLIBC__) # include # include # include # if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ # include # 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; } if eval test \"x\$"$as_gl_Symbol"\" = 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 # 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 # End of code from modules gltests_libdeps= gltests_ltlibdeps= gl_source_base='src/gl/tests' srcgltests_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=$srcgltests_WITNESS # For gss.h. VERSION_MAJOR=`echo $PACKAGE_VERSION | sed 's/\(.*\)\..*\..*/\1/g'` VERSION_MINOR=`echo $PACKAGE_VERSION | sed 's/.*\.\(.*\)\..*/\1/g'` VERSION_PATCH=`echo $PACKAGE_VERSION | sed 's/.*\..*\.\(.*\)/\1/g'` VERSION_NUMBER=`printf "0x%02x%02x%02x" $VERSION_MAJOR $VERSION_MINOR $VERSION_PATCH` # Test for Shishi. # Check whether --enable-kerberos5 was given. if test "${enable_kerberos5+set}" = set; then : enableval=$enable_kerberos5; kerberos5=$enableval fi if test "$kerberos5" != "no" ; then use_additional=yes acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" # Check whether --with-libshishi-prefix was given. if test "${with_libshishi_prefix+set}" = set; then : withval=$with_libshishi_prefix; if test "X$withval" = "Xno"; then use_additional=no else if test "X$withval" = "X"; then acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" else additional_includedir="$withval/include" additional_libdir="$withval/$acl_libdirstem" if test "$acl_libdirstem2" != "$acl_libdirstem" \ && ! test -d "$withval/$acl_libdirstem"; then additional_libdir="$withval/$acl_libdirstem2" fi fi fi fi LIBSHISHI= LTLIBSHISHI= INCSHISHI= LIBSHISHI_PREFIX= HAVE_LIBSHISHI= rpathdirs= ltrpathdirs= names_already_handled= names_next_round='shishi ' while test -n "$names_next_round"; do names_this_round="$names_next_round" names_next_round= for name in $names_this_round; do already_handled= for n in $names_already_handled; do if test "$n" = "$name"; then already_handled=yes break fi done if test -z "$already_handled"; then names_already_handled="$names_already_handled $name" uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./+-|ABCDEFGHIJKLMNOPQRSTUVWXYZ____|'` eval value=\"\$HAVE_LIB$uppername\" if test -n "$value"; then if test "$value" = yes; then eval value=\"\$LIB$uppername\" test -z "$value" || LIBSHISHI="${LIBSHISHI}${LIBSHISHI:+ }$value" eval value=\"\$LTLIB$uppername\" test -z "$value" || LTLIBSHISHI="${LTLIBSHISHI}${LTLIBSHISHI:+ }$value" else : fi else found_dir= found_la= found_so= found_a= eval libname=\"$acl_libname_spec\" # typically: libname=lib$name if test -n "$acl_shlibext"; then shrext=".$acl_shlibext" # typically: shrext=.so else shrext= fi if test $use_additional = yes; then dir="$additional_libdir" if test -n "$acl_shlibext"; then if test -f "$dir/$libname$shrext"; then found_dir="$dir" found_so="$dir/$libname$shrext" else if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then ver=`(cd "$dir" && \ for f in "$libname$shrext".*; do echo "$f"; done \ | sed -e "s,^$libname$shrext\\\\.,," \ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ | sed 1q ) 2>/dev/null` if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then found_dir="$dir" found_so="$dir/$libname$shrext.$ver" fi else eval library_names=\"$acl_library_names_spec\" for f in $library_names; do if test -f "$dir/$f"; then found_dir="$dir" found_so="$dir/$f" break fi done fi fi fi if test "X$found_dir" = "X"; then if test -f "$dir/$libname.$acl_libext"; then found_dir="$dir" found_a="$dir/$libname.$acl_libext" fi fi if test "X$found_dir" != "X"; then if test -f "$dir/$libname.la"; then found_la="$dir/$libname.la" fi fi fi if test "X$found_dir" = "X"; then for x in $LDFLAGS $LTLIBSHISHI; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" case "$x" in -L*) dir=`echo "X$x" | sed -e 's/^X-L//'` if test -n "$acl_shlibext"; then if test -f "$dir/$libname$shrext"; then found_dir="$dir" found_so="$dir/$libname$shrext" else if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then ver=`(cd "$dir" && \ for f in "$libname$shrext".*; do echo "$f"; done \ | sed -e "s,^$libname$shrext\\\\.,," \ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ | sed 1q ) 2>/dev/null` if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then found_dir="$dir" found_so="$dir/$libname$shrext.$ver" fi else eval library_names=\"$acl_library_names_spec\" for f in $library_names; do if test -f "$dir/$f"; then found_dir="$dir" found_so="$dir/$f" break fi done fi fi fi if test "X$found_dir" = "X"; then if test -f "$dir/$libname.$acl_libext"; then found_dir="$dir" found_a="$dir/$libname.$acl_libext" fi fi if test "X$found_dir" != "X"; then if test -f "$dir/$libname.la"; then found_la="$dir/$libname.la" fi fi ;; esac if test "X$found_dir" != "X"; then break fi done fi if test "X$found_dir" != "X"; then LTLIBSHISHI="${LTLIBSHISHI}${LTLIBSHISHI:+ }-L$found_dir -l$name" if test "X$found_so" != "X"; then if test "$enable_rpath" = no \ || test "X$found_dir" = "X/usr/$acl_libdirstem" \ || test "X$found_dir" = "X/usr/$acl_libdirstem2"; then LIBSHISHI="${LIBSHISHI}${LIBSHISHI:+ }$found_so" else haveit= for x in $ltrpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $found_dir" fi if test "$acl_hardcode_direct" = yes; then LIBSHISHI="${LIBSHISHI}${LIBSHISHI:+ }$found_so" else if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then LIBSHISHI="${LIBSHISHI}${LIBSHISHI:+ }$found_so" haveit= for x in $rpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $found_dir" fi else haveit= for x in $LDFLAGS $LIBSHISHI; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-L$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then LIBSHISHI="${LIBSHISHI}${LIBSHISHI:+ }-L$found_dir" fi if test "$acl_hardcode_minus_L" != no; then LIBSHISHI="${LIBSHISHI}${LIBSHISHI:+ }$found_so" else LIBSHISHI="${LIBSHISHI}${LIBSHISHI:+ }-l$name" fi fi fi fi else if test "X$found_a" != "X"; then LIBSHISHI="${LIBSHISHI}${LIBSHISHI:+ }$found_a" else LIBSHISHI="${LIBSHISHI}${LIBSHISHI:+ }-L$found_dir -l$name" fi fi additional_includedir= case "$found_dir" in */$acl_libdirstem | */$acl_libdirstem/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'` if test "$name" = 'shishi'; then LIBSHISHI_PREFIX="$basedir" fi additional_includedir="$basedir/include" ;; */$acl_libdirstem2 | */$acl_libdirstem2/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem2/"'*$,,'` if test "$name" = 'shishi'; then LIBSHISHI_PREFIX="$basedir" fi additional_includedir="$basedir/include" ;; esac if test "X$additional_includedir" != "X"; then if test "X$additional_includedir" != "X/usr/include"; then haveit= if test "X$additional_includedir" = "X/usr/local/include"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then for x in $CPPFLAGS $INCSHISHI; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-I$additional_includedir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_includedir"; then INCSHISHI="${INCSHISHI}${INCSHISHI:+ }-I$additional_includedir" fi fi fi fi fi if test -n "$found_la"; then save_libdir="$libdir" case "$found_la" in */* | *\\*) . "$found_la" ;; *) . "./$found_la" ;; esac libdir="$save_libdir" for dep in $dependency_libs; do case "$dep" in -L*) additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'` if test "X$additional_libdir" != "X/usr/$acl_libdirstem" \ && test "X$additional_libdir" != "X/usr/$acl_libdirstem2"; then haveit= if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem" \ || test "X$additional_libdir" = "X/usr/local/$acl_libdirstem2"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then haveit= for x in $LDFLAGS $LIBSHISHI; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_libdir"; then LIBSHISHI="${LIBSHISHI}${LIBSHISHI:+ }-L$additional_libdir" fi fi haveit= for x in $LDFLAGS $LTLIBSHISHI; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_libdir"; then LTLIBSHISHI="${LTLIBSHISHI}${LTLIBSHISHI:+ }-L$additional_libdir" fi fi fi fi ;; -R*) dir=`echo "X$dep" | sed -e 's/^X-R//'` if test "$enable_rpath" != no; then haveit= for x in $rpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $dir" fi haveit= for x in $ltrpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $dir" fi fi ;; -l*) names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'` ;; *.la) names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` ;; *) LIBSHISHI="${LIBSHISHI}${LIBSHISHI:+ }$dep" LTLIBSHISHI="${LTLIBSHISHI}${LTLIBSHISHI:+ }$dep" ;; esac done fi else LIBSHISHI="${LIBSHISHI}${LIBSHISHI:+ }-l$name" LTLIBSHISHI="${LTLIBSHISHI}${LTLIBSHISHI:+ }-l$name" fi fi fi done done if test "X$rpathdirs" != "X"; then if test -n "$acl_hardcode_libdir_separator"; then alldirs= for found_dir in $rpathdirs; do alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir" done acl_save_libdir="$libdir" libdir="$alldirs" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIBSHISHI="${LIBSHISHI}${LIBSHISHI:+ }$flag" else for found_dir in $rpathdirs; do acl_save_libdir="$libdir" libdir="$found_dir" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIBSHISHI="${LIBSHISHI}${LIBSHISHI:+ }$flag" done fi fi if test "X$ltrpathdirs" != "X"; then for found_dir in $ltrpathdirs; do LTLIBSHISHI="${LTLIBSHISHI}${LTLIBSHISHI:+ }-R$found_dir" done fi ac_save_CPPFLAGS="$CPPFLAGS" for element in $INCSHISHI; do haveit= for x in $CPPFLAGS; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X$element"; then haveit=yes break fi done if test -z "$haveit"; then CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }$element" fi done { $as_echo "$as_me:${as_lineno-$LINENO}: checking for libshishi" >&5 $as_echo_n "checking for libshishi... " >&6; } if ${ac_cv_libshishi+:} false; then : $as_echo_n "(cached) " >&6 else ac_save_LIBS="$LIBS" case " $LIBSHISHI" in *" -l"*) LIBS="$LIBS $LIBSHISHI" ;; *) LIBS="$LIBSHISHI $LIBS" ;; esac cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include int main () { shishi_key_timestamp (0); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : ac_cv_libshishi=yes else ac_cv_libshishi='no' fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext LIBS="$ac_save_LIBS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_cv_libshishi" >&5 $as_echo "$ac_cv_libshishi" >&6; } if test "$ac_cv_libshishi" = yes; then HAVE_LIBSHISHI=yes $as_echo "#define HAVE_LIBSHISHI 1" >>confdefs.h { $as_echo "$as_me:${as_lineno-$LINENO}: checking how to link with libshishi" >&5 $as_echo_n "checking how to link with libshishi... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $LIBSHISHI" >&5 $as_echo "$LIBSHISHI" >&6; } else HAVE_LIBSHISHI=no CPPFLAGS="$ac_save_CPPFLAGS" LIBSHISHI= LTLIBSHISHI= LIBSHISHI_PREFIX= fi if test "$ac_cv_libshishi" = yes; then $as_echo "#define USE_KERBEROS5 1" >>confdefs.h INCLUDE_GSS_KRB5='# include ' INCLUDE_GSS_KRB5_EXT='# include ' kerberos5=yes else kerberos5=no fi fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking if the Kerberos V5 mechanism should be supported" >&5 $as_echo_n "checking if the Kerberos V5 mechanism should be supported... " >&6; } { $as_echo "$as_me:${as_lineno-$LINENO}: result: $kerberos5" >&5 $as_echo "$kerberos5" >&6; } if test "$kerberos5" = "yes"; then KRB5_TRUE= KRB5_FALSE='#' else KRB5_TRUE='#' KRB5_FALSE= 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 ${ac_cv_path_PKG_CONFIG+:} false; 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 as_fn_executable_p "$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 ${ac_cv_path_ac_pt_PKG_CONFIG+:} false; 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 as_fn_executable_p "$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 ${ac_cv_path_GTKDOC_CHECK+:} false; 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 as_fn_executable_p "$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 ${ac_cv_path_GTKDOC_REBASE+:} false; 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 as_fn_executable_p "$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 ${ac_cv_path_GTKDOC_MKPDF+:} false; 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 as_fn_executable_p "$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.1\""; } >&5 ($PKG_CONFIG --exists --print-errors "gtk-doc >= 1.1") 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.1 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 { $as_echo "$as_me:${as_lineno-$LINENO}: checking for gettext translation domain suffix to use" >&5 $as_echo_n "checking for gettext translation domain suffix to use... " >&6; } # Check whether --with-po-suffix was given. if test "${with_po_suffix+set}" = set; then : withval=$with_po_suffix; po_suffix=$withval else po_suffix=no fi if test "$po_suffix" = "yes"; then PO_SUFFIX=$DLL_VERSION elif test "$po_suffix" != "no" ; then PO_SUFFIX=$po_suffix fi if test -n "$PO_SUFFIX"; then { $as_echo "$as_me:${as_lineno-$LINENO}: result: $PO_SUFFIX" >&5 $as_echo "$PO_SUFFIX" >&6; } else { $as_echo "$as_me:${as_lineno-$LINENO}: result: none" >&5 $as_echo "none" >&6; } fi cat >>confdefs.h <<_ACEOF #define PO_SUFFIX "$PO_SUFFIX" _ACEOF # 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 C compiler handles -Werror -Wunknown-warning-option" >&5 $as_echo_n "checking whether C compiler handles -Werror -Wunknown-warning-option... " >&6; } if ${gl_cv_warn_c__Werror__Wunknown_warning_option+:} false; then : $as_echo_n "(cached) " >&6 else gl_save_compiler_FLAGS="$CFLAGS" as_fn_append CFLAGS " $gl_unknown_warnings_are_errors -Werror -Wunknown-warning-option" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : gl_cv_warn_c__Werror__Wunknown_warning_option=yes else gl_cv_warn_c__Werror__Wunknown_warning_option=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext CFLAGS="$gl_save_compiler_FLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_warn_c__Werror__Wunknown_warning_option" >&5 $as_echo "$gl_cv_warn_c__Werror__Wunknown_warning_option" >&6; } if test "x$gl_cv_warn_c__Werror__Wunknown_warning_option" = xyes; then : gl_unknown_warnings_are_errors='-Wunknown-warning-option -Werror' else gl_unknown_warnings_are_errors= fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler handles -Werror" >&5 $as_echo_n "checking whether C compiler handles -Werror... " >&6; } if ${gl_cv_warn_c__Werror+:} false; then : $as_echo_n "(cached) " >&6 else gl_save_compiler_FLAGS="$CFLAGS" as_fn_append CFLAGS " $gl_unknown_warnings_are_errors -Werror" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : gl_cv_warn_c__Werror=yes else gl_cv_warn_c__Werror=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext CFLAGS="$gl_save_compiler_FLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_warn_c__Werror" >&5 $as_echo "$gl_cv_warn_c__Werror" >&6; } if test "x$gl_cv_warn_c__Werror" = xyes; then : as_fn_append WERROR_CFLAGS " -Werror" fi nw="$nw -Wsystem-headers" # Ignore errors in system headers nw="$nw -Wc++-compat" # We don't care much about C++ compilers nw="$nw -Wconversion" # Too many warnings for now nw="$nw -Wsign-conversion" # Too many warnings for now nw="$nw -Wcast-qual" # Too many warnings for now nw="$nw -Wtraditional" # Warns on #elif which we use often nw="$nw -Wunreachable-code" # False positive on strcmp nw="$nw -Wpadded" # Standard GSS-API headers are unpadded nw="$nw -Wtraditional-conversion" # Too many warnings for now nw="$nw -Wsuggest-attribute=pure" # Is it worth using attributes? nw="$nw -Wsuggest-attribute=const" # Is it worth using attributes? if test -n "$GCC"; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -Wno-missing-field-initializers is supported" >&5 $as_echo_n "checking whether -Wno-missing-field-initializers is supported... " >&6; } if ${gl_cv_cc_nomfi_supported+:} false; then : $as_echo_n "(cached) " >&6 else gl_save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -W -Werror -Wno-missing-field-initializers" 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_nomfi_supported=yes else gl_cv_cc_nomfi_supported=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_nomfi_supported" >&5 $as_echo "$gl_cv_cc_nomfi_supported" >&6; } if test "$gl_cv_cc_nomfi_supported" = yes; then { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -Wno-missing-field-initializers is needed" >&5 $as_echo_n "checking whether -Wno-missing-field-initializers is needed... " >&6; } if ${gl_cv_cc_nomfi_needed+:} false; then : $as_echo_n "(cached) " >&6 else gl_save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -W -Werror" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ void f (void) { typedef struct { int a; int b; } s_t; s_t s1 = { 0, }; } int main () { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO"; then : gl_cv_cc_nomfi_needed=no else gl_cv_cc_nomfi_needed=yes 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_nomfi_needed" >&5 $as_echo "$gl_cv_cc_nomfi_needed" >&6; } fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether -Wuninitialized is supported" >&5 $as_echo_n "checking whether -Wuninitialized is supported... " >&6; } if ${gl_cv_cc_uninitialized_supported+:} false; then : $as_echo_n "(cached) " >&6 else gl_save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -Werror -Wuninitialized" 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_uninitialized_supported=yes else gl_cv_cc_uninitialized_supported=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_uninitialized_supported" >&5 $as_echo "$gl_cv_cc_uninitialized_supported" >&6; } fi # List all gcc warning categories. # To compare this list to your installed GCC's, run this Bash command: # # comm -3 \ # <(sed -n 's/^ *\(-[^ ]*\) .*/\1/p' manywarnings.m4 | sort) \ # <(gcc --help=warnings | sed -n 's/^ \(-[^ ]*\) .*/\1/p' | sort | # grep -v -x -f <( # awk '/^[^#]/ {print ws}' ../build-aux/gcc-warning.spec)) gl_manywarn_set= for gl_manywarn_item in \ -W \ -Wabi \ -Waddress \ -Waggressive-loop-optimizations \ -Wall \ -Warray-bounds \ -Wattributes \ -Wbad-function-cast \ -Wbuiltin-macro-redefined \ -Wcast-align \ -Wchar-subscripts \ -Wclobbered \ -Wcomment \ -Wcomments \ -Wcoverage-mismatch \ -Wcpp \ -Wdate-time \ -Wdeprecated \ -Wdeprecated-declarations \ -Wdisabled-optimization \ -Wdiv-by-zero \ -Wdouble-promotion \ -Wempty-body \ -Wendif-labels \ -Wenum-compare \ -Wextra \ -Wformat-contains-nul \ -Wformat-extra-args \ -Wformat-nonliteral \ -Wformat-security \ -Wformat-y2k \ -Wformat-zero-length \ -Wfree-nonheap-object \ -Wignored-qualifiers \ -Wimplicit \ -Wimplicit-function-declaration \ -Wimplicit-int \ -Winit-self \ -Winline \ -Wint-to-pointer-cast \ -Winvalid-memory-model \ -Winvalid-pch \ -Wjump-misses-init \ -Wlogical-op \ -Wmain \ -Wmaybe-uninitialized \ -Wmissing-braces \ -Wmissing-declarations \ -Wmissing-field-initializers \ -Wmissing-include-dirs \ -Wmissing-parameter-type \ -Wmissing-prototypes \ -Wmultichar \ -Wnarrowing \ -Wnested-externs \ -Wnonnull \ -Wold-style-declaration \ -Wold-style-definition \ -Wopenmp-simd \ -Woverflow \ -Woverlength-strings \ -Woverride-init \ -Wpacked \ -Wpacked-bitfield-compat \ -Wparentheses \ -Wpointer-arith \ -Wpointer-sign \ -Wpointer-to-int-cast \ -Wpragmas \ -Wreturn-local-addr \ -Wreturn-type \ -Wsequence-point \ -Wshadow \ -Wsizeof-pointer-memaccess \ -Wstack-protector \ -Wstrict-aliasing \ -Wstrict-overflow \ -Wstrict-prototypes \ -Wsuggest-attribute=const \ -Wsuggest-attribute=format \ -Wsuggest-attribute=noreturn \ -Wsuggest-attribute=pure \ -Wswitch \ -Wswitch-default \ -Wsync-nand \ -Wsystem-headers \ -Wtrampolines \ -Wtrigraphs \ -Wtype-limits \ -Wuninitialized \ -Wunknown-pragmas \ -Wunsafe-loop-optimizations \ -Wunused \ -Wunused-but-set-parameter \ -Wunused-but-set-variable \ -Wunused-function \ -Wunused-label \ -Wunused-local-typedefs \ -Wunused-macros \ -Wunused-parameter \ -Wunused-result \ -Wunused-value \ -Wunused-variable \ -Wvarargs \ -Wvariadic-macros \ -Wvector-operation-performance \ -Wvla \ -Wvolatile-register-var \ -Wwrite-strings \ \ ; do gl_manywarn_set="$gl_manywarn_set $gl_manywarn_item" done # gcc --help=warnings outputs an unusual form for this option; list # it here so that the above 'comm' command doesn't report a false match. gl_manywarn_set="$gl_manywarn_set -Wnormalized=nfc" # These are needed for older GCC versions. if test -n "$GCC"; then case `($CC --version) 2>/dev/null` in 'gcc (GCC) '[0-3].* | \ 'gcc (GCC) '4.[0-7].*) gl_manywarn_set="$gl_manywarn_set -fdiagnostics-show-option" gl_manywarn_set="$gl_manywarn_set -funit-at-a-time" ;; esac fi # Disable specific options as needed. if test "$gl_cv_cc_nomfi_needed" = yes; then gl_manywarn_set="$gl_manywarn_set -Wno-missing-field-initializers" fi if test "$gl_cv_cc_uninitialized_supported" = no; then gl_manywarn_set="$gl_manywarn_set -Wno-uninitialized" fi 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_c_$w" | $as_tr_sh` gl_positive="$w" case $gl_positive in -Wno-*) gl_positive=-W`expr "X$gl_positive" : 'X-Wno-\(.*\)'` ;; esac { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler handles $w" >&5 $as_echo_n "checking whether C compiler handles $w... " >&6; } if eval \${$as_gl_Warn+:} false; then : $as_echo_n "(cached) " >&6 else gl_save_compiler_FLAGS="$CFLAGS" as_fn_append CFLAGS " $gl_unknown_warnings_are_errors $gl_positive" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : eval "$as_gl_Warn=yes" else eval "$as_gl_Warn=no" fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext CFLAGS="$gl_save_compiler_FLAGS" fi eval ac_res=\$$as_gl_Warn { $as_echo "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 $as_echo "$ac_res" >&6; } if eval test \"x\$"$as_gl_Warn"\" = x"yes"; then : as_fn_append WARN_CFLAGS " $w" fi done { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler handles -Wno-unused-parameter" >&5 $as_echo_n "checking whether C compiler handles -Wno-unused-parameter... " >&6; } if ${gl_cv_warn_c__Wno_unused_parameter+:} false; then : $as_echo_n "(cached) " >&6 else gl_save_compiler_FLAGS="$CFLAGS" as_fn_append CFLAGS " $gl_unknown_warnings_are_errors -Wunused-parameter" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : gl_cv_warn_c__Wno_unused_parameter=yes else gl_cv_warn_c__Wno_unused_parameter=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext CFLAGS="$gl_save_compiler_FLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_warn_c__Wno_unused_parameter" >&5 $as_echo "$gl_cv_warn_c__Wno_unused_parameter" >&6; } if test "x$gl_cv_warn_c__Wno_unused_parameter" = xyes; then : as_fn_append WARN_CFLAGS " -Wno-unused-parameter" fi { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler handles -Wno-stack-protector" >&5 $as_echo_n "checking whether C compiler handles -Wno-stack-protector... " >&6; } if ${gl_cv_warn_c__Wno_stack_protector+:} false; then : $as_echo_n "(cached) " >&6 else gl_save_compiler_FLAGS="$CFLAGS" as_fn_append CFLAGS " $gl_unknown_warnings_are_errors -Wstack-protector" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : gl_cv_warn_c__Wno_stack_protector=yes else gl_cv_warn_c__Wno_stack_protector=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext CFLAGS="$gl_save_compiler_FLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_warn_c__Wno_stack_protector" >&5 $as_echo "$gl_cv_warn_c__Wno_stack_protector" >&6; } if test "x$gl_cv_warn_c__Wno_stack_protector" = xyes; then : as_fn_append WARN_CFLAGS " -Wno-stack-protector" fi # Some functions cannot be protected { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler handles -Wno-array-bounds" >&5 $as_echo_n "checking whether C compiler handles -Wno-array-bounds... " >&6; } if ${gl_cv_warn_c__Wno_array_bounds+:} false; then : $as_echo_n "(cached) " >&6 else gl_save_compiler_FLAGS="$CFLAGS" as_fn_append CFLAGS " $gl_unknown_warnings_are_errors -Warray-bounds" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : gl_cv_warn_c__Wno_array_bounds=yes else gl_cv_warn_c__Wno_array_bounds=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext CFLAGS="$gl_save_compiler_FLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_warn_c__Wno_array_bounds" >&5 $as_echo "$gl_cv_warn_c__Wno_array_bounds" >&6; } if test "x$gl_cv_warn_c__Wno_array_bounds" = xyes; then : as_fn_append WARN_CFLAGS " -Wno-array-bounds" fi # gcc-4.6 meta.c false positive { $as_echo "$as_me:${as_lineno-$LINENO}: checking whether C compiler handles -fdiagnostics-show-option" >&5 $as_echo_n "checking whether C compiler handles -fdiagnostics-show-option... " >&6; } if ${gl_cv_warn_c__fdiagnostics_show_option+:} false; then : $as_echo_n "(cached) " >&6 else gl_save_compiler_FLAGS="$CFLAGS" as_fn_append CFLAGS " $gl_unknown_warnings_are_errors -fdiagnostics-show-option" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main () { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO"; then : gl_cv_warn_c__fdiagnostics_show_option=yes else gl_cv_warn_c__fdiagnostics_show_option=no fi rm -f core conftest.err conftest.$ac_objext \ conftest$ac_exeext conftest.$ac_ext CFLAGS="$gl_save_compiler_FLAGS" fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: $gl_cv_warn_c__fdiagnostics_show_option" >&5 $as_echo "$gl_cv_warn_c__fdiagnostics_show_option" >&6; } if test "x$gl_cv_warn_c__fdiagnostics_show_option" = xyes; 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 doc/reference/version.xml gl/Makefile gss.pc lib/Makefile lib/gl/Makefile lib/headers/gss.h lib/krb5/Makefile po/Makefile.in po/Makevars src/Makefile src/gl/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 if test "x$cache_file" != "x/dev/null"; then { $as_echo "$as_me:${as_lineno-$LINENO}: updating cache $cache_file" >&5 $as_echo "$as_me: updating cache $cache_file" >&6;} if test ! -f "$cache_file" || test -h "$cache_file"; then cat confcache >"$cache_file" else case $cache_file in #( */* | ?:*) mv -f confcache "$cache_file"$$ && mv -f "$cache_file"$$ "$cache_file" ;; #( *) mv -f confcache "$cache_file" ;; esac fi fi 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= U= 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 { $as_echo "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5 $as_echo_n "checking that generated files are newer than configure... " >&6; } if test -n "$am_sleep_pid"; then # Hide warnings about reused PIDs. wait $am_sleep_pid 2>/dev/null fi { $as_echo "$as_me:${as_lineno-$LINENO}: result: done" >&5 $as_echo "done" >&6; } 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 "${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 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_OUTPUT_DEF_TRUE}" && test -z "${HAVE_LD_OUTPUT_DEF_FALSE}"; then as_fn_error $? "conditional \"HAVE_LD_OUTPUT_DEF\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${GL_GENERATE_STDDEF_H_TRUE}" && test -z "${GL_GENERATE_STDDEF_H_FALSE}"; then as_fn_error $? "conditional \"GL_GENERATE_STDDEF_H\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi libgl_libobjs= libgl_ltlibobjs= if test -n "$libgl_LIBOBJS"; then # Remove the extension. sed_drop_objext='s/\.o$//;s/\.obj$//' for i in `for i in $libgl_LIBOBJS; do echo "$i"; done | sed -e "$sed_drop_objext" | sort | uniq`; do libgl_libobjs="$libgl_libobjs $i.$ac_objext" libgl_ltlibobjs="$libgl_ltlibobjs $i.lo" done fi libgl_LIBOBJS=$libgl_libobjs libgl_LTLIBOBJS=$libgl_ltlibobjs libgltests_libobjs= libgltests_ltlibobjs= if test -n "$libgltests_LIBOBJS"; then # Remove the extension. sed_drop_objext='s/\.o$//;s/\.obj$//' for i in `for i in $libgltests_LIBOBJS; do echo "$i"; done | sed -e "$sed_drop_objext" | sort | uniq`; do libgltests_libobjs="$libgltests_libobjs $i.$ac_objext" libgltests_ltlibobjs="$libgltests_ltlibobjs $i.lo" done fi libgltests_LIBOBJS=$libgltests_libobjs libgltests_LTLIBOBJS=$libgltests_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 "${GL_GENERATE_ERRNO_H_TRUE}" && test -z "${GL_GENERATE_ERRNO_H_FALSE}"; then as_fn_error $? "conditional \"GL_GENERATE_ERRNO_H\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${GL_GENERATE_STDARG_H_TRUE}" && test -z "${GL_GENERATE_STDARG_H_FALSE}"; then as_fn_error $? "conditional \"GL_GENERATE_STDARG_H\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${GL_GENERATE_STDBOOL_H_TRUE}" && test -z "${GL_GENERATE_STDBOOL_H_FALSE}"; then as_fn_error $? "conditional \"GL_GENERATE_STDBOOL_H\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${GL_GENERATE_STDDEF_H_TRUE}" && test -z "${GL_GENERATE_STDDEF_H_FALSE}"; then as_fn_error $? "conditional \"GL_GENERATE_STDDEF_H\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi srcgl_libobjs= srcgl_ltlibobjs= if test -n "$srcgl_LIBOBJS"; then # Remove the extension. sed_drop_objext='s/\.o$//;s/\.obj$//' for i in `for i in $srcgl_LIBOBJS; do echo "$i"; done | sed -e "$sed_drop_objext" | sort | uniq`; do srcgl_libobjs="$srcgl_libobjs $i.$ac_objext" srcgl_ltlibobjs="$srcgl_ltlibobjs $i.lo" done fi srcgl_LIBOBJS=$srcgl_libobjs srcgl_LTLIBOBJS=$srcgl_ltlibobjs srcgltests_libobjs= srcgltests_ltlibobjs= if test -n "$srcgltests_LIBOBJS"; then # Remove the extension. sed_drop_objext='s/\.o$//;s/\.obj$//' for i in `for i in $srcgltests_LIBOBJS; do echo "$i"; done | sed -e "$sed_drop_objext" | sort | uniq`; do srcgltests_libobjs="$srcgltests_libobjs $i.$ac_objext" srcgltests_ltlibobjs="$srcgltests_ltlibobjs $i.lo" done fi srcgltests_LIBOBJS=$srcgltests_libobjs srcgltests_LTLIBOBJS=$srcgltests_ltlibobjs if test -z "${KRB5_TRUE}" && test -z "${KRB5_FALSE}"; then as_fn_error $? "conditional \"KRB5\" 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 : "${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. as_myself= 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 STATUS 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=$1; test $as_status -eq 0 && as_status=1 if test "$4"; then as_lineno=${as_lineno-"$3"} as_lineno_stack=as_lineno_stack=$as_lineno_stack $as_echo "$as_me:${as_lineno-$LINENO}: error: $2" >&$4 fi $as_echo "$as_me: error: $2" >&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 -pR'. ln -s conf$$.file conf$$.dir 2>/dev/null && test ! -f conf$$.exe || as_ln_s='cp -pR' elif ln conf$$.file conf$$ 2>/dev/null; then as_ln_s=ln else as_ln_s='cp -pR' fi else as_ln_s='cp -pR' 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 # as_fn_executable_p FILE # ----------------------- # Test if FILE is an executable regular file. as_fn_executable_p () { test -f "$1" && test -x "$1" } # as_fn_executable_p as_test_x='test -x' as_executable_p=as_fn_executable_p # 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 Generic Security Service $as_me 1.0.3, which was generated by GNU Autoconf 2.69. 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 . GNU Generic Security Service home page: . General help using GNU software: ." _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 Generic Security Service config.status 1.0.3 configured by $0, generated by GNU Autoconf 2.69, with options \\"\$ac_cs_config\\" Copyright (C) 2012 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=`expr "X$1" : 'X\([^=]*\)='` ac_optarg= 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"` ;; '') as_fn_error $? "missing file argument" ;; 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' macro_version='`$ECHO "$macro_version" | $SED "$delay_single_quote_subst"`' macro_revision='`$ECHO "$macro_revision" | $SED "$delay_single_quote_subst"`' AS='`$ECHO "$AS" | $SED "$delay_single_quote_subst"`' DLLTOOL='`$ECHO "$DLLTOOL" | $SED "$delay_single_quote_subst"`' OBJDUMP='`$ECHO "$OBJDUMP" | $SED "$delay_single_quote_subst"`' enable_shared='`$ECHO "$enable_shared" | $SED "$delay_single_quote_subst"`' enable_static='`$ECHO "$enable_static" | $SED "$delay_single_quote_subst"`' pic_mode='`$ECHO "$pic_mode" | $SED "$delay_single_quote_subst"`' enable_fast_install='`$ECHO "$enable_fast_install" | $SED "$delay_single_quote_subst"`' SHELL='`$ECHO "$SHELL" | $SED "$delay_single_quote_subst"`' ECHO='`$ECHO "$ECHO" | $SED "$delay_single_quote_subst"`' PATH_SEPARATOR='`$ECHO "$PATH_SEPARATOR" | $SED "$delay_single_quote_subst"`' host_alias='`$ECHO "$host_alias" | $SED "$delay_single_quote_subst"`' host='`$ECHO "$host" | $SED "$delay_single_quote_subst"`' host_os='`$ECHO "$host_os" | $SED "$delay_single_quote_subst"`' build_alias='`$ECHO "$build_alias" | $SED "$delay_single_quote_subst"`' build='`$ECHO "$build" | $SED "$delay_single_quote_subst"`' build_os='`$ECHO "$build_os" | $SED "$delay_single_quote_subst"`' SED='`$ECHO "$SED" | $SED "$delay_single_quote_subst"`' Xsed='`$ECHO "$Xsed" | $SED "$delay_single_quote_subst"`' GREP='`$ECHO "$GREP" | $SED "$delay_single_quote_subst"`' EGREP='`$ECHO "$EGREP" | $SED "$delay_single_quote_subst"`' FGREP='`$ECHO "$FGREP" | $SED "$delay_single_quote_subst"`' LD='`$ECHO "$LD" | $SED "$delay_single_quote_subst"`' NM='`$ECHO "$NM" | $SED "$delay_single_quote_subst"`' LN_S='`$ECHO "$LN_S" | $SED "$delay_single_quote_subst"`' max_cmd_len='`$ECHO "$max_cmd_len" | $SED "$delay_single_quote_subst"`' ac_objext='`$ECHO "$ac_objext" | $SED "$delay_single_quote_subst"`' exeext='`$ECHO "$exeext" | $SED "$delay_single_quote_subst"`' lt_unset='`$ECHO "$lt_unset" | $SED "$delay_single_quote_subst"`' lt_SP2NL='`$ECHO "$lt_SP2NL" | $SED "$delay_single_quote_subst"`' lt_NL2SP='`$ECHO "$lt_NL2SP" | $SED "$delay_single_quote_subst"`' lt_cv_to_host_file_cmd='`$ECHO "$lt_cv_to_host_file_cmd" | $SED "$delay_single_quote_subst"`' lt_cv_to_tool_file_cmd='`$ECHO "$lt_cv_to_tool_file_cmd" | $SED "$delay_single_quote_subst"`' reload_flag='`$ECHO "$reload_flag" | $SED "$delay_single_quote_subst"`' reload_cmds='`$ECHO "$reload_cmds" | $SED "$delay_single_quote_subst"`' deplibs_check_method='`$ECHO "$deplibs_check_method" | $SED "$delay_single_quote_subst"`' file_magic_cmd='`$ECHO "$file_magic_cmd" | $SED "$delay_single_quote_subst"`' file_magic_glob='`$ECHO "$file_magic_glob" | $SED "$delay_single_quote_subst"`' want_nocaseglob='`$ECHO "$want_nocaseglob" | $SED "$delay_single_quote_subst"`' sharedlib_from_linklib_cmd='`$ECHO "$sharedlib_from_linklib_cmd" | $SED "$delay_single_quote_subst"`' AR='`$ECHO "$AR" | $SED "$delay_single_quote_subst"`' AR_FLAGS='`$ECHO "$AR_FLAGS" | $SED "$delay_single_quote_subst"`' archiver_list_spec='`$ECHO "$archiver_list_spec" | $SED "$delay_single_quote_subst"`' STRIP='`$ECHO "$STRIP" | $SED "$delay_single_quote_subst"`' RANLIB='`$ECHO "$RANLIB" | $SED "$delay_single_quote_subst"`' old_postinstall_cmds='`$ECHO "$old_postinstall_cmds" | $SED "$delay_single_quote_subst"`' old_postuninstall_cmds='`$ECHO "$old_postuninstall_cmds" | $SED "$delay_single_quote_subst"`' old_archive_cmds='`$ECHO "$old_archive_cmds" | $SED "$delay_single_quote_subst"`' lock_old_archive_extraction='`$ECHO "$lock_old_archive_extraction" | $SED "$delay_single_quote_subst"`' CC='`$ECHO "$CC" | $SED "$delay_single_quote_subst"`' CFLAGS='`$ECHO "$CFLAGS" | $SED "$delay_single_quote_subst"`' compiler='`$ECHO "$compiler" | $SED "$delay_single_quote_subst"`' GCC='`$ECHO "$GCC" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_pipe='`$ECHO "$lt_cv_sys_global_symbol_pipe" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_cdecl='`$ECHO "$lt_cv_sys_global_symbol_to_cdecl" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $SED "$delay_single_quote_subst"`' nm_file_list_spec='`$ECHO "$nm_file_list_spec" | $SED "$delay_single_quote_subst"`' lt_sysroot='`$ECHO "$lt_sysroot" | $SED "$delay_single_quote_subst"`' objdir='`$ECHO "$objdir" | $SED "$delay_single_quote_subst"`' MAGIC_CMD='`$ECHO "$MAGIC_CMD" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_no_builtin_flag='`$ECHO "$lt_prog_compiler_no_builtin_flag" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_pic='`$ECHO "$lt_prog_compiler_pic" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_static='`$ECHO "$lt_prog_compiler_static" | $SED "$delay_single_quote_subst"`' lt_cv_prog_compiler_c_o='`$ECHO "$lt_cv_prog_compiler_c_o" | $SED "$delay_single_quote_subst"`' need_locks='`$ECHO "$need_locks" | $SED "$delay_single_quote_subst"`' MANIFEST_TOOL='`$ECHO "$MANIFEST_TOOL" | $SED "$delay_single_quote_subst"`' DSYMUTIL='`$ECHO "$DSYMUTIL" | $SED "$delay_single_quote_subst"`' NMEDIT='`$ECHO "$NMEDIT" | $SED "$delay_single_quote_subst"`' LIPO='`$ECHO "$LIPO" | $SED "$delay_single_quote_subst"`' OTOOL='`$ECHO "$OTOOL" | $SED "$delay_single_quote_subst"`' OTOOL64='`$ECHO "$OTOOL64" | $SED "$delay_single_quote_subst"`' libext='`$ECHO "$libext" | $SED "$delay_single_quote_subst"`' shrext_cmds='`$ECHO "$shrext_cmds" | $SED "$delay_single_quote_subst"`' extract_expsyms_cmds='`$ECHO "$extract_expsyms_cmds" | $SED "$delay_single_quote_subst"`' archive_cmds_need_lc='`$ECHO "$archive_cmds_need_lc" | $SED "$delay_single_quote_subst"`' enable_shared_with_static_runtimes='`$ECHO "$enable_shared_with_static_runtimes" | $SED "$delay_single_quote_subst"`' export_dynamic_flag_spec='`$ECHO "$export_dynamic_flag_spec" | $SED "$delay_single_quote_subst"`' whole_archive_flag_spec='`$ECHO "$whole_archive_flag_spec" | $SED "$delay_single_quote_subst"`' compiler_needs_object='`$ECHO "$compiler_needs_object" | $SED "$delay_single_quote_subst"`' old_archive_from_new_cmds='`$ECHO "$old_archive_from_new_cmds" | $SED "$delay_single_quote_subst"`' old_archive_from_expsyms_cmds='`$ECHO "$old_archive_from_expsyms_cmds" | $SED "$delay_single_quote_subst"`' archive_cmds='`$ECHO "$archive_cmds" | $SED "$delay_single_quote_subst"`' archive_expsym_cmds='`$ECHO "$archive_expsym_cmds" | $SED "$delay_single_quote_subst"`' module_cmds='`$ECHO "$module_cmds" | $SED "$delay_single_quote_subst"`' module_expsym_cmds='`$ECHO "$module_expsym_cmds" | $SED "$delay_single_quote_subst"`' with_gnu_ld='`$ECHO "$with_gnu_ld" | $SED "$delay_single_quote_subst"`' allow_undefined_flag='`$ECHO "$allow_undefined_flag" | $SED "$delay_single_quote_subst"`' no_undefined_flag='`$ECHO "$no_undefined_flag" | $SED "$delay_single_quote_subst"`' hardcode_libdir_flag_spec='`$ECHO "$hardcode_libdir_flag_spec" | $SED "$delay_single_quote_subst"`' hardcode_libdir_separator='`$ECHO "$hardcode_libdir_separator" | $SED "$delay_single_quote_subst"`' hardcode_direct='`$ECHO "$hardcode_direct" | $SED "$delay_single_quote_subst"`' hardcode_direct_absolute='`$ECHO "$hardcode_direct_absolute" | $SED "$delay_single_quote_subst"`' hardcode_minus_L='`$ECHO "$hardcode_minus_L" | $SED "$delay_single_quote_subst"`' hardcode_shlibpath_var='`$ECHO "$hardcode_shlibpath_var" | $SED "$delay_single_quote_subst"`' hardcode_automatic='`$ECHO "$hardcode_automatic" | $SED "$delay_single_quote_subst"`' inherit_rpath='`$ECHO "$inherit_rpath" | $SED "$delay_single_quote_subst"`' link_all_deplibs='`$ECHO "$link_all_deplibs" | $SED "$delay_single_quote_subst"`' always_export_symbols='`$ECHO "$always_export_symbols" | $SED "$delay_single_quote_subst"`' export_symbols_cmds='`$ECHO "$export_symbols_cmds" | $SED "$delay_single_quote_subst"`' exclude_expsyms='`$ECHO "$exclude_expsyms" | $SED "$delay_single_quote_subst"`' include_expsyms='`$ECHO "$include_expsyms" | $SED "$delay_single_quote_subst"`' prelink_cmds='`$ECHO "$prelink_cmds" | $SED "$delay_single_quote_subst"`' postlink_cmds='`$ECHO "$postlink_cmds" | $SED "$delay_single_quote_subst"`' file_list_spec='`$ECHO "$file_list_spec" | $SED "$delay_single_quote_subst"`' variables_saved_for_relink='`$ECHO "$variables_saved_for_relink" | $SED "$delay_single_quote_subst"`' need_lib_prefix='`$ECHO "$need_lib_prefix" | $SED "$delay_single_quote_subst"`' need_version='`$ECHO "$need_version" | $SED "$delay_single_quote_subst"`' version_type='`$ECHO "$version_type" | $SED "$delay_single_quote_subst"`' runpath_var='`$ECHO "$runpath_var" | $SED "$delay_single_quote_subst"`' shlibpath_var='`$ECHO "$shlibpath_var" | $SED "$delay_single_quote_subst"`' shlibpath_overrides_runpath='`$ECHO "$shlibpath_overrides_runpath" | $SED "$delay_single_quote_subst"`' libname_spec='`$ECHO "$libname_spec" | $SED "$delay_single_quote_subst"`' library_names_spec='`$ECHO "$library_names_spec" | $SED "$delay_single_quote_subst"`' soname_spec='`$ECHO "$soname_spec" | $SED "$delay_single_quote_subst"`' install_override_mode='`$ECHO "$install_override_mode" | $SED "$delay_single_quote_subst"`' postinstall_cmds='`$ECHO "$postinstall_cmds" | $SED "$delay_single_quote_subst"`' postuninstall_cmds='`$ECHO "$postuninstall_cmds" | $SED "$delay_single_quote_subst"`' finish_cmds='`$ECHO "$finish_cmds" | $SED "$delay_single_quote_subst"`' finish_eval='`$ECHO "$finish_eval" | $SED "$delay_single_quote_subst"`' hardcode_into_libs='`$ECHO "$hardcode_into_libs" | $SED "$delay_single_quote_subst"`' sys_lib_search_path_spec='`$ECHO "$sys_lib_search_path_spec" | $SED "$delay_single_quote_subst"`' sys_lib_dlsearch_path_spec='`$ECHO "$sys_lib_dlsearch_path_spec" | $SED "$delay_single_quote_subst"`' hardcode_action='`$ECHO "$hardcode_action" | $SED "$delay_single_quote_subst"`' enable_dlopen='`$ECHO "$enable_dlopen" | $SED "$delay_single_quote_subst"`' enable_dlopen_self='`$ECHO "$enable_dlopen_self" | $SED "$delay_single_quote_subst"`' enable_dlopen_self_static='`$ECHO "$enable_dlopen_self_static" | $SED "$delay_single_quote_subst"`' old_striplib='`$ECHO "$old_striplib" | $SED "$delay_single_quote_subst"`' striplib='`$ECHO "$striplib" | $SED "$delay_single_quote_subst"`' LTCC='$LTCC' LTCFLAGS='$LTCFLAGS' compiler='$compiler_DEFAULT' # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF \$1 _LTECHO_EOF' } # Quote evaled strings. for var in AS \ DLLTOOL \ OBJDUMP \ SHELL \ ECHO \ PATH_SEPARATOR \ SED \ GREP \ EGREP \ FGREP \ LD \ NM \ LN_S \ lt_SP2NL \ lt_NL2SP \ reload_flag \ deplibs_check_method \ file_magic_cmd \ file_magic_glob \ want_nocaseglob \ sharedlib_from_linklib_cmd \ AR \ AR_FLAGS \ archiver_list_spec \ 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 \ nm_file_list_spec \ lt_prog_compiler_no_builtin_flag \ lt_prog_compiler_pic \ lt_prog_compiler_wl \ lt_prog_compiler_static \ lt_cv_prog_compiler_c_o \ need_locks \ MANIFEST_TOOL \ 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_separator \ exclude_expsyms \ include_expsyms \ file_list_spec \ variables_saved_for_relink \ libname_spec \ library_names_spec \ soname_spec \ install_override_mode \ finish_eval \ old_striplib \ striplib; do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[\\\\\\\`\\"\\\$]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$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 \ postlink_cmds \ postinstall_cmds \ postuninstall_cmds \ finish_cmds \ sys_lib_search_path_spec \ sys_lib_dlsearch_path_spec; do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[\\\\\\\`\\"\\\$]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done 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' # Capture the value of obsolete ALL_LINGUAS because we need it to compute # POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES, CATALOGS. But hide it # from automake < 1.5. eval 'OBSOLETE_ALL_LINGUAS''="$ALL_LINGUAS"' # Capture the value of LINGUAS because we need it to compute CATALOGS. LINGUAS="${LINGUAS-%UNSET%}" 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" ;; "po-directories") CONFIG_COMMANDS="$CONFIG_COMMANDS po-directories" ;; "$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" ;; "doc/reference/version.xml") CONFIG_FILES="$CONFIG_FILES doc/reference/version.xml" ;; "gl/Makefile") CONFIG_FILES="$CONFIG_FILES gl/Makefile" ;; "gss.pc") CONFIG_FILES="$CONFIG_FILES gss.pc" ;; "lib/Makefile") CONFIG_FILES="$CONFIG_FILES lib/Makefile" ;; "lib/gl/Makefile") CONFIG_FILES="$CONFIG_FILES lib/gl/Makefile" ;; "lib/headers/gss.h") CONFIG_FILES="$CONFIG_FILES lib/headers/gss.h" ;; "lib/krb5/Makefile") CONFIG_FILES="$CONFIG_FILES lib/krb5/Makefile" ;; "po/Makefile.in") CONFIG_FILES="$CONFIG_FILES po/Makefile.in" ;; "po/Makevars") CONFIG_FILES="$CONFIG_FILES po/Makevars" ;; "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;; "src/gl/Makefile") CONFIG_FILES="$CONFIG_FILES src/gl/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= ac_tmp= trap 'exit_status=$? : "${ac_tmp:=$tmp}" { test ! -d "$ac_tmp" || rm -fr "$ac_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 -d "$tmp" } || { tmp=./conf$$-$RANDOM (umask 077 && mkdir "$tmp") } || as_fn_error $? "cannot create a temporary directory in ." "$LINENO" 5 ac_tmp=$tmp # 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` 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 {' >"$ac_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 >>"\$ac_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 ' >$CONFIG_STATUS || ac_write_fail=1 rm -f conf$$subs.awk cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 _ACAWK cat >>"\$ac_tmp/subs1.awk" <<_ACAWK && for (key in S) S_is_set[key] = 1 FS = "" } { 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 < "$ac_tmp/subs1.awk" > "$ac_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 sole $(srcdir), # ${srcdir} and @srcdir@ entries 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[ ]*=[ ]*/{ h s/// s/^/:/ s/[ ]*$/:/ s/:\$(srcdir):/:/g s/:\${srcdir}:/:/g s/:@srcdir@:/:/g s/^:*// s/:*$// x s/\(=[ ]*\).*/\1/ G s/\n// 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 >"$ac_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_tt=`sed -n "/$ac_delim/p" confdefs.h` if test -z "$ac_tt"; 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 ' >$CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 for (key in D) D_is_set[key] = 1 FS = "" } /^[\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="$ac_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 1 "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 >"$ac_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 "$ac_tmp/subs.awk" \ >$ac_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' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_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 "$ac_tmp/stdin" case $ac_file in -) cat "$ac_tmp/out" && rm -f "$ac_tmp/out";; *) rm -f "$ac_file" && mv "$ac_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 "$ac_tmp/defines.awk"' "$ac_file_inputs" } >"$ac_tmp/config.h" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 if diff "$ac_file" "$ac_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 "$ac_tmp/config.h" "$ac_file" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 fi else $as_echo "/* $configure_input */" \ && eval '$AWK -f "$ac_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 $ac_source 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"" || { # Older Autoconf 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"` # 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'`; 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, 2009, 2010, 2011 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 # Which release of libtool.m4 was used? macro_version=$macro_version macro_revision=$macro_revision # Assembler program. AS=$lt_AS # DLL creation program. DLLTOOL=$lt_DLLTOOL # Object dumper program. OBJDUMP=$lt_OBJDUMP # 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 # Shell to use when invoking shell scripts. SHELL=$lt_SHELL # An echo program that protects backslashes. ECHO=$lt_ECHO # The PATH separator for the build system. PATH_SEPARATOR=$lt_PATH_SEPARATOR # 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 # convert \$build file names to \$host format. to_host_file_cmd=$lt_cv_to_host_file_cmd # convert \$build files to toolchain format. to_tool_file_cmd=$lt_cv_to_tool_file_cmd # 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 # How to find potential files when deplibs_check_method = "file_magic". file_magic_glob=$lt_file_magic_glob # Find potential files using nocaseglob when deplibs_check_method = "file_magic". want_nocaseglob=$lt_want_nocaseglob # Command to associate shared and link libraries. sharedlib_from_linklib_cmd=$lt_sharedlib_from_linklib_cmd # The archiver. AR=$lt_AR # Flags to create an archive. AR_FLAGS=$lt_AR_FLAGS # How to feed a file listing to the archiver. archiver_list_spec=$lt_archiver_list_spec # 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 # Whether to use a lock for old archive extraction. lock_old_archive_extraction=$lock_old_archive_extraction # 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 # Specify filename containing input files for \$NM. nm_file_list_spec=$lt_nm_file_list_spec # The root where to search for dependent libraries,and in which our libraries should be installed. lt_sysroot=$lt_sysroot # The name of the directory that contains temporary libtool files. objdir=$objdir # 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 # Manifest tool. MANIFEST_TOOL=$lt_MANIFEST_TOOL # 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 # Permission mode override for installation of shared libraries. install_override_mode=$lt_install_override_mode # 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 # How to create reloadable object files. reload_flag=$lt_reload_flag reload_cmds=$lt_reload_cmds # 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 # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl # 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 # 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 # 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 # Commands necessary for finishing linking programs. postlink_cmds=$lt_postlink_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 '$q' "$ltmain" >> "$cfgfile" \ || (rm -f "$cfgfile"; exit 1) if test x"$xsi_shell" = xyes; then sed -e '/^func_dirname ()$/,/^} # func_dirname /c\ func_dirname ()\ {\ \ case ${1} in\ \ */*) func_dirname_result="${1%/*}${2}" ;;\ \ * ) func_dirname_result="${3}" ;;\ \ esac\ } # Extended-shell func_dirname implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_basename ()$/,/^} # func_basename /c\ func_basename ()\ {\ \ func_basename_result="${1##*/}"\ } # Extended-shell func_basename implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_dirname_and_basename ()$/,/^} # func_dirname_and_basename /c\ func_dirname_and_basename ()\ {\ \ case ${1} in\ \ */*) func_dirname_result="${1%/*}${2}" ;;\ \ * ) func_dirname_result="${3}" ;;\ \ esac\ \ func_basename_result="${1##*/}"\ } # Extended-shell func_dirname_and_basename implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_stripname ()$/,/^} # func_stripname /c\ 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}"}\ } # Extended-shell func_stripname implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_split_long_opt ()$/,/^} # func_split_long_opt /c\ func_split_long_opt ()\ {\ \ func_split_long_opt_name=${1%%=*}\ \ func_split_long_opt_arg=${1#*=}\ } # Extended-shell func_split_long_opt implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_split_short_opt ()$/,/^} # func_split_short_opt /c\ func_split_short_opt ()\ {\ \ func_split_short_opt_arg=${1#??}\ \ func_split_short_opt_name=${1%"$func_split_short_opt_arg"}\ } # Extended-shell func_split_short_opt implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_lo2o ()$/,/^} # func_lo2o /c\ func_lo2o ()\ {\ \ case ${1} in\ \ *.lo) func_lo2o_result=${1%.lo}.${objext} ;;\ \ *) func_lo2o_result=${1} ;;\ \ esac\ } # Extended-shell func_lo2o implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_xform ()$/,/^} # func_xform /c\ func_xform ()\ {\ func_xform_result=${1%.*}.lo\ } # Extended-shell func_xform implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_arith ()$/,/^} # func_arith /c\ func_arith ()\ {\ func_arith_result=$(( $* ))\ } # Extended-shell func_arith implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_len ()$/,/^} # func_len /c\ func_len ()\ {\ func_len_result=${#1}\ } # Extended-shell func_len implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: fi if test x"$lt_shell_append" = xyes; then sed -e '/^func_append ()$/,/^} # func_append /c\ func_append ()\ {\ eval "${1}+=\\${2}"\ } # Extended-shell func_append implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: sed -e '/^func_append_quoted ()$/,/^} # func_append_quoted /c\ func_append_quoted ()\ {\ \ func_quote_for_eval "${2}"\ \ eval "${1}+=\\\\ \\$func_quote_for_eval_result"\ } # Extended-shell func_append_quoted implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: # Save a `func_append' function call where possible by direct use of '+=' sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: else # Save a `func_append' function call even when '+=' is not available sed -e 's%func_append \([a-zA-Z_]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: fi if test x"$_lt_function_replace_fail" = x":"; then { $as_echo "$as_me:${as_lineno-$LINENO}: WARNING: Unable to substitute extended shell functions in $ofile" >&5 $as_echo "$as_me: WARNING: Unable to substitute extended shell functions in $ofile" >&2;} fi mv -f "$cfgfile" "$ofile" || (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") chmod +x "$ofile" ;; "po-directories":C) for ac_file in $CONFIG_FILES; do # Support "outfile[:infile[:infile...]]" case "$ac_file" in *:*) ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; esac # PO directories have a Makefile.in generated from Makefile.in.in. case "$ac_file" in */Makefile.in) # Adjust a relative srcdir. ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'` ac_dir_suffix=/`echo "$ac_dir"|sed 's%^\./%%'` ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'` # In autoconf-2.13 it is called $ac_given_srcdir. # In autoconf-2.50 it is called $srcdir. test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir" case "$ac_given_srcdir" in .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;; /*) top_srcdir="$ac_given_srcdir" ;; *) top_srcdir="$ac_dots$ac_given_srcdir" ;; esac # Treat a directory as a PO directory if and only if it has a # POTFILES.in file. This allows packages to have multiple PO # directories under different names or in different locations. if test -f "$ac_given_srcdir/$ac_dir/POTFILES.in"; then rm -f "$ac_dir/POTFILES" test -n "$as_me" && echo "$as_me: creating $ac_dir/POTFILES" || echo "creating $ac_dir/POTFILES" gt_tab=`printf '\t'` cat "$ac_given_srcdir/$ac_dir/POTFILES.in" | sed -e "/^#/d" -e "/^[ ${gt_tab}]*\$/d" -e "s,.*, $top_srcdir/& \\\\," | sed -e "\$s/\(.*\) \\\\/\1/" > "$ac_dir/POTFILES" POMAKEFILEDEPS="POTFILES.in" # ALL_LINGUAS, POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES depend # on $ac_dir but don't depend on user-specified configuration # parameters. if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then # The LINGUAS file contains the set of available languages. if test -n "$OBSOLETE_ALL_LINGUAS"; then test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete" fi ALL_LINGUAS_=`sed -e "/^#/d" -e "s/#.*//" "$ac_given_srcdir/$ac_dir/LINGUAS"` # Hide the ALL_LINGUAS assignment from automake < 1.5. eval 'ALL_LINGUAS''=$ALL_LINGUAS_' POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS" else # The set of available languages was given in configure.in. # Hide the ALL_LINGUAS assignment from automake < 1.5. eval 'ALL_LINGUAS''=$OBSOLETE_ALL_LINGUAS' fi # Compute POFILES # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).po) # Compute UPDATEPOFILES # as $(foreach lang, $(ALL_LINGUAS), $(lang).po-update) # Compute DUMMYPOFILES # as $(foreach lang, $(ALL_LINGUAS), $(lang).nop) # Compute GMOFILES # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).gmo) case "$ac_given_srcdir" in .) srcdirpre= ;; *) srcdirpre='$(srcdir)/' ;; esac POFILES= UPDATEPOFILES= DUMMYPOFILES= GMOFILES= for lang in $ALL_LINGUAS; do POFILES="$POFILES $srcdirpre$lang.po" UPDATEPOFILES="$UPDATEPOFILES $lang.po-update" DUMMYPOFILES="$DUMMYPOFILES $lang.nop" GMOFILES="$GMOFILES $srcdirpre$lang.gmo" done # CATALOGS depends on both $ac_dir and the user's LINGUAS # environment variable. INST_LINGUAS= if test -n "$ALL_LINGUAS"; then for presentlang in $ALL_LINGUAS; do useit=no if test "%UNSET%" != "$LINGUAS"; then desiredlanguages="$LINGUAS" else desiredlanguages="$ALL_LINGUAS" fi for desiredlang in $desiredlanguages; do # Use the presentlang catalog if desiredlang is # a. equal to presentlang, or # b. a variant of presentlang (because in this case, # presentlang can be used as a fallback for messages # which are not translated in the desiredlang catalog). case "$desiredlang" in "$presentlang"*) useit=yes;; esac done if test $useit = yes; then INST_LINGUAS="$INST_LINGUAS $presentlang" fi done fi CATALOGS= if test -n "$INST_LINGUAS"; then for lang in $INST_LINGUAS; do CATALOGS="$CATALOGS $lang.gmo" done fi test -n "$as_me" && echo "$as_me: creating $ac_dir/Makefile" || echo "creating $ac_dir/Makefile" sed -e "/^POTFILES =/r $ac_dir/POTFILES" -e "/^# Makevars/r $ac_given_srcdir/$ac_dir/Makevars" -e "s|@POFILES@|$POFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@POMAKEFILEDEPS@|$POMAKEFILEDEPS|g" "$ac_dir/Makefile.in" > "$ac_dir/Makefile" for f in "$ac_given_srcdir/$ac_dir"/Rules-*; do if test -f "$f"; then case "$f" in *.orig | *.bak | *~) ;; *) cat "$f" >> "$ac_dir/Makefile" ;; esac fi done fi ;; esac done ;; 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 1 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} C flags: ${CFLAGS} Warning flags: errors: ${WERROR_CFLAGS} warnings: ${WARN_CFLAGS} Library types: Shared=${enable_shared}, Static=${enable_static} Valgrind: ${VALGRIND} Version script: $have_ld_version_script I18n domain suffix: ${PO_SUFFIX:-none} Kerberos V5: $kerberos5 LDADD: $LTLIBSHISHI " >&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} C flags: ${CFLAGS} Warning flags: errors: ${WERROR_CFLAGS} warnings: ${WARN_CFLAGS} Library types: Shared=${enable_shared}, Static=${enable_static} Valgrind: ${VALGRIND} Version script: $have_ld_version_script I18n domain suffix: ${PO_SUFFIX:-none} Kerberos V5: $kerberos5 LDADD: $LTLIBSHISHI " >&6;} gss-1.0.3/GNUmakefile0000644000000000000000000001073512415470476011270 00000000000000# 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-2014 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 . # If the user runs GNU make but has not yet run ./configure, # give them a diagnostic. _gl-Makefile := $(wildcard [M]akefile) ifneq ($(_gl-Makefile),) # 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 # Allow cfg.mk to override these. _build-aux ?= build-aux _autoreconf ?= autoreconf -v include $(srcdir)/maint.mk # 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 stable,$(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 \ $(git-version-gen-tag-sed-script)) 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 # Allow cfg.mk to override these. _build-aux ?= build-aux _autoreconf ?= autoreconf -v 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 gss-1.0.3/COPYING0000664000000000000000000010437412012453517010244 00000000000000 GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. 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. Copyright (C) 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 . 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: Copyright (C) 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 . 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 . gss-1.0.3/Makefile.am0000664000000000000000000000221412415506237011240 00000000000000## Process this file with automake to produce Makefile.in # Copyright (C) 2003-2014 Simon Josefsson # # This file is part of the Generic Security Service (GSS). # # GSS 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. # # GSS 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 GSS; if not, see http://www.gnu.org/licenses or write to # the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, # Boston, MA 02110-1301, USA. DISTCHECK_CONFIGURE_FLAGS = --enable-gtk-doc EXTRA_DIST = cfg.mk maint.mk .clcopying po/Makevars.in DISTCLEANFILES = po/Makevars pkgconfigdir = $(libdir)/pkgconfig pkgconfig_DATA = gss.pc SUBDIRS = po gl lib src tests doc ACLOCAL_AMFLAGS = -I m4 -I gl/m4 -I lib/gl/m4 -I src/gl/m4 gss-1.0.3/gss.pc.in0000664000000000000000000000104612415506237010733 00000000000000# Process this file with autoconf to produce a pkg-config metadata file. # Copyright (C) 2003-2014 Simon Josefsson # # 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. prefix=@prefix@ exec_prefix=@exec_prefix@ libdir=@libdir@ includedir=@includedir@ Name: libgss Description: Generic Security Service API Library. URL: http://www.gnu.org/software/gss/ Version: @VERSION@ Libs: -L${libdir} -lgss Cflags: -I${includedir} gss-1.0.3/doc/0000755000000000000000000000000012415510376010027 500000000000000gss-1.0.3/doc/man/0000755000000000000000000000000012415510376010602 500000000000000gss-1.0.3/doc/man/gss_compare_name.30000644000000000000000000000355612415507732014123 00000000000000.\" DO NOT MODIFY THIS FILE! It was generated by gdoc. .TH "gss_compare_name" 3 "1.0.3" "gss" "gss" .SH NAME gss_compare_name \- API function .SH SYNOPSIS .B #include .sp .BI "OM_uint32 gss_compare_name(OM_uint32 * " minor_status ", const gss_name_t " name1 ", const gss_name_t " name2 ", int * " name_equal ");" .SH ARGUMENTS .IP "OM_uint32 * minor_status" 12 (Integer, modify) Mechanism specific status code. .IP "const gss_name_t name1" 12 (gss_name_t, read) Internal\-form name. .IP "const gss_name_t name2" 12 (gss_name_t, read) Internal\-form name. .IP "int * name_equal" 12 (boolean, modify) Non\-zero \- names refer to same entity. Zero \- names refer to different entities (strictly, the names are not known to refer to the same identity). .SH "DESCRIPTION" Allows an application to compare two internal\-form names to determine whether they refer to the same entity. If either name presented to gss_compare_name denotes an anonymous principal, the routines should indicate that the two names do not refer to the same identity. .SH "RETURN VALUE" `GSS_S_COMPLETE`: Successful completion. `GSS_S_BAD_NAMETYPE`: The two names were of incomparable types. `GSS_S_BAD_NAME`: One or both of name1 or name2 was ill\-formed. .SH "REPORTING BUGS" Report bugs to . GNU Generic Security Service home page: http://www.gnu.org/software/gss/ General help using GNU software: http://www.gnu.org/gethelp/ .SH COPYRIGHT Copyright \(co 2003-2013 Simon Josefsson. .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 gss is maintained as a Texinfo manual. If the .B info and .B gss programs are properly installed at your site, the command .IP .B info gss .PP should give you access to the complete manual. gss-1.0.3/doc/man/gss_inquire_mechs_for_name.30000644000000000000000000000474412415507732016176 00000000000000.\" DO NOT MODIFY THIS FILE! It was generated by gdoc. .TH "gss_inquire_mechs_for_name" 3 "1.0.3" "gss" "gss" .SH NAME gss_inquire_mechs_for_name \- API function .SH SYNOPSIS .B #include .sp .BI "OM_uint32 gss_inquire_mechs_for_name(OM_uint32 * " minor_status ", const gss_name_t " input_name ", gss_OID_set * " mech_types ");" .SH ARGUMENTS .IP "OM_uint32 * minor_status" 12 (Integer, modify) Mechanism specific status code. .IP "const gss_name_t input_name" 12 (gss_name_t, read) The name to which the inquiry relates. .IP "gss_OID_set * mech_types" 12 (gss_OID_set, modify) Set of mechanisms that may support the specified name. The returned OID set must be freed by the caller after use with a call to \fBgss_release_oid_set()\fP. .SH "DESCRIPTION" Returns the set of mechanisms supported by the GSS\-API implementation that may be able to process the specified name. Each mechanism returned will recognize at least one element within the name. It is permissible for this routine to be implemented within a mechanism\-independent GSS\-API layer, using the type information contained within the presented name, and based on registration information provided by individual mechanism implementations. This means that the returned mech_types set may indicate that a particular mechanism will understand the name when in fact it would refuse to accept the name as input to gss_canonicalize_name, gss_init_sec_context, gss_acquire_cred or gss_add_cred (due to some property of the specific name, as opposed to the name type). Thus this routine should be used only as a prefilter for a call to a subsequent mechanism\-specific routine. .SH "RETURN VALUE" `GSS_S_COMPLETE`: Successful completion. `GSS_S_BAD_NAME`: The input_name parameter was ill\-formed. `GSS_S_BAD_NAMETYPE`: The input_name parameter contained an invalid or unsupported type of name. .SH "REPORTING BUGS" Report bugs to . GNU Generic Security Service home page: http://www.gnu.org/software/gss/ General help using GNU software: http://www.gnu.org/gethelp/ .SH COPYRIGHT Copyright \(co 2003-2013 Simon Josefsson. .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 gss is maintained as a Texinfo manual. If the .B info and .B gss programs are properly installed at your site, the command .IP .B info gss .PP should give you access to the complete manual. gss-1.0.3/doc/man/gss_decapsulate_token.30000644000000000000000000000371712415507731015165 00000000000000.\" DO NOT MODIFY THIS FILE! It was generated by gdoc. .TH "gss_decapsulate_token" 3 "1.0.3" "gss" "gss" .SH NAME gss_decapsulate_token \- API function .SH SYNOPSIS .B #include .sp .BI "OM_uint32 gss_decapsulate_token(gss_const_buffer_t " input_token ", gss_const_OID " token_oid ", gss_buffer_t " output_token ");" .SH ARGUMENTS .IP "gss_const_buffer_t input_token" 12 (buffer, opaque, read) Buffer with GSS\-API context token. .IP "gss_const_OID token_oid" 12 (Object ID, read) Expected object identifier of token. .IP "gss_buffer_t output_token" 12 (buffer, opaque, modify) Decapsulated token data; caller must release with \fBgss_release_buffer()\fP. .SH "DESCRIPTION" Remove the mechanism\-independent token header from an initial GSS\-API context token. Unwrap a buffer in the mechanism\-independent token format. This is the reverse of \fBgss_encapsulate_token()\fP. The translation is loss\-less, all data is preserved as is. This function is standardized in RFC 6339. .SH "RETURN VALUE" `GSS_S_COMPLETE`: Indicates successful completion, and that output parameters holds correct information. `GSS_S_DEFECTIVE_TOKEN`: Means that the token failed consistency checks (e.g., OID mismatch or ASN.1 DER length errors). `GSS_S_FAILURE`: Indicates that decapsulation failed for reasons unspecified at the GSS\-API level. .SH "REPORTING BUGS" Report bugs to . GNU Generic Security Service home page: http://www.gnu.org/software/gss/ General help using GNU software: http://www.gnu.org/gethelp/ .SH COPYRIGHT Copyright \(co 2003-2013 Simon Josefsson. .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 gss is maintained as a Texinfo manual. If the .B info and .B gss programs are properly installed at your site, the command .IP .B info gss .PP should give you access to the complete manual. gss-1.0.3/doc/man/gss_release_oid_set.30000644000000000000000000000314112415507732014611 00000000000000.\" DO NOT MODIFY THIS FILE! It was generated by gdoc. .TH "gss_release_oid_set" 3 "1.0.3" "gss" "gss" .SH NAME gss_release_oid_set \- API function .SH SYNOPSIS .B #include .sp .BI "OM_uint32 gss_release_oid_set(OM_uint32 * " minor_status ", gss_OID_set * " set ");" .SH ARGUMENTS .IP "OM_uint32 * minor_status" 12 (integer, modify) Mechanism specific status code. .IP "gss_OID_set * set" 12 (Set of Object IDs, modify) The storage associated with the gss_OID_set will be deleted. .SH "DESCRIPTION" Free storage associated with a GSSAPI\-generated gss_OID_set object. The set parameter must refer to an OID\-set that was returned from a GSS\-API routine. \fBgss_release_oid_set()\fP will free the storage associated with each individual member OID, the OID set's elements array, and the gss_OID_set_desc. The gss_OID_set parameter is set to GSS_C_NO_OID_SET on successful completion of this routine. .SH "RETURN VALUE" `GSS_S_COMPLETE`: Successful completion. .SH "REPORTING BUGS" Report bugs to . GNU Generic Security Service home page: http://www.gnu.org/software/gss/ General help using GNU software: http://www.gnu.org/gethelp/ .SH COPYRIGHT Copyright \(co 2003-2013 Simon Josefsson. .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 gss is maintained as a Texinfo manual. If the .B info and .B gss programs are properly installed at your site, the command .IP .B info gss .PP should give you access to the complete manual. gss-1.0.3/doc/man/gss_add_cred.30000644000000000000000000002065312415507731013216 00000000000000.\" DO NOT MODIFY THIS FILE! It was generated by gdoc. .TH "gss_add_cred" 3 "1.0.3" "gss" "gss" .SH NAME gss_add_cred \- API function .SH SYNOPSIS .B #include .sp .BI "OM_uint32 gss_add_cred(OM_uint32 * " minor_status ", const gss_cred_id_t " input_cred_handle ", const gss_name_t " desired_name ", const gss_OID " desired_mech ", gss_cred_usage_t " cred_usage ", OM_uint32 " initiator_time_req ", OM_uint32 " acceptor_time_req ", gss_cred_id_t * " output_cred_handle ", gss_OID_set * " actual_mechs ", OM_uint32 * " initiator_time_rec ", OM_uint32 * " acceptor_time_rec ");" .SH ARGUMENTS .IP "OM_uint32 * minor_status" 12 (integer, modify) Mechanism specific status code. .IP "const gss_cred_id_t input_cred_handle" 12 (gss_cred_id_t, read, optional) The credential to which a credential\-element will be added. If GSS_C_NO_CREDENTIAL is specified, the routine will compose the new credential based on default behavior (see text). Note that, while the credential\-handle is not modified by \fBgss_add_cred()\fP, the underlying credential will be modified if output_credential_handle is NULL. .IP "const gss_name_t desired_name" 12 (gss_name_t, read.) Name of principal whose credential should be acquired. .IP "const gss_OID desired_mech" 12 (Object ID, read) Underlying security mechanism with which the credential may be used. .IP "gss_cred_usage_t cred_usage" 12 (gss_cred_usage_t, read) GSS_C_BOTH \- Credential may be used either to initiate or accept security contexts. GSS_C_INITIATE \- Credential will only be used to initiate security contexts. GSS_C_ACCEPT \- Credential will only be used to accept security contexts. .IP "OM_uint32 initiator_time_req" 12 (Integer, read, optional) number of seconds that the credential should remain valid for initiating security contexts. This argument is ignored if the composed credentials are of type GSS_C_ACCEPT. Specify GSS_C_INDEFINITE to request that the credentials have the maximum permitted initiator lifetime. .IP "OM_uint32 acceptor_time_req" 12 (Integer, read, optional) number of seconds that the credential should remain valid for accepting security contexts. This argument is ignored if the composed credentials are of type GSS_C_INITIATE. Specify GSS_C_INDEFINITE to request that the credentials have the maximum permitted initiator lifetime. .IP "gss_cred_id_t * output_cred_handle" 12 (gss_cred_id_t, modify, optional) The returned credential handle, containing the new credential\-element and all the credential\-elements from input_cred_handle. If a valid pointer to a gss_cred_id_t is supplied for this parameter, gss_add_cred creates a new credential handle containing all credential\-elements from the input_cred_handle and the newly acquired credential\-element; if NULL is specified for this parameter, the newly acquired credential\-element will be added to the credential identified by input_cred_handle. The resources associated with any credential handle returned via this parameter must be released by the application after use with a call to \fBgss_release_cred()\fP. .IP "gss_OID_set * actual_mechs" 12 (Set of Object IDs, modify, optional) The complete set of mechanisms for which the new credential is valid. Storage for the returned OID\-set must be freed by the application after use with a call to \fBgss_release_oid_set()\fP. Specify NULL if not required. .IP "OM_uint32 * initiator_time_rec" 12 (Integer, modify, optional) Actual number of seconds for which the returned credentials will remain valid for initiating contexts using the specified mechanism. If the implementation or mechanism does not support expiration of credentials, the value GSS_C_INDEFINITE will be returned. Specify NULL if not required .IP "OM_uint32 * acceptor_time_rec" 12 (Integer, modify, optional) Actual number of seconds for which the returned credentials will remain valid for accepting security contexts using the specified mechanism. If the implementation or mechanism does not support expiration of credentials, the value GSS_C_INDEFINITE will be returned. Specify NULL if not required .SH "DESCRIPTION" Adds a credential\-element to a credential. The credential\-element is identified by the name of the principal to which it refers. GSS\-API implementations must impose a local access\-control policy on callers of this routine to prevent unauthorized callers from acquiring credential\-elements to which they are not entitled. This routine is not intended to provide a "login to the network" function, as such a function would involve the creation of new mechanism\-specific authentication data, rather than merely acquiring a GSS\-API handle to existing data. Such functions, if required, should be defined in implementation\-specific extensions to the API. If desired_name is GSS_C_NO_NAME, the call is interpreted as a request to add a credential element that will invoke default behavior when passed to \fBgss_init_sec_context()\fP (if cred_usage is GSS_C_INITIATE or GSS_C_BOTH) or \fBgss_accept_sec_context()\fP (if cred_usage is GSS_C_ACCEPT or GSS_C_BOTH). This routine is expected to be used primarily by context acceptors, since implementations are likely to provide mechanism\-specific ways of obtaining GSS\-API initiator credentials from the system login process. Some implementations may therefore not support the acquisition of GSS_C_INITIATE or GSS_C_BOTH credentials via gss_acquire_cred for any name other than GSS_C_NO_NAME, or a name produced by applying either gss_inquire_cred to a valid credential, or gss_inquire_context to an active context. If credential acquisition is time\-consuming for a mechanism, the mechanism may choose to delay the actual acquisition until the credential is required (e.g. by gss_init_sec_context or gss_accept_sec_context). Such mechanism\-specific implementation decisions should be invisible to the calling application; thus a call of gss_inquire_cred immediately following the call of gss_add_cred must return valid credential data, and may therefore incur the overhead of a deferred credential acquisition. This routine can be used to either compose a new credential containing all credential\-elements of the original in addition to the newly\-acquire credential\-element, or to add the new credential\- element to an existing credential. If NULL is specified for the output_cred_handle parameter argument, the new credential\-element will be added to the credential identified by input_cred_handle; if a valid pointer is specified for the output_cred_handle parameter, a new credential handle will be created. If GSS_C_NO_CREDENTIAL is specified as the input_cred_handle, gss_add_cred will compose a credential (and set the output_cred_handle parameter accordingly) based on default behavior. That is, the call will have the same effect as if the application had first made a call to \fBgss_acquire_cred()\fP, specifying the same usage and passing GSS_C_NO_NAME as the desired_name parameter to obtain an explicit credential handle embodying default behavior, passed this credential handle to \fBgss_add_cred()\fP, and finally called \fBgss_release_cred()\fP on the first credential handle. If GSS_C_NO_CREDENTIAL is specified as the input_cred_handle parameter, a non\-NULL output_cred_handle must be supplied. .SH "RETURN VALUE" `GSS_S_COMPLETE`: Successful completion. `GSS_S_BAD_MECH`: Unavailable mechanism requested. `GSS_S_BAD_NAMETYPE`: Type contained within desired_name parameter is not supported. `GSS_S_BAD_NAME`: Value supplied for desired_name parameter is ill\-formed. `GSS_S_DUPLICATE_ELEMENT`: The credential already contains an element for the requested mechanism with overlapping usage and validity period. `GSS_S_CREDENTIALS_EXPIRED`: The required credentials could not be added because they have expired. `GSS_S_NO_CRED`: No credentials were found for the specified name. .SH "REPORTING BUGS" Report bugs to . GNU Generic Security Service home page: http://www.gnu.org/software/gss/ General help using GNU software: http://www.gnu.org/gethelp/ .SH COPYRIGHT Copyright \(co 2003-2013 Simon Josefsson. .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 gss is maintained as a Texinfo manual. If the .B info and .B gss programs are properly installed at your site, the command .IP .B info gss .PP should give you access to the complete manual. gss-1.0.3/doc/man/gss_delete_sec_context.30000644000000000000000000000632012415507731015324 00000000000000.\" DO NOT MODIFY THIS FILE! It was generated by gdoc. .TH "gss_delete_sec_context" 3 "1.0.3" "gss" "gss" .SH NAME gss_delete_sec_context \- API function .SH SYNOPSIS .B #include .sp .BI "OM_uint32 gss_delete_sec_context(OM_uint32 * " minor_status ", gss_ctx_id_t * " context_handle ", gss_buffer_t " output_token ");" .SH ARGUMENTS .IP "OM_uint32 * minor_status" 12 (Integer, modify) Mechanism specific status code. .IP "gss_ctx_id_t * context_handle" 12 (gss_ctx_id_t, modify) Context handle identifying context to delete. After deleting the context, the GSS\-API will set this context handle to GSS_C_NO_CONTEXT. .IP "gss_buffer_t output_token" 12 (buffer, opaque, modify, optional) Token to be sent to remote application to instruct it to also delete the context. It is recommended that applications specify GSS_C_NO_BUFFER for this parameter, requesting local deletion only. If a buffer parameter is provided by the application, the mechanism may return a token in it; mechanisms that implement only local deletion should set the length field of this token to zero to indicate to the application that no token is to be sent to the peer. .SH "DESCRIPTION" Delete a security context. gss_delete_sec_context will delete the local data structures associated with the specified security context, and may generate an output_token, which when passed to the peer gss_process_context_token will instruct it to do likewise. If no token is required by the mechanism, the GSS\-API should set the length field of the output_token (if provided) to zero. No further security services may be obtained using the context specified by context_handle. In addition to deleting established security contexts, gss_delete_sec_context must also be able to delete "half\-built" security contexts resulting from an incomplete sequence of \fBgss_init_sec_context()\fP/\fBgss_accept_sec_context()\fP calls. The output_token parameter is retained for compatibility with version 1 of the GSS\-API. It is recommended that both peer applications invoke gss_delete_sec_context passing the value GSS_C_NO_BUFFER for the output_token parameter, indicating that no token is required, and that gss_delete_sec_context should simply delete local context data structures. If the application does pass a valid buffer to gss_delete_sec_context, mechanisms are encouraged to return a zero\-length token, indicating that no peer action is necessary, and that no token should be transferred by the application. .SH "RETURN VALUE" `GSS_S_COMPLETE`: Successful completion. `GSS_S_NO_CONTEXT`: No valid context was supplied. .SH "REPORTING BUGS" Report bugs to . GNU Generic Security Service home page: http://www.gnu.org/software/gss/ General help using GNU software: http://www.gnu.org/gethelp/ .SH COPYRIGHT Copyright \(co 2003-2013 Simon Josefsson. .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 gss is maintained as a Texinfo manual. If the .B info and .B gss programs are properly installed at your site, the command .IP .B info gss .PP should give you access to the complete manual. gss-1.0.3/doc/man/gss_indicate_mechs.30000644000000000000000000000271012415507732014423 00000000000000.\" DO NOT MODIFY THIS FILE! It was generated by gdoc. .TH "gss_indicate_mechs" 3 "1.0.3" "gss" "gss" .SH NAME gss_indicate_mechs \- API function .SH SYNOPSIS .B #include .sp .BI "OM_uint32 gss_indicate_mechs(OM_uint32 * " minor_status ", gss_OID_set * " mech_set ");" .SH ARGUMENTS .IP "OM_uint32 * minor_status" 12 (integer, modify) Mechanism specific status code. .IP "gss_OID_set * mech_set" 12 (set of Object IDs, modify) Set of implementation\-supported mechanisms. The returned gss_OID_set value will be a dynamically\-allocated OID set, that should be released by the caller after use with a call to \fBgss_release_oid_set()\fP. .SH "DESCRIPTION" Allows an application to determine which underlying security mechanisms are available. .SH "RETURN VALUE" `GSS_S_COMPLETE`: Successful completion. .SH "REPORTING BUGS" Report bugs to . GNU Generic Security Service home page: http://www.gnu.org/software/gss/ General help using GNU software: http://www.gnu.org/gethelp/ .SH COPYRIGHT Copyright \(co 2003-2013 Simon Josefsson. .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 gss is maintained as a Texinfo manual. If the .B info and .B gss programs are properly installed at your site, the command .IP .B info gss .PP should give you access to the complete manual. gss-1.0.3/doc/man/gss_canonicalize_name.30000644000000000000000000000417212415507732015127 00000000000000.\" DO NOT MODIFY THIS FILE! It was generated by gdoc. .TH "gss_canonicalize_name" 3 "1.0.3" "gss" "gss" .SH NAME gss_canonicalize_name \- API function .SH SYNOPSIS .B #include .sp .BI "OM_uint32 gss_canonicalize_name(OM_uint32 * " minor_status ", const gss_name_t " input_name ", const gss_OID " mech_type ", gss_name_t * " output_name ");" .SH ARGUMENTS .IP "OM_uint32 * minor_status" 12 (Integer, modify) Mechanism specific status code. .IP "const gss_name_t input_name" 12 (gss_name_t, read) The name for which a canonical form is desired. .IP "const gss_OID mech_type" 12 (Object ID, read) The authentication mechanism for which the canonical form of the name is desired. The desired mechanism must be specified explicitly; no default is provided. .IP "gss_name_t * output_name" 12 (gss_name_t, modify) The resultant canonical name. Storage associated with this name must be freed by the application after use with a call to \fBgss_release_name()\fP. .SH "DESCRIPTION" Generate a canonical mechanism name (MN) from an arbitrary internal name. The mechanism name is the name that would be returned to a context acceptor on successful authentication of a context where the initiator used the input_name in a successful call to gss_acquire_cred, specifying an OID set containing \fImech_type\fP as its only member, followed by a call to \fBgss_init_sec_context()\fP, specifying \fImech_type\fP as the authentication mechanism. .SH "RETURN VALUE" `GSS_S_COMPLETE`: Successful completion. .SH "REPORTING BUGS" Report bugs to . GNU Generic Security Service home page: http://www.gnu.org/software/gss/ General help using GNU software: http://www.gnu.org/gethelp/ .SH COPYRIGHT Copyright \(co 2003-2013 Simon Josefsson. .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 gss is maintained as a Texinfo manual. If the .B info and .B gss programs are properly installed at your site, the command .IP .B info gss .PP should give you access to the complete manual. gss-1.0.3/doc/man/gss_inquire_names_for_mech.30000644000000000000000000000301112415507732016160 00000000000000.\" DO NOT MODIFY THIS FILE! It was generated by gdoc. .TH "gss_inquire_names_for_mech" 3 "1.0.3" "gss" "gss" .SH NAME gss_inquire_names_for_mech \- API function .SH SYNOPSIS .B #include .sp .BI "OM_uint32 gss_inquire_names_for_mech(OM_uint32 * " minor_status ", const gss_OID " mechanism ", gss_OID_set * " name_types ");" .SH ARGUMENTS .IP "OM_uint32 * minor_status" 12 (Integer, modify) Mechanism specific status code. .IP "const gss_OID mechanism" 12 (gss_OID, read) The mechanism to be interrogated. .IP "gss_OID_set * name_types" 12 (gss_OID_set, modify) Set of name\-types supported by the specified mechanism. The returned OID set must be freed by the application after use with a call to \fBgss_release_oid_set()\fP. .SH "DESCRIPTION" Returns the set of nametypes supported by the specified mechanism. .SH "RETURN VALUE" `GSS_S_COMPLETE`: Successful completion. .SH "REPORTING BUGS" Report bugs to . GNU Generic Security Service home page: http://www.gnu.org/software/gss/ General help using GNU software: http://www.gnu.org/gethelp/ .SH COPYRIGHT Copyright \(co 2003-2013 Simon Josefsson. .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 gss is maintained as a Texinfo manual. If the .B info and .B gss programs are properly installed at your site, the command .IP .B info gss .PP should give you access to the complete manual. gss-1.0.3/doc/man/gss_import_sec_context.30000644000000000000000000000366712415507731015407 00000000000000.\" DO NOT MODIFY THIS FILE! It was generated by gdoc. .TH "gss_import_sec_context" 3 "1.0.3" "gss" "gss" .SH NAME gss_import_sec_context \- API function .SH SYNOPSIS .B #include .sp .BI "OM_uint32 gss_import_sec_context(OM_uint32 * " minor_status ", const gss_buffer_t " interprocess_token ", gss_ctx_id_t * " context_handle ");" .SH ARGUMENTS .IP "OM_uint32 * minor_status" 12 (Integer, modify) Mechanism specific status code. .IP "const gss_buffer_t interprocess_token" 12 (buffer, opaque, modify) Token received from exporting process .IP "gss_ctx_id_t * context_handle" 12 (gss_ctx_id_t, modify) Context handle of newly reactivated context. Resources associated with this context handle must be released by the application after use with a call to \fBgss_delete_sec_context()\fP. .SH "DESCRIPTION" Allows a process to import a security context established by another process. A given interprocess token may be imported only once. See gss_export_sec_context. .SH "RETURN VALUE" `GSS_S_COMPLETE`: Successful completion. `GSS_S_NO_CONTEXT`: The token did not contain a valid context reference. `GSS_S_DEFECTIVE_TOKEN`: The token was invalid. `GSS_S_UNAVAILABLE`: The operation is unavailable. `GSS_S_UNAUTHORIZED`: Local policy prevents the import of this context by the current process. .SH "REPORTING BUGS" Report bugs to . GNU Generic Security Service home page: http://www.gnu.org/software/gss/ General help using GNU software: http://www.gnu.org/gethelp/ .SH COPYRIGHT Copyright \(co 2003-2013 Simon Josefsson. .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 gss is maintained as a Texinfo manual. If the .B info and .B gss programs are properly installed at your site, the command .IP .B info gss .PP should give you access to the complete manual. gss-1.0.3/doc/man/gss_export_name.30000644000000000000000000000405012415507732014004 00000000000000.\" DO NOT MODIFY THIS FILE! It was generated by gdoc. .TH "gss_export_name" 3 "1.0.3" "gss" "gss" .SH NAME gss_export_name \- API function .SH SYNOPSIS .B #include .sp .BI "OM_uint32 gss_export_name(OM_uint32 * " minor_status ", const gss_name_t " input_name ", gss_buffer_t " exported_name ");" .SH ARGUMENTS .IP "OM_uint32 * minor_status" 12 (Integer, modify) Mechanism specific status code. .IP "const gss_name_t input_name" 12 (gss_name_t, read) The MN to be exported. .IP "gss_buffer_t exported_name" 12 (gss_buffer_t, octet\-string, modify) The canonical contiguous string form of \fIinput_name\fP. Storage associated with this string must freed by the application after use with \fBgss_release_buffer()\fP. .SH "DESCRIPTION" To produce a canonical contiguous string representation of a mechanism name (MN), suitable for direct comparison (e.g. with memcmp) for use in authorization functions (e.g. matching entries in an access\-control list). The \fIinput_name\fP parameter must specify a valid MN (i.e. an internal name generated by \fBgss_accept_sec_context()\fP or by \fBgss_canonicalize_name()\fP). .SH "RETURN VALUE" `GSS_S_COMPLETE`: Successful completion. `GSS_S_NAME_NOT_MN`: The provided internal name was not a mechanism name. `GSS_S_BAD_NAME`: The provided internal name was ill\-formed. `GSS_S_BAD_NAMETYPE`: The internal name was of a type not supported by the GSS\-API implementation. .SH "REPORTING BUGS" Report bugs to . GNU Generic Security Service home page: http://www.gnu.org/software/gss/ General help using GNU software: http://www.gnu.org/gethelp/ .SH COPYRIGHT Copyright \(co 2003-2013 Simon Josefsson. .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 gss is maintained as a Texinfo manual. If the .B info and .B gss programs are properly installed at your site, the command .IP .B info gss .PP should give you access to the complete manual. gss-1.0.3/doc/man/gss_unwrap.30000644000000000000000000000644412415507732013010 00000000000000.\" DO NOT MODIFY THIS FILE! It was generated by gdoc. .TH "gss_unwrap" 3 "1.0.3" "gss" "gss" .SH NAME gss_unwrap \- API function .SH SYNOPSIS .B #include .sp .BI "OM_uint32 gss_unwrap(OM_uint32 * " minor_status ", const gss_ctx_id_t " context_handle ", const gss_buffer_t " input_message_buffer ", gss_buffer_t " output_message_buffer ", int * " conf_state ", gss_qop_t * " qop_state ");" .SH ARGUMENTS .IP "OM_uint32 * minor_status" 12 (Integer, modify) Mechanism specific status code. .IP "const gss_ctx_id_t context_handle" 12 (gss_ctx_id_t, read) Identifies the context on which the message arrived. .IP "const gss_buffer_t input_message_buffer" 12 (buffer, opaque, read) Protected message. .IP "gss_buffer_t output_message_buffer" 12 (buffer, opaque, modify) Buffer to receive unwrapped message. Storage associated with this buffer must be freed by the application after use use with a call to \fBgss_release_buffer()\fP. .IP "int * conf_state" 12 (boolean, modify, optional) Non\-zero \- Confidentiality and integrity protection were used. Zero \- Integrity service only was used. Specify NULL if not required. .IP "gss_qop_t * qop_state" 12 (gss_qop_t, modify, optional) Quality of protection provided. Specify NULL if not required. .SH "DESCRIPTION" Converts a message previously protected by gss_wrap back to a usable form, verifying the embedded MIC. The conf_state parameter indicates whether the message was encrypted; the qop_state parameter indicates the strength of protection that was used to provide the confidentiality and integrity services. Since some application\-level protocols may wish to use tokens emitted by \fBgss_wrap()\fP to provide "secure framing", implementations must support the wrapping and unwrapping of zero\-length messages. .SH "RETURN VALUE" `GSS_S_COMPLETE`: Successful completion. `GSS_S_DEFECTIVE_TOKEN`: The token failed consistency checks. `GSS_S_BAD_SIG`: The MIC was incorrect. `GSS_S_DUPLICATE_TOKEN`: The token was valid, and contained a correct MIC for the message, but it had already been processed. `GSS_S_OLD_TOKEN`: The token was valid, and contained a correct MIC for the message, but it is too old to check for duplication. `GSS_S_UNSEQ_TOKEN`: The token was valid, and contained a correct MIC for the message, but has been verified out of sequence; a later token has already been received. `GSS_S_GAP_TOKEN`: The token was valid, and contained a correct MIC for the message, but has been verified out of sequence; an earlier expected token has not yet been received. `GSS_S_CONTEXT_EXPIRED`: The context has already expired. `GSS_S_NO_CONTEXT`: The context_handle parameter did not identify a valid context. .SH "REPORTING BUGS" Report bugs to . GNU Generic Security Service home page: http://www.gnu.org/software/gss/ General help using GNU software: http://www.gnu.org/gethelp/ .SH COPYRIGHT Copyright \(co 2003-2013 Simon Josefsson. .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 gss is maintained as a Texinfo manual. If the .B info and .B gss programs are properly installed at your site, the command .IP .B info gss .PP should give you access to the complete manual. gss-1.0.3/doc/man/gss_wrap.30000644000000000000000000000602412415507732012437 00000000000000.\" DO NOT MODIFY THIS FILE! It was generated by gdoc. .TH "gss_wrap" 3 "1.0.3" "gss" "gss" .SH NAME gss_wrap \- API function .SH SYNOPSIS .B #include .sp .BI "OM_uint32 gss_wrap(OM_uint32 * " minor_status ", const gss_ctx_id_t " context_handle ", int " conf_req_flag ", gss_qop_t " qop_req ", const gss_buffer_t " input_message_buffer ", int * " conf_state ", gss_buffer_t " output_message_buffer ");" .SH ARGUMENTS .IP "OM_uint32 * minor_status" 12 (Integer, modify) Mechanism specific status code. .IP "const gss_ctx_id_t context_handle" 12 (gss_ctx_id_t, read) Identifies the context on which the message will be sent. .IP "int conf_req_flag" 12 (boolean, read) Non\-zero \- Both confidentiality and integrity services are requested. Zero \- Only integrity service is requested. .IP "gss_qop_t qop_req" 12 (gss_qop_t, read, optional) Specifies required quality of protection. A mechanism\-specific default may be requested by setting qop_req to GSS_C_QOP_DEFAULT. If an unsupported protection strength is requested, gss_wrap will return a major_status of GSS_S_BAD_QOP. .IP "const gss_buffer_t input_message_buffer" 12 (buffer, opaque, read) Message to be protected. .IP "int * conf_state" 12 (boolean, modify, optional) Non\-zero \- Confidentiality, data origin authentication and integrity services have been applied. Zero \- Integrity and data origin services only has been applied. Specify NULL if not required. .IP "gss_buffer_t output_message_buffer" 12 (buffer, opaque, modify) Buffer to receive protected message. Storage associated with this message must be freed by the application after use with a call to \fBgss_release_buffer()\fP. .SH "DESCRIPTION" Attaches a cryptographic MIC and optionally encrypts the specified input_message. The output_message contains both the MIC and the message. The qop_req parameter allows a choice between several cryptographic algorithms, if supported by the chosen mechanism. Since some application\-level protocols may wish to use tokens emitted by \fBgss_wrap()\fP to provide "secure framing", implementations must support the wrapping of zero\-length messages. .SH "RETURN VALUE" `GSS_S_COMPLETE`: Successful completion. `GSS_S_CONTEXT_EXPIRED`: The context has already expired. `GSS_S_NO_CONTEXT`: The context_handle parameter did not identify a valid context. `GSS_S_BAD_QOP`: The specified QOP is not supported by the mechanism. .SH "REPORTING BUGS" Report bugs to . GNU Generic Security Service home page: http://www.gnu.org/software/gss/ General help using GNU software: http://www.gnu.org/gethelp/ .SH COPYRIGHT Copyright \(co 2003-2013 Simon Josefsson. .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 gss is maintained as a Texinfo manual. If the .B info and .B gss programs are properly installed at your site, the command .IP .B info gss .PP should give you access to the complete manual. gss-1.0.3/doc/man/gss_duplicate_name.30000644000000000000000000000334312415507732014441 00000000000000.\" DO NOT MODIFY THIS FILE! It was generated by gdoc. .TH "gss_duplicate_name" 3 "1.0.3" "gss" "gss" .SH NAME gss_duplicate_name \- API function .SH SYNOPSIS .B #include .sp .BI "OM_uint32 gss_duplicate_name(OM_uint32 * " minor_status ", const gss_name_t " src_name ", gss_name_t * " dest_name ");" .SH ARGUMENTS .IP "OM_uint32 * minor_status" 12 (Integer, modify) Mechanism specific status code. .IP "const gss_name_t src_name" 12 (gss_name_t, read) Internal name to be duplicated. .IP "gss_name_t * dest_name" 12 (gss_name_t, modify) The resultant copy of \fIsrc_name\fP. Storage associated with this name must be freed by the application after use with a call to \fBgss_release_name()\fP. .SH "DESCRIPTION" Create an exact duplicate of the existing internal name \fIsrc_name\fP. The new \fIdest_name\fP will be independent of src_name (i.e. \fIsrc_name\fP and \fIdest_name\fP must both be released, and the release of one shall not affect the validity of the other). .SH "RETURN VALUE" `GSS_S_COMPLETE`: Successful completion. `GSS_S_BAD_NAME`: The src_name parameter was ill\-formed. .SH "REPORTING BUGS" Report bugs to . GNU Generic Security Service home page: http://www.gnu.org/software/gss/ General help using GNU software: http://www.gnu.org/gethelp/ .SH COPYRIGHT Copyright \(co 2003-2013 Simon Josefsson. .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 gss is maintained as a Texinfo manual. If the .B info and .B gss programs are properly installed at your site, the command .IP .B info gss .PP should give you access to the complete manual. gss-1.0.3/doc/man/gss_export_sec_context.30000644000000000000000000000753312415507731015412 00000000000000.\" DO NOT MODIFY THIS FILE! It was generated by gdoc. .TH "gss_export_sec_context" 3 "1.0.3" "gss" "gss" .SH NAME gss_export_sec_context \- API function .SH SYNOPSIS .B #include .sp .BI "OM_uint32 gss_export_sec_context(OM_uint32 * " minor_status ", gss_ctx_id_t * " context_handle ", gss_buffer_t " interprocess_token ");" .SH ARGUMENTS .IP "OM_uint32 * minor_status" 12 (Integer, modify) Mechanism specific status code. .IP "gss_ctx_id_t * context_handle" 12 (gss_ctx_id_t, modify) Context handle identifying the context to transfer. .IP "gss_buffer_t interprocess_token" 12 (buffer, opaque, modify) Token to be transferred to target process. Storage associated with this token must be freed by the application after use with a call to \fBgss_release_buffer()\fP. .SH "DESCRIPTION" Provided to support the sharing of work between multiple processes. This routine will typically be used by the context\-acceptor, in an application where a single process receives incoming connection requests and accepts security contexts over them, then passes the established context to one or more other processes for message exchange. \fBgss_export_sec_context()\fP deactivates the security context for the calling process and creates an interprocess token which, when passed to gss_import_sec_context in another process, will re\-activate the context in the second process. Only a single instantiation of a given context may be active at any one time; a subsequent attempt by a context exporter to access the exported security context will fail. The implementation may constrain the set of processes by which the interprocess token may be imported, either as a function of local security policy, or as a result of implementation decisions. For example, some implementations may constrain contexts to be passed only between processes that run under the same account, or which are part of the same process group. The interprocess token may contain security\-sensitive information (for example cryptographic keys). While mechanisms are encouraged to either avoid placing such sensitive information within interprocess tokens, or to encrypt the token before returning it to the application, in a typical object\-library GSS\-API implementation this may not be possible. Thus the application must take care to protect the interprocess token, and ensure that any process to which the token is transferred is trustworthy. If creation of the interprocess token is successful, the implementation shall deallocate all process\-wide resources associated with the security context, and set the context_handle to GSS_C_NO_CONTEXT. In the event of an error that makes it impossible to complete the export of the security context, the implementation must not return an interprocess token, and should strive to leave the security context referenced by the context_handle parameter untouched. If this is impossible, it is permissible for the implementation to delete the security context, providing it also sets the context_handle parameter to GSS_C_NO_CONTEXT. .SH "RETURN VALUE" `GSS_S_COMPLETE`: Successful completion. `GSS_S_CONTEXT_EXPIRED`: The context has expired. `GSS_S_NO_CONTEXT`: The context was invalid. `GSS_S_UNAVAILABLE`: The operation is not supported. .SH "REPORTING BUGS" Report bugs to . GNU Generic Security Service home page: http://www.gnu.org/software/gss/ General help using GNU software: http://www.gnu.org/gethelp/ .SH COPYRIGHT Copyright \(co 2003-2013 Simon Josefsson. .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 gss is maintained as a Texinfo manual. If the .B info and .B gss programs are properly installed at your site, the command .IP .B info gss .PP should give you access to the complete manual. gss-1.0.3/doc/man/gss_import_name.30000644000000000000000000000476112415507732014006 00000000000000.\" DO NOT MODIFY THIS FILE! It was generated by gdoc. .TH "gss_import_name" 3 "1.0.3" "gss" "gss" .SH NAME gss_import_name \- API function .SH SYNOPSIS .B #include .sp .BI "OM_uint32 gss_import_name(OM_uint32 * " minor_status ", const gss_buffer_t " input_name_buffer ", const gss_OID " input_name_type ", gss_name_t * " output_name ");" .SH ARGUMENTS .IP "OM_uint32 * minor_status" 12 (Integer, modify) Mechanism specific status code. .IP "const gss_buffer_t input_name_buffer" 12 (buffer, octet\-string, read) Buffer containing contiguous string name to convert. .IP "const gss_OID input_name_type" 12 (Object ID, read, optional) Object ID specifying type of printable name. Applications may specify either GSS_C_NO_OID to use a mechanism\-specific default printable syntax, or an OID recognized by the GSS\-API implementation to name a specific namespace. .IP "gss_name_t * output_name" 12 (gss_name_t, modify) Returned name in internal form. Storage associated with this name must be freed by the application after use with a call to \fBgss_release_name()\fP. .SH "DESCRIPTION" Convert a contiguous string name to internal form. In general, the internal name returned (via the \fIoutput_name\fP parameter) will not be an MN; the exception to this is if the \fIinput_name_type\fP indicates that the contiguous string provided via the \fIinput_name_buffer\fP parameter is of type GSS_C_NT_EXPORT_NAME, in which case the returned internal name will be an MN for the mechanism that exported the name. .SH "RETURN VALUE" `GSS_S_COMPLETE`: Successful completion. `GSS_S_BAD_NAMETYPE`: The input_name_type was unrecognized. `GSS_S_BAD_NAME`: The input_name parameter could not be interpreted as a name of the specified type. `GSS_S_BAD_MECH`: The input name\-type was GSS_C_NT_EXPORT_NAME, but the mechanism contained within the input\-name is not supported. .SH "REPORTING BUGS" Report bugs to . GNU Generic Security Service home page: http://www.gnu.org/software/gss/ General help using GNU software: http://www.gnu.org/gethelp/ .SH COPYRIGHT Copyright \(co 2003-2013 Simon Josefsson. .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 gss is maintained as a Texinfo manual. If the .B info and .B gss programs are properly installed at your site, the command .IP .B info gss .PP should give you access to the complete manual. gss-1.0.3/doc/man/gss_display_name.30000644000000000000000000000473512415507732014142 00000000000000.\" DO NOT MODIFY THIS FILE! It was generated by gdoc. .TH "gss_display_name" 3 "1.0.3" "gss" "gss" .SH NAME gss_display_name \- API function .SH SYNOPSIS .B #include .sp .BI "OM_uint32 gss_display_name(OM_uint32 * " minor_status ", const gss_name_t " input_name ", gss_buffer_t " output_name_buffer ", gss_OID * " output_name_type ");" .SH ARGUMENTS .IP "OM_uint32 * minor_status" 12 (Integer, modify) Mechanism specific status code. .IP "const gss_name_t input_name" 12 (gss_name_t, read) Name to be displayed. .IP "gss_buffer_t output_name_buffer" 12 (buffer, character\-string, modify) Buffer to receive textual name string. The application must free storage associated with this name after use with a call to \fBgss_release_buffer()\fP. .IP "gss_OID * output_name_type" 12 (Object ID, modify, optional) The type of the returned name. The returned gss_OID will be a pointer into static storage, and should be treated as read\-only by the caller (in particular, the application should not attempt to free it). Specify NULL if not required. .SH "DESCRIPTION" Allows an application to obtain a textual representation of an opaque internal\-form name for display purposes. The syntax of a printable name is defined by the GSS\-API implementation. If input_name denotes an anonymous principal, the implementation should return the gss_OID value GSS_C_NT_ANONYMOUS as the output_name_type, and a textual name that is syntactically distinct from all valid supported printable names in output_name_buffer. If input_name was created by a call to gss_import_name, specifying GSS_C_NO_OID as the name\-type, implementations that employ lazy conversion between name types may return GSS_C_NO_OID via the output_name_type parameter. .SH "RETURN VALUE" `GSS_S_COMPLETE`: Successful completion. `GSS_S_BAD_NAME`: \fIinput_name\fP was ill\-formed. .SH "REPORTING BUGS" Report bugs to . GNU Generic Security Service home page: http://www.gnu.org/software/gss/ General help using GNU software: http://www.gnu.org/gethelp/ .SH COPYRIGHT Copyright \(co 2003-2013 Simon Josefsson. .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 gss is maintained as a Texinfo manual. If the .B info and .B gss programs are properly installed at your site, the command .IP .B info gss .PP should give you access to the complete manual. gss-1.0.3/doc/man/gss_accept_sec_context.30000644000000000000000000003124212415507731015322 00000000000000.\" DO NOT MODIFY THIS FILE! It was generated by gdoc. .TH "gss_accept_sec_context" 3 "1.0.3" "gss" "gss" .SH NAME gss_accept_sec_context \- API function .SH SYNOPSIS .B #include .sp .BI "OM_uint32 gss_accept_sec_context(OM_uint32 * " minor_status ", gss_ctx_id_t * " context_handle ", const gss_cred_id_t " acceptor_cred_handle ", const gss_buffer_t " input_token_buffer ", const gss_channel_bindings_t " input_chan_bindings ", gss_name_t * " src_name ", gss_OID * " mech_type ", gss_buffer_t " output_token ", OM_uint32 * " ret_flags ", OM_uint32 * " time_rec ", gss_cred_id_t * " delegated_cred_handle ");" .SH ARGUMENTS .IP "OM_uint32 * minor_status" 12 (Integer, modify) Mechanism specific status code. .IP "gss_ctx_id_t * context_handle" 12 (gss_ctx_id_t, read/modify) Context handle for new context. Supply GSS_C_NO_CONTEXT for first call; use value returned in subsequent calls. Once \fBgss_accept_sec_context()\fP has returned a value via this parameter, resources have been assigned to the corresponding context, and must be freed by the application after use with a call to \fBgss_delete_sec_context()\fP. .IP "const gss_cred_id_t acceptor_cred_handle" 12 (gss_cred_id_t, read) Credential handle claimed by context acceptor. Specify GSS_C_NO_CREDENTIAL to accept the context as a default principal. If GSS_C_NO_CREDENTIAL is specified, but no default acceptor principal is defined, GSS_S_NO_CRED will be returned. .IP "const gss_buffer_t input_token_buffer" 12 (buffer, opaque, read) Token obtained from remote application. .IP "const gss_channel_bindings_t input_chan_bindings" 12 (channel bindings, read, optional) Application\- specified bindings. Allows application to securely bind channel identification information to the security context. If channel bindings are not used, specify GSS_C_NO_CHANNEL_BINDINGS. .IP "gss_name_t * src_name" 12 (gss_name_t, modify, optional) Authenticated name of context initiator. After use, this name should be deallocated by passing it to \fBgss_release_name()\fP. If not required, specify NULL. .IP "gss_OID * mech_type" 12 (Object ID, modify, optional) Security mechanism used. The returned OID value will be a pointer into static storage, and should be treated as read\-only by the caller (in particular, it does not need to be freed). If not required, specify NULL. .IP "gss_buffer_t output_token" 12 (buffer, opaque, modify) Token to be passed to peer application. If the length field of the returned token buffer is 0, then no token need be passed to the peer application. If a non\- zero length field is returned, the associated storage must be freed after use by the application with a call to \fBgss_release_buffer()\fP. .IP "OM_uint32 * ret_flags" 12 (bit\-mask, modify, optional) Contains various independent flags, each of which indicates that the context supports a specific service option. If not needed, specify NULL. Symbolic names are provided for each flag, and the symbolic names corresponding to the required flags should be logically\-ANDed with the ret_flags value to test whether a given option is supported by the context. See below for the flags. .IP "OM_uint32 * time_rec" 12 (Integer, modify, optional) Number of seconds for which the context will remain valid. Specify NULL if not required. .IP "gss_cred_id_t * delegated_cred_handle" 12 (gss_cred_id_t, modify, optional credential) Handle for credentials received from context initiator. Only valid if deleg_flag in ret_flags is true, in which case an explicit credential handle (i.e. not GSS_C_NO_CREDENTIAL) will be returned; if deleg_flag is false, \fBgss_accept_sec_context()\fP will set this parameter to GSS_C_NO_CREDENTIAL. If a credential handle is returned, the associated resources must be released by the application after use with a call to \fBgss_release_cred()\fP. Specify NULL if not required. .SH "DESCRIPTION" Allows a remotely initiated security context between the application and a remote peer to be established. The routine may return a output_token which should be transferred to the peer application, where the peer application will present it to gss_init_sec_context. If no token need be sent, gss_accept_sec_context will indicate this by setting the length field of the output_token argument to zero. To complete the context establishment, one or more reply tokens may be required from the peer application; if so, gss_accept_sec_context will return a status flag of GSS_S_CONTINUE_NEEDED, in which case it should be called again when the reply token is received from the peer application, passing the token to gss_accept_sec_context via the input_token parameters. Portable applications should be constructed to use the token length and return status to determine whether a token needs to be sent or waited for. Thus a typical portable caller should always invoke gss_accept_sec_context within a loop: \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\- gss_ctx_id_t context_hdl = GSS_C_NO_CONTEXT; do { receive_token_from_peer(input_token); maj_stat = gss_accept_sec_context(&min_stat, &context_hdl, cred_hdl, input_token, input_bindings, &client_name, &mech_type, output_token, &ret_flags, &time_rec, &deleg_cred); if (GSS_ERROR(maj_stat)) { report_error(maj_stat, min_stat); }; if (output_token\->length != 0) { send_token_to_peer(output_token); gss_release_buffer(&min_stat, output_token); }; if (GSS_ERROR(maj_stat)) { if (context_hdl != GSS_C_NO_CONTEXT) gss_delete_sec_context(&min_stat, &context_hdl, GSS_C_NO_BUFFER); break; }; } while (maj_stat & GSS_S_CONTINUE_NEEDED); \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\- Whenever the routine returns a major status that includes the value GSS_S_CONTINUE_NEEDED, the context is not fully established and the following restrictions apply to the output parameters: The value returned via the time_rec parameter is undefined Unless the accompanying ret_flags parameter contains the bit GSS_C_PROT_READY_FLAG, indicating that per\-message services may be applied in advance of a successful completion status, the value returned via the mech_type parameter may be undefined until the routine returns a major status value of GSS_S_COMPLETE. The values of the GSS_C_DELEG_FLAG, GSS_C_MUTUAL_FLAG,GSS_C_REPLAY_FLAG, GSS_C_SEQUENCE_FLAG, GSS_C_CONF_FLAG,GSS_C_INTEG_FLAG and GSS_C_ANON_FLAG bits returned via the ret_flags parameter should contain the values that the implementation expects would be valid if context establishment were to succeed. The values of the GSS_C_PROT_READY_FLAG and GSS_C_TRANS_FLAG bits within ret_flags should indicate the actual state at the time gss_accept_sec_context returns, whether or not the context is fully established. Although this requires that GSS\-API implementations set the GSS_C_PROT_READY_FLAG in the final ret_flags returned to a caller (i.e. when accompanied by a GSS_S_COMPLETE status code), applications should not rely on this behavior as the flag was not defined in Version 1 of the GSS\-API. Instead, applications should be prepared to use per\-message services after a successful context establishment, according to the GSS_C_INTEG_FLAG and GSS_C_CONF_FLAG values. All other bits within the ret_flags argument should be set to zero. While the routine returns GSS_S_CONTINUE_NEEDED, the values returned via the ret_flags argument indicate the services that the implementation expects to be available from the established context. If the initial call of \fBgss_accept_sec_context()\fP fails, the implementation should not create a context object, and should leave the value of the context_handle parameter set to GSS_C_NO_CONTEXT to indicate this. In the event of a failure on a subsequent call, the implementation is permitted to delete the "half\-built" security context (in which case it should set the context_handle parameter to GSS_C_NO_CONTEXT), but the preferred behavior is to leave the security context (and the context_handle parameter) untouched for the application to delete (using gss_delete_sec_context). During context establishment, the informational status bits GSS_S_OLD_TOKEN and GSS_S_DUPLICATE_TOKEN indicate fatal errors, and GSS\-API mechanisms should always return them in association with a routine error of GSS_S_FAILURE. This requirement for pairing did not exist in version 1 of the GSS\-API specification, so applications that wish to run over version 1 implementations must special\-case these codes. The `ret_flags` values: `GSS_C_DELEG_FLAG`:: \- True \- Delegated credentials are available via the delegated_cred_handle parameter. \- False \- No credentials were delegated. `GSS_C_MUTUAL_FLAG`:: \- True \- Remote peer asked for mutual authentication. \- False \- Remote peer did not ask for mutual authentication. `GSS_C_REPLAY_FLAG`:: \- True \- replay of protected messages will be detected. \- False \- replayed messages will not be detected. `GSS_C_SEQUENCE_FLAG`:: \- True \- out\-of\-sequence protected messages will be detected. \- False \- out\-of\-sequence messages will not be detected. `GSS_C_CONF_FLAG`:: \- True \- Confidentiality service may be invoked by calling the gss_wrap routine. \- False \- No confidentiality service (via gss_wrap) available. gss_wrap will provide message encapsulation, data\-origin authentication and integrity services only. `GSS_C_INTEG_FLAG`:: \- True \- Integrity service may be invoked by calling either gss_get_mic or gss_wrap routines. \- False \- Per\-message integrity service unavailable. `GSS_C_ANON_FLAG`:: \- True \- The initiator does not wish to be authenticated; the src_name parameter (if requested) contains an anonymous internal name. \- False \- The initiator has been authenticated normally. `GSS_C_PROT_READY_FLAG`:: \- True \- Protection services (as specified by the states of the GSS_C_CONF_FLAG and GSS_C_INTEG_FLAG) are available if the accompanying major status return value is either GSS_S_COMPLETE or GSS_S_CONTINUE_NEEDED. \- False \- Protection services (as specified by the states of the GSS_C_CONF_FLAG and GSS_C_INTEG_FLAG) are available only if the accompanying major status return value is GSS_S_COMPLETE. `GSS_C_TRANS_FLAG`:: \- True \- The resultant security context may be transferred to other processes via a call to \fBgss_export_sec_context()\fP. \- False \- The security context is not transferable. All other bits should be set to zero. .SH "RETURN VALUE" `GSS_S_CONTINUE_NEEDED`: Indicates that a token from the peer application is required to complete the context, and that gss_accept_sec_context must be called again with that token. `GSS_S_DEFECTIVE_TOKEN`: Indicates that consistency checks performed on the input_token failed. `GSS_S_DEFECTIVE_CREDENTIAL`: Indicates that consistency checks performed on the credential failed. `GSS_S_NO_CRED`: The supplied credentials were not valid for context acceptance, or the credential handle did not reference any credentials. `GSS_S_CREDENTIALS_EXPIRED`: The referenced credentials have expired. `GSS_S_BAD_BINDINGS`: The input_token contains different channel bindings to those specified via the input_chan_bindings parameter. `GSS_S_NO_CONTEXT`: Indicates that the supplied context handle did not refer to a valid context. `GSS_S_BAD_SIG`: The input_token contains an invalid MIC. `GSS_S_OLD_TOKEN`: The input_token was too old. This is a fatal error during context establishment. `GSS_S_DUPLICATE_TOKEN`: The input_token is valid, but is a duplicate of a token already processed. This is a fatal error during context establishment. `GSS_S_BAD_MECH`: The received token specified a mechanism that is not supported by the implementation or the provided credential. .SH "REPORTING BUGS" Report bugs to . GNU Generic Security Service home page: http://www.gnu.org/software/gss/ General help using GNU software: http://www.gnu.org/gethelp/ .SH COPYRIGHT Copyright \(co 2003-2013 Simon Josefsson. .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 gss is maintained as a Texinfo manual. If the .B info and .B gss programs are properly installed at your site, the command .IP .B info gss .PP should give you access to the complete manual. gss-1.0.3/doc/man/gss_check_version.30000644000000000000000000000260212415507732014306 00000000000000.\" DO NOT MODIFY THIS FILE! It was generated by gdoc. .TH "gss_check_version" 3 "1.0.3" "gss" "gss" .SH NAME gss_check_version \- API function .SH SYNOPSIS .B #include .sp .BI "const char * gss_check_version(const char * " req_version ");" .SH ARGUMENTS .IP "const char * req_version" 12 version string to compare with, or NULL .SH "DESCRIPTION" Check that the version of the library is at minimum the one given as a string in \fIreq_version\fP. .SH "WARNING" This function is a GNU GSS specific extension, and is not part of the official GSS API. .SH "RETURN VALUE" The actual version string of the library; NULL if the condition is not met. If NULL is passed to this function no check is done and only the version string is returned. .SH "REPORTING BUGS" Report bugs to . GNU Generic Security Service home page: http://www.gnu.org/software/gss/ General help using GNU software: http://www.gnu.org/gethelp/ .SH COPYRIGHT Copyright \(co 2003-2013 Simon Josefsson. .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 gss is maintained as a Texinfo manual. If the .B info and .B gss programs are properly installed at your site, the command .IP .B info gss .PP should give you access to the complete manual. gss-1.0.3/doc/man/gss_inquire_mech_for_saslname.30000644000000000000000000000332112415507732016664 00000000000000.\" DO NOT MODIFY THIS FILE! It was generated by gdoc. .TH "gss_inquire_mech_for_saslname" 3 "1.0.3" "gss" "gss" .SH NAME gss_inquire_mech_for_saslname \- API function .SH SYNOPSIS .B #include .sp .BI "OM_uint32 gss_inquire_mech_for_saslname(OM_uint32 * " minor_status ", const gss_buffer_t " sasl_mech_name ", gss_OID * " mech_type ");" .SH ARGUMENTS .IP "OM_uint32 * minor_status" 12 (Integer, modify) Mechanism specific status code. .IP "const gss_buffer_t sasl_mech_name" 12 (buffer, character\-string, read) Buffer with SASL mechanism name. .IP "gss_OID * mech_type" 12 (OID, modify, optional) Actual mechanism used. The OID returned via this parameter will be a pointer to static storage that should be treated as read\-only; In particular the application should not attempt to free it. Specify NULL if not required. .SH "DESCRIPTION" Output GSS\-API mechanism OID of mechanism associated with given \fIsasl_mech_name\fP. .SH "RETURNS" `GSS_S_COMPLETE`: Successful completion. `GSS_S_BAD_MECH`: There is no GSS\-API mechanism known as \fIsasl_mech_name\fP. .SH "REPORTING BUGS" Report bugs to . GNU Generic Security Service home page: http://www.gnu.org/software/gss/ General help using GNU software: http://www.gnu.org/gethelp/ .SH COPYRIGHT Copyright \(co 2003-2013 Simon Josefsson. .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 gss is maintained as a Texinfo manual. If the .B info and .B gss programs are properly installed at your site, the command .IP .B info gss .PP should give you access to the complete manual. gss-1.0.3/doc/man/gss_inquire_cred_by_mech.30000644000000000000000000000663712415507731015636 00000000000000.\" DO NOT MODIFY THIS FILE! It was generated by gdoc. .TH "gss_inquire_cred_by_mech" 3 "1.0.3" "gss" "gss" .SH NAME gss_inquire_cred_by_mech \- API function .SH SYNOPSIS .B #include .sp .BI "OM_uint32 gss_inquire_cred_by_mech(OM_uint32 * " minor_status ", const gss_cred_id_t " cred_handle ", const gss_OID " mech_type ", gss_name_t * " name ", OM_uint32 * " initiator_lifetime ", OM_uint32 * " acceptor_lifetime ", gss_cred_usage_t * " cred_usage ");" .SH ARGUMENTS .IP "OM_uint32 * minor_status" 12 (Integer, modify) Mechanism specific status code. .IP "const gss_cred_id_t cred_handle" 12 (gss_cred_id_t, read) A handle that refers to the target credential. Specify GSS_C_NO_CREDENTIAL to inquire about the default initiator principal. .IP "const gss_OID mech_type" 12 (gss_OID, read) The mechanism for which information should be returned. .IP "gss_name_t * name" 12 (gss_name_t, modify, optional) The name whose identity the credential asserts. Storage associated with this name must be freed by the application after use with a call to \fBgss_release_name()\fP. Specify NULL if not required. .IP "OM_uint32 * initiator_lifetime" 12 (Integer, modify, optional) The number of seconds for which the credential will remain capable of initiating security contexts under the specified mechanism. If the credential can no longer be used to initiate contexts, or if the credential usage for this mechanism is GSS_C_ACCEPT, this parameter will be set to zero. If the implementation does not support expiration of initiator credentials, the value GSS_C_INDEFINITE will be returned. Specify NULL if not required. .IP "OM_uint32 * acceptor_lifetime" 12 (Integer, modify, optional) The number of seconds for which the credential will remain capable of accepting security contexts under the specified mechanism. If the credential can no longer be used to accept contexts, or if the credential usage for this mechanism is GSS_C_INITIATE, this parameter will be set to zero. If the implementation does not support expiration of acceptor credentials, the value GSS_C_INDEFINITE will be returned. Specify NULL if not required. .IP "gss_cred_usage_t * cred_usage" 12 (gss_cred_usage_t, modify, optional) How the credential may be used with the specified mechanism. One of the following: GSS_C_INITIATE, GSS_C_ACCEPT, GSS_C_BOTH. Specify NULL if not required. .SH "DESCRIPTION" Obtains per\-mechanism information about a credential. .SH "RETURN VALUE" `GSS_S_COMPLETE`: Successful completion. `GSS_S_NO_CRED`: The referenced credentials could not be accessed. `GSS_S_DEFECTIVE_CREDENTIAL`: The referenced credentials were invalid. `GSS_S_CREDENTIALS_EXPIRED`: The referenced credentials have expired. If the lifetime parameter was not passed as NULL, it will be set to 0. .SH "REPORTING BUGS" Report bugs to . GNU Generic Security Service home page: http://www.gnu.org/software/gss/ General help using GNU software: http://www.gnu.org/gethelp/ .SH COPYRIGHT Copyright \(co 2003-2013 Simon Josefsson. .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 gss is maintained as a Texinfo manual. If the .B info and .B gss programs are properly installed at your site, the command .IP .B info gss .PP should give you access to the complete manual. gss-1.0.3/doc/man/gss_release_cred.30000644000000000000000000000311012415507732014074 00000000000000.\" DO NOT MODIFY THIS FILE! It was generated by gdoc. .TH "gss_release_cred" 3 "1.0.3" "gss" "gss" .SH NAME gss_release_cred \- API function .SH SYNOPSIS .B #include .sp .BI "OM_uint32 gss_release_cred(OM_uint32 * " minor_status ", gss_cred_id_t * " cred_handle ");" .SH ARGUMENTS .IP "OM_uint32 * minor_status" 12 (Integer, modify) Mechanism specific status code. .IP "gss_cred_id_t * cred_handle" 12 (gss_cred_id_t, modify, optional) Opaque handle identifying credential to be released. If GSS_C_NO_CREDENTIAL is supplied, the routine will complete successfully, but will do nothing. .SH "DESCRIPTION" Informs GSS\-API that the specified credential handle is no longer required by the application, and frees associated resources. The cred_handle is set to GSS_C_NO_CREDENTIAL on successful completion of this call. .SH "RETURN VALUE" `GSS_S_COMPLETE`: Successful completion. `GSS_S_NO_CRED`: Credentials could not be accessed. .SH "REPORTING BUGS" Report bugs to . GNU Generic Security Service home page: http://www.gnu.org/software/gss/ General help using GNU software: http://www.gnu.org/gethelp/ .SH COPYRIGHT Copyright \(co 2003-2013 Simon Josefsson. .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 gss is maintained as a Texinfo manual. If the .B info and .B gss programs are properly installed at your site, the command .IP .B info gss .PP should give you access to the complete manual. gss-1.0.3/doc/man/gss_userok.30000644000000000000000000000270212415507732012775 00000000000000.\" DO NOT MODIFY THIS FILE! It was generated by gdoc. .TH "gss_userok" 3 "1.0.3" "gss" "gss" .SH NAME gss_userok \- API function .SH SYNOPSIS .B #include .sp .BI "int gss_userok(const gss_name_t " name ", const char * " username ");" .SH ARGUMENTS .IP "const gss_name_t name" 12 (gss_name_t, read) Name to be compared. .IP "const char * username" 12 Zero terminated string with username. .SH "DESCRIPTION" Compare the username against the output from \fBgss_export_name()\fP invoked on \fIname\fP, after removing the leading OID. This answers the question whether the particular mechanism would authenticate them as the same principal .SH "WARNING" This function is a GNU GSS specific extension, and is not part of the official GSS API. .SH "RETURN VALUE" Returns 0 if the names match, non\-0 otherwise. .SH "REPORTING BUGS" Report bugs to . GNU Generic Security Service home page: http://www.gnu.org/software/gss/ General help using GNU software: http://www.gnu.org/gethelp/ .SH COPYRIGHT Copyright \(co 2003-2013 Simon Josefsson. .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 gss is maintained as a Texinfo manual. If the .B info and .B gss programs are properly installed at your site, the command .IP .B info gss .PP should give you access to the complete manual. gss-1.0.3/doc/man/gss_encapsulate_token.30000644000000000000000000000364612415507731015200 00000000000000.\" DO NOT MODIFY THIS FILE! It was generated by gdoc. .TH "gss_encapsulate_token" 3 "1.0.3" "gss" "gss" .SH NAME gss_encapsulate_token \- API function .SH SYNOPSIS .B #include .sp .BI "extern OM_uint32 gss_encapsulate_token(gss_const_buffer_t " input_token ", gss_const_OID " token_oid ", gss_buffer_t " output_token ");" .SH ARGUMENTS .IP "gss_const_buffer_t input_token" 12 (buffer, opaque, read) Buffer with GSS\-API context token data. .IP "gss_const_OID token_oid" 12 (Object ID, read) Object identifier of token. .IP "gss_buffer_t output_token" 12 (buffer, opaque, modify) Encapsulated token data; caller must release with \fBgss_release_buffer()\fP. .SH "DESCRIPTION" Add the mechanism\-independent token header to GSS\-API context token data. This is used for the initial token of a GSS\-API context establishment sequence. It incorporates an identifier of the mechanism type to be used on that context, and enables tokens to be interpreted unambiguously at GSS\-API peers. See further section 3.1 of RFC 2743. This function is standardized in RFC 6339. .SH "RETURNS" `GSS_S_COMPLETE`: Indicates successful completion, and that output parameters holds correct information. `GSS_S_FAILURE`: Indicates that encapsulation failed for reasons unspecified at the GSS\-API level. .SH "REPORTING BUGS" Report bugs to . GNU Generic Security Service home page: http://www.gnu.org/software/gss/ General help using GNU software: http://www.gnu.org/gethelp/ .SH COPYRIGHT Copyright \(co 2003-2013 Simon Josefsson. .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 gss is maintained as a Texinfo manual. If the .B info and .B gss programs are properly installed at your site, the command .IP .B info gss .PP should give you access to the complete manual. gss-1.0.3/doc/man/gss_test_oid_set_member.30000644000000000000000000000334512415507732015505 00000000000000.\" DO NOT MODIFY THIS FILE! It was generated by gdoc. .TH "gss_test_oid_set_member" 3 "1.0.3" "gss" "gss" .SH NAME gss_test_oid_set_member \- API function .SH SYNOPSIS .B #include .sp .BI "OM_uint32 gss_test_oid_set_member(OM_uint32 * " minor_status ", const gss_OID " member ", const gss_OID_set " set ", int * " present ");" .SH ARGUMENTS .IP "OM_uint32 * minor_status" 12 (integer, modify) Mechanism specific status code. .IP "const gss_OID member" 12 (Object ID, read) The object identifier whose presence is to be tested. .IP "const gss_OID_set set" 12 (Set of Object ID, read) The Object Identifier set. .IP "int * present" 12 (Boolean, modify) Non\-zero if the specified OID is a member of the set, zero if not. .SH "DESCRIPTION" Interrogate an Object Identifier set to determine whether a specified Object Identifier is a member. This routine is intended to be used with OID sets returned by \fBgss_indicate_mechs()\fP, \fBgss_acquire_cred()\fP, and \fBgss_inquire_cred()\fP, but will also work with user\-generated sets. .SH "RETURN VALUE" `GSS_S_COMPLETE`: Successful completion. .SH "REPORTING BUGS" Report bugs to . GNU Generic Security Service home page: http://www.gnu.org/software/gss/ General help using GNU software: http://www.gnu.org/gethelp/ .SH COPYRIGHT Copyright \(co 2003-2013 Simon Josefsson. .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 gss is maintained as a Texinfo manual. If the .B info and .B gss programs are properly installed at your site, the command .IP .B info gss .PP should give you access to the complete manual. gss-1.0.3/doc/man/gss_get_mic.30000644000000000000000000000520512415507732013075 00000000000000.\" DO NOT MODIFY THIS FILE! It was generated by gdoc. .TH "gss_get_mic" 3 "1.0.3" "gss" "gss" .SH NAME gss_get_mic \- API function .SH SYNOPSIS .B #include .sp .BI "OM_uint32 gss_get_mic(OM_uint32 * " minor_status ", const gss_ctx_id_t " context_handle ", gss_qop_t " qop_req ", const gss_buffer_t " message_buffer ", gss_buffer_t " message_token ");" .SH ARGUMENTS .IP "OM_uint32 * minor_status" 12 (Integer, modify) Mechanism specific status code. .IP "const gss_ctx_id_t context_handle" 12 (gss_ctx_id_t, read) Identifies the context on which the message will be sent. .IP "gss_qop_t qop_req" 12 (gss_qop_t, read, optional) Specifies requested quality of protection. Callers are encouraged, on portability grounds, to accept the default quality of protection offered by the chosen mechanism, which may be requested by specifying GSS_C_QOP_DEFAULT for this parameter. If an unsupported protection strength is requested, gss_get_mic will return a major_status of GSS_S_BAD_QOP. .IP "const gss_buffer_t message_buffer" 12 (buffer, opaque, read) Message to be protected. .IP "gss_buffer_t message_token" 12 (buffer, opaque, modify) Buffer to receive token. The application must free storage associated with this buffer after use with a call to \fBgss_release_buffer()\fP. .SH "DESCRIPTION" Generates a cryptographic MIC for the supplied message, and places the MIC in a token for transfer to the peer application. The qop_req parameter allows a choice between several cryptographic algorithms, if supported by the chosen mechanism. Since some application\-level protocols may wish to use tokens emitted by \fBgss_wrap()\fP to provide "secure framing", implementations must support derivation of MICs from zero\-length messages. .SH "RETURN VALUE" `GSS_S_COMPLETE`: Successful completion. `GSS_S_CONTEXT_EXPIRED`: The context has already expired. `GSS_S_NO_CONTEXT`: The context_handle parameter did not identify a valid context. `GSS_S_BAD_QOP`: The specified QOP is not supported by the mechanism. .SH "REPORTING BUGS" Report bugs to . GNU Generic Security Service home page: http://www.gnu.org/software/gss/ General help using GNU software: http://www.gnu.org/gethelp/ .SH COPYRIGHT Copyright \(co 2003-2013 Simon Josefsson. .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 gss is maintained as a Texinfo manual. If the .B info and .B gss programs are properly installed at your site, the command .IP .B info gss .PP should give you access to the complete manual. gss-1.0.3/doc/man/gss_inquire_context.30000644000000000000000000001335612415507731014713 00000000000000.\" DO NOT MODIFY THIS FILE! It was generated by gdoc. .TH "gss_inquire_context" 3 "1.0.3" "gss" "gss" .SH NAME gss_inquire_context \- API function .SH SYNOPSIS .B #include .sp .BI "OM_uint32 gss_inquire_context(OM_uint32 * " minor_status ", const gss_ctx_id_t " context_handle ", gss_name_t * " src_name ", gss_name_t * " targ_name ", OM_uint32 * " lifetime_rec ", gss_OID * " mech_type ", OM_uint32 * " ctx_flags ", int * " locally_initiated ", int * " open ");" .SH ARGUMENTS .IP "OM_uint32 * minor_status" 12 (Integer, modify) Mechanism specific status code. .IP "const gss_ctx_id_t context_handle" 12 (gss_ctx_id_t, read) A handle that refers to the security context. .IP "gss_name_t * src_name" 12 (gss_name_t, modify, optional) The name of the context initiator. If the context was established using anonymous authentication, and if the application invoking gss_inquire_context is the context acceptor, an anonymous name will be returned. Storage associated with this name must be freed by the application after use with a call to \fBgss_release_name()\fP. Specify NULL if not required. .IP "gss_name_t * targ_name" 12 (gss_name_t, modify, optional) The name of the context acceptor. Storage associated with this name must be freed by the application after use with a call to \fBgss_release_name()\fP. If the context acceptor did not authenticate itself, and if the initiator did not specify a target name in its call to \fBgss_init_sec_context()\fP, the value GSS_C_NO_NAME will be returned. Specify NULL if not required. .IP "OM_uint32 * lifetime_rec" 12 (Integer, modify, optional) The number of seconds for which the context will remain valid. If the context has expired, this parameter will be set to zero. If the implementation does not support context expiration, the value GSS_C_INDEFINITE will be returned. Specify NULL if not required. .IP "gss_OID * mech_type" 12 (gss_OID, modify, optional) The security mechanism providing the context. The returned OID will be a pointer to static storage that should be treated as read\-only by the application; in particular the application should not attempt to free it. Specify NULL if not required. .IP "OM_uint32 * ctx_flags" 12 (bit\-mask, modify, optional) Contains various independent flags, each of which indicates that the context supports (or is expected to support, if ctx_open is false) a specific service option. If not needed, specify NULL. Symbolic names are provided for each flag, and the symbolic names corresponding to the required flags should be logically\-ANDed with the ret_flags value to test whether a given option is supported by the context. See below for the flags. .IP "int * locally_initiated" 12 (Boolean, modify) Non\-zero if the invoking application is the context initiator. Specify NULL if not required. .IP "int * open" 12 (Boolean, modify) Non\-zero if the context is fully established; Zero if a context\-establishment token is expected from the peer application. Specify NULL if not required. .SH "DESCRIPTION" Obtains information about a security context. The caller must already have obtained a handle that refers to the context, although the context need not be fully established. The `ctx_flags` values: `GSS_C_DELEG_FLAG`:: \- True \- Credentials were delegated from the initiator to the acceptor. \- False \- No credentials were delegated. `GSS_C_MUTUAL_FLAG`:: \- True \- The acceptor was authenticated to the initiator. \- False \- The acceptor did not authenticate itself. `GSS_C_REPLAY_FLAG`:: \- True \- replay of protected messages will be detected. \- False \- replayed messages will not be detected. `GSS_C_SEQUENCE_FLAG`:: \- True \- out\-of\-sequence protected messages will be detected. \- False \- out\-of\-sequence messages will not be detected. `GSS_C_CONF_FLAG`:: \- True \- Confidentiality service may be invoked by calling gss_wrap routine. \- False \- No confidentiality service (via gss_wrap) available. gss_wrap will provide message encapsulation, data\-origin authentication and integrity services only. `GSS_C_INTEG_FLAG`:: \- True \- Integrity service may be invoked by calling either gss_get_mic or gss_wrap routines. \- False \- Per\-message integrity service unavailable. `GSS_C_ANON_FLAG`:: \- True \- The initiator's identity will not be revealed to the acceptor. The src_name parameter (if requested) contains an anonymous internal name. \- False \- The initiator has been authenticated normally. `GSS_C_PROT_READY_FLAG`:: \- True \- Protection services (as specified by the states of the GSS_C_CONF_FLAG and GSS_C_INTEG_FLAG) are available for use. \- False \- Protection services (as specified by the states of the GSS_C_CONF_FLAG and GSS_C_INTEG_FLAG) are available only if the context is fully established (i.e. if the open parameter is non\-zero). `GSS_C_TRANS_FLAG`:: \- True \- The resultant security context may be transferred to other processes via a call to \fBgss_export_sec_context()\fP. \- False \- The security context is not transferable. .SH "RETURN VALUE" `GSS_S_COMPLETE`: Successful completion. `GSS_S_NO_CONTEXT`: The referenced context could not be accessed. .SH "REPORTING BUGS" Report bugs to . GNU Generic Security Service home page: http://www.gnu.org/software/gss/ General help using GNU software: http://www.gnu.org/gethelp/ .SH COPYRIGHT Copyright \(co 2003-2013 Simon Josefsson. .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 gss is maintained as a Texinfo manual. If the .B info and .B gss programs are properly installed at your site, the command .IP .B info gss .PP should give you access to the complete manual. gss-1.0.3/doc/man/gss_inquire_cred.30000644000000000000000000000542012415507731014135 00000000000000.\" DO NOT MODIFY THIS FILE! It was generated by gdoc. .TH "gss_inquire_cred" 3 "1.0.3" "gss" "gss" .SH NAME gss_inquire_cred \- API function .SH SYNOPSIS .B #include .sp .BI "OM_uint32 gss_inquire_cred(OM_uint32 * " minor_status ", const gss_cred_id_t " cred_handle ", gss_name_t * " name ", OM_uint32 * " lifetime ", gss_cred_usage_t * " cred_usage ", gss_OID_set * " mechanisms ");" .SH ARGUMENTS .IP "OM_uint32 * minor_status" 12 (integer, modify) Mechanism specific status code. .IP "const gss_cred_id_t cred_handle" 12 (gss_cred_id_t, read) A handle that refers to the target credential. Specify GSS_C_NO_CREDENTIAL to inquire about the default initiator principal. .IP "gss_name_t * name" 12 (gss_name_t, modify, optional) The name whose identity the credential asserts. Storage associated with this name should be freed by the application after use with a call to \fBgss_release_name()\fP. Specify NULL if not required. .IP "OM_uint32 * lifetime" 12 (Integer, modify, optional) The number of seconds for which the credential will remain valid. If the credential has expired, this parameter will be set to zero. If the implementation does not support credential expiration, the value GSS_C_INDEFINITE will be returned. Specify NULL if not required. .IP "gss_cred_usage_t * cred_usage" 12 (gss_cred_usage_t, modify, optional) How the credential may be used. One of the following: GSS_C_INITIATE, GSS_C_ACCEPT, GSS_C_BOTH. Specify NULL if not required. .IP "gss_OID_set * mechanisms" 12 (gss_OID_set, modify, optional) Set of mechanisms supported by the credential. Storage associated with this OID set must be freed by the application after use with a call to \fBgss_release_oid_set()\fP. Specify NULL if not required. .SH "DESCRIPTION" Obtains information about a credential. .SH "RETURN VALUE" `GSS_S_COMPLETE`: Successful completion. `GSS_S_NO_CRED`: The referenced credentials could not be accessed. `GSS_S_DEFECTIVE_CREDENTIAL`: The referenced credentials were invalid. `GSS_S_CREDENTIALS_EXPIRED`: The referenced credentials have expired. If the lifetime parameter was not passed as NULL, it will be set to 0. .SH "REPORTING BUGS" Report bugs to . GNU Generic Security Service home page: http://www.gnu.org/software/gss/ General help using GNU software: http://www.gnu.org/gethelp/ .SH COPYRIGHT Copyright \(co 2003-2013 Simon Josefsson. .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 gss is maintained as a Texinfo manual. If the .B info and .B gss programs are properly installed at your site, the command .IP .B info gss .PP should give you access to the complete manual. gss-1.0.3/doc/man/gss_init_sec_context.30000644000000000000000000003553512415507731015037 00000000000000.\" DO NOT MODIFY THIS FILE! It was generated by gdoc. .TH "gss_init_sec_context" 3 "1.0.3" "gss" "gss" .SH NAME gss_init_sec_context \- API function .SH SYNOPSIS .B #include .sp .BI "OM_uint32 gss_init_sec_context(OM_uint32 * " minor_status ", const gss_cred_id_t " initiator_cred_handle ", gss_ctx_id_t * " context_handle ", const gss_name_t " target_name ", const gss_OID " mech_type ", OM_uint32 " req_flags ", OM_uint32 " time_req ", const gss_channel_bindings_t " input_chan_bindings ", const gss_buffer_t " input_token ", gss_OID * " actual_mech_type ", gss_buffer_t " output_token ", OM_uint32 * " ret_flags ", OM_uint32 * " time_rec ");" .SH ARGUMENTS .IP "OM_uint32 * minor_status" 12 (integer, modify) Mechanism specific status code. .IP "const gss_cred_id_t initiator_cred_handle" 12 (gss_cred_id_t, read, optional) Handle for credentials claimed. Supply GSS_C_NO_CREDENTIAL to act as a default initiator principal. If no default initiator is defined, the function will return GSS_S_NO_CRED. .IP "gss_ctx_id_t * context_handle" 12 (gss_ctx_id_t, read/modify) Context handle for new context. Supply GSS_C_NO_CONTEXT for first call; use value returned by first call in continuation calls. Resources associated with this context\-handle must be released by the application after use with a call to \fBgss_delete_sec_context()\fP. .IP "const gss_name_t target_name" 12 (gss_name_t, read) Name of target. .IP "const gss_OID mech_type" 12 (OID, read, optional) Object ID of desired mechanism. Supply GSS_C_NO_OID to obtain an implementation specific default. .IP "OM_uint32 req_flags" 12 (bit\-mask, read) Contains various independent flags, each of which requests that the context support a specific service option. Symbolic names are provided for each flag, and the symbolic names corresponding to the required flags should be logically\-ORed together to form the bit\-mask value. See below for the flags. .IP "OM_uint32 time_req" 12 (Integer, read, optional) Desired number of seconds for which context should remain valid. Supply 0 to request a default validity period. .IP "const gss_channel_bindings_t input_chan_bindings" 12 (channel bindings, read, optional) Application\-specified bindings. Allows application to securely bind channel identification information to the security context. Specify GSS_C_NO_CHANNEL_BINDINGS if channel bindings are not used. .IP "const gss_buffer_t input_token" 12 (buffer, opaque, read, optional) Token received from peer application. Supply GSS_C_NO_BUFFER, or a pointer to a buffer containing the value GSS_C_EMPTY_BUFFER on initial call. .IP "gss_OID * actual_mech_type" 12 (OID, modify, optional) Actual mechanism used. The OID returned via this parameter will be a pointer to static storage that should be treated as read\-only; In particular the application should not attempt to free it. Specify NULL if not required. .IP "gss_buffer_t output_token" 12 (buffer, opaque, modify) Token to be sent to peer application. If the length field of the returned buffer is zero, no token need be sent to the peer application. Storage associated with this buffer must be freed by the application after use with a call to \fBgss_release_buffer()\fP. .IP "OM_uint32 * ret_flags" 12 (bit\-mask, modify, optional) Contains various independent flags, each of which indicates that the context supports a specific service option. Specify NULL if not required. Symbolic names are provided for each flag, and the symbolic names corresponding to the required flags should be logically\-ANDed with the ret_flags value to test whether a given option is supported by the context. See below for the flags. .IP "OM_uint32 * time_rec" 12 (Integer, modify, optional) Number of seconds for which the context will remain valid. If the implementation does not support context expiration, the value GSS_C_INDEFINITE will be returned. Specify NULL if not required. .SH "DESCRIPTION" Initiates the establishment of a security context between the application and a remote peer. Initially, the input_token parameter should be specified either as GSS_C_NO_BUFFER, or as a pointer to a gss_buffer_desc object whose length field contains the value zero. The routine may return a output_token which should be transferred to the peer application, where the peer application will present it to gss_accept_sec_context. If no token need be sent, gss_init_sec_context will indicate this by setting the length field of the output_token argument to zero. To complete the context establishment, one or more reply tokens may be required from the peer application; if so, gss_init_sec_context will return a status containing the supplementary information bit GSS_S_CONTINUE_NEEDED. In this case, gss_init_sec_context should be called again when the reply token is received from the peer application, passing the reply token to gss_init_sec_context via the input_token parameters. Portable applications should be constructed to use the token length and return status to determine whether a token needs to be sent or waited for. Thus a typical portable caller should always invoke gss_init_sec_context within a loop: \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\- int context_established = 0; gss_ctx_id_t context_hdl = GSS_C_NO_CONTEXT; ... input_token\->length = 0; while (!context_established) { maj_stat = gss_init_sec_context(&min_stat, cred_hdl, &context_hdl, target_name, desired_mech, desired_services, desired_time, input_bindings, input_token, &actual_mech, output_token, &actual_services, &actual_time); if (GSS_ERROR(maj_stat)) { report_error(maj_stat, min_stat); }; if (output_token\->length != 0) { send_token_to_peer(output_token); gss_release_buffer(&min_stat, output_token) }; if (GSS_ERROR(maj_stat)) { if (context_hdl != GSS_C_NO_CONTEXT) gss_delete_sec_context(&min_stat, &context_hdl, GSS_C_NO_BUFFER); break; }; if (maj_stat & GSS_S_CONTINUE_NEEDED) { receive_token_from_peer(input_token); } else { context_established = 1; }; }; \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\- Whenever the routine returns a major status that includes the value GSS_S_CONTINUE_NEEDED, the context is not fully established and the following restrictions apply to the output parameters: \- The value returned via the time_rec parameter is undefined unless the accompanying ret_flags parameter contains the bit GSS_C_PROT_READY_FLAG, indicating that per\-message services may be applied in advance of a successful completion status, the value returned via the actual_mech_type parameter is undefined until the routine returns a major status value of GSS_S_COMPLETE. \- The values of the GSS_C_DELEG_FLAG, GSS_C_MUTUAL_FLAG, GSS_C_REPLAY_FLAG, GSS_C_SEQUENCE_FLAG, GSS_C_CONF_FLAG, GSS_C_INTEG_FLAG and GSS_C_ANON_FLAG bits returned via the ret_flags parameter should contain the values that the implementation expects would be valid if context establishment were to succeed. In particular, if the application has requested a service such as delegation or anonymous authentication via the req_flags argument, and such a service is unavailable from the underlying mechanism, gss_init_sec_context should generate a token that will not provide the service, and indicate via the ret_flags argument that the service will not be supported. The application may choose to abort the context establishment by calling gss_delete_sec_context (if it cannot continue in the absence of the service), or it may choose to transmit the token and continue context establishment (if the service was merely desired but not mandatory). \- The values of the GSS_C_PROT_READY_FLAG and GSS_C_TRANS_FLAG bits within ret_flags should indicate the actual state at the time gss_init_sec_context returns, whether or not the context is fully established. \- GSS\-API implementations that support per\-message protection are encouraged to set the GSS_C_PROT_READY_FLAG in the final ret_flags returned to a caller (i.e. when accompanied by a GSS_S_COMPLETE status code). However, applications should not rely on this behavior as the flag was not defined in Version 1 of the GSS\-API. Instead, applications should determine what per\-message services are available after a successful context establishment according to the GSS_C_INTEG_FLAG and GSS_C_CONF_FLAG values. \- All other bits within the ret_flags argument should be set to zero. If the initial call of \fBgss_init_sec_context()\fP fails, the implementation should not create a context object, and should leave the value of the context_handle parameter set to GSS_C_NO_CONTEXT to indicate this. In the event of a failure on a subsequent call, the implementation is permitted to delete the "half\-built" security context (in which case it should set the context_handle parameter to GSS_C_NO_CONTEXT), but the preferred behavior is to leave the security context untouched for the application to delete (using gss_delete_sec_context). During context establishment, the informational status bits GSS_S_OLD_TOKEN and GSS_S_DUPLICATE_TOKEN indicate fatal errors, and GSS\-API mechanisms should always return them in association with a routine error of GSS_S_FAILURE. This requirement for pairing did not exist in version 1 of the GSS\-API specification, so applications that wish to run over version 1 implementations must special\-case these codes. The `req_flags` values: `GSS_C_DELEG_FLAG`:: \- True \- Delegate credentials to remote peer. \- False \- Don't delegate. `GSS_C_MUTUAL_FLAG`:: \- True \- Request that remote peer authenticate itself. \- False \- Authenticate self to remote peer only. `GSS_C_REPLAY_FLAG`:: \- True \- Enable replay detection for messages protected with gss_wrap or gss_get_mic. \- False \- Don't attempt to detect replayed messages. `GSS_C_SEQUENCE_FLAG`:: \- True \- Enable detection of out\-of\-sequence protected messages. \- False \- Don't attempt to detect out\-of\-sequence messages. `GSS_C_CONF_FLAG`:: \- True \- Request that confidentiality service be made available (via gss_wrap). \- False \- No per\-message confidentiality service is required. `GSS_C_INTEG_FLAG`:: \- True \- Request that integrity service be made available (via gss_wrap or gss_get_mic). \- False \- No per\-message integrity service is required. `GSS_C_ANON_FLAG`:: \- True \- Do not reveal the initiator's identity to the acceptor. \- False \- Authenticate normally. The `ret_flags` values: `GSS_C_DELEG_FLAG`:: \- True \- Credentials were delegated to the remote peer. \- False \- No credentials were delegated. `GSS_C_MUTUAL_FLAG`:: \- True \- The remote peer has authenticated itself. \- False \- Remote peer has not authenticated itself. `GSS_C_REPLAY_FLAG`:: \- True \- replay of protected messages will be detected. \- False \- replayed messages will not be detected. `GSS_C_SEQUENCE_FLAG`:: \- True \- out\-of\-sequence protected messages will be detected. \- False \- out\-of\-sequence messages will not be detected. `GSS_C_CONF_FLAG`:: \- True \- Confidentiality service may be invoked by calling gss_wrap routine. \- False \- No confidentiality service (via gss_wrap) available. gss_wrap will provide message encapsulation, data\-origin authentication and integrity services only. `GSS_C_INTEG_FLAG`:: \- True \- Integrity service may be invoked by calling either gss_get_mic or gss_wrap routines. \- False \- Per\-message integrity service unavailable. `GSS_C_ANON_FLAG`:: \- True \- The initiator's identity has not been revealed, and will not be revealed if any emitted token is passed to the acceptor. \- False \- The initiator's identity has been or will be authenticated normally. `GSS_C_PROT_READY_FLAG`:: \- True \- Protection services (as specified by the states of the GSS_C_CONF_FLAG and GSS_C_INTEG_FLAG) are available for use if the accompanying major status return value is either GSS_S_COMPLETE or GSS_S_CONTINUE_NEEDED. \- False \- Protection services (as specified by the states of the GSS_C_CONF_FLAG and GSS_C_INTEG_FLAG) are available only if the accompanying major status return value is GSS_S_COMPLETE. `GSS_C_TRANS_FLAG`:: \- True \- The resultant security context may be transferred to other processes via a call to \fBgss_export_sec_context()\fP. \- False \- The security context is not transferable. All other bits should be set to zero. .SH "RETURN VALUE" `GSS_S_COMPLETE`: Successful completion. `GSS_S_CONTINUE_NEEDED`: Indicates that a token from the peer application is required to complete the context, and that gss_init_sec_context must be called again with that token. `GSS_S_DEFECTIVE_TOKEN`: Indicates that consistency checks performed on the input_token failed. `GSS_S_DEFECTIVE_CREDENTIAL`: Indicates that consistency checks performed on the credential failed. `GSS_S_NO_CRED`: The supplied credentials were not valid for context initiation, or the credential handle did not reference any credentials. `GSS_S_CREDENTIALS_EXPIRED`: The referenced credentials have expired. `GSS_S_BAD_BINDINGS`: The input_token contains different channel bindings to those specified via the input_chan_bindings parameter. `GSS_S_BAD_SIG`: The input_token contains an invalid MIC, or a MIC that could not be verified. `GSS_S_OLD_TOKEN`: The input_token was too old. This is a fatal error during context establishment. `GSS_S_DUPLICATE_TOKEN`: The input_token is valid, but is a duplicate of a token already processed. This is a fatal error during context establishment. `GSS_S_NO_CONTEXT`: Indicates that the supplied context handle did not refer to a valid context. `GSS_S_BAD_NAMETYPE`: The provided target_name parameter contained an invalid or unsupported type of name. `GSS_S_BAD_NAME`: The provided target_name parameter was ill\-formed. `GSS_S_BAD_MECH`: The specified mechanism is not supported by the provided credential, or is unrecognized by the implementation. .SH "REPORTING BUGS" Report bugs to . GNU Generic Security Service home page: http://www.gnu.org/software/gss/ General help using GNU software: http://www.gnu.org/gethelp/ .SH COPYRIGHT Copyright \(co 2003-2013 Simon Josefsson. .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 gss is maintained as a Texinfo manual. If the .B info and .B gss programs are properly installed at your site, the command .IP .B info gss .PP should give you access to the complete manual. gss-1.0.3/doc/man/gss_acquire_cred.30000644000000000000000000001306712415507731014120 00000000000000.\" DO NOT MODIFY THIS FILE! It was generated by gdoc. .TH "gss_acquire_cred" 3 "1.0.3" "gss" "gss" .SH NAME gss_acquire_cred \- API function .SH SYNOPSIS .B #include .sp .BI "OM_uint32 gss_acquire_cred(OM_uint32 * " minor_status ", const gss_name_t " desired_name ", OM_uint32 " time_req ", const gss_OID_set " desired_mechs ", gss_cred_usage_t " cred_usage ", gss_cred_id_t * " output_cred_handle ", gss_OID_set * " actual_mechs ", OM_uint32 * " time_rec ");" .SH ARGUMENTS .IP "OM_uint32 * minor_status" 12 (integer, modify) Mechanism specific status code. .IP "const gss_name_t desired_name" 12 (gss_name_t, read) Name of principal whose credential should be acquired. .IP "OM_uint32 time_req" 12 (Integer, read, optional) Number of seconds that credentials should remain valid. Specify GSS_C_INDEFINITE to request that the credentials have the maximum permitted lifetime. .IP "const gss_OID_set desired_mechs" 12 (Set of Object IDs, read, optional) Set of underlying security mechanisms that may be used. GSS_C_NO_OID_SET may be used to obtain an implementation\-specific default. .IP "gss_cred_usage_t cred_usage" 12 (gss_cred_usage_t, read) GSS_C_BOTH \- Credentials may be used either to initiate or accept security contexts. GSS_C_INITIATE \- Credentials will only be used to initiate security contexts. GSS_C_ACCEPT \- Credentials will only be used to accept security contexts. .IP "gss_cred_id_t * output_cred_handle" 12 (gss_cred_id_t, modify) The returned credential handle. Resources associated with this credential handle must be released by the application after use with a call to \fBgss_release_cred()\fP. .IP "gss_OID_set * actual_mechs" 12 (Set of Object IDs, modify, optional) The set of mechanisms for which the credential is valid. Storage associated with the returned OID\-set must be released by the application after use with a call to \fBgss_release_oid_set()\fP. Specify NULL if not required. .IP "OM_uint32 * time_rec" 12 (Integer, modify, optional) Actual number of seconds for which the returned credentials will remain valid. If the implementation does not support expiration of credentials, the value GSS_C_INDEFINITE will be returned. Specify NULL if not required. .SH "DESCRIPTION" Allows an application to acquire a handle for a pre\-existing credential by name. GSS\-API implementations must impose a local access\-control policy on callers of this routine to prevent unauthorized callers from acquiring credentials to which they are not entitled. This routine is not intended to provide a "login to the network" function, as such a function would involve the creation of new credentials rather than merely acquiring a handle to existing credentials. Such functions, if required, should be defined in implementation\-specific extensions to the API. If desired_name is GSS_C_NO_NAME, the call is interpreted as a request for a credential handle that will invoke default behavior when passed to \fBgss_init_sec_context()\fP (if cred_usage is GSS_C_INITIATE or GSS_C_BOTH) or \fBgss_accept_sec_context()\fP (if cred_usage is GSS_C_ACCEPT or GSS_C_BOTH). Mechanisms should honor the desired_mechs parameter, and return a credential that is suitable to use only with the requested mechanisms. An exception to this is the case where one underlying credential element can be shared by multiple mechanisms; in this case it is permissible for an implementation to indicate all mechanisms with which the credential element may be used. If desired_mechs is an empty set, behavior is undefined. This routine is expected to be used primarily by context acceptors, since implementations are likely to provide mechanism\-specific ways of obtaining GSS\-API initiator credentials from the system login process. Some implementations may therefore not support the acquisition of GSS_C_INITIATE or GSS_C_BOTH credentials via gss_acquire_cred for any name other than GSS_C_NO_NAME, or a name produced by applying either gss_inquire_cred to a valid credential, or gss_inquire_context to an active context. If credential acquisition is time\-consuming for a mechanism, the mechanism may choose to delay the actual acquisition until the credential is required (e.g. by gss_init_sec_context or gss_accept_sec_context). Such mechanism\-specific implementation decisions should be invisible to the calling application; thus a call of gss_inquire_cred immediately following the call of gss_acquire_cred must return valid credential data, and may therefore incur the overhead of a deferred credential acquisition. .SH "RETURN VALUE" `GSS_S_COMPLETE`: Successful completion. `GSS_S_BAD_MECH`: Unavailable mechanism requested. `GSS_S_BAD_NAMETYPE`: Type contained within desired_name parameter is not supported. `GSS_S_BAD_NAME`: Value supplied for desired_name parameter is ill formed. `GSS_S_CREDENTIALS_EXPIRED`: The credentials could not be acquired Because they have expired. `GSS_S_NO_CRED`: No credentials were found for the specified name. .SH "REPORTING BUGS" Report bugs to . GNU Generic Security Service home page: http://www.gnu.org/software/gss/ General help using GNU software: http://www.gnu.org/gethelp/ .SH COPYRIGHT Copyright \(co 2003-2013 Simon Josefsson. .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 gss is maintained as a Texinfo manual. If the .B info and .B gss programs are properly installed at your site, the command .IP .B info gss .PP should give you access to the complete manual. gss-1.0.3/doc/man/gss_process_context_token.30000644000000000000000000000465412415507731016116 00000000000000.\" DO NOT MODIFY THIS FILE! It was generated by gdoc. .TH "gss_process_context_token" 3 "1.0.3" "gss" "gss" .SH NAME gss_process_context_token \- API function .SH SYNOPSIS .B #include .sp .BI "OM_uint32 gss_process_context_token(OM_uint32 * " minor_status ", const gss_ctx_id_t " context_handle ", const gss_buffer_t " token_buffer ");" .SH ARGUMENTS .IP "OM_uint32 * minor_status" 12 (Integer, modify) Implementation specific status code. .IP "const gss_ctx_id_t context_handle" 12 (gss_ctx_id_t, read) Context handle of context on which token is to be processed .IP "const gss_buffer_t token_buffer" 12 (buffer, opaque, read) Token to process. .SH "DESCRIPTION" Provides a way to pass an asynchronous token to the security service. Most context\-level tokens are emitted and processed synchronously by gss_init_sec_context and gss_accept_sec_context, and the application is informed as to whether further tokens are expected by the GSS_C_CONTINUE_NEEDED major status bit. Occasionally, a mechanism may need to emit a context\-level token at a point when the peer entity is not expecting a token. For example, the initiator's final call to gss_init_sec_context may emit a token and return a status of GSS_S_COMPLETE, but the acceptor's call to gss_accept_sec_context may fail. The acceptor's mechanism may wish to send a token containing an error indication to the initiator, but the initiator is not expecting a token at this point, believing that the context is fully established. Gss_process_context_token provides a way to pass such a token to the mechanism at any time. .SH "RETURN VALUE" `GSS_S_COMPLETE`: Successful completion. `GSS_S_DEFECTIVE_TOKEN`: Indicates that consistency checks performed on the token failed. `GSS_S_NO_CONTEXT`: The context_handle did not refer to a valid context. .SH "REPORTING BUGS" Report bugs to . GNU Generic Security Service home page: http://www.gnu.org/software/gss/ General help using GNU software: http://www.gnu.org/gethelp/ .SH COPYRIGHT Copyright \(co 2003-2013 Simon Josefsson. .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 gss is maintained as a Texinfo manual. If the .B info and .B gss programs are properly installed at your site, the command .IP .B info gss .PP should give you access to the complete manual. gss-1.0.3/doc/man/gss_verify_mic.30000644000000000000000000000557712415507732013636 00000000000000.\" DO NOT MODIFY THIS FILE! It was generated by gdoc. .TH "gss_verify_mic" 3 "1.0.3" "gss" "gss" .SH NAME gss_verify_mic \- API function .SH SYNOPSIS .B #include .sp .BI "OM_uint32 gss_verify_mic(OM_uint32 * " minor_status ", const gss_ctx_id_t " context_handle ", const gss_buffer_t " message_buffer ", const gss_buffer_t " token_buffer ", gss_qop_t * " qop_state ");" .SH ARGUMENTS .IP "OM_uint32 * minor_status" 12 (Integer, modify) Mechanism specific status code. .IP "const gss_ctx_id_t context_handle" 12 (gss_ctx_id_t, read) Identifies the context on which the message arrived. .IP "const gss_buffer_t message_buffer" 12 (buffer, opaque, read) Message to be verified. .IP "const gss_buffer_t token_buffer" 12 (buffer, opaque, read) Token associated with message. .IP "gss_qop_t * qop_state" 12 (gss_qop_t, modify, optional) Quality of protection gained from MIC Specify NULL if not required. .SH "DESCRIPTION" Verifies that a cryptographic MIC, contained in the token parameter, fits the supplied message. The qop_state parameter allows a message recipient to determine the strength of protection that was applied to the message. Since some application\-level protocols may wish to use tokens emitted by \fBgss_wrap()\fP to provide "secure framing", implementations must support the calculation and verification of MICs over zero\-length messages. .SH "RETURN VALUE" `GSS_S_COMPLETE`: Successful completion. `GSS_S_DEFECTIVE_TOKEN`: The token failed consistency checks. `GSS_S_BAD_SIG`: The MIC was incorrect. `GSS_S_DUPLICATE_TOKEN`: The token was valid, and contained a correct MIC for the message, but it had already been processed. `GSS_S_OLD_TOKEN`: The token was valid, and contained a correct MIC for the message, but it is too old to check for duplication. `GSS_S_UNSEQ_TOKEN`: The token was valid, and contained a correct MIC for the message, but has been verified out of sequence; a later token has already been received. `GSS_S_GAP_TOKEN`: The token was valid, and contained a correct MIC for the message, but has been verified out of sequence; an earlier expected token has not yet been received. `GSS_S_CONTEXT_EXPIRED`: The context has already expired. `GSS_S_NO_CONTEXT`: The context_handle parameter did not identify a valid context. .SH "REPORTING BUGS" Report bugs to . GNU Generic Security Service home page: http://www.gnu.org/software/gss/ General help using GNU software: http://www.gnu.org/gethelp/ .SH COPYRIGHT Copyright \(co 2003-2013 Simon Josefsson. .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 gss is maintained as a Texinfo manual. If the .B info and .B gss programs are properly installed at your site, the command .IP .B info gss .PP should give you access to the complete manual. gss-1.0.3/doc/man/gss_create_empty_oid_set.30000644000000000000000000000316512415507732015660 00000000000000.\" DO NOT MODIFY THIS FILE! It was generated by gdoc. .TH "gss_create_empty_oid_set" 3 "1.0.3" "gss" "gss" .SH NAME gss_create_empty_oid_set \- API function .SH SYNOPSIS .B #include .sp .BI "OM_uint32 gss_create_empty_oid_set(OM_uint32 * " minor_status ", gss_OID_set * " oid_set ");" .SH ARGUMENTS .IP "OM_uint32 * minor_status" 12 (integer, modify) Mechanism specific status code. .IP "gss_OID_set * oid_set" 12 (Set of Object IDs, modify) The empty object identifier set. The routine will allocate the gss_OID_set_desc object, which the application must free after use with a call to \fBgss_release_oid_set()\fP. .SH "DESCRIPTION" Create an object\-identifier set containing no object identifiers, to which members may be subsequently added using the \fBgss_add_oid_set_member()\fP routine. These routines are intended to be used to construct sets of mechanism object identifiers, for input to gss_acquire_cred. .SH "RETURN VALUE" `GSS_S_COMPLETE`: Successful completion. .SH "REPORTING BUGS" Report bugs to . GNU Generic Security Service home page: http://www.gnu.org/software/gss/ General help using GNU software: http://www.gnu.org/gethelp/ .SH COPYRIGHT Copyright \(co 2003-2013 Simon Josefsson. .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 gss is maintained as a Texinfo manual. If the .B info and .B gss programs are properly installed at your site, the command .IP .B info gss .PP should give you access to the complete manual. gss-1.0.3/doc/man/gss_context_time.30000644000000000000000000000316512415507731014172 00000000000000.\" DO NOT MODIFY THIS FILE! It was generated by gdoc. .TH "gss_context_time" 3 "1.0.3" "gss" "gss" .SH NAME gss_context_time \- API function .SH SYNOPSIS .B #include .sp .BI "OM_uint32 gss_context_time(OM_uint32 * " minor_status ", const gss_ctx_id_t " context_handle ", OM_uint32 * " time_rec ");" .SH ARGUMENTS .IP "OM_uint32 * minor_status" 12 (Integer, modify) Implementation specific status code. .IP "const gss_ctx_id_t context_handle" 12 (gss_ctx_id_t, read) Identifies the context to be interrogated. .IP "OM_uint32 * time_rec" 12 (Integer, modify) Number of seconds that the context will remain valid. If the context has already expired, zero will be returned. .SH "DESCRIPTION" Determines the number of seconds for which the specified context will remain valid. .SH "RETURN VALUE" `GSS_S_COMPLETE`: Successful completion. `GSS_S_CONTEXT_EXPIRED`: The context has already expired. `GSS_S_NO_CONTEXT`: The context_handle parameter did not identify a valid context .SH "REPORTING BUGS" Report bugs to . GNU Generic Security Service home page: http://www.gnu.org/software/gss/ General help using GNU software: http://www.gnu.org/gethelp/ .SH COPYRIGHT Copyright \(co 2003-2013 Simon Josefsson. .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 gss is maintained as a Texinfo manual. If the .B info and .B gss programs are properly installed at your site, the command .IP .B info gss .PP should give you access to the complete manual. gss-1.0.3/doc/man/gss_add_oid_set_member.30000644000000000000000000000412612415507732015254 00000000000000.\" DO NOT MODIFY THIS FILE! It was generated by gdoc. .TH "gss_add_oid_set_member" 3 "1.0.3" "gss" "gss" .SH NAME gss_add_oid_set_member \- API function .SH SYNOPSIS .B #include .sp .BI "OM_uint32 gss_add_oid_set_member(OM_uint32 * " minor_status ", const gss_OID " member_oid ", gss_OID_set * " oid_set ");" .SH ARGUMENTS .IP "OM_uint32 * minor_status" 12 (integer, modify) Mechanism specific status code. .IP "const gss_OID member_oid" 12 (Object ID, read) The object identifier to copied into the set. .IP "gss_OID_set * oid_set" 12 (Set of Object ID, modify) The set in which the object identifier should be inserted. .SH "DESCRIPTION" Add an Object Identifier to an Object Identifier set. This routine is intended for use in conjunction with gss_create_empty_oid_set when constructing a set of mechanism OIDs for input to gss_acquire_cred. The oid_set parameter must refer to an OID\-set that was created by GSS\-API (e.g. a set returned by \fBgss_create_empty_oid_set()\fP). GSS\-API creates a copy of the member_oid and inserts this copy into the set, expanding the storage allocated to the OID\-set's elements array if necessary. The routine may add the new member OID anywhere within the elements array, and implementations should verify that the new member_oid is not already contained within the elements array; if the member_oid is already present, the oid_set should remain unchanged. .SH "RETURN VALUE" `GSS_S_COMPLETE`: Successful completion. .SH "REPORTING BUGS" Report bugs to . GNU Generic Security Service home page: http://www.gnu.org/software/gss/ General help using GNU software: http://www.gnu.org/gethelp/ .SH COPYRIGHT Copyright \(co 2003-2013 Simon Josefsson. .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 gss is maintained as a Texinfo manual. If the .B info and .B gss programs are properly installed at your site, the command .IP .B info gss .PP should give you access to the complete manual. gss-1.0.3/doc/man/gss_release_name.30000644000000000000000000000255312415507732014111 00000000000000.\" DO NOT MODIFY THIS FILE! It was generated by gdoc. .TH "gss_release_name" 3 "1.0.3" "gss" "gss" .SH NAME gss_release_name \- API function .SH SYNOPSIS .B #include .sp .BI "OM_uint32 gss_release_name(OM_uint32 * " minor_status ", gss_name_t * " name ");" .SH ARGUMENTS .IP "OM_uint32 * minor_status" 12 (Integer, modify) Mechanism specific status code. .IP "gss_name_t * name" 12 (gss_name_t, modify) The name to be deleted. .SH "DESCRIPTION" Free GSSAPI\-allocated storage associated with an internal\-form name. The name is set to GSS_C_NO_NAME on successful completion of this call. .SH "RETURN VALUE" `GSS_S_COMPLETE`: Successful completion. `GSS_S_BAD_NAME`: The name parameter did not contain a valid name. .SH "REPORTING BUGS" Report bugs to . GNU Generic Security Service home page: http://www.gnu.org/software/gss/ General help using GNU software: http://www.gnu.org/gethelp/ .SH COPYRIGHT Copyright \(co 2003-2013 Simon Josefsson. .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 gss is maintained as a Texinfo manual. If the .B info and .B gss programs are properly installed at your site, the command .IP .B info gss .PP should give you access to the complete manual. gss-1.0.3/doc/man/gss_oid_equal.30000644000000000000000000000256112415507732013432 00000000000000.\" DO NOT MODIFY THIS FILE! It was generated by gdoc. .TH "gss_oid_equal" 3 "1.0.3" "gss" "gss" .SH NAME gss_oid_equal \- API function .SH SYNOPSIS .B #include .sp .BI "int gss_oid_equal(gss_const_OID " first_oid ", gss_const_OID " second_oid ");" .SH ARGUMENTS .IP "gss_const_OID first_oid" 12 (Object ID, read) First Object identifier. .IP "gss_const_OID second_oid" 12 (Object ID, read) First Object identifier. .SH "DESCRIPTION" Compare two OIDs for equality. The comparison is "deep", i.e., the actual byte sequences of the OIDs are compared instead of just the pointer equality. This function is standardized in RFC 6339. .SH "RETURN VALUE" Returns boolean value true when the two OIDs are equal, otherwise false. .SH "REPORTING BUGS" Report bugs to . GNU Generic Security Service home page: http://www.gnu.org/software/gss/ General help using GNU software: http://www.gnu.org/gethelp/ .SH COPYRIGHT Copyright \(co 2003-2013 Simon Josefsson. .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 gss is maintained as a Texinfo manual. If the .B info and .B gss programs are properly installed at your site, the command .IP .B info gss .PP should give you access to the complete manual. gss-1.0.3/doc/man/gss_wrap_size_limit.30000644000000000000000000000654612415507731014677 00000000000000.\" DO NOT MODIFY THIS FILE! It was generated by gdoc. .TH "gss_wrap_size_limit" 3 "1.0.3" "gss" "gss" .SH NAME gss_wrap_size_limit \- API function .SH SYNOPSIS .B #include .sp .BI "OM_uint32 gss_wrap_size_limit(OM_uint32 * " minor_status ", const gss_ctx_id_t " context_handle ", int " conf_req_flag ", gss_qop_t " qop_req ", OM_uint32 " req_output_size ", OM_uint32 * " max_input_size ");" .SH ARGUMENTS .IP "OM_uint32 * minor_status" 12 (Integer, modify) Mechanism specific status code. .IP "const gss_ctx_id_t context_handle" 12 (gss_ctx_id_t, read) A handle that refers to the security over which the messages will be sent. .IP "int conf_req_flag" 12 (Boolean, read) Indicates whether gss_wrap will be asked to apply confidentiality protection in addition to integrity protection. See the routine description for gss_wrap for more details. .IP "gss_qop_t qop_req" 12 (gss_qop_t, read) Indicates the level of protection that gss_wrap will be asked to provide. See the routine description for gss_wrap for more details. .IP "OM_uint32 req_output_size" 12 (Integer, read) The desired maximum size for tokens emitted by gss_wrap. .IP "OM_uint32 * max_input_size" 12 (Integer, modify) The maximum input message size that may be presented to gss_wrap in order to guarantee that the emitted token shall be no larger than req_output_size bytes. .SH "DESCRIPTION" Allows an application to determine the maximum message size that, if presented to gss_wrap with the same conf_req_flag and qop_req parameters, will result in an output token containing no more than req_output_size bytes. This call is intended for use by applications that communicate over protocols that impose a maximum message size. It enables the application to fragment messages prior to applying protection. GSS\-API implementations are recommended but not required to detect invalid QOP values when \fBgss_wrap_size_limit()\fP is called. This routine guarantees only a maximum message size, not the availability of specific QOP values for message protection. Successful completion of this call does not guarantee that gss_wrap will be able to protect a message of length max_input_size bytes, since this ability may depend on the availability of system resources at the time that gss_wrap is called. However, if the implementation itself imposes an upper limit on the length of messages that may be processed by gss_wrap, the implementation should not return a value via max_input_bytes that is greater than this length. .SH "RETURN VALUE" `GSS_S_COMPLETE`: Successful completion. `GSS_S_NO_CONTEXT`: The referenced context could not be accessed. `GSS_S_CONTEXT_EXPIRED`: The context has expired. `GSS_S_BAD_QOP`: The specified QOP is not supported by the mechanism. .SH "REPORTING BUGS" Report bugs to . GNU Generic Security Service home page: http://www.gnu.org/software/gss/ General help using GNU software: http://www.gnu.org/gethelp/ .SH COPYRIGHT Copyright \(co 2003-2013 Simon Josefsson. .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 gss is maintained as a Texinfo manual. If the .B info and .B gss programs are properly installed at your site, the command .IP .B info gss .PP should give you access to the complete manual. gss-1.0.3/doc/man/gss_inquire_saslname_for_mech.30000644000000000000000000000434012415507732016666 00000000000000.\" DO NOT MODIFY THIS FILE! It was generated by gdoc. .TH "gss_inquire_saslname_for_mech" 3 "1.0.3" "gss" "gss" .SH NAME gss_inquire_saslname_for_mech \- API function .SH SYNOPSIS .B #include .sp .BI "OM_uint32 gss_inquire_saslname_for_mech(OM_uint32 * " minor_status ", const gss_OID " desired_mech ", gss_buffer_t " sasl_mech_name ", gss_buffer_t " mech_name ", gss_buffer_t " mech_description ");" .SH ARGUMENTS .IP "OM_uint32 * minor_status" 12 (Integer, modify) Mechanism specific status code. .IP "const gss_OID desired_mech" 12 (OID, read) Identifies the GSS\-API mechanism to query. .IP "gss_buffer_t sasl_mech_name" 12 (buffer, character\-string, modify, optional) Buffer to receive SASL mechanism name. The application must free storage associated with this name after use with a call to \fBgss_release_buffer()\fP. .IP "gss_buffer_t mech_name" 12 (buffer, character\-string, modify, optional) Buffer to receive human readable mechanism name. The application must free storage associated with this name after use with a call to \fBgss_release_buffer()\fP. .IP "gss_buffer_t mech_description" 12 (buffer, character\-string, modify, optional) Buffer to receive description of mechanism. The application must free storage associated with this name after use with a call to \fBgss_release_buffer()\fP. .SH "DESCRIPTION" Output the SASL mechanism name of a GSS\-API mechanism. It also returns a name and description of the mechanism in a user friendly form. .SH "RETURNS" `GSS_S_COMPLETE`: Successful completion. `GSS_S_BAD_MECH`: The \fIdesired_mech\fP OID is unsupported. .SH "REPORTING BUGS" Report bugs to . GNU Generic Security Service home page: http://www.gnu.org/software/gss/ General help using GNU software: http://www.gnu.org/gethelp/ .SH COPYRIGHT Copyright \(co 2003-2013 Simon Josefsson. .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 gss is maintained as a Texinfo manual. If the .B info and .B gss programs are properly installed at your site, the command .IP .B info gss .PP should give you access to the complete manual. gss-1.0.3/doc/man/gss_display_status.30000644000000000000000000001054012415507732014534 00000000000000.\" DO NOT MODIFY THIS FILE! It was generated by gdoc. .TH "gss_display_status" 3 "1.0.3" "gss" "gss" .SH NAME gss_display_status \- API function .SH SYNOPSIS .B #include .sp .BI "OM_uint32 gss_display_status(OM_uint32 * " minor_status ", OM_uint32 " status_value ", int " status_type ", const gss_OID " mech_type ", OM_uint32 * " message_context ", gss_buffer_t " status_string ");" .SH ARGUMENTS .IP "OM_uint32 * minor_status" 12 (integer, modify) Mechanism specific status code. .IP "OM_uint32 status_value" 12 (Integer, read) Status value to be converted. .IP "int status_type" 12 (Integer, read) GSS_C_GSS_CODE \- status_value is a GSS status code. GSS_C_MECH_CODE \- status_value is a mechanism status code. .IP "const gss_OID mech_type" 12 (Object ID, read, optional) Underlying mechanism (used to interpret a minor status value). Supply GSS_C_NO_OID to obtain the system default. .IP "OM_uint32 * message_context" 12 (Integer, read/modify) Should be initialized to zero by the application prior to the first call. On return from \fBgss_display_status()\fP, a non\-zero status_value parameter indicates that additional messages may be extracted from the status code via subsequent calls to \fBgss_display_status()\fP, passing the same status_value, status_type, mech_type, and message_context parameters. .IP "gss_buffer_t status_string" 12 (buffer, character string, modify) Textual interpretation of the status_value. Storage associated with this parameter must be freed by the application after use with a call to \fBgss_release_buffer()\fP. .SH "DESCRIPTION" Allows an application to obtain a textual representation of a GSS\-API status code, for display to the user or for logging purposes. Since some status values may indicate multiple conditions, applications may need to call gss_display_status multiple times, each call generating a single text string. The message_context parameter is used by gss_display_status to store state information about which error messages have already been extracted from a given status_value; message_context must be initialized to 0 by the application prior to the first call, and gss_display_status will return a non\-zero value in this parameter if there are further messages to extract. The message_context parameter contains all state information required by gss_display_status in order to extract further messages from the status_value; even when a non\-zero value is returned in this parameter, the application is not required to call gss_display_status again unless subsequent messages are desired. The following code extracts all messages from a given status code and prints them to stderr: \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\- OM_uint32 message_context; OM_uint32 status_code; OM_uint32 maj_status; OM_uint32 min_status; gss_buffer_desc status_string; ... message_context = 0; do { maj_status = gss_display_status ( &min_status, status_code, GSS_C_GSS_CODE, GSS_C_NO_OID, &message_context, &status_string) fprintf(stderr, "%.*s\n", (int)status_string.length, (char *)status_string.value); gss_release_buffer(&min_status, &status_string); } while (message_context != 0); \-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\-\- .SH "RETURN VALUE" `GSS_S_COMPLETE`: Successful completion. `GSS_S_BAD_MECH`: Indicates that translation in accordance with an unsupported mechanism type was requested. `GSS_S_BAD_STATUS`: The status value was not recognized, or the status type was neither GSS_C_GSS_CODE nor GSS_C_MECH_CODE. .SH "REPORTING BUGS" Report bugs to . GNU Generic Security Service home page: http://www.gnu.org/software/gss/ General help using GNU software: http://www.gnu.org/gethelp/ .SH COPYRIGHT Copyright \(co 2003-2013 Simon Josefsson. .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 gss is maintained as a Texinfo manual. If the .B info and .B gss programs are properly installed at your site, the command .IP .B info gss .PP should give you access to the complete manual. gss-1.0.3/doc/man/gss_release_buffer.30000644000000000000000000000337412415507732014444 00000000000000.\" DO NOT MODIFY THIS FILE! It was generated by gdoc. .TH "gss_release_buffer" 3 "1.0.3" "gss" "gss" .SH NAME gss_release_buffer \- API function .SH SYNOPSIS .B #include .sp .BI "OM_uint32 gss_release_buffer(OM_uint32 * " minor_status ", gss_buffer_t " buffer ");" .SH ARGUMENTS .IP "OM_uint32 * minor_status" 12 (integer, modify) Mechanism specific status code. .IP "gss_buffer_t buffer" 12 (buffer, modify) The storage associated with the buffer will be deleted. The gss_buffer_desc object will not be freed, but its length field will be zeroed. .SH "DESCRIPTION" Free storage associated with a buffer. The storage must have been allocated by a GSS\-API routine. In addition to freeing the associated storage, the routine will zero the length field in the descriptor to which the buffer parameter refers, and implementations are encouraged to additionally set the pointer field in the descriptor to NULL. Any buffer object returned by a GSS\-API routine may be passed to gss_release_buffer (even if there is no storage associated with the buffer). .SH "RETURN VALUE" `GSS_S_COMPLETE`: Successful completion. .SH "REPORTING BUGS" Report bugs to . GNU Generic Security Service home page: http://www.gnu.org/software/gss/ General help using GNU software: http://www.gnu.org/gethelp/ .SH COPYRIGHT Copyright \(co 2003-2013 Simon Josefsson. .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 gss is maintained as a Texinfo manual. If the .B info and .B gss programs are properly installed at your site, the command .IP .B info gss .PP should give you access to the complete manual. gss-1.0.3/doc/Makefile.am0000664000000000000000000000342612415506237012013 00000000000000## Process this file with automake to produce Makefile.in # Copyright (C) 2003-2014 Simon Josefsson # # This file is part of the Generic Security Service (GSS). # # GSS 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. # # GSS 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 GSS; if not, see http://www.gnu.org/licenses or write to # the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, # Boston, MA 02110-1301, USA. SUBDIRS = cyclo if ENABLE_GTK_DOC SUBDIRS += reference endif EXTRA_DIST = gss.html gss.ps gss.pdf \ gdoc asciidoc asciidoc.conf texinfo.conf texinfo.css info_TEXINFOS = gss.texi gss_TEXINFOS = fdl-1.3.texi $(gdoc_TEXINFOS) AM_MAKEINFOHTMLFLAGS = --no-split --number-sections --css-include=texinfo.css dist_man_MANS = gss.1 $(gdoc_MANS) MAINTAINERCLEANFILES = $(dist_man_MANS) gss.1: $(top_srcdir)/src/gss.c $(top_srcdir)/src/gss.ggo \ $(top_srcdir)/configure.ac $(HELP2MAN) \ --name="Generic Security Service command line interface" \ --output=$@ $(top_builddir)/src/gss # GDOC GDOC_SRC = $(top_srcdir)/lib/*.c GDOC_TEXI_PREFIX = texi/ GDOC_MAN_PREFIX = man/ GDOC_MAN_EXTRA_ARGS = -module $(PACKAGE) -sourceversion $(VERSION) \ -bugsto $(PACKAGE_BUGREPORT) -includefuncprefix -seeinfo $(PACKAGE) \ -copyright "2003-2013 Simon Josefsson" \ -verbatimcopying -pkg-name "$(PACKAGE_NAME)" include $(srcdir)/Makefile.gdoci gss-1.0.3/doc/Makefile.gdoci0000664000000000000000000000536312415506237012505 00000000000000# -*- makefile -*- # Copyright (C) 2002-2014 Simon Josefsson # # This file is part of the Generic Security Service (GSS). # # GSS 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. # # GSS 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 GSS; if not, see http://www.gnu.org/licenses or write to # the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, # Boston, MA 02110-1301, USA. BUILT_SOURCES = Makefile.gdoc Makefile.gdoc: $(top_builddir)/configure Makefile.am Makefile.gdoci $(GDOC_SRC) echo '# This file is automatically generated. DO NOT EDIT! -*- makefile -*-' > Makefile.gdoc echo >> Makefile.gdoc echo 'gdoc_TEXINFOS =' >> Makefile.gdoc echo 'gdoc_MANS =' >> Makefile.gdoc echo >> Makefile.gdoc for file in $(GDOC_SRC); do \ shortfile=`basename $$file`; \ echo "#" >> Makefile.gdoc; \ echo "### $$shortfile" >> Makefile.gdoc; \ echo "#" >> Makefile.gdoc; \ echo "gdoc_TEXINFOS += $(GDOC_TEXI_PREFIX)$$shortfile.texi" >> Makefile.gdoc; \ echo "$(GDOC_TEXI_PREFIX)$$shortfile.texi: $$file" >> Makefile.gdoc; \ echo 'TABmkdir -p `dirname $$@`' | sed "s/TAB/\t/" >> Makefile.gdoc; \ echo 'TAB$$(PERL) $$(top_srcdir)/doc/gdoc -texinfo $$(GDOC_TEXI_EXTRA_ARGS) $$< > $$@' | sed "s/TAB/\t/" >> Makefile.gdoc; \ echo >> Makefile.gdoc; \ functions=`$(PERL) $(srcdir)/gdoc -listfunc $$file`; \ for function in $$functions; do \ echo "# $$shortfile: $$function" >> Makefile.gdoc; \ echo "gdoc_TEXINFOS += $(GDOC_TEXI_PREFIX)$$function.texi" >> Makefile.gdoc; \ echo "$(GDOC_TEXI_PREFIX)$$function.texi: $$file" >> Makefile.gdoc; \ echo 'TABmkdir -p `dirname $$@`' | sed "s/TAB/\t/" >> Makefile.gdoc; \ echo 'TAB$$(PERL) $$(top_srcdir)/doc/gdoc -texinfo $$(GDOC_TEXI_EXTRA_ARGS) -function'" $$function"' $$< > $$@' | sed "s/TAB/\t/" >> Makefile.gdoc; \ echo >> Makefile.gdoc; \ echo "gdoc_MANS += $(GDOC_MAN_PREFIX)$$function.3" >> Makefile.gdoc; \ echo "$(GDOC_MAN_PREFIX)$$function.3: $$file" >> Makefile.gdoc; \ echo 'TABmkdir -p `dirname $$@`' | sed "s/TAB/\t/" >> Makefile.gdoc; \ echo 'TAB$$(PERL) $$(top_srcdir)/doc/gdoc -man $$(GDOC_MAN_EXTRA_ARGS) -function'" $$function"' $$< > $$@' | sed "s/TAB/\t/" >> Makefile.gdoc; \ echo >> Makefile.gdoc; \ done; \ echo >> Makefile.gdoc; \ done $(MAKE) Makefile include Makefile.gdoc gss-1.0.3/doc/texinfo.conf0000664000000000000000000000132512012453517012271 00000000000000# # texinfo.conf # # Asciidoc global configuration file. # Texinfo backend. # [miscellaneous] outfilesuffix=.texi newline=\n [specialcharacters] # Override SGML special chars. &=& <=< >=> # Texinfo special chars. @=@@ {=@{ }=@} [tags] ilist=@itemize @bullet|@end itemize ilistitem=| ilisttext=@item| vlist=@table @asis|@end table vlistentry=| vlisttext=| vlistterm=@item| vlistitem=| # Quoted text. emphasis=@emph\{|\} strong=@strong\{|\} monospaced=@code\{|\} # Special word substitution. [emphasizedwords] @emph\{{words}\} [monospacedwords] @strong\{{words}\} [strongwords] @code\{{words}\} # Paragraph substitution. [paragraph] | [indentedparagraph] @display | @end display [verbatimblock] @example | @end example gss-1.0.3/doc/reference/0000755000000000000000000000000012415510376011765 500000000000000gss-1.0.3/doc/reference/gss-sections.txt0000644000000000000000000000767712415510376015110 00000000000000
api gss_ctx_id_t gss_cred_id_t gss_name_t gss_uint32 OM_uint32 gss_qop_t gss_cred_usage_t GSS_C_DELEG_FLAG GSS_C_MUTUAL_FLAG GSS_C_REPLAY_FLAG GSS_C_SEQUENCE_FLAG GSS_C_CONF_FLAG GSS_C_INTEG_FLAG GSS_C_ANON_FLAG GSS_C_PROT_READY_FLAG GSS_C_TRANS_FLAG GSS_C_BOTH GSS_C_INITIATE GSS_C_ACCEPT GSS_C_GSS_CODE GSS_C_MECH_CODE GSS_C_AF_UNSPEC GSS_C_AF_LOCAL GSS_C_AF_INET GSS_C_AF_IMPLINK GSS_C_AF_PUP GSS_C_AF_CHAOS GSS_C_AF_NS GSS_C_AF_NBS GSS_C_AF_ECMA GSS_C_AF_DATAKIT GSS_C_AF_CCITT GSS_C_AF_SNA GSS_C_AF_DECnet GSS_C_AF_DLI GSS_C_AF_LAT GSS_C_AF_HYLINK GSS_C_AF_APPLETALK GSS_C_AF_BSC GSS_C_AF_DSS GSS_C_AF_OSI GSS_C_AF_X25 GSS_C_AF_NULLADDR GSS_C_NO_NAME GSS_C_NO_BUFFER GSS_C_NO_OID GSS_C_NO_OID_SET GSS_C_NO_CONTEXT GSS_C_NO_CREDENTIAL GSS_C_NO_CHANNEL_BINDINGS GSS_C_EMPTY_BUFFER GSS_C_NULL_OID GSS_C_NULL_OID_SET GSS_C_QOP_DEFAULT GSS_C_INDEFINITE GSS_C_NT_USER_NAME GSS_C_NT_MACHINE_UID_NAME GSS_C_NT_STRING_UID_NAME GSS_C_NT_HOSTBASED_SERVICE_X GSS_C_NT_HOSTBASED_SERVICE GSS_C_NT_ANONYMOUS GSS_C_NT_EXPORT_NAME GSS_S_COMPLETE GSS_C_CALLING_ERROR_OFFSET GSS_C_ROUTINE_ERROR_OFFSET GSS_C_SUPPLEMENTARY_OFFSET GSS_C_CALLING_ERROR_MASK GSS_C_ROUTINE_ERROR_MASK GSS_C_SUPPLEMENTARY_MASK GSS_CALLING_ERROR GSS_ROUTINE_ERROR GSS_SUPPLEMENTARY_INFO GSS_ERROR GSS_S_CALL_INACCESSIBLE_READ GSS_S_CALL_INACCESSIBLE_WRITE GSS_S_CALL_BAD_STRUCTURE GSS_S_BAD_MECH GSS_S_BAD_NAME GSS_S_BAD_NAMETYPE GSS_S_BAD_BINDINGS GSS_S_BAD_STATUS GSS_S_BAD_SIG GSS_S_BAD_MIC GSS_S_NO_CRED GSS_S_NO_CONTEXT GSS_S_DEFECTIVE_TOKEN GSS_S_DEFECTIVE_CREDENTIAL GSS_S_CREDENTIALS_EXPIRED GSS_S_CONTEXT_EXPIRED GSS_S_FAILURE GSS_S_BAD_QOP GSS_S_UNAUTHORIZED GSS_S_UNAVAILABLE GSS_S_DUPLICATE_ELEMENT GSS_S_NAME_NOT_MN GSS_S_CONTINUE_NEEDED GSS_S_DUPLICATE_TOKEN GSS_S_OLD_TOKEN GSS_S_UNSEQ_TOKEN GSS_S_GAP_TOKEN gss_acquire_cred gss_release_cred gss_init_sec_context gss_accept_sec_context gss_process_context_token gss_delete_sec_context gss_context_time gss_get_mic gss_verify_mic gss_wrap gss_unwrap gss_display_status gss_indicate_mechs gss_compare_name gss_display_name gss_import_name gss_export_name gss_release_name gss_release_buffer gss_release_oid_set gss_inquire_cred gss_inquire_context gss_wrap_size_limit gss_add_cred gss_inquire_cred_by_mech gss_export_sec_context gss_import_sec_context gss_create_empty_oid_set gss_add_oid_set_member gss_test_oid_set_member gss_inquire_names_for_mech gss_inquire_mechs_for_name gss_canonicalize_name gss_duplicate_name gss_sign gss_verify gss_seal gss_unseal gss_inquire_saslname_for_mech gss_inquire_mech_for_saslname gss_const_buffer_t gss_const_ctx_id_t gss_const_cred_id_t gss_const_name_t gss_const_OID gss_const_OID_set gss_oid_equal gss_encapsulate_token gss_decapsulate_token
ext gss_check_version gss_userok GSS_C_NT_USER_NAME_static GSS_C_NT_MACHINE_UID_NAME_static GSS_C_NT_STRING_UID_NAME_static GSS_C_NT_HOSTBASED_SERVICE_X_static GSS_C_NT_HOSTBASED_SERVICE_static GSS_C_NT_ANONYMOUS_static GSS_C_NT_EXPORT_NAME_static
gss GSS_VERSION GSS_VERSION_MAJOR GSS_VERSION_MINOR GSS_VERSION_PATCH GSS_VERSION_NUMBER
krb5 GSS_KRB5_S_G_BAD_SERVICE_NAME GSS_KRB5_S_G_BAD_STRING_UID GSS_KRB5_S_G_NOUSER GSS_KRB5_S_G_VALIDATE_FAILED GSS_KRB5_S_G_BUFFER_ALLOC GSS_KRB5_S_G_BAD_MSG_CTX GSS_KRB5_S_G_WRONG_SIZE GSS_KRB5_S_G_BAD_USAGE GSS_KRB5_S_G_UNKNOWN_QOP GSS_KRB5_S_KG_CCACHE_NOMATCH GSS_KRB5_S_KG_KEYTAB_NOMATCH GSS_KRB5_S_KG_TGT_MISSING GSS_KRB5_S_KG_NO_SUBKEY GSS_KRB5_S_KG_CONTEXT_ESTABLISHED GSS_KRB5_S_KG_BAD_SIGN_TYPE GSS_KRB5_S_KG_BAD_LENGTH GSS_KRB5_S_KG_CTX_INCOMPLETE GSS_KRB5_NT_USER_NAME GSS_KRB5_NT_HOSTBASED_SERVICE_NAME GSS_KRB5_NT_PRINCIPAL_NAME GSS_KRB5_NT_MACHINE_UID_NAME GSS_KRB5_NT_STRING_UID_NAME
krb5-ext GSS_KRB5 GSS_KRB5_static GSS_KRB5_NT_USER_NAME_static GSS_KRB5_NT_HOSTBASED_SERVICE_NAME_static GSS_KRB5_NT_PRINCIPAL_NAME_static GSS_KRB5_NT_MACHINE_UID_NAME_static GSS_KRB5_NT_STRING_UID_NAME_static
gss-1.0.3/doc/reference/Makefile.am0000664000000000000000000000724212012455030013734 00000000000000## 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. # gtk-doc will search all .c and .h files beneath these paths # for inline comments documenting functions and macros. # e.g. DOC_SOURCE_DIR=$(top_srcdir)/gtk $(top_srcdir)/gdk DOC_SOURCE_DIR=$(top_srcdir)/lib # Extra options to pass to gtkdoc-scangobj. Not normally needed. SCANGOBJ_OPTIONS= # Extra options to supply to gtkdoc-scan. # e.g. SCAN_OPTIONS=--deprecated-guards="GTK_DISABLE_DEPRECATED" SCAN_OPTIONS= # Extra options to supply to gtkdoc-mkdb. # e.g. MKDB_OPTIONS=--xml-mode --output-format=xml MKDB_OPTIONS=--xml-mode --output-format=xml # Extra options to supply to gtkdoc-mktmpl # e.g. MKTMPL_OPTIONS=--only-section-tmpl MKTMPL_OPTIONS= # Extra options to supply to gtkdoc-mkhtml MKHTML_OPTIONS= # Extra options to supply to gtkdoc-fixref. Not normally needed. # e.g. FIXXREF_OPTIONS=--extra-dir=../gdk-pixbuf/html --extra-dir=../gdk/html FIXXREF_OPTIONS= # Used for dependencies. The docs will be rebuilt if any of these change. # e.g. HFILE_GLOB=$(top_srcdir)/gtk/*.h # e.g. CFILE_GLOB=$(top_srcdir)/gtk/*.c HFILE_GLOB=$(top_srcdir)/lib/*.h CFILE_GLOB=$(top_srcdir)/lib/*.c # Extra header to include when scanning, which are not under DOC_SOURCE_DIR # e.g. EXTRA_HFILES=$(top_srcdir}/contrib/extra.h EXTRA_HFILES= # Header files or dirs to ignore when scanning. Use base file/dir names # e.g. IGNORE_HFILES=gtkdebug.h gtkintl.h private_code #echo `find lib -name \*.h|grep -v ^lib/headers|sed 's,.*/,,'|sort` IGNORE_HFILES=arg-nonnull.h c++defs.h checksum.h gettext.h internal.h \ k5internal.h meta.h protos.h stddef.in.h string.h string.in.h \ warn-on-use.h # 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 'make check' to test you doc status # and run some sanity checks if ENABLE_GTK_DOC TESTS_ENVIRONMENT = cd $(srcdir) && \ DOC_MODULE=$(DOC_MODULE) DOC_MAIN_SGML_FILE=$(DOC_MAIN_SGML_FILE) \ SRCDIR=$(abs_srcdir) BUILDDIR=$(abs_builddir) #TESTS = $(GTKDOC_CHECK) endif -include $(top_srcdir)/git.mk gss-1.0.3/doc/reference/gss.types0000644000000000000000000000000012415510376013555 00000000000000gss-1.0.3/doc/reference/gss-docs.sgml0000664000000000000000000000346612012453517014322 00000000000000 ]> GNU Generic Security Service (GSS) API Reference Manual for GNU GSS &version;. The latest version of this documentation can be found on-line at https://www.gnu.org/software/gss/reference/. GNU Generic Security Service (GSS) API Reference Manual GSS is an implementation of the Generic Security Service Application Program Interface (GSS-API). GSS-API is used by network servers to provide security services, e.g., to authenticate SMTP/IMAP clients against SMTP/IMAP servers. GSS consists of a library and a manual. GSS is developed for the GNU/Linux system, but runs on over 20 platforms including most major Unix platforms and Windows, and many kind of devices including iPAQ handhelds and S/390 mainframes. GSS is a GNU project, and is licensed under the GNU General Public License version 3 or later. API Index gss-1.0.3/doc/reference/html/0000755000000000000000000000000012415510376012731 500000000000000gss-1.0.3/doc/reference/html/style.css0000644000000000000000000002077012415510376014531 00000000000000body { font-family: cantarell, sans-serif; } .synopsis, .classsynopsis { /* tango:aluminium 1/2 */ background: #eeeeec; background: rgba(238, 238, 236, 0.5); border: solid 1px rgb(238, 238, 236); padding: 0.5em; } .programlisting { /* tango:sky blue 0/1 */ /* fallback for no rgba support */ background: #e6f3ff; border: solid 1px #729fcf; background: rgba(114, 159, 207, 0.1); border: solid 1px rgba(114, 159, 207, 0.2); padding: 0.5em; } .variablelist { padding: 4px; margin-left: 3em; } .variablelist td:first-child { vertical-align: top; } div.gallery-float { float: left; padding: 10px; } div.gallery-float img { border-style: none; } div.gallery-spacer { clear: both; } a, a:visited { text-decoration: none; /* tango:sky blue 2 */ color: #3465a4; } a:hover { text-decoration: underline; /* tango:sky blue 1 */ color: #729fcf; } div.informaltable table { border-collapse: separate; border-spacing: 1em 0.5em; border: none; } div.informaltable table td, div.informaltable table th { vertical-align: top; } .function_type, .variable_type, .property_type, .signal_type, .parameter_name, .struct_member_name, .union_member_name, .define_keyword, .datatype_keyword, .typedef_keyword { text-align: right; } /* dim non-primary columns */ .c_punctuation, .function_type, .variable_type, .property_type, .signal_type, .define_keyword, .datatype_keyword, .typedef_keyword, .property_flags, .signal_flags, .parameter_annotations, .enum_member_annotations, .struct_member_annotations, .union_member_annotations { color: #888a85; } .function_type a, .function_type a:visited, .function_type a:hover, .property_type a, .property_type a:visited, .property_type a:hover, .signal_type a, .signal_type a:visited, .signal_type a:hover, .signal_flags a, .signal_flags a:visited, .signal_flags a:hover { color: #729fcf; } td p { margin: 0.25em; } div.table table { border-collapse: collapse; border-spacing: 0px; /* tango:aluminium 3 */ border: solid 1px #babdb6; } div.table table td, div.table table th { /* tango:aluminium 3 */ border: solid 1px #babdb6; padding: 3px; vertical-align: top; } div.table table th { /* tango:aluminium 2 */ background-color: #d3d7cf; } h4 { color: #555753; } hr { /* tango:aluminium 1 */ color: #d3d7cf; background: #d3d7cf; border: none 0px; height: 1px; clear: both; margin: 2.0em 0em 2.0em 0em; } dl.toc dt { padding-bottom: 0.25em; } dl.toc > dd > dl > dt { padding-top: 0.25em; padding-bottom: 0.25em; } dl.toc > dt { padding-top: 1em; padding-bottom: 0.5em; font-weight: bold; } .parameter { font-style: normal; } .footer { padding-top: 3.5em; /* tango:aluminium 3 */ color: #babdb6; text-align: center; font-size: 80%; } .informalfigure, .figure { margin: 1em; } .informalexample, .example { margin-top: 1em; margin-bottom: 1em; } .warning { /* tango:orange 0/1 */ background: #ffeed9; background: rgba(252, 175, 62, 0.1); border-color: #ffb04f; border-color: rgba(252, 175, 62, 0.2); } .note { /* tango:chameleon 0/0.5 */ background: #d8ffb2; background: rgba(138, 226, 52, 0.1); border-color: #abf562; border-color: rgba(138, 226, 52, 0.2); } div.blockquote { border-color: #eeeeec; } .note, .warning, div.blockquote { padding: 0.5em; border-width: 1px; border-style: solid; margin: 2em; } .note p, .warning p { margin: 0; } div.warning h3.title, div.note h3.title { display: none; } p + div.section { margin-top: 1em; } div.refnamediv, div.refsynopsisdiv, div.refsect1, div.refsect2, div.toc, div.section { margin-bottom: 1em; } /* blob links */ h2 .extralinks, h3 .extralinks { float: right; /* tango:aluminium 3 */ color: #babdb6; font-size: 80%; font-weight: normal; } .lineart { color: #d3d7cf; font-weight: normal; } .annotation { /* tango:aluminium 5 */ color: #555753; font-weight: normal; } .structfield { font-style: normal; font-weight: normal; } acronym,abbr { border-bottom: 1px dotted gray; } /* code listings */ .listing_code .programlisting .normal, .listing_code .programlisting .normal a, .listing_code .programlisting .number, .listing_code .programlisting .cbracket, .listing_code .programlisting .symbol { color: #555753; } .listing_code .programlisting .comment, .listing_code .programlisting .linenum { color: #babdb6; } /* tango: aluminium 3 */ .listing_code .programlisting .function, .listing_code .programlisting .function a, .listing_code .programlisting .preproc { color: #204a87; } /* tango: sky blue 3 */ .listing_code .programlisting .string { color: #ad7fa8; } /* tango: plum */ .listing_code .programlisting .keyword, .listing_code .programlisting .usertype, .listing_code .programlisting .type, .listing_code .programlisting .type a { color: #4e9a06; } /* tango: chameleon 3 */ .listing_frame { /* tango:sky blue 1 */ border: solid 1px #729fcf; border: solid 1px rgba(114, 159, 207, 0.2); padding: 0px; } .listing_lines, .listing_code { margin-top: 0px; margin-bottom: 0px; padding: 0.5em; } .listing_lines { /* tango:sky blue 0.5 */ background: #a6c5e3; background: rgba(114, 159, 207, 0.2); /* tango:aluminium 6 */ color: #2e3436; } .listing_code { /* tango:sky blue 0 */ background: #e6f3ff; background: rgba(114, 159, 207, 0.1); } .listing_code .programlisting { /* override from previous */ border: none 0px; padding: 0px; background: none; } .listing_lines pre, .listing_code pre { margin: 0px; } @media screen { 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] { display: inline-block; position: relative; top:-5em; } /* this seems to be a bug in the xsl style sheets when generating indexes */ div.index div.index { top: 0em; } /* make space for the fixed navigation bar and add space at the bottom so that * link targets appear somewhat close to top */ body { padding-top: 2.5em; padding-bottom: 500px; max-width: 60em; } p { max-width: 60em; } /* style and size the navigation bar */ table.navigation#top { position: fixed; background: #e2e2e2; border-bottom: solid 1px #babdb6; border-spacing: 5px; margin-top: 0; margin-bottom: 0; top: 0; left: 0; z-index: 10; } table.navigation#top td { padding-left: 6px; padding-right: 6px; } .navigation a, .navigation a:visited { /* tango:sky blue 3 */ color: #204a87; } .navigation a:hover { /* tango:sky blue 2 */ color: #3465a4; } td.shortcuts { /* tango:sky blue 2 */ color: #3465a4; font-size: 80%; white-space: nowrap; } td.shortcuts .dim { color: #babdb6; } .navigation .title { font-size: 80%; max-width: none; margin: 0px; font-weight: normal; } } @media screen and (min-width: 60em) { /* screen larger than 60em */ body { margin: auto; } } @media screen and (max-width: 60em) { /* screen less than 60em */ #nav_hierarchy { display: none; } #nav_interfaces { display: none; } #nav_prerequisites { display: none; } #nav_derived_interfaces { display: none; } #nav_implementations { display: none; } #nav_child_properties { display: none; } #nav_style_properties { display: none; } #nav_index { display: none; } #nav_glossary { display: none; } .gallery_image { display: none; } .property_flags { display: none; } .signal_flags { display: none; } .parameter_annotations { display: none; } .enum_member_annotations { display: none; } .struct_member_annotations { display: none; } .union_member_annotations { display: none; } /* now that a column is hidden, optimize space */ col.parameters_name { width: auto; } col.parameters_description { width: auto; } col.struct_members_name { width: auto; } col.struct_members_description { width: auto; } col.enum_members_name { width: auto; } col.enum_members_description { width: auto; } col.union_members_name { width: auto; } col.union_members_description { width: auto; } .listing_lines { display: none; } } @media print { table.navigation { visibility: collapse; display: none; } div.titlepage table.navigation { visibility: visible; display: table; background: #e2e2e2; border: solid 1px #babdb6; margin-top: 0; margin-bottom: 0; top: 0; left: 0; height: 3em; } } gss-1.0.3/doc/reference/html/gss-ext.html0000644000000000000000000002250712415510376015137 00000000000000 GNU Generic Security Service (GSS) API Reference Manual: ext

ext

ext

Functions

const char * gss_check_version ()
int gss_userok ()

Types and Values

extern gss_OID_desc GSS_C_NT_USER_NAME_static
extern gss_OID_desc GSS_C_NT_MACHINE_UID_NAME_static
extern gss_OID_desc GSS_C_NT_STRING_UID_NAME_static
extern gss_OID_desc GSS_C_NT_HOSTBASED_SERVICE_X_static
extern gss_OID_desc GSS_C_NT_HOSTBASED_SERVICE_static
extern gss_OID_desc GSS_C_NT_ANONYMOUS_static
extern gss_OID_desc GSS_C_NT_EXPORT_NAME_static

Description

Functions

gss_check_version ()

const char *
gss_check_version (const char *req_version);

Check that the version of the library is at minimum the one given as a string in req_version .

WARNING: This function is a GNU GSS specific extension, and is not part of the official GSS API.

Parameters

req_version

version string to compare with, or NULL

 

Returns

The actual version string of the library; NULL if the condition is not met. If NULL is passed to this function no check is done and only the version string is returned.


gss_userok ()

int
gss_userok (const gss_name_t name,
            const char *username);

Compare the username against the output from gss_export_name() invoked on name , after removing the leading OID. This answers the question whether the particular mechanism would authenticate them as the same principal

WARNING: This function is a GNU GSS specific extension, and is not part of the official GSS API.

Parameters

name

(gss_name_t, read) Name to be compared.

 

username

Zero terminated string with username.

 

Returns

Returns 0 if the names match, non-0 otherwise.

Types and Values

GSS_C_NT_USER_NAME_static

extern gss_OID_desc GSS_C_NT_USER_NAME_static;


GSS_C_NT_MACHINE_UID_NAME_static

extern gss_OID_desc GSS_C_NT_MACHINE_UID_NAME_static;


GSS_C_NT_STRING_UID_NAME_static

extern gss_OID_desc GSS_C_NT_STRING_UID_NAME_static;


GSS_C_NT_HOSTBASED_SERVICE_X_static

extern gss_OID_desc GSS_C_NT_HOSTBASED_SERVICE_X_static;


GSS_C_NT_HOSTBASED_SERVICE_static

extern gss_OID_desc GSS_C_NT_HOSTBASED_SERVICE_static;


GSS_C_NT_ANONYMOUS_static

extern gss_OID_desc GSS_C_NT_ANONYMOUS_static;


GSS_C_NT_EXPORT_NAME_static

extern gss_OID_desc GSS_C_NT_EXPORT_NAME_static;

gss-1.0.3/doc/reference/html/gss.devhelp20000644000000000000000000004712212415510376015106 00000000000000 gss-1.0.3/doc/reference/html/gss-gss.html0000644000000000000000000001243112415510376015126 00000000000000 GNU Generic Security Service (GSS) API Reference Manual: gss

gss

gss

Types and Values

Description

Functions

Types and Values

GSS_VERSION

# define GSS_VERSION "1.0.3"

Pre-processor symbol with a string that describe the header file version number. Used together with gss_check_version() to verify header file and run-time library consistency.


GSS_VERSION_MAJOR

# define GSS_VERSION_MAJOR 1

Pre-processor symbol with a decimal value that describe the major level of the header file version number. For example, when the header version is 1.2.3 this symbol will be 1.


GSS_VERSION_MINOR

# define GSS_VERSION_MINOR 0

Pre-processor symbol with a decimal value that describe the minor level of the header file version number. For example, when the header version is 1.2.3 this symbol will be 2.


GSS_VERSION_PATCH

# define GSS_VERSION_PATCH 3

Pre-processor symbol with a decimal value that describe the patch level of the header file version number. For example, when the header version is 1.2.3 this symbol will be 3.


GSS_VERSION_NUMBER

# define GSS_VERSION_NUMBER 0x010003

Pre-processor symbol with a hexadecimal value describing the header file version number. For example, when the header version is 1.2.3 this symbol will have the value 0x010203.

gss-1.0.3/doc/reference/html/api-index-full.html0000644000000000000000000012345012415510376016362 00000000000000 GNU Generic Security Service (GSS) API Reference Manual: API Index

API Index

A

gss_accept_sec_context, function in api
gss_acquire_cred, function in api
gss_add_cred, function in api
gss_add_oid_set_member, function in api

C

GSS_CALLING_ERROR, macro in api
gss_canonicalize_name, function in api
gss_check_version, function in ext
gss_compare_name, function in api
gss_const_buffer_t, typedef in api
gss_const_cred_id_t, typedef in api
gss_const_ctx_id_t, typedef in api
gss_const_name_t, typedef in api
gss_const_OID, typedef in api
gss_const_OID_set, typedef in api
gss_context_time, function in api
gss_create_empty_oid_set, function in api
gss_cred_id_t, typedef in api
gss_cred_usage_t, typedef in api
gss_ctx_id_t, typedef in api
GSS_C_ACCEPT, macro in api
GSS_C_AF_APPLETALK, macro in api
GSS_C_AF_BSC, macro in api
GSS_C_AF_CCITT, macro in api
GSS_C_AF_CHAOS, macro in api
GSS_C_AF_DATAKIT, macro in api
GSS_C_AF_DECnet, macro in api
GSS_C_AF_DLI, macro in api
GSS_C_AF_DSS, macro in api
GSS_C_AF_ECMA, macro in api
GSS_C_AF_HYLINK, macro in api
GSS_C_AF_IMPLINK, macro in api
GSS_C_AF_INET, macro in api
GSS_C_AF_LAT, macro in api
GSS_C_AF_LOCAL, macro in api
GSS_C_AF_NBS, macro in api
GSS_C_AF_NS, macro in api
GSS_C_AF_NULLADDR, macro in api
GSS_C_AF_OSI, macro in api
GSS_C_AF_PUP, macro in api
GSS_C_AF_SNA, macro in api
GSS_C_AF_UNSPEC, macro in api
GSS_C_AF_X25, macro in api
GSS_C_ANON_FLAG, macro in api
GSS_C_BOTH, macro in api
GSS_C_CALLING_ERROR_MASK, macro in api
GSS_C_CALLING_ERROR_OFFSET, macro in api
GSS_C_CONF_FLAG, macro in api
GSS_C_DELEG_FLAG, macro in api
GSS_C_EMPTY_BUFFER, macro in api
GSS_C_GSS_CODE, macro in api
GSS_C_INDEFINITE, macro in api
GSS_C_INITIATE, macro in api
GSS_C_INTEG_FLAG, macro in api
GSS_C_MECH_CODE, macro in api
GSS_C_MUTUAL_FLAG, macro in api
GSS_C_NO_BUFFER, macro in api
GSS_C_NO_CHANNEL_BINDINGS, macro in api
GSS_C_NO_CONTEXT, macro in api
GSS_C_NO_CREDENTIAL, macro in api
GSS_C_NO_NAME, macro in api
GSS_C_NO_OID, macro in api
GSS_C_NO_OID_SET, macro in api
GSS_C_NT_ANONYMOUS, variable in api
GSS_C_NT_ANONYMOUS_static, variable in ext
GSS_C_NT_EXPORT_NAME, variable in api
GSS_C_NT_EXPORT_NAME_static, variable in ext
GSS_C_NT_HOSTBASED_SERVICE, variable in api
GSS_C_NT_HOSTBASED_SERVICE_static, variable in ext
GSS_C_NT_HOSTBASED_SERVICE_X, variable in api
GSS_C_NT_HOSTBASED_SERVICE_X_static, variable in ext
GSS_C_NT_MACHINE_UID_NAME, variable in api
GSS_C_NT_MACHINE_UID_NAME_static, variable in ext
GSS_C_NT_STRING_UID_NAME, variable in api
GSS_C_NT_STRING_UID_NAME_static, variable in ext
GSS_C_NT_USER_NAME, variable in api
GSS_C_NT_USER_NAME_static, variable in ext
GSS_C_NULL_OID, macro in api
GSS_C_NULL_OID_SET, macro in api
GSS_C_PROT_READY_FLAG, macro in api
GSS_C_QOP_DEFAULT, macro in api
GSS_C_REPLAY_FLAG, macro in api
GSS_C_ROUTINE_ERROR_MASK, macro in api
GSS_C_ROUTINE_ERROR_OFFSET, macro in api
GSS_C_SEQUENCE_FLAG, macro in api
GSS_C_SUPPLEMENTARY_MASK, macro in api
GSS_C_SUPPLEMENTARY_OFFSET, macro in api
GSS_C_TRANS_FLAG, macro in api

D

gss_decapsulate_token, function in api
gss_delete_sec_context, function in api
gss_display_name, function in api
gss_display_status, function in api
gss_duplicate_name, function in api

E

gss_encapsulate_token, function in api
GSS_ERROR, macro in api
gss_export_name, function in api
gss_export_sec_context, function in api

G

gss_get_mic, function in api

I

gss_import_name, function in api
gss_import_sec_context, function in api
gss_indicate_mechs, function in api
gss_init_sec_context, function in api
gss_inquire_context, function in api
gss_inquire_cred, function in api
gss_inquire_cred_by_mech, function in api
gss_inquire_mechs_for_name, function in api
gss_inquire_mech_for_saslname, function in api
gss_inquire_names_for_mech, function in api
gss_inquire_saslname_for_mech, function in api

K

GSS_KRB5, variable in krb5-ext
GSS_KRB5_NT_HOSTBASED_SERVICE_NAME, variable in krb5
GSS_KRB5_NT_HOSTBASED_SERVICE_NAME_static, variable in krb5-ext
GSS_KRB5_NT_MACHINE_UID_NAME, variable in krb5
GSS_KRB5_NT_MACHINE_UID_NAME_static, variable in krb5-ext
GSS_KRB5_NT_PRINCIPAL_NAME, variable in krb5
GSS_KRB5_NT_PRINCIPAL_NAME_static, variable in krb5-ext
GSS_KRB5_NT_STRING_UID_NAME, variable in krb5
GSS_KRB5_NT_STRING_UID_NAME_static, variable in krb5-ext
GSS_KRB5_NT_USER_NAME, variable in krb5
GSS_KRB5_NT_USER_NAME_static, variable in krb5-ext
GSS_KRB5_static, variable in krb5-ext
GSS_KRB5_S_G_BAD_MSG_CTX, macro in krb5
GSS_KRB5_S_G_BAD_SERVICE_NAME, macro in krb5
GSS_KRB5_S_G_BAD_STRING_UID, macro in krb5
GSS_KRB5_S_G_BAD_USAGE, macro in krb5
GSS_KRB5_S_G_BUFFER_ALLOC, macro in krb5
GSS_KRB5_S_G_NOUSER, macro in krb5
GSS_KRB5_S_G_UNKNOWN_QOP, macro in krb5
GSS_KRB5_S_G_VALIDATE_FAILED, macro in krb5
GSS_KRB5_S_G_WRONG_SIZE, macro in krb5
GSS_KRB5_S_KG_BAD_LENGTH, macro in krb5
GSS_KRB5_S_KG_BAD_SIGN_TYPE, macro in krb5
GSS_KRB5_S_KG_CCACHE_NOMATCH, macro in krb5
GSS_KRB5_S_KG_CONTEXT_ESTABLISHED, macro in krb5
GSS_KRB5_S_KG_CTX_INCOMPLETE, macro in krb5
GSS_KRB5_S_KG_KEYTAB_NOMATCH, macro in krb5
GSS_KRB5_S_KG_NO_SUBKEY, macro in krb5
GSS_KRB5_S_KG_TGT_MISSING, macro in krb5

N

gss_name_t, typedef in api

O

gss_oid_equal, function in api
OM_uint32, typedef in api

P

gss_process_context_token, function in api

Q

gss_qop_t, typedef in api

R

gss_release_buffer, function in api
gss_release_cred, function in api
gss_release_name, function in api
gss_release_oid_set, function in api
GSS_ROUTINE_ERROR, macro in api

S

gss_seal, function in api
gss_sign, function in api
GSS_SUPPLEMENTARY_INFO, macro in api
GSS_S_BAD_BINDINGS, macro in api
GSS_S_BAD_MECH, macro in api
GSS_S_BAD_MIC, macro in api
GSS_S_BAD_NAME, macro in api
GSS_S_BAD_NAMETYPE, macro in api
GSS_S_BAD_QOP, macro in api
GSS_S_BAD_SIG, macro in api
GSS_S_BAD_STATUS, macro in api
GSS_S_CALL_BAD_STRUCTURE, macro in api
GSS_S_CALL_INACCESSIBLE_READ, macro in api
GSS_S_CALL_INACCESSIBLE_WRITE, macro in api
GSS_S_COMPLETE, macro in api
GSS_S_CONTEXT_EXPIRED, macro in api
GSS_S_CONTINUE_NEEDED, macro in api
GSS_S_CREDENTIALS_EXPIRED, macro in api
GSS_S_DEFECTIVE_CREDENTIAL, macro in api
GSS_S_DEFECTIVE_TOKEN, macro in api
GSS_S_DUPLICATE_ELEMENT, macro in api
GSS_S_DUPLICATE_TOKEN, macro in api
GSS_S_FAILURE, macro in api
GSS_S_GAP_TOKEN, macro in api
GSS_S_NAME_NOT_MN, macro in api
GSS_S_NO_CONTEXT, macro in api
GSS_S_NO_CRED, macro in api
GSS_S_OLD_TOKEN, macro in api
GSS_S_UNAUTHORIZED, macro in api
GSS_S_UNAVAILABLE, macro in api
GSS_S_UNSEQ_TOKEN, macro in api

T

gss_test_oid_set_member, function in api

U

gss_uint32, typedef in api
gss_unseal, function in api
gss_unwrap, function in api
gss_userok, function in ext

V

gss_verify, function in api
gss_verify_mic, function in api
GSS_VERSION, macro in gss
GSS_VERSION_MAJOR, macro in gss
GSS_VERSION_MINOR, macro in gss
GSS_VERSION_NUMBER, macro in gss
GSS_VERSION_PATCH, macro in gss

W

gss_wrap, function in api
gss_wrap_size_limit, function in api
gss-1.0.3/doc/reference/html/gss-api.html0000644000000000000000000073733512415510376015124 00000000000000 GNU Generic Security Service (GSS) API Reference Manual: api

api

api

Functions

#define GSS_C_NO_NAME
#define GSS_C_NO_BUFFER
#define GSS_C_NO_OID
#define GSS_C_NO_OID_SET
#define GSS_C_NO_CONTEXT
#define GSS_C_NO_CREDENTIAL
#define GSS_C_NO_CHANNEL_BINDINGS
#define GSS_CALLING_ERROR()
#define GSS_ROUTINE_ERROR()
#define GSS_SUPPLEMENTARY_INFO()
#define GSS_ERROR()
#define GSS_S_BAD_MECH
#define GSS_S_BAD_NAME
#define GSS_S_BAD_NAMETYPE
#define GSS_S_BAD_BINDINGS
#define GSS_S_BAD_STATUS
#define GSS_S_BAD_SIG
#define GSS_S_NO_CRED
#define GSS_S_NO_CONTEXT
#define GSS_S_DEFECTIVE_TOKEN
#define GSS_S_DEFECTIVE_CREDENTIAL
#define GSS_S_CREDENTIALS_EXPIRED
#define GSS_S_CONTEXT_EXPIRED
#define GSS_S_FAILURE
#define GSS_S_BAD_QOP
#define GSS_S_UNAUTHORIZED
#define GSS_S_UNAVAILABLE
#define GSS_S_DUPLICATE_ELEMENT
#define GSS_S_NAME_NOT_MN
OM_uint32 gss_acquire_cred ()
OM_uint32 gss_release_cred ()
OM_uint32 gss_init_sec_context ()
OM_uint32 gss_accept_sec_context ()
OM_uint32 gss_process_context_token ()
OM_uint32 gss_delete_sec_context ()
OM_uint32 gss_context_time ()
OM_uint32 gss_get_mic ()
OM_uint32 gss_verify_mic ()
OM_uint32 gss_wrap ()
OM_uint32 gss_unwrap ()
OM_uint32 gss_display_status ()
OM_uint32 gss_indicate_mechs ()
OM_uint32 gss_compare_name ()
OM_uint32 gss_display_name ()
OM_uint32 gss_import_name ()
OM_uint32 gss_export_name ()
OM_uint32 gss_release_name ()
OM_uint32 gss_release_buffer ()
OM_uint32 gss_release_oid_set ()
OM_uint32 gss_inquire_cred ()
OM_uint32 gss_inquire_context ()
OM_uint32 gss_wrap_size_limit ()
OM_uint32 gss_add_cred ()
OM_uint32 gss_inquire_cred_by_mech ()
OM_uint32 gss_export_sec_context ()
OM_uint32 gss_import_sec_context ()
OM_uint32 gss_create_empty_oid_set ()
OM_uint32 gss_add_oid_set_member ()
OM_uint32 gss_test_oid_set_member ()
OM_uint32 gss_inquire_names_for_mech ()
OM_uint32 gss_inquire_mechs_for_name ()
OM_uint32 gss_canonicalize_name ()
OM_uint32 gss_duplicate_name ()
OM_uint32 gss_sign ()
OM_uint32 gss_verify ()
OM_uint32 gss_seal ()
OM_uint32 gss_unseal ()
OM_uint32 gss_inquire_saslname_for_mech ()
OM_uint32 gss_inquire_mech_for_saslname ()
int gss_oid_equal ()
OM_uint32 gss_encapsulate_token ()
OM_uint32 gss_decapsulate_token ()

Types and Values

typedef gss_ctx_id_t
typedef gss_cred_id_t
typedef gss_name_t
typedef gss_uint32
typedef OM_uint32
typedef gss_qop_t
typedef gss_cred_usage_t
#define GSS_C_DELEG_FLAG
#define GSS_C_MUTUAL_FLAG
#define GSS_C_REPLAY_FLAG
#define GSS_C_SEQUENCE_FLAG
#define GSS_C_CONF_FLAG
#define GSS_C_INTEG_FLAG
#define GSS_C_ANON_FLAG
#define GSS_C_PROT_READY_FLAG
#define GSS_C_TRANS_FLAG
#define GSS_C_BOTH
#define GSS_C_INITIATE
#define GSS_C_ACCEPT
#define GSS_C_GSS_CODE
#define GSS_C_MECH_CODE
#define GSS_C_AF_UNSPEC
#define GSS_C_AF_LOCAL
#define GSS_C_AF_INET
#define GSS_C_AF_IMPLINK
#define GSS_C_AF_PUP
#define GSS_C_AF_CHAOS
#define GSS_C_AF_NS
#define GSS_C_AF_NBS
#define GSS_C_AF_ECMA
#define GSS_C_AF_DATAKIT
#define GSS_C_AF_CCITT
#define GSS_C_AF_SNA
#define GSS_C_AF_DECnet
#define GSS_C_AF_DLI
#define GSS_C_AF_LAT
#define GSS_C_AF_HYLINK
#define GSS_C_AF_APPLETALK
#define GSS_C_AF_BSC
#define GSS_C_AF_DSS
#define GSS_C_AF_OSI
#define GSS_C_AF_X25
#define GSS_C_AF_NULLADDR
#define GSS_C_EMPTY_BUFFER
#define GSS_C_NULL_OID
#define GSS_C_NULL_OID_SET
#define GSS_C_QOP_DEFAULT
#define GSS_C_INDEFINITE
extern gss_OID GSS_C_NT_USER_NAME
extern gss_OID GSS_C_NT_MACHINE_UID_NAME
extern gss_OID GSS_C_NT_STRING_UID_NAME
extern gss_OID GSS_C_NT_HOSTBASED_SERVICE_X
extern gss_OID GSS_C_NT_HOSTBASED_SERVICE
extern gss_OID GSS_C_NT_ANONYMOUS
extern gss_OID GSS_C_NT_EXPORT_NAME
#define GSS_S_COMPLETE
#define GSS_C_CALLING_ERROR_OFFSET
#define GSS_C_ROUTINE_ERROR_OFFSET
#define GSS_C_SUPPLEMENTARY_OFFSET
#define GSS_C_CALLING_ERROR_MASK
#define GSS_C_ROUTINE_ERROR_MASK
#define GSS_C_SUPPLEMENTARY_MASK
#define GSS_S_CALL_INACCESSIBLE_READ
#define GSS_S_CALL_INACCESSIBLE_WRITE
#define GSS_S_CALL_BAD_STRUCTURE
#define GSS_S_BAD_MIC
#define GSS_S_CONTINUE_NEEDED
#define GSS_S_DUPLICATE_TOKEN
#define GSS_S_OLD_TOKEN
#define GSS_S_UNSEQ_TOKEN
#define GSS_S_GAP_TOKEN
typedef gss_const_buffer_t
typedef gss_const_ctx_id_t
typedef gss_const_cred_id_t
typedef gss_const_name_t
typedef gss_const_OID
typedef gss_const_OID_set

Description

Functions

GSS_C_NO_NAME

#define GSS_C_NO_NAME ((gss_name_t) 0)


GSS_C_NO_BUFFER

#define GSS_C_NO_BUFFER ((gss_buffer_t) 0)


GSS_C_NO_OID

#define GSS_C_NO_OID ((gss_OID) 0)


GSS_C_NO_OID_SET

#define GSS_C_NO_OID_SET ((gss_OID_set) 0)


GSS_C_NO_CONTEXT

#define GSS_C_NO_CONTEXT ((gss_ctx_id_t) 0)


GSS_C_NO_CREDENTIAL

#define GSS_C_NO_CREDENTIAL ((gss_cred_id_t) 0)


GSS_C_NO_CHANNEL_BINDINGS

#define GSS_C_NO_CHANNEL_BINDINGS ((gss_channel_bindings_t) 0)


GSS_CALLING_ERROR()

#define             GSS_CALLING_ERROR(x)


GSS_ROUTINE_ERROR()

#define             GSS_ROUTINE_ERROR(x)


GSS_SUPPLEMENTARY_INFO()

#define             GSS_SUPPLEMENTARY_INFO(x)


GSS_ERROR()

#define             GSS_ERROR(x)


GSS_S_BAD_MECH

#define GSS_S_BAD_MECH             (1ul << GSS_C_ROUTINE_ERROR_OFFSET)


GSS_S_BAD_NAME

#define GSS_S_BAD_NAME             (2ul << GSS_C_ROUTINE_ERROR_OFFSET)


GSS_S_BAD_NAMETYPE

#define GSS_S_BAD_NAMETYPE         (3ul << GSS_C_ROUTINE_ERROR_OFFSET)


GSS_S_BAD_BINDINGS

#define GSS_S_BAD_BINDINGS         (4ul << GSS_C_ROUTINE_ERROR_OFFSET)


GSS_S_BAD_STATUS

#define GSS_S_BAD_STATUS           (5ul << GSS_C_ROUTINE_ERROR_OFFSET)


GSS_S_BAD_SIG

#define GSS_S_BAD_SIG              (6ul << GSS_C_ROUTINE_ERROR_OFFSET)


GSS_S_NO_CRED

#define GSS_S_NO_CRED              (7ul << GSS_C_ROUTINE_ERROR_OFFSET)


GSS_S_NO_CONTEXT

#define GSS_S_NO_CONTEXT           (8ul << GSS_C_ROUTINE_ERROR_OFFSET)


GSS_S_DEFECTIVE_TOKEN

#define GSS_S_DEFECTIVE_TOKEN      (9ul << GSS_C_ROUTINE_ERROR_OFFSET)


GSS_S_DEFECTIVE_CREDENTIAL

#define GSS_S_DEFECTIVE_CREDENTIAL (10ul << GSS_C_ROUTINE_ERROR_OFFSET)


GSS_S_CREDENTIALS_EXPIRED

#define GSS_S_CREDENTIALS_EXPIRED  (11ul << GSS_C_ROUTINE_ERROR_OFFSET)


GSS_S_CONTEXT_EXPIRED

#define GSS_S_CONTEXT_EXPIRED      (12ul << GSS_C_ROUTINE_ERROR_OFFSET)


GSS_S_FAILURE

#define GSS_S_FAILURE              (13ul << GSS_C_ROUTINE_ERROR_OFFSET)


GSS_S_BAD_QOP

#define GSS_S_BAD_QOP              (14ul << GSS_C_ROUTINE_ERROR_OFFSET)


GSS_S_UNAUTHORIZED

#define GSS_S_UNAUTHORIZED         (15ul << GSS_C_ROUTINE_ERROR_OFFSET)


GSS_S_UNAVAILABLE

#define GSS_S_UNAVAILABLE          (16ul << GSS_C_ROUTINE_ERROR_OFFSET)


GSS_S_DUPLICATE_ELEMENT

#define GSS_S_DUPLICATE_ELEMENT    (17ul << GSS_C_ROUTINE_ERROR_OFFSET)


GSS_S_NAME_NOT_MN

#define GSS_S_NAME_NOT_MN          (18ul << GSS_C_ROUTINE_ERROR_OFFSET)


gss_acquire_cred ()

OM_uint32
gss_acquire_cred (OM_uint32 *minor_status,
                  const gss_name_t desired_name,
                  OM_uint32 time_req,
                  const gss_OID_set desired_mechs,
                  gss_cred_usage_t cred_usage,
                  gss_cred_id_t *output_cred_handle,
                  gss_OID_set *actual_mechs,
                  OM_uint32 *time_rec);

Allows an application to acquire a handle for a pre-existing credential by name. GSS-API implementations must impose a local access-control policy on callers of this routine to prevent unauthorized callers from acquiring credentials to which they are not entitled. This routine is not intended to provide a "login to the network" function, as such a function would involve the creation of new credentials rather than merely acquiring a handle to existing credentials. Such functions, if required, should be defined in implementation-specific extensions to the API.

If desired_name is GSS_C_NO_NAME, the call is interpreted as a request for a credential handle that will invoke default behavior when passed to gss_init_sec_context() (if cred_usage is GSS_C_INITIATE or GSS_C_BOTH) or gss_accept_sec_context() (if cred_usage is GSS_C_ACCEPT or GSS_C_BOTH).

Mechanisms should honor the desired_mechs parameter, and return a credential that is suitable to use only with the requested mechanisms. An exception to this is the case where one underlying credential element can be shared by multiple mechanisms; in this case it is permissible for an implementation to indicate all mechanisms with which the credential element may be used. If desired_mechs is an empty set, behavior is undefined.

This routine is expected to be used primarily by context acceptors, since implementations are likely to provide mechanism-specific ways of obtaining GSS-API initiator credentials from the system login process. Some implementations may therefore not support the acquisition of GSS_C_INITIATE or GSS_C_BOTH credentials via gss_acquire_cred for any name other than GSS_C_NO_NAME, or a name produced by applying either gss_inquire_cred to a valid credential, or gss_inquire_context to an active context.

If credential acquisition is time-consuming for a mechanism, the mechanism may choose to delay the actual acquisition until the credential is required (e.g. by gss_init_sec_context or gss_accept_sec_context). Such mechanism-specific implementation decisions should be invisible to the calling application; thus a call of gss_inquire_cred immediately following the call of gss_acquire_cred must return valid credential data, and may therefore incur the overhead of a deferred credential acquisition.

Parameters

minor_status

(integer, modify) Mechanism specific status code.

 

desired_name

(gss_name_t, read) Name of principal whose credential should be acquired.

 

time_req

(Integer, read, optional) Number of seconds that credentials should remain valid. Specify GSS_C_INDEFINITE to request that the credentials have the maximum permitted lifetime.

 

desired_mechs

(Set of Object IDs, read, optional) Set of underlying security mechanisms that may be used. GSS_C_NO_OID_SET may be used to obtain an implementation-specific default.

 

cred_usage

(gss_cred_usage_t, read) GSS_C_BOTH - Credentials may be used either to initiate or accept security contexts. GSS_C_INITIATE - Credentials will only be used to initiate security contexts. GSS_C_ACCEPT - Credentials will only be used to accept security contexts.

 

output_cred_handle

(gss_cred_id_t, modify) The returned credential handle. Resources associated with this credential handle must be released by the application after use with a call to gss_release_cred().

 

actual_mechs

(Set of Object IDs, modify, optional) The set of mechanisms for which the credential is valid. Storage associated with the returned OID-set must be released by the application after use with a call to gss_release_oid_set(). Specify NULL if not required.

 

time_rec

(Integer, modify, optional) Actual number of seconds for which the returned credentials will remain valid. If the implementation does not support expiration of credentials, the value GSS_C_INDEFINITE will be returned. Specify NULL if not required.

 

Returns

GSS_S_COMPLETE: Successful completion.

GSS_S_BAD_MECH: Unavailable mechanism requested.

GSS_S_BAD_NAMETYPE: Type contained within desired_name parameter is not supported.

GSS_S_BAD_NAME: Value supplied for desired_name parameter is ill formed.

GSS_S_CREDENTIALS_EXPIRED: The credentials could not be acquired Because they have expired.

GSS_S_NO_CRED: No credentials were found for the specified name.


gss_release_cred ()

OM_uint32
gss_release_cred (OM_uint32 *minor_status,
                  gss_cred_id_t *cred_handle);

Informs GSS-API that the specified credential handle is no longer required by the application, and frees associated resources. The cred_handle is set to GSS_C_NO_CREDENTIAL on successful completion of this call.

Parameters

minor_status

(Integer, modify) Mechanism specific status code.

 

cred_handle

(gss_cred_id_t, modify, optional) Opaque handle identifying credential to be released. If GSS_C_NO_CREDENTIAL is supplied, the routine will complete successfully, but will do nothing.

 

Returns

GSS_S_COMPLETE: Successful completion.

GSS_S_NO_CRED: Credentials could not be accessed.


gss_init_sec_context ()

OM_uint32
gss_init_sec_context (OM_uint32 *minor_status,
                      const gss_cred_id_t initiator_cred_handle,
                      gss_ctx_id_t *context_handle,
                      const gss_name_t target_name,
                      const gss_OID mech_type,
                      OM_uint32 req_flags,
                      OM_uint32 time_req,
                      const gss_channel_bindings_t input_chan_bindings,
                      const gss_buffer_t input_token,
                      gss_OID *actual_mech_type,
                      gss_buffer_t output_token,
                      OM_uint32 *ret_flags,
                      OM_uint32 *time_rec);

Initiates the establishment of a security context between the application and a remote peer. Initially, the input_token parameter should be specified either as GSS_C_NO_BUFFER, or as a pointer to a gss_buffer_desc object whose length field contains the value zero. The routine may return a output_token which should be transferred to the peer application, where the peer application will present it to gss_accept_sec_context. If no token need be sent, gss_init_sec_context will indicate this by setting the length field of the output_token argument to zero. To complete the context establishment, one or more reply tokens may be required from the peer application; if so, gss_init_sec_context will return a status containing the supplementary information bit GSS_S_CONTINUE_NEEDED. In this case, gss_init_sec_context should be called again when the reply token is received from the peer application, passing the reply token to gss_init_sec_context via the input_token parameters.

Portable applications should be constructed to use the token length and return status to determine whether a token needs to be sent or waited for. Thus a typical portable caller should always invoke gss_init_sec_context within a loop:

int context_established = 0; gss_ctx_id_t context_hdl = GSS_C_NO_CONTEXT; ... input_token->length = 0;

while (!context_established) { maj_stat = gss_init_sec_context(&min_stat, cred_hdl, &context_hdl, target_name, desired_mech, desired_services, desired_time, input_bindings, input_token, &actual_mech, output_token, &actual_services, &actual_time); if (GSS_ERROR(maj_stat)) { report_error(maj_stat, min_stat); };

if (output_token->length != 0) { send_token_to_peer(output_token); gss_release_buffer(&min_stat, output_token) }; if (GSS_ERROR(maj_stat)) {

if (context_hdl != GSS_C_NO_CONTEXT) gss_delete_sec_context(&min_stat, &context_hdl, GSS_C_NO_BUFFER); break; };

if (maj_stat & GSS_S_CONTINUE_NEEDED) { receive_token_from_peer(input_token); } else { context_established = 1; };

Portable applications should be constructed to use the token length and return status to determine whether a token needs to be sent or waited for. Thus a typical portable caller should always invoke gss_init_sec_context within a loop:

int context_established = 0; gss_ctx_id_t context_hdl = GSS_C_NO_CONTEXT; ... input_token->length = 0;

while (!context_established) { maj_stat = gss_init_sec_context(&min_stat, cred_hdl, &context_hdl, target_name, desired_mech, desired_services, desired_time, input_bindings, input_token, &actual_mech, output_token, &actual_services, &actual_time); if (GSS_ERROR(maj_stat)) { report_error(maj_stat, min_stat); };

if (output_token->length != 0) { send_token_to_peer(output_token); gss_release_buffer(&min_stat, output_token) }; if (GSS_ERROR(maj_stat)) {

if (context_hdl != GSS_C_NO_CONTEXT) gss_delete_sec_context(&min_stat, &context_hdl, GSS_C_NO_BUFFER); break; };

if (maj_stat & GSS_S_CONTINUE_NEEDED) { receive_token_from_peer(input_token); } else { context_established = 1; };

};

Whenever the routine returns a major status that includes the value GSS_S_CONTINUE_NEEDED, the context is not fully established and the following restrictions apply to the output parameters:

  • The value returned via the time_rec parameter is undefined unless the accompanying ret_flags parameter contains the bit GSS_C_PROT_READY_FLAG, indicating that per-message services may be applied in advance of a successful completion status, the value returned via the actual_mech_type parameter is undefined until the routine returns a major status value of GSS_S_COMPLETE.

  • The values of the GSS_C_DELEG_FLAG, GSS_C_MUTUAL_FLAG, GSS_C_REPLAY_FLAG, GSS_C_SEQUENCE_FLAG, GSS_C_CONF_FLAG, GSS_C_INTEG_FLAG and GSS_C_ANON_FLAG bits returned via the ret_flags parameter should contain the values that the implementation expects would be valid if context establishment were to succeed. In particular, if the application has requested a service such as delegation or anonymous authentication via the req_flags argument, and such a service is unavailable from the underlying mechanism, gss_init_sec_context should generate a token that will not provide the service, and indicate via the ret_flags argument that the service will not be supported. The application may choose to abort the context establishment by calling gss_delete_sec_context (if it cannot continue in the absence of the service), or it may choose to transmit the token and continue context establishment (if the service was merely desired but not mandatory).

  • The values of the GSS_C_PROT_READY_FLAG and GSS_C_TRANS_FLAG bits within ret_flags should indicate the actual state at the time gss_init_sec_context returns, whether or not the context is fully established.

  • GSS-API implementations that support per-message protection are encouraged to set the GSS_C_PROT_READY_FLAG in the final ret_flags returned to a caller (i.e. when accompanied by a GSS_S_COMPLETE status code). However, applications should not rely on this behavior as the flag was not defined in Version 1 of the GSS-API. Instead, applications should determine what per-message services are available after a successful context establishment according to the GSS_C_INTEG_FLAG and GSS_C_CONF_FLAG values.

  • All other bits within the ret_flags argument should be set to zero.

If the initial call of gss_init_sec_context() fails, the implementation should not create a context object, and should leave the value of the context_handle parameter set to GSS_C_NO_CONTEXT to indicate this. In the event of a failure on a subsequent call, the implementation is permitted to delete the "half-built" security context (in which case it should set the context_handle parameter to GSS_C_NO_CONTEXT), but the preferred behavior is to leave the security context untouched for the application to delete (using gss_delete_sec_context).

During context establishment, the informational status bits GSS_S_OLD_TOKEN and GSS_S_DUPLICATE_TOKEN indicate fatal errors, and GSS-API mechanisms should always return them in association with a routine error of GSS_S_FAILURE. This requirement for pairing did not exist in version 1 of the GSS-API specification, so applications that wish to run over version 1 implementations must special-case these codes.

The req_flags values:

GSS_C_DELEG_FLAG::

  • True - Delegate credentials to remote peer.

  • False - Don't delegate.

GSS_C_MUTUAL_FLAG::

  • True - Request that remote peer authenticate itself.

  • False - Authenticate self to remote peer only.

GSS_C_REPLAY_FLAG::

  • True - Enable replay detection for messages protected with gss_wrap or gss_get_mic.

  • False - Don't attempt to detect replayed messages.

GSS_C_SEQUENCE_FLAG::

  • True - Enable detection of out-of-sequence protected messages.

  • False - Don't attempt to detect out-of-sequence messages.

GSS_C_CONF_FLAG::

  • True - Request that confidentiality service be made available (via gss_wrap).

  • False - No per-message confidentiality service is required.

GSS_C_INTEG_FLAG::

  • True - Request that integrity service be made available (via gss_wrap or gss_get_mic).

  • False - No per-message integrity service is required.

GSS_C_ANON_FLAG::

  • True - Do not reveal the initiator's identity to the acceptor.

  • False - Authenticate normally.

The ret_flags values:

GSS_C_DELEG_FLAG::

  • True - Credentials were delegated to the remote peer.

  • False - No credentials were delegated.

GSS_C_MUTUAL_FLAG::

  • True - The remote peer has authenticated itself.

  • False - Remote peer has not authenticated itself.

GSS_C_REPLAY_FLAG::

  • True - replay of protected messages will be detected.

  • False - replayed messages will not be detected.

GSS_C_SEQUENCE_FLAG::

  • True - out-of-sequence protected messages will be detected.

  • False - out-of-sequence messages will not be detected.

GSS_C_CONF_FLAG::

  • True - Confidentiality service may be invoked by calling gss_wrap routine.

  • False - No confidentiality service (via gss_wrap) available. gss_wrap will provide message encapsulation, data-origin authentication and integrity services only.

GSS_C_INTEG_FLAG::

  • True - Integrity service may be invoked by calling either gss_get_mic or gss_wrap routines.

  • False - Per-message integrity service unavailable.

GSS_C_ANON_FLAG::

  • True - The initiator's identity has not been revealed, and will not be revealed if any emitted token is passed to the acceptor.

  • False - The initiator's identity has been or will be authenticated normally.

GSS_C_PROT_READY_FLAG::

  • True - Protection services (as specified by the states of the GSS_C_CONF_FLAG and GSS_C_INTEG_FLAG) are available for use if the accompanying major status return value is either GSS_S_COMPLETE or GSS_S_CONTINUE_NEEDED.

  • False - Protection services (as specified by the states of the GSS_C_CONF_FLAG and GSS_C_INTEG_FLAG) are available only if the accompanying major status return value is GSS_S_COMPLETE.

GSS_C_TRANS_FLAG::

  • True - The resultant security context may be transferred to other processes via a call to gss_export_sec_context().

  • False - The security context is not transferable.

All other bits should be set to zero.

Parameters

minor_status

(integer, modify) Mechanism specific status code.

 

initiator_cred_handle

(gss_cred_id_t, read, optional) Handle for credentials claimed. Supply GSS_C_NO_CREDENTIAL to act as a default initiator principal. If no default initiator is defined, the function will return GSS_S_NO_CRED.

 

context_handle

(gss_ctx_id_t, read/modify) Context handle for new context. Supply GSS_C_NO_CONTEXT for first call; use value returned by first call in continuation calls. Resources associated with this context-handle must be released by the application after use with a call to gss_delete_sec_context().

 

target_name

(gss_name_t, read) Name of target.

 

mech_type

(OID, read, optional) Object ID of desired mechanism. Supply GSS_C_NO_OID to obtain an implementation specific default.

 

req_flags

(bit-mask, read) Contains various independent flags, each of which requests that the context support a specific service option. Symbolic names are provided for each flag, and the symbolic names corresponding to the required flags should be logically-ORed together to form the bit-mask value. See below for the flags.

 

time_req

(Integer, read, optional) Desired number of seconds for which context should remain valid. Supply 0 to request a default validity period.

 

input_chan_bindings

(channel bindings, read, optional) Application-specified bindings. Allows application to securely bind channel identification information to the security context. Specify GSS_C_NO_CHANNEL_BINDINGS if channel bindings are not used.

 

input_token

(buffer, opaque, read, optional) Token received from peer application. Supply GSS_C_NO_BUFFER, or a pointer to a buffer containing the value GSS_C_EMPTY_BUFFER on initial call.

 

actual_mech_type

(OID, modify, optional) Actual mechanism used. The OID returned via this parameter will be a pointer to static storage that should be treated as read-only; In particular the application should not attempt to free it. Specify NULL if not required.

 

output_token

(buffer, opaque, modify) Token to be sent to peer application. If the length field of the returned buffer is zero, no token need be sent to the peer application. Storage associated with this buffer must be freed by the application after use with a call to gss_release_buffer().

 

ret_flags

(bit-mask, modify, optional) Contains various independent flags, each of which indicates that the context supports a specific service option. Specify NULL if not required. Symbolic names are provided for each flag, and the symbolic names corresponding to the required flags should be logically-ANDed with the ret_flags value to test whether a given option is supported by the context. See below for the flags.

 

time_rec

(Integer, modify, optional) Number of seconds for which the context will remain valid. If the implementation does not support context expiration, the value GSS_C_INDEFINITE will be returned. Specify NULL if not required.

 

Returns

GSS_S_COMPLETE: Successful completion.

GSS_S_CONTINUE_NEEDED: Indicates that a token from the peer application is required to complete the context, and that gss_init_sec_context must be called again with that token.

GSS_S_DEFECTIVE_TOKEN: Indicates that consistency checks performed on the input_token failed.

GSS_S_DEFECTIVE_CREDENTIAL: Indicates that consistency checks performed on the credential failed.

GSS_S_NO_CRED: The supplied credentials were not valid for context initiation, or the credential handle did not reference any credentials.

GSS_S_CREDENTIALS_EXPIRED: The referenced credentials have expired.

GSS_S_BAD_BINDINGS: The input_token contains different channel bindings to those specified via the input_chan_bindings parameter.

GSS_S_BAD_SIG: The input_token contains an invalid MIC, or a MIC that could not be verified.

GSS_S_OLD_TOKEN: The input_token was too old. This is a fatal error during context establishment.

GSS_S_DUPLICATE_TOKEN: The input_token is valid, but is a duplicate of a token already processed. This is a fatal error during context establishment.

GSS_S_NO_CONTEXT: Indicates that the supplied context handle did not refer to a valid context.

GSS_S_BAD_NAMETYPE: The provided target_name parameter contained an invalid or unsupported type of name.

GSS_S_BAD_NAME: The provided target_name parameter was ill-formed.

GSS_S_BAD_MECH: The specified mechanism is not supported by the provided credential, or is unrecognized by the implementation.


gss_accept_sec_context ()

OM_uint32
gss_accept_sec_context (OM_uint32 *minor_status,
                        gss_ctx_id_t *context_handle,
                        const gss_cred_id_t acceptor_cred_handle,
                        const gss_buffer_t input_token_buffer,
                        const gss_channel_bindings_t input_chan_bindings,
                        gss_name_t *src_name,
                        gss_OID *mech_type,
                        gss_buffer_t output_token,
                        OM_uint32 *ret_flags,
                        OM_uint32 *time_rec,
                        gss_cred_id_t *delegated_cred_handle);

Allows a remotely initiated security context between the application and a remote peer to be established. The routine may return a output_token which should be transferred to the peer application, where the peer application will present it to gss_init_sec_context. If no token need be sent, gss_accept_sec_context will indicate this by setting the length field of the output_token argument to zero. To complete the context establishment, one or more reply tokens may be required from the peer application; if so, gss_accept_sec_context will return a status flag of GSS_S_CONTINUE_NEEDED, in which case it should be called again when the reply token is received from the peer application, passing the token to gss_accept_sec_context via the input_token parameters.

Portable applications should be constructed to use the token length and return status to determine whether a token needs to be sent or waited for. Thus a typical portable caller should always invoke gss_accept_sec_context within a loop:

gss_ctx_id_t context_hdl = GSS_C_NO_CONTEXT;

do { receive_token_from_peer(input_token); maj_stat = gss_accept_sec_context(&min_stat, &context_hdl, cred_hdl, input_token, input_bindings, &client_name, &mech_type, output_token, &ret_flags, &time_rec, &deleg_cred); if (GSS_ERROR(maj_stat)) { report_error(maj_stat, min_stat); }; if (output_token->length != 0) { send_token_to_peer(output_token);

gss_release_buffer(&min_stat, output_token); }; if (GSS_ERROR(maj_stat)) { if (context_hdl != GSS_C_NO_CONTEXT) gss_delete_sec_context(&min_stat, &context_hdl, GSS_C_NO_BUFFER); break; };

Portable applications should be constructed to use the token length and return status to determine whether a token needs to be sent or waited for. Thus a typical portable caller should always invoke gss_accept_sec_context within a loop:

gss_ctx_id_t context_hdl = GSS_C_NO_CONTEXT;

do { receive_token_from_peer(input_token); maj_stat = gss_accept_sec_context(&min_stat, &context_hdl, cred_hdl, input_token, input_bindings, &client_name, &mech_type, output_token, &ret_flags, &time_rec, &deleg_cred); if (GSS_ERROR(maj_stat)) { report_error(maj_stat, min_stat); }; if (output_token->length != 0) { send_token_to_peer(output_token);

gss_release_buffer(&min_stat, output_token); }; if (GSS_ERROR(maj_stat)) { if (context_hdl != GSS_C_NO_CONTEXT) gss_delete_sec_context(&min_stat, &context_hdl, GSS_C_NO_BUFFER); break; };

} while (maj_stat & GSS_S_CONTINUE_NEEDED);

Whenever the routine returns a major status that includes the value GSS_S_CONTINUE_NEEDED, the context is not fully established and the following restrictions apply to the output parameters:

The value returned via the time_rec parameter is undefined Unless the accompanying ret_flags parameter contains the bit GSS_C_PROT_READY_FLAG, indicating that per-message services may be applied in advance of a successful completion status, the value returned via the mech_type parameter may be undefined until the routine returns a major status value of GSS_S_COMPLETE.

The values of the GSS_C_DELEG_FLAG, GSS_C_MUTUAL_FLAG,GSS_C_REPLAY_FLAG, GSS_C_SEQUENCE_FLAG, GSS_C_CONF_FLAG,GSS_C_INTEG_FLAG and GSS_C_ANON_FLAG bits returned via the ret_flags parameter should contain the values that the implementation expects would be valid if context establishment were to succeed.

The values of the GSS_C_PROT_READY_FLAG and GSS_C_TRANS_FLAG bits within ret_flags should indicate the actual state at the time gss_accept_sec_context returns, whether or not the context is fully established.

Although this requires that GSS-API implementations set the GSS_C_PROT_READY_FLAG in the final ret_flags returned to a caller (i.e. when accompanied by a GSS_S_COMPLETE status code), applications should not rely on this behavior as the flag was not defined in Version 1 of the GSS-API. Instead, applications should be prepared to use per-message services after a successful context establishment, according to the GSS_C_INTEG_FLAG and GSS_C_CONF_FLAG values.

All other bits within the ret_flags argument should be set to zero. While the routine returns GSS_S_CONTINUE_NEEDED, the values returned via the ret_flags argument indicate the services that the implementation expects to be available from the established context.

If the initial call of gss_accept_sec_context() fails, the implementation should not create a context object, and should leave the value of the context_handle parameter set to GSS_C_NO_CONTEXT to indicate this. In the event of a failure on a subsequent call, the implementation is permitted to delete the "half-built" security context (in which case it should set the context_handle parameter to GSS_C_NO_CONTEXT), but the preferred behavior is to leave the security context (and the context_handle parameter) untouched for the application to delete (using gss_delete_sec_context).

During context establishment, the informational status bits GSS_S_OLD_TOKEN and GSS_S_DUPLICATE_TOKEN indicate fatal errors, and GSS-API mechanisms should always return them in association with a routine error of GSS_S_FAILURE. This requirement for pairing did not exist in version 1 of the GSS-API specification, so applications that wish to run over version 1 implementations must special-case these codes.

The ret_flags values:

GSS_C_DELEG_FLAG::

  • True - Delegated credentials are available via the delegated_cred_handle parameter.

  • False - No credentials were delegated.

GSS_C_MUTUAL_FLAG::

  • True - Remote peer asked for mutual authentication.

  • False - Remote peer did not ask for mutual authentication.

GSS_C_REPLAY_FLAG::

  • True - replay of protected messages will be detected.

  • False - replayed messages will not be detected.

GSS_C_SEQUENCE_FLAG::

  • True - out-of-sequence protected messages will be detected.

  • False - out-of-sequence messages will not be detected.

GSS_C_CONF_FLAG::

  • True - Confidentiality service may be invoked by calling the gss_wrap routine.

  • False - No confidentiality service (via gss_wrap) available. gss_wrap will provide message encapsulation, data-origin authentication and integrity services only.

GSS_C_INTEG_FLAG::

  • True - Integrity service may be invoked by calling either gss_get_mic or gss_wrap routines.

  • False - Per-message integrity service unavailable.

GSS_C_ANON_FLAG::

  • True - The initiator does not wish to be authenticated; the src_name parameter (if requested) contains an anonymous internal name.

  • False - The initiator has been authenticated normally.

GSS_C_PROT_READY_FLAG::

  • True - Protection services (as specified by the states of the GSS_C_CONF_FLAG and GSS_C_INTEG_FLAG) are available if the accompanying major status return value is either GSS_S_COMPLETE or GSS_S_CONTINUE_NEEDED.

  • False - Protection services (as specified by the states of the GSS_C_CONF_FLAG and GSS_C_INTEG_FLAG) are available only if the accompanying major status return value is GSS_S_COMPLETE.

GSS_C_TRANS_FLAG::

  • True - The resultant security context may be transferred to other processes via a call to gss_export_sec_context().

  • False - The security context is not transferable.

All other bits should be set to zero.

Parameters

minor_status

(Integer, modify) Mechanism specific status code.

 

context_handle

(gss_ctx_id_t, read/modify) Context handle for new context. Supply GSS_C_NO_CONTEXT for first call; use value returned in subsequent calls. Once gss_accept_sec_context() has returned a value via this parameter, resources have been assigned to the corresponding context, and must be freed by the application after use with a call to gss_delete_sec_context().

 

acceptor_cred_handle

(gss_cred_id_t, read) Credential handle claimed by context acceptor. Specify GSS_C_NO_CREDENTIAL to accept the context as a default principal. If GSS_C_NO_CREDENTIAL is specified, but no default acceptor principal is defined, GSS_S_NO_CRED will be returned.

 

input_token_buffer

(buffer, opaque, read) Token obtained from remote application.

 

input_chan_bindings

(channel bindings, read, optional) Application- specified bindings. Allows application to securely bind channel identification information to the security context. If channel bindings are not used, specify GSS_C_NO_CHANNEL_BINDINGS.

 

src_name

(gss_name_t, modify, optional) Authenticated name of context initiator. After use, this name should be deallocated by passing it to gss_release_name(). If not required, specify NULL.

 

mech_type

(Object ID, modify, optional) Security mechanism used. The returned OID value will be a pointer into static storage, and should be treated as read-only by the caller (in particular, it does not need to be freed). If not required, specify NULL.

 

output_token

(buffer, opaque, modify) Token to be passed to peer application. If the length field of the returned token buffer is 0, then no token need be passed to the peer application. If a non- zero length field is returned, the associated storage must be freed after use by the application with a call to gss_release_buffer().

 

ret_flags

(bit-mask, modify, optional) Contains various independent flags, each of which indicates that the context supports a specific service option. If not needed, specify NULL. Symbolic names are provided for each flag, and the symbolic names corresponding to the required flags should be logically-ANDed with the ret_flags value to test whether a given option is supported by the context. See below for the flags.

 

time_rec

(Integer, modify, optional) Number of seconds for which the context will remain valid. Specify NULL if not required.

 

delegated_cred_handle

(gss_cred_id_t, modify, optional credential) Handle for credentials received from context initiator. Only valid if deleg_flag in ret_flags is true, in which case an explicit credential handle (i.e. not GSS_C_NO_CREDENTIAL) will be returned; if deleg_flag is false, gss_accept_sec_context() will set this parameter to GSS_C_NO_CREDENTIAL. If a credential handle is returned, the associated resources must be released by the application after use with a call to gss_release_cred(). Specify NULL if not required.

 

Returns

GSS_S_CONTINUE_NEEDED: Indicates that a token from the peer application is required to complete the context, and that gss_accept_sec_context must be called again with that token.

GSS_S_DEFECTIVE_TOKEN: Indicates that consistency checks performed on the input_token failed.

GSS_S_DEFECTIVE_CREDENTIAL: Indicates that consistency checks performed on the credential failed.

GSS_S_NO_CRED: The supplied credentials were not valid for context acceptance, or the credential handle did not reference any credentials.

GSS_S_CREDENTIALS_EXPIRED: The referenced credentials have expired.

GSS_S_BAD_BINDINGS: The input_token contains different channel bindings to those specified via the input_chan_bindings parameter.

GSS_S_NO_CONTEXT: Indicates that the supplied context handle did not refer to a valid context.

GSS_S_BAD_SIG: The input_token contains an invalid MIC.

GSS_S_OLD_TOKEN: The input_token was too old. This is a fatal error during context establishment.

GSS_S_DUPLICATE_TOKEN: The input_token is valid, but is a duplicate of a token already processed. This is a fatal error during context establishment.

GSS_S_BAD_MECH: The received token specified a mechanism that is not supported by the implementation or the provided credential.


gss_process_context_token ()

OM_uint32
gss_process_context_token (OM_uint32 *minor_status,
                           const gss_ctx_id_t context_handle,
                           const gss_buffer_t token_buffer);

Provides a way to pass an asynchronous token to the security service. Most context-level tokens are emitted and processed synchronously by gss_init_sec_context and gss_accept_sec_context, and the application is informed as to whether further tokens are expected by the GSS_C_CONTINUE_NEEDED major status bit. Occasionally, a mechanism may need to emit a context-level token at a point when the peer entity is not expecting a token. For example, the initiator's final call to gss_init_sec_context may emit a token and return a status of GSS_S_COMPLETE, but the acceptor's call to gss_accept_sec_context may fail. The acceptor's mechanism may wish to send a token containing an error indication to the initiator, but the initiator is not expecting a token at this point, believing that the context is fully established. Gss_process_context_token provides a way to pass such a token to the mechanism at any time.

Parameters

minor_status

(Integer, modify) Implementation specific status code.

 

context_handle

(gss_ctx_id_t, read) Context handle of context on which token is to be processed

 

token_buffer

(buffer, opaque, read) Token to process.

 

Returns

GSS_S_COMPLETE: Successful completion.

GSS_S_DEFECTIVE_TOKEN: Indicates that consistency checks performed on the token failed.

GSS_S_NO_CONTEXT: The context_handle did not refer to a valid context.


gss_delete_sec_context ()

OM_uint32
gss_delete_sec_context (OM_uint32 *minor_status,
                        gss_ctx_id_t *context_handle,
                        gss_buffer_t output_token);

Delete a security context. gss_delete_sec_context will delete the local data structures associated with the specified security context, and may generate an output_token, which when passed to the peer gss_process_context_token will instruct it to do likewise. If no token is required by the mechanism, the GSS-API should set the length field of the output_token (if provided) to zero. No further security services may be obtained using the context specified by context_handle.

In addition to deleting established security contexts, gss_delete_sec_context must also be able to delete "half-built" security contexts resulting from an incomplete sequence of gss_init_sec_context()/gss_accept_sec_context() calls.

The output_token parameter is retained for compatibility with version 1 of the GSS-API. It is recommended that both peer applications invoke gss_delete_sec_context passing the value GSS_C_NO_BUFFER for the output_token parameter, indicating that no token is required, and that gss_delete_sec_context should simply delete local context data structures. If the application does pass a valid buffer to gss_delete_sec_context, mechanisms are encouraged to return a zero-length token, indicating that no peer action is necessary, and that no token should be transferred by the application.

Parameters

minor_status

(Integer, modify) Mechanism specific status code.

 

context_handle

(gss_ctx_id_t, modify) Context handle identifying context to delete. After deleting the context, the GSS-API will set this context handle to GSS_C_NO_CONTEXT.

 

output_token

(buffer, opaque, modify, optional) Token to be sent to remote application to instruct it to also delete the context. It is recommended that applications specify GSS_C_NO_BUFFER for this parameter, requesting local deletion only. If a buffer parameter is provided by the application, the mechanism may return a token in it; mechanisms that implement only local deletion should set the length field of this token to zero to indicate to the application that no token is to be sent to the peer.

 

Returns

GSS_S_COMPLETE: Successful completion.

GSS_S_NO_CONTEXT: No valid context was supplied.


gss_context_time ()

OM_uint32
gss_context_time (OM_uint32 *minor_status,
                  const gss_ctx_id_t context_handle,
                  OM_uint32 *time_rec);

Determines the number of seconds for which the specified context will remain valid.

Parameters

minor_status

(Integer, modify) Implementation specific status code.

 

context_handle

(gss_ctx_id_t, read) Identifies the context to be interrogated.

 

time_rec

(Integer, modify) Number of seconds that the context will remain valid. If the context has already expired, zero will be returned.

 

Returns

GSS_S_COMPLETE: Successful completion.

GSS_S_CONTEXT_EXPIRED: The context has already expired.

GSS_S_NO_CONTEXT: The context_handle parameter did not identify a valid context


gss_get_mic ()

OM_uint32
gss_get_mic (OM_uint32 *minor_status,
             const gss_ctx_id_t context_handle,
             gss_qop_t qop_req,
             const gss_buffer_t message_buffer,
             gss_buffer_t message_token);

Generates a cryptographic MIC for the supplied message, and places the MIC in a token for transfer to the peer application. The qop_req parameter allows a choice between several cryptographic algorithms, if supported by the chosen mechanism.

Since some application-level protocols may wish to use tokens emitted by gss_wrap() to provide "secure framing", implementations must support derivation of MICs from zero-length messages.

Parameters

minor_status

(Integer, modify) Mechanism specific status code.

 

context_handle

(gss_ctx_id_t, read) Identifies the context on which the message will be sent.

 

qop_req

(gss_qop_t, read, optional) Specifies requested quality of protection. Callers are encouraged, on portability grounds, to accept the default quality of protection offered by the chosen mechanism, which may be requested by specifying GSS_C_QOP_DEFAULT for this parameter. If an unsupported protection strength is requested, gss_get_mic will return a major_status of GSS_S_BAD_QOP.

 

message_buffer

(buffer, opaque, read) Message to be protected.

 

message_token

(buffer, opaque, modify) Buffer to receive token. The application must free storage associated with this buffer after use with a call to gss_release_buffer().

 

Returns

GSS_S_COMPLETE: Successful completion.

GSS_S_CONTEXT_EXPIRED: The context has already expired.

GSS_S_NO_CONTEXT: The context_handle parameter did not identify a valid context.

GSS_S_BAD_QOP: The specified QOP is not supported by the mechanism.


gss_verify_mic ()

OM_uint32
gss_verify_mic (OM_uint32 *minor_status,
                const gss_ctx_id_t context_handle,
                const gss_buffer_t message_buffer,
                const gss_buffer_t token_buffer,
                gss_qop_t *qop_state);

Verifies that a cryptographic MIC, contained in the token parameter, fits the supplied message. The qop_state parameter allows a message recipient to determine the strength of protection that was applied to the message.

Since some application-level protocols may wish to use tokens emitted by gss_wrap() to provide "secure framing", implementations must support the calculation and verification of MICs over zero-length messages.

Parameters

minor_status

(Integer, modify) Mechanism specific status code.

 

context_handle

(gss_ctx_id_t, read) Identifies the context on which the message arrived.

 

message_buffer

(buffer, opaque, read) Message to be verified.

 

token_buffer

(buffer, opaque, read) Token associated with message.

 

qop_state

(gss_qop_t, modify, optional) Quality of protection gained from MIC Specify NULL if not required.

 

Returns

GSS_S_COMPLETE: Successful completion.

GSS_S_DEFECTIVE_TOKEN: The token failed consistency checks.

GSS_S_BAD_SIG: The MIC was incorrect.

GSS_S_DUPLICATE_TOKEN: The token was valid, and contained a correct MIC for the message, but it had already been processed.

GSS_S_OLD_TOKEN: The token was valid, and contained a correct MIC for the message, but it is too old to check for duplication.

GSS_S_UNSEQ_TOKEN: The token was valid, and contained a correct MIC for the message, but has been verified out of sequence; a later token has already been received.

GSS_S_GAP_TOKEN: The token was valid, and contained a correct MIC for the message, but has been verified out of sequence; an earlier expected token has not yet been received.

GSS_S_CONTEXT_EXPIRED: The context has already expired.

GSS_S_NO_CONTEXT: The context_handle parameter did not identify a valid context.


gss_wrap ()

OM_uint32
gss_wrap (OM_uint32 *minor_status,
          const gss_ctx_id_t context_handle,
          int conf_req_flag,
          gss_qop_t qop_req,
          const gss_buffer_t input_message_buffer,
          int *conf_state,
          gss_buffer_t output_message_buffer);

Attaches a cryptographic MIC and optionally encrypts the specified input_message. The output_message contains both the MIC and the message. The qop_req parameter allows a choice between several cryptographic algorithms, if supported by the chosen mechanism.

Since some application-level protocols may wish to use tokens emitted by gss_wrap() to provide "secure framing", implementations must support the wrapping of zero-length messages.

Parameters

minor_status

(Integer, modify) Mechanism specific status code.

 

context_handle

(gss_ctx_id_t, read) Identifies the context on which the message will be sent.

 

conf_req_flag

(boolean, read) Non-zero - Both confidentiality and integrity services are requested. Zero - Only integrity service is requested.

 

qop_req

(gss_qop_t, read, optional) Specifies required quality of protection. A mechanism-specific default may be requested by setting qop_req to GSS_C_QOP_DEFAULT. If an unsupported protection strength is requested, gss_wrap will return a major_status of GSS_S_BAD_QOP.

 

input_message_buffer

(buffer, opaque, read) Message to be protected.

 

conf_state

(boolean, modify, optional) Non-zero - Confidentiality, data origin authentication and integrity services have been applied. Zero - Integrity and data origin services only has been applied. Specify NULL if not required.

 

output_message_buffer

(buffer, opaque, modify) Buffer to receive protected message. Storage associated with this message must be freed by the application after use with a call to gss_release_buffer().

 

Returns

GSS_S_COMPLETE: Successful completion.

GSS_S_CONTEXT_EXPIRED: The context has already expired.

GSS_S_NO_CONTEXT: The context_handle parameter did not identify a valid context.

GSS_S_BAD_QOP: The specified QOP is not supported by the mechanism.


gss_unwrap ()

OM_uint32
gss_unwrap (OM_uint32 *minor_status,
            const gss_ctx_id_t context_handle,
            const gss_buffer_t input_message_buffer,
            gss_buffer_t output_message_buffer,
            int *conf_state,
            gss_qop_t *qop_state);

Converts a message previously protected by gss_wrap back to a usable form, verifying the embedded MIC. The conf_state parameter indicates whether the message was encrypted; the qop_state parameter indicates the strength of protection that was used to provide the confidentiality and integrity services.

Since some application-level protocols may wish to use tokens emitted by gss_wrap() to provide "secure framing", implementations must support the wrapping and unwrapping of zero-length messages.

Parameters

minor_status

(Integer, modify) Mechanism specific status code.

 

context_handle

(gss_ctx_id_t, read) Identifies the context on which the message arrived.

 

input_message_buffer

(buffer, opaque, read) Protected message.

 

output_message_buffer

(buffer, opaque, modify) Buffer to receive unwrapped message. Storage associated with this buffer must be freed by the application after use use with a call to gss_release_buffer().

 

conf_state

(boolean, modify, optional) Non-zero - Confidentiality and integrity protection were used. Zero - Integrity service only was used. Specify NULL if not required.

 

qop_state

(gss_qop_t, modify, optional) Quality of protection provided. Specify NULL if not required.

 

Returns

GSS_S_COMPLETE: Successful completion.

GSS_S_DEFECTIVE_TOKEN: The token failed consistency checks.

GSS_S_BAD_SIG: The MIC was incorrect.

GSS_S_DUPLICATE_TOKEN: The token was valid, and contained a correct MIC for the message, but it had already been processed.

GSS_S_OLD_TOKEN: The token was valid, and contained a correct MIC for the message, but it is too old to check for duplication.

GSS_S_UNSEQ_TOKEN: The token was valid, and contained a correct MIC for the message, but has been verified out of sequence; a later token has already been received.

GSS_S_GAP_TOKEN: The token was valid, and contained a correct MIC for the message, but has been verified out of sequence; an earlier expected token has not yet been received.

GSS_S_CONTEXT_EXPIRED: The context has already expired.

GSS_S_NO_CONTEXT: The context_handle parameter did not identify a valid context.


gss_display_status ()

OM_uint32
gss_display_status (OM_uint32 *minor_status,
                    OM_uint32 status_value,
                    int status_type,
                    const gss_OID mech_type,
                    OM_uint32 *message_context,
                    gss_buffer_t status_string);

Allows an application to obtain a textual representation of a GSS-API status code, for display to the user or for logging purposes. Since some status values may indicate multiple conditions, applications may need to call gss_display_status multiple times, each call generating a single text string. The message_context parameter is used by gss_display_status to store state information about which error messages have already been extracted from a given status_value; message_context must be initialized to 0 by the application prior to the first call, and gss_display_status will return a non-zero value in this parameter if there are further messages to extract.

The message_context parameter contains all state information required by gss_display_status in order to extract further messages from the status_value; even when a non-zero value is returned in this parameter, the application is not required to call gss_display_status again unless subsequent messages are desired. The following code extracts all messages from a given status code and prints them to stderr:

OM_uint32 message_context; OM_uint32 status_code; OM_uint32 maj_status; OM_uint32 min_status; gss_buffer_desc status_string;

...

message_context = 0;

do { maj_status = gss_display_status ( &min_status, status_code, GSS_C_GSS_CODE, GSS_C_NO_OID, &message_context, &status_string)

fprintf(stderr, "%.*s\n", (int)status_string.length,

(char *)status_string.value);

gss_release_buffer(&min_status, &status_string);

The message_context parameter contains all state information required by gss_display_status in order to extract further messages from the status_value; even when a non-zero value is returned in this parameter, the application is not required to call gss_display_status again unless subsequent messages are desired. The following code extracts all messages from a given status code and prints them to stderr:

OM_uint32 message_context; OM_uint32 status_code; OM_uint32 maj_status; OM_uint32 min_status; gss_buffer_desc status_string;

...

message_context = 0;

do { maj_status = gss_display_status ( &min_status, status_code, GSS_C_GSS_CODE, GSS_C_NO_OID, &message_context, &status_string)

fprintf(stderr, "%.*s\n", (int)status_string.length,

(char *)status_string.value);

gss_release_buffer(&min_status, &status_string);

} while (message_context != 0);

Parameters

minor_status

(integer, modify) Mechanism specific status code.

 

status_value

(Integer, read) Status value to be converted.

 

status_type

(Integer, read) GSS_C_GSS_CODE - status_value is a GSS status code. GSS_C_MECH_CODE - status_value is a mechanism status code.

 

mech_type

(Object ID, read, optional) Underlying mechanism (used to interpret a minor status value). Supply GSS_C_NO_OID to obtain the system default.

 

message_context

(Integer, read/modify) Should be initialized to zero by the application prior to the first call. On return from gss_display_status(), a non-zero status_value parameter indicates that additional messages may be extracted from the status code via subsequent calls to gss_display_status(), passing the same status_value, status_type, mech_type, and message_context parameters.

 

status_string

(buffer, character string, modify) Textual interpretation of the status_value. Storage associated with this parameter must be freed by the application after use with a call to gss_release_buffer().

 

Returns

GSS_S_COMPLETE: Successful completion.

GSS_S_BAD_MECH: Indicates that translation in accordance with an unsupported mechanism type was requested.

GSS_S_BAD_STATUS: The status value was not recognized, or the status type was neither GSS_C_GSS_CODE nor GSS_C_MECH_CODE.


gss_indicate_mechs ()

OM_uint32
gss_indicate_mechs (OM_uint32 *minor_status,
                    gss_OID_set *mech_set);

Allows an application to determine which underlying security mechanisms are available.

Parameters

minor_status

(integer, modify) Mechanism specific status code.

 

mech_set

(set of Object IDs, modify) Set of implementation-supported mechanisms. The returned gss_OID_set value will be a dynamically-allocated OID set, that should be released by the caller after use with a call to gss_release_oid_set().

 

Returns

GSS_S_COMPLETE: Successful completion.


gss_compare_name ()

OM_uint32
gss_compare_name (OM_uint32 *minor_status,
                  const gss_name_t name1,
                  const gss_name_t name2,
                  int *name_equal);

Allows an application to compare two internal-form names to determine whether they refer to the same entity.

If either name presented to gss_compare_name denotes an anonymous principal, the routines should indicate that the two names do not refer to the same identity.

Parameters

minor_status

(Integer, modify) Mechanism specific status code.

 

name1

(gss_name_t, read) Internal-form name.

 

name2

(gss_name_t, read) Internal-form name.

 

name_equal

(boolean, modify) Non-zero - names refer to same entity. Zero - names refer to different entities (strictly, the names are not known to refer to the same identity).

 

Returns

GSS_S_COMPLETE: Successful completion.

GSS_S_BAD_NAMETYPE: The two names were of incomparable types.

GSS_S_BAD_NAME: One or both of name1 or name2 was ill-formed.


gss_display_name ()

OM_uint32
gss_display_name (OM_uint32 *minor_status,
                  const gss_name_t input_name,
                  gss_buffer_t output_name_buffer,
                  gss_OID *output_name_type);

Allows an application to obtain a textual representation of an opaque internal-form name for display purposes. The syntax of a printable name is defined by the GSS-API implementation.

If input_name denotes an anonymous principal, the implementation should return the gss_OID value GSS_C_NT_ANONYMOUS as the output_name_type, and a textual name that is syntactically distinct from all valid supported printable names in output_name_buffer.

If input_name was created by a call to gss_import_name, specifying GSS_C_NO_OID as the name-type, implementations that employ lazy conversion between name types may return GSS_C_NO_OID via the output_name_type parameter.

Parameters

minor_status

(Integer, modify) Mechanism specific status code.

 

input_name

(gss_name_t, read) Name to be displayed.

 

output_name_buffer

(buffer, character-string, modify) Buffer to receive textual name string. The application must free storage associated with this name after use with a call to gss_release_buffer().

 

output_name_type

(Object ID, modify, optional) The type of the returned name. The returned gss_OID will be a pointer into static storage, and should be treated as read-only by the caller (in particular, the application should not attempt to free it). Specify NULL if not required.

 

Returns

GSS_S_COMPLETE: Successful completion.

GSS_S_BAD_NAME: input_name was ill-formed.


gss_import_name ()

OM_uint32
gss_import_name (OM_uint32 *minor_status,
                 const gss_buffer_t input_name_buffer,
                 const gss_OID input_name_type,
                 gss_name_t *output_name);

Convert a contiguous string name to internal form. In general, the internal name returned (via the output_name parameter) will not be an MN; the exception to this is if the input_name_type indicates that the contiguous string provided via the input_name_buffer parameter is of type GSS_C_NT_EXPORT_NAME, in which case the returned internal name will be an MN for the mechanism that exported the name.

Parameters

minor_status

(Integer, modify) Mechanism specific status code.

 

input_name_buffer

(buffer, octet-string, read) Buffer containing contiguous string name to convert.

 

input_name_type

(Object ID, read, optional) Object ID specifying type of printable name. Applications may specify either GSS_C_NO_OID to use a mechanism-specific default printable syntax, or an OID recognized by the GSS-API implementation to name a specific namespace.

 

output_name

(gss_name_t, modify) Returned name in internal form. Storage associated with this name must be freed by the application after use with a call to gss_release_name().

 

Returns

GSS_S_COMPLETE: Successful completion.

GSS_S_BAD_NAMETYPE: The input_name_type was unrecognized.

GSS_S_BAD_NAME: The input_name parameter could not be interpreted as a name of the specified type.

GSS_S_BAD_MECH: The input name-type was GSS_C_NT_EXPORT_NAME, but the mechanism contained within the input-name is not supported.


gss_export_name ()

OM_uint32
gss_export_name (OM_uint32 *minor_status,
                 const gss_name_t input_name,
                 gss_buffer_t exported_name);

To produce a canonical contiguous string representation of a mechanism name (MN), suitable for direct comparison (e.g. with memcmp) for use in authorization functions (e.g. matching entries in an access-control list). The input_name parameter must specify a valid MN (i.e. an internal name generated by gss_accept_sec_context() or by gss_canonicalize_name()).

Parameters

minor_status

(Integer, modify) Mechanism specific status code.

 

input_name

(gss_name_t, read) The MN to be exported.

 

exported_name

(gss_buffer_t, octet-string, modify) The canonical contiguous string form of input_name . Storage associated with this string must freed by the application after use with gss_release_buffer().

 

Returns

GSS_S_COMPLETE: Successful completion.

GSS_S_NAME_NOT_MN: The provided internal name was not a mechanism name.

GSS_S_BAD_NAME: The provided internal name was ill-formed.

GSS_S_BAD_NAMETYPE: The internal name was of a type not supported by the GSS-API implementation.


gss_release_name ()

OM_uint32
gss_release_name (OM_uint32 *minor_status,
                  gss_name_t *name);

Free GSSAPI-allocated storage associated with an internal-form name. The name is set to GSS_C_NO_NAME on successful completion of this call.

Parameters

minor_status

(Integer, modify) Mechanism specific status code.

 

name

(gss_name_t, modify) The name to be deleted.

 

Returns

GSS_S_COMPLETE: Successful completion.

GSS_S_BAD_NAME: The name parameter did not contain a valid name.


gss_release_buffer ()

OM_uint32
gss_release_buffer (OM_uint32 *minor_status,
                    gss_buffer_t buffer);

Free storage associated with a buffer. The storage must have been allocated by a GSS-API routine. In addition to freeing the associated storage, the routine will zero the length field in the descriptor to which the buffer parameter refers, and implementations are encouraged to additionally set the pointer field in the descriptor to NULL. Any buffer object returned by a GSS-API routine may be passed to gss_release_buffer (even if there is no storage associated with the buffer).

Parameters

minor_status

(integer, modify) Mechanism specific status code.

 

buffer

(buffer, modify) The storage associated with the buffer will be deleted. The gss_buffer_desc object will not be freed, but its length field will be zeroed.

 

Returns

GSS_S_COMPLETE: Successful completion.


gss_release_oid_set ()

OM_uint32
gss_release_oid_set (OM_uint32 *minor_status,
                     gss_OID_set *set);

Free storage associated with a GSSAPI-generated gss_OID_set object. The set parameter must refer to an OID-set that was returned from a GSS-API routine. gss_release_oid_set() will free the storage associated with each individual member OID, the OID set's elements array, and the gss_OID_set_desc.

The gss_OID_set parameter is set to GSS_C_NO_OID_SET on successful completion of this routine.

Parameters

minor_status

(integer, modify) Mechanism specific status code.

 

set

(Set of Object IDs, modify) The storage associated with the gss_OID_set will be deleted.

 

Returns

GSS_S_COMPLETE: Successful completion.


gss_inquire_cred ()

OM_uint32
gss_inquire_cred (OM_uint32 *minor_status,
                  const gss_cred_id_t cred_handle,
                  gss_name_t *name,
                  OM_uint32 *lifetime,
                  gss_cred_usage_t *cred_usage,
                  gss_OID_set *mechanisms);

Obtains information about a credential.

Parameters

minor_status

(integer, modify) Mechanism specific status code.

 

cred_handle

(gss_cred_id_t, read) A handle that refers to the target credential. Specify GSS_C_NO_CREDENTIAL to inquire about the default initiator principal.

 

name

(gss_name_t, modify, optional) The name whose identity the credential asserts. Storage associated with this name should be freed by the application after use with a call to gss_release_name(). Specify NULL if not required.

 

lifetime

(Integer, modify, optional) The number of seconds for which the credential will remain valid. If the credential has expired, this parameter will be set to zero. If the implementation does not support credential expiration, the value GSS_C_INDEFINITE will be returned. Specify NULL if not required.

 

cred_usage

(gss_cred_usage_t, modify, optional) How the credential may be used. One of the following: GSS_C_INITIATE, GSS_C_ACCEPT, GSS_C_BOTH. Specify NULL if not required.

 

mechanisms

(gss_OID_set, modify, optional) Set of mechanisms supported by the credential. Storage associated with this OID set must be freed by the application after use with a call to gss_release_oid_set(). Specify NULL if not required.

 

Returns

GSS_S_COMPLETE: Successful completion.

GSS_S_NO_CRED: The referenced credentials could not be accessed.

GSS_S_DEFECTIVE_CREDENTIAL: The referenced credentials were invalid.

GSS_S_CREDENTIALS_EXPIRED: The referenced credentials have expired. If the lifetime parameter was not passed as NULL, it will be set to 0.


gss_inquire_context ()

OM_uint32
gss_inquire_context (OM_uint32 *minor_status,
                     const gss_ctx_id_t context_handle,
                     gss_name_t *src_name,
                     gss_name_t *targ_name,
                     OM_uint32 *lifetime_rec,
                     gss_OID *mech_type,
                     OM_uint32 *ctx_flags,
                     int *locally_initiated,
                     int *open);

Obtains information about a security context. The caller must already have obtained a handle that refers to the context, although the context need not be fully established.

The ctx_flags values:

GSS_C_DELEG_FLAG::

  • True - Credentials were delegated from the initiator to the acceptor.

  • False - No credentials were delegated.

GSS_C_MUTUAL_FLAG::

  • True - The acceptor was authenticated to the initiator.

  • False - The acceptor did not authenticate itself.

GSS_C_REPLAY_FLAG::

  • True - replay of protected messages will be detected.

  • False - replayed messages will not be detected.

GSS_C_SEQUENCE_FLAG::

  • True - out-of-sequence protected messages will be detected.

  • False - out-of-sequence messages will not be detected.

GSS_C_CONF_FLAG::

  • True - Confidentiality service may be invoked by calling gss_wrap routine.

  • False - No confidentiality service (via gss_wrap) available. gss_wrap will provide message encapsulation, data-origin authentication and integrity services only.

GSS_C_INTEG_FLAG::

  • True - Integrity service may be invoked by calling either gss_get_mic or gss_wrap routines.

  • False - Per-message integrity service unavailable.

GSS_C_ANON_FLAG::

  • True - The initiator's identity will not be revealed to the acceptor. The src_name parameter (if requested) contains an anonymous internal name.

  • False - The initiator has been authenticated normally.

GSS_C_PROT_READY_FLAG::

  • True - Protection services (as specified by the states of the GSS_C_CONF_FLAG and GSS_C_INTEG_FLAG) are available for use.

  • False - Protection services (as specified by the states of the GSS_C_CONF_FLAG and GSS_C_INTEG_FLAG) are available only if the context is fully established (i.e. if the open parameter is non-zero).

GSS_C_TRANS_FLAG::

  • True - The resultant security context may be transferred to other processes via a call to gss_export_sec_context().

  • False - The security context is not transferable.

Parameters

minor_status

(Integer, modify) Mechanism specific status code.

 

context_handle

(gss_ctx_id_t, read) A handle that refers to the security context.

 

src_name

(gss_name_t, modify, optional) The name of the context initiator. If the context was established using anonymous authentication, and if the application invoking gss_inquire_context is the context acceptor, an anonymous name will be returned. Storage associated with this name must be freed by the application after use with a call to gss_release_name(). Specify NULL if not required.

 

targ_name

(gss_name_t, modify, optional) The name of the context acceptor. Storage associated with this name must be freed by the application after use with a call to gss_release_name(). If the context acceptor did not authenticate itself, and if the initiator did not specify a target name in its call to gss_init_sec_context(), the value GSS_C_NO_NAME will be returned. Specify NULL if not required.

 

lifetime_rec

(Integer, modify, optional) The number of seconds for which the context will remain valid. If the context has expired, this parameter will be set to zero. If the implementation does not support context expiration, the value GSS_C_INDEFINITE will be returned. Specify NULL if not required.

 

mech_type

(gss_OID, modify, optional) The security mechanism providing the context. The returned OID will be a pointer to static storage that should be treated as read-only by the application; in particular the application should not attempt to free it. Specify NULL if not required.

 

ctx_flags

(bit-mask, modify, optional) Contains various independent flags, each of which indicates that the context supports (or is expected to support, if ctx_open is false) a specific service option. If not needed, specify NULL. Symbolic names are provided for each flag, and the symbolic names corresponding to the required flags should be logically-ANDed with the ret_flags value to test whether a given option is supported by the context. See below for the flags.

 

locally_initiated

(Boolean, modify) Non-zero if the invoking application is the context initiator. Specify NULL if not required.

 

open

(Boolean, modify) Non-zero if the context is fully established; Zero if a context-establishment token is expected from the peer application. Specify NULL if not required.

 

Returns

GSS_S_COMPLETE: Successful completion.

GSS_S_NO_CONTEXT: The referenced context could not be accessed.


gss_wrap_size_limit ()

OM_uint32
gss_wrap_size_limit (OM_uint32 *minor_status,
                     const gss_ctx_id_t context_handle,
                     int conf_req_flag,
                     gss_qop_t qop_req,
                     OM_uint32 req_output_size,
                     OM_uint32 *max_input_size);

Allows an application to determine the maximum message size that, if presented to gss_wrap with the same conf_req_flag and qop_req parameters, will result in an output token containing no more than req_output_size bytes.

This call is intended for use by applications that communicate over protocols that impose a maximum message size. It enables the application to fragment messages prior to applying protection.

GSS-API implementations are recommended but not required to detect invalid QOP values when gss_wrap_size_limit() is called. This routine guarantees only a maximum message size, not the availability of specific QOP values for message protection.

Successful completion of this call does not guarantee that gss_wrap will be able to protect a message of length max_input_size bytes, since this ability may depend on the availability of system resources at the time that gss_wrap is called. However, if the implementation itself imposes an upper limit on the length of messages that may be processed by gss_wrap, the implementation should not return a value via max_input_bytes that is greater than this length.

Parameters

minor_status

(Integer, modify) Mechanism specific status code.

 

context_handle

(gss_ctx_id_t, read) A handle that refers to the security over which the messages will be sent.

 

conf_req_flag

(Boolean, read) Indicates whether gss_wrap will be asked to apply confidentiality protection in addition to integrity protection. See the routine description for gss_wrap for more details.

 

qop_req

(gss_qop_t, read) Indicates the level of protection that gss_wrap will be asked to provide. See the routine description for gss_wrap for more details.

 

req_output_size

(Integer, read) The desired maximum size for tokens emitted by gss_wrap.

 

max_input_size

(Integer, modify) The maximum input message size that may be presented to gss_wrap in order to guarantee that the emitted token shall be no larger than req_output_size bytes.

 

Returns

GSS_S_COMPLETE: Successful completion.

GSS_S_NO_CONTEXT: The referenced context could not be accessed.

GSS_S_CONTEXT_EXPIRED: The context has expired.

GSS_S_BAD_QOP: The specified QOP is not supported by the mechanism.


gss_add_cred ()

OM_uint32
gss_add_cred (OM_uint32 *minor_status,
              const gss_cred_id_t input_cred_handle,
              const gss_name_t desired_name,
              const gss_OID desired_mech,
              gss_cred_usage_t cred_usage,
              OM_uint32 initiator_time_req,
              OM_uint32 acceptor_time_req,
              gss_cred_id_t *output_cred_handle,
              gss_OID_set *actual_mechs,
              OM_uint32 *initiator_time_rec,
              OM_uint32 *acceptor_time_rec);

Adds a credential-element to a credential. The credential-element is identified by the name of the principal to which it refers. GSS-API implementations must impose a local access-control policy on callers of this routine to prevent unauthorized callers from acquiring credential-elements to which they are not entitled. This routine is not intended to provide a "login to the network" function, as such a function would involve the creation of new mechanism-specific authentication data, rather than merely acquiring a GSS-API handle to existing data. Such functions, if required, should be defined in implementation-specific extensions to the API.

If desired_name is GSS_C_NO_NAME, the call is interpreted as a request to add a credential element that will invoke default behavior when passed to gss_init_sec_context() (if cred_usage is GSS_C_INITIATE or GSS_C_BOTH) or gss_accept_sec_context() (if cred_usage is GSS_C_ACCEPT or GSS_C_BOTH).

This routine is expected to be used primarily by context acceptors, since implementations are likely to provide mechanism-specific ways of obtaining GSS-API initiator credentials from the system login process. Some implementations may therefore not support the acquisition of GSS_C_INITIATE or GSS_C_BOTH credentials via gss_acquire_cred for any name other than GSS_C_NO_NAME, or a name produced by applying either gss_inquire_cred to a valid credential, or gss_inquire_context to an active context.

If credential acquisition is time-consuming for a mechanism, the mechanism may choose to delay the actual acquisition until the credential is required (e.g. by gss_init_sec_context or gss_accept_sec_context). Such mechanism-specific implementation decisions should be invisible to the calling application; thus a call of gss_inquire_cred immediately following the call of gss_add_cred must return valid credential data, and may therefore incur the overhead of a deferred credential acquisition.

This routine can be used to either compose a new credential containing all credential-elements of the original in addition to the newly-acquire credential-element, or to add the new credential- element to an existing credential. If NULL is specified for the output_cred_handle parameter argument, the new credential-element will be added to the credential identified by input_cred_handle; if a valid pointer is specified for the output_cred_handle parameter, a new credential handle will be created.

If GSS_C_NO_CREDENTIAL is specified as the input_cred_handle, gss_add_cred will compose a credential (and set the output_cred_handle parameter accordingly) based on default behavior. That is, the call will have the same effect as if the application had first made a call to gss_acquire_cred(), specifying the same usage and passing GSS_C_NO_NAME as the desired_name parameter to obtain an explicit credential handle embodying default behavior, passed this credential handle to gss_add_cred(), and finally called gss_release_cred() on the first credential handle.

If GSS_C_NO_CREDENTIAL is specified as the input_cred_handle parameter, a non-NULL output_cred_handle must be supplied.

Parameters

minor_status

(integer, modify) Mechanism specific status code.

 

input_cred_handle

(gss_cred_id_t, read, optional) The credential to which a credential-element will be added. If GSS_C_NO_CREDENTIAL is specified, the routine will compose the new credential based on default behavior (see text). Note that, while the credential-handle is not modified by gss_add_cred(), the underlying credential will be modified if output_credential_handle is NULL.

 

desired_name

(gss_name_t, read.) Name of principal whose credential should be acquired.

 

desired_mech

(Object ID, read) Underlying security mechanism with which the credential may be used.

 

cred_usage

(gss_cred_usage_t, read) GSS_C_BOTH - Credential may be used either to initiate or accept security contexts. GSS_C_INITIATE - Credential will only be used to initiate security contexts. GSS_C_ACCEPT - Credential will only be used to accept security contexts.

 

initiator_time_req

(Integer, read, optional) number of seconds that the credential should remain valid for initiating security contexts. This argument is ignored if the composed credentials are of type GSS_C_ACCEPT. Specify GSS_C_INDEFINITE to request that the credentials have the maximum permitted initiator lifetime.

 

acceptor_time_req

(Integer, read, optional) number of seconds that the credential should remain valid for accepting security contexts. This argument is ignored if the composed credentials are of type GSS_C_INITIATE. Specify GSS_C_INDEFINITE to request that the credentials have the maximum permitted initiator lifetime.

 

output_cred_handle

(gss_cred_id_t, modify, optional) The returned credential handle, containing the new credential-element and all the credential-elements from input_cred_handle. If a valid pointer to a gss_cred_id_t is supplied for this parameter, gss_add_cred creates a new credential handle containing all credential-elements from the input_cred_handle and the newly acquired credential-element; if NULL is specified for this parameter, the newly acquired credential-element will be added to the credential identified by input_cred_handle. The resources associated with any credential handle returned via this parameter must be released by the application after use with a call to gss_release_cred().

 

actual_mechs

(Set of Object IDs, modify, optional) The complete set of mechanisms for which the new credential is valid. Storage for the returned OID-set must be freed by the application after use with a call to gss_release_oid_set(). Specify NULL if not required.

 

initiator_time_rec

(Integer, modify, optional) Actual number of seconds for which the returned credentials will remain valid for initiating contexts using the specified mechanism. If the implementation or mechanism does not support expiration of credentials, the value GSS_C_INDEFINITE will be returned. Specify NULL if not required

 

acceptor_time_rec

(Integer, modify, optional) Actual number of seconds for which the returned credentials will remain valid for accepting security contexts using the specified mechanism. If the implementation or mechanism does not support expiration of credentials, the value GSS_C_INDEFINITE will be returned. Specify NULL if not required

 

Returns

GSS_S_COMPLETE: Successful completion.

GSS_S_BAD_MECH: Unavailable mechanism requested.

GSS_S_BAD_NAMETYPE: Type contained within desired_name parameter is not supported.

GSS_S_BAD_NAME: Value supplied for desired_name parameter is ill-formed.

GSS_S_DUPLICATE_ELEMENT: The credential already contains an element for the requested mechanism with overlapping usage and validity period.

GSS_S_CREDENTIALS_EXPIRED: The required credentials could not be added because they have expired.

GSS_S_NO_CRED: No credentials were found for the specified name.


gss_inquire_cred_by_mech ()

OM_uint32
gss_inquire_cred_by_mech (OM_uint32 *minor_status,
                          const gss_cred_id_t cred_handle,
                          const gss_OID mech_type,
                          gss_name_t *name,
                          OM_uint32 *initiator_lifetime,
                          OM_uint32 *acceptor_lifetime,
                          gss_cred_usage_t *cred_usage);

Obtains per-mechanism information about a credential.

Parameters

minor_status

(Integer, modify) Mechanism specific status code.

 

cred_handle

(gss_cred_id_t, read) A handle that refers to the target credential. Specify GSS_C_NO_CREDENTIAL to inquire about the default initiator principal.

 

mech_type

(gss_OID, read) The mechanism for which information should be returned.

 

name

(gss_name_t, modify, optional) The name whose identity the credential asserts. Storage associated with this name must be freed by the application after use with a call to gss_release_name(). Specify NULL if not required.

 

initiator_lifetime

(Integer, modify, optional) The number of seconds for which the credential will remain capable of initiating security contexts under the specified mechanism. If the credential can no longer be used to initiate contexts, or if the credential usage for this mechanism is GSS_C_ACCEPT, this parameter will be set to zero. If the implementation does not support expiration of initiator credentials, the value GSS_C_INDEFINITE will be returned. Specify NULL if not required.

 

acceptor_lifetime

(Integer, modify, optional) The number of seconds for which the credential will remain capable of accepting security contexts under the specified mechanism. If the credential can no longer be used to accept contexts, or if the credential usage for this mechanism is GSS_C_INITIATE, this parameter will be set to zero. If the implementation does not support expiration of acceptor credentials, the value GSS_C_INDEFINITE will be returned. Specify NULL if not required.

 

cred_usage

(gss_cred_usage_t, modify, optional) How the credential may be used with the specified mechanism. One of the following: GSS_C_INITIATE, GSS_C_ACCEPT, GSS_C_BOTH. Specify NULL if not required.

 

Returns

GSS_S_COMPLETE: Successful completion.

GSS_S_NO_CRED: The referenced credentials could not be accessed.

GSS_S_DEFECTIVE_CREDENTIAL: The referenced credentials were invalid.

GSS_S_CREDENTIALS_EXPIRED: The referenced credentials have expired. If the lifetime parameter was not passed as NULL, it will be set to 0.


gss_export_sec_context ()

OM_uint32
gss_export_sec_context (OM_uint32 *minor_status,
                        gss_ctx_id_t *context_handle,
                        gss_buffer_t interprocess_token);

Provided to support the sharing of work between multiple processes. This routine will typically be used by the context-acceptor, in an application where a single process receives incoming connection requests and accepts security contexts over them, then passes the established context to one or more other processes for message exchange. gss_export_sec_context() deactivates the security context for the calling process and creates an interprocess token which, when passed to gss_import_sec_context in another process, will re-activate the context in the second process. Only a single instantiation of a given context may be active at any one time; a subsequent attempt by a context exporter to access the exported security context will fail.

The implementation may constrain the set of processes by which the interprocess token may be imported, either as a function of local security policy, or as a result of implementation decisions. For example, some implementations may constrain contexts to be passed only between processes that run under the same account, or which are part of the same process group.

The interprocess token may contain security-sensitive information (for example cryptographic keys). While mechanisms are encouraged to either avoid placing such sensitive information within interprocess tokens, or to encrypt the token before returning it to the application, in a typical object-library GSS-API implementation this may not be possible. Thus the application must take care to protect the interprocess token, and ensure that any process to which the token is transferred is trustworthy.

If creation of the interprocess token is successful, the implementation shall deallocate all process-wide resources associated with the security context, and set the context_handle to GSS_C_NO_CONTEXT. In the event of an error that makes it impossible to complete the export of the security context, the implementation must not return an interprocess token, and should strive to leave the security context referenced by the context_handle parameter untouched. If this is impossible, it is permissible for the implementation to delete the security context, providing it also sets the context_handle parameter to GSS_C_NO_CONTEXT.

Parameters

minor_status

(Integer, modify) Mechanism specific status code.

 

context_handle

(gss_ctx_id_t, modify) Context handle identifying the context to transfer.

 

interprocess_token

(buffer, opaque, modify) Token to be transferred to target process. Storage associated with this token must be freed by the application after use with a call to gss_release_buffer().

 

Returns

GSS_S_COMPLETE: Successful completion.

GSS_S_CONTEXT_EXPIRED: The context has expired.

GSS_S_NO_CONTEXT: The context was invalid.

GSS_S_UNAVAILABLE: The operation is not supported.


gss_import_sec_context ()

OM_uint32
gss_import_sec_context (OM_uint32 *minor_status,
                        const gss_buffer_t interprocess_token,
                        gss_ctx_id_t *context_handle);

Allows a process to import a security context established by another process. A given interprocess token may be imported only once. See gss_export_sec_context.

Parameters

minor_status

(Integer, modify) Mechanism specific status code.

 

interprocess_token

(buffer, opaque, modify) Token received from exporting process

 

context_handle

(gss_ctx_id_t, modify) Context handle of newly reactivated context. Resources associated with this context handle must be released by the application after use with a call to gss_delete_sec_context().

 

Returns

GSS_S_COMPLETE: Successful completion.

GSS_S_NO_CONTEXT: The token did not contain a valid context reference.

GSS_S_DEFECTIVE_TOKEN: The token was invalid.

GSS_S_UNAVAILABLE: The operation is unavailable.

GSS_S_UNAUTHORIZED: Local policy prevents the import of this context by the current process.


gss_create_empty_oid_set ()

OM_uint32
gss_create_empty_oid_set (OM_uint32 *minor_status,
                          gss_OID_set *oid_set);

Create an object-identifier set containing no object identifiers, to which members may be subsequently added using the gss_add_oid_set_member() routine. These routines are intended to be used to construct sets of mechanism object identifiers, for input to gss_acquire_cred.

Parameters

minor_status

(integer, modify) Mechanism specific status code.

 

oid_set

(Set of Object IDs, modify) The empty object identifier set. The routine will allocate the gss_OID_set_desc object, which the application must free after use with a call to gss_release_oid_set().

 

Returns

GSS_S_COMPLETE: Successful completion.


gss_add_oid_set_member ()

OM_uint32
gss_add_oid_set_member (OM_uint32 *minor_status,
                        const gss_OID member_oid,
                        gss_OID_set *oid_set);

Add an Object Identifier to an Object Identifier set. This routine is intended for use in conjunction with gss_create_empty_oid_set when constructing a set of mechanism OIDs for input to gss_acquire_cred. The oid_set parameter must refer to an OID-set that was created by GSS-API (e.g. a set returned by gss_create_empty_oid_set()). GSS-API creates a copy of the member_oid and inserts this copy into the set, expanding the storage allocated to the OID-set's elements array if necessary. The routine may add the new member OID anywhere within the elements array, and implementations should verify that the new member_oid is not already contained within the elements array; if the member_oid is already present, the oid_set should remain unchanged.

Parameters

minor_status

(integer, modify) Mechanism specific status code.

 

member_oid

(Object ID, read) The object identifier to copied into the set.

 

oid_set

(Set of Object ID, modify) The set in which the object identifier should be inserted.

 

Returns

GSS_S_COMPLETE: Successful completion.


gss_test_oid_set_member ()

OM_uint32
gss_test_oid_set_member (OM_uint32 *minor_status,
                         const gss_OID member,
                         const gss_OID_set set,
                         int *present);

Interrogate an Object Identifier set to determine whether a specified Object Identifier is a member. This routine is intended to be used with OID sets returned by gss_indicate_mechs(), gss_acquire_cred(), and gss_inquire_cred(), but will also work with user-generated sets.

Parameters

minor_status

(integer, modify) Mechanism specific status code.

 

member

(Object ID, read) The object identifier whose presence is to be tested.

 

set

(Set of Object ID, read) The Object Identifier set.

 

present

(Boolean, modify) Non-zero if the specified OID is a member of the set, zero if not.

 

Returns

GSS_S_COMPLETE: Successful completion.


gss_inquire_names_for_mech ()

OM_uint32
gss_inquire_names_for_mech (OM_uint32 *minor_status,
                            const gss_OID mechanism,
                            gss_OID_set *name_types);

Returns the set of nametypes supported by the specified mechanism.

Parameters

minor_status

(Integer, modify) Mechanism specific status code.

 

mechanism

(gss_OID, read) The mechanism to be interrogated.

 

name_types

(gss_OID_set, modify) Set of name-types supported by the specified mechanism. The returned OID set must be freed by the application after use with a call to gss_release_oid_set().

 

Returns

GSS_S_COMPLETE: Successful completion.


gss_inquire_mechs_for_name ()

OM_uint32
gss_inquire_mechs_for_name (OM_uint32 *minor_status,
                            const gss_name_t input_name,
                            gss_OID_set *mech_types);

Returns the set of mechanisms supported by the GSS-API implementation that may be able to process the specified name.

Each mechanism returned will recognize at least one element within the name. It is permissible for this routine to be implemented within a mechanism-independent GSS-API layer, using the type information contained within the presented name, and based on registration information provided by individual mechanism implementations. This means that the returned mech_types set may indicate that a particular mechanism will understand the name when in fact it would refuse to accept the name as input to gss_canonicalize_name, gss_init_sec_context, gss_acquire_cred or gss_add_cred (due to some property of the specific name, as opposed to the name type). Thus this routine should be used only as a prefilter for a call to a subsequent mechanism-specific routine.

Parameters

minor_status

(Integer, modify) Mechanism specific status code.

 

input_name

(gss_name_t, read) The name to which the inquiry relates.

 

mech_types

(gss_OID_set, modify) Set of mechanisms that may support the specified name. The returned OID set must be freed by the caller after use with a call to gss_release_oid_set().

 

Returns

GSS_S_COMPLETE: Successful completion.

GSS_S_BAD_NAME: The input_name parameter was ill-formed.

GSS_S_BAD_NAMETYPE: The input_name parameter contained an invalid or unsupported type of name.


gss_canonicalize_name ()

OM_uint32
gss_canonicalize_name (OM_uint32 *minor_status,
                       const gss_name_t input_name,
                       const gss_OID mech_type,
                       gss_name_t *output_name);

Generate a canonical mechanism name (MN) from an arbitrary internal name. The mechanism name is the name that would be returned to a context acceptor on successful authentication of a context where the initiator used the input_name in a successful call to gss_acquire_cred, specifying an OID set containing mech_type as its only member, followed by a call to gss_init_sec_context(), specifying mech_type as the authentication mechanism.

Parameters

minor_status

(Integer, modify) Mechanism specific status code.

 

input_name

(gss_name_t, read) The name for which a canonical form is desired.

 

mech_type

(Object ID, read) The authentication mechanism for which the canonical form of the name is desired. The desired mechanism must be specified explicitly; no default is provided.

 

output_name

(gss_name_t, modify) The resultant canonical name. Storage associated with this name must be freed by the application after use with a call to gss_release_name().

 

Returns

GSS_S_COMPLETE: Successful completion.


gss_duplicate_name ()

OM_uint32
gss_duplicate_name (OM_uint32 *minor_status,
                    const gss_name_t src_name,
                    gss_name_t *dest_name);

Create an exact duplicate of the existing internal name src_name . The new dest_name will be independent of src_name (i.e. src_name and dest_name must both be released, and the release of one shall not affect the validity of the other).

Parameters

minor_status

(Integer, modify) Mechanism specific status code.

 

src_name

(gss_name_t, read) Internal name to be duplicated.

 

dest_name

(gss_name_t, modify) The resultant copy of src_name . Storage associated with this name must be freed by the application after use with a call to gss_release_name().

 

Returns

GSS_S_COMPLETE: Successful completion.

GSS_S_BAD_NAME: The src_name parameter was ill-formed.


gss_sign ()

OM_uint32
gss_sign (OM_uint32 *minor_status,
          gss_ctx_id_t context_handle,
          int qop_req,
          gss_buffer_t message_buffer,
          gss_buffer_t message_token);

Returns


gss_verify ()

OM_uint32
gss_verify (OM_uint32 *minor_status,
            gss_ctx_id_t context_handle,
            gss_buffer_t message_buffer,
            gss_buffer_t token_buffer,
            int *qop_state);

Returns


gss_seal ()

OM_uint32
gss_seal (OM_uint32 *minor_status,
          gss_ctx_id_t context_handle,
          int conf_req_flag,
          int qop_req,
          gss_buffer_t input_message_buffer,
          int *conf_state,
          gss_buffer_t output_message_buffer);

Returns


gss_unseal ()

OM_uint32
gss_unseal (OM_uint32 *minor_status,
            gss_ctx_id_t context_handle,
            gss_buffer_t input_message_buffer,
            gss_buffer_t output_message_buffer,
            int *conf_state,
            int *qop_state);

Returns


gss_inquire_saslname_for_mech ()

OM_uint32
gss_inquire_saslname_for_mech (OM_uint32 *minor_status,
                               const gss_OID desired_mech,
                               gss_buffer_t sasl_mech_name,
                               gss_buffer_t mech_name,
                               gss_buffer_t mech_description);

Output the SASL mechanism name of a GSS-API mechanism. It also returns a name and description of the mechanism in a user friendly form.

Parameters

minor_status

(Integer, modify) Mechanism specific status code.

 

desired_mech

(OID, read) Identifies the GSS-API mechanism to query.

 

sasl_mech_name

(buffer, character-string, modify, optional) Buffer to receive SASL mechanism name. The application must free storage associated with this name after use with a call to gss_release_buffer().

 

mech_name

(buffer, character-string, modify, optional) Buffer to receive human readable mechanism name. The application must free storage associated with this name after use with a call to gss_release_buffer().

 

mech_description

(buffer, character-string, modify, optional) Buffer to receive description of mechanism. The application must free storage associated with this name after use with a call to gss_release_buffer().

 

Returns

GSS_S_COMPLETE: Successful completion.

GSS_S_BAD_MECH: The desired_mech OID is unsupported.


gss_inquire_mech_for_saslname ()

OM_uint32
gss_inquire_mech_for_saslname (OM_uint32 *minor_status,
                               const gss_buffer_t sasl_mech_name,
                               gss_OID *mech_type);

Output GSS-API mechanism OID of mechanism associated with given sasl_mech_name .

Parameters

minor_status

(Integer, modify) Mechanism specific status code.

 

sasl_mech_name

(buffer, character-string, read) Buffer with SASL mechanism name.

 

mech_type

(OID, modify, optional) Actual mechanism used. The OID returned via this parameter will be a pointer to static storage that should be treated as read-only; In particular the application should not attempt to free it. Specify NULL if not required.

 

Returns

GSS_S_COMPLETE: Successful completion.

GSS_S_BAD_MECH: There is no GSS-API mechanism known as sasl_mech_name .


gss_oid_equal ()

int
gss_oid_equal (gss_const_OID first_oid,
               gss_const_OID second_oid);

Compare two OIDs for equality. The comparison is "deep", i.e., the actual byte sequences of the OIDs are compared instead of just the pointer equality. This function is standardized in RFC 6339.

Parameters

first_oid

(Object ID, read) First Object identifier.

 

second_oid

(Object ID, read) First Object identifier.

 

Returns

Returns boolean value true when the two OIDs are equal, otherwise false.


gss_encapsulate_token ()

OM_uint32
gss_encapsulate_token (gss_const_buffer_t input_token,
                       gss_const_OID token_oid,
                       gss_buffer_t output_token);

Add the mechanism-independent token header to GSS-API context token data. This is used for the initial token of a GSS-API context establishment sequence. It incorporates an identifier of the mechanism type to be used on that context, and enables tokens to be interpreted unambiguously at GSS-API peers. See further section 3.1 of RFC 2743. This function is standardized in RFC 6339.

Parameters

input_token

(buffer, opaque, read) Buffer with GSS-API context token data.

 

token_oid

(Object ID, read) Object identifier of token.

 

output_token

(buffer, opaque, modify) Encapsulated token data; caller must release with gss_release_buffer().

 

Returns

GSS_S_COMPLETE: Indicates successful completion, and that output parameters holds correct information.

GSS_S_FAILURE: Indicates that encapsulation failed for reasons unspecified at the GSS-API level.


gss_decapsulate_token ()

OM_uint32
gss_decapsulate_token (gss_const_buffer_t input_token,
                       gss_const_OID token_oid,
                       gss_buffer_t output_token);

Remove the mechanism-independent token header from an initial GSS-API context token. Unwrap a buffer in the mechanism-independent token format. This is the reverse of gss_encapsulate_token(). The translation is loss-less, all data is preserved as is. This function is standardized in RFC 6339.

Parameters

input_token

(buffer, opaque, read) Buffer with GSS-API context token.

 

token_oid

(Object ID, read) Expected object identifier of token.

 

output_token

(buffer, opaque, modify) Decapsulated token data; caller must release with gss_release_buffer().

 

Returns

GSS_S_COMPLETE: Indicates successful completion, and that output parameters holds correct information.

GSS_S_DEFECTIVE_TOKEN: Means that the token failed consistency checks (e.g., OID mismatch or ASN.1 DER length errors).

GSS_S_FAILURE: Indicates that decapsulation failed for reasons unspecified at the GSS-API level.

Types and Values

gss_ctx_id_t

typedef struct gss_ctx_id_struct *gss_ctx_id_t;


gss_cred_id_t

typedef struct gss_cred_id_struct *gss_cred_id_t;


gss_name_t

typedef struct gss_name_struct *gss_name_t;


gss_uint32

typedef unsigned short gss_uint32;


OM_uint32

typedef gss_uint32 OM_uint32;


gss_qop_t

typedef OM_uint32 gss_qop_t;


gss_cred_usage_t

typedef int gss_cred_usage_t;


GSS_C_DELEG_FLAG

#define GSS_C_DELEG_FLAG      1


GSS_C_MUTUAL_FLAG

#define GSS_C_MUTUAL_FLAG     2


GSS_C_REPLAY_FLAG

#define GSS_C_REPLAY_FLAG     4


GSS_C_SEQUENCE_FLAG

#define GSS_C_SEQUENCE_FLAG   8


GSS_C_CONF_FLAG

#define GSS_C_CONF_FLAG       16


GSS_C_INTEG_FLAG

#define GSS_C_INTEG_FLAG      32


GSS_C_ANON_FLAG

#define GSS_C_ANON_FLAG       64


GSS_C_PROT_READY_FLAG

#define GSS_C_PROT_READY_FLAG 128


GSS_C_TRANS_FLAG

#define GSS_C_TRANS_FLAG      256


GSS_C_BOTH

#define GSS_C_BOTH     0


GSS_C_INITIATE

#define GSS_C_INITIATE 1


GSS_C_ACCEPT

#define GSS_C_ACCEPT   2


GSS_C_GSS_CODE

#define GSS_C_GSS_CODE  1


GSS_C_MECH_CODE

#define GSS_C_MECH_CODE 2


GSS_C_AF_UNSPEC

#define GSS_C_AF_UNSPEC     0


GSS_C_AF_LOCAL

#define GSS_C_AF_LOCAL      1


GSS_C_AF_INET

#define GSS_C_AF_INET       2


GSS_C_AF_IMPLINK

#define GSS_C_AF_IMPLINK    3


GSS_C_AF_PUP

#define GSS_C_AF_PUP        4


GSS_C_AF_CHAOS

#define GSS_C_AF_CHAOS      5


GSS_C_AF_NS

#define GSS_C_AF_NS         6


GSS_C_AF_NBS

#define GSS_C_AF_NBS        7


GSS_C_AF_ECMA

#define GSS_C_AF_ECMA       8


GSS_C_AF_DATAKIT

#define GSS_C_AF_DATAKIT    9


GSS_C_AF_CCITT

#define GSS_C_AF_CCITT      10


GSS_C_AF_SNA

#define GSS_C_AF_SNA        11


GSS_C_AF_DECnet

#define GSS_C_AF_DECnet     12


GSS_C_AF_DLI

#define GSS_C_AF_DLI        13


GSS_C_AF_LAT

#define GSS_C_AF_LAT        14


GSS_C_AF_HYLINK

#define GSS_C_AF_HYLINK     15


GSS_C_AF_APPLETALK

#define GSS_C_AF_APPLETALK  16


GSS_C_AF_BSC

#define GSS_C_AF_BSC        17


GSS_C_AF_DSS

#define GSS_C_AF_DSS        18


GSS_C_AF_OSI

#define GSS_C_AF_OSI        19


GSS_C_AF_X25

#define GSS_C_AF_X25        21


GSS_C_AF_NULLADDR

#define GSS_C_AF_NULLADDR   255


GSS_C_EMPTY_BUFFER

#define GSS_C_EMPTY_BUFFER {0, NULL}


GSS_C_NULL_OID

#define GSS_C_NULL_OID GSS_C_NO_OID


GSS_C_NULL_OID_SET

#define GSS_C_NULL_OID_SET GSS_C_NO_OID_SET


GSS_C_QOP_DEFAULT

#define GSS_C_QOP_DEFAULT 0


GSS_C_INDEFINITE

#define GSS_C_INDEFINITE 0xfffffffful


GSS_C_NT_USER_NAME

extern gss_OID GSS_C_NT_USER_NAME;


GSS_C_NT_MACHINE_UID_NAME

extern gss_OID GSS_C_NT_MACHINE_UID_NAME;


GSS_C_NT_STRING_UID_NAME

extern gss_OID GSS_C_NT_STRING_UID_NAME;


GSS_C_NT_HOSTBASED_SERVICE_X

extern gss_OID GSS_C_NT_HOSTBASED_SERVICE_X;


GSS_C_NT_HOSTBASED_SERVICE

extern gss_OID GSS_C_NT_HOSTBASED_SERVICE;


GSS_C_NT_ANONYMOUS

extern gss_OID GSS_C_NT_ANONYMOUS;


GSS_C_NT_EXPORT_NAME

extern gss_OID GSS_C_NT_EXPORT_NAME;


GSS_S_COMPLETE

#define GSS_S_COMPLETE 0


GSS_C_CALLING_ERROR_OFFSET

#define GSS_C_CALLING_ERROR_OFFSET 24


GSS_C_ROUTINE_ERROR_OFFSET

#define GSS_C_ROUTINE_ERROR_OFFSET 16


GSS_C_SUPPLEMENTARY_OFFSET

#define GSS_C_SUPPLEMENTARY_OFFSET 0


GSS_C_CALLING_ERROR_MASK

#define GSS_C_CALLING_ERROR_MASK 0377ul


GSS_C_ROUTINE_ERROR_MASK

#define GSS_C_ROUTINE_ERROR_MASK 0377ul


GSS_C_SUPPLEMENTARY_MASK

#define GSS_C_SUPPLEMENTARY_MASK 0177777ul


GSS_S_CALL_INACCESSIBLE_READ

#define GSS_S_CALL_INACCESSIBLE_READ (1ul << GSS_C_CALLING_ERROR_OFFSET)


GSS_S_CALL_INACCESSIBLE_WRITE

#define GSS_S_CALL_INACCESSIBLE_WRITE (2ul << GSS_C_CALLING_ERROR_OFFSET)


GSS_S_CALL_BAD_STRUCTURE

#define GSS_S_CALL_BAD_STRUCTURE (3ul << GSS_C_CALLING_ERROR_OFFSET)


GSS_S_BAD_MIC

#define GSS_S_BAD_MIC GSS_S_BAD_SIG


GSS_S_CONTINUE_NEEDED

#define GSS_S_CONTINUE_NEEDED (1ul << (GSS_C_SUPPLEMENTARY_OFFSET + 0))


GSS_S_DUPLICATE_TOKEN

#define GSS_S_DUPLICATE_TOKEN (1ul << (GSS_C_SUPPLEMENTARY_OFFSET + 1))


GSS_S_OLD_TOKEN

#define GSS_S_OLD_TOKEN		(1ul << (GSS_C_SUPPLEMENTARY_OFFSET + 2))


GSS_S_UNSEQ_TOKEN

#define GSS_S_UNSEQ_TOKEN (1ul << (GSS_C_SUPPLEMENTARY_OFFSET + 3))


GSS_S_GAP_TOKEN

#define GSS_S_GAP_TOKEN		(1ul << (GSS_C_SUPPLEMENTARY_OFFSET + 4))


gss_const_buffer_t

typedef const gss_buffer_desc *gss_const_buffer_t;


gss_const_ctx_id_t

typedef const struct gss_ctx_id_struct *gss_const_ctx_id_t;


gss_const_cred_id_t

typedef const struct gss_cred_id_struct *gss_const_cred_id_t;


gss_const_name_t

typedef const struct gss_name_struct *gss_const_name_t;


gss_const_OID

typedef const gss_OID_desc *gss_const_OID;


gss_const_OID_set

typedef const gss_OID_set_desc *gss_const_OID_set;

gss-1.0.3/doc/reference/html/intro.html0000644000000000000000000000574412415510376014704 00000000000000 GNU Generic Security Service (GSS) API Reference Manual: GNU Generic Security Service (GSS) API Reference Manual

GNU Generic Security Service (GSS) API Reference Manual

GSS is an implementation of the Generic Security Service Application Program Interface (GSS-API). GSS-API is used by network servers to provide security services, e.g., to authenticate SMTP/IMAP clients against SMTP/IMAP servers. GSS consists of a library and a manual.

GSS is developed for the GNU/Linux system, but runs on over 20 platforms including most major Unix platforms and Windows, and many kind of devices including iPAQ handhelds and S/390 mainframes.

GSS is a GNU project, and is licensed under the GNU General Public License version 3 or later.

gss-1.0.3/doc/reference/html/home.png0000644000000000000000000000040012415510376014301 00000000000000‰PNG  IHDRóÿabKGDÿÿÿ ½§“ pHYs × ×B(›xtIMEÝ¡ &IDAT8ËÝÒ½ AÅñßž¦f`n v`6`/¶`Y€š˜Ü¡`f&k$,Ëá}˜ˆ ÌüßÀ0ü§bŒ+Ô¸aQW~bæ ËOà e˜{‡y N°Á£üö[LáØÌ}.pÇiÀ­÷¨BzüžÆmm Šoæ·.I]7Ì^[úÃô;%:å†ÁVIEND®B`‚gss-1.0.3/doc/reference/html/index.html0000644000000000000000000000425012415510376014647 00000000000000 GNU Generic Security Service (GSS) API Reference Manual: GNU Generic Security Service (GSS) API Reference Manual

for GNU GSS 1.0.3 . The latest version of this documentation can be found on-line at https://www.gnu.org/software/gss/reference/.


gss-1.0.3/doc/reference/html/right-insensitive.png0000644000000000000000000000056512415510376017040 00000000000000‰PNG  IHDRóÿabKGDÿÿÿ ½§“ pHYs × ×B(›xtIMEÝ ¥­^IDAT8ËÍ’±JÃ`…¿ ‚“‹³«/ S’_$ÄÁÁAqrÐÙW(>€“à‚®©“m¥"]\œ„è(‘49.NÚdÒ3¸ß9Ü{á¯eM#MSI‡Î¹·E¯iHz|3{̲l½3 ,K˜k’ž†ÃáV'@EŸEQlwÀŠçyišî·Äqüçù‘™]KÀíh4:mµÄ¦²,;“t˜¤sç\aƒÆR5/¬7'¹W×õp”’Žs×­I’,Kº1³=àËÌÂ0´j0Wg³ÙØ>€Ý ¦­¯PUÕýïð»¤0 §]?qCÒ«™ùιgþ½~œÉkÄAâ…_IEND®B`‚gss-1.0.3/doc/reference/html/index.sgml0000644000000000000000000004361312415510376014653 00000000000000 gss-1.0.3/doc/reference/html/left-insensitive.png0000644000000000000000000000061312415510376016647 00000000000000‰PNG  IHDRóÿabKGDÿÿÿ ½§“ pHYs × ×B(›xtIMEÝÆ«q‡IDAT8ËÍ’­NQ…¿éö†…@¡p üdsÛÀÖ`*š4Á@ò„W@ A!ÈÔ†@6Ü^ƒ 5hxèIH R`sQpäÌ™339þBÊó|Ês¤ªKEQTÛíöK°@·ÛÎià¦^¯Ï~îWʆ½÷‹ÀÕûðå`0˜åTJ6·Tõ˜‘cYn6›AÞû Æ€½~¿ß±Ö>}Ç­Žœs;ªº ¨ˆlYkwËÞürˆ¼†ºó£ Þû5U= °/"›ÖÚç  ¬µ‡"ÒuU=ɲlü×ArÎÕDä˜zÃáp5I’ûà4^E+ÀP3Æœçàq_«êp Ì¥iñ¯ðUY¥‚p=#IEND®B`‚gss-1.0.3/doc/reference/html/right.png0000644000000000000000000000040512415510376014473 00000000000000‰PNG  IHDRóÿabKGDÿÿÿ ½§“ pHYs × ×B(›xtIMEÝ!ÜG’IDAT8ËÕÒ¯aÇñ?›M´½IdErš,¾Ù-¸ÑhîAâIl’Í ¯r’äy§ž}¿ç·s¿X6èæ ö!9¢Ÿ#èD‚ Œr$-¬BrÃ$GÒÀ"$”¹;™á‰æŸÍú—WZêä&–!¸cš·±øŠq \`ðÃÔ軀Oä¾ò=QouføòIEND®B`‚gss-1.0.3/doc/reference/html/up-insensitive.png0000644000000000000000000000056612415510376016350 00000000000000‰PNG  IHDRóÿabKGDÿÿÿ ½§“ pHYs × ×B(›xtIMEÝwIûIDAT8Ëí’?/QÅÏ™?[êu$¾€V³î›ÑâHTD³ø”ÛˆBM+¡!™ÂÌ<ˆDã+èô[mdÞ\…·bø{º{sÎ/97˜ªSÖÚ£º®»<ìTõ8ŒcÌÉ¿UU­‘¼‡•WÕÍ,Ë®ÿ”e¹EÑ €žªîÉSïmÛ®æy~û+À9·è½¿0`hŒ9u†ªº`Çñr¿ßùpÎÍ{ïÌ8‘m’ ªJkí€-o$—Dä¢  išË¾'¹; ‡ Jr‡äCð\¨*¿HΑ|JÓtCDÆßo#"ã$IÖ<«êBQ½é£êêÉ]•TKúIEND®B`‚gss-1.0.3/doc/reference/html/gss-krb5.html0000644000000000000000000002703512415510376015203 00000000000000 GNU Generic Security Service (GSS) API Reference Manual: krb5

krb5

krb5

Description

Functions

Types and Values

GSS_KRB5_S_G_BAD_SERVICE_NAME

#define GSS_KRB5_S_G_BAD_SERVICE_NAME 1


GSS_KRB5_S_G_BAD_STRING_UID

#define GSS_KRB5_S_G_BAD_STRING_UID 2


GSS_KRB5_S_G_NOUSER

#define GSS_KRB5_S_G_NOUSER 3


GSS_KRB5_S_G_VALIDATE_FAILED

#define GSS_KRB5_S_G_VALIDATE_FAILED 4


GSS_KRB5_S_G_BUFFER_ALLOC

#define GSS_KRB5_S_G_BUFFER_ALLOC 5


GSS_KRB5_S_G_BAD_MSG_CTX

#define GSS_KRB5_S_G_BAD_MSG_CTX 6


GSS_KRB5_S_G_WRONG_SIZE

#define GSS_KRB5_S_G_WRONG_SIZE 7


GSS_KRB5_S_G_BAD_USAGE

#define GSS_KRB5_S_G_BAD_USAGE 8


GSS_KRB5_S_G_UNKNOWN_QOP

#define GSS_KRB5_S_G_UNKNOWN_QOP 9


GSS_KRB5_S_KG_CCACHE_NOMATCH

#define GSS_KRB5_S_KG_CCACHE_NOMATCH 10


GSS_KRB5_S_KG_KEYTAB_NOMATCH

#define GSS_KRB5_S_KG_KEYTAB_NOMATCH 11


GSS_KRB5_S_KG_TGT_MISSING

#define GSS_KRB5_S_KG_TGT_MISSING 12


GSS_KRB5_S_KG_NO_SUBKEY

#define GSS_KRB5_S_KG_NO_SUBKEY 13


GSS_KRB5_S_KG_CONTEXT_ESTABLISHED

#define GSS_KRB5_S_KG_CONTEXT_ESTABLISHED 14


GSS_KRB5_S_KG_BAD_SIGN_TYPE

#define GSS_KRB5_S_KG_BAD_SIGN_TYPE 15


GSS_KRB5_S_KG_BAD_LENGTH

#define GSS_KRB5_S_KG_BAD_LENGTH 16


GSS_KRB5_S_KG_CTX_INCOMPLETE

#define GSS_KRB5_S_KG_CTX_INCOMPLETE 17


GSS_KRB5_NT_USER_NAME

extern gss_OID GSS_KRB5_NT_USER_NAME;


GSS_KRB5_NT_HOSTBASED_SERVICE_NAME

extern gss_OID GSS_KRB5_NT_HOSTBASED_SERVICE_NAME;


GSS_KRB5_NT_PRINCIPAL_NAME

extern gss_OID GSS_KRB5_NT_PRINCIPAL_NAME;


GSS_KRB5_NT_MACHINE_UID_NAME

extern gss_OID GSS_KRB5_NT_MACHINE_UID_NAME;


GSS_KRB5_NT_STRING_UID_NAME

extern gss_OID GSS_KRB5_NT_STRING_UID_NAME;

gss-1.0.3/doc/reference/html/up.png0000644000000000000000000000040412415510376014001 00000000000000‰PNG  IHDRóÿabKGDÿÿÿ ½§“ pHYs × ×B(›xtIMEÝ ”èÁ‘IDAT8Ëí’1 ƒ@DŸ•¶{ƒxa™ƒØÄ;$]r =JR´È1,Ë øSd„-©}0°ÌŸÙÏÂÂÎàüo¹L:m-˜¤QÞOäÀ[› Éäåkå T¸zþMÞ Lè¬Ì,š:ךuÀ!tÁK;æ ðP¦õÌôÀp Ot@£l¼ÿò/̵*á§l}IEND®B`‚gss-1.0.3/doc/reference/html/left.png0000644000000000000000000000040612415510376014311 00000000000000‰PNG  IHDRóÿabKGDÿÿÿ ½§“ pHYs × ×B(›xtIMEÝ,`m;½“IDAT8ËÕÒ¯Áa‡ñ?ÁDAPY‘\‚$‹º[p¢+ÐÜIÐIªMlfü('Úì}MpâÙyží{Îá_ª…ž¨¤ÂÞ¥Â}œ^£‘q xZ <Æ=àYjî) <0ù4\~Ó+Púöl#Ü"ÂÕÉ—,QÏ‘ôp ÉÍIÇlswÒÆ>÷•[/]_i0‘3ÃIEND®B`‚gss-1.0.3/doc/reference/html/gss-krb5-ext.html0000644000000000000000000001315412415510376015776 00000000000000 GNU Generic Security Service (GSS) API Reference Manual: krb5-ext

krb5-ext

krb5-ext

Types and Values

extern gss_OID GSS_KRB5
extern gss_OID_desc GSS_KRB5_static
extern gss_OID_desc GSS_KRB5_NT_USER_NAME_static
extern gss_OID_desc GSS_KRB5_NT_HOSTBASED_SERVICE_NAME_static
extern gss_OID_desc GSS_KRB5_NT_PRINCIPAL_NAME_static
extern gss_OID_desc GSS_KRB5_NT_MACHINE_UID_NAME_static
extern gss_OID_desc GSS_KRB5_NT_STRING_UID_NAME_static

Description

Functions

Types and Values

GSS_KRB5

extern gss_OID GSS_KRB5;


GSS_KRB5_static

extern gss_OID_desc GSS_KRB5_static;


GSS_KRB5_NT_USER_NAME_static

extern gss_OID_desc GSS_KRB5_NT_USER_NAME_static;


GSS_KRB5_NT_HOSTBASED_SERVICE_NAME_static

extern gss_OID_desc GSS_KRB5_NT_HOSTBASED_SERVICE_NAME_static;


GSS_KRB5_NT_PRINCIPAL_NAME_static

extern gss_OID_desc GSS_KRB5_NT_PRINCIPAL_NAME_static;


GSS_KRB5_NT_MACHINE_UID_NAME_static

extern gss_OID_desc GSS_KRB5_NT_MACHINE_UID_NAME_static;


GSS_KRB5_NT_STRING_UID_NAME_static

extern gss_OID_desc GSS_KRB5_NT_STRING_UID_NAME_static;

gss-1.0.3/doc/reference/gss-overrides.txt0000644000000000000000000000000012415507652015233 00000000000000gss-1.0.3/doc/reference/tmpl/0000755000000000000000000000000012415510376012741 500000000000000gss-1.0.3/doc/reference/tmpl/krb5-ext.sgml0000644000000000000000000000150312415510376015205 00000000000000 krb5-ext gss-1.0.3/doc/reference/tmpl/ext.sgml0000644000000000000000000000200412415510376014341 00000000000000 ext @req_version: @Returns: @name: @username: @Returns: gss-1.0.3/doc/reference/tmpl/gss.sgml0000644000000000000000000000114012415510376014335 00000000000000 gss gss-1.0.3/doc/reference/tmpl/gss-unused.sgml0000644000000000000000000000000012415510376015630 00000000000000gss-1.0.3/doc/reference/tmpl/krb5.sgml0000644000000000000000000000356712415510376014423 00000000000000 krb5 gss-1.0.3/doc/reference/tmpl/api.sgml0000644000000000000000000003262212415510376014323 00000000000000 api @x: @x: @x: @x: @minor_status: @desired_name: @time_req: @desired_mechs: @cred_usage: @output_cred_handle: @actual_mechs: @time_rec: @Returns: @minor_status: @cred_handle: @Returns: @minor_status: @initiator_cred_handle: @context_handle: @target_name: @mech_type: @req_flags: @time_req: @input_chan_bindings: @input_token: @actual_mech_type: @output_token: @ret_flags: @time_rec: @Returns: @minor_status: @context_handle: @acceptor_cred_handle: @input_token_buffer: @input_chan_bindings: @src_name: @mech_type: @output_token: @ret_flags: @time_rec: @delegated_cred_handle: @Returns: @minor_status: @context_handle: @token_buffer: @Returns: @minor_status: @context_handle: @output_token: @Returns: @minor_status: @context_handle: @time_rec: @Returns: @minor_status: @context_handle: @qop_req: @message_buffer: @message_token: @Returns: @minor_status: @context_handle: @message_buffer: @token_buffer: @qop_state: @Returns: @minor_status: @context_handle: @conf_req_flag: @qop_req: @input_message_buffer: @conf_state: @output_message_buffer: @Returns: @minor_status: @context_handle: @input_message_buffer: @output_message_buffer: @conf_state: @qop_state: @Returns: @minor_status: @status_value: @status_type: @mech_type: @message_context: @status_string: @Returns: @minor_status: @mech_set: @Returns: @minor_status: @name1: @name2: @name_equal: @Returns: @minor_status: @input_name: @output_name_buffer: @output_name_type: @Returns: @minor_status: @input_name_buffer: @input_name_type: @output_name: @Returns: @minor_status: @input_name: @exported_name: @Returns: @minor_status: @name: @Returns: @minor_status: @buffer: @Returns: @minor_status: @set: @Returns: @minor_status: @cred_handle: @name: @lifetime: @cred_usage: @mechanisms: @Returns: @minor_status: @context_handle: @src_name: @targ_name: @lifetime_rec: @mech_type: @ctx_flags: @locally_initiated: @open: @Returns: @minor_status: @context_handle: @conf_req_flag: @qop_req: @req_output_size: @max_input_size: @Returns: @minor_status: @input_cred_handle: @desired_name: @desired_mech: @cred_usage: @initiator_time_req: @acceptor_time_req: @output_cred_handle: @actual_mechs: @initiator_time_rec: @acceptor_time_rec: @Returns: @minor_status: @cred_handle: @mech_type: @name: @initiator_lifetime: @acceptor_lifetime: @cred_usage: @Returns: @minor_status: @context_handle: @interprocess_token: @Returns: @minor_status: @interprocess_token: @context_handle: @Returns: @minor_status: @oid_set: @Returns: @minor_status: @member_oid: @oid_set: @Returns: @minor_status: @member: @set: @present: @Returns: @minor_status: @mechanism: @name_types: @Returns: @minor_status: @input_name: @mech_types: @Returns: @minor_status: @input_name: @mech_type: @output_name: @Returns: @minor_status: @src_name: @dest_name: @Returns: @minor_status: @context_handle: @qop_req: @message_buffer: @message_token: @Returns: @minor_status: @context_handle: @message_buffer: @token_buffer: @qop_state: @Returns: @minor_status: @context_handle: @conf_req_flag: @qop_req: @input_message_buffer: @conf_state: @output_message_buffer: @Returns: @minor_status: @context_handle: @input_message_buffer: @output_message_buffer: @conf_state: @qop_state: @Returns: @minor_status: @desired_mech: @sasl_mech_name: @mech_name: @mech_description: @Returns: @minor_status: @sasl_mech_name: @mech_type: @Returns: @first_oid: @second_oid: @Returns: @input_token: @token_oid: @output_token: @Returns: @input_token: @token_oid: @output_token: @Returns: gss-1.0.3/doc/reference/Makefile.in0000644000000000000000000011754312415507621013764 00000000000000# Makefile.in generated by automake 1.14.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # -*- mode: makefile -*- #################################### # Everything below here is generic # #################################### VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ DIST_COMMON = $(top_srcdir)/gtk-doc.make $(srcdir)/Makefile.in \ $(srcdir)/Makefile.am $(srcdir)/version.xml.in subdir = doc/reference ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/src/gl/m4/base64.m4 \ $(top_srcdir)/src/gl/m4/errno_h.m4 \ $(top_srcdir)/src/gl/m4/error.m4 \ $(top_srcdir)/src/gl/m4/getopt.m4 \ $(top_srcdir)/src/gl/m4/gnulib-comp.m4 \ $(top_srcdir)/src/gl/m4/memchr.m4 \ $(top_srcdir)/src/gl/m4/mmap-anon.m4 \ $(top_srcdir)/src/gl/m4/msvc-inval.m4 \ $(top_srcdir)/src/gl/m4/msvc-nothrow.m4 \ $(top_srcdir)/src/gl/m4/nocrash.m4 \ $(top_srcdir)/src/gl/m4/off_t.m4 \ $(top_srcdir)/src/gl/m4/ssize_t.m4 \ $(top_srcdir)/src/gl/m4/stdarg.m4 \ $(top_srcdir)/src/gl/m4/stdbool.m4 \ $(top_srcdir)/src/gl/m4/stdio_h.m4 \ $(top_srcdir)/src/gl/m4/strerror.m4 \ $(top_srcdir)/src/gl/m4/sys_socket_h.m4 \ $(top_srcdir)/src/gl/m4/sys_types_h.m4 \ $(top_srcdir)/src/gl/m4/unistd_h.m4 \ $(top_srcdir)/src/gl/m4/version-etc.m4 \ $(top_srcdir)/lib/gl/m4/absolute-header.m4 \ $(top_srcdir)/lib/gl/m4/extensions.m4 \ $(top_srcdir)/lib/gl/m4/gnulib-comp.m4 \ $(top_srcdir)/lib/gl/m4/include_next.m4 \ $(top_srcdir)/lib/gl/m4/ld-output-def.m4 \ $(top_srcdir)/lib/gl/m4/stddef_h.m4 \ $(top_srcdir)/lib/gl/m4/string_h.m4 \ $(top_srcdir)/lib/gl/m4/strverscmp.m4 \ $(top_srcdir)/lib/gl/m4/warn-on-use.m4 \ $(top_srcdir)/gl/m4/00gnulib.m4 \ $(top_srcdir)/gl/m4/autobuild.m4 \ $(top_srcdir)/gl/m4/gnulib-common.m4 \ $(top_srcdir)/gl/m4/gnulib-comp.m4 \ $(top_srcdir)/gl/m4/ld-version-script.m4 \ $(top_srcdir)/gl/m4/manywarnings.m4 \ $(top_srcdir)/gl/m4/valgrind-tests.m4 \ $(top_srcdir)/gl/m4/warnings.m4 \ $(top_srcdir)/m4/extern-inline.m4 $(top_srcdir)/m4/gettext.m4 \ $(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \ $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.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/nls.m4 \ $(top_srcdir)/m4/pkg.m4 $(top_srcdir)/m4/po-suffix.m4 \ $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \ $(top_srcdir)/m4/wchar_t.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 = version.xml CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ ARFLAGS = @ARFLAGS@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CONFIG_INCLUDE = @CONFIG_INCLUDE@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DLL_VERSION = @DLL_VERSION@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EMULTIHOP_HIDDEN = @EMULTIHOP_HIDDEN@ EMULTIHOP_VALUE = @EMULTIHOP_VALUE@ ENOLINK_HIDDEN = @ENOLINK_HIDDEN@ ENOLINK_VALUE = @ENOLINK_VALUE@ EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@ EOVERFLOW_VALUE = @EOVERFLOW_VALUE@ ERRNO_H = @ERRNO_H@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GETOPT_H = @GETOPT_H@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GNULIB_CHDIR = @GNULIB_CHDIR@ GNULIB_CHOWN = @GNULIB_CHOWN@ GNULIB_CLOSE = @GNULIB_CLOSE@ GNULIB_DPRINTF = @GNULIB_DPRINTF@ GNULIB_DUP = @GNULIB_DUP@ GNULIB_DUP2 = @GNULIB_DUP2@ GNULIB_DUP3 = @GNULIB_DUP3@ GNULIB_ENVIRON = @GNULIB_ENVIRON@ GNULIB_EUIDACCESS = @GNULIB_EUIDACCESS@ GNULIB_FACCESSAT = @GNULIB_FACCESSAT@ GNULIB_FCHDIR = @GNULIB_FCHDIR@ GNULIB_FCHOWNAT = @GNULIB_FCHOWNAT@ GNULIB_FCLOSE = @GNULIB_FCLOSE@ GNULIB_FDATASYNC = @GNULIB_FDATASYNC@ GNULIB_FDOPEN = @GNULIB_FDOPEN@ GNULIB_FFLUSH = @GNULIB_FFLUSH@ GNULIB_FFSL = @GNULIB_FFSL@ GNULIB_FFSLL = @GNULIB_FFSLL@ GNULIB_FGETC = @GNULIB_FGETC@ GNULIB_FGETS = @GNULIB_FGETS@ GNULIB_FOPEN = @GNULIB_FOPEN@ GNULIB_FPRINTF = @GNULIB_FPRINTF@ GNULIB_FPRINTF_POSIX = @GNULIB_FPRINTF_POSIX@ GNULIB_FPURGE = @GNULIB_FPURGE@ GNULIB_FPUTC = @GNULIB_FPUTC@ GNULIB_FPUTS = @GNULIB_FPUTS@ GNULIB_FREAD = @GNULIB_FREAD@ GNULIB_FREOPEN = @GNULIB_FREOPEN@ GNULIB_FSCANF = @GNULIB_FSCANF@ GNULIB_FSEEK = @GNULIB_FSEEK@ GNULIB_FSEEKO = @GNULIB_FSEEKO@ GNULIB_FSYNC = @GNULIB_FSYNC@ GNULIB_FTELL = @GNULIB_FTELL@ GNULIB_FTELLO = @GNULIB_FTELLO@ GNULIB_FTRUNCATE = @GNULIB_FTRUNCATE@ GNULIB_FWRITE = @GNULIB_FWRITE@ GNULIB_GETC = @GNULIB_GETC@ GNULIB_GETCHAR = @GNULIB_GETCHAR@ GNULIB_GETCWD = @GNULIB_GETCWD@ GNULIB_GETDELIM = @GNULIB_GETDELIM@ GNULIB_GETDOMAINNAME = @GNULIB_GETDOMAINNAME@ GNULIB_GETDTABLESIZE = @GNULIB_GETDTABLESIZE@ GNULIB_GETGROUPS = @GNULIB_GETGROUPS@ GNULIB_GETHOSTNAME = @GNULIB_GETHOSTNAME@ GNULIB_GETLINE = @GNULIB_GETLINE@ GNULIB_GETLOGIN = @GNULIB_GETLOGIN@ GNULIB_GETLOGIN_R = @GNULIB_GETLOGIN_R@ GNULIB_GETPAGESIZE = @GNULIB_GETPAGESIZE@ GNULIB_GETUSERSHELL = @GNULIB_GETUSERSHELL@ GNULIB_GL_SRCGL_UNISTD_H_GETOPT = @GNULIB_GL_SRCGL_UNISTD_H_GETOPT@ GNULIB_GROUP_MEMBER = @GNULIB_GROUP_MEMBER@ GNULIB_ISATTY = @GNULIB_ISATTY@ GNULIB_LCHOWN = @GNULIB_LCHOWN@ GNULIB_LINK = @GNULIB_LINK@ GNULIB_LINKAT = @GNULIB_LINKAT@ GNULIB_LSEEK = @GNULIB_LSEEK@ GNULIB_MBSCASECMP = @GNULIB_MBSCASECMP@ GNULIB_MBSCASESTR = @GNULIB_MBSCASESTR@ GNULIB_MBSCHR = @GNULIB_MBSCHR@ GNULIB_MBSCSPN = @GNULIB_MBSCSPN@ GNULIB_MBSLEN = @GNULIB_MBSLEN@ GNULIB_MBSNCASECMP = @GNULIB_MBSNCASECMP@ GNULIB_MBSNLEN = @GNULIB_MBSNLEN@ GNULIB_MBSPBRK = @GNULIB_MBSPBRK@ GNULIB_MBSPCASECMP = @GNULIB_MBSPCASECMP@ GNULIB_MBSRCHR = @GNULIB_MBSRCHR@ GNULIB_MBSSEP = @GNULIB_MBSSEP@ GNULIB_MBSSPN = @GNULIB_MBSSPN@ GNULIB_MBSSTR = @GNULIB_MBSSTR@ GNULIB_MBSTOK_R = @GNULIB_MBSTOK_R@ GNULIB_MEMCHR = @GNULIB_MEMCHR@ GNULIB_MEMMEM = @GNULIB_MEMMEM@ GNULIB_MEMPCPY = @GNULIB_MEMPCPY@ GNULIB_MEMRCHR = @GNULIB_MEMRCHR@ GNULIB_OBSTACK_PRINTF = @GNULIB_OBSTACK_PRINTF@ GNULIB_OBSTACK_PRINTF_POSIX = @GNULIB_OBSTACK_PRINTF_POSIX@ GNULIB_PCLOSE = @GNULIB_PCLOSE@ GNULIB_PERROR = @GNULIB_PERROR@ GNULIB_PIPE = @GNULIB_PIPE@ GNULIB_PIPE2 = @GNULIB_PIPE2@ GNULIB_POPEN = @GNULIB_POPEN@ GNULIB_PREAD = @GNULIB_PREAD@ GNULIB_PRINTF = @GNULIB_PRINTF@ GNULIB_PRINTF_POSIX = @GNULIB_PRINTF_POSIX@ GNULIB_PUTC = @GNULIB_PUTC@ GNULIB_PUTCHAR = @GNULIB_PUTCHAR@ GNULIB_PUTS = @GNULIB_PUTS@ GNULIB_PWRITE = @GNULIB_PWRITE@ GNULIB_RAWMEMCHR = @GNULIB_RAWMEMCHR@ GNULIB_READ = @GNULIB_READ@ GNULIB_READLINK = @GNULIB_READLINK@ GNULIB_READLINKAT = @GNULIB_READLINKAT@ GNULIB_REMOVE = @GNULIB_REMOVE@ GNULIB_RENAME = @GNULIB_RENAME@ GNULIB_RENAMEAT = @GNULIB_RENAMEAT@ GNULIB_RMDIR = @GNULIB_RMDIR@ GNULIB_SCANF = @GNULIB_SCANF@ GNULIB_SETHOSTNAME = @GNULIB_SETHOSTNAME@ GNULIB_SLEEP = @GNULIB_SLEEP@ GNULIB_SNPRINTF = @GNULIB_SNPRINTF@ GNULIB_SPRINTF_POSIX = @GNULIB_SPRINTF_POSIX@ GNULIB_STDIO_H_NONBLOCKING = @GNULIB_STDIO_H_NONBLOCKING@ GNULIB_STDIO_H_SIGPIPE = @GNULIB_STDIO_H_SIGPIPE@ GNULIB_STPCPY = @GNULIB_STPCPY@ GNULIB_STPNCPY = @GNULIB_STPNCPY@ GNULIB_STRCASESTR = @GNULIB_STRCASESTR@ GNULIB_STRCHRNUL = @GNULIB_STRCHRNUL@ GNULIB_STRDUP = @GNULIB_STRDUP@ GNULIB_STRERROR = @GNULIB_STRERROR@ GNULIB_STRERROR_R = @GNULIB_STRERROR_R@ GNULIB_STRNCAT = @GNULIB_STRNCAT@ GNULIB_STRNDUP = @GNULIB_STRNDUP@ GNULIB_STRNLEN = @GNULIB_STRNLEN@ GNULIB_STRPBRK = @GNULIB_STRPBRK@ GNULIB_STRSEP = @GNULIB_STRSEP@ GNULIB_STRSIGNAL = @GNULIB_STRSIGNAL@ GNULIB_STRSTR = @GNULIB_STRSTR@ GNULIB_STRTOK_R = @GNULIB_STRTOK_R@ GNULIB_STRVERSCMP = @GNULIB_STRVERSCMP@ GNULIB_SYMLINK = @GNULIB_SYMLINK@ GNULIB_SYMLINKAT = @GNULIB_SYMLINKAT@ GNULIB_TMPFILE = @GNULIB_TMPFILE@ GNULIB_TTYNAME_R = @GNULIB_TTYNAME_R@ GNULIB_UNISTD_H_NONBLOCKING = @GNULIB_UNISTD_H_NONBLOCKING@ GNULIB_UNISTD_H_SIGPIPE = @GNULIB_UNISTD_H_SIGPIPE@ GNULIB_UNLINK = @GNULIB_UNLINK@ GNULIB_UNLINKAT = @GNULIB_UNLINKAT@ GNULIB_USLEEP = @GNULIB_USLEEP@ GNULIB_VASPRINTF = @GNULIB_VASPRINTF@ GNULIB_VDPRINTF = @GNULIB_VDPRINTF@ GNULIB_VFPRINTF = @GNULIB_VFPRINTF@ GNULIB_VFPRINTF_POSIX = @GNULIB_VFPRINTF_POSIX@ GNULIB_VFSCANF = @GNULIB_VFSCANF@ GNULIB_VPRINTF = @GNULIB_VPRINTF@ GNULIB_VPRINTF_POSIX = @GNULIB_VPRINTF_POSIX@ GNULIB_VSCANF = @GNULIB_VSCANF@ GNULIB_VSNPRINTF = @GNULIB_VSNPRINTF@ GNULIB_VSPRINTF_POSIX = @GNULIB_VSPRINTF_POSIX@ GNULIB_WRITE = @GNULIB_WRITE@ GREP = @GREP@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ HAVE_CHOWN = @HAVE_CHOWN@ HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@ HAVE_DECL_FCHDIR = @HAVE_DECL_FCHDIR@ HAVE_DECL_FDATASYNC = @HAVE_DECL_FDATASYNC@ HAVE_DECL_FPURGE = @HAVE_DECL_FPURGE@ HAVE_DECL_FSEEKO = @HAVE_DECL_FSEEKO@ HAVE_DECL_FTELLO = @HAVE_DECL_FTELLO@ HAVE_DECL_GETDELIM = @HAVE_DECL_GETDELIM@ HAVE_DECL_GETDOMAINNAME = @HAVE_DECL_GETDOMAINNAME@ HAVE_DECL_GETLINE = @HAVE_DECL_GETLINE@ HAVE_DECL_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_OBSTACK_PRINTF = @HAVE_DECL_OBSTACK_PRINTF@ HAVE_DECL_SETHOSTNAME = @HAVE_DECL_SETHOSTNAME@ HAVE_DECL_SNPRINTF = @HAVE_DECL_SNPRINTF@ HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@ HAVE_DECL_STRERROR_R = @HAVE_DECL_STRERROR_R@ HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@ HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@ HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@ HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@ HAVE_DECL_TTYNAME_R = @HAVE_DECL_TTYNAME_R@ HAVE_DECL_VSNPRINTF = @HAVE_DECL_VSNPRINTF@ HAVE_DPRINTF = @HAVE_DPRINTF@ HAVE_DUP2 = @HAVE_DUP2@ HAVE_DUP3 = @HAVE_DUP3@ HAVE_EUIDACCESS = @HAVE_EUIDACCESS@ HAVE_FACCESSAT = @HAVE_FACCESSAT@ HAVE_FCHDIR = @HAVE_FCHDIR@ HAVE_FCHOWNAT = @HAVE_FCHOWNAT@ HAVE_FDATASYNC = @HAVE_FDATASYNC@ HAVE_FFSL = @HAVE_FFSL@ HAVE_FFSLL = @HAVE_FFSLL@ HAVE_FSEEKO = @HAVE_FSEEKO@ HAVE_FSYNC = @HAVE_FSYNC@ HAVE_FTELLO = @HAVE_FTELLO@ HAVE_FTRUNCATE = @HAVE_FTRUNCATE@ 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_GROUP_MEMBER = @HAVE_GROUP_MEMBER@ HAVE_LCHOWN = @HAVE_LCHOWN@ HAVE_LIBSHISHI = @HAVE_LIBSHISHI@ HAVE_LINK = @HAVE_LINK@ HAVE_LINKAT = @HAVE_LINKAT@ HAVE_MBSLEN = @HAVE_MBSLEN@ HAVE_MEMCHR = @HAVE_MEMCHR@ HAVE_MEMPCPY = @HAVE_MEMPCPY@ HAVE_MSVC_INVALID_PARAMETER_HANDLER = @HAVE_MSVC_INVALID_PARAMETER_HANDLER@ HAVE_OS_H = @HAVE_OS_H@ HAVE_PCLOSE = @HAVE_PCLOSE@ HAVE_PIPE = @HAVE_PIPE@ HAVE_PIPE2 = @HAVE_PIPE2@ HAVE_POPEN = @HAVE_POPEN@ HAVE_PREAD = @HAVE_PREAD@ HAVE_PWRITE = @HAVE_PWRITE@ HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@ HAVE_READLINK = @HAVE_READLINK@ HAVE_READLINKAT = @HAVE_READLINKAT@ HAVE_RENAMEAT = @HAVE_RENAMEAT@ HAVE_SETHOSTNAME = @HAVE_SETHOSTNAME@ HAVE_SLEEP = @HAVE_SLEEP@ 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_STRVERSCMP = @HAVE_STRVERSCMP@ HAVE_SYMLINK = @HAVE_SYMLINK@ HAVE_SYMLINKAT = @HAVE_SYMLINKAT@ HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@ HAVE_UNISTD_H = @HAVE_UNISTD_H@ HAVE_UNLINKAT = @HAVE_UNLINKAT@ HAVE_USLEEP = @HAVE_USLEEP@ HAVE_VASPRINTF = @HAVE_VASPRINTF@ HAVE_VDPRINTF = @HAVE_VDPRINTF@ HAVE_WCHAR_T = @HAVE_WCHAR_T@ HAVE_WINSOCK2_H = @HAVE_WINSOCK2_H@ HAVE__BOOL = @HAVE__BOOL@ HELP2MAN = @HELP2MAN@ HTML_DIR = @HTML_DIR@ INCLUDE_GSS_KRB5 = @INCLUDE_GSS_KRB5@ INCLUDE_GSS_KRB5_EXT = @INCLUDE_GSS_KRB5_EXT@ 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@ INTLLIBS = @INTLLIBS@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBSHISHI = @LIBSHISHI@ LIBSHISHI_PREFIX = @LIBSHISHI_PREFIX@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBOBJS = @LTLIBOBJS@ LTLIBSHISHI = @LTLIBSHISHI@ LT_AGE = @LT_AGE@ LT_CURRENT = @LT_CURRENT@ LT_REVISION = @LT_REVISION@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = @NEXT_AS_FIRST_DIRECTIVE_ERRNO_H@ NEXT_AS_FIRST_DIRECTIVE_GETOPT_H = @NEXT_AS_FIRST_DIRECTIVE_GETOPT_H@ NEXT_AS_FIRST_DIRECTIVE_STDARG_H = @NEXT_AS_FIRST_DIRECTIVE_STDARG_H@ NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@ NEXT_AS_FIRST_DIRECTIVE_STDIO_H = @NEXT_AS_FIRST_DIRECTIVE_STDIO_H@ NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H@ NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@ NEXT_ERRNO_H = @NEXT_ERRNO_H@ NEXT_GETOPT_H = @NEXT_GETOPT_H@ NEXT_STDARG_H = @NEXT_STDARG_H@ NEXT_STDDEF_H = @NEXT_STDDEF_H@ NEXT_STDIO_H = @NEXT_STDIO_H@ NEXT_STRING_H = @NEXT_STRING_H@ NEXT_SYS_TYPES_H = @NEXT_SYS_TYPES_H@ NEXT_UNISTD_H = @NEXT_UNISTD_H@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ PKG_CONFIG = @PKG_CONFIG@ PMCCABE = @PMCCABE@ POSUB = @POSUB@ PO_SUFFIX = @PO_SUFFIX@ PRAGMA_COLUMNS = @PRAGMA_COLUMNS@ PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@ RANLIB = @RANLIB@ REPLACE_CHOWN = @REPLACE_CHOWN@ REPLACE_CLOSE = @REPLACE_CLOSE@ REPLACE_DPRINTF = @REPLACE_DPRINTF@ REPLACE_DUP = @REPLACE_DUP@ REPLACE_DUP2 = @REPLACE_DUP2@ REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@ REPLACE_FCLOSE = @REPLACE_FCLOSE@ REPLACE_FDOPEN = @REPLACE_FDOPEN@ REPLACE_FFLUSH = @REPLACE_FFLUSH@ REPLACE_FOPEN = @REPLACE_FOPEN@ REPLACE_FPRINTF = @REPLACE_FPRINTF@ REPLACE_FPURGE = @REPLACE_FPURGE@ REPLACE_FREOPEN = @REPLACE_FREOPEN@ REPLACE_FSEEK = @REPLACE_FSEEK@ REPLACE_FSEEKO = @REPLACE_FSEEKO@ REPLACE_FTELL = @REPLACE_FTELL@ REPLACE_FTELLO = @REPLACE_FTELLO@ REPLACE_FTRUNCATE = @REPLACE_FTRUNCATE@ REPLACE_GETCWD = @REPLACE_GETCWD@ REPLACE_GETDELIM = @REPLACE_GETDELIM@ REPLACE_GETDOMAINNAME = @REPLACE_GETDOMAINNAME@ REPLACE_GETDTABLESIZE = @REPLACE_GETDTABLESIZE@ REPLACE_GETGROUPS = @REPLACE_GETGROUPS@ REPLACE_GETLINE = @REPLACE_GETLINE@ REPLACE_GETLOGIN_R = @REPLACE_GETLOGIN_R@ REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@ REPLACE_ISATTY = @REPLACE_ISATTY@ REPLACE_LCHOWN = @REPLACE_LCHOWN@ REPLACE_LINK = @REPLACE_LINK@ REPLACE_LINKAT = @REPLACE_LINKAT@ REPLACE_LSEEK = @REPLACE_LSEEK@ REPLACE_MEMCHR = @REPLACE_MEMCHR@ REPLACE_MEMMEM = @REPLACE_MEMMEM@ REPLACE_NULL = @REPLACE_NULL@ REPLACE_OBSTACK_PRINTF = @REPLACE_OBSTACK_PRINTF@ REPLACE_PERROR = @REPLACE_PERROR@ REPLACE_POPEN = @REPLACE_POPEN@ REPLACE_PREAD = @REPLACE_PREAD@ REPLACE_PRINTF = @REPLACE_PRINTF@ REPLACE_PWRITE = @REPLACE_PWRITE@ REPLACE_READ = @REPLACE_READ@ REPLACE_READLINK = @REPLACE_READLINK@ REPLACE_REMOVE = @REPLACE_REMOVE@ REPLACE_RENAME = @REPLACE_RENAME@ REPLACE_RENAMEAT = @REPLACE_RENAMEAT@ REPLACE_RMDIR = @REPLACE_RMDIR@ REPLACE_SLEEP = @REPLACE_SLEEP@ REPLACE_SNPRINTF = @REPLACE_SNPRINTF@ REPLACE_SPRINTF = @REPLACE_SPRINTF@ REPLACE_STDIO_READ_FUNCS = @REPLACE_STDIO_READ_FUNCS@ REPLACE_STDIO_WRITE_FUNCS = @REPLACE_STDIO_WRITE_FUNCS@ REPLACE_STPNCPY = @REPLACE_STPNCPY@ REPLACE_STRCASESTR = @REPLACE_STRCASESTR@ REPLACE_STRCHRNUL = @REPLACE_STRCHRNUL@ REPLACE_STRDUP = @REPLACE_STRDUP@ REPLACE_STRERROR = @REPLACE_STRERROR@ REPLACE_STRERROR_R = @REPLACE_STRERROR_R@ REPLACE_STRNCAT = @REPLACE_STRNCAT@ REPLACE_STRNDUP = @REPLACE_STRNDUP@ REPLACE_STRNLEN = @REPLACE_STRNLEN@ REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@ REPLACE_STRSTR = @REPLACE_STRSTR@ REPLACE_STRTOK_R = @REPLACE_STRTOK_R@ REPLACE_SYMLINK = @REPLACE_SYMLINK@ REPLACE_TMPFILE = @REPLACE_TMPFILE@ REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@ REPLACE_UNLINK = @REPLACE_UNLINK@ REPLACE_UNLINKAT = @REPLACE_UNLINKAT@ REPLACE_USLEEP = @REPLACE_USLEEP@ REPLACE_VASPRINTF = @REPLACE_VASPRINTF@ REPLACE_VDPRINTF = @REPLACE_VDPRINTF@ REPLACE_VFPRINTF = @REPLACE_VFPRINTF@ REPLACE_VPRINTF = @REPLACE_VPRINTF@ REPLACE_VSNPRINTF = @REPLACE_VSNPRINTF@ REPLACE_VSPRINTF = @REPLACE_VSPRINTF@ REPLACE_WRITE = @REPLACE_WRITE@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STDARG_H = @STDARG_H@ STDBOOL_H = @STDBOOL_H@ STDDEF_H = @STDDEF_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@ USE_NLS = @USE_NLS@ VALGRIND = @VALGRIND@ VERSION = @VERSION@ VERSION_MAJOR = @VERSION_MAJOR@ VERSION_MINOR = @VERSION_MINOR@ VERSION_NUMBER = @VERSION_NUMBER@ VERSION_PATCH = @VERSION_PATCH@ WARN_CFLAGS = @WARN_CFLAGS@ WERROR_CFLAGS = @WERROR_CFLAGS@ WINDOWS_64_BIT_OFF_T = @WINDOWS_64_BIT_OFF_T@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gl_LIBOBJS = @gl_LIBOBJS@ gl_LTLIBOBJS = @gl_LTLIBOBJS@ gltests_LIBOBJS = @gltests_LIBOBJS@ gltests_LTLIBOBJS = @gltests_LTLIBOBJS@ gltests_WITNESS = @gltests_WITNESS@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ libgl_LIBOBJS = @libgl_LIBOBJS@ libgl_LTLIBOBJS = @libgl_LTLIBOBJS@ libgltests_LIBOBJS = @libgltests_LIBOBJS@ libgltests_LTLIBOBJS = @libgltests_LTLIBOBJS@ libgltests_WITNESS = @libgltests_WITNESS@ localedir = @localedir@ localstatedir = @localstatedir@ 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@ srcgl_LIBOBJS = @srcgl_LIBOBJS@ srcgl_LTLIBOBJS = @srcgl_LTLIBOBJS@ srcgltests_LIBOBJS = @srcgltests_LIBOBJS@ srcgltests_LTLIBOBJS = @srcgltests_LTLIBOBJS@ srcgltests_WITNESS = @srcgltests_WITNESS@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ # We require automake 1.6 at least. AUTOMAKE_OPTIONS = 1.6 # This is a blank Makefile.am for using gtk-doc. # Copy this to your project's API docs directory and modify the variables to # suit your project. See the GTK+ Makefiles in gtk+/docs/reference for examples # of using the various options. # The name of the module, e.g. 'glib'. DOC_MODULE = $(PACKAGE) # Uncomment for versioned docs and specify the version of the module, e.g. '2'. #DOC_MODULE_VERSION=2 # The top-level SGML file. You can change this if you want to. DOC_MAIN_SGML_FILE = $(DOC_MODULE)-docs.sgml # Directories containing the source code. # gtk-doc will search all .c and .h files beneath these paths # for inline comments documenting functions and macros. # e.g. DOC_SOURCE_DIR=$(top_srcdir)/gtk $(top_srcdir)/gdk DOC_SOURCE_DIR = $(top_srcdir)/lib # Extra options to pass to gtkdoc-scangobj. Not normally needed. SCANGOBJ_OPTIONS = # Extra options to supply to gtkdoc-scan. # e.g. SCAN_OPTIONS=--deprecated-guards="GTK_DISABLE_DEPRECATED" SCAN_OPTIONS = # Extra options to supply to gtkdoc-mkdb. # e.g. MKDB_OPTIONS=--xml-mode --output-format=xml MKDB_OPTIONS = --xml-mode --output-format=xml # Extra options to supply to gtkdoc-mktmpl # e.g. MKTMPL_OPTIONS=--only-section-tmpl MKTMPL_OPTIONS = # Extra options to supply to gtkdoc-mkhtml MKHTML_OPTIONS = # Extra options to supply to gtkdoc-fixref. Not normally needed. # e.g. FIXXREF_OPTIONS=--extra-dir=../gdk-pixbuf/html --extra-dir=../gdk/html FIXXREF_OPTIONS = # Used for dependencies. The docs will be rebuilt if any of these change. # e.g. HFILE_GLOB=$(top_srcdir)/gtk/*.h # e.g. CFILE_GLOB=$(top_srcdir)/gtk/*.c HFILE_GLOB = $(top_srcdir)/lib/*.h CFILE_GLOB = $(top_srcdir)/lib/*.c # Extra header to include when scanning, which are not under DOC_SOURCE_DIR # e.g. EXTRA_HFILES=$(top_srcdir}/contrib/extra.h EXTRA_HFILES = # Header files or dirs to ignore when scanning. Use base file/dir names # e.g. IGNORE_HFILES=gtkdebug.h gtkintl.h private_code #echo `find lib -name \*.h|grep -v ^lib/headers|sed 's,.*/,,'|sort` IGNORE_HFILES = arg-nonnull.h c++defs.h checksum.h gettext.h internal.h \ k5internal.h meta.h protos.h stddef.in.h string.h string.in.h \ warn-on-use.h # Images to copy into HTML directory. # e.g. HTML_IMAGES=$(top_srcdir)/gtk/stock-icons/stock_about_24.png HTML_IMAGES = # Extra SGML files that are included by $(DOC_MAIN_SGML_FILE). # e.g. content_files=running.sgml building.sgml changes-2.0.sgml content_files = # SGML files where gtk-doc abbrevations (#GtkWidget) are expanded # These files must be listed here *and* in content_files # e.g. expand_content_files=running.sgml expand_content_files = # CFLAGS and LDFLAGS for compiling gtkdoc-scangobj with your library. # Only needed if you are using gtkdoc-scangobj to dynamically query widget # signals and properties. # e.g. GTKDOC_CFLAGS=-I$(top_srcdir) -I$(top_builddir) $(GTK_DEBUG_FLAGS) # e.g. GTKDOC_LIBS=$(top_builddir)/gtk/$(gtktargetlib) GTKDOC_CFLAGS = GTKDOC_LIBS = @GTK_DOC_USE_LIBTOOL_FALSE@GTKDOC_CC = $(CC) $(INCLUDES) $(GTKDOC_DEPS_CFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) @GTK_DOC_USE_LIBTOOL_TRUE@GTKDOC_CC = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(INCLUDES) $(GTKDOC_DEPS_CFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) @GTK_DOC_USE_LIBTOOL_FALSE@GTKDOC_LD = $(CC) $(GTKDOC_DEPS_LIBS) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) @GTK_DOC_USE_LIBTOOL_TRUE@GTKDOC_LD = $(LIBTOOL) --tag=CC --mode=link $(CC) $(GTKDOC_DEPS_LIBS) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) @GTK_DOC_USE_LIBTOOL_FALSE@GTKDOC_RUN = @GTK_DOC_USE_LIBTOOL_TRUE@GTKDOC_RUN = $(LIBTOOL) --mode=execute # We set GPATH here; this gives us semantics for GNU make # which are more like other make's VPATH, when it comes to # whether a source that is a target of one rule is then # searched for in VPATH/GPATH. # GPATH = $(srcdir) TARGET_DIR = $(HTML_DIR)/$(DOC_MODULE) SETUP_FILES = \ $(content_files) \ $(DOC_MAIN_SGML_FILE) \ $(DOC_MODULE)-sections.txt \ $(DOC_MODULE)-overrides.txt # This includes the standard gtk-doc make rules, copied by gtkdocize. # Other files to distribute # e.g. EXTRA_DIST += version.xml.in EXTRA_DIST = $(HTML_IMAGES) $(SETUP_FILES) DOC_STAMPS = setup-build.stamp scan-build.stamp tmpl-build.stamp sgml-build.stamp \ html-build.stamp pdf-build.stamp \ tmpl.stamp sgml.stamp html.stamp pdf.stamp SCANOBJ_FILES = \ $(DOC_MODULE).args \ $(DOC_MODULE).hierarchy \ $(DOC_MODULE).interfaces \ $(DOC_MODULE).prerequisites \ $(DOC_MODULE).signals REPORT_FILES = \ $(DOC_MODULE)-undocumented.txt \ $(DOC_MODULE)-undeclared.txt \ $(DOC_MODULE)-unused.txt CLEANFILES = $(SCANOBJ_FILES) $(REPORT_FILES) $(DOC_STAMPS) @ENABLE_GTK_DOC_TRUE@@GTK_DOC_BUILD_HTML_FALSE@HTML_BUILD_STAMP = @ENABLE_GTK_DOC_TRUE@@GTK_DOC_BUILD_HTML_TRUE@HTML_BUILD_STAMP = html-build.stamp @ENABLE_GTK_DOC_TRUE@@GTK_DOC_BUILD_PDF_FALSE@PDF_BUILD_STAMP = @ENABLE_GTK_DOC_TRUE@@GTK_DOC_BUILD_PDF_TRUE@PDF_BUILD_STAMP = pdf-build.stamp # Files not to distribute # for --rebuild-types in $(SCAN_OPTIONS), e.g. $(DOC_MODULE).types # for --rebuild-sections in $(SCAN_OPTIONS) e.g. $(DOC_MODULE)-sections.txt #DISTCLEANFILES += # Comment this out if you want 'make check' to test you doc status # and run some sanity checks @ENABLE_GTK_DOC_TRUE@TESTS_ENVIRONMENT = cd $(srcdir) && \ @ENABLE_GTK_DOC_TRUE@ DOC_MODULE=$(DOC_MODULE) DOC_MAIN_SGML_FILE=$(DOC_MAIN_SGML_FILE) \ @ENABLE_GTK_DOC_TRUE@ SRCDIR=$(abs_srcdir) BUILDDIR=$(abs_builddir) all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(top_srcdir)/gtk-doc.make $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu doc/reference/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu doc/reference/Makefile .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_srcdir)/gtk-doc.make: $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): version.xml: $(top_builddir)/config.status $(srcdir)/version.xml.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs tags TAGS: ctags CTAGS: cscope cscopelist: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$(top_distdir)" distdir="$(distdir)" \ dist-hook check-am: all-am check: check-am all-am: Makefile all-local installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool clean-local mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic distclean-local dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-data-local install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic \ maintainer-clean-local mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-local .MAKE: install-am install-strip .PHONY: all all-am all-local check check-am clean clean-generic \ clean-libtool clean-local cscopelist-am ctags-am dist-hook \ distclean distclean-generic distclean-libtool distclean-local \ distdir dvi dvi-am html html-am info info-am install \ install-am install-data install-data-am install-data-local \ install-dvi install-dvi-am install-exec install-exec-am \ install-html install-html-am install-info install-info-am \ install-man install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ maintainer-clean-local mostlyclean mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags-am uninstall \ uninstall-am uninstall-local @ENABLE_GTK_DOC_TRUE@all-local: $(HTML_BUILD_STAMP) $(PDF_BUILD_STAMP) @ENABLE_GTK_DOC_FALSE@all-local: docs: $(HTML_BUILD_STAMP) $(PDF_BUILD_STAMP) $(REPORT_FILES): sgml-build.stamp #### setup #### setup-build.stamp: -@if test "$(abs_srcdir)" != "$(abs_builddir)" ; then \ echo ' DOC Preparing build'; \ files=`echo $(SETUP_FILES) $(expand_content_files) $(DOC_MODULE).types`; \ if test "x$$files" != "x" ; then \ for file in $$files ; do \ test -f $(abs_srcdir)/$$file && \ cp -pu $(abs_srcdir)/$$file $(abs_builddir)/ || true; \ done; \ fi; \ test -d $(abs_srcdir)/tmpl && \ { cp -rp $(abs_srcdir)/tmpl $(abs_builddir)/; \ chmod -R u+w $(abs_builddir)/tmpl; } \ fi @touch setup-build.stamp #### scan #### scan-build.stamp: $(HFILE_GLOB) $(CFILE_GLOB) @echo ' DOC Scanning header files' @_source_dir='' ; \ for i in $(DOC_SOURCE_DIR) ; do \ _source_dir="$${_source_dir} --source-dir=$$i" ; \ done ; \ gtkdoc-scan --module=$(DOC_MODULE) --ignore-headers="$(IGNORE_HFILES)" $${_source_dir} $(SCAN_OPTIONS) $(EXTRA_HFILES) @if grep -l '^..*$$' $(DOC_MODULE).types > /dev/null 2>&1 ; then \ echo " DOC Introspecting gobjects"; \ scanobj_options=""; \ gtkdoc-scangobj 2>&1 --help | grep >/dev/null "\-\-verbose"; \ if test "$(?)" = "0"; then \ if test "x$(V)" = "x1"; then \ scanobj_options="--verbose"; \ fi; \ fi; \ CC="$(GTKDOC_CC)" LD="$(GTKDOC_LD)" RUN="$(GTKDOC_RUN)" CFLAGS="$(GTKDOC_CFLAGS) $(CFLAGS)" LDFLAGS="$(GTKDOC_LIBS) $(LDFLAGS)" \ gtkdoc-scangobj $(SCANGOBJ_OPTIONS) $$scanobj_options --module=$(DOC_MODULE); \ else \ for i in $(SCANOBJ_FILES) ; do \ test -f $$i || touch $$i ; \ done \ fi @touch scan-build.stamp $(DOC_MODULE)-decl.txt $(SCANOBJ_FILES) $(DOC_MODULE)-sections.txt $(DOC_MODULE)-overrides.txt: scan-build.stamp @true #### templates #### tmpl-build.stamp: setup-build.stamp $(DOC_MODULE)-decl.txt $(SCANOBJ_FILES) $(DOC_MODULE)-sections.txt $(DOC_MODULE)-overrides.txt @echo ' DOC Rebuilding template files' @gtkdoc-mktmpl --module=$(DOC_MODULE) $(MKTMPL_OPTIONS) @if test "$(abs_srcdir)" != "$(abs_builddir)" ; then \ if test -w $(abs_srcdir) ; then \ cp -rp $(abs_builddir)/tmpl $(abs_srcdir)/; \ fi \ fi @touch tmpl-build.stamp tmpl.stamp: tmpl-build.stamp @true $(srcdir)/tmpl/*.sgml: @true #### xml #### sgml-build.stamp: tmpl.stamp $(DOC_MODULE)-sections.txt $(srcdir)/tmpl/*.sgml $(expand_content_files) @echo ' DOC Building XML' @-chmod -R u+w $(srcdir) @_source_dir='' ; \ for i in $(DOC_SOURCE_DIR) ; do \ _source_dir="$${_source_dir} --source-dir=$$i" ; \ done ; \ gtkdoc-mkdb --module=$(DOC_MODULE) --output-format=xml --expand-content-files="$(expand_content_files)" --main-sgml-file=$(DOC_MAIN_SGML_FILE) $${_source_dir} $(MKDB_OPTIONS) @touch sgml-build.stamp sgml.stamp: sgml-build.stamp @true #### html #### html-build.stamp: sgml.stamp $(DOC_MAIN_SGML_FILE) $(content_files) @echo ' DOC Building HTML' @rm -rf html @mkdir html @mkhtml_options=""; \ gtkdoc-mkhtml 2>&1 --help | grep >/dev/null "\-\-verbose"; \ if test "$(?)" = "0"; then \ if test "x$(V)" = "x1"; then \ mkhtml_options="$$mkhtml_options --verbose"; \ fi; \ fi; \ gtkdoc-mkhtml 2>&1 --help | grep >/dev/null "\-\-path"; \ if test "$(?)" = "0"; then \ mkhtml_options="$$mkhtml_options --path=\"$(abs_srcdir)\""; \ fi; \ cd html && gtkdoc-mkhtml $$mkhtml_options $(MKHTML_OPTIONS) $(DOC_MODULE) ../$(DOC_MAIN_SGML_FILE) -@test "x$(HTML_IMAGES)" = "x" || \ for file in $(HTML_IMAGES) ; do \ if test -f $(abs_srcdir)/$$file ; then \ cp $(abs_srcdir)/$$file $(abs_builddir)/html; \ fi; \ if test -f $(abs_builddir)/$$file ; then \ cp $(abs_builddir)/$$file $(abs_builddir)/html; \ fi; \ done; @echo ' DOC Fixing cross-references' @gtkdoc-fixxref --module=$(DOC_MODULE) --module-dir=html --html-dir=$(HTML_DIR) $(FIXXREF_OPTIONS) @touch html-build.stamp #### pdf #### pdf-build.stamp: sgml.stamp $(DOC_MAIN_SGML_FILE) $(content_files) @echo ' DOC Building PDF' @rm -f $(DOC_MODULE).pdf @mkpdf_options=""; \ gtkdoc-mkpdf 2>&1 --help | grep >/dev/null "\-\-verbose"; \ if test "$(?)" = "0"; then \ if test "x$(V)" = "x1"; then \ mkpdf_options="$$mkpdf_options --verbose"; \ fi; \ fi; \ if test "x$(HTML_IMAGES)" != "x"; then \ for img in $(HTML_IMAGES); do \ part=`dirname $$img`; \ echo $$mkpdf_options | grep >/dev/null "\-\-imgdir=$$part "; \ if test $$? != 0; then \ mkpdf_options="$$mkpdf_options --imgdir=$$part"; \ fi; \ done; \ fi; \ gtkdoc-mkpdf --path="$(abs_srcdir)" $$mkpdf_options $(DOC_MODULE) $(DOC_MAIN_SGML_FILE) $(MKPDF_OPTIONS) @touch pdf-build.stamp ############## clean-local: @rm -f *~ *.bak @rm -rf .libs distclean-local: @rm -rf xml html $(REPORT_FILES) $(DOC_MODULE).pdf \ $(DOC_MODULE)-decl-list.txt $(DOC_MODULE)-decl.txt @if test "$(abs_srcdir)" != "$(abs_builddir)" ; then \ rm -f $(SETUP_FILES) $(expand_content_files) $(DOC_MODULE).types; \ rm -rf tmpl; \ fi maintainer-clean-local: clean @rm -rf xml html install-data-local: @installfiles=`echo $(builddir)/html/*`; \ if test "$$installfiles" = '$(builddir)/html/*'; \ then echo 1>&2 'Nothing to install' ; \ else \ if test -n "$(DOC_MODULE_VERSION)"; then \ installdir="$(DESTDIR)$(TARGET_DIR)-$(DOC_MODULE_VERSION)"; \ else \ installdir="$(DESTDIR)$(TARGET_DIR)"; \ fi; \ $(mkinstalldirs) $${installdir} ; \ for i in $$installfiles; do \ echo ' $(INSTALL_DATA) '$$i ; \ $(INSTALL_DATA) $$i $${installdir}; \ done; \ if test -n "$(DOC_MODULE_VERSION)"; then \ mv -f $${installdir}/$(DOC_MODULE).devhelp2 \ $${installdir}/$(DOC_MODULE)-$(DOC_MODULE_VERSION).devhelp2; \ fi; \ $(GTKDOC_REBASE) --relative --dest-dir=$(DESTDIR) --html-dir=$${installdir}; \ fi uninstall-local: @if test -n "$(DOC_MODULE_VERSION)"; then \ installdir="$(DESTDIR)$(TARGET_DIR)-$(DOC_MODULE_VERSION)"; \ else \ installdir="$(DESTDIR)$(TARGET_DIR)"; \ fi; \ rm -rf $${installdir} # # Require gtk-doc when making dist # @ENABLE_GTK_DOC_TRUE@dist-check-gtkdoc: @ENABLE_GTK_DOC_FALSE@dist-check-gtkdoc: @ENABLE_GTK_DOC_FALSE@ @echo "*** gtk-doc must be installed and enabled in order to make dist" @ENABLE_GTK_DOC_FALSE@ @false dist-hook: dist-check-gtkdoc dist-hook-local @mkdir $(distdir)/tmpl @mkdir $(distdir)/html @-cp ./tmpl/*.sgml $(distdir)/tmpl @cp ./html/* $(distdir)/html @-cp ./$(DOC_MODULE).pdf $(distdir)/ @-cp ./$(DOC_MODULE).types $(distdir)/ @-cp ./$(DOC_MODULE)-sections.txt $(distdir)/ @cd $(distdir) && rm -f $(DISTCLEANFILES) @$(GTKDOC_REBASE) --online --relative --html-dir=$(distdir)/html .PHONY : dist-hook-local docs #TESTS = $(GTKDOC_CHECK) -include $(top_srcdir)/git.mk # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gss-1.0.3/doc/reference/version.xml.in0000664000000000000000000000001212012453517014510 00000000000000@VERSION@ gss-1.0.3/doc/reference/gss.pdf0000644000000000000000000077272512415510376013220 00000000000000%PDF-1.5 %ÐÔÅØ 5 0 obj << /Length 280 /Filter /FlateDecode >> stream xÚOKÃ@Åïû)昲Ùdÿl° ¨‰§ÚCI·h«øídSŒ`/žfÞìcçÍáJq]‹ÅÒzðÒe Þƒ6Òø¬çj ꬓòþ9͔Ƥ ]èÛ&Š*4§¾}ÿ:«þ£mB/¨±¬*.W·±y ûЇîl¼Ûv§í!ÝÔ«ÅÒ!8Žaò1:© Ã!Çí`7µxÄ3ú ª¤Ë54G±Þ ìøm( ïàstAJ• §ã/ÕŠ# 'µ74Äq'ƒB¡$£æP¬›Aa1ƒ2ª>Í“‰ O~“áA$à “IÙ:Ñás> stream xÚÅ™M“1†ïüŠ™*7¦óoì:"Ö.(3«e©E´¨ÒµÜò£ü÷v&3ÙFVh,OCx:y»óNûÈNëÁýG.°Àƒ•–Õ˜±ÜÅ\À«V¿g¯†ãéeq"Ž—WËëÕ"½©–‹ï׫o¿ºw×?V‹ezóZ1®*¼@º1z:I/æËËëåU7ðâíÕ÷·ŸŠ7õ“û¼`§aU3 a¹4'ÙÌ`µŠce=ø:¼)ÜÌTr¯ [|¼z#Ø{üì \Ï~6#?3‚Keñõ'V ž D»úÍë Û—Z2‡W'ô&[Ýf à |f¯1´ætàF‡]  <àj¢IЇ[jH\ d…ÁlÒälv~>:ÍGEúÐb8›W}2Iþylˈm¥ÿZ¡,ÁÒ•š{d²0«EÀHY1·²Öpq>žkéSVêI}^ö´tÜÝÔóƒí<)‹#b=V—sM`t"n+ïh"Y#ËA`´rX©tv7B*àjìH'ú*NhnÀ¯¹³Kî\œ€&‹vÉ¢ÓäÓñÞPbØ™µÛ4k×™µf} çuÒÊÓDÌî|tðİuñþ’&ˆ×¥€h'œs$÷²ÞråiîeƇͽ( L,—Ò‘9±FÎ,ÑIŠ(yWqÜaæØE´‹;ÌÇ;±ÎGn”³z2›n×vNÅbCÐðóµàÓÑE¹6gïa•À/è5?ŒÄ¨‰=E¹cK!¾Vøz3~5OÛð—óòÏíÌþØ.ƒã%Ðv"‘sI`ä|YR£3HD€”4ƒTKÄÓÒB`ä´9-FN ÑI*-ö ûw»·{/ñL…$> stream xÚí–OoÓ@Åïû)æhv;;ûÿˆZ­‚ÆœB!ÙF­'…òíYÇ6˜È ˆ‘|šÝõH~o~kù!l¡`ÏKvqé,Y(ïÀXaƒRuÊ ,³âõ»œ“Á¬ˆulªu·YÄõcSí¿»ækµŽÝæ=,‹TdwðìÍU·¸‰w±‰õÐøjU?®îóÛòúâÒ#ø$êƒ Ô‚¬I" ªªj›ØË’}a2"È_RIxe`ýÀ–·›ôìPèàáÛ¡óŒDAʦõ=,Ø[†cû^‘PèiäßZ›Þßûñ©ÞÇz¿ëuŽÇ…À +]×™ìJDkìt"vÕc¹4ÙÓ¾uªfæçŠ>ý=3«ÿŽžôºGÿ±ù`rž~a3ðónOüÖÍ8ÿùÁçfÔç‚:L¢>ʤ|v䄦ÃO}2½ª7ñéO±1IäÔºÝtx˜ ášD@ý/üõHq\ endstream endobj 46 0 obj << /Length 1507 /Filter /FlateDecode >> stream xÚµXMsÛ6½ëWpš 5Ãø Hâ褉ëLì(–œ’Œ‡– ‰ E©$Çÿ¾»\P"%5Vëúp±xX<,°»äÞÌãÞyïÕ¨wú62ža&”¡7šz:d¡Q^d „7šxŸýó«›þ‰ÔÜ?·¹-Ò1} íx]¤ÕCóUüHÇ–>¾pÍχCh ÎÔ¹¶S[ؼQ¼Lòu’õ¿ŽÞ¾¹ƒ¡B3‚8b1W`dmÂD±JM$qFïͨ÷WO€ ÷ÄÖnÉb¥½ñ¢÷ù+÷&0öÎã,0±w_k.<-8“*„~æ {{¼ÍE,<3mBÑ"ˆ`2PdÊëy²ªlA–gºð¤dŠÇgqïDk™6{J‹-{JË{84D@Á}¢Çk û0âXDYÍ"ª‹}ІI’û'h.* ‹ã˜uƒ‰@1ênhîœ6Ì %Óv¦‡°€~ZR s¡•~ºXevæØ¼JªtéÄË)©UsKíhoÑÈ­ƒàÐÙj•¥ã ’ðÅrV$ ú¸Èàz‡I3ÁyÔ P€|0Ât’®ÍëÒN¨w÷ÐP#3:¤M涺Gìeñ87±_‚e}¡Î’Õ’ÚU±DùtbÍfGÍ<ØQùˆæ±oÙŒÕ]³HÖÀL^áNÂðr48½¸<Ðç8KaÜ-›ÌúÚOÒ¼¬ê¶Ì„íKÚ¾ƒYæeZN{»îLñŒðª%Ôdé]‘îÒ&ù¤3¸¨¯#ÛÀDÌ(Õr ¸65ÍØ'¸©-Ê–+äÅÓ%^ ¥É'Pþú>Í×?é³|(+»@¢”ñïÐ×ëÜa£W ÑO›¦É©]eIK-Ü„4gëIšÏès±,æ"ù¶tSoòô'ÁîL& óg?à5YâÎîá\й¡l÷JûŽÉïi#oøvü ƒ m#~úp„g}­ý$™öÜf“rçp†§ÊðfÑ4ŸÂ=±å/ ÁËιnpðèov\½ÜY¡Q‡;ióúúà×:ŸÔ´C—³TßtxSêÁú.kÂÂ{ Æaë{ŽåHr¸p°PPogóÓ;,™B»gJAlÆE&:êÞgx;9÷geyø“<Çîú£))£Íó 1!Ò¦ÑWŠÅ¡ãtÔ¹ÿ°ªOžSâ :ŸPždk{hMð­#âÌ.¼˜Ø/œËÜî/)ÈÈS"dDv¢—jE/޼pðF ^„PÌ<ê\ é¬yè†Ea¼q•ÛOo®‡®:\vì‚Ø # 5Dõ+³¨*l‚jwohÈ J…,’[ý­„1“ÚSÎS¨ãiåãÐ>­mkZ´Þ^ž½ûpý8¹œMÆO$÷qcÉ•F³PÇG“+ ¼ŽÑsùlÇš¹WG‹ÆEÑ=÷£ÉU½­£ÉA<—çv¬i“ëB“½þãq–ÁÊH<Ñ…9šeÈ×u`Žg9Œê÷þ™Xn[ÓfùêæòÕ›ëo‹ º+Œ‚IS±{d~·å¸HWuöÜäþ!ÐÑðÛu>Ʊ²3ÿ»pvl«1ÄЬ‰ {¡²#´›ÑŠE@4ã0F¹†0'0ÃLl¼ÂzÓVÖE;,Ý_@L¨¨Y€€j?Ÿ*Àü¦„>l™Sè¦Ú0˜¯wMr å"@”Ù×õéÌ C©íAf÷_58JÔ€œùv<·ãï·­U°$¯ÿMì8JSãD§žNÕR›­Ô¿ŒÜVÚu T„'Uº°JWWòÚ|LUX¸[Cú;Àу_ü‡ŸCzœœ endstream endobj 156 0 obj << /Length 1780 /Filter /FlateDecode >> stream xÚÅš]sÚ8†ïùžé™Ù¨ú–uI t’²³¶Ãâv€d éÇ¿ï‘eÙ¡µ¨×Ù+ÛÇòÑëWGe>8è·N'­×=¥´¤2˜ÜB"©Y 4l &·Á‡°?¼nŸPÃ~¼‰·Ë¹=Çó§ír÷=;Ú~YÎc{ð ÜaCl s5°;£ø.ÞÆ›¬áÅló4[µ?MÞ½îE8ˆ@†dFŠ0‘‰ ÍU¾¶EÍ­î¤õo‹@½nŠ"&‚ùºõánáÜ»#®£àkÒr‚eöWÁ¸õg »^DÄ‘åižZ1OÿêŽÆƒËáô¢óîr”(ÁH “Ålú%] )ÌÅ<Ñeâ‚HD (Ò‘¶qpç)f;}ÞåHD2ëÀ&&¦uÝü© Åü™‰>=¸¹$ÒTÿb“tÛÏiÞQ:z0JÉèqwô(T’J‡ï•®Ÿf >œHŒÃÛøn¹‰ mÓ3ÏÇ? ß2  ­ê”AiûóŒ1Ì`iïûjŸ.ï76°yZß@C!BÔ>á”…=Ó"»ŸØ|›­VñÑpW‹xcÆ|:!0…Ej†íè“÷ ûÅÞ °|´[‚(bvw·È‚¹y°ÿu¹J÷nâì’”h.L@#P‰82zsDr€™h#’j es)å¯Ç‘úbý9"E*j„#Éø'aì[T"_„#‹„Õ‡9"Žˆœ#ÂrD¸‘GÚ$´(‘9JD%"cƒ×ËMÖÏ3”ˆ%Nó=J¤ƒQF‰(¡N:(ÏPŸ£D¼Jèq(¹j¨¢N[ãpòæ­g1Áº1Ù Sãˆãæ˜RÊ_)õÅú3E0Û&˜rÕ1㟄™o@Mq½SÌndŠ–û9¡s¦@tf{¦hYX›è(º”$ÛðÃl7OÓ•¡(: òi Á(I·î‡@(\9@Ñe 0¬þ? °ã€2¼¾8íú.N¸€‰§ g1¢I)=ÔëÎ)’¸ ¤`W'ß0<^°/P8“ˆÑ <Âh ¼)äs‚ò (ÙÀ"ž{°À9,p˜âd¹ùl¯±óNäó‚9!’ëÝ9 ' „`˜8„€æ¥%Õ–ɹ´/îôUÌ€#¿AˆÅ¬M3ÖdWÄ€öfˆ´(¶(É'a Ñ%DdPB¥V)—š©¥pö°´@* +\KáÚì”id?,Qªr~Á\RBgíC‘¡™iß{ÚÌwàÌãÔà’ ÚC­ñ4ÿ«ÛØŒ]: µ ¾#NU@¥BvÁí~WbÎw%lnÃØÏJ6Ì;»3:T½D˜iK•¹¹Çï›éðr:l3v.ºß â$ÞRÐ&ÞäWâ4e‚罊7häx$a0¡Ý'y~C2BTTD€#¼a"š2×U“›{ +åðº×Ën¿²WpYÓÞê$Þör€—þöÂÃA˦ÜuÅäî^ΪmYJÖ­Úê$Þ¶ÂÂ_d¸ò±Õ7Vµ®××é¸;©ö²(\·d«“x{K)‚—oI„"AšòÖU“{ûær8éþíá-h“¢nÝV'ñöÖ¼LEGÔ-†¼ÍñÀU³÷vÔ=ë'ƒÎyµ½ O躥[Ä×^¢£Ä6_{‰æHñ¦J· foïÛÎpØ=Ÿž†gƒa\i²)8­g²Go“#xUPþ5L"x߉šªá‚šÄäÎù9ø:íŽFmŽÃËQi)›üà™üÚùLqf8摪ixuoÃO^N½ ‡ªdUµ«Ænm¾ž †Ý:¦ƒhÎêVyuoÓ®ìÅÇtX¹ ÕX•»jŒéãë««óîpº­Yص¥ßOÃÞåñ΃r¦ê–{uoçÍ—)ù;«ZAiSλjŒó5Jœ›o,uK¼:‰·ÑðÊOÄ%n¾¶Ë¦Þ« j’‡÷>óR}6½èf¿üê1 ꨬ[ÆÕI¼Ý¥a}DÃB—“ÆÊØUSt×ûÓ…QH «épuo‡ G˜Q¿°Üe¢±úuÕvxòþÊÃeP 4­éruo—1A:ò¯cXô2ÜX»bŠ&{¯§A Á5«¸:‡¯½÷vV»”7U®–¢¹c»ÌhBÂÉuµÇ óš5\Ã×ceþU¦½=†.Ѭ!]-%ýÒAüÍ~C¡HC²ßøçäÝ+AŒ endstream endobj 231 0 obj << /Length 2302 /Filter /FlateDecode >> stream xÚµ\Ûr7}×WLU^ȇ…q¿<Ê6í(ÑÅ‘¨TjÔMŽ”©%)™—dµ_¿2ÈÙ ZxñHòððð4¦h÷->ž¼ž¼ù`\áˆÓ\Ó»Bi¢(Œƒ«aÅtQ|}¼¼ÿƒ+:úX­«M=o¹©æûM½{:þ¶ù£žWí/¿RE?ÞÜÀ…µ8ýtÖþp]ÝU›j}¼ñb¶ÞÏ–ãߦ?¼ù`ia†ž†´†X*€dÃ@ÀíÆŽÞ´Ãý+N&Ó“¯' n¡{æÍ‰ª˜¯N>ÿF‹üß%ÒÙâÏæÎU¡%\høyYÜœütBZj+»rŽvPWå¾^ïÿßì(¿‚œÖå‘?`u¿Ý–³ù×}½©Êù¦ZäŠÏ-_5kWߌ—ƒž¯çr"á„5p1ÀÌW™\°òNlªe5Ûbœ¾Â KÅ„FNb’dŲÅD—•w¢^×»r[ÍËùÃzW™ý{—æð ý G´ LÚáŽ@n-u¶Øè²jg©yõøJžs®±QÒ‚ðD1Bî ¤ä’f‹’.+ïÉãæa^ÁµcH¹{ø×˜ÑQµN³>§ØpéAX#¡"!\ ‘Šç²¦ËÊ[³€GÉ®zpæLaÃ¥á ×ÄÙ„pŒŸ;“Ë“.«û—aR¯ª47€3‚87úAn0IOˆ¨ ¸Ì!]VÞûjW®êyš @•JäÎRÂʉ5ÃCBBuÀl¶è²ò&üááÚÔwOÉ^Hg!Ì’î…t”Xæ†{õ¹"`å½øs3{LsÀÂD'Ñ‚pÀXb´îÔÔ䊆€•w`¿N÷ÀHˆ,lôƒ <ÐðJšP P.ryÐeÕ$Nõöq9{*·»Ùn¿Mó®–cã¡á…‚7Q ñ ( Ù\^tYµUø¢žÏ ]Uóß½ÆF#»–"@^HN”Kˆ ,–-.º¬Úäuõ8ÛTåz–˜¸z¾†I¤ý 'à³+™è[•-*º¬º3TºÀW+lLôƒ œ`–È„€ßÒl!Ñ!ÕÌN«Ç‡Ía°õ¸8úA6PM¤PÃ}€4ßÈ\[¢+oD[S#ÍÊJbc¢$Ý á$IXwæk—«ýªKª»ƒ‘샧+2("@>Xx{><(dûZä Š€U׉/cNGû»1W£»j“æ 0—XKz1Ž <‡©¿ÊÖÞ%Õõã¡^”Û*m%Ö3Ø^ñ„ .,!8 õWÙºÈVmaÜòö|±+ý¤&L³á>@Ú/³5¬[ž6Çö¡G€ ’°c/øC@ºlkâ©ã`¹­ÿS•ËzU'zà¹[Ôp‚{¹BÒ¡s5Ÿ¬šýîÅ1=W†mgA¸@á/.! ù¹šR/Ÿå—§f*͠ͲY-$Ýî qrxXp¨x¶Þø€Õ‹Zï5ö¶={ŠmžAøb±vx p(r=7N¥WqxSlÏ}Â#ˆÃ[Ø8T,[7~ÀªY°ÝT~é¼Z=îžPU×ðnØþü„#šc†W€êêr=MVÇGúÁx’¬¾$–ã\b±]ü ?¤ƒW&DÔTäj_ Xy?vÕv÷*†H˜±íþ C„!Z'ˆÄe;°ê¦[~õp[Þ=lÒ.ÏÜXd‚ð„+¢NpΈËv: `Õõ¤Ù‚m…d/> stream xÚÅZMs¹½óWà˜D7¾S[[EI”ÍD"’rÙëòÁ¡Y»*»$G¢¶œŸ×ÈRl‰œ²8ÎAÂÓìyýÐè`He•eqVYQdEF19å{|í”Å} ÊYRd•‹^qP>Ø%Ù*Ê*ù¤Ø¨œqR„_0~Ä!*pÆ*vŠ¼ÍŠ”E|–‡î{ŒÁ Æä’²¢ÉQrxÐp6ÊTঃjŸŽâh=ð@eÄïp?ã¡PÁ9ø Xc Ÿ1zR–šì.-Ù¨<îS2Ê‹ýéa(æa°É0#„œý€ä†KVü ’W7’Ï*ƒ1ø L4°Ù1ðlÔ!+ç3©¢ *0f7ÓÞÀpá òجÅèE!À"°Fü_AMV4AØÄ³Ø@*aô„r) AЪ™‚\ޏeò…‡0÷r³BÀ<‰DðLja`¦-nÆ(¢ÆÉ¼ÂÔð@D1SzsN ÄÆKáR„q E“,ÅAr*9Xžð0ãŸÂ$B8ª”á)©lÀ\‚S2É•-ž ³Oc•ÎVådxþr†KˆõÆ€² ×5Œ'gÀ32‘@EÆác† &ˆ7ƒ¿Ö$#Ÿ2‰óã·å å0øå5\¨á‹«å•©·«f®†Ç›—ïÔ¯¿âþ`¸üÏ絞½ÿ}=^]nÖ—›åEp0œ¯o®n¯W묩ö‹Óõ‡‹÷W_Ô[ƒ/|öš1ÛÉ‘NùÝZ®ñs,ŸVº>àþ¹¯ßü¦ Úš(¤iƒ™¾¼ýôéÝã¢>èšb aÒJÃ&%Dƒ®X À,§»KYöí5~0<»¾Z-Öõ”«árýe£¾êz”+úŽ,²Ïb‹ÜCºH3"£tu7 ×­žc&ÇoÍdÿfG——WP÷A³…O—M ^æ2”9æBÈ7øZEƒáâö_›öóÉÅåÇÁðàêúÃúºEbÞ _'Ã÷Ô~è+˜ìƒÑXŠÊZâ…QËÊ †4âäFê›…ó—Õï?oÖךþ*ôíFtZ¢ò Ÿ¬v…qƒ_^\]jêVQD¸û $xí9ïÂ{â½F”ó6éø€µÏa »lt¢{÷ùe·†u ø@Dˆ–vàð{ÇòId·;¨(tv~ërùç@dCùÕ9<”ÝO|ǵ”TÏ ‚.|—ݳ‚ -0m ‚®€s¯+AÐÙ}F?76RuzMH œA?¢®Å÷dí£Óùb±h^ç‹Élú·ÃÑÙb¾õ±x: µÐú: -mbÚ¦9ý}6ï g†Ðbbø)jqewcšLûÃs™,ku@+€¾Açwb:-_ö…)`OÎë€¼Í é„ÜNLÓóÓƒñ¾‰r.!§K-$} kÛF­'ê÷››fõÇzõ±ùs}}ƒðùMÐr¾{Ðz(»£|}DÔ‹û£"é ê¬ÓOè js„¨ë$êŒ6èP:ˆÊô{׉–ÅÝM+jl'¬ä‘mc7­pM—»i…Ùä~<ÅH£Ÿ×N|—c¤K}N’ %ƒ„RF‡bu(ù5°¡ØJŠ%ÅbT,y(-±h‰EK,ZbÑ‹–˜ûÈXh ,98¶KàÉ@sØLgÍtt:î+ðy,A41–­¶²BØŽçàüøxÜ[zp¬eƒE²©÷² ¦ í h69ê E01Y6§4c©±CÁèÃN8Íb¼ì ’¤ßn jÙd+±™·C:œM—ã×½ABY‘r–º6S1e\Üi>>O—“ÑIO¨([ }Bq!€Œ:æ]<½M§ã“æ`2=šL_,ú‚–ÐÿH!die Q0Ú-„NN§Ïç½Õe².h•‚`D}–žæk>;_N¦ã~1ù Ê©)$³ʳ§iZœŸŒOáU£ù›f2=žõ…«­½ì}£ŸÎ²ç«}|º®î•#ÔÑÈÖVÖŠl5ÐÓmÇ¢95§ãÞji¤3-›Û–:Ið¡p v s™ N=¿>«Ið,ßœõ… å¬3Ò—¡Ô—3"mý.ŽzJɵ©.Èf~Öè«w@Z,GËó¾E  Iú öˆ)Øí4yñÙŽö¾ã~ô·ÂwêÓüH¯ò¨¬DPg;Ê&4 ÝdÑB–:Ê|W½¶ ¯]d=:pÑMQ2×Q+¡#^'£§Ž²F‡è:Ê"’†n¤¨àä»É:,¥”:ɶ;6éÿغ¡œüó³Z·T:±T0¦Ò‰¥Ò‰¥Ò‰¥ÂD*X*¤b`*X.ZrÑ’‹–\´ä¢%-¹hÉEK.ZrÑ"§Že¤:rm]}Cc뉩ú¨ê«3@TõQÕWˆª>ªúêAÝ Õ#$ªgHT‘¨ž"Q=F¢zŽD\õÕ-f⪫>®úê^1ÙªÏV}¶ê³UŸ­úlÕg«¾º¹Kuw—êö.Õý]ª¼TwxÉU}u_‚\Õçª>Wõ¹ªÏW}¾êóUŸ¯úªgPu ª¾AÕ9¨zU÷ êT„ª‡Puª>BÕI¨z 廓¼»£¼z–Wý„«Ÿpõ®~ÂÕO¸ú W?áê'ïö3:,©öP0Àå"B ö-I±vZ}¥hŽmjÑ„2\QÒ$§pzíE#ITBÏà“–w"¾gÞÆÐÑøx|¸œ¼7ËÙ?Æ}Dƒj†%qÈN¦¼ˆ‚1v‚Õ{§tHú¬d´k_–ñj ¸{Hhn^ŸMúó°³–`*󙱑$µ ´ [ñ¯¾qT¥^N}$qã3Zzc¶qv<šœœÏûê(‚÷x¾ì,´ïà)€/O;ÊåÎÎúÂãE°ì a¾¼¼ç„â5oãç|::_¾œÍ'¿õ7iUqvíÙ“¼þТ|ÙêæmtpÒÛÄ‘tY^kkÏê‚eÓÖÈp~v29-Ç͸ìvô…ÌÈË®=QiߥCG-o‹îèšâ—Íé¾Ã(V£$ðÙé(//"ÊK˜(ï'kvÚÜ^\n,;Ö€‘°…œÌ½_ýûöâzݬ®×öOIâ¶Ã¹£Äç g˜?’ ƒsÖÅÕ6ÂÉõúÓúýM_œDt}|OIrhì~¾—rÖãBÚŠB¹¸¼Ø47ëU³’^ìËfÿ¬ …z”D_i‰¬=ý|O©0Ú&y÷w Œ²zVëÏ=3ã Üð|úéÄn‘ ¶¢^>£¹_˹!¥Ù\}\_îŸ ïõœÆ%íŒýéÜT–¼-²†óáe³~Ìiþ K•[G endstream endobj 350 0 obj << /Length 2189 /Filter /FlateDecode >> stream xÚµœ[oÚJ…ßù–Î  ™´ŒiN¸á_ŒÉ?ùbp¨P²FÜ>9ï!"„&†ŸD~=m W™¡©°T©‚²©¨6½¨ÞïnXÁU.kX‹Uà `’*ü•NSeµiÅCÝ_}Ù!ˆzS”F!‚&jåamB"µŒ0éR!mzñLïö‚‡™Z¿„E¦!‚fj81‹T;BL…´ae9G…ó°NE ‹ jØþ8:¤Ê*’…´éŇôÛß_1÷°mÛØ?û ¨´0IayJIœM–І•zszü~u‹ZMÁš±±A ‹ ¹ÂqšéêlþºÙ} ”ïw@+8qÇðÄ­R1nº©ù Üßä‹Qއìm*­ã(#D°˜•µðsø$+? KD¹e¦¢ ƒcŠG6"h°Ê ÆM­“¶é¦;>¼\]š8Ѿž†G0oTêØ‡EР¥!øLÀì©“D^N[ÙhZ"¨‚/[Eˆ © Eø±”‰á*|]7US¤å¦&[,BõKx±-Q„š-¤Ë„“§¢©j"M3§…!íwáz“w&bË¢4XÆB ³§LVm¹9¡MÃ\Á¬Ü„5°T¹s„â¯p9E²ÂhÓÌé¢Ìq õÞXlq!‚Fk ¡Xs§HVm¹©á^\¢®xk±ûWX ÖHâ ¾ýÁaðäÉ:¤-75Øáj5Ë«¹k†à il•!‚& æ:TI9L Éž7´ÌԀϊð5po‹F>Í k ¡*Jl‡)‡y“™T½–›ÓV„Ÿår©!ð±a ‹ ¹ Kl‡Ò(‡y“¥º’Ø2Sc]á¹€ XGxd«!‚ÆÊá¸EQ³&MVm¹©¹¾ã*Ì•szd !‚æÊ@²C3”äIS½.Þ2sºÖµ™Í†ãñ:Ì–Á"Û Eˆ ÙRN´Ä:˜³Ä%ë…¶ÜTpóùª¼Üž ΓI&ìšØf(BK˜9JT‡f(³°Î'‹oËMEØgw»œŽÃdÁ™‰­…"DÐd%ªC-”ÁÜieª2RËM›ì¶@¼–ëÝéØ(BMWk";t@½9“¬ÚrSÑ}³\mÇùd`dÿðêØf6pñ¬×U.²çAƒV`‡Ãj’•A[nŽ•EÀì{‹áz’÷¦bë 4[ v,`îLõ<ìî÷Õ;Gøÿ_<®{¿' £©NVmy{Z0Êí¦È×ÛêJîÁÊØ~(BÍÎÍ¿áÄ3yÃȪ“µE[ÞjÞóª1z1]äÛ ,Õxô`VÆÖG"hôÌÞ•â™èa¬U&Õs¼–·}Q®§‹óŽÔÁ§ˆ­–"DÐÔ©>¼kÅ3©Ã¼«’M[ÞjêË¢<;à.r?™¬–ößNGùö]˜>ø,²]‚ÁÒw’0ùÜÈÃ$,“5Q›ÎÂèƒàÁ+ב×åÂX쨸çfÆd™¬¥ÚtVc÷ÿüv9_nÚê~‹ûéÝš`gv¿¾‡y¨ÿËöW endstream endobj 252 0 obj << /Type /ObjStm /N 100 /First 917 /Length 2560 /Filter /FlateDecode >> stream xÚ½›[o»…ßõ+øØ>ˆ"÷æµàø’pl7v€žyPìI*[ò‘ä6é¯ïÚe)Ç|©f€ œÍß,®!7/¶Æ)£¬ñÊ2! Š¢¤Q9[“”wŒ4«£²Ö¨dqÝZ•=ž³ror8ÀMdÓÈZœ°—+ÈÒ¥„Ü$s‹ b§q5#Kk³"#ù“QxÚKŠ—-‘",X‘Ï~dÉñ8yE)  Š P-EÅÖÉÍI1%É0+vR2ÅÞ#C¶ŠCæòžœ3+ÎÑŽ,;åÊ«°W¥â (Ç2„ð$ê$åBÄ+sV.A5ëŒrÙá)ìMÄS8ñDrÀÊs0#ëœò"Zç•åæ |ÌÈÇEå3I>Iå"“Ü e{äã­ Nnö¤B@ÉÖ³TD¬,¼`Š**ÆBôÈN~Ê*ºL"¶ŠAnÆ+Å(Òá*(ä'VɈªÙIÕæ‘Í^%–ÌA%'B娒[ä¤R,?e•DC20DÆOdà©B¦™PqdXe©Ô0ÌâxDpYIn*§òST9Ô°¼¶1(‘Š RêGx-vrÄ^2•#”»ˆýpQ•w†¹Üˆ¤QÑb&T4Ô‡elñb„ÓÄ‘6â*N^ž÷À“˜’¤hc?)¶„휉¹|ÆKÀ˜xOT>‘ø,A’jd#z«Hå0“üŠ2ØE”A⺠oyä,õÃYĜθ8zõj4¹ùñØ©ÉÑ|¾X&×O_Öåü|6ÿm4y½XÞuËO_®ù^‹èPèÎèË5ºÕÁµ¨³–î«…!Z<ÍûQ#–xãY4:íÁÕ¨l€Û¢ÆÝlõx?ý1^­§ë§ÕáUñÅïy$8mìð©l-’&…ˆ2›ßÍn§ënüÐÝþ«Q8¡ø=«x«sÞ*á¶Ñ716ïÃãtÙçÓ:^G…ÓNÎ#€Á5©ou@ø×ÂØÿ|úÑÄ2 ;M(êä‡÷IÅ`ƒ0 s £|=‹åº'I$&¿g¤Ã‡#¢D¬7¼ !rtßû“ƒSÖ1ï9Ä0R?´ [ Œp´—öµ!’,»ûnºê©%áQøÎ"¥ë0xC²¥~8µ)öùòôõk·<¼&Áëv>aÄJ‡÷IÅ'Ê,Kc_•Åìn¼êÖ‡—Å3Êç,¸îoN¶”q\‹bœüþ4C7|»ì³ÚÇ´SÄ{|ÑÃ¥bH¼rnbü¤Éfnàð²€ËÓžQkíà²T FŒApc;ì¯fÿíÆ÷³‡Y²Ø¨]Øs ËtE\–ŠA m­Œ}"Ëôî®§¯½³{6±YsÞ&C¾"Rã-ÊøË2ê9¸6”Y³ß󊉚Íà^Ùb0í71ö¢·UwÛ[ã"“|e:½*CÙãúà®Ùb0Iä’š{a~¯ÊÈô–Lío•I¬mÞ3ƒ9HXÛÄ(åe'“ÝÃãúGo± ù¨eIæY›ˆÝÑàÚT f¯MnclÛÞ* Ú™‡/=»ä¼–E¸ge|Ö&ÅÁ•©ÌNËi C”Yw«uïÒ0ëÍjl•ÆEmxxÓT ö0 ·1ö;(/®Æ_Ëžº(²ÚОqPs9oœŠñ¬Nc_2YYÔée\M&c·4FD:ÓðÞ©LK†ÐÄ(ñt¾˜Ïn§÷÷" ºwó „Ám ƒ»¦R°%ͲJÞ (—O÷›9î~4IÅïÌbsÒɾN¶Å à!NCTY;ͯE$½·Lf¢ˆág*!ÉÞ7)vk¨‡×"»ç‹èt4Ãû¢bP€?dkS£ø¢›Þ^ —ônJÎÒaø½’÷—|b³vÚ¬ƒÛ-ˆYo´~×Ńe 5ç&Æ~Ç»š®î¥í/2±„ro†å¤ýðû0¶Ï50þ™q¶J^ t{žƒŠY— „etÿçKTЦejù”ÎÛ¢ŒÄùÝïO}|KÆ ä=«X§Ýð»2¶Œð,•5Ì—1Ê<Ëüvú¸zº—ˆd½ø­;|7Œšq{û3¬A 4üþŒJñ,Kƒ¢„i]C–dËRæ5ùǯÿTc4#Ó†SYÍŸîï?oo>[Ì×¥ˆ³˜UÜ¿áacjjkJ5嚺šúš†šÆš¦šÖüª^\õâªW½¸êÅU/®zqÕ‹«^\õâªW½¸êÅU/®z}>ìab$™ŽÌѪÈFskWÊúûimz4%“l%ײ;Ú„Ï+·¦ýîzB ™Ê—Mø²ƒc ´i/¯‡•h¤ŽdP.mâÅ(\N¿<ôî« !iÙr.j|m!!~×CðA¦:ËÊÈy4ºaß½T‰sÚ¤T6£$4°ÁKãïÛ.}Z¡ï…†¡oL#Œà0ðþóñÍõõøx|rz~úf|v~ôæoÇGW×=ÙŒvúpÖø’AÈ:Sh ½ÿxóñè¼W&ÁÀej8FV¤îlƒéÃéÕùѯ}2I-3ƒþ[gtQÁdlK§ëÓ¿<½8>í•*±LØH§ƒ†Ï2"Ào)u|yqÖ+Q´:ú\3šBŸOš–Nï.núµ¸÷øØÊÊì5’?‚X¾%ÒÑÅåE¯D.¢º RQˆ‚ÅÀ16ˆ®>\ÞÀåG'ýšœ=8ܦybTžËÚ¿°ZµáºùptqÝ+œí¬Ë´Œ©=GHÖ’êõåÍÛ¾`¬•akYÏQþîÄkÇÔ4÷»›wG7§=¹œP¶ãRŒàc —ZâŸ^ÝôE“"Š÷:ëä•G—ËÔR§üyÒ›:ÑkÙFGÀ  CZíûÓã·½ò/£[N|z¿0Ý^«ëlüñâúêô¸/"oAPvq@¯­Om óËã£óŸxþ,¼ endstream endobj 410 0 obj << /Length 1661 /Filter /FlateDecode >> stream xÚ½š_SÛ8Åßó)<³/ÉBW­Ç“š8³Ýi;ž6†™6íØm¿ý^Û1Ø ‹oêãıÇ?ËW–xtñè´w”öGÖEŽ9#L”^EÚ0ãddn-Déeô¡:Y „æýÓ|•¯o–Õ—y¾¼_ßÜýª¿­ÿ¹YæÕ—\óÓù7Pí^Œ«³ü*_ç«úÀóÏ«ûÏ_ŸÒ7‡£˜G1Ú0²°¡bËb.Ñdé@ãá6îV+Š3zIÚû»xàÑ·`±ÔÑò[ïÃ']âoo"Δ‹£Ë#¿E8Òàç¯Ñ¼÷®Ç7,µŒ`ŠÈjÁ@ºm-ÙÐ;Î&i–¼¿˜Î†÷Ól2º?>NæóñÑY’Í’áI7oôk”o²»Eȼ¥fÊZ:o,sm°h7Ítáþs6&”Ö…_í|óÝ-Bæ-$rtÞXÿZ,ßM7 àG%ï“lž–Ýöâ8]̬ѫ–¾Ùî!³`Òì‘m,M¬iº©XטÏÇÇÝpÑœò®>ºE¨pµsL=ÈkÞB Ü–›zô=ÁÒc‘d“$9Iº{æÂ`aÔ 0A„ 8¶¸¡§Wc«m¨ô¶ÜT€Ogããáúi’¥ˆûӷɤ›4:•ÖslH!“¶š ¾G”±ÖÕ,ÊM7ééÙÉ>xÑžß w‹ñÉ@Åt¼Xà*,ÈM7ÞÅdž¼Û0Æ7¿Ý"dÀw’«ZŃå·é¦|:¼Ø/ÚÜ7¿Ý"d¼Ò1.7‰¹ûõ#¿Ì¯ž‹5¬Ô"ܦ—bbaù}u{—}Þ¿¿Ý¿Ê×Ù]7ct Ú7ÂÝ"dÆÂ0K*c,[…³¡7½<2^ÞýÌn.)lÑG+~l»EÈlA1'ÈùÅ2U¨`ùmzi°]ç—D¸h+Ϲ‚.,¶Ôà*,S!ܦ—G¸«ÏßrYåbŒ½gl "T²Êqƒ£’Åúd¨Ø¶¼<’­guŸÅco"=K!cµ1³FQ±b1Êm¨À¶¼´°f·y;±‡#¶gV»Râ¬d :X¨Ö½õI~»\ßü¸»ù¾*ÎÆ3°3—zÓáŒîWËâ·Ûͪh¬j(ÕÌiך)Ÿf“‡©qü±0Sl¶šZKfñr$^Ž1å˱b?˜ ¼#\´Î£«ÆŠ†¶ÚÓ{wÿAñFjýJxiÚO¾Z Ñ–¯×bPþAS “*œ¿ÕRm}½‘­cäTÕdª±FZ<×Õã‹VjvUð üͦ<®‹>η½ÜU,—)þŠtViµr¦ø—‰Ù0 oOðÉÆÖ¶äÑŠpÍCSæb+ÇGàýÅh”̨ŽAâ0ÌL3>®4ÃŹ­ï™go³{škf¦O_%ÐGUËïDúËýU9`xY¨–3ÜïµÀûǘ­L?<»*|øU“ÛaÂ,¤e²S ó–¾_˜ýÍÒÃ,gÚ©× sÑì;IÆ/ ±Tõ›®Ð!¼_”ŽwSœ=¬òè´ 1 —d°‚WÁ’¼¥ï—d³ô$ÖÂÒ‰WNrÙôO¥¹(_–h08Êý[7OkZ ¼¬bê%yON4X¬W `¢9†…‹p‰në{&ÚÛì‰FÝzTû:®[~'ÐõÛ³&ºXê½»²|ÃD¡(W/Y¤þ›1* endstream endobj 449 0 obj << /Length 1068 /Filter /FlateDecode >> stream xÚ½™[Oã8Çßû),í }Àø~‘æ¥@Úé¨6 #v1m`*1•¶ {ùö{’4›6)©ã<€sqÿý×ç§ãc› gDÐlt™Œ.¦Ú"‹­b %OH*¬,GÚB«)JVèálÞÏ™$g³l“m×Ëò&ΖoÛõ¯«»í_ëeVÞüA$™Å14´|0¹›—Qö”m³MÕñæqóöø2þ–|¹˜‚ ØP<·!ŒÆ†p0Y8PÐ]›³‹²Ñ,ÿÄ(HFŽ(t!ˆÖ¾6\¢åÏÑÃ7‚Vðî "XXƒþ.zþD’̸‚ë~‘ý±0tÏD¥))¶b7qœ^¥ámz×A˜Ì'‹Â ÁVæ:y3k8ãX4W0–?–TaFbØ‹¶zÚsr(vüé{}&1û»/(…iÞÛU7 ‡úÕ(¶ù†}-…-³=˜-ä¶Ï;Ýh>S>±>f0W¶Œßoe´>T.«ìi½Éú¡‡sEÈÑà/rÞó¿ç××t¹ÍVéz•þ*éÏ_“â²%&Œa®8i´r­ŒÁ‚›&ØŸ'a,ÒËyx=gqKßJ3,AÌßJQ,!Uùâ»¡ïÆ·»Ùö|Ã6J÷Êw“÷”ÿxÜl²—ôûz³Zož_OÅ]Iƒ¥„v&°…€Ö´O øqiEcFÎn£ÝïkmXL@ÐñÒL´öF|Cßxw³ˆ'2ºt$^› ù„‚:P m>“™!–Tç5Á%·÷É< N¦X y›{¤˜ H…ÒŇúŽ;›mO±äPâ*ÖÅQ  s˜¯Œ‚ba5äaZSßßÝ-‚¨§ÆV ÑÖ_Óy8½íˆ²0P:qêe¡)ä8æ 冾ÊîfÛ£,´ÀÕÔêNr Ä$ªA肳P01Î1³5Χ&bA¡bÖ#½DCnóï¼#»®V;  ºFš¾Ø=)û ³Ž¡CàÊ5|’é½ì›^Ž9¤Ýëô&¸úÜÒ0—Pô0íU.&Êxƒµ¡ïF«»Ùö¸r¡1Œ~O‹=~øáœ\úöR®ã>}ï- ê‹ôv:ƒ¤ã\äÓÑ +=ÙC0qŒñpr´4Ì,”DÌã†3BÞoè»1în¶=ãÌpHɼWÆ‹À׌3/Œ3O[zÆ™àöãÉ×»Öœ3¨•óÈ9Õ¹?Îõ9w6ÛsF —ÓÞ9/‚.ÅŽuî‡u “ž¤Ä¦{ÄQÔ;îQSu–GÒ)´Rù;‚i軑în¶=éZ#l¯¤×{Óÿ“.¼N%L}š B:h[z´:ËÝ‘ü_rßxEõx(c &Òߙ̡¼ïÎVÛãn9æBõJ{œLò°Ÿ«ê FzaÝÀì×gýRµïw @´< ïzLÿwÔP endstream endobj 376 0 obj << /Type /ObjStm /N 100 /First 899 /Length 2340 /Filter /FlateDecode >> stream xÚ½ZmÛ¸þî_ÁíÑ|’Ã"8@kˉq~;Ën“ùÛøA¯»ÅîHÿ}Ÿ‘Õ6‹k$¥=X/iy4|ôÌp8CÊeRF¹”%Bñ±ø$E^¾³ )£Í*9«¼1Š£Gk•5&¡ã”µÐñÊBlæ ‰*‘…ÎÀ¨lrÒIÊr è°rÆt Û†¬<¾8Qæ-F'‚ŒuÊft¼rÉÛ™·ÄI„E…“Ÿ">ÉË?å½ aq•4[ÈE¹ìð%E þ,ÿ G&ɯÈyšyGx\ÆÁ* êdãVbEQ~T(Æeã]TÁ’t’ .ct` DÐã² Ñ„™÷Füä­ ù SE“äŠWÑ9¹B*z I'ª˜À±÷IE6<«˜³Ã–À3˜Öóà:A!>)0dÈ«ÆÐ!•Xø 67Q±ò\I±˜•@8Ëí™8Í„sÀí62: æ9Z†ž°1+N°'Áœ„6<Œ›ƒ}f/¸=t œ]šÙ„±2þŒ’ ”ì‘ ¢²5bé,ƒN6`žU†™ëÜY/àv‚QÄö™bžäàÃåàh‰Tަ³': €‚\a+¨œ¼K'a¬Uf`±I:Q„“ÊÙˆf š¡Ã&¹"CàÚ D¢Ç„ѳNœE¦†<)Ü=¸7~•;î#áÎÈd¡HÒ£4{ñb6?ýýo5¯ïîîŸfóöÓOÝ÷ÍÇ»¿Ìæ7÷.o æ©y75_Ïom÷e6?^nŸÔ[粎`‰|Ö6È䈚»Çòc@®V/^¨y«æ/ïO÷j¾T¿{Ù¶Õ¢ªWÕzלþ°¨íïÕwßÍð÷âq ãËŒ : sdµ!Á³=lÖ»ïKA²¢Ä-& Ç:çŠçC)8€‘pÀ4uð¢Î>ÃY¼ª÷m!@>U@$ÒÒÌ4 hW MbŒ.k‰×˜ßAkÌM14ÓÊÉ’£!¼x6:¥nšÅ¶.…'Æ—e'j#¸"ëdGèYÖ§úûu©5Ò¿) QÇ8BÑb±>ä ¸Îƒ-,‰:Úa<í®˜Å,£z¢îïtaÄbÍâîòT V‰„¸±ä,F!Ù¬ ƒDFSN×°Ü¥“¬‘ÃÙÔ¥¼Æ1` ‹B²¡}Ì]4‹Ê¯Þ\¶\2ÚK2LF;LyǤ‘.#ª‡Msª7Å@Ö’ÅÊÜ2HËL;™\7í¢¤Jü¯¥ÝEpåâˆK·¥V d¬ÞwÓË!¿vÄiá0œ}[l†Á•%¡G馥¨q>jkGØyíB)8Ö`x’ E<Òf,0ïΛM½\ a²™µÔ"Ý"&“ ‹˜1C5ÛÃéMus^­šb ‹;jj½:IÉ“³ÎÁ €–ªýzY Pò:K ËIeg9iuUm±JÃF âN¤ƒTV)h¦!–~ذ²®êó¦&ÊZê`ï€ÍJ9„‡ˆZï€h½[ŸšR|„ÐeA6¢HV'?èL§êÜ6ÇjWo‹Bu({ð#BenQÄÆÄØ¶õâ ×ê ¯* Íz`_)!®¤£óÃØÚÓq½{Yâx”,©×H6áàø#¬½Ú·§›ºmd&ÿ¸^4ÕëBè8 xcT$Qö9t°þÁ‚SÙËš8©l‘oŽÐVïö»7Ûýù×™ÂR½…" sTó×oþ¬*kµóN1êVƒ©÷é—_Þ}MXJ£ìU",ÈȞɮîïž:@+dæézÏŠâvNl×Ç óÃÃým{Á3ªùa¹RóÓåó“z÷œ¶ÃûŸ/³ùz/wOЬPurï?=Ü^»}¶îÒöòáãû›ûϪ£3䀴**& ±`êðþ*PÚù«xgG .;£I6F¯mê[îÛëÓ˦赵}ëúÖ÷-õm¯Ï÷ú|¯Ï÷ú|¯z}Ôë£^õú¨×G½>êõÑU߻ߨÁÀ¼lÃÂÀˆµ)ø‘T.Ö¼>ì§’ñ"!t ѲӔCìÜÎ}Ýñk¿•ò¡®Ù:BDr¼‘.Ñ´¨7 ¬Íñ¸?VûÕª\:‘°ºÜàB´›»`;îÏ'YþØ"BV—ÈK‹ LIäÛ³‚Ûfwªo ƒK`„8$ð2¸‘´þ¹U·u[ªZ1!»çšGÑg÷ÏZZ€"¬!µî Êœ°“MZj¡.Û—ÚÈÊù‚ZŽCqE&[/MÛ®o6MulêRÅHô¦ËûeäŒ ‰-ªo‚÷§c¹„;Z¾Ö˜)È9Ÿ¬z|7õRÒÈóât>ƒf" ÈVÊ™ªÎ Öm‡j».µ}2¡ÀíNmµEÁ‹kȽ©Úï0?ÏMµkšeSÊÅ;à­lFÜ À‰¼Í ñ´<6ëE}jªÓþûfW W2RxGÞ˜Rùѵß,Ë |MúQdZ¤p!9dÚCDwmóCYL»lßyø8É™ü`ºßV/ëCY@æêh3*ð@ óýçÒèçÇÇêöþîñ©úñÓO?]ª‡Á!pÊ›:³º(›ƒ#hnŸ>W?Acö×—?°Â^pn—ÇØ¹}¸|(ˆ°ìÉ 1ÞÆ* €ÞAwïÿz)‚†#F—ÃYÙpÏ* ø·> stream xÚ½šMoÛ8†ïþöbÌ ¿I '‘]·©JrP4-„"QŠi€56]ì¿ß‘%Õ’š2(êDK¦_¿æ<ž“òYMÎÓÉÙÒ8â¨Ó\“ô(MµÄ8 #é=¹®6»Ùœ+˜®òç|ÿxW^$ùÝËþñŸÿê«ýÏÇ»¼¼ø VI‚+o,®×åƒ8È÷ùs=ñ÷ç—oO³¯é»³¥bц… i µ ÐäÁÁéÆNÏÊÁðâ“(ü=a8;úæÔ Eî~Ln¿¹ÇçÞ ÒYòïaæ¢P.4>~"ÉäãškaYÃD­©u²ZŠ$É’ì|&ð3]fÉzupÔ©B¥V_‚ÄMq@[ÅmÅ4åLNudŸ“‡†¶Øëw×犚¯Þ fÅl_ýj Úúõöy‡¦–¦Ž»Ìäöß+ݸ é<Ù ·ThWFï¯2ZTÁ)÷ùÃãsÞšGnç }ö¹•P‚®_žf‡ oÞÌ~M¼Èâí.]o¢,Šãmœm—Ë$J_ˆžÀpNý{ÓÿÈ·¶–Ja›€o¶ÙE]öôª § ‚Ñ­5£ ÓT(º;ú~tû›íO7^Q«Í`t×q?Òm‚Э•¥Ê7—Ôa,;po7iô)íëÔÆ·r–‚1Áøîèûñíoö¾aöVƒò]…~®u…¸ ‚¸rE‘³c0®0ãH!šŒ_FËè"]ßDY:“0ݾ6}}K…É\„]HÌ*ìm}OؽÍö‡] ìy5 ö‡øÏEM¼ C¼ÀÂgõÄKg0«³×‰/*X´I׋«žÆ¥Å^K°pÈKÃ0eò`Èwôý÷7Ûyi$­‹ó Ä7˜×Ô3‚½ÔX­{ÌF’»&öÇšdѧëuÿ®]2ìÁ¸ H=Ìá oÉ{2ïkõäQ×*;ó¯0g¼fž…a°,Z6óÂà+¹i1_¶p'ò.6dÜ„ã]HIAÛ`Àwôýˆ÷7Ûy! ÅÕùNü ãAp²(‰£ü^˜‰$oí6.g¦‹õÕ.Žzúå;1p»‘[ HR0Ô;ú~¨û›í:·³» õe÷ㆠA禨€f ĹþÚ†úÇíu_¿».Î"Î &Hñ¶¾'âÞfO@œfs6èŽz÷â2 â Kž¥Qg˜rd‹ðÝf1S0Ý¥o·ñús礪il´RÎpT:ܹQGßr³ý)g8Z9ܹÆÿû¹ú…º ‚:SXò uÔvÌtYÇ–å¦ê[çW}Øh±€'I(¨pImy?Ú½­ö‡Ý *¤’õ›:îÅí õ0¥+ßmK=þ¾ß€¢åþ©ÿ,ø^Ù endstream endobj 506 0 obj << /Length 2860 /Filter /FlateDecode >> stream xÚ½ZKsÛ8¾ûW°f/Ô–ÍÁGe.žŒ“õÔØÎÚÊ)3¥¢%ØB Ejø°×ûë· J$M'²í‰D£Ñhô @úνã;ŸŽ~™½û%Nâ%!é#C/L„%ðŒ˜3]8_ÝO—_&'\úî'•«RÏ©q£æM©ë§¶U>蹢ƾô?ÝÜÀƒáôó9½\«;Uª¼e¼Hó&Í&N{÷1öԪđû”4ÄÀÅî;zDGMþ>bÀâ;l«7÷b!ùêè럾³€¾ßß ’Øy4œ+G2ßã"„÷̹9ú÷‘ßµEÌ:J´2%ó’Àšâæfv3ûõËçßÏ?œNßžÍÎ~?»8»œ|/‘(Ÿ /ò'Ò“Ñé’…gý$NœR9w•úÒÆ©Ï'à'ã°€3äÞW¾5G_~kÎ]fèÊ ½„'?@Y#®¼·r¯­Á_ÆA×b*²Žü¹ëE)À²Pw:W=>çëIèûý(èDÀ |Š~5ÙÄðþüód3æÃìúêËôüF\__]Ï®>~¼9›š4Ù1x8ódí<ƒç‹QÆ¡‰¸ö—§g³Ë«Ia?»¸ÜQç0ò=ˆÃ|(OÄÁÁ~ ¿€ß_ÙÝ> 9qþÃÞúßøÉ6Ôツz‹‰ü¿„:fxÔØé¾ªféüïF—j6/Õ‚¶\èk”÷¥Çv¸˜—Iౘ,æò÷‹ùý•5m´úߌy¨Ž^‘+¯.fÎkÁû¡ÿ]ïÉXxœ‹Ã·/Oãî­ì+Œ {‚dì…D©˜6–>œäEÿ8Lú^("ç²2Lh²¾$EB5u:Œ+嬪Ӻ©¹Ç;f¯Œ¸ÇÃÃm(ù{úoewØPXF ˜4ð*íŽ2/òª~¶« ½lâc%OWj¶#ÿBUV 3æÍ^ ™'|y8/öåï鎕Ý!‹7^ tà ¾U$_òL­Á‹¥úûÍ^‘ˆ£Ãy¥/O¯ì­ìkr ž¡Þ”[Wç¿Î*õÊäZ©ùòí5R ŽçǾü=ý¸·²¯É®Q·Ün’¸9Κ*½ß¹ümG¼Ù=<öXùÁÜÓ—¿§{öVö5îÌ‹X8p^ |ãÀN'Xü6R4õº©Iò2ÍÙÛýÈ œ=˜{â÷ô⾪¾Æ‰Ü÷"o8VÜæ$¹0Úу–/×MšíY!}Ëó]_þžÎÛ[Ù×xÏO¼(I¾…?ŒåMég1Ê|è9<À¿ßÙ{ +ç?úúaì®=ˆaÃðí©ê4ËŠ —îc…7ä‰›æøŒÝt½Îô<­u‘SG]X:‚Ù1ÛšcHwEÙë[—êDM˜tÿ£«Zç÷Ô‰¥JåµN3jß>Ѹ79"Ä[{»zµÎÔ F¬®«0‹yƒî¢RVs"eÅœnúÁ'Œ­Â6׿ªªNñÔeÓ'Ì]°XTò‰ÚfÑð™*+K¼Ã'w륶” /Þ`™†1Êã€AP(LÄ&O›zY”ú¿æ†g(ú®,VôFæ%;Á\[;UýY—z¾´¤¥ê¨ž–VŸ¼¨{Ë·¥Õ™Z •ÁZSZLv "J#„y­ò…QZF x®Ë§~Ð ;.¥ÇOYq¯ó>/ªi^rU?N˜ïå_?å®Éçè×c¼üòÝÔjT5f‰­X¹á#" i²E«!^?L83²þ`b0&ôˆYŒsÊ™l FßúwË„•ÔY/M®ÀÛJ•*{¢÷®ÿ°IM‚€ c  ’¢?zÇݲŒj—^¡éê;«‘2鸰äji âní„ õ‡ïó\Y²]?ÁNªµškf?¾‘²U›~¾­¾µ/}uó6²#/öÈwº²$쟲 à Ÿtƒ{y5»œéž^œ#]’hdÀléÁ€,!×j\RÛ‘Ò£œ0l£°D`ÛÔ¥N·a»u¾ƒkí¨GMóÊ^xý…‘§ÚEÝa+m2;äV-SäzÐ0㈥—ÊTá®Óª¢r И¸Q°v·aˆŽý:t®k@óÖ.ë‘þEñö6 Ç`Ÿ‰“Dt!¾iS Öòç—çÓóÓ cÌžQ‡)ã†_è+Ì¿ì'Vêÿ®ÂXj×oQyÄl½@°i…¤ß)ª÷áÃÙç)QiòG´Ð ^i®«U…y—lÒspYä( É&‘Ö?Òš¾uZBXCLâT¾‚Cöç ê„0mʜƦDêÆ’)æ°G·J4ºNo3;%fR›ÊŠk’u½(XRèÓ-éД«Íj¡Ì,tO1 ci³}FE6¶Õ;–í¦oí“Ò>ÆÜ4[/ ´KûZä¶·]£Ìž¨ÈAGoçÇ9©ì´¢¬&·VLµLé›tŒ´¤š^g–c»˜÷£uÍÔè ÕJ$¨‹¥Á–Ñšº©3pת\éªÒ·™e 8=©Ô/”Vxa¥å ÄLÊŽÀÒ/«Nta›ü…Ú]Ü(h‡õ í­`À*}"ê­å†pXØÍâ|4o¡ÚMÂzPÉVëö· 8ÓÓ[¯Œõ†¡GíŽ2šL)DR )ðIAû‹©ÜÂ"’Ó±ÝTmϺԫ´Ô&ÐCŠ|vŠ ¨Ð%u¥Í/fÚ!r4ü¥¢)3Mµ¼T$l|x2fäîv)|NÐ$}2‰, ¶@jq[§PÃ1¼¸Ø‡µ]§5UšòÀ~BˆØesœ»Õ$¸%Z¼…dP.¦v¢XYö熀q&ž°q‚`WcÙ @Áb(IëuQšF[l€j0O¥)°Ç,:F7ÃPvÚòL}ý¥ÓƒN©çù§Rì¾#aæèB0©„1Ì\Ùh ÛˆûÆàí" ZJM’‰o`ãE3'DŨ0!œ™l¡ªÒ-Vdv÷î}ä ,€‚^+þ‘gši+ÕÚj˜â˜°[1&¯› =±£kMFnÏ'”Ñ/8Á£þží¾ãyL9x"ÆVÕ¬(ÜF~ÂQÄ»É(ÌÙÀÂtìßtX>¢8û²0‡<3AAυʨ;ÞŽ§Ë”Q #(^µÎÆìBÃ{G.lRBz‹´©…@Ey÷e‘ˆ¨0õ%”F’Œ,׋ЈY‘ý‘}[zze&é¦ôhUjW-ÁLsm‘»àáÞp[tùßj»÷!Y¶–%ný)»7ï±Fbej*Û·å'‚©ð|žȧW+µ€êGe˜ã®Û^Kl¦ë)±:²ê‘* ÄÛ»ƒÅð½›rÒÜJøî"­Óãv¯l¥O›c­˜´;æó¦ˆh1‰V.Uj%˜£¦¤ª‚“à/Š=‡*tسÿ-vÿ(µ æÅöñóDÀˆ‡Â´ éÝ­„Œœ“À÷˜ ^øŠÝ»¢â<ð8&¸çs6üÙQt~vô!½8 í¿ŽÏï ¸ð½À—“‰'™½Q5¨ß&ÁýAk }÷Ôž†®¾ØV ^‡Öízž&Š…òž/T`Ù$|ÃB·2B n¡û¼—D0`àÿ™ 4xÀ£„kÆ#BDxppÝEg}Mž»-Œ=tØ0L¢>°Ü|3™$„( LÈpá…íÏ2Û¯ü-P3KÈ1{B½¤íZ/ —ù\¯ÛL{\Ú+Ä^޽öŽÅ äNš–Õ«-ñ,¦i Ù^!µƒŒïFÔ÷e ª=å?û¨p/ñƒ·ü>ý?ñú!g endstream endobj 524 0 obj << /Length 1362 /Filter /FlateDecode >> stream xÚ­X[s›:~÷¯àÑž©]—Ç4IsÜéqzb÷©íxȶÎpq¹4Í¿¯@ ¹<öjõiµß·+Acg@ãvòq=¹ød»† \ [ÆzkP X.1lW˜®cß>5L-•e«Õæj³X^ß|Z,ë…'ѹ;P°,Y½©¼zŽV3|ïÍ0ØD$YkdäýáQéFXñH˜jº™“&¶G9¦¶åhœÓÈ¥cœ`ÔDrŽR²ÊGÕ€e\ìÖ&bþ>;O+jCÐ?ùhVYTh‹ÐŠ#«V,o2âîáæ«ß×YƒfšÄhN©aËc, Ÿx¼Ó¥~ÖÒ2^̳h€’‘§<¨Ü-2¥¤Öòns·¸Þ¬nÖ£½9(ó—4¯Þ=-ÝytY$˜ç•™g%Û@ˆ}qÀ¶3! ^æ=zñÆw(Tz01z…Æ8¤Ð'c)dŠ]Vµ£8oŠÌÛ±ó‹ˆ:ýD&¦ˆö…¨ˆ¦èD¡]–mN(6ù3Êœ+E2)?Þ•…lý´Ÿë ¯Ú¥GŸªš‘Œ ]O›IÌc.\åjd¢þõ|Ÿ´,krSTJYÿäYÕʶ¸œ!„¦u!›ëˆßYÚ#C…,O«ÔLÔ¥gseGܺbÞXEU˜%îËr3®®n¾j%b.=¿+høB>«¯ÈòŽ^˜ØóºoÓ‹1Nõb„“±zAláÊTi—ù¡È%aE© ÂÝ Šìw©¼&r€í¸ÙàÁQ3¢$â9ÕX×ZÊò"ët:5|ú~¯\£Êô{–%Eê3mgèeYâ—$ êÔÎ÷uæYc,íT<åRŠºGÕÓ!e!óŽ”xxjõ¢Þár¿*¥:ñð¶y-n‚Wm¼ž ŒWsSvÒjÓ!_îo'mTå¦(dÕæ”UoÇñ´$ìzhøò¤é°°tAú] ³pŒ“AŽp2–…Ø"€ØXퟟ‹ÃïPã‹!pàÊpC{€Lçů¤äÌ¢Ó‘ýï‘¥Ù³ tMg«ÕÝÖõøqÏýý‰#xÇ•‹Î‰3ORÕuÔCö¶Êhˆfz~\_ƒêj¨"·fh/ÕåMrk|¼7Õ¡Áb9½lo¯óÕ¬Ëo_¾¨½PÙ'¹.îåé½<óõÈ˳¾# ÈuƒÞØöq2( #œŒDÄÙÕ$Ë(ÿ¼x8‚÷ƒÝr¥Ã=?rQ¥×—QϵbÔ•Ôe%ƒ*az®§4CÏÉÅ uýó-ìø»¬Å¶5cóô«Ëü aÙ‰ryÅá¤êCv¸žv=ÔZ»íÜp}hÁP8 Öw>iÞ²UË×éT+–­[¼íuwÛÖJGÐþåùZ+Tç&ØÄÀ…æk.‚ÿCÑ£à endstream endobj 528 0 obj << /Length 1955 /Filter /FlateDecode >> stream xÚÅZ[sœ¸~÷¯àq|*VtA€Î>%Ž×Ç[ëˉg·öT’¢0£SØË&þ÷ÛB03Æ (Ô>@ju÷×êþšlm,l]ž¼_ž¼ýÙ–@Â¡Žµ\[ÜAŽ`–+àêk¹²>-.o~;=£/.e"³(Ôƒ{–YT¼4£ìÏ(”zðs|y¢¼»»Ò7åZf2i&^Iħ_–¿¼ýÙÖj8L©a{yÄ%+ †ù®·x«/.UKN.–'Ï'æ`‹ì‡…Œ[áÓɧ/ØZÁ»_,ŒláY_«™O'QæÀ}lÝŸü÷:Ã#Z429AÂÖš|”E™%¹Vî=‡­3J¥Óîïý{ÿüöúî׋兞ßò´Çã9…ÿ®ÝX†¡Ìóuëq˜>mcYDi‚z¶<«eœ Æ7~ÿîƒ}qþŸ¡ÿ–§/þ<¥|Dqð×=Éð1H¢üI3ù\ʼ« úܼ»¾Xþï®Ï»ˆ‹®RËS/^¶²ñERQ"Wzø5*£D߯derå'ÁS=ydp_ÈL£\_“´Ð7y¹Ý¦Ù1;u´!´Ï¡Žýý”²âRî7Ž£Æˆuš´ ŠãÝÒ§Ñ0œ¼øpq³¼z÷ë½ñÇÝ ûа²í.  §LŠ(ˆó˜2^uüûPOÂçR¦Gïe”yýª„/êòXÇ<©ßWo¿mÕê~´–=VÞÜV†öXæºÈÅ¢cÙMzݯ«g—I²¢qH¾•aôcÚ˜©@¬Un哳zû3Fçj6yîg2–A.ýP; 2œÊ UúTy#ÁUŽR—ËNÖc ж¸ 설§sâ Jl‹"á +“Öú ˵…õ?ý^¾‡!«’f-˜¨Ù¦òu†íÈo2ôe9HPñ”­fKß|¬KD_¥}P¸g#B„†òöÚ/£¤`º:õïÑ‹ž# è|ÞmË7ô®±²#¼ë2Dœ#çäÐÇÖ§3kÞQ?ïîq‹pŒæBA`›Þì_ǤpÄ<ë`âS”¤™ŸAQæo†^†6ümù†ð+;~žáLm „ “}(àýhåm_» ÅIV"ᬀðtT ø§Á rðm’‚;ףܜ3Ž0® ÞU¢xÔ+FUýÎ*ª­ÅcP¨;W*õ¨U¨Ôƒ}ÅÓãÚÕ}”ëÕIªÇqšlQ÷ŠꪮF/}EqÂ@ÑÖ7ð„±EÔs×™”µ¶Až§a˜Læi™ý­J§âÓx7çÚÐýhk1£\ÖÜ£¨ë¹"ç ЬG¿H“†‹cÛõ¼uSé›= Žû*;®kz«w§ ¨OÃ߀Æä},‹ Æ!ïØAÀÉ'­X£Ô†ólˆèºM;hr°s<Ç©{œïƒ‰2èŠ0·l8c­ƒJ WIQ1/¶!‹é6 ]Eë—†’tÁ¹n7 »8«[Ž=»…uVÓ•fJmC™ ®þ=Þн ° »¬A=öšS·w aÛá6u ©®ãõaÀS õB(ikò=lއ4æ(·?õF cPµí×ý(8rlò÷C] !u‘Ýt×®Ó¶¨Æ¨,úÖÝuƒ«t×€AW¼yåLM …¾ï"ó¡L³!F€‘‹â»(ЉAkx>®×U:îºÕþÖª8m”D…ŸËÐWŸ7tË[Lê©¢„Îת\‚¹=OíÈ7ã©æÊoS(dDf³&†°àóy·-ßлÆÊŽð.2óè±ó­øq K‰9ÿ\'H1( Ìmù†1`¬l%®v*9Ò Bkœƒbà”5E3ÉÛ ÷\…Áñžñè]Д–¯t†C%‚ ⺳Ú‘o¨¹²CZ{ (@¬~ÐÙßz{Š%ÕtžGw$*7˜âçC‰7~mù†ø+;ü@`X;“¤ú:>ô4A¶‘…þUd*†D”‹ù0lË7ÄÐXÙB¹ã¶; ÃÛ«Ã&«ŸýBý†7>î¡ù¾¶¤Bg¨èˆäé@žó¼Wùæ1<2ùì¯ã`3™£[“ÝÙiË7ÄÄXÙ¨¨ß¨˜„JAJh&ƒÂ4Gž ”¶|CPŒ•‘ã˜@δ§¾h&2ö¢d%›|8Ü–Eµz·t2¬TÓÞÙ`mË7„ÕXÙ°R¹„LÂõ¡\¯e6Í"ý¿L&£H4× Å¶|C•‘1‰‹\~ÐÙwY…e3„kþ?º!¢ bßœ€`Mugƒ¯-ß>ceGÀ‡ä ¶‡oÜÉJËÂøh Í`炦-Þ cU‡#8ò˜ý©ü'&¬ 2# éiú:jmñf¨«:5ÏFžë Emäçš`†&qp=Ä…øÿpø9„a{Êwÿ£Püý endstream endobj 473 0 obj << /Type /ObjStm /N 100 /First 875 /Length 1389 /Filter /FlateDecode >> stream xÚÅXMo7 ½Ï¯Ð±=X#R¤>#@>à¶@ Im Üõ 0jì»kÀý÷}Ü$†kÏÄlê"[+=QO) µR¢AÿJh-P£@™ñ³ªÿ[`NèçÀ%ãw9aFM!KG¹çA*Éý˜ "5(NC!Ì«5TRà%Ô‚Uk -aÙÚC¬‘shÝæ¦ÐsÌFG›³J PÁŠD:æHÁ6‰Œ6ô06ù Ñ ŒF¶ý4ì'W$I¨£»•bC؆¦‚YèQ…Ž kÇ¢j”lô€)  àH•±h XL’A0šbÑ=¡`z¨ÐA£ƒ‚ô8e†Sµ!X'ãÓ;&q“úAg殃&[jjÂL…ÔŠa®˜Å’Ñ(‚Øiø£ ½MmuØiXY Ó;h*az‡Z,^ä6(tÌ >Sø(CM4 íhhÈœl`›¡TÑèf§…œáƒœáJe ˜ RÀvleeXÖnİVek §!’° b¦$[”¡a†2aŒ3I:k†c2tÖl¡Õü*ÆÁ#†ŒHó§‚œX·"HD|š-˜É†ª» 5 cê§4¨X`Â{ Ç!΋DœBgø`;+Ý\ €¼I“ŒÅ<ЀŽèfS­õáøx_…SpÉ{Æ_û=h‰AĽFì=¬¯¯®Î†gϾŒ¥Ø¡Ž+±Á½.lα'§]nQàeŸ]ŠÙ¥š¢øEbGú°5Ú¡paS‰­{±燕˜ï;ød³Þ‡ãã0ž ÖsNïÚç&2}j#¯èG&¯·›ÕÛiNÃøúÕIßM7ûpk÷Ý_& œ¿Ÿ†ñ%Ö˜ÖûbºØôa|3í6×ÛÕ´;$™C×/ÓÅåù‹ÍM8µb ]#Ò R2A‹3¬v¾… à|€ßÙ)r×íN¨`‹5´Úb±y Ë]ð'YªX,“›K¯ÝÜcææÂðµZàÃrDerb56vbÉÂÙ‰M:ˆÓ.C‡ìªZ8ûì"ïAvbtðù:°ËÐÁ U¤ Ÿ‹…2ø Ô¢•ŸY&òasIÈÄN¬j´[Û ƒÏËi»P‘f± i»T‘æ°KiÖî|Eš.T¤9äREšÅ.T¤9ìREšÅ.T¤Yì·®HvݾW‘ìÂøi|¾^o`ñ4Ø-Ù(Ù%ÙþßcpÀ ãÛë?ö‡ß?_®ÿÆ›íÅ´=¬”ÎÆÇŸÆ—§tøaÜVØ^1Ëá¢Q[첛ݑ_‹dàžd{Æ6ï6¢÷~·;º\_îvÓêhe›¾ÙoZ= #A¶îJ·Œy ¤Ç¯VÓ‡ENˆ{pÜ©éy~©¦ÿüHMŸÅfÔ‘™$>EÉ>l©%VêNlŠUȉͱd'ÚéLÆŸÅ&*N¨%:ßÖÔ’¸¶íièÂâf£Ê>,Ò¢vŸ×TM]Ÿ x”Eܰ|Xäû:“g±8éUÛ·L‹,Ò"žÆÿ1-ò§´˜Ÿ2-2ã*šì;@ŠjȾi*‹9h;]Mç»éhµ.ž.#~&øÀeµ5’}¹BŽam²Ù\^ ->H‡œOœ/ÉWC{ å߃J¿÷j³ï+þ |›V”-N,Gj͉՘jõa›D"'_dmòÑeI1©‚–Ì¥ÌY,®Þ>$W\5œV-û°É >„Kº}va[Žv“sañ|Vñ©KåÓ8¤)öåŽÂáƒâMQ&d›ª>WØ•¾vŸ+p$Úý’ø”£¿=þg endstream endobj 552 0 obj << /Length 2648 /Filter /FlateDecode >> stream xÚí]o7òÝ¿B} V@¬ì·Vô€´‘‰“Ú2îI!Ð+Êb³ÚUw¹vÕ ÿýf8Ãýò:)îå—¼hÉáp8Î9r'·wr~òÃêäÙÙ|1Y̱OVÛIÏâE0™/à;÷&«Íä½s~q==õ#×9—¹,UJ+™Ö¥ÒGÛ+ïT*©óÁÜó«+øxxñî5.åV–2·ˆoD^‹lúËê§gg‰;I€8@6ÂÄŸ%^L<¤3Oœgô™û8åd¹:ùíÄwⵌÃÄ š¤û“÷¿¸“ Œý4qgá"™ÜÌý$òÜ™ÄÐÎ&W'?Ÿ¸, ÷‹B‰¼Ù"$Ž^åJ+¡e%‘£w’²Òâ&SÕn/s Ð)¶4$èSµrƒ^ZäZN½Èù]àFê{)sšÚ‡C¦R¡U‘3 ßô¨–r_hF>HYN£È™MOC/dV³ì8#ç) ,¡£òC­×ºø8õ\G2ñƒ(Å^j b™œz°ñ(¢W»¢Î`ñ ž³øMœê SõÁu}ÉRÁ % ŠŠ` ë×o×?àZ×ggË˧„Q”„A˜ î »‡BåÚRÑãP÷¶ªÖ7SßuêíÔЪõFV)á7¿ÊTâý®¨$3™ßê ³vxBåÕØv¤‚yìÜá:"«¹û‡, pœÌ•E)‹Z«œ;{qd¨Ôu™S¹ŸGà ÄŽƒ÷;•î¨ÙÚ7LP—"¯`£¥ä#üÒú|ð´N«/ ãÐq0¼~Lø#{îk[´pîU–QëPÊŠ4:Š¿È~ñPDšÊƒ^ƒ–¯;º ’ ‚¹ójKˆ¹™€‡Úê‚%n [7’¾¸ªlìâ Tyê9CêC&U¾Aö™†Þ©Š©-U çtÛÛzÜ9ndc•Ź6ʂƜ­ àÁaâQN=PÓšý—ßjN€š3M\‡Ái±?dÒ0=Zêým çaP6‰ï¹å¥¤éû¢dH)ÙÑ2ÀVŒ$x¤=¢¥ü­VFÙg[ûk¤n~_Ýž#G‰£XJUÁ,Úã9;T}:»yÔX‹OÖbhh¡kæ™MO¯ U øOüzV’ŠJâ¶ÂàsÛDkÆ8ݨ´™œeF¨Ð·SÐÅ €‰æ§]AÞ.ßÑ/±¼”2• ]Ó.,y1sZy3Œ¼|vÐê» 3&ªŠ f†ea]³uÙüÝÏÉFï”P|{Ìâ{ªç^'/€íî œ.mçÝ4tI笸A:ú6ˆpmaTYD­O…QãSF*]Ö©–<`|* ÔÓ!g àÓ8j€5dÁ›Ç¥Xc»7¸©=…Ãasˆ\˜ N¨¸Äȱ¡c¬(÷!/’:Á—½ñ{ñëõ {žY"xÜË"å' |fšy‘|;îÕt#çÉ@Œ¥9I½ÎÁ0r- ë½LwOÇ4Ö"Tt/¨L°VD Iîcv~kñâdè‘j¸/ðª4 ¾LÔb–·`\j‚ÕƒÕÈø³^^^¢F¿½D€•:Înï7ŸY”pjeY”]dö«Vþveý9ª<½Ý£†l5 1¾ûž¾.ñ‚ÍOô¿°igAk.Œ¢eÇ#»(e&!¾ ²ë äúÎ!ZüO¦×ÝÈ—E9rŸ2A¥çz¢?ܬ†Q6øš/[â™ín$&]_´Ð’1Y¸cךFµ ê—R||>¶µÁÑG½ñºcáyÒ:£™Êˆ&ö²‚Ž"`fШÂÀ̺ŠI™U²Gø¯xÙ¾rå<þÁÿo#xô-‚ÿoFðø¿Á£oükàñ×Á-Îç\ü?v¢f³ó¤ksuÞMc…+êB9<© ̆€Ð„ ò4«7²ê{o¶€5*ù§ƒ9½àfh3Õ¼ÐÔØÖø˜>¢ÄI¯ôÝ7m‘eruß¼°”0­T)ç9öIæØ[iÉßJL˜m*FüÁ,ô¹€óÁ÷£>ÂûÓÈuùá:™÷ä]:“Pá >Ü`C[tt¾àeRêµÕè&$.×ùFâÃiC§Î3YUR"ÅwO‘£ÀF$ÌÀæâ¶Y£ó`ß'f÷’Y'ýP@6þŽœþ¬Ö—Ë/1ø×úìõ £*¸¡}>&nÜFÍ uÀ§žîa#âVÐF(êѳ¿Q‚êrkd`H3pC"7•0૲`šu +Ð4êóã0>cŽ•dŒMEöXÁ¢w¨AÒ=T4‡,,:$mmd^CFÉDº‚‡®ÿ\Q³¾ U6 ÚZ6@[Ë†Ž kÙi,û!ïÅös¶oÞ½^®–³¾†ŸZ%XÌÜEòì£\³lEý‚£Ÿ¶¤F/—¯—ç]­i‡Þ\¯®úâõøøåò€!Oè«]‹pµüÙD¡åÅËÆP­£®ZƒG;ë+±­¶½‚xÙrJ#tßiP^\¼½`€mî)k=k-ΪÛ7TèòUcäð؄ͷôüÞЙ^Eíí;?Õ§Fþú SÍóîQ†|Y„.Ùb`É+«-}û.éõ«¸†"•Ï“‚¾ÆF嫬qlªh•Ö$Ý P<  ;žž²O÷†õ6×Ù‰ŠF°Ì4ñ„ U[l÷ ¾¤ØI˜ánLqÁõèvi‚RAîv_Ô> stream xÚÅYYsÛÈ~ׯ@íKÀª% €ø±(EYÒJT*[ö †ä¤ppqHq~}º§{@ceã_8WÏLw} h;Ã6.Ïþ¼>{w±Ð }×7Ö[Ãó-?œ‹Ú…c¬ã“yyó8™ºžm^Š\”2¦Áƒˆ›RÖ_ô¨|–± ÁgÛ³/ qhbywE{±¥È5áÇ(o¢tòëú§wmÀ†?C6ækNL*èùŽš…‹[ÎVë³ßΠ± çÈ8lœyFœ}úÕ6Xûɰ­y/Š23<ǶܙýÔx8ûùÌfeØ_UŠçXáœ8ú캞bBï2>M=Û6×{mšÏ×3£´‹-µµ&m>lîî'sۼşõæ~µ<ŸxžùËæâz‰S—DåIwÏú~yó0 y’5_ô"ë½Ì±˜¥¨7Ÿm{íx±ÚMʇÉ<‘qT‹_Q\3&€ÇÜŒ©b{É]Õ´À‹jji'vdƽ]Umd.ëM%âM\ä°ÅñÌòàª)óêG½ìœPÒ à6/†‡¿:EVÔn›4e#ÀÝS*«½H¬>8S- €êzÿBPòTìÌqL™R‘‰Ä–E^Ñd½GÙ±W5‡CQòàR¸¶9ÍDUE;Á“eQ‹7Ó8*Õ0›ÇES]‡|¤¨õ-|Ä-E±›¿Î'iI‘ œÓvsX úB€ ò„#ä Ûˆš8JS…”:Ƴ¥%,¸7X ˆ9“Æq‘¢\ê3ž¾ôÎ@a@œÛw׫õŠæÐ¨f .C˜)Ð^þ>#üp?ˆ‹¶¸ft8¤hà ÜX«6wgÁ&R({bâ:èFÌ<‰}„>Ke‰0ñ é:¤.ê¿LHMÑ^€€Ž•àtåŒ0ý·‰‰²’Ï8ÌÆvp[ E£«¼ªE” Èî¼/²Zï ™ˆZ”™ÌŘ6^”Ùº¾ûÚR] O…ðŠH”ªŽÒ‡Šf2÷bêh[+SPª©švWàDÑ÷X hÝý‰·‚µ”‰Ìw´EÙL“& C¦u³^]vÞ1qDFÚðáöæ¢KïÙxü?„†ešrœ:†,޼ÉtäíÆ­¾‡aØ,'`»†•3-€xoSQ@TPû/Q––Øõ¬Ðž¯Wh=®¶è`à•ÊÁa€.K=°2”ˆòe¹3¨s¯dÃõS1]eò>pÏVÙ¿LU,Ÿ¹tØœRü\70+jaaHƒ\–‚Ò ô#žêYòÿôˆ£ê"‡3¢Û1~è§‚mÃÄ@)-ücF£|‹©çÝË7{¸K=pˆÊ(dø@F áÆ‚Z²¾›[4Àõêïëþj'áÂYt0ÈÙxøàþN¸SF#ÍcDÖ|Sò–"ï¬{àŒO•ø­áíse*‚P¦ï*D?Ó¡“y”c}ãE&ëZE4˜&7õ Ú¤B‰$첞ùÃ>J·Ó'D¢‘iýÍVÇjÑ÷‡¡Á£l’ÓâË^Æ{šŽ£ŠO•5-¶x«3y7ßíãæwqA_%^Ûyý´DÒÔ4 ¼lC-±š-UG¢^îÀTŸÚÁ7 ´s˜ÓQŽz »š¼.šx¯ïÚê+Úý¼Ð¿”A•ÞT|¹h#â‘à´±ÇYXáŒcÏ9°L±;bôÃ=ÚÞb¦‘¤"dŠ]ª`ª­ ÏAzT/Ü^ŸoÖ7oÿºº¡ -ÅùãÝõÕ‡¥Ê±ëÕ¸u½5+ÕŠ tY”Tœê8ã¹Ç¢g3ƒuÉ*«h| à°#Åã¨0øÂëTTQ4QOòLTUE,µ×Áæº5âýEScN?òG]<‡5p1YÌÍåÕõãýÊ¢ù5Ö5#—d)8…™v‘dDCßLdB³§C4ZÄWV“£ú„ö¨èlÀXAÙq«~°"Ý~K½._Ý7|[ª¦sx‘ùŒò[t¿º»^þòýt¿Êù!¤D:¤ÑmKí[_}šÐŸ3øÅ†ÎŸDr|63ðKúßBpv¯ˆLÆ DPÞe‡Á£ƒäéÊ©™Ö½²‡ÕÏ«›«“ 93Ë[ÌOƒÆëß´P›)äÙi±Rå¬?RàêIþ°åó¿†D¿’ÇàBË÷O£ÁËß> stream xÚÅXßs¢H~÷¯àí´j!€€7/!V¶²ÆUòp•lY wî0$·÷×_Ï/#nâ¹—'`¦Çùúûzº{4µ•fj£ÎïQçìjhx¶§EKÍõ /èkƒžK‹Ú}w4¾ëé¶kvG8Ã$‰ÅÇ Ç%IèõEž“‹Ó5G³<,10œ\‹—)^b‚3eøe%J{ߢÏgW¾©ùÃë3Žo¾åHŽÀêƒýÀÇÀfK:aÔùÞ±ÀÆÔ¬-pXØwµxݹÿfj ˜û¬™†øÚ ·\k®ev߃÷T›u¾vÌ:³‡ ×2`\p1›Í/æÃñíx~u3 è ýÀð '7Ã?>Žv‚7)’ *_J 8W­qQ V¡–¤2÷=V!'¬O)€€õ3•{¡´ÐïÕ韅_ïÂñEØ*€Õ7ÜA{•QóÇg¼¤z¾Ô ü½ÜÖëÓ*pT®Ù‹ë¤B4ÎÁÅíøê•þ˜3p‘g¦iË”ZÕë¢Þj­Õ!y¬ ~Ï1Y¥ªþêYfW‰õ( c(¸I¶«¢˜¿´‘Ñ ä&þïÆ>x–( ðïñÅ«û≶ñ9Ab¡B&›H˜FÌ'Q“=¦€Sï;VݯßãÁÊ =C·#~RF‰˜…àA›¢LMòìëwˆ"='É H[ò<ªóÎÄ7Ïg'Ë\"<ÁÂr™t3•j3*jÙÕLhžÕZžÝ.Dîó:'\£kB®[}:Iâˆ&Û˜\AO·V7œÖâ”é}°¾”ƒrŠ2Û™oÌóy‘ˆÞqGxÝbÙ¬Ú,„…ÇÊ¢J¦ÜD˜EüÂÂìwÏt[X*K*~ë¡—¯72œ«œ·Fª¥Ì¥²Pg‚–DGuamÆy=[2wÀ¡Û/“›0 ›1¥æÆÑõø.œÃð2¼4vóˆté½%~ J¼ßÔ†kÚÂl¥-›ih \[0L1 ¥- rmaLNú-Ú‚…Ð^h ë…¶Ìþ­ÚòBýÿhÚÔñ}A4ŽgÕÔ.ÈÐNQ”QU#ëÿBÿ'ªèß´¥a eŲ›Áóm°CKU¨>J4‹LŒmKQ­eøÅŸƒd¥‰—)÷DµÎ&'tXç5„,fyØ49ø5eã'<%»…WñTõ»Y¨H¨÷×¹ÝS^¦‹&õ¦MÊÿÁ$o:»ï¿VÇ6Ó9æ¯Ö8º¶h endstream endobj 569 0 obj << /Length 243 /Filter /FlateDecode >> stream xÚ?OÃ0ÅwŠçü7öH%Q Tˆ;•QêV‘šH˜Ä·ÇщéÝ»{wú鎀P“…'å²rà˜3€?€6Ì8 •KZqð{ØÒúySÜ ´cˆ}—MºKìÏß³‹Ÿ}²yCuÓ$á¹q¿~ÌÅk8„Æ9øÔŽ—öTìüª\Z›0Œ¼b(+˜å6AN\¥|ei™¥×òàÉ;á)ƒÀÁÓ¢ÔÐ d»Cا٠)gákJ 92!MªOЂ·Ï°ü†b¾©9s*“¬ ‰´íÎ!\Ó e¾ñ’Ì¡úÑ”u` endstream endobj 573 0 obj << /Length 1490 /Filter /FlateDecode >> stream xÚ­X]oÛ6}÷¯Ðc 4ŒH‰úÀžº&ÍR¬É–xÀ€¶0d‰¶¹éÃÕGSÿû]š¢%K´¤${²,‘‡——çÒ46†iÜÎ~]Ì®>º¾á#ß!ޱXÔAŽo®¿.6‘ñåâöþ¯ù%¡æÅ-KYÎCù牅UÎ˽ú—ÿà!“¾šÔ¼}z‚,_¼ÿãN><²5ËYª~Ò*ˆçߟ®>z¦áAŽ%°=‚<ìA‡0…ö®wq%\"ºÌn³ï3 mL7CG‹a2ûòÍ4"øöÉ0‘í{Æó¡ebPl"b9ðO³?gæÙd82©áÚQxˆ$ái–/‹2(«¢!6"Ä3\â Ór»QX­(LâÈsœ:ˆþàÄ‚°ÅðÔBÔ²åð"³<-ÙÓ‹ Ëç¶yñN¦2É"¾ÞRaü%ÆÈ§TöûÌÂmò"‘‹ ùWÓ$õZ6óév ³ˆ¡þD-ÖÊw^1ÑÃ!ÈtaÅ|¶¼! M-jWì4á6q'@S×ñ4 –í#ìÓ) ŸFrŽ3Žã#ÏödyÊK”À›0gÑ"ŠÙyò8ØC¶‡sŠMQßgvÓ°gS2 -Ëš;9 ¢wºÕÏv%ÏÒ n*ù7üáyå'œš2€ÎR˜q\Èvað„Eh~iaPŠj·‹÷ºÑ@2––÷Ë7×7÷‹»÷¿ëš•™„ ²~¨Ç äOÄÖs'¨âúû1ÿ:´]ÎÓïn-;¥YMÓ½Á–Cª—¨®”Eu†Ë-Ó¥j]¥¡È°lôÌãX-HYåé¹=© æ+HÔ«LAlò¶Êœ2Z™@¦V&µmda_©[­¥?ËѲ´]ù8œQÛB¶CFËÒ=ÈtI§,˟ݪ¼–õMü²Ï¶Sž’ÊlNèų^Þ/(χûÅÍß -¡Õ˜‚þyQGqü‹|¬Š:º"¦ ®˜n(Éɦ«ýLUÞçfÆÁ]4å%zH×ö‘Y•‡LéHQd!µÿ™—[­mU¹·ÒxÙ^‚¤Rá®ÎÌ3fAѧ ,å4ÉÖ%Ë;i=ÄÚVÃ&O ›‚Ü’×ùÆ·³nT‚‹DV²eÁÂekr‚©Š‹Gß=„èeÓ"ácŒ ÑQ!š2UˆlÇDŽeÕT ò9öÀÒ•Ë4H†Tˆbd:Þp:‰…|<ªA¶–ŸJüD€šÿ¾Ž«çê ³™Â^~Ÿ Ô7ùV.LçÂ8Èd.`qÜ©·ƒ¼ú²ÜïX`¹>²Æl·‹‘kM MÛ°àáîúÄO| †«˜rcw×uŸµ²BG¨°DJ¦ï= ^¹ÀlUú ¨uŸ'»˜%àH[{Aë¤éÙò|\~ù"ôÈ, ð[Ï>S@FÉ<d*™‰ïÃùÚS;Ü÷%äÙ 6Çe"*žŒl”"x,ׄw­ÏŠ——IPü«5a €>Ú£¯t(9ϪBˆíX*7GC"&öNÇm„ÛÓBxÞrõ ²R±¢,Ô~”zÁzö¢¦/J–«ã®oï„ß¾Ÿ‘嬵BOûd•ÅêŽGlÊåL|ÊD`?x¤\ÌÑ6yªìÑàd MºSf–ç¬ØeiÄÓÍ©$t[G³õ½:(Q{íê1·YGCN-Î6\X©ýåã‚(3Øì¶Ê‚I{ÕíÙH:®N²ãƒõËÁT'gÒÅŸ&ùˆZÏg@¯^^e=½.ÁoÓ«) £z5dª^a"Ç©/ØJ˜r^¬0%{þÿ²÷L¥­càönoÊN\—Åu½ÛÊâ©’•¢§R!pôP3Å®ö”ª/=²T´õ•ˆ¸ÍjÞ¹ô9|3‡ê¥VÆá #º¸~Ö‰ÕŽJáåkØ+ NÖ£ €1ZãÝ:Pç¶ÞÝ9Aß´_suþKºÍ± endstream endobj 577 0 obj << /Length 1454 /Filter /FlateDecode >> stream xÚ­XM“Ú8½ó+|„ªàØòwíi’ÌÌN*!ÙÀ¶&)Jc¨blbË3ËþúmY’?@ØÌdOØXj½nõ{Ý’el ˸½[ŒÞÞ‘™‘|c±6<ßô#Ç"ø lc±2Æ·³ûÉyÖø–¤$§±x™“¸Ì);¨·ü‰ÆD¼|·<ëv>‡[üqõõN<|#k’“T üŒÓ'“‹ooBˆïpnˆÌÐd…Àöa|ŽßŠŸñ)£ëÅè×Ȇ1–a7Àa¢ãñnôðÃ2Vðí£a™nÏÕÈáÙ–‰žc>úkd †š–g€Y3ðB„¦û’-ã-N—4]ÑtSœbAÈ5 ß±L'òÁ8-00ܱMÏ $˜SŒ¸#ðÓs\ƒG˜ƒHI""©À¼¯9Á«7,0µm3ò<11Û3š¥8©öFóýj¿OhŒù i±'1ýnYˆ¬tCÕ’ædêØ°ÇI’M7~.:ƒ}17vB–‰ß‚§Iºµ:¾ÒIYLÔL é:ËwšõØ–´æù«[.K™ØÞø&½›óX¬µƒ!Ó—ï—³/Ë÷^Ífן–ïîfîf·s-®µX]»yâ çaš1](Ë‚¬ÌÓ¤s\ $Û+’®1â#Ó œÊ†}6lêxnÍ¢nö»(¸È üPcÄq#˜ì]bÙ]$çxìÀJð¹Åc–ýœÀæ’ô<‡=„Ì ŠÂi¦ sØc ?N5.ל7 Œ×Kg{ü«$/bs5t1 a²òJÎŽ å+<ñŒÖsyg;1zO‡ÈƲ¦nμ„ýŒxÇqÜßÜ\Sn)ÛºÄÞgh—wùŠ%Eº:ÃYLSàÑÑŸø$œ”ä<ÔëÏ_·Ðjc-à K0Š%scœ$=\|Eòœp‘Ûð‰Ã&y8hâRº¾eúŽ#«BÌ þ/w$Þ.ÙaOÎÓе¹á@$íÈô<4HCφ¸8vCÃ/wd‚î²—yßkˆ8P0+ädÂe’JµP'úB¥&¬«8ÊÊ<nŠŒ¥Xå0-t‹îqŽw¤æÊ3MT%!Ö(FiLÔõ—ÃcõœåxCÔژɿ·Y™è[5Š)ô¸hTkš¥Éáñ~—žqÖ/œѶÝ1hæIPSäŠBY=`ÆÈn/_*áwnҵǔi·CÕöjÙÙý§O’èk}–rò«¤yo)~EҞП۰úm À%F%à#—Š€ãÚ¦Jf%»°£Ð&ßÿDÀ‰\3„//¬ÅB Ω¦ü*¢=Ö}gʺ_ª’«1Ö)ÀUz·>"IBÒ Ûê&W}{")™ÏëêMOq•¡’Óÿ’<{£h¡¼è¸›’Úª¶àžº_ƒzAëÑ*\YLýy¦‘^ù<òWìkY°îFqÝP®¨ý%!­km†"p kÛ¬4â ’?ßâáÛíÈx¨¾oŠb '&‚ ²ìz³Xef}¬Û=õ JH·áþîiá#ƒu‘K%Ê"Ó}¥õl „rpßi?]ñÄñŠà„ƒâ„Ït:ʦ;\ü|m›ò^tÇE»%ÎiVúÃóŠìIºª©*}—kok]ÑLÞR5€l¤8î)Î0©uð–j ‡Œ,gE§­©/&b½Â´®¢D\zñr‡õe_je«ÐŸ(Ña÷˜%ªJ¡+kâuíNžq÷žèJiËZ‰š°ŠpËhcýHs¡A lž“bŸU7 §ÜÓàtR Óêd^Æ3É6”KÚaz5û Sæ3K6<;:»u“‚é3€å¼“,›ÖÙ7m'…Ünm´dÚéô_œûÚDº´ DEGÞŠmvmIºÛ#Ñ/×%ý'·£.2#Ë}ÍåèÙ xG endstream endobj 582 0 obj << /Length 2210 /Filter /FlateDecode >> stream xÚ½ZÝs£8Ï_Á£½5Ñ tû”I<9ï%Nnâ¹Ú­Ù-ŠØrL-Æ^>&“û믅Œ³¶)ßF´ZÝýëO%¶õbÙÖíŧéÅÇÏ®°œpkº°G\PËðt±5[ß·“¯ÃKÂìÁ­ŒeÎôË“œåI˜½•oÉ÷p&õËï6³oŸžàõÂÕãXÿø"2‘qIxÄy ÿ˜þòñ³g[ˆÁ©Ãñò°B`è]oðQ?\¢¶\Œ¦]` ±-¼6RfÍVßþ°­9|ûŲ‘#<ëµ \Y ÛˆP¿#ëéâß¶1Æ–'Èv#SÑæEk¼0RæT¼¶<qC܃˜©Ë½&Ô v‚›’ìBË=d3‹ a—h»fáJú‰œíšS‰OˆgqJë¹ï äX ÆÈÞ“ àlסH¸úhå#ã8“CÌ/2:öàƒvŠÕz.Þ†œ• ëM®ã *ü $…/1F‚1Íj’¯žƒ¦]èg*gëxžê—Å:éÚ÷º gKM‘-GÂ.-ÓL/¼†QÔµ9‘« Œ5Í÷!aƒ çhxI±=/¶\ë[¹Þ®6‘\É8 ”^št¾–FØxu—æ›Í:ÉöH©_6aR°üÐÅ RÑH›Ë.*[ÿÚOnFŸÇ“ñtô¾ž ËDfyËRÿ§œ)‹o“¯wwVXlõ5LþÊÃD1ÙñFê@jüdoôp-·˜LÁmŽÏó¥P Õ™H85ß© P [û€…îïF`‚¾áëEÜãeâú‡ÉŽùl&Ót‘G%~ÊT¨ãÈKÃã»HÐÖÁ“éxòuäOF£›ÑMÇù˜0Ĉ¨ @©Œãy8 2åcÔQŽdúC ÙúÏ!'cý}‘¬Wæƒòµ´‘*ÄŠ-›M¤˜¾«Bõ°d©ŸFWYž,ËåÊ…!Ì)'ƒ .w*é”Ç\–Ê4œî%Mý03bÜ߉„Užš_¥s΂(RB©ßÁË|¿ŒÛ×0«â?0»*K ng(0¡uL TF×ÓñFþôá_£ÉA˜¨“j˜4EÒ0Í L*ÅLÍ–rö§!ÝÈRÚªTªÌ!U„‡ñ&Ïü¦ET/A™kûÜÖÔï(xý¼<ðê®KKƃÝÿ›–3p5H¢a¦ ¯CÁÉC¡Y‡N®‹\» Lµ¬ÈÉQ¨ä5yRýùZýËä8¶­z‹*LÅzËÙ@9xh’yAª)y©>k©ÏKˆŸÈ|›—T'õÆ DˆµÑ‹(3J6‚¬¦ÌÁ°õŽ'ôëã¸Û¤zÇiyÉtYU#ç¼ ²ñŠe0$ª†ø²Uûö¯ìȦŸ®nüOPëÆ“Û§.Im1ÑÈå\QÝ®(ã:­A~Iõ42 ðB¥ÌN±Œ4‹ç¢#~1Ô*cÏå:•úgª*éï¶M {ÀŽïaP-†bëWìtò4â7ªî&H‚dãd^ð²;†zß 54;QÍD*#Ç%©jñóÁøºìMTvóIÍ[-ÅsÕò(wIŒ%;½¤ ‚·~¸»Ù›Ù=8wŽRÿµHSe:\¯~QÙƒz~ËÊt'“¤4ʱøe_k˜fÁs¦KÕqv·Z‰®Ìÿõñn|}5=¦´Qìh PÌv- ¾ý<+°U@ñàYEvžÕ‰XÑ Àë<×M‡Ô¯ªÍ¯}mD‰ æošd“¬UïU4§Ì¦Æ¾u9MX³¯ZÕöÝ߆ô3º½¯Aƒ7úuÚaiÁwð¡Õµª’õÕ!è¶jØeÕh´ä‹r°ÊÖ gljo§‹á;tV©eru?šþö8:,×# ÀU§~祆Y ±#eæÇé Y•õê¨j ßKAeŒå±™ÀªƒÞ6²9sªóº+P•‰;3«RÿÐI¢§æäCÝ¥î°þ~ ÙÁì~týσ„&&¨ÍrFè`%Uá Ó•þ^dÐäßÓ z {€`!È SÄloë³ì‡Îýöj ãÅ©Fi¼É7]ωb!áäl¶ø÷ƒ°¿°;cWü>„6AÌÙÚ:mb×§E$hCÝÞ…{ï" ‹}=ñô<›ü{âÙ[ØÃñÄbGà“ð|Î0; g5'ÊØì<Lä©ãœÌ&ÿž`öö0=ñrø868õ¥UuÁt¬;wS'á &£;®Mþ=qí-ìáuCEä.ÝÖM5üµ«&»â´®'Mfz <9¦;ç³!×äß¹ÞÂó Ó[…ÜÃø¦id5íÑaS£µ_\RœŠ›£Ûò³áÖäß·Þ›ã"·þ×ÈãjÝ:Ϫbw26T7Ëgæɿ'6½…=Ê‘+ÞÓ Š£*‘™¿ˆ‚uŒèùlÈ5ù÷D®·°G GàAݳ!×ø_§S€Ãº>pMþ=ë-ìÀayn}pïå,ÁÞiàÍe$_‚ ø¾3ï©{ÔŸEÓö·IŸ‹ÔÖsP˜ÙÎ)ÿ‰ø?&\»Q endstream endobj 600 0 obj << /Length 2695 /Filter /FlateDecode >> stream xÚí]oÛ8ò=¿Â÷RÈ@âJ²dK[ìÙÖ ²hÓnâܺ A¶i[[YòJr³¹bÿûÍ%J–Ûâî)/&53’óIm6{p}öÓüìåÕ4„£pâNóõÀŸŒ&áx0 ¡:ƒùjðѺ¾}^¸¾m]«LÉ’?îÕòP$Õ“þ*>'Kſھ}}ÀË7ܹSkU¨L¾‹³Cœ›ÿüò*°,c2Æex; œI+p ŸÖKn¦.9›ÍÏþ8s€Æ8ÍÂaàØ,wg³+Àý<°G^ ‰r7ð{äŽ'ÐO÷g¿œÙ" û›BñQèñŠ.Ó4º¾õXÂ’ì©cX…Úå•JŸ˜dI•Ä•Z1²l$ÈežUjèøÖŸ£ªzT*clµUÂx¿O“e\%yÆdq¶ê™’A{¥ †V9CŠ¿UYÅ‹4)·j5Hè[ó­ ŠüP%™pØÅOšmu(2=ˆdsá€|Ÿ%£ö‡*ªòOCǶpÝNh[Ûd¹ån¹ÍéŠû¸ l«"ÎJ0B ×IíV(x Ø3v~Žëp9Ï÷ÐËZ’4¢B•*«ø#©ÚSoÊ2BME ŸÈÐʨo×7ëáÅxj[Yέ±}+ÜöpÇØâ¼°|Ïæ‰âåRí¦bR^/ö’l…;Õ6)…é“fZÊ6-t©Ê6Õ–û¿Ú¶«RYK¾îPë¡q1tksØ¡¨zöŽûõUä`D“1Ñ0n ^æ»}ªhÑ~(sØÜ¦o˜âŽE3|+ÏdX^0Ñ./d|¡öèOÄS¯·¢ø‰;‹šöCB¶…äë"ß1¼^ [ "ÉZ†ŽÅó 4䌭dÍde~ÞÀ„ð5º HØ«½ÇŸv]JîƒvÆñ†Ñ¨„AÀŒî£×ïoç7·³èv6{3{sθ$“ Ø»pØ2.• evíoØ'·'ª4Uƒ á§ajïS²<"w&µPX+5ÅR%?£”„%–: ÛvÂÒ´ëÓÎÄÚÇeI¦lD½£u4ûªÿ9‰;S'YÇÐi=qïÀR‹r$¹Ç1rdìŒÆS‰ô†žMfé‚Å ä“¢5…ž¹´È°ÑbÉ(«,«â°¤<€ò#@JáÃæ X'9#Àjg0…|j³¢©ÄžLŽ+ÜÔŽ‚9‚AÇÀº&šôS¿â1tQ˜áä-ǰÀâØ‰=rOhã„·ýõÐ%Ml £‚çAj9§X>íAN)ìµ0Áû y†¬Uf¨%‰\RTòcŒ= g°cÐËçáæþ$ã¿`aÕ „ÒL¯¬Gižï`“h€ÌuFÁÔoâÀ²ú3JVQÅcªh»Jø£œšÀ±_G·ïÉ·gÿš}ßzUÏ>ù„—•$¤/ÜtÜ«1â],B§ÂƒVÇÂñÐõ ]ˆðø{„VÂì~l²]¿ŒÙ 0#÷Egc^BŒ5>;K8ï-Ó,0³e›†!°O°­(wÄLIòÅN-·Œšn®ÒCÁ"Ž£5·*Ù©ĦY­TJkßD¸`‘ÌØ)λA¨ªÑìî­éý´ØžŽ°=»ùª…™U發0‡ž3Z Së@IK+£rw‡×Î3²›ã´Ìn¹2¬¢Êk›èräô˜ZCR‚d-нk´¸5³1­Áó ²/$‰ûòBÞ—çØß)Y"ýÂ9r ¡ÁÊ0H°ýá'~±!%JÛ®ƒ)ÍØ,šD¥¾iú°Ù>Ó7½ù'”ÁÃÕÕìÎPï¢Pñ§FÕÏÉå9¹<'—çäòœ\ž“Ëÿ?¹üÅÕ2¸4b Ä®)'†¼à¦÷òY+öDÀ’iþ 7IÕ„ ±v&~S^B(瘒?b&€å2¨N;Ä׈I¶L+U¶{0^jÓƒÌsêþÜÓŽÚÈ[¸fyÅõ!…ko‚ «€ q¾”U°³ÎuUo´äÄž“¥dq¶ç{µÏ¨öî7—Ôúœ‹Êw\ñ 1xîT$Œk$$^ˆ±Sm¯ÃƒëIø¥D‡l¥°‚TóyÈRU–VéóÝ>ÎPžO´cD¡³g®{ÆIÖf6±Io͉=âû9þÌ£»ÙåLsÿŽ®Þ^"èš´ꪙQc ­=Lñçb›ˆ7ueŽJÖ%“p-Iî&R ÒÕ‹ÐÚg#³‹ÏbWû,b[KwP8'TŠŽúîÃÛÙ|6:iÜ®3n–üMÅ2hÙc`F¶7³·³kÓ†Qïæ½|Ûàs7ûÇîXR3ô~ö …áÙíë™AqÒJ!ö\u'¹¤Ñ¬ ¹{8_†]Þ¾¿íP€3”LÒhá\ßr<½¿ímˆ1ôøº(èPð»è‹lÍ@Ô’»¯]©E’ ec W¿MŒCë^-+÷ˆ”øì[ûdÕ>¯´ëyÈÏ, Gz0£'ù>kœ2¤±íµ64•“ßÚ:3@ç» åS=f~wy{ß"Ñ DâúZ`{me! ¾‡Ø¾Yó7×/+y"ë‹"Š#å`”çÞWK¦” È»åR_ê(IK¹±ÅþˆK"úæìÙÖÝ Õ\¦ì~ƒ·PÛÕo¶£kø¥†S ·ÉÓ/è?ÚÆ'#KUéAªó}Ju8›c)HÒµÒv»šs ¿¤AyŸ‚0'ÀõÅÓãóg2Rp•õ§!×à ®S)'O^zÁM;f2¬>,á9Fuß¡Lèvk^ó‡}>ëx¨ûT¦Ée 8˘…ÚÒ­øs’ËòãR“©¾ ×Ïá˜=éñƒ-(t-#÷ œâ´ÿ:.à¨Ã‘ ÓS¼u¼ÇÚ Füu“••ŠWt%wvø:úA!öp¯Š ^ËA T.!t÷¨@|ê£މ×^÷ÅSóðí°&ž‡P¬êsãÑÑðD:1Ï¡=Y¨ÍOx"Z¹X¹t + Îkusõ;štü­·CW[œ+µ7u¥äÖO‰¾7†k]SÚÓÔw‡úd+ó8íŸzÐÂG½V ðÍ“2a1µo…ÓÎý£=ú³ýi3“q²$†ÂL‚nî¤gQ3wuÞ~Üd_¤M$)Ø€×à°­‡ÎÝ]zŸ¹ “¸!¿Óæ‡Woú+tèXxƒŽSùàCžü£Ø ¸sw}6øH#¿^Ò×éúß2jMá#IK)·4 é;BŒWŽ…:À“tW • ccA‰3eHñ”@-—@¾ø$ÎÁ=Êø öS% ÀKn#i§`wÊG w*W´îþ0W*póèŸä,40gÀQ­ Œ¶HPȧ#|[Ÿ@Ô Á—õL¦à5R-ýµŸµðåaQBš–ÿ ÔºëûCŽçŽBÛû_þó_D, endstream endobj 605 0 obj << /Length 1750 /Filter /FlateDecode >> stream xÚÅXYsÛ6~÷¯à䉚‰’)2}R-ÚãV‘›ži'Éh`ÑòPÒ®ÿ}X€:L9‰ë¶O8v|{`± ÛX¶q~òs|òîl¡ú®oÄ+Ãó-?“Ú‰cÄ©ñÉ<_܆®g›ç´¤5KppC“¶fÍ£Õ÷,¡8øl{öùÍ 4NL¯.°sMW´¦¥fü@Ê–äƒ/ñ/ïÎÛ†?0ÆkN %'þI`¾ÃfâŠ%'Q|òõÄÛp¶ÀaáÈ3’âäÓÛHö‹a[ã00$gaxŽm¹#ú¹qsòñÄþ¦2<Ç Çˆ$!yþv0¹žÙd ÅȱMVlrZв! «J5DZÝк`MCSÚ¡ÙT8Òœ6jy·Ï›Œä«áÝÀµÍ–åÍœåžÅ(©JXçxæ_ N]3uèCÆ’Lñ®Ñ5x4Ϫ6OõžÍÁÙ;û.3R¦9*½ ÞóPú ©IÀk±å¥l½<]..—§—‹8ú-†‹$”FBÔi0»©…Ô¨`¢|÷¬R;KõíœSdÕj³ÀäÇÜê&öu¬BG ÓÞºIŸÈŽ ûdW’oº-›ªM2!„®vÑ‘ˆÙlr–(§” [m}}WZÎÊ5ל/‘¼Ã/w0Šƒ­ØÄ lå’3].÷D”7ä.g<þùV\Ÿ‘DVèB„[(§€½i9öïX£zÂÀ7ËËùlœÀ¼ü5Z AjuË1»½š_œNŽã˜qtÈÌÊT¨£×³VpBÒHس®«š¿Åâ¹â¡ %ŽYЬÆxÁq¬ý[®ÈÅvrÏGE¯iÓÖ%öAö˜š!œW ël嘬ÉðT¢ÖWmÃJºƒ»Õ [ÔÀÙ`26§óÛëÈÂù8gîó'úµeµŒÀzÊ ³!LY4ôÍ”¥8[VŠí˸J €ïFÍQ 8ØH|¡ W‚q«E˜åš°Ï¶í¢ŸÊ[뛼BVô`¸_’Èq²Éˆ:úüJm^a[· M%Ð(HHêÁ×£•ýXÊñR­z.ɇÞÔmÓݤJ)ï½"qFñ‘0¾ ïÀ®~cÀ?–«œ¬9r>njÎûD’·”¿ïÙu8[.<`¤žP!gÑ<:_žÍ§ç=g„žå}Æ{¹u÷6CEA-Ïñ‘é³ëzûlŸ†žm›ñ`$L¡Ô2ÄfQE˜`=ðŽZ aÐ6èTéšÔ:zaÀ¢²bˆš¾gä Ì¥/Åž]DÛgÃóLk±°ThA¾ñ¼Hgâ¹/Ó¢:"Å­ ³zLf+µz»ÆúpßNçÇ¬åØŽå;áQsiúÞÆ?d¯kZTú‘ØPªÂÿQíÉ£S´M‹ÁxZ° h¯ôk껆(è`ˆR(ß÷ä:ºšOÿÿ RÓMNTº‹A”Pƒ>’î6”s²¦Ú Y®$¾ëœ¹Ødò› ¬o!èLÓ å{Ô}¼§ÑQ8#Ë›Œ@Ñ_nx€‡ÕjÈááÜ–¯kÝŠ^\ÿž! É>;f„ ´|ÿ¸ ùå&8­J‘,¨`ÛU|·ú+ô%ÑB†2–O ¨j/zÝ)FQTup÷®ˆTø¡&åæ˜~ýs»ù(ŒïàëáËÚç‰Pþ®P>¦éøôÁBLÕ~Ïc ÉßhììÊàw^àK¯• K)n©Ü©àEdÃÛ\§d®?2SHއUÍÖ2ßóuÅR%°Æ~ )¥Šf¯òP)´°ÖëúÐxÊS«2øê™>LmÔ9O}òê¾WÉl^â”Gez‡¤P è§NØs ‰b¡Aªúgå¯e®n=åYsêµÇ3¿3ÎL—‹ÿ6ÎLB),4q¦Æ¬dp)©f¦•ôSèa…Ž*B&ø¹"Ú;µv'Ï éO¢èе/y,KÈJq´ó±!†òSe…}Q§AMSuÛaJTÙ„• )u · lñXT-×èa˸ú.©`êN±½ØQâ¬sŽ­î`˜®¯-Ÿdb´Ëáê¼ÿh èu•«ëËò³éìxz&¹Ï¤gŠþ£.Œ¥ØÁȼÂDCLï„5 Ê/ ®(ºæ•2ļövÁå'UÜ2ÕÛ%î¿Â"’œ#ÙŽ£‹‰’EyP±ÂüO*¬C7ÑEñêðg)IªbCÐݺ@U?´­»o™ ê{[º*áOCþcœ^~¸šGq´å4m_,n£å"ŠfÑlßû>eÇ®B)þ‚?Ù¿UÒëï endstream endobj 615 0 obj << /Length 1638 /Filter /FlateDecode >> stream xÚ­XÛrÛ6}×WðQš‰`$xIŸœDv•qd×Rg:“d4Yl)Rå%‰ûõ]€Dаď}â X,Ξ=» ¶ž,lÝÞ-W7~h…(ôˆg-6õ:–ÂÕ·­ÅÚú<¼ý>Ї·<åyɇ9ª<.ŸõSþ-ޏ|ø‚)¾ÏábË×SyóÈ7<ç©ø‰¥KF_¯nlà†ç7Ü€ ÀÀÉÚ‚a¼ ¯äÅ'bÊ`²ü=°a ¶ì£ã0Ñ¡V´|þŠ­5|ûhaä†õ½¹³¨q<¸O¬ùà·V`à‹ P…®ôè !´vBϲ>)ÆÃ›‘M‡,)Ä=8—`øg%Ê8KåëB¢Uȯ.V¨/{Å_0&|-_¬žå r«L%+õÌl#ß©ÁP_¾_¾¿ŸÝ,oî®G.ÄLŽ`©²'GLg‹Éíaˆ Ìg¹Z…~ØLœ°UÂÅf!@®Xcp T‘¥‰¢@¼‘Wé ܰ(Êv{– HžãôI¾Ý±?³\ÞŠ­T…¼ÏyY婼—ë&•²«!ÂupþþÓÃÝd1A’6c ÆÊABQˆÅÞzËÇëÙ\løVNkÅ7¤ÈsmM¶·oÛ«Ï-«/Å1rè0מåe¡ÉyQ%%KKµÿV EYZrÕR#¥¾¬Ôô2gi ”×ä/2yÍs…é>Ï€XW˜}‹™ †Z„%Éa®ð_æOþdÉ›Çz'âûSQ,¥;û,/—àë²á¡àlM›6CÔ~,€3¡ý³ÆÛœ4?Ò¬lã$x[;$ühFïZƒÐn—ÊN±Íªd݆¾àeòxž) vC¹`%ÇF/z9}Îv¼„uÀçÂ@?H'‡úÖØÅȦJ_vqšåK• ±#ÄE„¥.òƒŽÚ9 µÃ–CQàyJìºâFGL- ’K¢á*˜ŸÀsP‰7Š”Ù:Þ<ëÐ×n¨Á'mY;…šV³¨•ð†‰Q¶–¡joÔqÙÐ{ÅF6<‚°ïÔ&hà3aÃP"€;6à.ñ{¡¾Œ8nˆìö1Bì¶'ݰy‚ ¹Pš|êh ‰±„(¬¥h›™ãx¢gµC(á\¦Žë!×öÔÚ•?–ñzY¾ÑÒÇÖWçÉóþ4±Õ&êû.)Õá{Ë€× ¡-©ö{¨O†ÅdY˜Ý‹b¹˜ü±09¬)(œåQB‘·•V¬cÅ2˜‘¥Mkv¬Š\Q­ þwÅ¡˜ò)Ô&îE¿ô‚VŸ €‡²Ë÷=ûdÕ-kUcí23–åCi)·±1§÷á;ÊTÀ¬Ê#]ž¶ªÏЭ8Wp±¢ˆŸÒÓÂ'z £š@,öYº>´ (”+¢%2ÌÝU:ÐZû79×뮞Íë*ø°-Ž˜jôÄ›R×—W¾ÇåVãúBä/Uè“)"êkžÔ?W¦Rû eèh­°áœ·qYkû¹¨µ=ŒôÕZ„È Ô™H&”èš±‹jKFZÈó˜ºt¯ä¢Ú:”"ÛqOÔV¸q"·/ê,ŒÙ‰YÒ•Ù(añŽ£æ¾}ÚÙö‹¥@¬1 ýá\þͳ)GŽÂû8ù0™-¦×w¦Õt†Kã''‹N ¨u˘Qk¾ß ZoÝ#ÇiïY¢vº9_!Î:ª»ÏÆÉMÅ`%´­*us*¯Mg ÖX¶=4º@×\¬šŠe_ØÅ\ïB V˜ÕÙzuF$^AèŽH8çm\‰>F.ŠD#}EÂCäëV(N÷U¹,³¿DÄyº”„؈2 §“—åÂ\dûÿO[ Š<¿ÑÖŸ8q,ÍÙžA;ÒC?£F«M©¹«’Ňê¼É³™X»¬Ô?Ž¥ò Ï~‰ÍìÀA¡ÿûþ>F.Ò¬‡‘Þ4#> ¯I3qðZ®âºå9sdô=DÁàùÄÅ>¢¡‘[`ïÈ-áCʵ¸(_Œ2*T¶$`Iãwá‘cÓŒöO²ÆRJÏáxŸÕ‡c[ÚiÒt©©3pý;KØ4ögÍ=Æu!­O¸Ò ©@¤pŽØÖ+;ÿ7zi¦ê?›lã†s~òƒzQ]¤ C¥îÀ_¯g³ÉÝòÝtöa:»ŸIØŸ§—îJ;¿r]‚Bì¾æOǟý endstream endobj 619 0 obj << /Length 1464 /Filter /FlateDecode >> stream xÚ¥X]sÛ(}÷¯Ð£=S«úxÌn·™tºénã>µ ‘±ÍVª@Éfý‚}[JúË.÷žs¸ÈsöŽç\/~Û,Þ¾S'uÓDÎfçÀÈÒÀ‰SñûÎfë|]^ß~Y­ô–׸ÀÉÔ—;œÕáÏæ[õH2¬¾|ó w}w'>|õÃÕ_7êá3Þá fàŸ¨¨Q¾ú¾ùðö}â9‰# daÜÄODM@âÄÉò­úˆœ²øc³ø¹ðÅÏñ»ÀÅÄ:Ùqñõ»çlÅÿ>8ž¦‰óÔŒ<:Ð÷\Dâ9wî/<Œ+® ,\?HÇXAËC¶X¡‚xˆG‰$S×Oáà#9-m”¸ž€ò”ˆ«É+«²ûñi:eø$NÔä5¾´²ç¤ÐBÿì K‡›ê•%EöŒ5«ßó7ŠGº%»çU—odDyíûn ¡šCKNhò¯j~À'âxk›Òl®Jwê3£Ç+.ÿåêRN§Õ Â¥k¹Úq\©Á5Ã:V~ L=uk°­óa‘‚xÐ#¶å9Uá6?_/œ¯Í,™Î ç1ܤU¦¸I•œeH.pÜÕ:ð½åÍΚ0ªÓRáŸ5©ðVo—•8“µ±L¹ýòñ£{Ê  rN£W0èDˆB*ø—„8dRˆ3@æ ¦¡ •Â#Î÷ü¹¼ DÄ®F—Óèû© !˜Tb$j€´“⧇p¦+óîµrl‹äQAرÒVqsÀ6ø óº*ŒN>ݼS+—(¯µ žHžk%YQ–%E+bñH5«9âæìY áë#b?,‘vÂ^d¡âïâ¶HÁú½KEhmíH±Å% ÞÊOn^¯…Qvh½Ë"š§1Rs'bF'ˆ_TÌÉ¥ˆÕeI+ΪiNzi ™µè¿Py±ôg¬ïäž1ì&ÆSîž47›¼ì˜H+ëþJaubwdkleG«qVU¶u²ã³ä¸5`f‰ÀšØªÂ¬¤¢ær×÷rk«¨z­¬Í§Í»éžHo{^_ݾ3û]²Ó™­Çn#ÆÌZÀ§ÈÕ€+{"1eÖÍ9¨8Ñž%–ìjÖïÆ]›ÜÑÔN lœS¹þÓ¨Ø-’Þî‹~…¯œX´Ä¿ÚªÎ™´è s-Ú‡‰ëGºMääˆÅ±˜]ðga­ÑÄí¦¢ñŒ&ÝÙOdZ{ ê¦Ã~оؤoëメ¯i dÛ²Ž?VÞ·†k£hï‚jÝQ ½s#¾³¼l‰º—-ZBçni—HýÒbœRZÖ"ö‘Ò3@¦)= 2¦ôé›^ýÖ8nê…¯yiü?pè endstream endobj 623 0 obj << /Length 2253 /Filter /FlateDecode >> stream xÚ½]sÛ¸ñ]¿‚o¥:C?zO‰­øtµå4V:7“»ÑÐ$d±'‘:’²Ïÿ¾»ø @ š*Ѥ/‚,ûÝ…k=[®u;ú°½û%Vâ$¡Z‹•EC'L|+J`ŒˆµÈ­¯öíüËxâQ×¾e%«‹L|<²l_í›úª_ŠŒ‰ß\êÞ>>Â@ÄÄûO3ñç3[±š• ð>-÷éfüûâ—wc׊ŒÐG2‚Øsb‘œÏø(¶ß‰!òpËhºý9"ãZä@8lô©•mG_w­Ö~±\'Hbë•Cn-J\ÇóCø¿±Gÿ¹'…ÆŽK­Ð÷$ö%9Û°1¡öó˜ÚiËòeVÃÏ:-s˜?"ÊóÇób~dCª|*×ò(ãIÕ15ž|=õê‚õsÓ2Š|Ù^ Én«¼X½Cj_!Y€~Bˆ“P*¶U»¶¨J=ÆÍ¬l‹tsPÙÏKý«ªnkÄDÍ2VŒ=j¿ ˆXnÜ]W[¹½*[.Ë¿Z1Q” k=¥¶3žøÄµÊÍ[M(мà1é¦ÈåÖ•;õ,s]?}VˆM”Ô¬•P’üBŽm½gWÝN>¾®‹lmB’¥´åT‚ –v›"+Ú¡œL¤ítŽS8Lò^V­ixÖòz9X^žÞLç‹Ùû;®6èk±‘*~bJEí¾.YþS'7ƒpOHQŠg5Ú@çŒ[–´õúÙ>ߎ†T }¦YÆví²aÙRÓ;ò«hïüð4 “m׊˜]Z§[Ö2i’mu¦ÄÜLZQz¤7þ­k Î7›—î•"SÙFÓTYñÂ$îš5վΘdi»oÚ¡Ò6 ìÌèOOoóvh{)ú·œXuâÙ7Ìl&íºÏyªD.z¦’%<™UûUùõãŽe  ÔÌ¿ÜÝõ½A âÏ}ÈãPëp{$áw‡Ú˜h×¼L‚8t<"oÁÏ\·¸¬’@ Ì@¿Gœ0 Öööv6ÿ2]Χ`s7b[/ž:ÔKÔ÷ŒŸØ³2Gí¡1øª5mÅB*†¶úý•b]„S¾€€S;†êæ[tSÀ‰BbUrT(ŘUÛÝ|IÌÔtç¯`×~èA¨S;‘:TáD1s¦ãŸ²t4<&czÊïØ.w6*D"ŒSÊÂ1k…DŽEºVn¦§×‹Ù¿§ËÅÃ?§ó³´‚'iZé“<5EÓBJƒŒI_ÌÖ,ûC(VÃ…¹UL)§ìܵ(wûv©iõb‹´ôgš°‘ÁÐÌà!Ö™¸¤Ô HôãrJÿƒ’<ƒe7ðENäö܉{Á­þ4{tnòÄë§.¸ü i©øÇƒ þÑR ÜÂÓœï™1NO!«Eÿð"[A¶êp}üV7 âÍÅÚÁu—$s×’|õ< ’ MfÎv„ƒu<.§¿~š™EJ‚ÄXÚ·’ź»–$ù‰|pŽ=W&ƒ½ä¨‹áGŠþðþfùa6¿™ÍoM”º‘C“P'5L$©‘ÉËBØ ¾4â òeT8g©• §’mЧ¼£|–Ð3ù¸®x¼Ò aò¸<`ÇK‘* "È@´ËŸ’üž’¹ χÏÔ,:Ü=Ó_1%Ô r®Ûwî{pcâ®'F¹JɵK{¥¥gzš1Hâ5¼FãÄŸ0ŽÇÙí9A¡gÁÆà«™…–ÖÃ=Q|?»6RÚ¹ì¥w7'¯ž8$"ø&Z_yUŠ«¤x«M.Ó¬E—(«1Õp«â1«kUÕåPÕ—Ï'4Íš6}ÚÍz Nbd]2aºš¾|º›]¿_|ËÝë“@…pz,\å) Œf0ûÄ~Âгou Ês(øÌ÷"/bâ³ZõV¤›š¥ù›ÙÕäé F¯ u})_ŽTjòÅY!_C¦¤*®‹„îšÄ>q?½þÙdh¾Æa/ñŒ¤˜ýð¸Šç˺T¨ìp=ó[†Ñ­h¶r—L_#!·L`L©êVìy#vH2 LF‘ã.•«ú@"_Š\VGÉ[¿Hï.&)½^²Ò󡈴¤uW£õpUëY+Ú÷¼(¶ûõ œ…%·ƒ¾”¡ °H8naY‚ó”`eXž“ĉU3k¥5¢úØÌ³ÇD¾C¼X „¾¿¨…øUíœt\¡“€í_N¬ªG]Uò"¼‚ë5Њ8…KJ×x¸_õ½^Yz†úBÏ!Ñný…²½”Ôomi:t¿Ñ|¦ó—~`º¢Ñ%燧ԒE’ªvôm‡†‰8õï§°Pˆ‡Àør[”U½„PÚî›aSâê\/¦„7~˜ôñ_hËÑI©³%x.ÆY8+à=vn¡ZlûfÐ2·Þºnÿâëóv(ÓÒZîߣÈ$K½§È>þ y1±ß È’ïRäÓ~™þ¹Šä±Aîª/ÖŸÎU¥9Üäܬƒñä«,+ ¾ΧCêÑȶ˜DNŽéLHDo &wi£ J96oe¶®«²ÚË=ÅâŸOv`¢é^ÜÄqƒD4 ¨}_a+ çµ|eÒåq›Á!ŠœZbgÛ¢Ùœ):|H·JxMZƒ ö"0í–#Ú¾ç¾+Ð+0s‡[è>=@ŠZÔö·a…W68–] ¾R9ËKN_× PÔÇj_«¢KÄÀ#——ĪuÁ2.$/‰¯°"Hƒ?âaØùå°Ûô?¼À(y $ô°)û!ËÒ†¿Émä³/àR¹ýV#Šm*.™"†ó‰dnù³ü“[u{018°ö* Hí€@”޽« Þ j)·ˆ25Ýg\ÄŒ[<²ú TSÀפ)ëž½ÖÔø±?"dUëÛR, ø =ܽþ Û%€Ç E>sÝ«F ûþi+Õã‘é™9€ðâßóÊü_›4ê¥ endstream endobj 635 0 obj << /Length 2529 /Filter /FlateDecode >> stream xÚµk“£¸ñûü ê¾§Ö, |ºÛ›šKö‘]_*U{W.ä1u¼MùDZMQ`×5ã"¥ñJ4m¥i¨n⦭i¨ÜЈlýyýæÃ»ÿ¼^]¿¢É»…k›­Ú§Ù …%Iľ)«¿,|߬i2‰óœf›’FîëzMëZ$ë¤,±p|óφà:f6HvœåÖbéñÀ\Á6 `ÊÒÖ}ŸxŸnꆡ¹É6.²z‡Ýˆ0âøCVo©…ÄàT-P8ÓÀ@Z8ŠÔÅY‘÷ ª 0QUeECY‘fIÜde¡1¨-P,5Y $.<ÛºQØ P®8„¤nMóEÙÐÉi/’ šJ.«ˆnÔð6«©µ/³¢A]º K‘gbáúæ7É%öK5&j"âð»ióü‘šìç.‹uzæ èz_•‰€ïÃzB €àÄ·, «bäAšÀ£æJAǵ‚ªÛd«ág¤1Ô%œk©ünÕAš t‘gù-åBšl',å œ/€­˜c…Ú}\0XXÅ;ш —×´ftr6æÆÒ³-ÇgêèfEY­ÕÁ;ð®ëY®Ü -ߎ¦„ ˆm0ß 9WþãÐo¸ <ŽíˆmsÚâ­Ò˽è,…S¦ÙæQzËÑÞîö¹Ø 8ÊðaE †™ýfÛn2Z¡vÒ¾!“2%¡Ž¹eÈ7â/à¶ÇÁ]˘DÁœS€d¾×9ܱÐ=78@<œÁÁ¼Èr"ÿ ®3¦ãPq<´Pm¶k¹v@ž%0á4ÇmÇm‹‡áiizºÎÓ¶ã‚éz½é /Oš?×Yºn”ÝT"NYÍ›¡A`E»lcÀ!ãèfphk{Øfxøé`ÎyVÏûÝlÜPnI¤Çíðù’;°CDá…Ñe†x’'-ñ $皢ϹÅ-Ç}‡[.׊ÀÅTÂØ ®0cló£‡8Ìr¸¯7 ÄB_ŠŸØ¿¾~³Ã·"0˜Ë‰•«{ƒŸÔ½ÌSjÕxDíéìñûu ™<£«çü³êSÉÄw“îÿ…Ò½˜ØgH×öáZî?3””t¨/KnSmAO·:ª%à =©åóˆ¶üë1,¾ÅBcxpoè)‚˜wÞ!f‘c¹^øÝ¬`‚ÿ2+¸œØ3¬À áVñ<ò,Ÿù½èw,i!€EgëbÆRYÓ0}‰ !«s)«û>*ã¿P…û Bšâë Ux×n ºNT8w\å.ÛfßÊ:äÝ`˜üû¹ú ‹]%'ߣå@_©§ä÷gé´KpYIOÝF±7J –< Næ¸â!“ul…‚År“¤†«&×%Oœ˜±ÉÎ(u!^’#,È ’ê5 sIý´œã8ϦƒY-@yÌcæ-^¹™$}‡i/tå…¾•øÚf•L–¡w‡ù4ò$UèÊaxMÒLâ¤ÀK*–x½-Û\¡¨E£6Ô ¹(îQ©Ø–jÔ åf9U^ãÛ™TSUµ—¼Í æ¿¢*Q€ê½J7m›©|º½ Ôô. .T¦B]#î°æ«/mMÕßá½"™2Fv+q=Ëþ­ŽþÁ-ãVšG`ÆišQEqUñ„Qyä¨: ½A™•g›*µµ´k~úp‚][7´8ÎkµçPÝåªEÔ„½€±¶q¾YÒµ;Ë›&>´µ¾öÔmÞtBÞTå®+ÄRA§PWR¡Õwùî¹, }±£]¹3på8Ìca}ÊúøÆÓ»÷×GÑxº8‚ŒL ÎózVë«­ò£‡‡x]P–@™r£•Ðæ‰@›²Ò>}·›ì.Ë;7¯lH ST5™L9jã Í7šuÖ-êÝ64Ýo »ìD‘j÷¬^ ä®ÔÎ\úĹljý>W/%Ò!ù X,Ñ|CëQœÓøÉË*Ì£K&{ážö(¾¾$·ª‹÷7xqÿ 1ÿúöíõ'šÃF·rÎùñ«:ï{æŸ_Tå"òÈG£Ç7–ž¾ÚËç4ÂŽ÷NŠæ¥^8¦ZXgp@©­Ï'¶U\FRPP –«»@ï6žCé¶ Õ@}s¼§¥ô§> stream xÚÅY[oÛ6~÷¯Ð£=4¬x•´>­m¤X.K\ @WªEÇÂdÉÕ¥möëw(ж$Ó¶·Ø“d…üxxÎw®qGÇu.G¯§£—^à(D8Ó…Ãu¼žv¦‘óq|yó~rF¸;¾”©Ìã¹þñ çU—OæWþ5žKýão—»—ðÀúÃwWúå^.d.S³ð:L«0™|š¾{yỎbªÄ`>A>öAÈZÂ`½ç_ê‡GÔ–Ñùtôe„aëà­à°‘rg¾}üä:üíã"øÎ·zåÊáØE„ xOœ‡Ñ_#·QÆKäz€Å Â4ècц¥”³ Öƒ†ñÀROøÊ„>„à®$»¦>r¹#¨@ÔcZ¯YU®«rVfÿL°;–é®ZÕ5ñN8HrHÖz3¯„‚!@QxZE•Ï⎫ńð1°cÂÜñ Ml~©dóc•Eñâi"8üÄ„óÎ0FçÍUÖeœ¥a²%ÝtℹYý©ÌôósÿB¦¥ ̬Ëå*+›µázÄóP²³lӢ̫y©×Äe÷à0)š·H&Ò@—KÙjž¥°óñ÷MÎ(ÜãÊÀF¾y¶ZÉ4’‘õ˰ܾÙZ¬å\éÓ² \wöfvs;{­t÷þââü^ïYd¹ý#Ï:ÌÃ\«mÄ\‚ ‹2Nm{“l`«‘v³4©mn¾h.bST@=QŒÆ,§¯óLé÷k¬¨™ñ´5I_s/ì—o®ä|¦q±j~†Oæþe•§¶­¡áF‡£±y–¯zÀÅaÇ«u"WŠÑ[ÖoZÇ–½]ˬJ"ãåAj&2},—&Ú»DšÙÂì3œ(w\Ð"É¿2Ϻž§‘R»ì~í‹c4¹ã›­¤™]ËÅ!¿ïć4¿$P‹+~îÄLÊ ‘â¹1ÓÇ­Dؤ5È_È÷-å}ͨB§Í€µ",\‡ˆ×xëÈàÊ·×wžOÏõúNDö)¾0Yö÷&•Wó¹,ŠEÕø%„˜µæ ²yÖ`œa”¶†òæöfzþaj9:àH0Ü;ú¦ÑòWåÊaGF‚M Ô¾)S†&’UÊú2j¤ë¨ï¬9bò›”óX³⬌WR×*ÕùC™ÔZ¨Ê@=.{µEžË…ó”}ÕgŽ"˜9`¨\:‹VmѳÝÁ§A€8Ææ ŒÕêSñ5©zø¦.rBK €?AØ0tôË}SÙjs²¶7¸yA㠷׳*NKªkBû6ëQßGœ“_§Ý.þ‰Ú=YØáÚ¥ø ëùŠñ“¶ŽgÂÕÕ~ó½Æ^ó8˜»HPÂ⢱äoûP8¢¾ÓZ¸ŠÓ,ŸeXVEO"]1¿ç!·ýeæïâŸhþ“…­á¥b»ù1h†SH_¾ ¹ojТìz–ÅÊ5j®”ßgq4¸Ã0 Ê›(‘϶$(IPöë,ÙÅ?Ñ’' ;À‘7–o 9'k%B(}–ªˆ0ƒ¤o9•C_ ¶ÔŒŸ’E{ϽC Ê m&²½U½Yô »´Z}6]ƒ©f è³Ò¨ØvAº YÆóeowÝVÕñÞÚ%N’MwšjSñت·S¿ÜM(?¦»äÂR^AUK9„Wæ"ÌÙž°iíô ‡ª•û‡ËVÊ‘/ÄÑNŸø S\«e;ƒˆv¬¶ÓˆäçЇ ä™®Gѧb6ã…0ÚËœX£½±ïå;nÙjý¬Sðµ<{œ€“–M«±‡P?|ÿ]B„«³ý „rœPÇA† ûr1³$+0Wí„wX°ÆóÐHåW÷E!ÝŒêD`›5ÚÒÂvä`%™æh&èL¾Ž õº¥é‹ÃDùF3ÒKÖq.£‡0[©ÌDO°²þ™æ²:0ˆ1>dÔfüÿuäý›ƒë9ÇìüÃÝÕýù[[B&q(»L÷Æ££f´JhN±ˆøãÓ›p&þÛf¬‘™×¤™IÖxñdf·Ç†;í:Òöß(à—=çŸ;ÿØèTÝ endstream endobj 655 0 obj << /Length 2050 /Filter /FlateDecode >> stream xÚµZYsã6~÷¯`å‰Ú²0@€ÄîÓ—SñŒ3RªR5I©8$qC‘ã8¿~ ‘uØZ¿˜ÐèãëF=géxÎíÕ»éÕ›pœpgºpG\P'p °3;_ÝÛO¿Æ„yî­Ìd‘Äúa"ãºHª'ûTüHb©þð˜w;™Àëoîô͹…ÌìÀû(«£tôçôç7CÏ A N•~HPˆCP²Ñ€0„î} ˆšru3½ú~…aŒçàâ0‘2'^_}ýÓsæðígÇC¾ÇfäÚaØC„r¸OÉÕ¯W^Û!niae2Œ„¯5Y–ål9cÏ•ÕlÝøR7Ö*µ<$˜©.·=%) <ß (CÌo”Tïæˆ`ß!H„Â)¤³hiÕ•6üvâ#r»€ŒÕèKåtå[ž³B[G‚ˆÿƒ²Àbéè›/&”²&”~;”$@a`bùù~V'YE5š†× ¦ˆ“àõ¼Û•¡w/VöÞ ÌZ™b’¤í_çë˜{ºF˜÷}ùCã` 3ƈq¡×ù×!) ÑÐi \'Y^ÌÊ*ªê²§‘{}næzq¾^è»ò/ ýÅÊ6âŒSñpè1Í)†ÅLæÚÕqž•U7«¢Üà@Á$®þž%óÙ™3@x%ÿ®f«(›§ò¥‘äÃU¼Z${ò/‹äåÊž‘Ä6’\øHˆ`—Åßó͹±QC ùýÅA =°×‹IGü…!¹TÕgä}äA1{In}«Ðr¿µ,Ëh)ͬ‡‘ üzqìÊ¿0+ûœÜ (ò±Ë­—…§Êÿ’Y?:ªýÏÙâ(ôè%hïzJpŸ¡0´TB1ˆ¨’%ôÍ>w#u ܸxÚTù²ˆ6«¦£†/÷wïõ·E^è7ÕJ꛲ÞlÒDÎõwã’ký[‚´I£X¯ìf¡ÜM23܈Îÿ©Ž>ÓfI˜XDY©òÀŒê‰ÛHû)RÅQ•ä©'ÜéªÙ™À5c 왦ÈÖdžýl¢"Z˪Qšæ#ÂÜÇÒ<ëK¼Ê·Äꛬe£&<”Rþ1ÂÌŸ¦ftÏ•ÜeDmµ.¯õ‹da€#ó¢j<©„*§íÓ+—v±µŒa¿MÊ5Úš A©6k’JGÝ2_7w~Û)ã´¥kªnмÊã<-õã:zÒÓ“r¥_5‡k]‰Û8™9rTF}ªÔWØÇ6wp+wÔd•mà—.WÛ5¥íA7¥êdnVþ©Tlט¸€°%Ùò§ký-YoR¹–Y‡B®ì7]×P¹Û®×s ÕÚ=ð§ñ—~Ÿ›8l€E‘¯õÝ?²ÈÁ«Ù²ZÙ5yP"æÛ<4¢xVèaDz`f©§t’,  mßC˜ùèNe!@ã ›Zâ¤ÏÀi‹{àsCÀ÷K¡@Ù=æ0ŸÂ;S.Uàî õS*/Asßs  ×ù$jou~Ï÷Öü”ÿ¸ˆÓð;GÈIø!ä\øÑÀC‹î~{s$åâ¸1Ð/Ò“ ó¹×Œë€®aO-Ä™Û|£ }”ªZ[¦,þÀŒZ–ÛÝú{¥êôu`ªÝ7Ô+cÛ”ÀÆùZ YØö¢CÀ—Yœ×€t«¨ÙÔ~}K-º,ò:›ÛCo¤°HËMµË‚‰s¹P›zT§Uײθ³å€Å°uª£å½ÌÀÜmgcToå­éI%h/"vÍfƒY »”@ßvz“&íÖ®·þ®»Ë7àîØž½môZ»«­@ßdðr~ -Ï5m+ 0q!XÎr-§…œ ÌñH.;Î|)8Ä( Áqw0†žŸ!ïÙh9N Þíæ‹†à ÀX,“_µ½¦Þ ø-ÒÛç|‹Bî¸e•[ØFe™ÇI´­ÓIµj•ÿ{žÐRÛSCžÛ’ìÁtƒ„5?F¤õ©b!S•ý¢q€Z+Ð/ÄÈÐÏ´®”Þñ¥Ùr ³~ Q`-Á*…[;ÊûÏ÷¿ÜLoˆpH¹ý!úßæ×îúš²\ÔöÔ%WgºÓÚ_qld¨#Nz šÞü>Ýüþp÷åæÃ' 1"z L’‘Udû»TÕJÓ“è!›¤0õ¯¯¡]e@ÅOŸ­–Ú †¸ÏPÎ’¿¡ƒ¯ybÀžåƈ¤a_‹§^õñHj·„šdT°èéöÍVýÌrÀœíÉMN%¤Ó!m 8u´Ö=NÛæÊÐ4ø ²/ø‡†ÿbˆöÊ endstream endobj 554 0 obj << /Type /ObjStm /N 100 /First 887 /Length 1619 /Filter /FlateDecode >> stream xÚÍYKoÜ6¾ëWðØL‘3œ! ò€Û-$9´5rpÖJ`4Ý5ÖkÔý÷ýFë$®Çô®ç`‹â~Λ3”HtÁ‰°‹ð .¦ŒgvDŒ§8N‚gu©F<Õ ãO“Ó¼—9á©®”Љ²«¼Ð XA0PÒŒA*˜!‰lMt‘ˆå„M+f2f„+ꢎ«Î$d, !Y\¬¶u¸(…üN©:ŠÆuI¸Ĉ`£(FŠ V±EÁNÜIÁ*Æ´Ô 0¥„}¤’#‰Wla² ¸$ eƒ²V£ŒåÙ˜u*”;©Ø«‚)…"8¦Ç1Ì$Ç`u̱8“–[hÄO‰m9–œíÇriÀò’c§X™‚­ŠŒÁ¸ª¸ÁXŠ Á¥Dä”00iÌ.)´¡˜M í%• £-SîÔ c¬ÓºC¼2Ow¯º\®@ñxLRÆÒ­Çß»þõå»ÍøþëÙò¯®¶ZŸëq‡ð¶ÿ¹ÿ¥~Çãia"GŸÍˆ=]²çè“ÉG%àžŽ*zíúŸVoVþáÃÅÅÁÙòlsp1,&ìÕæGÓÑM#ä›Fˆž;aÌ”{Aeb8æ~FÐ0§„cñ–»‘‰¼Úé@Õ§z§ †«óÕú«FÀ¹5O$Ì`„:5BÞ3еÌäcûzæ‰x9îëcqN#s&©)³¯…ìÆ»àD„_D½ÓËN‡Ãføš—ešÅËvV}žª^¤úQ#]J…i6²Do6·tÒ‚Esá­h–୮mÂjÅÖf‹(ÅgôMØ”Q®´Ù"²úÜhãHâ ç]NH´“ªeÏË7(µà°¤/¥±‚¿Ê;–Æ3RR½ÌìƒXa|*qÇ8˜‡'V¤þí%ËXÜqFĦÝk;»ž™»›#LcúqÞ×·YÈn’æ¬ýPí¡Õ}HÑ1OˆŹ[“Ü[ü-Oþ¾›TòZຑ ìà*ˆ®¸[)j—qXÿ+MZ/»—{€/(‡Û¾pížvQø Z0hÌ—œ>gÅ|ÎåQ3‡Ø½³c¸‚Øå¥Ýÿp¾×%ëáô¶C5&ÛàÏ…fõ5äF,Šè¢Øì9K6«O±‘®¢è—F~üÖò˜…&O‹æ=†¯†gnœ‹·¯Ã¥lÂè¬T ©;]NîÇ ÊûÎrÍQ‚9 zG÷ÁvIßÜýþ|íX‰ƒ—6$úN„{#rFjÂë$t‘fì#X –+øeyÌIi2‰v ™’&~@–¼ ¾¡î’´|ÑÒˆe´Ø¹ -v¿Œ’§¤6h»%>¦Åeš$eß$yýaJeÖ$É‚*¾)¢˜ƒ~¹V´ã<~ÐÉéîÚÿŸõÉùŒeĶ̵+¢ÌVæ¢A]+xSÙ±°”‡¤D™&Ž “TŠmXFC™¸‹ú±H Vë5a!cÒ†E­¢MXE­5·aQO¾‘)þÉœó endstream endobj 668 0 obj << /Length 2264 /Filter /FlateDecode >> stream xÚµZ[sÛ¶~÷¯àô‰:!¸$NŸRGñ¸õ-‘ÒéLÚÑ0eqB‰ IÙõùõgA")Ñ6eÙO¸X,öû°Ø…„[;g'¿MNÞò¥#‘T8“¹ã $$s| ¥OœÉÌùæž]} ©‡Ý³xçI¤ã8ÚäIù`[ù]źñ7öðÙx ÑnÎuåK<óxe^†«M˜þ™üþþS€ÔL©ÁŠ€’•TÀx?pßë§jÊÉhròó„ÀìZq˜È<'Zž|û;3øö»ƒ—s_\:Áˆ2õÔŸ|>ÁMc¤¡…•é$¹Öä¶(¦w`„ùÃtYYÔQÛ­öª”ÂHzJ *ÎvTdÈÇÜñ™‡<^©¨ú="%Ü¡HÒÉcgÞЩ-­»wÊ‘»€LÔècå{´å[{öY¡)K Iå+([ Ìo]ùb€À* yHê£À7H^_N7ɪdšKÝktÂGÔ;ë¶åiÝ£•=Àº@dI¼ÎsÒ4±óm(°v¦w‰GÑq“€ ï ò„ÔKýç1)bÓ¸LVY>-ʰÜ;¹ïú^L‘ÁÛ¡ß–$úG+[‰3F%ÝèN‘W…=˜,´©£lU”íƒÕrÅÅ”¨üwšÌ¦=g€ð2þ·œ.ÂÕ,_ФJùfHîÈ?Éã•=I!9’Ò’ß7s¸áû"¹Œ‹"¼Í¬#`ä{odKü‘8«ê!0að€oc™ýˆWÇ‚($ò%y;Ûò„ñhe{\«[}†°/ë{õg¶ÞA¦2¢”/»•8u)îyRÓþÚ>ÌŽ jwÊGsÁ=&7ùs@q!Ðøc* çn¹K] uåë2»ÍÃõBíܽÂu&«x¦›ÉÊ ‰M%û1 ØMÿ:ÌÃe\Ó9v•ˆ@Å2˜–Eks‹Íz&V¬quh0du'VxmüáZý4ÍÔsï«xÌ2$Šx&Æ ue$ëFGÉ:‰W¥n–™.gJ&Ä?f”Ö*E ÙØm¹Ð­l®Ëuž•qT&Ùʼ{e‰°Ðp»¿ÆJ[ÑÛ [Í}$Óš“‚•²eUãZ\ªe‡p­Ã¶ïÄsãTTJeQ–º¹ ô´û¤Xè.­s7…‘¸EÎ̉—IYj…™ûý¡¢6±„4œšš¬NÚ=0¦ÝÕ1lsEÐM©z—ÌÌÊ¿*;6[œ¦Éêö—wú[²\§ñ ‡]¨ªý/7…±»âR–—;&ŽÂ4Ú¤a Dº¢-§OEÔ`ö›5´âz¸îù_œg@M ƒdL¢ÞL‘AyF $×ºß (a) 2 =¥uŒa³ÌƒžcD<þHhÞò1rDJƒÊ«pŸî&÷¬‘Üc²ë@“Ûï;Ê0âØs<Πϸ@…ñ9•JåÛúd«½g3Èa,þ»X]Æ¡I±4(­áôU&·§Ëîgwb”ÍôÉho”q°¬/Øh-CP¸-˜öÀ>{J¡ À{2”Á9¤}„ÀP_B—ˆ€‹ï!„’¶&û°‰h\ DxÒhÄÚ©@'s8Ä]û¯Ã ‚yÍœfóκáp¶G“Ïàì×÷Uë@×[2§sÕÅž{¸ÅÝîÖø°¡Ãë5ÃÁGuðÞ÷)"£GRª‡ç)õ¼¾”bA€NÇçg*ú~õ’úˆ†ŠRû™.¤«Y©uÙ©†‘Øe°¯7ç§&‡Œ ®ÕQ•†ÁTs«”jÜ)G‡iG‘Iª“?õ¡ñ ¡š¡í­v Õ6Uežåf%»¤qÔF¨¾3̬Ĕ‹ÐŠNÕmñ ßãXG« \Ú§Z±Ð°}žï[ïúâã£v $RÏdM¹EÑkóŒ7±l›zÂæÌíw O?¨­ÙTŸa‡1[µÒÂdüµÙT÷Ölª‘˜ÙIaŸ%2ý!Kg¶Ç¨ ¸®¿™¸;ÛTÏ"ú­`hö½÷bÐÛ¨_¯Æ£ÏÓ$H‹Ž’:ÊÖùUý5¡Ñ´+§Æ®jR“Ž0.ÔEMGhh:ÂXMGèÑt„JmW%´¦# ^Ø¥+æ%šá«–mÌ*æ¶ÚM¶ŒX€ûWLøÕ„5ºHÃÒ>‹ìø®ÅöÌžFÛï°¹x/ëÐÙ‡›XO¥a=TšB³f=4Z¬g̰>4YMµo†+tÄÕÄgÖ-ÂwMKµ˜]µA|[>-ìêÆ,•m€T_fÇW¯SPÖX<ÊùИ9ó4±éÔnÿ²~•ìMÅUå!._ ¹Óë«Éè¯Étô×Íù—ÑÇïǽô¿›df›Û`å€kñêÚjÙ¡ôइrö¹E?7ž¬ÕKs2Û1qR½wØx,´y¦áãžð®WÆ¡QM½5 ûˆlh»þ„cži»þ!Ä)’˜¿äBÿé;½ endstream endobj 681 0 obj << /Length 2030 /Filter /FlateDecode >> stream xÚµZK“ÚF¾ï¯På$Rfí£jžòÀô†y•>FÅC \Qmå2N³|\”Q¹.öXr_˜çõNB„Á§<›Þ›ô{ê½7³šœ•*i×;!ÊRGPŠ˜g5?ÉÒ¢lšT‹š5H&åq<wÜÄKù£/¢tšÈ«5‰D0>M6é÷Ôdof/Ñ$!ˆÁ¨5 VØY+³q.¿gI4¿V)~(áþ³)e~?¥ôg¶ƒ[Ý*ÃÈØÎ±~ËV] F-Í\­”ÀG$ϧ”&ýžJéÍì–â!â‚_åó×3È]»ª0NWër¼”EÍ¥Ý{µ>…‡( žOŸMú=õÙ›ÙKô)ä¯Ýó9r vN>‚z£J=®ŽWÀªN[ŸMkMú=µÖ›Ù \£ïCVè‰k¼Ì´²uyÞ¶TíùKgMT‡ÿå•ÝÞx´¬ö¡lbž…ØmYF“…, ¦å¾™a’oV倸Ù`HÜyOÑj¡Knøñþík»8š‡lUÆY%ÉÆÌ¡´V4MÏ-Ò¼.VrÁ˜J»¯ážÐ`Èpà>T«›¶|AÅ©eö1+{G(Þ@Üpÿ!¤#¡ç›KNýÐ.Ø­ê {¨ØÅ<½xåÑR– V=…ûeê¹O…Y™×“EfZðü(Ë')S3)¤Zý}@8Q[¶)½…âJ±<Î9v_Ø»gÓx¶©ô·/ëû ¥VÊ•{°­½Ý}ö7N²©D‡e\]пâ¢;>EX0MB„Þ)ÄW•+ß6ðšçTt"K…´a5œÛÇ*s?æmGÛ”]çÜLc"ÎMÏÜoë 윫 ¨…‚JåDbA{{2aîgS9SYd´NÊÖÑfëªíå,híë-ÜËRåj-0ßåü*"dm§ÜFã×ã?>|ÿúÛ›¤è·Ïs?½„Ô}PsÔªf•0ã:Ýeô'%Uå?y-Œ‹“ÁêsûídÈZ »\çö”ÈÀèï] Y%´G$1¿0ϽýUId@qO8ˆ+ }à! Ð~¢ ‘³¢‘®‚R‚|¶uÐf€Zfª«š ínƒ(ùœ-etÏú Jò ­EÆ& »”>[E¹‰Ú}=¥*³¦•Z¬Ÿ -—Þî6DÕV¤'l:9›óDºÂ†xP¸¤µ?Ø ‚¹î6Ÿ6@ý‰TœÇ VÍ*z,ƒ2õÞÀ÷ÜŽñe?ÉÒÃëƒdJlÙ>J뿲<žÇ•K[C^{M7ãx?HyÕs™Ø"R†`Z!m<šv:U5PZS³¶Ðpxî–§ƒKµìo2™¥É¦b·¨ ­½3ÔäR‡÷™ÝûþÓ»wV*³6¡¥Y¹ ±*8a»W€îÀ| Ú·êBä¬ùv ²o¾U«ê a%Hˆù5ÿ úÓ` endstream endobj 696 0 obj << /Length 1935 /Filter /FlateDecode >> stream xÚÕZ[oã6~÷¯úd/b/%µOi¤ØÌ¤/P`ZŠDÇBmɣˤÙ_¿‡"i],ÛrÔ Ø'Yyx.ß!y>[O¶n&ï“w?»¾å#ŸSn-V–Ã÷™åúðt‰µˆ¬/Ó›ÿ™Í©ƒ§7"Yª—–Y\¼˜·ì[ õò;vðÍÃ<ˆjøñþVýø,V"‰éx$e°™ý±øåÝ϶IÚ5h6gpQ¤¼õu ò< ã@Š©¤>ÇÅZO¾ŽóÖÞ­í)óBýzÔ-«LY/}3kÝ3Øí6qqšè†Ua,/ó^mkíõƒÍfï+xóìÉR?>ßLº2žò|™‰ò.rdMhö€„èR̆4ñùk!å‘Fšé¤áL¢LéøYe–ä*'}»?0†R@³Y–ËŸîîÿ}½¸Vý[xõâ7)ü½^'Ê0„(®Jí»0Ýî6BõL9×2æÄE>cí‰?.®[,¯»¿ý|ýSÏü„:È¡~G…Á@˜&… þKÃhä:À›L‘^ØT—]œ‰¨WC3KŠ?-{´Ó‘9¯Ür$ÑÆd^[±Çjk¼'©6"ŽDR@ž· úM¢,ؘΠá½&iÕ”E´iÑûZþúé¾Ç×E.>êë|'ÂøwŒ©ÉO)Dé›w ÈËÝ.ÍŠF"ë%Á¤½Á!q¾Õª·ð<×jÀÒƒ<·Nº2y΂Ú<Ú©É)³M>n: Q6ìà ·ÚPd»C ëˆmQä{¾• kÕØAÚÒú['À6r 7(ÁDö+_%wG¾Ùý†ÌДő(¯¬Y$±Y$«U XEÑn¬J†íë}îÓݲŒ“‚ÑÖ y>|¶OÇ}3ïväóîxe‡{×ö]„mç GÚМcuœÓí]ñG#câ!¶Ì r¸¯¦ù×1)bžÕ踓4[æEP”ywK¼˜¸òéúþÛE¾-däG+[‰ÓN%ý‘'” êP˜Œ#ìéý68Gµ’ª'Ê$JÂâ¯e-ލvšz {m$]XÍí· dKüÈ8ŽUõ’0º"Ô}UËœ:‡†1NZ5O5öÕÁäyy»h¶å çhe,ÈûxrîÕ+òeAêV¦ã¢dÃÑŽÒ·‹R[þÈ(Vö’¬™¶½¶ƒ¡CüjÏsnyuþ®ª ïõ«$“ʲ· Y[þÈVö’IJ¡luHX_Ó]'«*'BåüªÓŠ×:Yfü08|ò]{LÑy%÷l(i°£KÕi"#Eïd”cÌ« Gæú5á"Ûv™¨ˆ 8-óÍ‹iKe)9­È ªåQ‘~VE—ô„ªvI,5f(óàq£'X¥Ùöj6· 5ê@!'Oz ¬å±}Qdæ»»ý€Ô¯…éÐÎ¥.‰Ô(¡L'‘d‚„4œðéóZÀDú›šZk?@ëóŒ€úº¿HÂìeÖÿï¶g†8 PTýNϺ•™Hž$Ó$›Ó•jÕ|[ÅV©îAÑÖ¥‡°*sSC.ÄH·~‹#Ñ)ªÁc²:¯¸ƒ`³'uáÔ¦«tM<Õ„o®ßíçnð±¦xÙ4O·Õ/»IºÍ7¢æ7ª£42 ÓM®^·Á‹öçkÕ¤ì`CW}*Ò?¥ý"ÑcÄ6.4sÀ4ØÇÊ}©€¡ÞZ3vB¨ŠÎƈ8ö‘J­—þ¦®äñüÓ\%,€çgéo† "žSÓß·œ-îû4Ý}gX¤?¥ï6j{ºÃ4'HÙË ­epаË*öiº2ˆ>!nCM0Dtu¹×#„ÁyŠÀÖ2@%mMŽÝ¡@š Æ÷>< 7#‡¹È£ìoAå°sÓ8ÍzöÊ\wÑ1ÌÜVËcÅbæ‡ëg›K†•ºïa‡ë>³q§dYã²%:´‹ýr4Á©=h„œÚy!ƒF³®kÎ篹«£„!Ÿœq-•}Î#ŽúÈv.¾ª;…ÂûýÝ[>§r©9‡@ îi €2@Èy œ2(„Ës÷¸[]ÉqR÷ï¹Õ¥ØAŽýÝêöÕ!£gÝ®æŽW-aßêv t¹»_Cûî•Ï\îþ_Ýò^±ƒô•"°KÇ¥ï!gÓw€nú/ÒPcû5ÿóø@Î&= endstream endobj 709 0 obj << /Length 2542 /Filter /FlateDecode >> stream xÚµZ[sÛÆ~÷¯à£Ü©’K.Éæ)M{;‰•3“v4´´’xJ‘ /qÝ__`¥H™rlkü$î Àßb¬ke9ÖÙɯӓWïÃØŠíXzÒš.­@Ú2VÃoèZÓ…õutvùåtìÎèLåªLçÔ¸Vó¦Lë;Ó*¿§sE?œÀ9»¾†—:Þ|<§Ïj©J•›‰’¼I²Ó?§¿½z9VbHbø‘gGnBj ¼æ‡Ñèý„.9™LO¾¸0DZÜà°PÖ|sòõOÇZÀØo–cûqdÝê™+pÛ¾3ëúäÓ‰sP2²À ÝЖ2&IæE¾œUuR«û"xžo{^dÉ0²=7Ü—Atd€½ [F’E¸ÏÚ 42„Ÿ˜£^oŠ"SIþ3)pS,ÒåÝ© FÜQlë´È“Lë$Nc׵㠗E>þG•ÍÓÏÛ"ÿÃq¼…Êë4ÉЦ+“|A³Ó6ï£ÕÎúÛ²¨Õ9­¼“Ó¼¦R ût,\gô¿}!Î{d»d$‘©º+òŒyßžµ¤ê2áz«æ¨)=ëòËÅïeI¿yQ­*Õ·&-™dߨ´ÆòÆÞÑží„B“p&áÂTø-fû ó½ðQD`j(£"Âm7CÄsû’:5ÒìXD¤ÇoÅö‡‡ÆlßwÖcÛaøãC§ÕŽühwhVU5Cêc3`öÞ!Ò >5t.{Ë¡E3`ÎÂù{ºØ‡¤|iH>O•‘ÛqÀìNƒ¬ó=ðYÕM™Wä®c¿£xÑsíÀa?¾v={{õáãÅd:¡ù=Cñy`ïþ _!Í|®ªjÙdÔž›m¦P¡öË1ÓƒwöÜ ËøÝäýäíôü¿“Ùôê?“Ëþ®Øï 0]³s©‹¿Ð©(¶äR{˜4S #X^¥U ט 8_«ù_Õ ¤†‰*»¢þúæÝìúül@Ä0´Cç „Îßx¿4Ÿe ƒ))ìËÇ‹ó·o¦OQ˜>‰ƒ…a³ ßO½`§ggOÄÝ#8j¬“4WÜLL¯Þ5ô6ñcY”ÌɰÜT’•b¢7§8^•òï:1¤³R%‹;jÜ(E·TÇ.ýcŒ(ävç÷mxuñî Þ¢B¿gEßX1èãÌïÚ²¯6/æúí© › ‘jÕ†}ŒV›æD,»jÃîVmØHyuÊÔEAE¶0=,bƘƒ?Z4Û,'cR-ï»§ÙC'yP©_.¯'ŸÃÑqméöà» Ǹw~±Ghtõê{¬W\Ô…#ÌKègGha.ÁzŽð±Ó+ÝÁ&¯ k<„Òu)æ_4Ì…¯—±ÙdO‰¸ŒŸ_Ó‰Oè'ƒ«µô]kãÚ3€ ’¿`s*E•H¢¾ç3ÎÞ||꽘Q] ¡¹C=4z¨‚Q]ÔC÷-mSwDÀÆ-Â8Á™®àÝðahm¸³Z´}a_aæKúÝÙâ æV³JÊ,5&Òaîßpû׿F9d4ŒôǪ±œìßË—ÓÉïÓÙä÷çŸ'ïž~=¢-hõC ãm¶ÁÊÃ×b\—WFÊéâÀ–¾ûáfk€OÆýÛ¤L6ª=&‹t±§âT§?&ãƒÕâñqÞR/h³hcˆC#Ÿw„±ç"­¶Y‚˜»ÓqpSQ"‹±©ÉÔN€ ¦¢øs¶—Ü ¸º}ð;ô0®ÃîÀ• 7ßòì8Š­RYËN2Û'6Ü{Ÿ¾A¡lagKŸ¢É=ú& ‡.-iÇ›ã…ÕË•EŸ¹ Õõ;a°Âv|.\}˜5 *B ó´„å‘#^N»}úGj÷haŸ ]òàxÿ´´'¥«eëëX:T`âþ}. 9´ 9f v`Ê9?¢Ø»v&nÒ¼(‡%¢ò1pBp þË OÿH-ì#àJJ/Ü™®p<_–ÖX ›Ì¾'Y£žk/–v/f™=úÇYæxa59V¥ûË8Ží†‚,Vy’Mê»íóM°[ùr&éÓ?Ò$G û“xhâ½oêÑÕ#‚®õêüÝã&oÔ|}œýB$_Î~}úGÚïhaŸàì<¬›áÀ]…JŒ£g^U”éÌt°úwýl‚¸Ž½œûô4àÑÂ>Å€–Xî–›f¹TåìiαªË4_í[³×¶k;n|L>°÷{ð=Ðó`£-¿É²ó¢[N›Nš“­.q \8T/„ùs÷]æŽy9§Qøü§;Jµ-U)˜Yomá˜5Žé%“o“FéâÀ‚{—øsiJ{Õ€¦Ò‰ Ð6óÛ…Y±Z¡atcÛ”Û¢RÕð›RJ™BŒªb£H€V.èåì±Qm´<0æ T/Ù4Yn3&Çv‘¢*½¥°«Ö}:¹ÒÁ¥9\dõ´‘ô©;J:iç=†u ƒy©d¾Ú*‘Åòé ߀AÔP§l[AGfªÁmq@hœÛ§cx»ŠqÏIu§wòt]Ëå*2>ìqý–븙ע ߢTæSëZÓËÁЛäÐSerCU)F·ët¡?UYjtìä®h`­sz*ÀPÏ® .Ö Úb™pÍKÚe±á5ô³êTsx™‰m ްê:ÃÊÃù›¦ª kâ’æ©~Óý‡Ø  ü:85XèÛ7]¿>%]SﬨE‡Z:ÉØHFðµhÖô:ˆ%ÑuèBç}¬DIGkç€ealaÄ ´ô¶M 8øpF÷´t´×Ù°öÔ@¯eÞP‹Ý±ìàkˆ >AÝ÷‰ñw*ËJ8“ôЕ Ä(S7j˜|ÊÜ ZTÏ•´e-À–Ù#¶2¶nÄ+ò>a*"jô:;x¨´còZ_ê4Ž‘òôµ)@ßMžFi¨jn¨ô\S{@ך¹?¬YQvÄÒ¸`oDðÁ»T|ËÝÕ—)MèÝ4’ßg9°áޱÃH[ ~V)Y>»•Pâªçé’?|€ŸÉk+0H½@Zþ2PÞ{ŒÞEØcDC¾ æ»¢?Ñ3LOðö'l’ÿ³Å†DX2êëPQ?<,Ñ…aȦ™Ól˜9DM*¾îÅŠC~ò!ôsüçü÷é_ äNC endstream endobj 724 0 obj << /Length 1457 /Filter /FlateDecode >> stream xÚÕXmoÛ6þî_¡X!6˽.ȇ­/Y ¤éæôSSŠEÛ*dÉÕK2oØßQGE’¥Än è“"Ïï¦ÆÊ ÆÙè·«ÑË·®oøÄw¸c\- Û!Ž/ ׇÖeÆUh|2ÏÞO¹MÍ3™È,ZàÇL.Ê,*võWv-$~\S›žÍfÐ0øõÃ9vþ”K™É¤¼’2ˆÇŸ¯Þ½|ëQÃ3¡Ì°ÆˆåZ;ÒÄñçî9^¨G³eàÙÕ½,Q~°Zè†J4Ò´ ô‹~6;:3íO %o^ýþTS ÝDÚ:1Rå·Ç«Ï|€€Rå‰Ì?ä0óƒË|æ ™׸÷ï™ð‰k‰Çýè2âŠÃY’SAµÞ_Þ|‘ ]‡b}§i¯»éV=dƒø¡{öc[¼«^*Õ­|O—a¥°Ì«·ˆÖ9U]ïÙÞQÕsx/g+óà-—€9+áQ¸{øœ`%Û5!½QûÁĿև$ßå…Ô‡ ”KUŽe\<Âÿo[ÿ ¶¬§ñÿƒü?dŸÿõßy½¿-N|j}Ï?ƒÿÙ5V¯ endstream endobj 729 0 obj << /Length 1677 /Filter /FlateDecode >> stream xÚµXKsÛ6¾ëWð(u"‚öä$ŽëN]§‘rJ2š„,v(R!¨¤Ê¯ï‚$R‚lÙj.‹Årß~ ì=xØ»¼ž.Þ…±£8 7{<@A̼0†ÿxÓÌû4¼þëãhL9^‹RÔyªo&"]×y³±wõ·<úæ3æøz2?¢\¾¿ÑÄ\Ô¢´‚·I¹NŠÑ—éï"ìE`FÀ”~DQD"0²µ€)=a4¼Ð!UKWÓÁ×ì‘á°q/]>}Á^ïþð0òãÈûÞJ.=N0¢,€ë› þà£Î"„¹&¡(Ô†,…”Ƀ˜¥UÙˆáÛCS(õ¥‘ÇCŒºo ë˜Ò1A4bÆ”C(ãÁˆ3Ä™¯­Pþ½1<ˆzäãá+íÐZ$ÙŲÊòù¦õ>Ø›Œ A1çzñdQ­‹L‹ß›8äeÞäI‘ÿæESéÿ¢®\JîMØ›…ѬVEž&M^•úÁªÎ«z«Ì¡b»ô3Æ´–¾I“¢@£1#xxWÚojÖuÙShóºZ¶îמ¯<}ñázà}j×>H9Ër¹*’ÍL6I³–ÊwÖ5ÛЃ.ãÀÄejY•ãÖ­ˆÖ3û6¢|˜káZ±Jêd)Q[ÿfÊ9BZ¯%kU’e¹ò ”D+g²Í¬Z&›mÔ‹M:ÖIÚØ(¶þéÇIïZŸV™‘ù–'Fx}/Å×µ(;Á‘ݘº¿£çDÀéH)óòaÿ+À¹.éýмêE¬Ù¬„s“¥Hæ­N‚2s‹9‹ÿhì%:ÄæÈÅÁ °a§# ‡¬UáSò˜¢Œû[¨ëc”OÓ”€hD%̉ù)J(é[r l9»é…S6µJ£8ë@cê?áL"‡O-—QNv@{?¢x¸ž«”š÷°6]$m±Õ6É”•îüÚr+:…ØÖ«éûKrH±zÐ×Ôj¾+ƒ’ßÀ褩jÈZ'ÞHY¥y²Å‹ïy³°[äò\[®-nÛN2¯…Õ=ÂÙÇ;F2ßê]K§½;û’ ŠG|‡Gµ(D"ŬÚc¸ôH¿4ó"Òá:†¹ø,@!¥ÚÊmÏ“šÅ~'Oás(d(µÜl2™Mfoînßÿy5½Òò½¼Ž ¢À©_ [[§)€Ù|m¼—VËU!T(c˱Ñ1&!ŠënüúòíìöêÍï§n|ãh„úªNJYt²!·Y‘¦U%[ÊØÉ#±.åzµªêm+8OÊ\ÚÞÀnÖŽ iit6 ‹žþdºÿÉ“éåôãÄñÑ1GO:Mb(w•òêÂ4ßözGÚÛ­iꦬ}Q‹´z(-S˜ƒéPQ*õ¢q©Ôz¨M€Ë„Y¨¾áͬý½{{e·ë½TñlßÇô’ul¾ H1ÙÕ”¥83ð¾Ú}!5WïWÔ¡*,õw½Çß ±ï1€aª‚R9 %¾GQÅ^-¼y‡¯÷•¹Ÿê'1ò ±hÅDIŸ«_Wñž~;kœ²CWW€bÿÆZ8Ä[øTo#êwà‡ªq¬zw;[Cb´‡…'DGÈçôçy·¯ÿLïžmì3¼ -(ôÝÕ²{g`=C›çû» ð=ÍGÁâ‰å/Ç´pÄ"¯#¸Ìf»ရŸ4aÖf?-öôŸ—ç{BHj ”cFÀ¼»y;“¢é{„9^?5ÅhlI,ùíäø˜Ÿƒ¿{ÿG˜hÈ ›¸,ŠJ5Äï²ßÛH¢=˜È …Œµ}‘§ K2Q›íÐ({çT[n`7ª-U\P7å¼Hî áê~Øô=môûS !6/Œ ŸñÐûî©4çXC¢a>N.GQ<9ÕPÎ&ã£Üy|ôøÉÑmŸWÉ•Hsux“žr´ð‹~þ‡ÌÂ$âíyáY³ð)Jžœ…OPrê,L(Cw·3]Ô|pÐ㣠-ï©t!a,/Þ¥‹Ú¹7ƒÞÝÿ#Róìæ­<)&%ŽÉ0W3ÈR”zäïHý‘]ÆfÊÚ±RŸºWuaWŸtíH¸ž-ì8y/9Ì6e²ÌÕì¹ÃO•î&hÐîÍEój⑎sX3˜f.÷´G®>5´ÏôðK†íÌ ·v|5>·fXRouyÞø\å™rå ææççªÕ{À|èMØÉyÿ´EV endstream endobj 738 0 obj << /Length 2106 /Filter /FlateDecode >> stream xÚÝZËrã¶Ýû+¸”SO>’•“L\N]Û“±²H&)-A6ëR¤†q”¯OãAФh™2£YdEl4}Àé–°óè`çêìûÙÙ»Ÿ¼À PàR×™­á"7`ŽÀÓ#Îlé|š\Ýþz>¥O®d"³ha^îå¢Ì¢b[½e_¢…4/`¯îïáALÇå‡kÓø(W2“I%x&eŸÿ9ûùÝO>v|0ÃeÊ îSäŒÔ0 òž?ygUCÎÞÏÎ>ŸÁÙ™pë³Obg ß~v0âïiXQéÜXòQe–äÆdèÜy;SJ¥•Óîïç÷óîn>üïý콑oyÚgÈõÝj…ßZ7–‹…ÌóU›÷EºÞIJˆÒY/5í›ZSFïEy>W£ÂLΓp-Ç"å7Œ¡Ö¬W/2äaî¸>A\påEÕ/ˆ‹(áE8™tV ·µµõ÷îOà)LD5QL”ôXý²Žþ ò!34u¹( Á¿`¬V˜=:¦ñÑÆ„Æ’7bÍõÀA>5XÞÝÌË()˜ ÷þ9zá°Ü“y·­¤wG{„w]8({a§4ì|šºØœd¶¿;É‹ø8D`ä2Ï™$ÜÀLöÍKZb¾Ó\GIšÍó",ʼcÑäbèöå>žw:üÛúGâ?ÚX­Î:•ôãOÀ3‚68)]a\½H“¼ho­”u¨XQ12(¯dÉ›ácráò;|mý#ámì1ðqŒÝ¯}3|Ü «?|mý#ámì1ðQ ?Ü88Û¦p ’àm§¦W~¶d²‰šb=ß Fø”7†õtž/òkSäqküe§çTLžsCúÂÄ>7›8Z„Šý™Ž"ݱB¸µlçó9Áûœ*³$Œ§«4[›.åš¼=~)A .«áùIO2³2Oòœˆ‰¥õ™âëíÁJ@7rÃ.¡%“B%®˜h–ª¨0ñPÀìE{½1.&2²Ó@ÛRShm2™ƒ¹4¯zxöðXè]Ê$-ôràEûI?ÁAÊæuZæ•Ò(YD›0¾Pï®5šóI––,ÜŠåOiÛ‰£d©œm'*žÂ¢jU]µ£­ýy½XÈ„½T–ÖM`ç1.Œ–'v¨>n‘üç Â#ƒÑ¤ZzÞ“`€UL 3“þ»hmJ9$0>d_Ñ`/‰b$ ;LÀMêÚj?Ð)ÒŒì"ˆôÀZE§®keò#XÎñä¬.£Õ¶JQºN½‘‹§0‰rÒùF.¢?0¦6Ý­§;p‘.%Ú_(ÎîºÓT{L«À{HQà=Êáœzƒ”€¨çú=JE PBIÛ’}Ø\h2ž€7ÎVr X\ˆ3ÿÂÁWc…{êRrw±²»·/ªÍ._ ’ëþ³ïüÇš¾>h ‡5 @€’×Ñ]É`ô¹‡0ܯ5úôú@ÿ¸ÇÿôáÆä+¢¬éûèƒêE€’×Ñ]ÉPôYíñ{yUo0W—a‡ýèä±1 ‘àF <¤i,Ãdÿ–Ðï·i2ý[fi_@LÕEMkúÃY}CÓ° Z]ÀÐÓÇa”6kËïj=çtVµoø>N­¿Ó¥Ï¢A™¢JƒZi^dÑ¢ˆµ }ZjÖИºf5Ýøb¸drÈ ã8‰ò÷}ôFüû*­Œ«5¤Ò 7'­´¶¦¬+­Àk±ðšùãüöòæýì·}“ì!tgŸ=õ±÷°Ï²B6]UÔÞÐáð!®Æn72ïµ¶šô€¹CýtWe © ˜‡´xj[fBKÈÜf%j¡]V›Z.׳1rI£ ½ŒòMžS<Ù¾½¨MsOœ®¨Máð­'Kü;úÇ%þã^v¥Œ"óqEm¸“§+jvôôîhcð.†~uîvËö?VÔ¦úL;]U´£$þ£=¢¬FA±ïŸ¾*%›²è‹ªÁõ³2;]i´£†ã°‡+ °î€6®¼‡rm(4iYTØØ‘o†ÈpŸ¡–ú‘5õ||Õçïð¹»þ±íbÙ+{cùº ŸbucШħàiú5ªØÄçPÚSÅv¦«³êÙªb{É8àCúP„Q%d¦2øW¡òM-›I[®Çû†v6&H7áçRùný>ïøâJ³ShØ Ò Ù”Ù&Í‘ž²€[fýùfý«3e_2¥jÍÅŽ•'»ü)¯ÊíªV™è ·"ÐÛNÆÄ|ZÿC&RiȺZq³ž^yUO'Aë<Öïuq\½(ï˜g«8®ºZÅqL!ZaknÓW•ÈU;Ó)™i׃ªÍ _¾¨ãÒ~S)ÇóÛÙüòöîö·›»_ïû¨’xF% ܽívrÆa)Kó=´òÍhQÆJ”ïU_”› 碀HŒ!ÇÖŸ ð„\eéÚª­>»šhi^ór³I3ýK…kà^Mn¢¢Ú®cÚ1õQ­Rš²*œ‹ö(-À©/Z€SŸ7R+ø¸Èdh~Ec ÚozIª¥7|P¨ܰ­OE¿.¬¯¶Qòh¤,~w`5¾šÍ/ˆ¨ÑS ’RÑŽ¡Üi8z!A8U‹°["ÿÞVéx¢~ø¢–Y^ÿö ‹g)“îVÓ©°­…õoW&Zík.z¾DagîºwSÿÌR¡SŸ‹}ÿ?ãpÎbþ–¿ŸýSz&• endstream endobj 755 0 obj << /Length 1959 /Filter /FlateDecode >> stream xÚÍYYoÛ8~÷¯Ð£½ˆYžµ}ê¤hœlâ ´…¡Èr¢…-¹:’ͿߡHIÖ[‰`ŸDIäp8óÍIlÝZØ:½ŸÞ|v\ËE®Mmk¾²„l—YŽ O‡Xó¥õ}|:û6™RǧA$¡¯_®?OÂì±|KîC?Ð/?°À§××ð úûË3=¸ VADåÄs/ʽõäçüË›Ï[ذ™bƒKŠ$‘ÀdÁc0ß‘ã7úáPµdôi>ú5"0[¤f2aù›Ñ÷ŸØZ¿/FÜ•ÖC1sc ‚e6Œ×Öõè¯Þ†$;\”4A.ל\N{‰· ² ™1N5÷ !‚˜p¬)Lj³pFq²H3/ËÓ.÷”rD©´l;å¼Í>Ûa[L iÛ†û® )ƒóba9”!‡*•œEY X¾Î9Ÿhlâe¸z,tlù)°ï ¡×þ…éFON·þÀ˜Ôçi/ôãe€ºeÄëÚ/8hMæ;¬ ¹ØG‚ÀTÀJàœ:ƒˆÀTÇ–=DwqÅ"”49éªÍ–”fK‚$¬+dFÛ<[D¶=ˆq€0; H@‚KÆ–’Ž]æ6M‹Ý™ÁJxËÚªgбb”Å}¸1—aº]{Árž{Œ.€aÇÂa‘Ãp8Ld0¨DÆ‚ã<+Ѱ¸™P<ÎW*ÆàOŸ‡Ù\î—ªdÈ–‡Ý øDåkt´˜¨= xŒÄó•„ Ó4KÂèö¤CeÇõ ß×ÔJXØùA¨þÜ+÷ôaM{¶3NŠ5QNÍšLÁãù]ïro»]‡¾—…qd¼bžfz´J‚Þ%i'Þ­ÙÃKÓØ½,Xê÷‡0»3g¸ {ýcÍŸ·ÊÊçiÐ^ï™zëõ®­U'·–\ŽÚÒUÖ›ëÀKÛ€QÚ+~þ`Åû|>’:ªHpîg Cˆ4ÐD†¨  ̺&š=n÷xm.D 6ï'ah;-SHHhàOe™7ÿ¾ïÙÇFœŸØb|Ò‡Çx«Àï­kkT¦¢§ŽRŒâU ê^“H‚,O¢Ò”ö[]s¾ÂëÅÙÇÒJ¼—QÄ룰è²ÆuZV)Ja§½È‹ÌÞé]œ¯—Í 3ˆv•A{iÿ¼å4ŽÖ& ¾y¬ÅSYmÉRLõÂK€Û|íí:ÑŠÆ®kêsC;œG±Qº—eÁf›5½èSŽ,̔Φ®U‚·2ç˜}ûúÕˆvUïÐ+‡_y˜ì ð/E|_BÎøÒäÕW†LYzmÀ#¥`mes}½¸^|¸8¿üúiþ©'k7ÞË”šº&÷ý MW¹A£o¶ë@)õl954¦ÄA.c»¿÷q1{w>dcM×ÕçæÅ¹­þ7“ÂnùF¥[N}˜¹Z…ëõt'£¥–d§„Ã&´ ¬#H¸ÙÆ Á€£…‰YP5#Aõ8mUeP‚`  à½•îÕgA€KÂ-Š\à5 ¬ÕNÖ$ÖÿµK˜ævµ&LÔìcékÀµè—äviÙÈ¥îo`¶ ý¸ ý…¥wS2±›Ðpq¾ÈÁG2Úˆû´gbÜ«I·IÿHéÍì3¤«*l·e+;[ZMm¬#€ùÞÞâIíX…]ªfxFÛìõÇSTbÒÚ™Øi:ì${'Cm»HèJýu´ß¤¤öf¶ g„JúµO ¤¡¨^)ûQš5 «GËTnò$â‹+jŸo¾T™Ô•HHñjÊlÑ?N™Ç3ûeb÷è‹”©²Öç걪^¢Eé ð_M‹MúGjñhf8äR‹Ô…Å„×.Y˺)hU ¸måQÕéxmÝ©lèí`ýqd3ç˜|¨õ|²‘OmØ’˜rç”Paè.JåcT5c òYx›Ç(ŠÏºk¢Ç:ïS³T-¡¾UW¤z-êM¥•P?áŒÏ"=ñV]xk(f˜`º˜é®«éÖ• ú®å}èéSk¶2bŽ9n•é¶Ó.Õ!û¬³âmÙ¾¯zÞSn;KÙ,u ʤÔu•¨ÒP=½H?Ïgoõ@P:c݆òƒ­n%ÿârN˜êQõ\Õ«»G¤`$PÝwÒþÊu´Ë¤•Õü¥ªƒ´ÜÂˬʦÆá½Ò8Œ·I¬r. ÀÁ´>ždvJ]À4¡­Ò²/nµØ†u òµ¶rTÑ I©§n<ðªÁŠªêÃb6_|úûòâjbãñ|1›01†ëÄ,Žôóá.ôïôzßKÍzS_³F‚íTM/›t¬êG0Ó` v ÿÍ[“™)¹ã¤UÍoš÷)Z-j¤£òDzåP­Ñ”n͆ÅÚ+ßLX~ë·ÜL07GþOo¦žÐN§S‘ÀòÈ«ˆ!Dv:Úé$„A|b]Ãxá‚¶ˆ•;HÒÃUªMä’!W±ŸYuѼÃêé¶/ ”‹ôÂH¹Å^ Õ´¾hh_?ôßùÍP¼Ï–[Ž@î§phãam,–éM'Cå+aþ’[þÿ5E«ì endstream endobj 769 0 obj << /Length 1945 /Filter /FlateDecode >> stream xÚµYYsÛ6~ׯà£Ô±ââÑ>åpÜt*ÛµÕ™v’Œ†¦ ™‰Ty$q~}ÀK”D[Í/`w±÷~´­µe[W£7óÑ«÷®oùÈwˆcÍWwãSËõáêbk¾´>ޝ®ÿœL ·ÇW"iª‡{i”?™§ôK õðÉæöÕý=\°zñúöƒº¹+‘ŠØ,œql&Ÿç¿½zïÙ–b8TŠÁ<‚<쥔Áz׿R—È-£Ëùè߆5¶…kÁa#åV¸}ül[Køö›e#æ{Ö×råÖâØF„:p¿±îGŒìƒÊpNE¦e 4>q”m§%£O¶M¾}K±š`ØUlòÞ£eOðôͨ6í#Äêk%a*ÂdGßÅR=?è#éúöçU”DÛÝFl0•Jë[篔Þ:òƒj¥ÊåÙ.•¡ÚŽK„8ì ·&âd»´¤}÷ K)gU¶#ˆwXê:^Ê|ØÌ‡!¸-É¡<À=Ô:ŠÜ$‚Ã9€3A=ªI"ÇsNf‡€fA)UXg™NCÚ/·ÉBéPÀ߉¼Hc㌵ÛD±¹æ"U.îî]%éM¦Bä>OÒ`m\.Ë’0 r Ú³ë+°qù(ëòÝ™Žµ‡ÞxX¥¢/rß:¡ô9y°ÊMâ¨B-ŒŽ“0Ølš©DÛ.][êæîjÔIj<d¢Ô¼´‚QwUD`Ý‘Øz™Cx¸QuãDú…×4n¦ê¨ÏîGÇ!WYf©ôfvûûåüR­o¹›f®ËîϺ¶a(²lUh…‰ÌORý¨‡åTÓ˜bù”6¿yýnqýzv9ÿû¶9¶]Äý.÷ùcåªíÒ« [&ní^E\gÝ^Ñ %é“m¨RzÄÒµ#Há¾rÁ0)6&ê’Úåë Û¥"7®ntÃÅÔÜ*ª6‘nÃg×5!¡Çæ ;ewÚûµVƒ¼1ñI?ªå‘RY»|‘‰p!¦ºÒüÀLj€«ÁÔ+‡Qêè°«lsªo¾PP‚Q5HšõQYÑ!ÏaÎTê^œ…Ø ùìdE9òœÓ@ ¡1Fk åƒVî$göxÚ2kDt”SÏÕyºÃdy ›{þA÷ 9IÂegBsCˆœ„æ ÍaßFN_ð÷û ö0²é 5Š||Ò]°ùÄõŽàr•¯ÿ„T°$Š#¸®AªaÓŒ§ý~ñìí¹öläÑ3Ýb‘“n1€È`·#yD§’¦*Oø‡ƒÏkÓçÈaüÃ%Èq:¸­B=V²r”]•ù³æ"Ÿªæá¢·J×I§íLu?Ò›SÝI™}Òê„v+„i¿°v(*¬Ä«jp/.kª^ÑþoRcÈ ¶FµÀ=Po"À‹ûþÔ4ÐcUÈáÅχ…Û†}@ülÏ3d÷fM²Í^òô?2Ü.ú endstream endobj 664 0 obj << /Type /ObjStm /N 100 /First 881 /Length 1591 /Filter /FlateDecode >> stream xÚÅYMo7½ï¯à±=˜"9œ0äi ´@çÐÖðA‘7QW2$Mþ}߬lÇ‘Öm+ÎAXîêípø8o8ä “ ND])¸°KÑn«£L.1;²ç\¦„ktY×ä8§äX2®ø…Ò‰²60Uð¾8Íf×BNJp6DÕÕj÷ÉŘ BV¥dSÄë…ÑÐI) ƒ¢hd4*Ì”êb&ôYZш.r‚eÜDƨ¤ÂŽ`¢xK­ÓŠN+i'¸IC“ª.¥˜á¯5Øì—(¸¢N54`^CtÉ:ÕÐ@?Œ)tªÁLˆvÀ£DxXñD8ã/Ôœœ‚ÞT²ñ¤` \ª„×# VP£‘…„¾àLŠFLDà j#ÄEk,ŽHÖ€'0í®LMx+«=IŽ8¢¯0W3ˆÖŒ.0˜âÜ)úËÿk—m.”lÖѳ1’IГ1JE0䜆ß9Wg—™à¦3³ÑBhˆ±AÕ¢DÂD.“ÅD. Û<ÈŒ5¹f8†°ËÕhGŒ<åZÀ¨ãh´dAC¸SL âÐÀ 6pEó©“ ñ!šÎqNc>˜ÁŸbYÈžà/ Ð$ì’À3f‡‹‘€±së ç¹ pC‚‘°‹ A ‹ x ÑbC šdl˜a®&N¹;<ì&¯óµ;¹ãàlxì¤[rô¥ž ·é&0€°?ŸÏ°x<$ si«çáÿnrtù~=Üÿ~6ÿ§›¼X,OûåÐC8™ü:ùmòò87æÓ ƒ!&.“GS­>™Ry„`϶ŽÜä—Å»…›¼r?}\­þ[N/~6Z®œxåŽ-‘ ¼ýù×ßî FŸ©E ÌW7¿l#ò€ôñe ¶Yj^´¾_±Bïh+6ú[±(tBiÃbÑ ¹Ñ®©¤ Æ‘Åp‹E+*5a-Û7a1v4ð£.å¨Ké‘Q—¨1×µõÁÃÛUÒǭɶã7—lÿ¹Æ««ìumæh5ªŽx[ ŠÁÖW#yäµ;W¡Ó³ÕÅùôóÁj=]_®ö¿*¢f÷¬«"²‰€/”•?ÌŸ,P|Ò›Uõ"Jýøä¥Ë ?Œé1ztXzPH•@ßôfqvz°ê×[Eƒ2µ§ï4–:ÅÛO6x•V»ä…K)Ùÿš°HÛuËÓ¦CÚ9â±Ó®Ç¥CºÇIÊWà›m‚ˆ¡ð†S#6{;6lÂ*y-v¡È’ýE’+ÂmØŒM@&lÊì«r#M© ¤Kàa¤ZÅ&ðýð·´ñ±ªÛÕòÓ*ŠyGQ×’ǬÀÄßcÌЙ}t¹^JØÈ+ü° Ÿ·çîÛà›¹x­ÒˆE¨ÅV»ìu¬ôÃ’¥ˆF»vÆÜµÓé±Ò{  šöÁhÛŠÇ…³ì”r¿‚Rw™7‡;öecså««|—0·>Œ!¼Ñ3‚2ë7Ã|>ý·ßc½¤æE¶KÄö WvZIî.˜¦³Y±F­4;˜Ùœ|º©™þxÞẠendstream endobj 780 0 obj << /Length 1798 /Filter /FlateDecode >> stream xÚÅYKsÛ6¾ëWðHu"o’íÉIO2±ãÆÊ¡“d44YìH¤JRö¸¿¾ ¢b*Š“EXì.öñ}vîì\Œ^MG/ßx @RéLŽHÌñxzÄ™ÎÏîÅÕ§ñ„ ì^¨Deqd^nT´Íââ±zËîãH™—/Xà‹›x3pvýÖüø¨*SI5ñ2L¶ájüuúîå;>¨!™VƒûùÄ%K ˜€ùžï¾4ê%£óéèß9Ø!µâ° 'Z>Åξ½s0âï<”3׎ Q&á÷ʹý5ÂMgø¤¡E%Sp£ÉGUl³$7*Ã`í9ìL(E”VN»¹™ÝÌ^¸¼~>=7ó[žö’¾¬,üݺqE*ÏÛ•yÒõf¥Š8MPÏ–+cB<0ÖÜøêìò|võa:»¼êÙ›`‚$ :›O—öX6Y:&½çjnFâ¤PYZ­’pmg>Œ vÃܧ…ùšÇZEË0‰óu½ª×ŠJ›3^ýYš2Ô§š¯V“Eš­ÕüiÓ>E§_Ÿ÷:ÜC"8¨í ÝÒEË»ÅãFuüžo7›4+*‹omnÕ6 êd—бެµJа^­ðŸTZOA¾gT¿ËóY¦V*ÌÕÌ* ©3¾Lw—Bç”~\t²”!sGRIQf©D"J¸CQàN¦œE#-ÛÒúG÷7 :ueµLôìS囒Б_•”!;4eIÐà([ Ìîó㣭e»åaòF-ƒ<ñ¶˜}¸œm!ô˜)§ý{ôÈcÞóy·-ÿDìÞÅÂTÈ”¦“ωM§´ãÝMžCF,š$d`6ûí˜ï4&®ã$Íf9dý6ïh侘¾"àȃúö\çß‘ÚùŸ®ì€ó'àÁ`ÓÀGXÊ:ôÁÏŠ¶£E€ˆçßñõ’"òÇà£#¨éÙã oçyB #_úFí7™‚NÁÑ=ZÐ$\­Ò(,[ƒ—iÞÙ)až§Q\}$îC\,Í´01#U¿,{µ2èbÂjÚªžnúS¹ 7Ï\æS‘îÔ™½ 4»3áj¤Q§‰Õ«Æcà_ñ`Aa3¼Fgí],cÛ³#°³¯µâVO½3°-mÁ, [ò>Aô#"ødn9¥ð¨ïp–r¯‹‰Yc‡ 8-i!ñþ¡R  €4ò¹Ý^W¯·pZå;Мc(!ú¥óxñX!‚®ß.ÛÀ0ߨ(þ‚1µÌ¢¶gßás!Û†2ž…z¼¡µ IöX)‚pÿ["LepxO†v8§Þ !0Õ“~Æ¡<@Ê BI[“ýc“PŽ@”ðƤSAúc…{ˆ³'\H ÈÓ¡~ ¼ •ºîGÉ÷œz‡uÖ–È־ϡ½«‰ï²§r çÁäPH ¤?„?Õ>ßì “qy<ï°Ž('-rr?¦Â W»¹5õk3ŒJóãvL±»],4 *8žj0F‘GäóQ qá‰çÃù§¡Ó•†sqÕ€& xÅ>ï¶åŸèÝ“•=»„#ìËžœ|\ùadCBOÕw¿ŠlÐ ÄñlÐÚùŸ¬ê¦!¡QC·b˜!B5Óœ{‡kôt ½Qr“ D¾ ?ƒJPO”þmQ Ö$ ¬CøŽ40Ý’ôÃöݘ´åB¸@Æ]hÉãîz›fxê•÷äÚ‰·J%Vv“ÆðòÆ­±åî¾M¿d鶈e7}[ ˜ÏcC ôzÃJ˜»ãäμý¨¨i0 H¥½†VØ,‚aZmkæ<Ä«•ùõŸÊR3ÁÎ$îJ%wÚgzP£qµ²’uo×Ï̹ʣ,ÞÀ†öCjÅ/ãhÙ‘Úq{9Ö€¥ŠúOÜ*&Õ®­ûÉ^:f£Hæª$J·Úú¹y/q¢¤;ïÂ1=š/%,§,íÚMZ²Ió²³[¯.1MsjÓîzæ^}zÿ™5g‰Ž»Y×v=–Þþ£"«CV¢ÈJé[»*4’êËZ¹ ž>'¬ÃÇ6(Þ@dTWÀ`îUµVö¥GL˜[0ïø¬Êª›êÝ]ÅÕlΔ௒åõu™ƒ­+èöæºÞürzL-ÿúô˜x0ˆšóÄ?…ËAôøxC÷è±]î4z˜ÆÑK½Ë{²Š”¸¤%n¦k¨½-«*a%¿úW$³ÚVwÆù‹f-±âÂV&ÛÆzÒ£.î½é–øÍ»„£¼6{ “JÂü{þ¤þŒ gR endstream endobj 795 0 obj << /Length 1732 /Filter /FlateDecode >> stream xÚÅZKsÛ6¾ëWðV©!x ØžÒÄñ8Û©¥ž’Œ†¦ ›‰tH*ÿû.P|ˆ²%ÑjN ðÃr¿Å¾lìÜ9Ø9ü5¼ýèùŽ|A…3]8\ á3Çóáég:w¾ϯþ)ÇÃs«4 Íd¢ÂuåOå,ý…ÊL¾aŽÏ'x³ðîË…ܨ…JU\n¼ âu°}Ÿ~zûQbG‚‚i1\I‘$„,$`ö{røÖ<<ª_œM?ö`‡T‚ËŒ;ájðõ;væðÛ'#×—Îc±såp‚eÆKg2ø{€ëʤ&E‰É ò]#ÉÊ×iœ‘a±ÒvÆ”"JK¥M&³Éìýõå—ÏgÓ3³¿¡iÉ¢üÂ?¬×a¨²l±^šy˜¬–*’Y-Õå[Œ1#Hzè.Ëf©Zª S³$šÏ2•¥iR F´ê0ò¹þlý8o)’!»Ž¹ÜÕŠÔëœD‰ëPäKßI•³¨i®‰Ö½º}€§iáå˜èÝ}ñ k-ü’õ}N¨c äSÿ„-Ó;Ç n¬¹tº5s(HRCçõålÅ93ß}F'}ÜG>÷dÚmâ÷ÔnoaЮAÙîËR׳óu,°ñgv½}ÎNŠçyp9 âÂ7çý¾ …#&ÚÆU'é,˃|µ$¾Ù÷»qÏ; 4ñ{š@oa÷0"|ˆj`nà.¯LàúâÃ6õÂE×ôy{²g÷m[‘¶ òçÞ¼qÄ¥ìãy[Ïa^P !ŒØSa™AÔÉò$ îì$Ȳ$Œ‚\ÍÍü1Êïí/æ‘âûøN'Õ¶º^‹…äö_æh4§÷åQÅÏ®?|Ò`¥r•šõÕ:³ï¥:e0Ã<±Çæ øã ~~ØÑãˆh±µºuT&½¹e;-·–‘zb¸H“•æŸ26¹ LÒdG±*¯åX'ÕÍ3)»\H3ÒV®Dƒ>FËey¸V·å÷v°Ñ{!RMïæM­w=RAhGQ´Â€À=V@àç!leÀÞÂÐ w©·lõ„ìw…8Ü=@(iJ²M›€á¸ðØ(¿ŒݦâzÈeÞó„= ‘—LÅ•IéW¦2)/\yU® §mƲçm‡·®yåÎZa„–a¤ãí|§“°®F·ªËfçà´þ9ë;Nw]5¡K "Lì[Ò__Fñu”ªY˜šˆrpE¡ ×?]EȤgþÉòÕ&|¿tµ·¨û,ÌxOö+•Ècätºmâ÷TnoaÐ.ƒ¨Bü×äÕjA}uÀñü²ZAæyôtü7ñ{òß[ØÎ*•ì¨A3ŒŒ#Ç¢L^â¬Yºu‘\˜6m"3Hù÷|¥ØYÕ|©Ž¦CÀ&ìt46ñ{ÒØ[Ø}Jú’F&˜T÷8†\½ÅŒÃ!oOzÔ-ÔxÇÒF!Q”U/õÕiká÷£­¿°ÐF} Ä}¶×Y(Ñ÷cm- QêÁœt‘ôO×Fmá÷d®·°‡0'%"²ÖG-ÜÛ:ƒ„¿}í|ý—„#¯]…z4…C>;]´…ß“ÂÞÂB¡çAiâîÓ=’½UÙFÈú4D©?ºÿKCÊ+„©M®oó Šm«(ŠIº ªnRp›¬meغ lUÅy,yCIw@\A^¥¡D$¬•½íƒJü´ ¥Ã?t«¡¤!èó/7”öy±¡´Ⱦ %}Ån͉Ö2ÏN“ñ1]ÏëÑ#E]ö¢ÁpaŸVÓH–­¹¤*˜×þA ‹z+±íÙyùâB¥Y³/¼£»pµ$Øi¾}Aá2âáD›áâ©«›´i5¿¿9ûpv5½x÷¹óˆ¤tEÙ¸å6í¬¹Z–X/ó.œ(Ž@®<±ð‡4ŠÃèÁz’nÓ?”°-ÃÎú™ýË/ý‹m“/øV$Öìó¯ÿˆàH endstream endobj 811 0 obj << /Length 1609 /Filter /FlateDecode >> stream xÚµYÛrÛ8 }÷WèÑÞIX‘”(±omê¦î¤I6qwv¦Ûñ¨6kF–\]êt¿~Á‹lI¦c5Ù>éGJ®óà¸Îåàítðê}ÀŽ8#Ì™.Ÿ!Æ©p8Ø™.œ/ÃËëÏ£sâ»ÃK‘Š<žë‹{1¯ò¸üY_å?â¹Ðÿ¸¾{y¬o¼¹è“;±¹HkÁOQZEÉèëôã«÷¡ë„ƒQ à q €|_éC@ä’Áx:ø>À ã:xRß™¯_¾ºÎž}t\äñÐÙ*ɵãcÊà1Ö­ xÁnàSäSOÛ•.}(Š™´?+Ï´ûÖÙ"^þ1x&1îsŒ÷}½&Û”q–FÉ>Ó•q¼z u¶]e…°­Ž"-wñ-ë•ó\¨:lÝEQQˆ¼,ÐèœbHŠ2Ë£³eó8*Å¢µÐøu—«ÚR\tA«¬Júü›í2¢èBŽ6›$žGÒVÌËRäZ²*j¯ìàDæµ£$1j3úüÁÑ'w—ƒ®^®\$"*„ › ¡ …\^'È!¨û˜ËØ*“ן¯®ôY¼4®ÉJÛª\|¯b:LQê»8{NŠî•0‚Ü€*?¡3iÆÛ‘¬Í½”€hÀB‹êq„¹ßG Ám$Çhîî™ÄKQÆOQ* C~ÂE;MuF)â!ÙS}’–b„ýád¦ç-|W7Z ·äÞïÕú[ä™É¡B̳ta¸¶Ìr›‚í*ž¯ŽWÕ$±'ã:ŠS-ócDüa”Ä S&˽RËÒ®‰Ud`*§b>Yz<î"Ÿ´‡Œ=†ç2™¦Û_¢ù:úÙæ(ôã…µ=Þ¤¢]ÌvìXfI¢MÇéÃë§(2™NÞŒ0ÆÃéøì¸ÜY/.Æ·ÓQàu^ž5ßÞHÉédbÃ!‹b{;ïÍ¡_þ!…@…û´Šê¡ä4‰N+éË"J}„]ª]¼óU”ÆÅº8Î"`x§&!Š‘ï'iD¹‡Â€·yt3y7ƒ6ó\ Ý× ’ܲ ñŽÍÓƒ-‹,]¼3¬[¼1ºw¦ãý°ïºï«6´UQ¶É}dd·Mè^å'Fv[­yÙŸÅ Êß9óÞ3üs37Ä-¶Ù0!—™Ä½Ss@¡7äÜkä9€$P<0Ù—<(z7Ÿn¯Æ0d(ù/BŠXÈêýûk“ÐÕ|.ŠbY™HÌ39Hɰ"‹És£ã( ´iøúfvq7~g±€¬Ë;vwcp^~XtIPÔˆvûÌ]M®ó5RàM`ºX] V˜ÄÆÓÉ_cy| ]çÊû>òpðlä[xlò+•¨1q[àÖÖ,x÷(ïgã¿o'v?c(àž×@K9ÖhåI­¼n¡•7VшHŒ0çš%É R@©»å“²ÖºÛ”©«Æ€//·#,¿1è ;-$#¦Ï#½O87ÐZ²)ÓqÙgÇ Ž®ñm‹WÀɼúã™,"qª(=ƒý–ÞÖ=–úCV»œYQäá²óq‹Bvy°-Ç༗÷}ÌÁžC`ïÈ\8ËÆ×¬¶6ûÝC® ÃÚ€VŒ¥ôKõëbÓÑ_‰ëc¡©‹!Nøÿ¶înÝT•¦¨hz* ƒSS¡o>ͪ8-)iuÓá 9">ÿmÎm«™o_ µ¿k9A¾!ËcÙé´çÌÕß—Íý®™£á‰–¡ íùu¿ûã˜ÑÐi®ã4Ëglø«¢ÛûÏz²7ýmÁo*Yè_Sé2¾ÄöÀcÆa¿ë„àß04ÓY–íPÛB«‚¯6¨åã ²ž+L&Í`Z^$âHøÌ Û?Üñ{Æ/…ÿ´¿ endstream endobj 820 0 obj << /Length 1582 /Filter /FlateDecode >> stream xÚÍYßs›8~÷_ÁÛÙ7E•è=åR'“N꤉ópÓv<2È6s\~¤Íß¶qBê˜øzOiµú´ßjµ ؘØ8ïý=î½=s}ÃG>£ÌÏ ‡!æ[†ëÃÓ%Æ84>÷ÏGw“:¸.‘Ez¹A™EÅCý–ÝGP/_°ƒÏooáATÇÉõ…j܈™ÈDR ~äIÉãÁ×ñ‡·g6<€Á, Ãö(òˆ +–ò®×«.•SzÃqï[€ 6È8L´#Xö>ÅFc Œlß3¾W’KÃ!Q‹A;6n{ŸzX#ß‘Mù8ßÖl!Û†k{ˆ9Tj–ýùžo)í™0f­š~©_#oê¯Qî³Â¶.†|ê¿ØJa67TãFûŠo+’lIa>8‰á:AEÔ<Ï' _ŠIQ1Tk3ð3“ ‡ùJôO-±»Žá Ë3¶ó,¨t65~î¿Q øM—ÐÄY.Ø>qMý‰ë öÄÙ0×#Çc®àÙ¼u”!WæãP×Ôß‘ºÎ`_@…¦T™ùê㤌’¢;Ì ý™‹£™("ð†L“Gäºìxä5õw$¯3ØG|„å=WŸ»«‹÷M#ÛÂÖÔ-E°˜«Ã¶áîuÇ[SGÞ:ƒ}oØCÛG;tAñc2‹ùÉzÞž¦:!BÝJu×TËÎJ8²ª)ò‚Oã(_ˆ­õ»È·tb%­SÕ¦àš^¤„GëÒ´´3H9-y? l§ù»'´š®(TÜ €N ˆžœNÞ/‡ç“³Ë“ó'ÖðÄlR¯ñî]Ó©M= ÛE>ÖZ¿Pêìø¾é`Ü,§Ÿ•ÚN¦zœf" „·8Wß¡€W­PÄ•ÑçØWQ|–¥KÕZÓ£ãcšéþtgœXÉaÇé£&2Él–:ÏC?“8bûH/ì¿ô5¸i>EÊÇ»ñÝÉe+ĈßJK=~8/ãGÆS;èÒÛä%˜ölØydû 7¯lü€a´{0·QjLE.âÙÞTÜ ¯/Oþù}TdbsRÒ™z®²´ÁÚìK‘ç|.j÷‹â¸”B¡¤_“ëWÅÇ”}Ì;üt7[ dLv;züpàÖ3Ó™™‹oåæÛâÿ€'qˆÓ«ÑY ¤S¬=ÜášH“/Sfן…óíÏÂËúL×±g`ˌҊô_¸j²¦ZPf%Q2W/²Rþžñ•ön0n”ˆît1µFÔuÁªlâÑ^Øö^˜úÄ}q5±F¦?xðN•ä…Åc™oÙd{lM>«œUBºB¡Tj/Q£à<|•—q•êɼˆYýÜL³h%zÉ*ŒšUã!›y:WÒ¦¨â«ÎA8 k Tâ4Ïv9Óš&-1}5ìæ,zÇ®x1ÿ¾”å¢uO¯â‡"CgŸœ‹b²¬ÿФÙ3Κ¿fp¹ ØÜxʳtª—2yÂ3÷ /'£«Ñ^<«Ú¬Gu2ïët噯äj4ªŽjµaѧ úUH…®©ž Yl\•0<®Xöt£*'‚Žf>jÚØÛXÿ¨$W<ƒvQ¹ ʨÍÔP&£~ñ[G–eŠ.ßà'zµN% zh=»Ë´Ì7üf ¯¯ XíšZO—~Å:åm;Yû¢Î*§B$­ùe"+Ò¸=dÔžE·=ëúæj YÜÉûö$&9´-‰{êG  µ8¶ùø%ÑŠ endstream endobj 834 0 obj << /Length 1464 /Filter /FlateDecode >> stream xÚÕX[s›:~÷¯àÑž‰©—¾åtšL:­›S»Om‡Q@v4ƒ‹ iúëÏ ÛbhÚ‡sž¸hwµúv÷Ûdm,d]OþZM^]ù¡Ú¡‡=kµ¶¨g{!±ü®¾c­ëËôzñy6ÇM¯yÆ ë‡%«B”OÍSñ b®¾"Š®—K¸8úÅåí¾ùÄ×¼àY#øeKgßVï^]È À (7ÜÛ€“µ$y?˜¾Ò+•ÉÛÕäûÄd9ÇA‘P+ÞN¾|CVkï,d»a`=Ö’[‹:ÈÆÄƒûÔZNþž …:vèj¾bLk'-ëËœ"4]Í•:_àNçêB¦·E^ò¸y¦_K –Ô« -&ÍÊŽÇâ+B˜'úÅÝ“*ïIY²’é|}² Go¢7WÑÕûË™ !Ó,KŽ%n«·×{'Xe7ò3Œ¦3L§L¤ì.åê¬× ¬¹0PªqXç…e%¹ÝdÞˆ˜ž‡íjæÀV©TÛ{~›´qƒ×G¸Áê7µÒ ^Ô¸†FI4¸ÁË7xgƒgp ÜœÁ ô5nJ~7O‘g©©±ÖWí ÜÄyVr…ÇÒHH}]Wi£Äá8w©÷õyMÉ B0'NÍ|Ç3}·cÛò’mÛYžÍò"Wg²uABªJ  &¦vˆ°á…“Õ§ËÅRar­ÕZ•RÛs¦Œ_¿>ɳ¬­’Ñ•þÎõeÕ°à²JK–Èd‹œ:ˆn™Y¹3êeÁ2 ÔT4x–¹ 4PíŠrOrƒØƒ`úÆ\b–¦{]å¿f¦bcé›OõIÔúFÊH»³Ë‹2_£#U$ëÌjc0=©.d Ë_X=° àtÈŽ²“Jm“&sÄÛàqìÀ×NÝÎÀÓ䨕=)UA¨oÍ]d;Ô°ëVdy©’­d—ê1vmŒ‹º à”ëÉ×#‹P;ðy#ˆB¢¹÷™Ì Bÿ™ÌÄuIxÈUÞqù#IT^4ìÄ’£i¨/ŒË†¶YÙ(B±É6%)Rï1ðl)ŸK¬_Æ¡›X`ÂwÉo&Ö#É5ldlb¹ð!¦ÍÉ"Ž2à°çÓ‰ Ðö‘{FŒŒÁp>!צ¾ÛÎ'µÿ>›4 Í< ¬ÔÃBùNML,=$Üžîëcè¾¶>›LÝN‰R°¦=J§fʸùE3Pb²;Áô(WRdÓ_a6Qfž¶y?{² <ÈJ3uð‹F+éÎW}Ê»]j4›“*¾Pƒ\þr¢b‘}¯DÁ£g›æXXXóBöÐfXÖëj ˆ“€>Šfü¸ëݶàeUd<1±[†lÓˆ”y ±nF¡GQÞ7'Çûöèn+Y¶'«uÁCwOýÀxÏD‚­÷cj%ù©3¬Ü_ žr&y]]gÇ®Óm–ª³¯ÍqŸß¿o§š—zCPgLr†_À$FV6(¢¿ÇÈcŒ 2ò#cžo¹d0MÓÍ-;Œx »9¡cÃï -s*ñ^@Ëôв7ÄVþ/U6ýßUöÍà×øòú)I_ öLG½É¥äéú¨KõxÑù~?´ßý®ç˜Fó“ù>mІ—§I'²½g/EþDE÷G1úÛöâlÖëÿ)ióé¯;,>F õGàòÃÛ>§[íÐŒÒíh êÑí'tcdÂ_À: W6ðyÃ>ÆÈ …0rJáM\;ÿf]øØèö¶1¿fÿ5 ’æ endstream endobj 838 0 obj << /Length 1395 /Filter /FlateDecode >> stream xÚµX]s›8}÷¯àÑž‰U$Ó§~fÜÙÍ~Ä}Ù¶ã‘lk ˆ‚œ4ûëW l#’¾„€¥£««{Î=à:;Çun'o—“WÃØ‰A ÀYn€ öœ0–×:ËÄù2½½û<›#ìNoiNK¶Q7÷ts(™x2wåÛPuóÕÅîíý½¼@õàÍŸ õÏßtKKš›¿“ü@ÒÙ·å§W#׉dW‡áGD0’A6ø®FÓWê¢zÊäÃròcå×]àr¢‡M6ùòÍuùÛ'Ç~9ÍÈÌÁÐÈ äÿ©s?ùkâ^LFË¿!#‹”m©`]•tÓ! 9Œ€ïÃó(¼£(äpß~€týÕ‘'ã–ë‡ØØóÕúuj¹ 3ˆ§;ZÎ|wz£r™ñ„mŸf6x!ÏIÚƒ U.9‡Ä+¨å^ŸB~ÈÖJMÚªkE7÷ÝÔµÖüv÷ù·ß¬YØvûÕ ?õÉ€>o<_R?^›$@À ½ùè”C=ì· pJ`…£@äÐ0ˆ, žã1 žFrIƒ0–šëSÉèf¿O½,@~€XjÆõDz`7 @ ¦¢N€vUµúcñÞ"<–:8‘¡fB+<•i!–iõ&IΪL³·ä5XÂòÝUöqG—k»ž)cu'w`«ù¾g¹0:iT¡ªI¾±Zð’쨉•hT{~H“v‘KJ„ Ò(›|–ÌyžjÒ­Ÿ®æ€EÊ6V¼–}Èo ö{MÚ1æ‡U#ßGÛ–Ó¤K–%ÆÓ‹ïL6éÖLyŽëyvâ{u ãDþ¿:2XÇ#@ÆÖ1ĸٳ~‘*u±t! €‡|cä ®]Cøð—ÔnÏO0kSÚRóš ¬SVíiòZ=ù§O¬Ë¼ÉZ %ø÷ÚF¨¤öªÿôcÌ‘{Ù–<;ÛSAÏ>È=þêÏ?~óŰ÷õÑG vý—||üæ~Où endstream endobj 844 0 obj << /Length 2277 /Filter /FlateDecode >> stream xÚÍZYoã8~ϯУ¼h³IŠºvŸf=ÙlÓñ ô E¢beÉ­cÒ™_?ÅË:,ÛJ<ö%”(²ªXõU±ªìlìÜÞü¸ºyûS;1Š8«ã(ˆ='Œa ‰³Êœ¯îíÇÿ,–ÔÇî-/x%RýrÇÓ¶Í“}«~)×/¿bßÞÝÁ@ôÄŸßë‡/|Ã+^Ø…’¢MòÅo«Ÿßþa'1OŠÁ"Š"J&é„‘ûV!•[nÞ­n¾ÝXƒÒ =ßIw7_ÃNß~v0bqä<ª•;Ç'Q/€çܹ»ùå÷•‘ž–¦OPÌ´$_xÓVE­E†ÉNsØYRŠ(µJ»»[ß­ÿùéÃç¿[½Ó뚎<D=áßÛ4åu½isýž–»}ÎQh‚åÒÐX’Åž×güñðþ¸z÷ßÕëØG##Ö«c”ÊÚ(³2 _ßýÞØ‰67ߊÒÌݛ͉’ŸgFÜ:—†ïÒ#( 5óm]¯«d¿®Å‹%Á._çb'mh $…"inŒb_šJ·#ã{(ÄÌ>È€ñå¼OD s(Š£Ø©¸³éY{Hmzö˜O‘PË@&rõµô5ÒFô-RçpèÓ PLã¿@XE°Ú:úá‹q€ ²)ë¹Hàû(òµI?}X·¢h<í¤Ó,&­Ç °÷zÊÒ¿R¹W û å2†¢˜;Œõ•¾ž¯ËëlæÇ|NšÈ!p¸0”ñ€k~;EÅG^äôîDQVëºIš¶Iä¾™ëÀ†Á^CúWBàja9£T2 Äp/"<Õš†€\>ed‰–´ù¾Ùzæí¿7뇤ÈrþbC;ò_ÏCúWòjaŸaHÈâÐ\Õà‚³²YWüÛz“'ÛÛG(„àÕl2¤¥M®vF|µ6!aºøú­ÜÏu¹ óR›øqˆBáµl2¢M®ö6Áaÿ|FqÊ&ÒQʶٷº$_l›(@Ž^Ï6CúWÚæjaçÛÆ1ÂqpÎ6J‡qüÂL" «8e>Yüc¶ =ÑkêÑx²`†Dr´Hà‡©€œ¦~£'EžÛº²nsS.ŠÂ”‹fÔ›ò Y]ù™ˆB[[rêqWV¦æ –ÅÐóuiúÔð$ï•Ê«¡,ä¹i¢¤„';˜æE¦Uè¹›²Òm­4DªžèÙÔì”1TËÝ®-äW®'JYFÿ.ÿpCo_•M™–ùÑ^±Û—µÙ–衇¯а î-– Çî{C‚É}Îë)›5¶ØBRi_›*ÙîDFÙš[mŒ\ ¥ÞrIçé`#y*žÚc½ßÞÝ-uKˆ„pP}ŸsÉì F˜O”yá¡âRÖ$pï» -ðUw `lߊJ¯1˜‡YéY©Y  cÔž™äÂûåÓgýÕÌ·Üð|Ê0ClÄ"½{Fn(ņ ‹®$SìkÍQbÍ4HÆf1€”Hëx/Û¼ ðhõ_¹i»%Æ<dt¶Ò/R´7£^Mg|©H}n‘'÷"?´óÊپ穀@MÓOkËÇCmI¸X@ ¸_ÀÁ Ûú½n—~WRÀØhµ„Ìú)Ìe¥b Oú\ðpP“Ý•Ø]àƒ·Gé,–̽Y,=Ål+õhd7ŸõÐd±Ò弨ªP*]]c«hdâu-t'TÆhŠ÷;ȘŸ<Ùb ŸËÂî1qû„åÒ맺áæ8\¶UÊ-¿f@ Äî ”ý8¼:¤Ín æ%£Äý—¾õ¸ük£xÜàvÒŒ&#vý ñÃ\ÑÔãkÏGÇ‘¯I„Ñë|m‘‹¾6ƒÈ\_#rˆF †“>F<~q^‰!8¯wÙÅH õIH‡·€ê?ßÉXË{q>,°Æn ®Œ Zg|T»ß‘WN»…ºN„ÌRþ¯ýâÙ=r Ir[Ì!rÑ-f™í™@<Õæžt8B!óÿ’äšÐQF.¥×C'9üg Huh¦ÀÑï`t½»M×g2MÁIOãPú5û÷OÃkí Ìž­™#˜ÿ<…Ë(›Aã"È.ÓcÌv§Ž~—`ÅÇyýœÿ ú…˜$M endstream endobj 861 0 obj << /Length 3110 /Filter /FlateDecode >> stream xÚµÛrÛ¶òÝ_Áé“t¦bð~ò”‹›ãN⤱:Ó™´£¡)Êâ”"^œº_v± ÞD¥¶T?‘X‹ÅÞÁ-ãΰŒw¯—/~òC#4COzÆrc¸žé…¶á‡ðô…±\_fï®/¤kÍÞ%yR¦15n’¸)ÓúA·Êû4N¨ñ»åZïnnà!ðêÓ½|N6I™äzà‡(o¢lþÇòç?–žd84‘ŠGÂx?˜½ ‡/qÊÅåòâë…€1–!:Âa¢íñîâË–±†¾Ÿ ËtÂÀø¦Fî WX¦´=xÏŒ›‹_.¬£ÌðÓr _ø¦ç…DÉ.úk•æû¦^UéßÉ!R:¦”áù)…?¦ÃîÑûµM/ð˜ŒÃå¥ „#®mº¶C o¯ò:™ wv—”sÇšýHÌÜëtóÐ1}¹UôÁ: !ÌÐuÛ¤»fGcÔVxzRUÑÝäµU5¨ÞFzxÄ’¿å®}™T ¶žÂP4讪VßÊh¯W§gQ®a'´@1˜îÑô»&*#À}@E½eP²Kë£kÿ90nUÛ(ËðUéðÌ êÊ¢r.ÅV‡uò)ŒeòuU4u«ć‡:©ÌC°PëÐ;U#Ñ3 VrÏuLW°B|Nê¦Ì+2¢ÐééP-…ikªÁ"W7«7?|z¹¼¤ñ}ãÅÙæþˆÝÄ1hƦɨ»}–Ôi‘›K.ÇlÆòüþÂ×aíëååoˉ¥C×ô1Zz©…[j¯±Ö4°üUk@“q_^ÔC½ŒýÉz’\^—Èõ†|R´®.ûtõùòíÍBº¦+ÃcD¹*ÖUݧå¢4â &¾~õvõËÇOÔø¾é[G‰©öIœþnYR³‘ V#¾UÍ~_”µxû0²´]ƒY¤ÕŽi(è‚ÉX€ëòlŽhôÑmp½ŠK…œ8:2å¬Ðb,0.tÃøx7rì6`tàáš~¢ù ÜX“cH3 B£LŒMÏ“±MCÏ8?á8ø\ôd³Cô:=f>*Ï A1Î&Uá+ï zù̱´PIÒé¹W¦¬ƒ?¬š4¯m ¿ÓkLÊNØfzòl¼â?“¹gûî‚… Z™°‰ôl|YxeU /pT6à¤BS@ÔYÓe)þç×´£·Kó¢\UuT7ÕˆH9iµðOÊç“üÿ™’?›X…Žy*¦%/liZµÐ§!TTõЦ&D¬”•d•®WœB骚Ž{%§ Ó !?ÿ\Âá?O˜çûa:GH÷4iæÑ.y¬(×I…Yƒšs²aZÖóºþ3¥x6±O‘bg·Pž$ÅWoŸ&BL£N¡o™–ã>Ÿ‡øÏáÙÄ>"ž¶"ômÓ¶í. *·×àÁö±6ÖÍ8Yå´Ï&Ÿ!þ3ås6±O‘+LG¸'ÉÏÙûE<6%ÅÏ&ž!þ3Ås6±Oc™NûMìh&høÉ‹PåüúpñI¿ÈßµþtQª ÷ÙÄ8@¦Ï%õ)B„™ú!uXUÉH„žcºî‰"Œâº‰2•aœ|p/ 2Úg“Þÿ™â;›Ø§ÈO¦ ÿŽTL O”ÞAœ‹O–¡Eùì³ÉpˆÿLžMìSdhù¦ûh>ñ»É8È¿z¾|´ …i[ö9Ÿ=GÏ£5?;¦ÐU…Wëu5_ØV8‹à!(-NrÐÌl‘dÉ^©+;ØQ³fÎNÒ'èaO ÐØŸª^ý{ðÓ³ZB¡€:ö*P±!H­±ïË4Ó}”1¼ ð·m Ç,Z‡ VÅ*ÔŒë:ïnnªTi o–bÉŒ°ØQp×TuÛ]TŠ.—XäͲ"¦õ=.:,°P ÛYã§ÿj9=aR1pCÏz›2¤„ˆœæ¼qÛÃbÛ\º³{DÇœôfM5õ¶(Ó¿‰ƒꉒڦ,°H¢øk“ûî°éMÈ©¢qª†Oæ)ŽEöÓ†¢2!0Õ¤"-­3,së%èBʸÚMáp l§9&ùZ p^w_¸Ø=( uDÿ!+îT%±¥ÑãjâLêoXy(Ê?˜ù¦Éc”ï@¡tf‘RÆ`V5JmXýá¡Ç±Z)”ªæ¤T7Ç2ìý\0#™ô5—”?ê¦+!Ã*¹â7¶u•E[¬‰™*r2î¡XGuÄ4—t—„QU,]™dl@Q¼˜Ú{'vWíSºAgãüO½S7äâUZÕ<3P¤ €m‹…[¦ùUaqÚ³tCp84øýƒÁÕVWî.ØÁÖÜ{N¨‹ÄáÀç¬gÀ§Ž4PJìwÊÐm1 ¶Úy‚^µí ÉÁðƒ@BRV¡µzƒEÍë¹íÎ^}¸ü‘à„ÆTfž‚j]‚åRm †DÜQy“ Qx î[ëÁÔî̓ڭ/Å1\ð·´]½§œT§±ëdƒ­¨ÉxÊm2©%Û§Þ§¨˜-0¬¤ãÛ>º*½SÝž£DGÑ;b?&º˜Ù@¦¯z¥Ña°+xàìC½Á÷ÞWÕFžâ“Äpu}µ¼z5BÌ–—Ô¡É¥¯?"–ÿ£ÛÜÿS$É#®iÚU%¸G{¿äJ¤½BÊÞ¼¹ü´Ô—!ú½}Â'5•|ªíõ…G>Ÿ\kNb¥tQ!Äs•¹a»©tÄÐ]T¦Êk@󖟃B6t‚ƒ¶m‡î¬JÕ…µìAÐÄñeBKf)) ^Hñ†ž/œ¼Ž2ð’¼qô \·ÍÎUΊÛ:C/…à.¶C_›cS_gSõSpÄ.öàrV=TuÂ@8Ò1Òc²ã³›bÇÃóÔìE‡lŠrò¶ ƒ¶t%mP¸®RBçBÁ´)¨e€Ö(ênݧõ(oÍU{ìÞ2pGy›Ê:1õ8‰àèí™IÏéR|Ge’êR¹\x¯ºü—vxØ~Ÿ=Ph’ÒÂøN¾¦O9ŽWzý=†Þ(K+ó °Bd3A#|ƒ[}´“{…£xÚ%jCŽÇG==´‚G€ò#@'ž30Õ¬šFFôγ;²¡=HÚµì KmÑáhÕï঺݅Dl •æâ;mUBäȨÛîæÓ7‡#„6° î«§/¥ öêr”í¥ ÔB§š˜w*ÙðùfJx4´P/¹Óðûþ\ä/ÓÙØ8)r²Äé´«"ã—`ümªï*Õ±›Y·*ÏB‡SðsËÌ#HÍ¡JÏyàKò^ "œœw°'Äç„=4Ýí’58Aå°)²¬P )/ç ‰8DÚ¿­ppÍP”èö^P£÷¾Õ¹ÖHì–ÎjÕµ­|=ºhØ9M¾<7å(£0¢l­Ü&c(8G¼Ëä =åýN¼•~/ÞJßåU¢õuXÅ.%Q€´.Ê÷Ô-:²+¬= ¨}²| Â:œ©9Y6Ø?®ùt’TËo™"8BØÒUZˆÖkm©¾×ÒzÄL™ÄìaÁ‘s)‚¢åsF,À§Jf`ËSÛMð MnHrîœD†óÁže(•+ÅŽë_ß¿§7Êýá…8lZZ5i ÞI›W;ÝG%Ä«ZÉš|‘´Ñ¼úHjõ¶Œ©¯"çüÞnyðŽL—Ï–ß¡h ´‡ßR–î_y9õq ZÌÈj÷…:É “Ùƒ†›âÀ:K „¯å]w™™Wîx5aª}̯޽Ouäæ–­{½ë‡]*òæóåÛËkHœÞS‡ÚU0Þ•ÏG6?ÔV27øCÿ¨F2‰ðÖ³~:×ùáps~ÈB'–†Ë>^9¥=PNhB,Ê5XM¦o‹K9»ÈaA¿rðž%†­ÞaÐugê³ä™tê„©:îK} –mà€7Þ>,ÅHtJ$ínxEI¼ÁÚ ù \˜èŠ—Ø’vJ/$NdS8Ò é6ÉSø?$ÓÏ endstream endobj 777 0 obj << /Type /ObjStm /N 100 /First 882 /Length 1633 /Filter /FlateDecode >> stream xÚÅYÛn7}×Wð±}—ä\HF€\à¶@ IÚ~P”M Ô‘ IFÝ~}Ϭå@¶¤„¾4ìhu8Ï g¨¬â‚˪.²ºœƒK¥¸¤äˆߣ£œñLŽSÄ“cDÎì$T<ʼn§ÙIÍ£œ«ÓZ\.Ñ•]Ê®0ð%¹R€/äªé-ìªé-âb€â¤&˜æK¢©.‚Ð(Þ««‹‰Í ¼Iš+»H°)×û«½Ápe›Ù„=9Á&Øm!¹BO‰:2 cQSl  B…Õ\ ¤B Ä%ØA!`h Ù¥mÉp]åŠQ ó”í„¥äŠEJ4!Ùjí'ƒVŨÂö£ †–ˆ·• 9b®jÎŒê($ÍF”! ƒû( Þ¤„Mƒ½%Ùî1†ÃJ"ø¦$qÄ›ôp6pv$Qà…7"…½DŠ}(0— sUEÁqL†‰ „â'Çì'P„Á…»Y°M…*ÈÂ4*p+¶±0è“£ð3—|M XJÒ a ‹:‰¦ 8€ l¬ùH´  4KtBXJNl-°“ ÀxÃægl°ˆyC@ZÍ&`RsRÁ@[ì x¯>. ¾ £Sà ØRj4J€QØrMF lƒ¦lS€öd M% TÙ(Â)cš*×:::uoÿ¹è]÷|>_¬GÝ›Ëwëáû¯³ù_£îÅbù¾_ž„e8ë~î~é^žÆá˨{ÝO×î”y¨U<‰¹M¼ñˆBð\Àž»£#×½qÝO‹· ×½r?|\­ÆÓÉ|1ŸM'ç³ûñ|ò©ÿÑ={6Âçñë~ {B˜QL>ÁÑU}¦tРeÞOVýøÝå‡ýrÛšWî4ùÁ½vÝïüéÆ1údDÌÅ`~y~~v,êAÞ{anÃÂpP£›=#îš°Y=×F½*^¨´aöæ;~8^Ì׃ŸñK¾sl ëFDn‹‰Sn HSy󚺓åbú¦Ç¦ºîäÕ±ëÞöWkwv›''“ý¨{‰ ûùz…ÌlÜxmlX-.—Ó~5äèáÕoýûÙäÅâÊ ü‘*`†…rô¥‚'“%T®|kÙXÄÖþ«§ïÿ6xã#%6¶aô 7ê ¾"‘5acõµ4ê Õ#Ã7a‘Ô}@*jÃZ¶hÕ«>„6{qæøÀz#ö¢èSðõ¡­²CQöŠ^'É&·ªÃL:{š$1qEÝaD±š€¼*Α<ë×Óèbö~¼ê×wó(\מG·Á7¼D¾+Ô…Ë$5bÙgŽmØLÞJÈ&¬&og{ –$ﹽغçF,y+ßš°œ¼•VMXJÞŠ¥&l‚½ÚÁÇж(j}ä¶­@'áã]ê|Ó¨/ת¶£Þ èGFýµyVÈ?aôß”Pªæ<”ëÈÕjÏœ½ÔúÕèÿ º„. ‹¢˜=Ú)k=p Õæ"놚Ïô[à £"Ì =gï~lD$XöÖ×6aQ}ËžÈÚ‡­ÉËÝœñm íTfÖç=ª2³Î³ùD¹Þx%[Š®X¤ÝÊmPFaVbE\H© ‹".(µaR^h³W+bŠïY=žÄ;Œ ô¸”hf’Ý O ›g|ʉ~IÈ)N×8ܰWë³Å¥LIýÕÅb¹F6šŽ§æ„«õ¦Il¥Ø•ŠõŒôH((Šê쫤o´7Ö¤„®SÒgkž$úŽˆ^5wTO„FDŸ«éð~Íæ³ƒ»e‘DÔx†´‡ÒvÒ}pX•ݰÒû„Uáp7ÑRnL´_^êC—Ä»™‚ÓC–´•)øi3R~DÊÕŠ¥êi…] ú’_…ý½œ\ŒWvv>û4Û¡Ó=Ê”mðç¤Â¹‹^!¶êUowÌMXôbmPd«Rc–¬µImØd­ µa£µ6܆ hmD¾gY¥»}…ÔG††\wPv;ý”· Ø\¶?*BEí0°[ûÁúÃü 4üÈ Õ쇿L6IŽ8®òW-šL§ýÅ ÷(Lu·\lú®6,©ûb|/¶î^Â&T©QïЕ5Ú‹Î-Å&(g¥[ا=7‘{±™¼ý«Ø„E@™Û°èxÏ ç^,NŒ[·÷ÿ[áÇê endstream endobj 882 0 obj << /Length 1454 /Filter /FlateDecode >> stream xÚ­XÉrÛ8½ë+x”ª" Áåè8ŽÇ©DÉÄÊ)“RQ$laŠ‹BRñøï§A€ZHHdœœ ÆC÷Ã린óè`çvòf9yýÎ…õœåƒÃ=ä…ÌñCxúÄY&ηéíâëlN9žÞŠ\”2Ö/÷"Þ•²~nßÊŸ2úåÌñíý=<ˆþáêó|¢ykø1ÊwQ:û¾|ÿú]€`xLÁpŠÈËÀÞ¦¯õçjÉäf9ù1!`ƒr wâlòí;v˜{ï`ä†óÔXf'QæÁ8uî'Oð`08A¡«‘l¢d6g̃3bZVµ~É¢DèQ¤q”¦zT V ³|tôàËíÄùÖÌ?VÕ*Šìd)Vq)»&pjU 6~îx0­¶"–Ï24î7fã*ÊÌhWE-šÜ ÝFUµ_©Y]¯ŸV‹ãÓ«7Ƹê¸LD¨’U®\€2' Îu,¶Q 3µ(ÁsuÒæY¬ëHæz™§˜>ýo›ÊXÖúuV‘×2Jõû°¦ÂXgë"1g„×D<ÌžF»Ô¬]‹M4£xúSåÌÅMlHÐR$ÌFVÃ]LÌ7ÉI’ÄXBÓ^_Ls ƒ¹&Šñì¦ÊFmZŠTDÕEF4¶E®ý69k÷khÙìvttõ®Žö€}2¦ß=€‰Gܸþróöf±¼»ú &èT…S4T»¨H«‰ÈLhÊ2ßîêùªµš?°EgŒz\Ý5•ù|ñõƒÙ©ØÕVÙ®9X¬Í/Õn;·3•"AFVÈ‘¬€#(ðµÙçVµ¨€ •^r¢à—qß™»nD “yQ®ª:ªwU_‰(u¥ãÎpßëJ;’"ì0ŽÏ3JÔW Ê@»0w< ì›\)BȼnîÔã!žà¬H@Z²tÃòQÄOYeÚxŸI#è‡ótÆE¢YszPæBdCï=øðhs.å‚ùþ%Ld÷|¨€»ÔåL}/°8anˆHÈÇ8¡äI?md‹C¡¡ˆ»†3ý[q–8. …ºs1ž$$ˆl˜9˜"Šýs”¼40d²ª oJ%V+¶µ,@¿¥|Ù*MW\´–v„d‡DŠmi¤L¶Åò~y×fìþ~ö)²}2º…JóÕvÜjñøûìañ¸ˆf:FaÚ+K²aµ0¥Pk»Ù µ1”9’ܲ#ËŒþàY“™‚–¬Ê¸™}—¨×”¯XÛ.à´W"›>ôÞÓ+;'Ðw:˜às>Üê¸dèýæ%ؿʉÜê{Á‰CB€B÷'"S—à PÑL㘕׉ñ ¥¿D|<)™ÐÇÿbñQÌþ´§ÅšF³ÿ¥Ç{O§œHOëÃ?ïã²ô\ãä¢ô\áäZéÁa(/J¢¹hDÙˆe›Â冿IÊÆµa)—uˆü‹ÊCo¥@Ãë²ÑÎŒþ:|Ó—ÏÜþòô:¹ ´`ð÷.Wø¸x¸ìãø*Ð3tò» Á „ä=?«ü~º²ñ endstream endobj 890 0 obj << /Length 1382 /Filter /FlateDecode >> stream xÚÕXÛnã6}÷WèÑb®DêÚ·lâM½Hœ4vŠ» A‘蘅.^QÚlþ¾C‘’e…NÜ -[—á\ÎÌqh†i\Œ>®F>y ÀÅ®±Zދ܀^ÿže¬ãËøbq7™bÇ_М–,–7K×%«žÚ»ò‹©¼ùj:æÅr –|pz3—·tMKš·‚WQ^GéäÛêó‡O¾iøà†K„¶‘oùàdã퀼ç?È?‹%£Ùjô}dŒiX;Ça!qŒ8}ùf ¼ûl˜È|ã±‘Ì Ç2&.\§ÆrôÛÈ<†ë#Ó1@-ò_zÅxf4ÞðçN`l#Œ}Ã%&";ô‚ô¼qb!Çô”Ï­cPbƒ}Ï!È!¶´/ ]ÒJÂW¬åÿõý_4VÏæçüD^eEÂÖOןOÁâÔ²Pà8RS±­X‘Gé.K«JK\dÛ”Vꎃ9Ýze\@åŒg\Þ¯‹R^…†¶®Aé|Xni, ¤±º¸»¼T¸«¼æE¥¼¤ßk©BÏ«ŸØÐÀPõo¨þ#Ó#+ð^Òa(qì®÷ÛÐÆÞQJ@Ôs}b°Ø9F ¶ö=9Ä$Žm#bH–3(v(ß°b…LƇùÄv 2±ý ¢®‡ˆ‡_åÄ€NÇ'óZÝrÆP´¶9ÖЇd›>ahêé´¡FU*i±\·¨c”k¨Œ°ü¡¥AÌÏŠëZ¡æhç,MõÕ4±Þߎ,ÑdJ,`ëõn½Fœ Î À¹€·/)–BIA¹¾•<¯·Û¢T”'ƒÜ²²ofý Þ'ƒÈª5ÕA»ð,œ/ÎgŸæ‹ùjÖK–ÆÊý ó ¬ç„¥ƒ¬G_J‰$¬Ã|õ†îzÆW6üû/ëx¯ŽQò*_¡äX¾"ž‹Ûmw>1ÝGW8pëXÿ]ÙŽ Êœ÷MWî@W2!ñv?®kÛ>“©}É;ä.÷ÿå.çp×[[Í·zÓ–š°-HWn÷¹Í»×—à3l 0¶vè>×W7—3À¦‘ßëcŸ ×wÛIî5.ÖP¼œ¯ëto†"É©Ò1µ<Ò7üñô<¼šýz¬á»<šà6á,îS:cvÈS^©}î?ógqz5[ýy£Ã2=äC§Vß?ménÛTÐbT`ª°ÊE9„y”)ámTÂu7n0>¨ Õ+âhÝy!cý}bY–ì¡ÎpÊè´ŽŽÚk «²c2€ûŽŸßÝ\ÎÏNW³pv9»š-Vº4Ù¾Ý à@ο„ì¢âE”–4JžÔK™®^åò)•\'6ÑŠ‹ªÕØ•“|Þ+6ñVNƒâE!Øì‡ø¡e s¥ iAÓÖã=¾¨y7úFy2—»£™--Y¡EÑÔ%þìvv¨ÍO/—áì›9Üê„݆mëx÷ T¼5˜ìy[áuš µåÍ(Iº±›Æ‘˜Ÿ;®XTLÕŨÁwàP©K‡5/®›˜5AzòÌ`ä¢8Õ#-»sˆ:OIô¿²(åò+O•yø~ ßÛÍü,oÀ …á½ÀáIœGMà+³‘çcÚcÝi™Q`Úo9,ûj'j endstream endobj 895 0 obj << /Length 1762 /Filter /FlateDecode >> stream xÚµZ[sÚ8~çWøvUW_fŸºiš¡Ó¦ÝBŸÚã`9ñŒ±©/ÛÍþú•, °`py²l¤££ó}ç¦:OtîGÍG¯ßy€ÀÅ®3æ7 Žˆ§‡œyä|ß?|Ü`Ç÷<ãE²T/3¾¬‹¤z1oÅ?É’«—ïÁûÙL<úðæóT ¾ð˜<3?†Y¦“ó÷¯ßùÐñ….‘jPùBÉFêŠùž?~­–KFwóÑÏs ƒ¶Š‹…„9ËÕèÛèDâ·÷4ð_Í̕ظbœ:³Ñß#¨AÀäP>îw%àAêx €JÁò3C.Àˆ:~à܉Jê+ŸŠ_|d6P‚‘œ=T¾¶L[¾±BŸve¹ ÀÁoP¶X<9jðEsQ¸!Ýå"¥»b§‹:É*¢`ß£Í m]ÄøzÖmËhÝÁÊža]BÑŽþT–‹$ûY'_, -_+¾|nÙÚùvãBåãú{w¯ƒ09( "¬¸Î Ì úÇ!) ßÙ™¸J²¼X”UXÕeG£ñ+õá4 P 1W£A[þ@ V¶§Šì4@"Ò3Ïñ0„i,ó¬¬Úf¹¡¤LC•$Zô\ÒL³(åÃ}€ ½Œmùa¬ì0"H€/‚ñÓôm¿É2$,ª—õÅð¹u¯_Gþ0ø†+Û#ø (UÙFã,\ñŽ_9,HÔl}c¨˜º3S ¼6ßÈ÷®[[þ@Ø+Û6×õè± ¥±a\–ù’,©’°Ù/Mb^% ôÀØ¿„mù!¬ìz>`ˆ] Âp¹äëß‚ «ªá«!Ø–?ÁÁÊž ë&ž›ØÙÔu>íEÐÊüH¯'ŽzÞVf?ÙìþÙCväüV²ó<ØÇ»¢O#ÌôNU˜d¥j½×¼˜`8¾‘É<Ì’r¥>'Yœ«°JòL}óºÒCõ6à™H)Ð;ÚéÜ¡sCðÍÝÁç  ‘u*±!bãR­i)+‹aá¡,bô@µß2$Æ´ ŒaᓤÛî“v:„ßuu·¿o*,º- ™Ã|Aum*ÙÝL³ŠKŸ„â mN¿Ê£$~i®6„Vò¸Bû€¹jÝǶ5Ë5_&ß!ÄúÎd{œÍBfjµˆƒýs*,¸œs+ÃÅz¤ÁÔÆ!È•MÝÜŒ´íM±×Kˆ˜ê¹¾E¡¢r<î!£¶&û¨¹>˜! qwœs§±°2†úH4Uø¸%=<ÑŸd •V¡[Ê´º!M˜‚‡ÑÎM˜ |­s3¡z+³0æ…öÖ*7¿r›€*¾å ¦Vû.*ÜŽg’ˆñ‹míýl¶¸]<|ZÜ~¹{{÷0Ÿ¾ù`c¶Ñ@ßì©Y3ˆx<;†uZÙ¶ÛÔ2: I¶LÖ:–ØÉ>d{ä§Â·ýã"N“¿“äï!¤/ù)“›épÙêÉìÌ'`ŠŽ›‘zÀǧ™O=Üä—óEiåüÜNÚNæ‰ %~='êÊiŸ:ÜT>çu©ñ£u‚Wu‘ñè»Î6Ë>»„H‡²«‡Óì:-¤/»ˆð(hššMÛheAˆè¸  D}†OSKõ=ܦ–êƒ[)xâ2U4w1Ï×’!aÚ&`3hŽ¡I–—VÆ$Mà4ÖØDµmDµ- Ë’Ui‚­ˆn²BT!²,ó¥x<²-ü•TÏf§¤ì*¹ªËê»ã‚sCÿ®Âáz&Kå,–pƲkfÖ¥±ÉFSé…iºÉ?}d d´);*I° žò°ä h@S,í–ËÀv“¥š-¾~ø SN¬ “Wvo2Ò1¿€ {N.eÐ`˜÷qÒÅOËèëá(ð€gÊ—w V÷EÃu*bb,¯Íü“îN h±0êWv+Ÿo>´¼ÜŠ­Ï׫GCõ\3©äË<‹Êmâ±xˆJC£€ö˜4µSr%:-ãDëðÑTwFmí${²-/[Zª*‹ü[ië,2':Pn6ÉVǨi|t}÷ Ë03>¨žiž=ìÁI„•¨]¼êCóýcL­@$ñ T?nÅÒÔÇ›àÚmwËÃ%ñI¿ÛÛ»Ïó‰G íI–%ëM»%†1ަ\µJ»ëÿãEnF)¹Z§|%N¼Íõê(çå6Fªýêõ:/ô‹²ó:)æƒ1M-¶5uùê(aþ™`6Óš¶çôáíÝ»éÃt~wÜyŒÅ¶µ[«…Ù&[öŽ;fè‘Îf{¹Aˆ Cë¿2Næ†Ó2º¹Á¤ä½{@ŠAé%ÿGñ?©1ÔS endstream endobj 910 0 obj << /Length 2231 /Filter /FlateDecode >> stream xÚµY[sÛ¶~÷¯à£t&bHðÞ>¥®âº“Ø>±zæÌ¤ EA'©òÕýõg ð&Huì“'àbñqoØ]ZÆÖ°Œ›«ŸWoß‘™‘Ï|c±1<ßô#Ç"ÛX¬Ï“›»ß¦3æY“žó2MhòÈ“¦Lë'5+¿¦ §Éï–gÝ<>Â`Ó»‡[zøÄ7¼ä¹"üçMœMÿXüúö}h!Àð„á†Ì í@ nôA8yKCÀpËÕ|qõç• 4–awÀa£ãÉþê󖱆w¿–éF¡q”{ó-“9>í®HI Õp“¯Õ!2ÍùÕ'éï–ÅøZŠ'»8O«½99¶5¹Ý\Ü?þÎ$–“4fE¾UVZM¥Î®‹þ7Ÿ~”R¨V éæTÐTñ–_Td½K«‘h Ëéƒ/¯—·w·‹ÛwSÛ¶'‹ù…a´CpˆËxÏk%aJ2ÒÜêVšýó²Ðè…0îßÃÇhîºÝë‚WJ9ò˜ª9ŠRNḢ´<Ëah”E9tõ梱|2og ¿$ÍŸçïQ¤óË~£Vòº)s¾–RyDsÞH¸ûíÇK–ÒJ¡ä6i‰LN"™ãBDŽü—D²Ž‰ÏL+pï2HÏmó0¤º,x üPÃÄq#ÓŽ¼ç0aöɹ«Á BÓó{Ñ`I~vöNpQH^xY’¶˜^üãà1ßtB¿»¶UµìP,kÍ¥ ³ëþ!6üR ­¿)öíã§¡7w‘í˜Ö;Ñ·Þ{)k޾ÏG×DËhSda‡;ãÝ^mØ:K÷¯ÖëëùÃb¸“ „?Ý#åâSfCÒ5ôÂ/)f½À_j?¡ÝK®dªäZ–zÁú$BIE©Xäö¬ ð3Ækwß _|ÿñáÃâ” Xgè˜~è«Ìí)‚fUmuS°ÑîLÍ‘3Écfy9ýƒïî—ןæ?kÎ 3°¢Ñ¹mzSªÄs}¶¢&[¢L9à¥bÆX幬Ìç׋ÛÿÌäù˜Ü pÛóL×^Œü¯¥Eåh…ò¢IõpÕi¼ÊÇåü¿·z9ÛF]·‡Ö‰lB‹}´8 Å…]2“ÐOüQÆÉ´~Nf"FKÊvàWà)Žm†Ò£0ËO¹l^BʺìåtTÍ`äVéù•ȰÁáfTá8`h®Á|×ôApݳ}“Ù°lFad”ÜØôJš!7ýêé0úcpÛHýZþwFüU9öœú¼|3bÑÿ¬`Xn zø$ë@p¡X·0Œ‘+/¯ûË&Ík‡JQýZõ¹ ˜EßOºCþ¯”î«Á~ƒt±Ì8:NÏgÀ_ú¢6>Ï|‹z r}|ÔY-vŸbãé[DGþë’,£G¸Os¨ÿ+(5šj„ˆR„çXŠÀý~F0`ÿJx-Ôg˜€z&„Ræx¦ÅÂÎ’ú¯eº^ŽïÃeäDÏVÜ^=JiJKÈ/×±þ˜e€ø»)pÈÿ•|5ØoP!:–’5ªpÕl #©Pç«Â›ÁWyy( Ì·–uñ…çc áMùãsµ9N±×\•£ñlÃÔŽ|¸ùeŽüPxÁM×"isCÊ`ìZ¸(R<\ÝÅ%6¹ÄD50Š´¦(¿ÐlÅë#ç9MöMV§SÈq¦3Ȧ˜B‰u)8^ɆÀ‚Z:ð¦,š:Í%™ÌoÁÓù$q–=©sh”Õ®<Ðö˜YÛ -H]» ;Ì™Äj<²4¡ ,°Éq'ÒWñކ D‘É%ùEDZò„§˜ÜRöXIšC1!¤‡3—óD±wDMÅ«ZrŸ—G Ü’C×H”zDÜEÊg–D²ØCÒè¸"GÍuÅ­È?‘Åd €$^eiµ™©58L’4¹Ü‚¹#Rî‹R­»’[…ÓtÓâè÷‰C,¨·œJK[¹ŸÝs?׆9ëIº:LT»kYó¤NÊÁò£î»®õÚÉ<Fb€œ˜¾Þè`m”´ «YÀ„”Š$%—çŠUZìGɲø‚®ÅsšŠ6(Ó…µãN­¶åƒØ@¬P:é^'¢KµmÃ8— cnkÏXp¸nëˆhÚ³±ühƒôº‘¥àÑ8ïSP·ž^Ês0Xáä>'÷.†¯•‹áRšƒQb…FNƒK‚Q;“mÏéò3h¨ýoV’m÷9Té ~µ^@H"»G…êí`¹÷£,¿U»vU¡7粋ëšïU§|õ4 âëÚ» »öŸ@Ñ/îG¤ùºý¢ÿÛ0®7¢M³®uÕ+´eUÏÆ k±&[h ¹Wu)0…Š©2”ÉÆW«f¼*ZYIío™Þö¡+ˆW+ ¬:”BohÊSiÉðK1 ›&Oº/|EgE"º…A?äâìPÀ@F ÿ\‘|øRé.xJ·- 1Àx"LX[ó$­`&|ؽGþÄÓ•êq›<­*°»pÊLN’ œj‚ñe+úª‘ Â ™zÖ¶LÕåŽ$]L'“ŒU{°Éµ?¶È<ã}׬*š¼î~‘}v¿éâ²£~~œ4R;v={±&[È#æ þë~ÂBÕYîKþÁþwó¨€ endstream endobj 921 0 obj << /Length 2255 /Filter /FlateDecode >> stream xÚÅZYsã6~÷¯à£´5Â$À#ûäÌ:.§æÚ±²IÕ$¥¢DÈâ.E*<ÆÑ¿O7Pà¡1Ç×¾˜$Ðh4úüвm=X¶u{õãòêõO~h…$ôÏZn-î/t-?„§O­el}žÝ¾ÿe¾p¸=»™(’ü¸›ºHª£þ*¾$!?~·¹}{*®?ÞÉ—Ob+ ‘iÂwQVGéüåϯ l+1<Å`C€,z?˜½–ßÁ%W7Ë«?¯(ÐØ=  ]nmöWŸÿ°­æ~¶lÂÂÀzl(÷§6q\ÞSëþêßWö“Êà”„LJ²Üè.wfIV‰âPäQ–r¤Êÿ7§öLdøéÎöÑQŽoò¬Š’L~”Jk‹RdeR%s‡Ï¾Ì)Ÿµl·y±ª$W P—0$y ¤ü+ÚRE¾)އ*(¢Ãí‚CR$<–h2_xÔŸýºKô¢½Øì¢,)÷Jð¨¨OP‚ÂI9—G3åu=ˆ´îÚp>x:áL$ÕNr,š;6Èò$–Ó‡4Ú$Ùƒœ/ëÍN½ Ï‹Ôó"Ý#pGeÉISÇR¥ãò°jIá\œiT¢ÑXeòs-`S%@!ªºÈPà$ #¦ŽÎCx‰‡4Ù4b¿Ò²ªEy<À|*?òõŦZ¤ÉºˆŠ£ƒøXȰ€-ºà'JÍ^I)ßO—,Wò¬•‡¼,“u*ÀÆ®MÁ9ëò¼ ŠY]êCEÊUF¾‰ ¢ÍÑá f¨àjp§f{↪_Éï(‹å جn™î¢JO7žÚîa2’ÏGðì]o[Óž(…^RDY ¦qNýˆKò¢ÚÍqCÏH{rŸ„®+O~·E !²Dë•Á,W£Ê£‚k†] äÖ0 €4Û:E…0j°è©wQšÊéXÀk¦rJM„ZK‹Ç$Vœ QB¤Â ¢,Ë|“ÀÂXNcH¹‘Ä…€,ÛTî:^“¯d¢©@d—1iCIXIšv©A¼‚¤§j­‡„àæ«7«÷Vo>¼_Þü¶œûlF$É]¦H%/<±MY%çPïøŒ2ERM.l–EJ˜½räRN$j-èW…ÇèáÍP ù¥dÑ™öî"'¤ -ëèŒ tæœûfFî2]Òø"ó|Ô³Wc`¡].sµe@œ]^§±$*«¢[Wd3•àI%¤B%p•eY|9¿ŒÊBWòX~¯½õcžã‡¨ˆö ðB~ÖY•C‘1x£Œ¿†OAðÖ>[{b$…ÒÐ&ÁAûDY¼hê¦j,½÷#ÐH;±^ÑÉ;eót®~IbY1éD—–¹fR•=¾£ºB~†® ÙÆƒJ¢(j (8®KIàËÓ~œcÁÖ a³R.é@PË}kÁlB¹Â<û$Ë‹U ZªË!ð‚RB'°äŸ—k /Ûr9 “í±™#Ö}§aŽRûAl’ßmÛQøõtžAñËcA†uh6ôžqÐXjûnÂC~…,`x Â™ãOb¤¾Œ0qYHhȧ0qhW’¡Ù¼€ Ñ˜C˜ëh<ú¼ç8 Âïã8œW;<:ÎCY®6Õ_«$^U“¼æM'ѹPq³ ÷á¢gÔ^žÊÞHôt¯*X2·må«KÑ—(¿·4(¹ÕŒò‚âÁ’/Ÿn¯¬ÏÍ<&†j|TŠU×zhOm£¶9¼¿¯Ïô­N±VÍF=Ú*‹~j@¡ªÓ!3<Îí8à׺Eˆ0Á‡wßÞ,oFêºÚ\õS~PM›ön¢ÓVƒ…ÁddË…âѹ.鲺ùíãݧ›á ‡CÄ„=–gæ.RxR BJ3–R9¦T@ râ1:Yžæò¨e‚»>kÚp1I“q¹ÿeýòþú?×wo¯|;f(jSâѳŠÊä!¢ƒRvÕÔ¼´´Êê¸ØB37a!BkŒ4›`ÜU÷ø~0ëÆÄ†>n{]8—øN‰š8ÎÁ§ Ã$„ªVkk´ÝºÜÆG‡pê $cŠÔ—ò—QØã¯[†Sv0yA(ƒk^.¬Nb¶NbMú‡klËŒôጄLeÔïV5”I×餲 æóm⿜nMîjöBA¿A¯¾ ìû!cD DJ·^,<[vÂÕx«³ö±(Àœb¢%Ü å–ÿ8Ç…Þµ ÂÁeͨ`¯¦†/‰ÏèËy@—ÿ…>p±° ;¥T:î4´ XÒs‰í„í§ì}ÌȠìë-€‹ÕÄ}t«ísŒ Åœ—3f—ÿ…ƼXØ !­ÉñªtŠh}Mì*ÚƒÒ솓cj¹A©2ƒy6,ˆõŸ“­È‰Ú¾ ¢öžgî Sà+$u¦9âœG¾Ýü¼á›z_ÝRà)Sb‡Îh˜ù}Tåc˶ŠÖiRîš+‚¯®¸ü‘Éï\_¼pv-Œg¦öïöäýîïð)HñÕ夕Xožgéqìb’g¡ïNBá0t˜S¸šþïÍ8DÅ.§ß¥§B!N<³ç½l3îÛ:h• Ê/l•Laòd«d“©­js¨TþóZ%AHXð}:¹¯³óâ’Bl„‘bÝ|È÷£?m·‘ÛöéuÞ8ëi߬”£'¸°é;Ç“nö4¾—éš1(þ аï1å¿-þÕänÆ endstream endobj 933 0 obj << /Length 1880 /Filter /FlateDecode >> stream xÚÅY[wÓ8~ϯðc»‡ëj{÷©@èv·´, œ= œ×VZ³Ž|¡ôßïÈ’b;qJhÈòËŠfôinš»Îã:§£gÓÑÓ—^à(D8Ó¹Ãu¼žv¦±óþèôâíñ˜p÷èTf²H"ýr%£ºHª{ûV|I"©_>¸Ü=½º‚Ö'¯ÏôàœËBfvá«0«Ãôøãô§/}×ñ†  ó ò± ,€õžôT?<¢HF“éèóÃ×Á-p ¤Ü‰£÷]'†ÿþp\Äß¹kV.Ž]D¨€qê\þ¹[…!|ärÇÃXYDyVÉc̾V³Û0‹S¹ …†ñ!"¯c¡,®p$6P6! àN§LƒPò½)ËYT}%ñ¬z¢¥¹Èãd~ßH0ï1 8×DÏ[äz¹ßŒó¹~fò˜ð£»ô~ˆC!èJÔ‚/ê'¬d¬©:BAC„od™×E$K½<,ˤeöòÛÈÙ$í}ÿPrcæÒÝm±¶&e\Ö†J–‡Ó_ŸÿžúÛì.}£?ì!Ÿx»ô‚ŸÖÀÞpþ´Š83™ÊI¬jR—6-õ\e¾.;:ëõÔ¿M5¹ójÑ’€AFÛôÇa®MiÄNv gxÓe, tƨ֙íÀ÷>ÕYdP˜0©$Œjómæ¶Í×AÛ ¼é'¨•’ ¦꽩àÙ-Åá,¨Ô#V°UÑ-Œ˜(ºÇtõMD1_5ïáe¹ªµõ†ú“&ŒšOIzË8ÌV0Æ+ÕmØ·À¡ã ,Êeù6þú‚‘÷ endstream endobj 949 0 obj << /Length 1925 /Filter /FlateDecode >> stream xÚÅZQ“â6~çWøí 5h-É’¥ËÓå²™šT6»Ù™<ínQЀs`Ol“Éܯ¿nK ˜a¦îɲh}jujµÚ„Á<ƒëÁwƒw?Å:ÐDK&ƒ»‡@H"5b Ϙw³àËðú×ßGc&ÂáµÉL‘NíË­™®‹´zöoÅ_éÔØ—¯¡¯ooáAmÇ¿>ÝØÆgó` “yÁI¶N–£ow?¿ûI…5$G5"ň¢ ”¬5!ÈÇjøÎ>b†Cïï(È„Ý*¹¦«Á—oa0ƒß~Bi<Õ’«@Ð0.¡½ n¿ “Æ”èÈjò4¢á0)AņÓÂ$•™á Þ?ÛNXøØ®:цÌÉh…ñ0±¥©¬haªu‘5pUvAÅ<°Ï׃àK-=/ˉqbVÕó$OgÀÂ9jSãh¿Pûê‰US'¯ui'M\_þˆ {¶ùƒí­Æv¬ÌêÞ8¡ý!Éf8Ì4¦`!¬qÒ¬4E…ÈRÃàÔµàð–fUî%ŒmÀ"®Ð³|hFT ÿ~ü4›ïJUy‘ÌÝK²\æSg|Ú…üxóã`ÿ1bèÔ0K³2™W/)ŠÄkô`Ÿ™™š²LŠç‘C°—rxç‹|]¥™{Yù¡É¬ÓV -rĦ~±V´mÐÏ6’ —üü´€}a{žR0]fÛ †ò8¨V´³qð/ú£þ!]=ZÁ¤JóÌI—‹|½tál°‰žýIµ3U‡ÎÎó8ÃÌòªkáÉÈ5s1ašƒ©å7¼nÖm;4ë‚·z]ßÛv핦hKðƒšs>¦¼«±n«Ø—= ]˜Uâ•ZgÓE’ÍÍŒ¸ˆD Ê)Q>&~qT7Y™ \J‘dõ˜VüËp° Ü\¥Y^LJpкÜbŒE„1H¦ˆõnã0\%¥‹bûÑ‹qˆ{¡$„±0”vz °ë}6Í£pèlµÊgÀ HvûÁ mÒråLøh¦é×0dî0Ø®g3ÐM8Íg†ì/”G`Z-_°Ð-†d$Œy Áé1 ’\D›ˆß¶wÄâ> KÕÁ#M¨=0më±ï3©z,T„*gùíÒEÀ©'#þ:taÀÖhË–÷˜©Û97?^ùm“̶Ç;ÉÎä‘é ve͘:âÞÌ}”xLÍãÄËlö1ìá#d:ß {dBˆ(Š.cS“têÒ—OBJÂ#æ¼âBáa2EQì„£dèI2 ˜±Ø²éÖáÜ…÷NzEw 68v¹þ´H§‹ÝÐo'èMûœlž ÷æpŠãŽˆ,|™ýZ§Ë<…èÈÜ‘ó¹ÎÝ9ùèÖÚ #cà;Ÿ¯ßÞNn'ÿþøáÓ/ïïÞwœKŠ©¤O®ÿé2øõÓŸ‡õÒïKÌ%0è:ÇÊTH,+Ÿ˜N6 äìí, Љ*>®wòxNâ0 "0fhóxìTQ‰­tP˜à¡‘¸·Ñº{÷'à1lxé'°À¥/Å·®ÛÁ÷—Ž>34±$ÑL¿‚²þRúKEÍ9`QíÒ¨Á¹².ÝðñÃd a˜³Ö墇û˜$”ÆogÝ6þ…Ö½XÙ3¬Ëtn˜öEn,C{¥vý»stS@•"¬C#Bj;çw‡Pá*hî%ª«åUß]Ld¾êíhÐÆ¿+[Ã9£ÒnPMát‡¹î›9+«öëprMd ^{ w²©¿ïÂ4Õoç»6þ…¾»XÙ3|Æ$ògÞù¾Û$_'ì žá<®9aÑ›ù® ™ë.Vµ¿ç¸–N©Íí¢m]Á„^,]Ù¡«÷}o—½$ãÙy,hr© wõˆ›¬2E‘ÏGb˜TÆ—“ð©7¹9öÝ´’e쩳olà- ÅgX YÕE2ì~ZHÂpbE6u, aÿñ)°ÄƒÃûꚨ«s‘p°j[žCq߉…Žlæ§5;ú{Cõp]ÖrÐÂ:•mÕE:lÀRKÛÚ–l9 –lQ·|šÍR¬TÂá>]”‡ŠµWG€¸¬’éŸë´0Xž†©Å]}ö”b=ñâáý»®¼}–KÛJ–eîú°À›ÿiX°ÃÖ`ã‘ÆsüષöW¾IÍ-:§æÆÜÉDô*E¦ Búš›|iÍMôª¹¿Ð½2 BHqa™¤ÈÉ2I¾e·¬M™v›;u“N ­Ôë–)ñö%·§E^v³Ç—ÿ*ç ë¾úvïúñªr´òq¾Qö‰±Ò«ÈibéM,È¥¯¿­½Q âdœèÓ¥7F9‘ìÜÊÛq–¹ÀÔ¹_D;Z£={…{¡ÂW|!Eú€œ¤H¾¡1°-Ž÷³ÉnšÌãW)ÑR¥!ÿÔ[¢üçK“d½J±¿æÙø¿¦È|²k¦{£íGÐæ§¼æ—¾6[›Ÿ®ºÀöÕÈò£D|™ »Ê´ùê7Çÿ·L»IÞºþÁe"Œ^ò߈ÿÙõî‚ endstream endobj 961 0 obj << /Length 2033 /Filter /FlateDecode >> stream xÚÝZYsÛ6~÷¯à£Ü©Ü$Û§Ž'ºIc÷)Éhh ²0#‘ ¸î¯ïâ DR´M›qÛ鋉s±ØýöÀÊ8¸ pp~òãÕÉ«×aÄ(–TW«@H$c„1|C\-ƒ³óßþ8Sgç*S…N]çR¥u¡«»¦W|Ñ©rXàóËKø7ðû7®ñ^­T¡²fáE’ÕÉæôÓÕ/¯^G8ˆ€ É <¢("0i9°tÂhöÊ}Bj¶œœ]|>!°äÀ8ld"H·'>á` s¿ñ8 níÊm F”Iho‚Ë“ßOp[iqÑÐÅÜqrS– }®u¡Y²UåbuJñ,/[•ž<[;ìý £ÅÂb>ç=¶ 1B&à–m3.ˆD”ð€¢8ŠƒB«Ÿ]jãÇPŽD$›abVO¥ïeÔ¥ßÈxÌ mZÅ4þ ÌZ‚ÅMàï½rA‰V¹¼­\¢(ôÚ}{±¨uV1‡¯á3ÕG’4|9évéO”îdfŸ ]rLĽ¶ãìfÝwða.±s"~¼ܽš (戃ùÏ 2vÇ~sX´nuü”URÕe£Ù·c S$eôrHèÒŸˆ„ÉÌZr^¨d ‡ˆÆì•NÒiž•Uׯ”la`@óöÍÏã,%™.·ÏUŸŒ |ãS_þ4õMgv„!{õɘ£8† :Y”ª«Ä@‚ßÑó¬Ïx„Eu·SG¶gâè÷cE(¤Sâhï{oŠ$eˆÂØ3ÿ^Uu‘•.«©Ö>½1ò±|徿ŽîŠn¾Þíò¢RK×½¾ëïß©TĘ6+öøF>gjg+8˜3±Ìqôî”áYR˜UqJĬt[:W!1sŽü/Ø3…ÐLiˆÈ —õó,ÖʳpIM$¥O³ŽI$fX 2wºñúo²JŽo€qŽÁvÝÝó¥^Ý59•¹-p [.ö–ß•œOV×éoLó¥BÇ÷dËgÜó@CR„á^†fü!–2P>¢aäÍ!X!KC a‚%]N޵&#:Fp8;nw/œ#æBÍd¼ˆ`.ù0Þy *YžW`LjßvñRåÞC¢¡Š"¿9³¬õ!¸<ùšÇpäa#à2‚ÈãpyœÈh¸`ð0Œ zúA¼p‰‘÷ö  #Hd£xǧnáÅįcç⟳ÕÚ~|þ #Ø<Ö­ï÷ùdéªÙWØ Ól2IQ7Êlërëk¿U¨{CM²ÛmtšT:φH$+Eìʺô[nuµö›Ý'M6›½9Í’&ê“}ÔïÑ5š(ÔF%¥Zäzi4Ò}9²€¬î™`zësÆM^Ò ê6nBRt@Ü‚RÀiS ¹¼\\.~z{ñî׳«³8ëÏöÕŒï<Æê4Ue¹ª½ÐÒ|»Û(£¡è>÷4Ú1¾ý jʇ‚„鳊L2ÅìåŠL-&^,ËîÑŸ–eOgvüs™Á—R:­Á8Xør¥žý‰ÒÌì¤Ë¢’ ÚÎÚ#¬ÍüoŠ |&/W–êÑŸˆ„ÉÌŽ/F0ãå1V1Âe/ãÖëlWWC ¯B )»x¹zRþDNfv|A‚Q†—ã áH „éåFB„eüOÔ#h,áÑ“êûÄsdAùþ·mÒ•­Ê*—5ú•I“Œ&wû'•K¯7ªûØÚ¹I€+zó9$Æ!cïÂÏ’Ô$ 8ê¼æ ÛJ”¡w«mZjÇÓü&Ó™“p<³¬Â°I?}3Ï”k(wµ†BµÖ™k;>¡áØšƒØgoü:]:Â;Ul5\ŒÌ´»4ŒAti¸eÀN^Wº9Ð ¾×¾¿—.\c !ß³Äc›~Ãg/„¹Î–j§à½LôMrw(¬@¿.uvãšîr¦Àw-çÛFÅ0î²J´“.tÛŒì·ï U:Öm׈Ê–d~ìR~ßì=9¼M®¤ËªhNi™u_ôÒ’ƒ‹Z»t©O©2?2Ú±6PÌ’„KP' CxpY ÙåIæ›Ù¶¥\£3OzѼ ¡ïŒÍL$wÃE…¥yp- OžEÜhÓ ì’¢Òi½I 7ÜâÜL;P›V z. O0‚5 -{fÂåÿvñZenRgndeÞ IZ¹ž¤úæ­™ÈëÍÒu µ²ï=K8wc <[vUöŸ<–”ž¨‰}û0N;M²<1lÀ( LDè³3]GOq ºçº´ÓIê’·´pŽBά… áf—ËÖŒIß–µrÓÎýˆY™Û÷L†ÀdÝOÙÂ;GÙx$Ñ+&ŠY‹Ïd°¦˜ƒµèfÄg¿VTd¯3h1Ñp'°ÜÕe³VûÖÞG˜N¹öšöµ«÷åÙæÎµ¿9q°FÃýÆ>áÍ€õE­îáÞfÖO”õu©>×Ö˜þÁÅ´d2 Ïõ¿^¥&&_§êH¸D¼ù)ó¿V¦~úEꎆDHâiuÇ1D­;Ž 2¶îGH4ÿºÑKÆ1ØE¿^ ñ¼Wut‡§ª}§•6Ý®uºî%Mî%;g µ(S>ž'_ú;æ¿u›4EÎã4úÀiÒ꣇‡óçüÑßµÚ endstream endobj 977 0 obj << /Length 1865 /Filter /FlateDecode >> stream xÚÍYÝs›8÷_Á£s«è¸>µ×6“Î¥ÉÕ¾‡›¶ã!X$Ü`pùhÎ÷×ß 08$nfî «Ý•ö·«Ý•mÝY¶u1y»˜¼úàx–‡íÝôiˆmqï¹*iRøÑÎü¤žuÆìé3§~™Ÿ©™S&ÆëY*’°ã‡”Ìjmg#·Ží ÅŸ¤I.ý{TSYë ¡¶ i@¿Bµz\tÂ/EŽÍ,Î8â à¬Æ9€nf乞•I+lÄÛ6·þÑC”!O#@3ÆŠúTþÚ‰:üë³bŒ„&/<âýeë(d×Q¨ò~€oeWÖð~Näz½×WË2J JZ‘h„ù¸ã/·»mþ'îîÉÊ>aw‰ØG®ŽÏwiÇü™°udÆ»’daÜ”ªpžd²Ž_†¸pD]«A¸Ž’4[æ…_”y÷:ëØTñðÅ@Ðæ"NV¶bg6÷ƒ»Œ)Å9ò“‹AôÖÙÊ8(¼(ˆ,GÒ7ÎçšÐÆÈLôÅLØæ¢ OVö &´9²ëé‰&T ë(â]ð\ó1ÏF¸ôK™¯Ãÿ4ó®ìˆ0lÌÇ<™Ø‡á·²¸‡0¤iÏŠŸiY ùžÊ‚^5 ë Ç=% ê< uVp¹k’VUŸû¤n”UÚPJ§»“JîÊ?ýWgzê‡:¬®>é2Rý ³tm%zÄÏn£"ó³­†³Kf‰æka(ufœ»:>*.ÊõHQSÖ¿¨©HÕX•ŧe¼ê«æTYH™h”•ê ê·êéë‡J²A/>ýG±dÎÔ‡ÂeS¨|ZýNýÌõL5»½’¶MÕ4†6<ÆYLîefTÒ‹iQ‘¿èªE!ZE‚þnIÅf}‹ßiË5Õ«zS«g„U¾áßË(“Ë “«sBíá6Jî4™²¬šVÕâꥪÅ+–º8Q”ºbòÞH\pÇ©ëžV¼ëÂŽgº«TA¦¸G…yI“x«UYËõ-TFPú]Ã4ŽSU=¨=S$·[=ÉïYõ@Í(bà{ô°tW–š=X6ì8T¿Ÿ7Zz÷÷S1Xú˜=g·½æž´Z]쵚6ý•ëAsMe§ÙÞœQ`Uœ°¼¼¯€ÅˆrÇš1aÎRÈÞe1òHß‚räŠÇ{\Ô !×¥±ÈÝ>WC\íM«=eº•ûõxRº’G4O_螇 ÈvhÅ‚ègˆR °x¨ WòÇ0RG¸=L(ƒ3˜Lnk2Ô¥P}aÛTDŒµ1ªý ðÏA ÐÙõ©WwEu.p^÷ýÕ¾%ªŽ£Óï[3aÝ`y¸‚nk°>?{8¨®’iÛ7^É‚îꢞ¼‡ˆT5‚ÉãˆzœÉXDA%NOüìºÿ)mvâ©åÐ= ®oÿ–éK_¾{ ¨Ž†ï `¯Ñ×îCŸè¢¯nþíæí¡ÝÌÁ½!¡uլ׽ø¡}ªnâ(ˆŠxûº×ÓZnX5l˸hk½ÉRÅåG´:êSOÇÂO)§ùÔ&úÔ&c} » > stream xÚÅYMo7½ëWðØL‘3C0 än ´@ÑäÐÖÈÁ‘·­ÑØJeHÿ}ßÈŠ“Hëš¶ä°½³»o‡Ã7ÒM%¤Ð´‘Њ…Öð“CÖŠÛ˜W Rýu 5á^5¨Ãã÷-#´VBN µ…œ©à†Lªš„Ì9C0®)1 Í0Z•H]hÆçJ°ÅðUËÐl²±?©ìkø’ Bƒ ˜ƒY Ê,%°Õ”2þŒ&–!ÀKH˜'– u3𪃡§&Ç`e<Ýäö’B†È.T ‘9`‚ @˜å,L,ƒ½,nOƒ€9%ð©ŽÑÀlþ„!Ø2‚P}P ÃDxdͰ³e­°™ðyƒu†§Ü À =Îå$©ë X†zc RðžÔ…êOàõêz¸B(ybìžëÆø\ÙÁÀ(œìÚ¥Á“„|&>oÃÄœpáPRrp† n¡dhN¡ ÁŒa*üQŠ\QÐf6ç¨¸Ó s+þÞ A0|^1ˆ©XÚ&VJ¨™\!TTC¥ pMœg(­Bþ„B->Gµ®0PX¡Ìáµ:¯« M ºª" ­Ü0B`צ†àn´j*\F4!š a¬I0AD‹&„•!­A'5(œ29<œL_†ãûRø9Lùõ·Pj¬ƒšèiqqõîÝ›É7ßü'6·Xà¤/°Gó‹e8< Ó#D¬^sâÛGY–×2<]®!øxúÓb>{5,Ãq˜þôò(L_–áFïëÞxqòÇ0™¾ÀÃÅòr•þø|2ýy¸œ_-fÃ媬ý8œž<ŸÇþ X‰î×&96{ƒÑNPû5üÙÅÅWeÇMjkӼ쬮z}¿aÑê»ÉôÕÕÛåêþ‡³‹¿&ÓçóÅé°XœÞL¿›~?}qœW7në “Ì…c*-*28G„XÐb 7÷lEã«0ývþzà„¯þ¸¼<8™ý}u¶f‹áôkçm/Ö”D±À5Ê56d3b4 òSE#žÝnÍééž-AQ åOI¢SN°Ì˜aYO·ó²Þ '—ûæ…<P@¥j,(&(¿‘ĨIÕì^¼xµü)‹rŒò‡å*&”·¦ÑƒS§n§Žì˜:Úö™"„:SPò3i$,öÌQ3#Cr½w$¬ø/ŸóŸ#1=„ÿ‡rni›ó¶+ç¶WÎ×%)b¡á¬1ûbƒzPEîä|~vzp9,·h·Î°ß¯Wš†ÑÛ“.4V¶<»îá9KuÓsFá9fçÕûB‹ÞK04Vwºîâä|Øô›Igºl‚×~Óš£7½]Øâ¨õaEP†;m`Žè» D‘K't0<Ø…M «i µÁȼ.,\QйÞ+/>åÂVË[Í÷;å…o|ö˜‚BпçjÑw-%•è]wn)‰·æÅðáý|±D5›Ì|º6«šïÔº«ÚàµûHS4ã>, pÚtõ­X¾ÃìÂâê;œ.¬€¹¦}X´k‰ž²då­Ð̶chf}ŒG]eZmÊQS|{,è6ïîuß^ýþû°Ø KJýEû ðG× “N,#,k'á“J¶ÉxXŽa•ÇÃr [a/ÙS†%óVXrÞ5,¯MõS—ëëãô„¨A䶪’ü”B}Ëzk˜ž"L—ÃmtÇ +a»Œn^XQÕ)T¬òŠNC|;þ{únR·ó·_¦Ï~x"t'jzÓ¯c¾$‰9÷a¹Ÿ%wêÍq¤·W›bÒ>µ¢s© ›‘Î4VªÆ°‘¡Ü©7ÇZ;m(è#R§ (ð*¥K~0TŸ²T‰m•*ÑK_e?‡½¾–õµîweM‘ÛÍáW¤zÀ»×f‹ák8¿üg,w<Ú2D6?rÇN‡üPÕ™2êj¦ÛkÖÙÅéÙÌí:f^î±^¶0‰nìatÈ »ï»ìyœ#HF@©º±ÆÜ²ÕvÆ­ñ´’vVèsðÇZ[$ç>,bml“7®ÌuêE(WéîV Ò‡Í°w¬ÅÃ&Dêf‹õÿÖ¢ºÝÍ—]»ù¢Ñ&‰™Vn–QBl]þkºÇò?ò_¾êÂb׿ÿEëöظKèÒF5F±˜£ítǰ¾—/µ ËØm“öA±\ÐÈÙÎ8^n}ô2®DzÅ›í>z™a!O™žª[é©å^éÙÊVz®w3Êë«|J×jP¤Ü endstream endobj 990 0 obj << /Length 1855 /Filter /FlateDecode >> stream xÚÅZM“›8½ûWp´·bEß ÝS’M¦²µ“dcï)I¹–g¨µ±8“üûm°33Ø*—`ñÔê×ê~ƒ½{W£—óÑó7¾òR’Jo¾ò„DR1ÏWÐúÄ›/½Oã«wÿN¦Tàñ•NtGåÍLGû4ÎVwé÷8ÒåÍg,ðÕl )¼øð¶¼ø¨W:ÕIÕñ:Löázòeþ×ó7ö0C2c( HFýý`ü¼l|j^½ž¾ôÁ9/2áE›Ñ§/Ø[ÂoyqxwEÏ'F”I¸^{³Ñ?#\wF@jVT˜‚ ÅKKn²l±ÜïÖqæz‘„]šd¦\Ì׆‘Ô4W-3ò1÷|&à…™æ¹ QÂ=ŠT ¼T{«š]M´î§§PŽD «J`bz»â[Ÿ4ñ+Ÿö¡Ž%‘¢ê Œ-Ó¯¼øhÉÒ 2yLê£À·l¾¿^ìã$geM%.“…}Þæ^†<" bJzS‚„Tåp¿Ý‡" ¼ZÇMœlÓE–‡ù>kY4~ÖwcФ †‹€&¾c8[ÀY§’î ’#ª &àeYº:Ú&YÞ\\,q`¢ÅÄÈ¢gÿ,ºbª7ƒRhÕ` ¶ðÝt7¶Ç®”Š#¥üã"î Å ?¸l.u–wrg*è}ù äS— ÚjïCRúÈWÖöW©†lfŠ>‡‰iÉXOˆÿ£¼||Èyå¯ÛUù8¿µ¯•Ýã,“›² d8& „Šß+Ï=ªF¥06VÕã¿e7Èg´êˆ&ScÌo­=‰žP1¾ë3ĉ_½×`©í‚aUÏ»xmMÿª« -õNßÄú¤tg2® /˜ô#:Ì™2ÈòqJ@€ ÑgÞ‹µ*L– 'ßoŽàn|@Ûì³¼­_·ù­½²26Õkfzù¬¼5%ãÇåMá Ó&öAvþƒËdk W†¤•ŽòÔwó<\Ç˃ô®ð]À>š¥dÚдàK†”è)#à‰rr& †LÁ‡&:³ L#"ø=¥´±R)è:JXG‘Üå¬&ʱŠ8ÒjòÓµH¨x, ï@pû6Lð¼…µcL¾Ë9[6Ûe¼úY)r€oÄеŽnÃ$Î6–€ŽâÏS»µ9Îçð⡞-ËPmN”qp0È‘ó'zÄaŸØWAèÊ€|‚aÎAêõ®¾ :@‡Ô™²%MKNi39[AF:YÀ÷Ä çˆÉGÜH’<.P§Ì*>„˱ž=«Öf¸<îTßV™¸#jlÒ2KmÛL‡Œ¿|(8ÎÕily¡Glôy<6éò c]Ê 38¸ÄHBJ{Ðly‚ÉÖ¢REG-÷¦Šv„Fª³ý:›­£ínBðø˜ OëTœÙ£˜OmÏÆx¦¦Ã³|›†76Ã,ÛF± Âòþ.†:Õ‘ÃòÛ8³ÕæеêfŸ¬R]}ýÙ5åC¹ weðÇÛ¤ª]¦Š—û¬Ó]…ie_ë°C„¥e¨'•Š$ÙÂ0TÙºZ¸®ysÔ”¬È C©ëŒˆ3nDnaÙGïÓÄ–PPØG.a ”BWk³Ùb¶xõþúÃ߯ç¯;¸·cÛ ùݵí£HgÙj¿®‚m³[kã~Ô1äÔbL‰)˜Õ~ùâÏÅ»×½žWŒgGw»ƒp(ÃÎD~h# „átµM761¶µHe[MŠZ³ø&¹èXT’ w¬Æ a€NlÓØÂwÛ4ºÛÿà‡1P>ÊíTA†Çœ çÜ&¾£s=ùÔGŒ‘Öy²³4ì#¡úoå!Q<ñaƒ- øpÄ7ñ‰w6¶ÏQ 1ß,( &ÁáôÈ|”ÿXÄ˾gdÑäì|›åúâ“2†)"T GOß‘gcûœuVô`8±E–V?V¾mw \¾]JU´÷pŸvZønt¸{Æj¡ ¶8¢ö¥îë~µÒißÕ²UjÚ¾u1=ø ÷m¨…ïH³±çÐr+áJO¾ýO'.'ÇÔ÷Aª§>:îÚP›`y²-8lj™ý»Na§y‘ì¥Úº°yjÙKEþ€º…ïÓîÆöWfDI„«ú|©î%l¬¯-|Gï:{†wQ|fh¯‘'S¾$(´ÕWdâãâ,x0æ›øŽÌ;Û§VP‚¨ 0?~eøU—‡ÇÃ}äoá;Òãlì9ôHVœÿR¥EÌ1î ~ ß‘gcÏ¡GÐÂÔ é)–+9ÌGj@nðŽÔ¸šÚgÇX1áõýî£Q—Õ#³«4ÕÈéŸ*HqdHžPWí ƒ Œæ—ü£æÿ¾hV— endstream endobj 1016 0 obj << /Length 1837 /Filter /FlateDecode >> stream xÚÍ[ËrÛ6Ýë+¸”:1‚÷cºJ¦Ç™¦I#w•d4ŒÉœ‘)›¤Òäï{API1%ˆMW|8¸¼ç>!G«G×£—·£ç¯”‰ 2’Êèv ‰¤a‘2pU$º]DÆ×þ=¹¢¯mj³dî¦v¾Í’âÛî)û’Ì­øˆ¾žNáBü‹ïnüÍ{»´™MwßÄé6^O>ݾ~þJãHƒ’91¸¦H B–ã•?÷EÝ”Ñï·£Ç18"{Áa"Ñü~ôáŽð·×FÜèèŸrä}$F”I¸_GÓÑ_#\W†&5)v˜‚ ý$ïm±ÍÒÜ­“®(E”VjZåù,·ð9¥ŒN¥œ¤áVq—ë–Ü )Ì#Eb”;¹Ý{A$¢„Gm¢ÌFËš M´î·‡ `Š˜»<0q£Cñ+%5ñwJî³BK"CÍ„-³UäoÞWì‹%»¼Î.H ê9|ûf¶MÒ‚yë^£‹>iâX¦Ý~˜vÃ…í¯]i8\yËCêÊ>\IìcFõ¾ þC^@h…¸öABù5~ùˆ@ "Ý~à}’n²Y^ÄÅ6o 4~ÖÓk¥†ÐÂÕp´7ñi¶털`Ka1ÐÄáï¼Ï‹¯³d1+šŽÕÁui óMZدÅì.Nk{6=Ò ®õpô4ñé ¶„«”IŽÐ£(RJzzÀ±z³²œeöq¶\Ç«³I øÞÁHiâ’,ì)¤HE:‘”Ç̓ãäl:¸r!q06ðd„ŠzJüi¡÷ñëóv ¥kßø•¤Ûbvoó<^ÙjîÙ 1P%!ÃQÔÄä(XØS†¤év˜ˆB®'¦¬ ¤9^è¨6°Œt®68?÷P_VÆZ?µ`aOq-ªQ½"<ͳ6Ûâ¸k¹Æë×ÞDQä$ è¼Z×6’B+¤±èÕInÓ³{IÁ "õ²äÒ½¤`„.…·ðÃl;\ØþÝŽà.樰^RP…èp¹ ¨ÛPQOP-ÃHÔrå k%‰F ª‹³ÒÅ%zI禌 —0ZøÄ Û'a@§• ‹C—o~n/)0.Øpô4ñé öz°F’ÿ*en8b†ÆQ ?Œ£paOàˆ…¤&ƒ]½YÒ q6ÜNt ?¥`aûô3;–´DвãýŒê™ŸÔ¥º®(âj¸ýí~ gÁž™HíÂßE{P·±ÓIÚ)Ý /wÕÑÝpÆôv½º›$}Ü&™åq¾Nã{;[N(„™ BÌ|Bðøî¬Æ‡‰p½Ä¹tãô@xÀ" …æáÂö¯Î™†ê™“°Æ‡)Žð€é»…¨Ý`aOЮRèSîã]çîbí¥Ðn)ñóÚ!&"V -ü@c¶GÆ¡J铈ïªHíyÏ"ÎÎÛ›ßú ^Ø lÑeTý)‘‹†~ …ÁÂöðçï ׳{&çö%33çügÓá‚!Ãm4µðé öz8G‹sé g†ªÄp¿[·ð™ öfC‚Ë f ´Í³ä¡H6iHeÍZû¨—)¬»ã1,¡¸ª ë·e+å1çãâΣãb<}1ýÿr_§I~ïK+,‡l–þMì/×Óé•?•WŸ„&W ›ñM…¯ó¿Ëªr~!¾cËtáoêªm¬ZIÚ’O@ÃÔj›ûm×2êª|p™%6]¬«³†P쀤þÐ`½IŒ ]5½ï& ã „,”ˆqî§44 ‹”›¾#"øª—û”rhetDíù¯4dµƒ†â<ÒRVç ù¥à:â …ÎÉþ+—wåÚM ]ˆ¼É9†¸Q~÷ýf‘,¿íú¡¶ŽÞÔ4 ƒó;O>bL«ãšûïiOœo~(X2Fžñ¡{ IV¬„pá†2``8…sX¿ URw€0÷“x_Jš’Ò&5ôUÑ’DU†”K6Cv ±b4â»ßCœÍ@iWÙIfãÅþìíͦEi 6÷oœ3vØÁ>$ÜðS7eÓ5ãqk³o)ÆO˜Ïéß|`>B= qÜ|ú€5Ÿ ½Í‡º½¾*Vut¤]ÊOëR3$uû ÃööóÙíÀl—*ÆËFØCÈâ¹ ¢0à*/²$]=ë2Ÿœ=T37e&ˆ×{c|¹_à »ÊìÜ&nÜ«³âUŽkØf}nU8º4Fðøö®š?<¬“y\¥%‡°õMÓaž±v.7Y¼ÚÍÏóÍ<‰ »ðÏÿ$Å]×ôâ.©\¬Ênî²Ø},d·Ú|ÿ×΀¯×uõTfõ ©Õ3îï®ÊìÚÆ¹5ùkîœí+œ'<õdã:pT@À¾…:ßO{`uÓãm/Ýièpc :ÌÏùw‚¦Z¥ÿ endstream endobj 1044 0 obj << /Length 1608 /Filter /FlateDecode >> stream xÚíYKsÚH¾ó+t„­0™·¤ÍÉI¯·ì$È)IQ²@µ =’ò¿ßÍ$°Iíö$ Ï|ÝÓýõôÃØY:ع¼œž¿q}ÇG¾¤Ò™.!‘ô™ãúðt‰3;Ÿ†7o?ŽÆTàáŠU…æc¢Â"òÇê+ý…Ê||ÆßL&ð æ‡«÷·æåƒZ¨TÅÕÂû .‚õèËôÏço<ìx †dZ îQä”,5Ö»Þð¹y¸To\O_Ö`‡ì‡L8áfðé væð·?Œ¸ï9ßË•GŒ(“ð¾v&ƒ¿¸ÓÒCX8.!mm±Qáju¬¥Qê9RJD%9TÕTÀŽ/äÄjp,™2ÐYË ÆlmÖ‡ÅÃb1¢b–q<|fL®‚4sø Œ³<âå3­$à |!ì ’y´xIQíL¶y”ÄÁzï®—{åwž´¥*T‘^÷mDÄÐztUl‚ؼ¦*˜kÕª˜1ˆ£lc–jƒ¢Ñ˜<œ®š¤Ùl·ë( ´¦f˦Èró¶HU«Œ,OÒ`iõ ², £ Wsóý=ÊWöp«(kÛ^:Ùì]ä•%ŠLî¬ýƒõºn-K‹t阗7ƒC Ë,›¥j­‚LÍš~Õž.Ý¡*~ÂtÌ:Æ!j|yëö’"ì²Kz ‚ÀR&ø.všìçÔíK]éµ€0î#â‹> ”45éŠ^I¤~ìƒw®²0JÎwǰp1:-¿wKá"n¦ÿTË!\7A_œ áŽÀÿn¯À=j©eK›ûçˆßèøAåEg&·ú¼FL8 ¥Àò*»O&³ÉìÕ»û÷w×Ók³¾Ad!éÉ*ÿnó}†*Ë…µ]˜l¶k¥½ŒZDŽ-Ƙ¸Èg¬.øåÕëÙýõ«?ú ¶4¾±7Á†(gÕR`p”ªùLS´Wºó]mñîöµA6ªÄY±Ý&)PΞ¥al8C¾ë:Àzä¹{FDñ×Äj©#ˆ‡Õl¡©‘¤³,ÈÖ–”P¼4)¤Ò,Ñ›ƒ‚†!s‡ ׇ¯ù¡pQŠ|ÏwRå,jL­ý×cÀp–Å7¸D/¾Þ² _Õ^}Ô¡$ò©¹ªUdã*²ËXÈ=“vj{e"0¹ŸQœ3Úë¾cÀþ:Û6ñ/4îÅÊþ€u™ ÅŠß;7õ˜i^¤c‰M{a?”Øé,Èì W@ø"QIþ­ E æ9µ…›(Ö:åA^d‡Wû³¾ w¦ìב¡‰!.V¶„³F%íd  „K-LBÞ2–“ʃF˜µ8¹¤æÍC±€¬;ë¹C“jÖìàÎq$TžXþ³‰¡#/V¶GTïI pÙ‡µÎ­ +s óÏ Bí¸üq{ä8M_ôuö¡×—¤Óƒgç …y"Â;ïŠ|[غ Ÿñn"rÐ ïª(ºÛþÞ]/k…|ÜV"yypH[öÇÂÁ)\h[ð®Jj­„tƒÒoVBïG ´LS×Þ LÖ‚ Å4°c°ï¸c[3†á÷¼Óå2ƒ’IÊ';3F¡Côľ3»s¥U^6Ú2ÓmU%Ûa ußôO¶Uaôcj§dûó6a2W'Ú‚?èQ?¯!Øiˆ§ûù> Oöó=@úöóÔƒëPò.·³6 —ÒŸÂêCóTuY?§Ÿ×“²îÖ}â“«É]ïiZ'³~ÜGÌÒ”ç3«È“ÌêÒ›Y˜"Q7é>Ù´’Špˆ{ÚŒ„ø€IŸ&ä &js^Èë§kØÓr#]…¹ª·e"³=í!ƒtWÝÌ?i9?¨ÒÌ·(8=tÙî®|ËÙj¨ò Ó–mµ9¬jÈ“ý•í®ÏÚ((_6ƒf«¤XÏÛ@*q9ÄÔ.IÙ~"=Nâõã ó}wäë U¶©²Zìn•S¸â$7/Až«ÍÖ~”'ävðodå­î˜è,²°ÿZyûñîÎN(lM Ñ[¯‘²‰šŸˆý39Û6m"º¡ªæš§§MIîþ;Ó&&¼ §M©jއâäé*îoXWø÷xÇ¿ãzŒ@"s)¹¤ÛÕ mÿ ãPÓb~Î?ÂþVÙ–~ endstream endobj 1054 0 obj << /Length 1942 /Filter /FlateDecode >> stream xÚÅZKsÛ6¾ûWpz¢f"oí)/{ÜišÔvOiGC‹PÌV"U>’º¿¾ ”Hš–)3jO$`±/ìî·ö>{Ø»8{}söò\…^ˆBI¥w³ò„D2dž ᩈw{Ÿü‹ŸÍ©Àþ…Nuž,íàZ/«<)ï›Qþ%Yj;ø |q} b?¼úxi_®ôJç:m¾Ò*ZÏ~¿ùñåy€½ØÌ°ÁŠ“5BÂzø/íCQ³åìÝÍÙ_gÖ`ì‡LxËÍÙ§ß±ÃÜF< ¼¯õÊ'F”Ix_{×g¿œá¶2Ò⢡) ¹åäsQ,²$^è¿ ã57FÚZTÃF¡0ôÌã¢Ç!C sO1¯94ß‘ˆîQ¡—koÕb©KmøëÃ(G"Í–01«§ÒwêèÒoÔ9æ„6-‰B~fkrùgG÷ÊÙìUÛ‘·íH ”3d’–Ö`ƒÔ G’TN¯]úõ:™Ùš Ó+>¬Wpሡ ÒÖ°÷i.± î{ÿ·}™¥E¹øpù¶k å5ÁU’Ãr8³wšÿbìÄIœÎ°]ú ;™Ù†%L!8LÀf¹·ì‘¦)4lˆ‡lcæ#í#Ã’Q8%böžæ=©¤D`~“m¶QnR•b~ùuF°Ÿ™õA…ý¼ÊrûRû{RΈ?“ÜG³9SÊ¿¹sÛ—5­¤ÈR;N Ké»Xëíw/Ì ô¤Ñ ›TÊfc´,]¦¡þí}é¾pœI£ŽJ¶rL6»©¿Àr cw>ØQGñn;X43'é„»ÉTEiÓ´% /Û Â¦ÎíÀI âŠZ\PÏÍ]-L®ªtY&µ´0j¾e”ÆQ'ÿÔ|˜·âêü}‘Œ…ÈUí\ Ì1áÛòöqÆ0ˆm´a‡¿°[:6a˜P°#¢ÜÆß0¦ípÑñ7 ɈÒÀ!A$¤ý"‚µŠ¸y ‚ž+!úePt`áI,‘b¼9\à·è¥ÓëåÛö%Sì«¥sІ,ÒÞ›Ä:-#(@ <‡qP_(gOBR„ p¡àz @`)|WUuµÊ!!K• ˆ0‚ b Jºœ<4Ž ˜F(‰î‚[/R »…TˆßÄ-„©o)ûÝâYâ È‚ƒQ\мÒe•§C׸¦Iº k¶o³l­# ¾Ì¨ð£uå‚N™7o_ïtÚ‹Hû° õvQ¯ RNìÊ¿&…›Z™ÑºÐO‡“ú ÜFÛ¢ZG¥^”ÙŸ5'ÇWÿ\0ÂOWýs"ÁÄÉŠ™ýiÅÌtfÇW©\¶®Ü‡÷‹ R£GbwâÆé´Û¥?Q»“™=B»€‘É]— Xà¶Z­t¾(ÇUIº­ÊÁCGC°$§Ãz=úí<™Ù1 €ÀeöbñlDP[e Xã4(NÖzô'Zf2³GX†Bªå-¬vܥɪòÑ[s XãP1HùŸ€5PXqWw¼Š ¢¹+ àe£—wQš›y’Æz«SS™)a¼Ð$ÿ:‡ÃÊ;¨³jTc¶göyq}=·mK€“ò˜ñ÷08*#€@œÓÁûä~UhÇš‹m“4)“Þ=$Zƒ:xF]† À.{„û€Öí:)î6Vd²GŒÈP üK·2I—Y¾ÍrÓ…ýRWa°¡SIÖ35C¤áž´4lw”÷[7Q+ž·nìTkjDXÓˆ-æMF pàë¤høÚi§è¨À9|}¢r'Öø€á6xÛ‰*6·Éç*«Šõ½ƒÖ¥Ú›[­óÂÀÙ€ø×ÚQ[U¹©í € Ù CÄ~µœ; 30`ŽŽó ˜mÁâ]€÷a±âà CmÀà'É׉ØõF](pîø("¢*DŒÈ ¨ 䓈RH ÝÎ(ö«•ÇfûM¿À—ûi@M¯÷»-~HÊ;÷KÆØË$pçZÂÐÞõGQÕñ*y€¶ bóùóÑö"O¢íDÆ¢m*9 UsYFãm*x†üx›ì ›T1o»%.Ò Æ%W=_9ä!ÇŠõÐA€ÅSd‘§äi"£êÒT–ûjäÉ„8¬M®úðX‡YplÚdq²º„\fz·Bñ£å‡ÁH­×ƒmvÍØ\¯uÔô0êˆftCšºŽìêº5Sº½‹®\Ýƾì;äÃÏÓúPóˆÑ€t Ê}´{|q½xóáýÇŸÞݼÈk”¡l~@þÞÝô4N–®Ô1íèj¹ÔE±ªÖvlZäkmò³³¬­Dê~SäÔo=ӵÛäêèÝeë¸hHåù¾)—Bå·‰ a4 ÚÜñ:' …Œµ<uùÓ¯WCò)åvxX¾=×{4¾ëÉÛöW²n¼Ò§6 YÓ˜«Òb«—6Ö¹…QÿW}ýƒµ6^õÅ$P½ªQæŽó~-Öߢ¿f~þ—'üqœ5ħëÿtÉOŸ“Yßý d~°µæžCÿÙàÀæÏùËÆ¿œ÷ endstream endobj 1071 0 obj << /Length 1855 /Filter /FlateDecode >> stream xÚ½ZYwÓ8~ï¯ð£3‡-–dO@Óž2eÚÀ 3'ÇÄJã!±3^˜_?W–ÜØ‰Ó:5á¥Z"]Ýå»›;wv.Ï^MÏž_ÈÀ P ¨p¦ ‡ $æÈFIœiä|r/ß})Çî¥JTÏÍâVÍË,.¾×«ìßx®ÌâOÌñåí- Äl¼|e&7j¡2•Ô߆I®FMß<¿ð±ã‚i6<Ÿ"ŸøÀdÅ—p^úîs3Hª¯œM¦gÿœ8ƒ²e.2îÌ×gŸþÂN¿½q0òßùZ\;œ`D™€ùʹ=ûã [e`p=ÕÃe“2C{Žô|$8Õ”õ>E8DŸœL9‹ƒ”¥o9oÓ¯¹ìóB“–@ ~³ÁìÎ1“‹•À3FòšXáÁ~e¨»<ŸEjnòrjV¤_TR«&ì| l b÷w²dæi’³Ïå3+Z4ºîTTãdSºÏÌFKØ6€¬™™©¼Ó™¹M ™3ÛÃÌÄÿÑø„»>ÙÚÙèú꼟m*«ÌÒ8z²e¨@Ò¸öi,Ó¦?Ð2ƒ™=Â2 #LéÖ2Ç9MZ½F‡ð½í£'¶úˆÏŠÞSæöx8=aˆòÔÆœµNG„»ÿê?:±øÜ-–ÕD¸k5_†Iœ¯Çq©‚?IaϤ_F» tµ\ª0R™™/²tmî‡ö×8‰‹RUµ€Ü66) N€J?ým—.="ÜÉ×,ܘßB3|Qì–‹…§Ì›^h±Î¬k€BÆ-çFê¶8\´Äá@7ÍÖa,0*Ýé2ÎͶ…}62¥¹0ºËre~M•ÍI Ò€Œ¾¤AY¼æÍÛ:¬WiG÷|ØŠ,Lr¸§I›¯Ušçã•Êógf®Vf…Ehfµ(›LåPuTœGöô½”¨Kgµ°»(“yý8vëݼ“(Ì¢ø?C£èºåâµ™Æd Ò(Xà%F/ÍCïG »a®Uæss¥…eàŒqéŒ!®îÕVµ®hM¹WæPê!J}‡pÛówëÖ¨s°Ã8ò…°eξ3QˆæŽ >ò=«#mÁxzØ}f¤O7á?¥²‹ ¦¶õ®¦_5Á g¿ÆÅÒÖÖw:.µ=‰ã¦'í)„GA ž ˆ- A–¬"A¼à!Ž20Þ£¡ âQÙ‹•Âï ¼…=ˆPÒæd߬ÂG`T.%ÂØ&…{EÞçßnP ùä]B”È£˜â¾Žû[H]þ[Í­Y¯ÎwT­&ß6pDE-hC"m\uÌ‹ÿájtA¸ê—ce܇ P l(\zy.é ÇjmßW†! AäÃÚô$$ëáÂ"86 ­Ó(^|?ˆÎ·ÍH´³ÔyåEg4‚ÔSl]æE Ù• sÕˆjå51íÝY[®Ã)ó0†Ÿ¦õV²•”p¨Òh]Ie–Ø\•æÖF %ˆûÖ:Äg·³××oßÿ>™N:r›ÏðEݾÿjý>‰â9¢Î¶å|‰~Q®Ìzž®7+¥³²µ,$ck²ehÕoiæ›:ÁZzËtå5©,ÛÆ‹ÄÔB@uˆ6¶¼Ž‰D “¦€ç“‹ÉëéÕÇÉlzýÛä]W§q(÷·‚2é»oT7fjX73e'[2)Ý…^„ñJãSÿ¬Ûª8/ ¼Ò©ð»Ý\ªùKRF¡;ôL——ØÕ Xµ¿†R1,æK³J3Cþåí;DÌÖùäÆLV*¹3È©­-´ª,K³\£uƒa_W/¯~ÿpÓ…HDcakáí׃ûò¬©¡jf÷ù#OK¢LrÈ&/؃5M[ìâFá‹U£ò]mk:hÒ$ 4,ëP»V›)"G»ß7ç KR˜|ÔûáªTywyz†¸Ñ>ßfqT7ivW Fl|þ©ÝÕÃß·˜éû'k¯wèk¯‡3[‘³Ý0yðûóÀruy\€å#µØë¬Û´lgY9ïÙ…7 ÑqÍ!EÎt”B¼Î‘¿ú€üúNãà>ܶi¦ow¯ûpwß•“æÕ‡„-ŽñêCôñÙé|…JP=ÝGÂúÃ|e8³ý}…BÙÏù¾b1Ñé,ºù Cœ¥ ¸ã½…Jpó[âé¼…B(”¤ñõ/ª¨¿«P‰œÐU‡šõtžÒ"?ÐQ†²z„Ÿ@EÃOð“ NRK9ÀIš8{‚‡¨g „ü B ŠZÙšó2N F{2J„þÀOç!„ÓêCÇ©\d‡þ0Îl'!0RÏ{‚“@/ß%*êéRË4;£šè9÷ÄÓ‘ü)¸Ú¢ÖßõÛ#a1ò}r:ØëžîŸÓÛä‡~0«ý10PóÈ?˜ÏïÀáxû Æ~ ŒëqÏ’Pߨ{Êÿèø4˜ÙT endstream endobj 986 0 obj << /Type /ObjStm /N 100 /First 951 /Length 1517 /Filter /FlateDecode >> stream xÚÍY[k\G ~ß_1íƒçŒ¤Ñ\ÀrÁm¡“ä¡­ñƒãœw7x×þû~Û!vv‰j;´ÐrtäïŒ4šO—Ùtm!…^%PÎxæÀ­áÙB–¸ö«â½¥zKA‹àI¡¤Š'‡¢„§„ÒuÑ[U€Ã7µ®‡]o5PJ%ôN(7XI: ±`-¼cáÞs aXí ¡ôEïî‘û3e50Ôdà!¸C€=ØÁÒEØ$ÀK-&áµr2 fj±}BÕR[@ƒMǰØz¹r–zÀ”m üNÜLêª}Aˆv†°1û€402‰K+0A5°²í»Ðj«Þ Y`Y.ÅVc‹¹LŒOëð‰ÙÎaè,yèÆ9 Œua˜à©Vƒ±¯ ªÊ€µ DC×!©épÀ˜$)CêC'AD,‚õ¤Ñ‚›É8‹”¾GòpÂdÖúg²25Ü<ï=“©ü›™LÅ}óÝÞqõÝÞ~÷ÝÞqùÝÞqûÝ ÆX·¦ÌVlÚúƒÒ0ƽ挜ՄÆÎ`d;‹39§Ø“3ÖÓ³Óå.¨N1WÊÚJ+}]Jh(õº•–ö¨Õñý‹Ji5‚Íã÷–‹ÝÐvÿ ;/OO>®/ÏO6óÞfõa^ÞÔƒjE;C endstream endobj 1090 0 obj << /Length 1054 /Filter /FlateDecode >> stream xÚ½™]oÓ0†ïû+,qÓ\̳¿ÅU]ÚÚÑfh j격è6ÿžã¦iørpœ›ºI7oss3rG™ ^äƒãS㈣Nƒ&ù-Qšj'ˆq8Nòr5œL/³#Pl8)6Åv½*Åêq»~ø^m¿®WEyðŽ)6Y,pàå‰ÑÅ«ò˼¸-¶Å¦šx~½y¼þ½Ï_ŸZF,ÚÐÂÛ¨åMî(‹ó—ƒÉ`œ¾ 8Îa„ÿ4Ž EVWï¹Áß^F¥³äÛnæG¢8£ 4~ÿ@ƒ7V–×\TšŠS'K'w÷÷Ë/Ÿ>/vuÊ_í‡Ià†Ib„¦8 ZqMKÔYG¶¹­ÝÿPì÷gÕEšÞß æ~v¬þþ¿êWÏ.äu-M¸Ìîä¶w{Ýù>hœ]Ðd=h`©Ð®ŒÚÃ÷ÏÅMq[Ƭ¦Å*-æµÈÕ‘fl8;_>®7¦7ˆØOÇ›>E€2tÁHcü#ÉÚZ*…ý‰òj[Ü,ï¯3Ž$;ÂÏ"mm€*Kƶ֜*ÌN©ØnèDZo6œm<¢V›¿³}¨µ‡¹§º‚ã®ø¸µ²T¹^ØI†¯,Y‹Åòdùr|6ž,OÏF™/^¡Ž™£ u’a­œ¥Ì˜dX7ôã°Ž7ÛkÆ1e«2‚Ïþ ô©_oŠ™;záŸdGŸæ(çë”íƒZ…iC Q§öü2¿ôÀŽÎÚ¢«¤ÂŒ,¢+$&9•ÝCýHt£Í†£«„ÁŒ ¡ë(ãïÙexBX‡¬îƒ]é f\^gw>¾@d9öoÛÂë[~&x:x¥á˜Ê ¼ ý8xã͆Ã+¤Uáì€ÝoëìÊP4+{a“ƒWgw1~ãÛàËñôdÜ^Žm¸„ð2ƒÉ,»ò‘èÆZmA.êZe;Cx ?ÂË-þbC`Xn,ï^aðJ0uxOfÓÓ¶Ð …m˜tÐ ))Ó6µ ý8lã͆s+¤¡øô;ã¶Š>2+Á7º:éËL/ë3iA‚¬Cûjš·_ŸÃ¾RË(B‘ŒÚ†~µñfé+0ۊΨ} µ>¡M._bLØ‚ø ¡Žíh:›¶¦°µHH-7˜¾D:jõ#©6Û‚Z`˜kygÔVѯr­ín1Þ˜k{én±qÁ\[göbžÎ2Ɇ9v裗™ù5רã$„˜ã¨tºÝŒ†~ÄñfÃ!æ8Zé:ƒøb>+1¨Öi»×cÚër…UÇ@/(£¶ã½n>M­ÑeØéð„»ŽQ¦ÒmVÊÇ‘m5\'¨Ý½[x }Õ2€ mu-–œ.;†jüu-¢å–oÛè†i€à endstream endobj 1117 0 obj << /Length 973 /Filter /FlateDecode >> stream xÚ½™OoÛ8Åïþö’Ä ‡ÃGÇuwÇ[;§4ŠD)´j´»Øo¿#ÉNeu P ¨Kh1ÔóßÑâ³±˜œo'g.ˆ ƒE+¶ÏÂXiƒ.ðè”Ø>‰»“Åêö´@'‹òµÜ½<6›òñÇîåû¿‡«Ýß/esñ ,6T31]/›ÊçrW¾^zýñéËéýöýÙ…áÙ†Õ• ò(½òl²v`¯wþä¬V·LæÛÉ·‰â5 ÔOã|£6âñëäîÄÿï½IÁ‹ê•_…Q Q[þüEl&M ½^µ\4’ö{±Ù<ÌÎoN N¶—µ ÁTÕ°è˜ÒÒ §­ä=UÓFY‰ŠÊàƒØ•â¹eâXìÿgÕG#ï¿ VÕêTýýë60æÚZV ˜­åvŸ÷ºöÉqBurÔN½Ô64ÑýѤõ[^òT>¿¼–GëÄ]aÞrçÌ <±Ù#J`+ áwÆßrj½—¤}Ôåj¹]NOÃ:4lJÃ*ÙhµVIÃE'­ý4ZÓÍÆÓÊWÒ[7­Mø|=§bó7^š0 ¯H2p2-^§U]Íæëm¬[X#­&x Îe£µ£ŸFkºÙ´‚âÚj£uÚÄ^(ÏS¿ ÕaâÇ Õp% ­Û´ÖoÞÅVVC†+«ÎȪ&.V&«Çú‰¬&›gÕhÇ•cõ-øBaÒj4&ÞŽA+ǵUµi½žÏ.ûàZõà U>\É)®V˜ ׎~®éfãq%Gòp.@ëÏàëÉØÚJ–O£Ðʵ€0u·«Íz>‹u«¸mÁ‘Vp\¯òÁz$ŸÈjªÕ¨²®7~¸.à-ö~Y|šx5¬Úñè:°^Ý̦W‘fµá®]>V5‘ë³ÁÚÑO£5Ýl<®šœäÝ×&øB÷yÆÒT&£aaà¦3þz…$³ ÖŽ~¬éfãaE¯¹¶ê!a­s/{´èªÃÄÁ*’æMÆ.«×ë«åêÏX»È] bF\•ãr¥óáz¬Ÿˆk²Ù¸"pmUƒâº¾@âi‹€âÅÒ¸*.Ôv}»Žtª,w-YU<›ïÅ@G?Õt³ñ¬*=…!Y­R/¨úñŠbÓ7|–8…SÖªÛ³Î.ëß[o6±†Û•ñÕ@ &ß›cù4Z“­ÆÃ´Ôd‡d•ƒçЛžÕD†ïù$² 8Œ¿> ³hó¶´ïÜÿóM³ endstream endobj 1143 0 obj << /Length 967 /Filter /FlateDecode >> stream xÚ½™]OÛ0†ïû+,í.bŽ¿/K®[‡Í.&†‚€¶J«ö¡ýû7©Ö˜!9Î &Æyû’÷Ññi ì‘›OŽëÉÑ™õÌsoаúi×Ìz­`õ=»:˜Ÿ:¬PÃÁ¼Y7›§»öbÕÜýÜ<ýø³»ÚüzºkÚ‹/ a¾ZÑ Ú‰éÅ¢ýå²yh6Íz·ðÃíúçí×ÃëúÝÑ™æÈ†‘Á†rÈpdrëÀ­·îà¨,†[&§õäûDÐ`âŸqºQjv÷mru ìžþöŽWÞ±ßەߘÀQúý+[M>N`ÿa8±çb§©÷ª{«ÕÍìfzvs¾Úzîu¸? óÈ‘ä³ÒpÈP˜ÖÂpŠ!÷γMÃöôÅþ?û\5²Ý}@+,Âê\ýî¿ïëïž^Ê'ìkîÑ`v+·yìt/»Ø(žmlj?6t\ßæö¦MëEZrß<<­›Þ:vU€^è•V4cRÃGä@^2ÒÆ)5Îq%]Œéq*§Æ"×t1P\S±)j¤Ÿj¾ÙtPéŠ;c•b¯”£)›¿v\ûQ@EÅ=Óõtöašj<(FªöŽƒµÅHôóHÍ7û RAPIÕC’ºÍ½RHs.1íÃ&âÆ`USPRF¬ž*êi=ÔáÇôý¢Nµ®4YY]©¨nérèöõ3ÑÍ6›Ž®––Š,‰îÉ´ÞF_ah |*’vgÆ WyK•VDôÎf‹:•×ЇƒåxUVPõÂb¼Fúy¼æ›MçUYÅw›ä0¸¶¹W2L HÀÐîâÔ(´R5Pè#ZWç©mÔÁ /È*X*WåPíÉg’škõ ’®ÓnHRCæm÷*Djø@[‰cp*-݉6î NgëæG¢[©©ƒA[U©㊱éçÁšo6V©,§§?hÐ&_IÀb**ì%£|á’T Æ/°N–‹D«è©cÁ‚¯°Ð'ŠÑéçÑšo6Vt’j«”Vн«­256;ª¨$=dŒP]vßµí"µ,ˆq–ê•,‡k_?×l³¯ÀŠ«×å´ÞáªRó´ØQZVAµ@Å´¾ý¼\œ¿O4+ õ-Y4jSît ÒÏc5ßl:«‚F§=è‚ïJ€¦ýÄâ(¸’¶qç:½¸Xž¶/²–ÉØu/¢àaºÜYA_>Úl«éÐzÉ¥ô¥@~¾á¬H=Ùr´­ ÙìÆç_‹I´=?}íî_–²Q‰ endstream endobj 1087 0 obj << /Type /ObjStm /N 100 /First 948 /Length 1265 /Filter /FlateDecode >> stream xÚÅ—Mo7 †ïû+tlÖH$õ’n ´€ûÐÖÈÁq&APc·X¯ôß÷¥\¸N-Álsh8Î#J")¾ãruÁÅPÈE°‹­[Ä'$G¥é ;&qœðÓ`(N"ë :Io’K704—D‘\jŒ7Ùe.jˆ.WÒ¹BoŠ+¥ØÕØq5“#I®…nÀ ÜÖìZ˰dÝD}‡Q$}lx$Öýaaªz†¿Lzì!r x Tb7Ḓ;†ÇÒ†õ)¥nÂ*©u ;È‚™þsí&,P¸cðV Æ~c%˜bÀš“Ž¢†²á¥Æ4É&`M§ÇÀŽ‚ 2qµ›0ŠÌ:BÈ#‚ÊðCDÝ”1Ê+HLÔ™Y3ÔMÑÒÀcG‰Î%z~Ø%Í$þ`TCÏeê&Ä9Ý7 Û»››·S:eŸqC‘2_›NÑ£8l¬à`® æÊ^Œ›@1ú’­Ž#ÿFXh<®¦×fj„ƒgk0¨±7;fêÿÛ`*žÅì9xb#só95+,^›©.ž‚øŸ’ŽÍÌÈŠÇ¿„OwÛC¿³§è-å~Î):Qýkˆ›’ÌÚ¸ú“—³ýîú|EWpËÙÉ©[.ÖÏ÷à÷¾Ñœ]}\7Ëk¬±n·ª{}[ÚOnwwûëõö^6ºí§õý§«W»Ï®· ˆ( (»*w­åìj'Ú ¥óO‹^ù¨ƒ $èÄóò˜~¸èh 0g/fÏÜ<S4€3ö,±Yaò Òb„“¯d…£ø­p€(°X=¢Á68¡SK4zN’ ²ÂÑ0¦[jA4È ¢aezˆ1ÛB‚`Yèsvß¡c\°h„ñ¥ëõÛÚ§äeØÉ†põlM6µ‚‘d…õn³DØlbF4¬ž wÛZsøPG4ll,Á㦪ÕbµÂÅë¤ †jÕf†õbg+ ¥ýg®Ÿ“­¿¥ê±„ýWÙŠ±<‘-ý ÿJÙÒ_“ì¾_ÐÏÉÖžÉÖžÈÖžÊÖžÈÖžÈÖžÉÖžÉÖØóD¶FðT¶†ðL¶ÆðD¶FðT¶ÆðX¶ÆìD¶†ðD¶†ìL¶ÆŽ'²5‚§²5„g²5†'²5‚§²5†'²5†'²5„g²5„g²5ö<–­;‘­!:“­1<‘­!<“­1<‘­1üÿËnôÙ’øÕ²%ô/~Ûú‚~V¶FðT¶†ðL¶ðÙúoØŸ endstream endobj 1170 0 obj << /Length 1026 /Filter /FlateDecode >> stream xÚ½™[oÛ8…ßý+ì‹ 4ÌðN¢ON}‹ÄI#Ø"-„"‘ƒ©u›Ý.ûßwtq*) –Eå…Cë|ŽM ÷Èrt–ŽNÆG暤[¢4ÕNãp4Œ¤wäf¼\o&'\Áx™ïòýÃmu‘ä·Oû‡ï®ö>ÜæÕÅ'P°LX51½ZU/®óm¾Ïw‡…_vO_'ŸÓ÷§ Ä¢ - Òrj™E“¥]è;>­Ë[FótôLjá ì§q¼Q(rûutóÈþï=*%•+¿Å€r¡ñõ#IFFÐ|–5\4£NÖÏ"I²wÙt‘%ïJ@*ŠaÙ±$¨IŒÐtTL+¦)g’pê¬#ûœlÚb¿ž}©Ïô]¿A%ÌŠÕ¡úõÇoëŸÏ;4µ4uÜõ`¶”Ûß׺×un˜O™›læÆ-ÚUÁýV¥õª .¹Ë·»¼µŽÜœh€vê'Òâ3¾ñsNÝäß_U[K¥°RgIâiUNÞ U­UXob¡ÚÑC5ܬ?ªxE­6}¢ZÄ^£j}óW–*7©\R‡É´I½LV¾NÁQÀû£‘ªœ¥`L4R;úa¤†›=‚T`XTUŸ¤±×¤:Ïü•+¶;ª Ë€¢ƒêï\ùZ• ‹ªˆˆªX§TœGÄ™¬n"Îmý@œƒÍ3,Ŭ7œk¦›óšfðE€áþcé~±/ÇܤwµFÏ«õ*{ºeˆ¼2•Žw¾ÐÑã5ܬ?¯ G+û;_h$_áúc[ÿ==ú² p÷1|rQÛ±vÓ›f›d~­§Þðv;,⑃ *Þ‰C[>ŒÝ`«þè:A…¬jÈ|Ï÷»øÂA *|K$ï¿}ûÙÊþßâ× xfüÖ“‹›PŸÝÄa|ùE«³ÚcOÿ:ˆrð endstream endobj 1196 0 obj << /Length 1055 /Filter /FlateDecode >> stream xÚÅ™MoÛ8†ïþöbÊ ¿Iôä&Šë6¶³–¼h-Œ"Q‚©ºÍ¶ûïw$ÙkIITijO´dêÕ+΃™‘äž™ Þdƒ“s㈣NsM²;¢4ÕNãp4Œd·äz8™¯F¯¸‚á$ßäÛ‡›ê Íož¶ßþÞmÿz¸É«ƒ?AÁ$Mq`Õ‰ñå´ú±Ìïòm¾ÙOœ}Ú<}z}ÌÞœ[ mhQØ–SË,š,hŽóžTƒáÅ%ƒ$|0œ„Œã…B‘›Ïƒë@nñ¿w¨t–|/g~&ŠåBãïG’~@}1,«¹Øk*FÜ­Eš®O×ól=$ OßNçÉz5=[Ïdz¤tÔ©B±&-‚ÄMq@‹ÅiÅ4åLNud›“»š§¦ØËgŸësEdwƒJ˜³CõwëÑÔ߯§ÏêZš:îŽ`¶”ÛÞït—»@bÀÊ@Êz ¹¥B»*’ùoùvS…¬&{)(¤Èõ+ 0¼ÿúu½˜žùM®!ò»ËÑÁk_^8§€ö€i?E][K¥°-ÖÓl9Oºb® § µ¢q®5£ ³W,Î[úaœ‡›õç¨Õ¦/Î_Ä£;æZYª\/”sIF²IùÛEš½ ¬Vir¶N“å+ÔÓÓdýÁ÷ ÀQ@ÝhÄ+g)ø–~ñáf; 3»ê‹ø•=&uDºS¯\QÿlØ+LAR_ì}@*Ló""ôBbæTñ oêBlÖz% ¦yþ¿AÿËÈ ,…V÷¼t3=k!?ž/æW³Å*õ4\¼€`ñ—†aªäÑoé‡!nÖqi$Ýêø„·¸èN¶ÔXò¬ì…lL4’»ÙɇËÅrÄa˜uéÔ%Ã΋»ˆ|ƒÁ¬ï†| Ý¡V;ÀºVÙ¾è.ÙÈ‚Zt XÝ,ëƒoaðJn|ãS,f—IæKµPØYqj!%m£aÝÒã:ܬ?ØBŠ«_Åî·g˜6UpÊm~÷°É[Pþ o-ðå9ð¿,êT//”“†äO„§ã‹‹â­8Y–ùx±\/ÎÏÓ$ó4ÏöH<âGBn"Ñàmé‡ÁnÖ^nfeq$x  (ÿçÒSÔ$ÓÉ\ \q^'¹âw•Ÿ2•fŽ}çif³›ˆGsS?æ`³h怩˜æå„ÍLûÂÀ°™^šd†yC6`NW—XJfÉ<9ŽËWÝ`f› ˆ,3•Ž·}ÓÒc9ܬ?Ë G+ÝÑX>°0^^5Xöm1˜Âºdx/(£¶cæ¿[ŒÙ8}ïk°;bwgPPñ6gšòa[õgØ *¤ŽÔ\”á¯Æ<=z¢`±³¹ØÏßÓQ´Úøîº7ÿ,yÍÚ endstream endobj 1167 0 obj << /Type /ObjStm /N 100 /First 942 /Length 1111 /Filter /FlateDecode >> stream xÚÅ—Ëj\9†÷ýz¨UÝÀd‘ï!“Å̘,LÒ Á¶™·Ÿ¿Ôž`2UDEnëÔùT’J:çë&ÒžJ"Ò‘´&’溜‰¤¢Qq5 nhb^JÜ ©œ„¬ þÚ HÒRhhR$Ñ’Nµ;5UÖh©b=5^4ºXc¤Nwð¿­ÀL£‚Ü£ÊAs(M5¤qšàÅf\„-‚pé6Ífã2&>É®êã“Í´5´ªÅw¥LºÙЇåïˆéÄ,'RV™²Ö°”6ÙÆXÜ´F_!|tZRvŒ,¶êQVCª w´¦õ5uõÄps,l&.b=ÝB¨:6Prj¶ÐŽM [ú`ÛŽn-I,…‚Ú°è a¯Öä1rb•ŽžÈ¯c…0@å…![ÅÊ´`¤F+„­-lÚ6wÜ´ý®„ ÌÜ×~¢¦Ÿpãú¯ÓáøcœnîMÖÅúŽoO÷·_î>œîÏ®[±×§_¿¸ýš® ª³f†I†â©šï1Þõ’€ÇÙ6þéjñ äÛjŸQÃ2{}ä"ÞKá)ýX›®v´i–†WÓnf™xQ=¸aÎJsŽ´å‘¶<8Ô–‡Úr3GÚràX[jË…#m9p¬-´å²‘¶<8ҖdžÚrGÚràX[jË…#m9p¬-Ž´å‘¶<8Ô–‡Úr3ÚrØH[jË…#myp¨-Ž´å¿^[øiù?mMýimá·ÝmQf¼¿bm=¥¨-µå‘¶8Ö– GÚráH[j˃Cm¹™#m9p¬-µå‘¶8Ö– ÚrÙH[iËcCm¹‰#m9p¬-µå‘¶8Ö– GÚráH[j˃Cm¹™m9l¤- µå‘¶<8Ô– §­dË© endstream endobj 1223 0 obj << /Length 1112 /Filter /FlateDecode >> stream xÚ½š[o›HÇßý)Fê‹­U&s¿H}ñ…XnìÖªÊV¨JH)´ÖfW}égïáÖiµ aÈË<üý‡ó›s‚¾ ‚¶³U2»¼ÒYlS(¹GRae9ÒFMQr‡næÛð´¸`’Ì·ÙSv~¸-7âìöùüðÏ·zëüïÃmVnüE$ÙÆ1 ´Ü±<îÊQvŸ³§zâõç§çÏ‹OÉ»Ë+CŠç6„aØP& ŠÃ|mæ—å Y~È,HfÏ(Ì!ˆ¾‡¹D·_g7ŸºƒïÞ!‚…5è¿bæW$)ÁŒ+øüˆâÙ‡i^ C.jMI±ÕµˆãtF Fæ‡S² ƒ4ˆÊ­(½^Æï c[™‹æÃ¶c“cMÒ\aÀe¾[R…ˆak,:gè¾a«-ö뽯õ™ÄÎ¥úR˜æ³]õ«KÒÖ¯/iŸ_hj)l™Ál!wþRéFU,!fE,E3–Ì`®lÌ7e´~«Sî²û‡§¬5Ý\(Bj^(¨ (¾%\ëçǾ40† ˜sÀ¡3þ–ee Ü4aŽOÇã>¸Âdaa©F X˜‡À¬4Ã4½Ñ¬ÅÒ”/š;ún4»›íO3la£ôh4¿ °Œ>6i¦:ÿë ´’K; ÏL` ±úÉ3œÆr¿Owár!È|½âx·Úi,7}Ý‹ hzãYZƒ‰ÖÞxîè»ñìnvÏ„Bv–#ñü‚BƒïyBæbæÛ·‹Æ ÈØ…Û*Ÿ®®â )ú˜~èH›—23ùòŒàüÿÉÿ3Ú%A_ÿBB*çÑç²£ô‡~[ß}g³ýÑ—\C*gÑ/8(Øg~ØçPøŒš‚}a5d}úŠýÕ‚C³Iã¤èÉOëäõE?¿å œúC_h ‰”yC¿£ï†¾»Ùþè -p]ÂÇ"URPP@Ͻ@/TG#&²‘`¶ }ÍûõnÝ×/…ÎŒY” 9Óä-yGÆ]­@t4£1¾ª‚ÞÙï¶}9 PÚ ‚[®áH¦[ÉúÂ]ó)Hà Ø}ûr.¡¹bÚ»\L”ñoGß^w³ýñåBc¸úã¥èvüÝWO_Ý––9ºœóGušgìY›‹¼ºMrƒÊ!É&šôoNÇýn½ÌŸ¶$AšäÝúá}öôÎ,´YÌã³Cfȼ­‚޾Û*p7Û0Ã!‰óÑVAÅAÎ@çU@®¦óú§§XLpk®‚Ã~3œ}ÝcÙ§’*÷Ç~[ß‘}g³Øg*ý"úEä/¨©0waŸ eŸBõÔ“ôíp~PšèŸÂ8ø0~ª eóÈ>…Q*ïŒ:únì»›íÏ>…Ñ;ûUøGÉù| ÷TB½ÔlîAÛÒVß¿]‡cO W£ß.Y‚‰ô÷r©-ïF½³ÕþÐ[޹ï¡Lùó½ȽR9f§S¯P€hùfèÿüV å endstream endobj 1260 0 obj << /Length 1356 /Filter /FlateDecode >> stream xÚÍš]oÚH†ïùs •˜Ì÷‡ö*M M¥n U«´²¨1)jBw tÛ¿glCŒq‰£^œññ;ç=g|A7ˆ ~ëõ¨utª-²Ø*¦ÐhФÂÊr¤-5E£ ºn÷W.“¤ÝOæI:‹ó/Ã$^¥³åïõ·ôç,Nò/Ÿ‰$ýá4?qüþ,ÿp™L“4™¯žç«ñmçËèÝÑ©!È€ Å a6Ô€ÈL0^›öQ~ÐÌ]ÒêZÿ¶(Œ!ˆÞ ‡ ¹Dñ]ëú AøÛ;D°°ý—¼C’̸‚Ï·hØú»EÊÉ0´¤bSRlE®äf±ˆâóÅ2úÚa¤½šN;”´“4Zf’¶Ò…s‡~E Çš¤¹ÄRdÝyIfT †­±(Mд¤h;ZýÙÝ0¥Qëä©¿ÈÆvüu6}îPŽ¥°eöÄfáÒ›"îea#Ø•Ù(Ê62.|\þþ'™$ÓÜ´c¡ë®"¤¾3”¬‡’ÒPW_¡* "&É"ÞºQE1· u)–ÊæB^CvâIÌ * ,U^[ŒøË·„µ:¤+ÇÑQFa ó¨Ì ^þŠfof”&˜ Þ3JZȶhŒ™Jü0fÂÅú3£ƒu€=3µCËtÀWQ=5—!F,¬2”°íú<œ0éãV¾af¨¥ê ÒdrbDb*hsˆI+05¬1Ä*ñà ë<‰±ÐaEõÔ"F¡Rl8bÛz8cÒRÐÁ_‚1épæ;;Àùø.ñLrØdsÛ ` t›æøÚ ˆW¨Ôèâ 3eþ,¼²Â©c‹Z‹‰ôß Â«[-\åÊ|YLbkéK%ÄœWõ_œ½ñÔ*´€ ¦n+¡à¨›ãª? ¬p±þd ¥1Qªù×)(†ºw)!1“:tÚTÚá˜E°¶/B‰’ÓíÑ"ñ]€l%o°ñÀ­ÁR7×x¨Ä#%\줊/C DmçÞõzZî+îpbà•Kcž™*:bQxÿ»O>‡{+]Ì„b^ÑÞ¥’—t¨lÿZæÈ­~(A]¦óâ9·˜·9ÓEï’ºÚÑÒ®¯á/–µÓÕ<^Î 5á)¤Ù=Ä8Ùtï=§kkhÉkwãøÛ8­ÎõÛeL`Á4‚G%¼‘òj_”—ú¢ÄeHY´Ewï¾Û-f [±LQLÊ]žoIü=úé’•¤ ˜{Z×%ÎZÄ;¢ìÙ4Ë4S+ÓLa(—bÓËÝž¸Sé„s€ƒÝñ™¹2°ú &`¿Çlâ³ù6õ>À²Å¹iʇ²gÄj‘¤?¾ïË~µ€»TsÇÔ%cŠ:uiÃÓk‘7áÇóIþáƒ;?¾]%ž^0”¤ó£5¾6qÔpL¨l(qÔõ)IÑçê‡ÑI4EWÃÞe4èpÙ>>ïÁ†}¼œÅ[\T-Í~ºPaUë¤ZµÕ(…²Z7ž˜{ î)ÚTîË7¹??îÒ>y{6èEW ð`@³~\³‡ ûƒxÛ7“–Ù akATS6”nlŽ.Ïý§9r5Ñìâí€$°A(ldc ”nx{1½ÎR?콉à‰Ô1¤ýáì¤}ôvd+ÉØÄÛ n°0a,p‘íÊr¢,Ðà _@tñÃ[€ûƒxûÀ$ÓùÀÖ¢1"Ê7>.ŸÎ/®†Þy‘R„Öÿþ Þy§s̓òÛ5e«ÿ²ÀMÞ{ß_\ºÍÞèѵ Ö‰M'V0ñ”ÿÎøQ• endstream endobj 1290 0 obj << /Length 1674 /Filter /FlateDecode >> stream xÚåYKsÛ6¾ëWð(u"›Sš‡Ç™DI-¹©“Ñ0ds"‘ IÙÍ¥¿½‹%’¢Ʋzé ¸Xì{¿¥°wíaïlðÛlðôuz! ÞléqDȼ „5 Þlá] Ï&—£1åxx¦R•'±ý1Uñ6OÊoÕ¯ü6‰•ýñs|6ÂBìÆóçöáB-U®ÒŠð]”n£ÕèÓìÍÓ×{ÄL‹áKŠ$‘ ¤‘@p äð©]ª ^Í_h°Gö‚ÃAƽx=¸ú„½¼{ãaä‡Ò»3”kŒ(ð¼ò¦ƒß¸n IœáˆH^µ¦–3Zúƒ›…ص1d2{Ì$gàü…ŒÚwŽô€ç“óÉÙ¯öúÙM¥ÝÒu•–ή+ïÚótêtب8ùˆ1u­Zi}ÿ.Uª¥|â§‹&·4s&ÜDyyéaÌg8'з›·B“GÝ]$+0ñaÄàò‡çîhÅŒ:b±[jágÕÕÛZÁ¯4³gcWvw²áBŒî’&KWß~T¸•Ä%Ynl¯ßK”}‡Ú"P²/‚ƒ>ƒJEØéà G¸2¤ÑâÔ8^ØþpЧò}—FIÚ‚ ?vaˆ„ütvmò?Ò®G ÛÃù¾dÍ ìx$ðÖÂ]–‘¾&…v5ïI¯iÛ°ìIߌÅÔxâdŽoò?ÒñG Û#¡%ˆr —Á€EýG°Ì`%†¼u¸uù÷g`7à`Dýà¿€Ý,Ðßá§™Œ—¶ké‡FæWt=âÃ(ÑÖm’eÛr³u›Ë<[]Ie0RKM¡SÆbÎM–—&{š­kŸªš`¶¯û§ítðêÂÝÚ‰¿)GbÄaêÊmÇÞƒt€]L‚fK9 ë\­3-á­iÑ ]W*Zìvߟ¿DöÉ q‹ß9€03›7 AqÝ¿ ¾nU±îw7 Þä-·“x»ŠÜ‹µ‚ M“ 1wÚ"ÙvåG´…ƒ)ˆJµc´nŽ2;Ö…ñ¬¹°HœlìÇ6kôìÁþ'³ÇCG cÝó (’4xŒyƒJHتØè”Ù7Ÿ'€Œû望ìvàÕϪ1•XØÙ=lü´{‚"0ÃAد÷q @ʸ¿ûôÚ4& ¦^L€40Cu› óCEz0¡¤)É¡O„DÚ#\â å¿;´5ÉãÄ‚‹Tߊÿ˜ã­òu’Bò/§ =av…A%÷÷Üÿ Á»fM‘ â'gÍŠÐè]uh—­ƒ#YGe\MÓi–ŽÝ‘L××»¤PûjPûœ¯ËŒÔ¢šoG¿m K˜®lU‚‡?ô~´‚Ò}ÿG|§ ù‹ùd6¿œ¾º˜Ož¿{5/ʪsO0 cY—™“h0ÿGy2DÙâ¢<^Øþ#Ssìܨ AåiÿyPÁ|¡Š¸ß‰ÉFö…D[™†!«µcG!öòwÚ¿Ây± endstream endobj 1328 0 obj << /Length 1530 /Filter /FlateDecode >> stream xÚÅš]s›F†ïõ+˜étáÍ~L¯dËŠ-ää8M2Œk“L¦‰§•í´ù÷=‹³ 5,Ù ^!aôòòì{àìb}ˆp4gƒg'ÊDIe”½„DÒ°HØ*e·Ñ›á4YލÀÃiqW¬?Þl¾¤ÅÍãúãÃ×í·õ—7ÅæË[,ð4MaC6;Ƴ͇eñ¾XwÛç×wןFï²ÏN4Ž4ØÌÚàš"M4˜,H Ç+=|¶Ù(j2ˆ³Á_Çàˆ|3?d"ºùî sÈ»UÃ7Uˆáù†æWÑn×Mw6Íòù,Ma†ØŽLršévoÈD Ê;dÚ®šÈ¾»fꌓEž®Ž!Øí„Á!“$p»ˆ7aÌ1þ1†WàÞRìšiÜ¥I_eyœV÷ŽóYzê11¿ Ë0Üí¾´ËNþq†>—÷ÅÚµRGý´ª4›&yöú¢½ÃŸTfº]ò2kÿ>ÝêOz ìzÙOù> stream xÚÅY[o[7 ~÷¯ÐãöpdQ"uŠNâ¤Ár)b·èô!ËŒ6hgŽ;tÿ~圮—ÓVEãí¡­ó‰¢>R©§bœ!*lX yï … ²áàŒÏ¬b‚/*Dà SH†c…d#®Œ8x#RŠ‘¢h‰¬s‚‰¹IA!À¦Tð…Möu ˜+„M¡€/bŠä` s^?EHŒe«PêPÂ.ô?µš({|L[ã0¤ú’› ¤3 ±‘!v 0~²èLà¹Dý.¤N‡ù$`‚UE¬L(c1©Ñ lÚ’m©²!ø™¥®ŒwQ·ÀÙ€q5‰ øUU^À0G]LÈøèH%o|ªs%_¨âØu®¨+@6$ø"ä:–L kD2!C!$eÈcŸ!eUƒ dìëôª0è-˜ÎØ5;W‡uRa ͱú‘ªåñ-ªª“”0,Wºñ+x…a8 X×­{/­0,%Ι Èû5¶¤TæÄPQ˜sek&¯cˆ#Τ± ¸T'BV‚B`—Jl â)b»(MÄH¨…·%Ô"áñ:–Œ(‹Ùœë¾ ¢—Œa°jTÇ{,-1b€8•D‡õ“èÜ -Yý•Ø¢ž5Ç&¼IL ¾J§%×¹Éĸ]-›˜”•àŠ‰L=x0˜Kœ]Á¾0ã§¿þ†ÕmĆq:¬*\¾yõêÙèçŸ+øpµÜ˜Ìø[LÛ9‡°8÷"Ö¡;Y)ÚB0yüh½ºž-6æÒŒšñ|ñvcÞéÿýzWÏ£ñ>ÖX,7·z‚Î/·«7ëëÅíötÔ±ÓÅ7W{«·æÒa@ŠXuqf²¹<ÃzWk(5Ä·îV3Ô»Ýv­r”S¶ðÁv?Aßq“°J!mà-7kÅœË&p„Íš?ÁÞåF°X=ãm`b«§¿ ìŠÕLݨÙ[ç&°FÍÈ`÷‚3Øht7ç6|+؃V¬ØÐêmö 2±”Í©U15‚Ct¶¸V°ˆe/­à 2,lÙI+XÏvh3Øht6ê°ÑªÙãl·Æj!°Ñ†¥äl#oõ`çVp²Ùµ‚]DšnëÁŽ­àÿÿÚŠîÓkKò7][>¥-~²\® ôr[ªYµ¼Ê ®¨|/„^à^^ˆ½°ÕüѾêÒ£ñìÍï›úûäfùr4Þ[­ÿX¬«õîÙøáøx¼Iõ‡nøTgê.¨·¬…*2¾Vá^°IõÅÌŒVó•+¸~qµþQ ¿Ð4؈Pì-@5d“þþ‚Ïoo»ë‹ë—Ý_‹õíÍjyæà`Ôœ‘’Q3§bjb¯¬ Úr³Ü쀌»å½^í(¿°¾rñæv±^½¼3ÐVYÔ›h&œ%œF*Ñ¢%´ãh6ëö»³y÷x6½èÎ&§Óîvsµ¹¹ÞY0ÇEmK‚eí†2[GþËfNöŸM»ÇÇ;¶¾r(ÚÙ´5J¸£ä+¤ÍæÇgGÿqZJ!¹°¶h+8ïî+Ô=<ŸÍ÷&³éA×>9ÞŸvOwg îÝŒ¦ Å!“6踩8}«;3O+*4½p,²ND›ÊWø›œŸýzzþx¶;³¶q>ÑêÛ\9‚M!ÙªéÓGçóÏ…[½²¥¼ß{‘Õ×›Ï÷^Ú{ Áe,°Á(óC#8&Ü)TZÁ¸™ZÁÁÆÐ …2XŽXáV¬ÖŸûFMÒ v6„Ü ÖûÆýq&Ü-d7ì‡ÁˆP߸A&5:µ: ܪ‡Ñ7n0$¶úØFìs+<³k4ûô)uÿqA^ òüýy¾×²%;2J¨÷%u šg­”2*¤”>[©-Þ¾^­7ÝòêÏÅ'Ù6—oyéÊÃÙvøf¬AQÚÀ1ë=í`äÄÁ÷¨ApDNl5l‹4jf°Á¹‘:ÆÝ#ƒi`ŒóçZÁ>ÕR¾ ·snô ‰¦®Fê*ÒªÙ³Õ§îF06ï%g@ú;ˆ¾È~œ@‚ß›@ôå¾6àú`q'Ä^H½{á®ÙäzzÁ÷Bè…^3õš©×L½fê5S¹×<ö®û¤ ‡FW‹Åâßg+È_.ö¤›uGÝÞäߢ[KÉŸö'f»hˆQZ Å[eÇ útâFûÞ5W»². 6†_CmVôõ·‚4°wv®Ýò®¬¢+8Skb}Ò$×ÀÙ“ÉÉñÁd>í'Ç'Ó‘†ZƒœþYÍ ŠWÖÊIƒGN/ºÉÉÉùþŽL#0¦oÙ9S³-EÚ¢ítvÔíÏŸ~`Ú?Ç8= endstream endobj 1363 0 obj << /Length 1243 /Filter /FlateDecode >> stream xÚ½™]sâ6†ïùšÙs¢ïK’Ë–@Šl§ÙOœ 3Yº…¤íþûÙ81„#®d,ùøÕ«Gâ èÔkœ&“®¶Èb«˜BÉ’ +Ë‘¶ÐjŠ’)º‰zëf‹Iõ²y¶˜MŠq6yZÌ•ŸÿÌ&YñᑤÇÐÐâFû²_\Œ³»l‘ÍË·ó§Û‡æ÷äËI×d@†âN†0 j@d®@i¯MtR4š¹G¤ñwƒÂ‚è‹pxK4ùѸùNÐú¾ ‚…5èß|ä$)ÁŒ+¸~@qã÷yÓ e0“HK†‰(„|šfßaóìµÆL#- æRl*à0BJ¹PDXÜ£âb¼M ã+PQ§¿Oe M/=KþHûóÑÅå “tr}åÌÖt*†™f¹Lº[&…¡n&¥QësuÂ<‚p®°f/AÞt™Ã#‹™eM*£ÿ³Å¼àä~¹LGýó¦Ã[˜µ¡L¯j{v}˜¤Wqgœ›\Fí ËA$Ù-ÒÃò÷ƒx[Î4†-³§ãÐ2 óŠ´ªáŸGqršûwÎSp¿iHtÝ?ë|`@8²æ*¼Ä{¨ÄFï >XLM0ð«Úªëp9†£¦Ù´,j>à=¥¸öx7†·ó„cÃö5žLy0þ+Òª¾_´›‚DgŸûÃNzÕ?÷w^Yx ¯I½G_ï•¥X+µ§ùÊLt(ê×´UÝÀ¾÷¶ñÄPÙ…–6Ø¢šcK)jqйYgçÙr²˜ý|œý5wOÓ-¦ÀyStwŸæ×·ÜÖ™4‰~ýÌ–E"t;Ÿ×îþíÃS¶\%S´’L¹[i_¥ ½SHÏŠ£T–Géó¼à!75×l`%9Ö`•TsÊÝB¸û’Â×0ˆÁ×¥E‹ ÝUò«õhÛï¾~e6åî)ÉgS/~‘/nÄ/sCŸ7Tc)l™=€Ø<Üâ~·¤ÔŠb5E%C—Rc%VGħ5 _G!Óìn¶J[Ëq覥Ùà¡`á…ƒ|õÅAçJÖÁa£Íç¿Fs9ˆ-‰Ú…ôónõUïŽtØ­Á`ÆBºÌ‚Á¼¿ÌõÅúÃ, j"Ë/ä˜' Â(L?ÉÂmš-5]/Ž\᫘ l‰ H/ã®'¼kák²[WêÐ…J…qshvWKŸwp_t*z f¹Û„maöÚUdíì7HTÛMK¢¤“vó›ýAÇ÷(æÊB«ÃÁ Ö£y#~=œë‹õç™C@¸:4Ï׉¶C¡À !|iÒåÔGÛí¡­I%ÑU·Û§íÁ`t櫜ÈRd8Ž™åX Œãøõ8®/ÖŸcf6üð9E•¼[z¢À,ÁRšc@Ì`¿@­¾#7¾ˆóŒ}¥s JÀ*1ƒ¹WåmįIqm± ˜S¬x*¯D ïU¾$0¨÷¥:ÄÔº¿môˆ¿Ž›ŒD#HëãþŸ¾¿TP- c XÜAµ€©àÁÞˆ_áúbý¦ðNÁð×ñ3y§öå@‘ò/«àÃfaVî8†¯â¶ûÕ­ç 1—„CØjl Fðzøz×–ú~ Åpæ‡8ƒaý{+~'ªüêO<µñ-Û-9¶DìóOúÿúfÕh endstream endobj 1392 0 obj << /Length 1079 /Filter /FlateDecode >> stream xÚ½Ù[oÚHàw~ÅH}‡Næ~Ñ>qš`Rìì¶ÊVV•8Q¤©ô¶ûï÷øÖ€¡Õ°ãñÓ`Çž/gŽc‚Añh–Î^i‹,¶Š)”= ©°²i £¦(»G·ã8¹™¼d’ŒãbSlŸîꃴ¸û¶}úúo{´ýþtWÔIâ4…ÖoL¯õ‹uñPl‹M;qùaóíÃÇÉûìõÙ+C4/Ó†aC $Ye  Ì×f|Vš•_EÙèóˆÂ‚èsâðE.ÑݧÑí{‚îá³×ˆ`a úQÍü„$%˜q¯?¢tôfDv/†¡;Y´1%ÅV4×"MóËõLæiç7Ée²šÀyü•äoV×UR[Y,‡¸“"Çš¤¹Â0@†åÛ’*̨@ [cѶ@;)í;þîa|&1óh~ LËÙ¾ñ›Ë±¿½œ.¿°KaËlÉVá¶MÜu³Ž°^Õ:ŠÝudseë…|Q¯Ö/£À”ûâáiSìÍC·/!G4ªO­+Æ0¼<$tÆ_VÆ`ÁÍáË8ŸÏ§AÆó‹(OVËéÄ’q6¿p<¥–7f¥(–P¡BaîÄ÷Ã쟬;f8ÂFé~1×Z %ƒj%®¤ÁÒš la¡Ž€¾ŒÞe¥âéìÿ€&ˆ ´´­ƒîÄ÷íŸì   …ê,{]rh(<ƒ¦Ž¤-·'3„h ÅCp~Ltgùr‘¦‹$vÍ[H¨Ë< c. ÔÉpŒ÷ã{2öNÖ±äê2ëñ®Ú0sµÀaW2jÃÂj¨Êô˜ád•§73øct̺¼ œ†,4…ÚÆ‚ îÄ÷쟬»`¡nwÖ?¨ùrW ö #á uB0{´K^%Yô6Ë£´é-®éEtîzú"fb&*\8Ë{á=)û¦z‚dˆk¤é¿G~ÆðBZ¸‚ °#:j®á›LC=›p |ž§‹8ɳwבcö\BWÄt8Î\L” æ¹ß´²î¢¹Ð®~ï¢g{ jËÒUƒ(÷¦Aîú8ÔÁÄï,_EIœ¹Þí1 ­ ø¿8f'Á wâûAöOÖ23J3¹!P+V®t¹-é!3Ááz³£mFö6_$óÕòú*Ê\Ë1cÐ!1P1ÕPáx8Åûñ={'{‚bF ÓþŒ}µdíÊÂ~¤i˜)T Ñ…œdùM­ódºtL´CS¥ ÷H¤ß°²î€)ŒF4w<Å?_‹íæ@1iC‘Zq¥ññË—|µ8w›ü?ÿ ƸZ‘°Ki6oˆm©>ô}±J³ºáH#hœ¢uùðÏÅ<: =¾‰|vb &2Ü£“ýð~æ½Su'o9æB (¾ÂÒBé 9¿Ý­Ï.¥ïù!hý˜úÔéÿò½Ó endstream endobj 1350 0 obj << /Type /ObjStm /N 100 /First 989 /Length 1698 /Filter /FlateDecode >> stream xÚÅYÛn7}×Wð±}X.9Þ #€,˲`[R½rs1ü&B4° ÛÒ¿ï:ÜÆ¦E„2š=Krî²Þg|ðÞøD \!Ní›ä«Ñä\DH¦!ïJSტ PvyäAŠT𠹈§+¦(ËÑÕ(OÉøÌM'Ri8p)¦"Rn:lY©áðµ&á)rNØ…) «!Õ¶o4ä¹é ¤ÒpÕÉRTðeÑas $8öR5ØØc‡À)6T0 oF]ÂÓ„ ¡ÃÅÉ]Ö¨©ép™Þ7]0¡E¶ÁJò.ElS öHÐå(gLÐ'÷˜$K`©Pªèp”PCÃHEîdÙ‘è8BJ²[v†½—ݲ‡e,Å䚎 qÃÁÆTEÇÙ°\t ©1Å¥3“èfÎM‡Ub;QÆ1µw«xŠìïàÔÜ(‹® NÁ™Eºœ›·À¸ˆ„.%Ë)á\ItØœkj'÷&:qÍPEª{€n¤f…(Ró¥ÊÄ—>bh¾Wˆ¡ùRM&rh¸ ©ù.;ÆæK cj¸jbò{D¼‘Ä윉À s{«äÚtdb .¥ùRÄzU|‰A2V±Ãõ“kö€#!pW°ÂJì`ÔìxC¨5]1‰B{oÜü>ê··ï7·W’ÜuÒÏûÉ•o_FýÅæÝ½¹"ª6‰O²µÂ™³· >[°±980ý`úÙv½5ý‘ùa6 ÝéÅaì†nÖ½¼X.fÝ03ýi2^ ?š/Fø÷‰eg+ÂÑbQä ÛRânf‡ã£îrÏöF,AЗh=2¨ÏdKØÍërqºX¾\t?/WûbÆÉx˲$ÜälÎ;¯ìtÖM&ãÉÉ´[,ÏÇëÉɾèd‡ ¬FÅfò z§Ó×ëñá¾éÙŒxC2³Ürr²)%½õlÝχa¾˜í‹›wàŸËl%ùxb›¼æêËn¸<Äî‰Y-í?¸›m%ß“EÎÕ¸Ür±ž¾ZwÓ¦=›'Ó£=Q, ”ZyµR¶œ³¨< †’H†ùlÑ­_¯ö•LÄž(Nâs¨ö¥X椤v6]ÌÖ_ѹBÿ‘±Û…é_½~c:/™LÉÅ:t'7Ÿ>~¼þ&:ÂéQ¦2{+%[5#hÁˆþ §œ“U Fºc¯›‚Œ+Œèˆu`-ÜM‰…ÅIy¾ˆô.ºì¬t}Jp°è—u`.ÞJªgI´J0<””Dïk«WP*¢Ì5Ê•QÐIy@ÉÈh•`ø>ko#Œò ooî[n8FGúåctßåQDÝò_di x¹_Ýnß ¤Ó¯ŽŽM¿Þ|¾7×Ïf«·¿mFý{lnîï¤y_’ÖÝöÓí»ÍÝCçÞtç›÷Þn?›–çb–Ðí$ŽR‘ÂVoo±*UÎø–*ï°¨„V›§¾ô(„G…Ø„ëïx³e\Ú{ë1.æäQYU½ÒúU7_L–竳ézou)UfL¡(Zt« ;Ø-Öè{§Ýb|¾7Zl(aåˆñ9‡l1íäu²Ö‡ãaŠ‚:½øe>™î•¤<iPNfÏLpMÞÉqu«ÎWã³}rKµZþ0#‚#ƒ«¸ßî _L»ËùÑ^é• :HT˜½\C®;Ù kÜÝìÛäZŠKô´'A)Ãpüížä)ú±X"rJJ0”ŸKT`IòKœŒ”&6W‚‹õU è] Z°³Þ%-X~Q0`H+EiìàØVÇZp¶¹*HmÊJ R@L¡Î(WÆpW•ô2Fg¥=º¨¨…f´ñçýCW¢£I¤Z´+2dþ_»³J_wgÕý§îìéi«ÿ7ÃãSôÎáñ9p@*S¯ w TtàÎ쫌H¶51!hÁ‘îµàöÓkW&žTžLj×+WŽÈ!5Œ‰^knT-ÜiÁd9h±(/Zk3±e-c_àÍY»0Ì+Á!9Ô-8b"xv8~\lЛÐý°‹Z°ÄvЂ·¡46…€ÛЮLòÉ׮ìmPbåÏÊ{óIûI2ú ó›¸ý endstream endobj 1426 0 obj << /Length 1164 /Filter /FlateDecode >> stream xÚ½YËvÚHÜó½„í¾ýî“•˜ÂÙ89–}8ã0À3ÉßÏm=lI`Ò+ ©Uª¾UjÕŒ<F†³içäÒ8â¨Ó\“éQšj'ˆq¸5@¦÷ä¶;ßôú\±î0^Æ«Å<ýÅóçÕbó#ÿµúw1ÓŸ™bÃ( ¤N¯GéÎ$~ˆWñ2xu·|¾{ê}™~8¹´ŒX¤¡…§!-§,’Lh‡ã힤Ãý%Á´óOp #ðJ/ŠÌ¿vn¿0rç>F¥³ä¿däW¢€Q.4î?‘¨óG‡‹a¡À"ÇT@ÌjE³ß&gj6žÎ®'£ñùèº gøûl|z5Hx1ê”Çô›a…¥ †Ib„¢J&,ýqšr„SgYÅä¡@«Œ¶ûèö ¸¤Êêü)0øÑ¡øYIÊøyIëÜ¡ˆ¥©ãîMàVî$Ó5K´”E-¹¡ÖdbÆß7ñj™jV€b9óP䶯QàÇõzöqtQoð—” ’]ÞÕu ªœ qLeû¦ÝµÕÔ»í÷«ÓždÝó÷£ñ`v3ºhbxmR´gx­V¶fø ~˜áÃÉÖ7¼ÖWr~DÃ_î²HsËkœpê(–÷OʹeùhŠOï°±Û™¢ ¡=·+')XÞšÛ+øan'[ßí¸DRiŽhöiîu倂¿ÐëUÏb¨b­¤£Üª´Xèÿ ÷>ÆÖýkõ§êÇ=PÝï›4§•â"#}Ž"äëKit97Y¾/ºQ.¿PjýSè/œö4ëþø¯Ó€w·¼Ow>ùãwOÏxbû怤•A öϲ{{Ý“Ûu-ÕcæÜ‰ÙÎrQÍ‹¢™¯S*‹‹Ûr[l§hŽ”4Ê*æ<(/+¥2—8áJͱ’ž’ær%À¡BÉ—[ž—'QD|ÏóWíihK¹"R ŠÙ[àÙ}¼žï©²pÔh×V•‹_Îõæn³˜®6RSû©Õ¨öaÚÕ@eP­1ámÕú•^q¼‰“Ù¸'TÁÚ¥G¦ T`éƒÔ.=`,“aFE1ݵUü"Ábùߌ¦gIõ£ÁÅ µèYÖý4:4×' u $1j+ Å"IéZ¤Ào×—Ç“M5@Î’…>‡Aꪀ!<‰2Ì7˜7Z’¡DpoÇÚP O[ q£¶V`† Œ£Òµõ8”¾•’÷HP ‰}0§VŒxXC›eÅ œájñm³ø; ÷IÅNQe_,.Ÿ—sn]:išåÌR“è1uzWŽ;˜ì¹òâÚözA.Už­Zé+øa½`8Ùú½ Çþ†©c5ƒ?ÛùqÉ©±ÇøÈÁñeå8ì‰ÉÉ‚_ƹnÏÌ`iÓš™+øaf'[ßÌ€K«}iš›ùõ½PÿóÆŽº±Á`0?޳Á?CàÞjKªo›ÃÔý+ƒËmŽ YhÕžÍËø6&ÛÀæ`±Gµù›>ù ÏctF·ðoKb´¼ÛîkêüÏù?MVv: endstream endobj 1454 0 obj << /Length 619 /Filter /FlateDecode >> stream xÚ½WËnÚ@Ýû+f‰¹Ìû¡®€8ŽÓB(vº¡‘…À ¤©†ôñ÷c[5F€cV×3Ü9sî½çX£ÂÈwº‘Ó¾S0’JÍ‘ CÊØ¨ŠfhÜòOî ¸å'«$]NóE˜LßÒåæO¹J.§I¾øŽöÃÐ’ot†Aþ0JæIš¬ÊÄþdõ6yqŸ£‡öÆH[’e4¸¦ ‰¶$· ¶ùJ·ÚyP4;âx‘óÃ!6#ò¸=Èš¾:ãgŒfö·„~m3_‘ (“öù…ÎWW›¡I…E‰)^ô" ãÏ£®ˆQ|ÿF]—ÙòBï6½‘kKúô¼xÐé{ñz3ÙØfeL1‘Ý’7…9RL€à[ÞÙ¾ (ሂÑ¥ šWˆî¢ß=¼€rZ–äÀ$Ë®‹_4i¿lò)7T±$j>€ì.]¸£bºvŠÛéòêt©­Šñ&¿7IºÊgVÂ%Î ÐøFbÜZ¬×ñcpÏ’õô´â)…s\4œ¥õéTQ¨:*Ú‹ÿ5…ÔÓ‡®Ž‚A/ºÄÜùr¤ÂÀ8kÎ R`š7f…=üzV¨Oöt+HIí[Ÿ^Û …bމå| H[ 3â*ÈÜf{`~Çå¸Õ»^üdÛr°ÂIs†Ñ´1ìá×ó@}²§{À¾>«k[ ßyG-ç›@İk˜@d~cG¾ŽÂÈÚÚ¿Pÿ‚ÙORfÔ?µ•èæä¿_Sýu©ž!~FJ}mõ¿'• ÄOC>Püe<3· ˜_ògã/ÖìèW endstream endobj 1553 0 obj << /Length 1144 /Filter /FlateDecode >> stream xÚ½™[s£6Çßý)ô3]‚ÀÜ16»—N2éŽÆ‹•,Óg1ÙîöÓW@j,(IÓ§tåf£C’ö.rìû™Ð¨bjòâÈu뜄dJ$«$¿¦3«Ráû¤/÷ã9~͉DAN ”u àiœ']0ˆrà€¬ˆ·óުȋ¾– A5F±xÆb<^BF 錜wÉÑ)êõøŠ4KS CG†ª)[ÇߊyÔ®„jAñ)™“ˆgVø&Ù§SŠó†ùfE`ÔÅÁ DÅFG!`ÞO;׫¸È óç<ºo×mUŽaM1,¹JâT6ù|&¡Ùá4Vú2ÎòYOÎH¼T¶Ué×À#@•ÿ?™A¯þsC®`MY û K¾z¡ïPÀõÖˆ,O»º @¿VzÁc+,¿ƒ)(Whˆä ,áû5™æ)–à.dz2”Í}©OSâλ] kÐRã2NxÕëwŠû=¦"”M³ %I·îW¡eŽ)ò®¾mÝ¢ Äò4ýìµË 2rÙ—x$âc ¤k²¢Û]ñz©ßÚãÓ_çü3\#@‡uMžºQé“ãeèYUd·[^®ë]]•ëûêOFëõ–‰ÔF·ò˯¬ü~ïŽX³¯võy\ÜmÖ@]@à®Þ·ô‹¬©Òã­¬Ò-kèè.ïTÛbÐjlœÃ3yáÔ L:o@u§6 ¸Ã1m«Ñ”ш [·Œ²íCûópºtÞ‘ÒU(U ëä"öÔ çTSuúžοÁrÝú endstream endobj 1416 0 obj << /Type /ObjStm /N 100 /First 986 /Length 2389 /Filter /FlateDecode >> stream xÚÅZ[o\7~÷¯Ðãîƒ5)ê² 8ŽÛd »ØÖÈCšŠ` »p ûïû‘3 ’íÌøìb|ú˜–y>QÅ›”KæBæ^C‘K.a$ý‰_Xÿéo]GHÕ®j¡#zÞ”¡‘”BïùD9¢)U¥pU'Q^!E×Ï¥ebÍÆ7@Õ¬ÅX³o4Q>ÆmÔ#ü|½ØæèÝø0Ç3ã—Ñt..é°bc5PÎ6Ö@‰õ@”ll€*‚U”ÊÔiˆU¥(SHá@ªP˜£4Ã’m sˆ¨š ª‰ue૦:Á·±Š‚Éi½ üºéSðíÐEÁ·£éXÙXUc9Û– E‚ª °`¥2¨bs(5tŽJY•S*ƒê:&+„1QJ`ø«èÁøÔ0tK ¦,¶/fPÚ0¾Ê Ë—dëÅvJ6­5 ¦ûÆAt"P%@-ú-¶[¯2· C*:–*£_5›&Û•JÇP{]ËŒÿªØÊÁ\«™nçP[S™_GR¼.¡%Ó.Ì“é¼Pqc³*ØWÓ †0˜‚7|‚1(¬uVù…6l‡žm/±üN¦É!¡sÕÙ °.fC£…^Ùøzè­ÞÀáPËU–‘T§’rYu*زAªSü0»ˆ1̆ Ù0ªêT 8d_´0†–”°~@M0é£gÏŽ/ pÆ¿ ‹}ÿC+–k‹Ý~úå—·Gß|³Ÿ9ÕØÇdæ NñDæ+ûŠùüîö!<{çØ÷¶þæßÄ‚7PçP—¬YðñâòþîýrõnÂâòÅyX\¯~{Ÿq¯ÿóë x÷óêhqŠ9V·õHVýþhqµúx÷éþýêãú˜ÚØëÕOÞ=¿û-Ü$ ÈH0/Vèã-æ{wx·ÖÖü'··w½YûHË|䆂’Ù r‚ø/™ öh±üôãƒýþí‡Û-žßÝÿ´º7ÉÒÛÅ«ÅÅâô&Û/º˜÷P\W¬Øe8‡8àr©§Èê¼k‰½ øNLÑ˰xyw}°Oy¹\ÿýê¹üíôärùWUëaEᎩIýW„GRÏ;í•äøãû‡ïŸ@‚]Cˆ2qàlÂÛÇV÷«åøÍõñw˳«ã7'¯ÏžN²\ a£Z)´Ç–ìÕ?–×ÏO–g/Ž!á?/NÏžXÊD±m¤M8‰8ö±Êãú»¼ºxszqyòíÓŠ‡Äâ0LŽ¢zûgSîõÉé«‹7gÇß]¼xbñZˆtØ[ŠÚãAQÊã.¯¡¾—ûäSo«áã³·=ÆÆ0‚EÇ” ÉÍ|óWÜßÜàå<Ô4f–8Md†à‰ÌµU˜þ˜ÊŒ\òTfŽ•§2ç¾bslåTÞ5áÄ,XŸ¦ÒÓ˜ÇÉê$fäbÓ÷„a¹OÔÃ; OšÆŒô7jÂ9¹rD1‘YZÌ49Å”'2£ÌˆHæ¦2ë©*S™¡º<•nn¢}B±MÝ’¬þ*ÓŸš£IùcŽ&ô?åhÈyŒÿËÕ é#s$T\»}ä—ÜúÈmÌ;}äVæ]>r ón¹•y—ÜʼËGncÞé#·1ïò‘[ywùÈ-̈¡Hre*32bîS™9µ?ó$ÈZ¬¯N‚Hþ¿N—ÕJ•MR«^¿T¯_ª×/Íë—æõKóú¥±Å GnŽÜ¹9rsäîÈÝ‘»#wGîŽÜ¹;rwäîÈÝ‘‡#GŽ<y8òpäáÈч# ²–ò";AN°Å q¢:ÑœèN8rväìÈÙ‘³#gGÎŽœÙ+Pñ T¼¯@Å+Pñ Tȑɑɑɑɑɑɑّّّّّّّّّّ‹#G.Ž\¹8rqäâÈÅ‘‹#—qÈZÇÅP¶mÀ±i‡¥Š¶µpü¤oMëÅ鎹®¶ÐXÝ¡:‘uE›Y+\‚HQx·ý€2 ß0xhéç:Ùè2 Ò¤ÒvËPè€B 5ÔN"Bn²26æ »€^h ã€2 !«Ú!'†´¥mÒrÞ£9¤ Øxœ2xÄÈcÔ~Ž;ô²G5V9ÀaFkcõ¢%¤ã{´Pó%@Ô”"Ý A o©ãôÍ¥¤%©£¶qBõNC‘rɤDÖv~Å&èÝHÕ&„h%RÍs)B"ܼ6þrÖxƒ Ø›j]š™dP?©wHÿ²µæ³Õ¨Ú(e™KŒt1L›{dw5ÑÐ):×Ñ€'@)¥½;Ò°IÈI´7 ûœI’£^’i‡Ž4lÁ{—DÖXDš7—!c݇ãRìpÀ]k“Sx¦ó‰pEˆ¬}ún7ipPlLi2—¨+¸ÂCÙEø mWÖ9}%êýÙ×Î %|W¬u6= |#YdÛzsŸz‰Ëj's œÂ¤sBÑ«wFÓÛ_Û“2“0 ÙL ®‡õ1@D¢Ëf'c&7‡Ízk#´Kr½”™dÀ‚íáÀ€c°ûu8 ”“z•Õû˜Ï*»¾'è°B{^Qb‡04us™Ñ_WÑ`†¨£Í_£‚¤Nq´1ŸŸÒË[íÕ®/é±=C¨ñL6g í\*0D}µÕÛ$#¦º§ê“CV\Èæõ šPí }Æ C[™¤á#Ï»(ë6}8À6@¨Ö¡ Ä´¼¯þ­tH!LÊlÝ{½i#}]ƒŒöU¿‡!#¯mzÌPßu ×®º9Ú_.sY&¢E1ë3íøê'”`´¯ú=¨-[ÕÛ`ƒúD¥£NZb‡x¶ºå¾=+ƒ jù‹Z£ë#™†d_ù{Ø¢+ixXšVª/Ÿ9—"7${<#´^Ü“Z†:ò6›"Ö•¯†òõ $«Åyè¥Á\ç ¥>÷R?a°–Z*SC~•çêÉ`R-:“À,b-„³ H×¹AQ›õF¨¢ \i–#¿Ú§‡Cúêuo®£ NÃâEªFŽuoñ{8 PÝD" ßT7­€òS •¾7nPÑdšô$ÂD:ú„¶ñ!õ€Ú_ß” ¬ !nÄK}Qûh×ø³~|pl› endstream endobj 1664 0 obj << /Length 1446 /Filter /FlateDecode >> stream xÚµš[wÚ8Çßù~´ÏÙ_/`„ãÆØÄ—$Ýn%ëSnñ¥múéW²!!]v%å%b~úkf4š‘Q¥I•¼Þ(í]L,GrúŽ©›Rz/³o:†d9äjiRº”>Ë^˜)t ÊÞà"_´o¼¨‹¼z:¼+¾ç ܾùKª—$䢵 g~û"Æ÷¸À›ÃÓù¦ž¯”/éÇ‹‰­J6‘aTÆÀÖû¶f‘K'÷[¶|Ñ^È[ò•L{=Ü£JÚ‹pòEH‹uïóUZ’ÿ}”ÔþÀ±¥Ík hj_7Lòz%%½ëžÊ4ÐúΠUòP–hQà%ªËùFÕ’VDñ µ/b¯'}n&ìæÿ‡!ÈŸpD«~¢|É&YLÒ/滲^Í+"lûMÑToXX“»Â„XâZl7V4 ÿdÉÕÓ\󈛗»Õü mækÌ :[åžVVóª.Yê6¯Þ­ò5%‡>`0y$èE;‡,1ãX¨r3Pl7·~Ým‹ŠË#¦€ÝbgÀõ\¡u¾`¹0Aùš{Æ/¬ãlÙ)"ß,ÛP\ãÅ߬Ø64^ÞU¥¦2ýoë¼À †Å!u%9—E3;ÑÐ×§Æž,÷n*¥¡ûmÊy¹âÉÝÐeÃæájܾ¢´–Ëa  që=X€=`fº«xXIÎᢠ0E—Q’ŽÈÃŽQcÅVåß…(l>BÖX¶À±š]ëÒ™áômðzë·ùáøóß"¦CºO¸—~Qæ¹§ÉoÒÿ5¹v Kåhû¡ëÏG—‡Á;Lä4_ø4’”Œã½“3NÀß6!•‘P~‡åò Ë'š×0 òP»ÇhšxÈMïXd«;ùœlrÎ0Ï.~x–4«Ù;W¸y’MŠÞl2!îAä ”F4j³ð*Œ¨-nCtÍMÓdA!Nñ7ŠFíøcjåaƒO!š(Ö@úéÒÛ¶C ¡’øŠóçÕK°0ôÒKaæ9"'¾¢ôÓ Š„»î~§"Ë3šîï ÕïFa ïR“Tq y8 üä’íÕNC¤wˆìSÑtÀT¨}®à§½jö99a„’lDR4Ý‘EŠO=R‰øIBR£ ¬ˆˆÖÆM=,à˜g›/~¬ç«·íìŠíÓ3¨—–ûpB×™]Æãv×õ„ì÷«¤[zC2M§?p^Ø^áy‰ÑWEWåú^Ñ| º®Ym"»ë:°9šN޾ø@ã9cà×F£ ÄÕÛzbãílsšD©És ùá˜,ÆD r ÙÙ¨ Îg–"3·½àxK¾ Hž°–³°±: Ɇ-’ÖîC픉!—TžÇ4 ÷ÌM³Š†î·ÞjJ ’h@ÃáøÌß·±ŸB!Cp–:k_ÝÍü˜YÿXœD?ÌHéᎅx(ƒ„: BÇpÝÔ¿G|¡ØTÑl9º‚¡j6 |÷¹œÅ´aÀíîp^Ý\Ázè˜Ø Øâˆo8+ïùƒ4“dµ’Ò4`PR=,N ˜¨‚±X fû\€œ¥—QLZرO°´ ß7ã~@Ú4(ÀY˜ÀkQV 5_‰ÙÅþ€MÉ6o{ŽÙL/›ÍöÙnͱbùÙ‘&Ñ›Ÿ@V¸¬u-ZãõW®z°+ð:ßT†þöΫވñD½ùQÌw¬þŠý\°.q±ýƲ;»§øN[?\ä÷OÔ›gƈyŠÇó–]¶ÝÀ8ñ#ÖBÒx9h:üÈlqt~š ¤…ÙtÅáÚ§œG8쎞'nÙ RH:ú…Ñ*_çÌä¯{1±£Cð:Ákv‹ÚY¿Ýr¬ šž•×S¿:è}Gœó££ècÌ endstream endobj 1555 0 obj << /Type /ObjStm /N 100 /First 1017 /Length 3007 /Filter /FlateDecode >> stream xÚ½[ß‹^·}ß¿BíCõI3#&ĸ-´`b?´5~p¥„†Ý`¯!ýï{Žî$½z˜]}k}GsFóC3·¶ZRIµÕšªV$IW4élXjâ´ÔÛà 'Ÿk²§)Âþ\Úš=S­Ãïjà*4Á\k]“Gç“›Xª£­y˜cÍëI*®\YÄÖ7Fu®/3 $ÆZ ­q„wŠ©x‚Y‰§x„bÄSKZòiKª…(Ú“š­yž´ùš7’zYófÒ¡k`ŠNçãZMV ç™$¥T€7íăÖÊš×’u¥Tܼ¯yžlL>¯ÔŠ’› \*ÖhäxBHO•2µŠÑ€$»osUÔÛâ±õÔûâ±yêcñˆ­é³qý6“—Áõ{I.µc…^“«q^—ä68ÈÞ+ñº%÷ÅcoÉÇâb²xìžF5JŒ²xì3 +œç% „5@ÒèKR—4F¡|ø8¦r]·4‹SËÞÓT%{XrÚb[<{¡,>ÓôÅò(ik@ð9'¿1U¥¥Î”CmùØåP\²W¨6‡Ê•Þù02Ÿk.µvRÿÚ Ú–Æç™˜æÖSÉ¡Ã\bb5(1Åçwô†-«Pc.Á%¡Çk.Vƒ"wš¼p1Kd):õ@”R÷‚ÏPflQ§î@›ÿŠuĹIú}6ñ í6žWЂ!VS­ ÿîFÉ †ø¡Žƒ];·S‡ÙÝ‹w··ÿùé>ݾ~xx|º»½ùòϧõù/?<üûîöÍã§ïï?½£q(ïoºýùöí»º>Üݾ»ÿø”ÞYiÕÌP" É•jܾ}L·—éw?}ø×}n¿O_}u‡ˆ žñ88(-SÛL-W<'`žSöÈÐ*Ö„ ¢y¬sŸ t§8=¡¡Ë…28y€-©y@ agr,°¶ø}BCïWò02T׿ÄöÃè•l0µp/쉆aÙpNm@¹³g£Ý#WßÅÃ,æVûC/YéFϰÃ{x€5É b:èÔƒ‘ÞÁܲôº‡>9 L&ÎåF™@HÙEœŽ^>W¸8x©Ìðn„l"‚§žñÂÈSŒ!LÅ®Ìm*c /dP YÁ†gúb‘]Lø€YF¼T ‡p<*“6ªa£mbn«`;tòd° mTWÝÄÜ“#Ð5D bp™ÞnC=ýŒ‡zåfÀYԄІ{2n´`ú™©¼ÒuVÇ1Äš Jˆ¨Ïdf¥Htï¢A¹¦0ÈÌIèÎQ®6Ë^7ÉÐeNUšÌÃNópª ôÂN˜q%-C26€Ã‰¸ÎHŒ(ëܵô\ÌÚ …†ûð\ˆt3¢ÖML Aø€dáƒÓNƒ™¢P=qÆ„^ë5 †ZÓ8bz ƒ÷ £¶) ‚ŸDR%.pcùn¦=B‚|îÚ–™ŒK/y(ƒ9è%"Lý*¢›v΢ ûèã@Þ‰üNCí>6m†Ö¬ÈÝgd <–),—C&ÿUwY „Ös]ÉdÞ‰˜¿Ö)ñ ×f}Bq®0&\Z 20)gD\¹°P¼¸RVa4›TKä`Ð’]>œ7c„Љ§ŠLÎÒ_½˜ˆuË„g ¢ñšI˜ž&Àv%¶,‚üçH¢gÏê ¼È&ÊÌÇeš‘„ÔÌ[²Ú5›ì">JxÙÅL‡¡§Øºª1›˜Pø(Þy"á!!”©WÞWÍÜê6@ØÂ‹/„÷+’LÆ[5Swí†äu7‹„gEPSw^¶ÜÏ’`¹Ræ™ëÆu+÷åu©‚—l^¨ƒy¸¦ÁP4ÀfòZvÖÜÏàæ¿áezWiXJú.Ýþö÷¤?`kµxHY "„‡/?þøþÎFŽÑ‘{6uEÚ¯'¿z|xZ"¼ò™üøÎ«QÒˆ!¯c<®1¾|{ýéñã›{ÛlY`чñfL½þð 8Þ±¶ä3Ö_ÕеŠÏÁˆÁ|ô˜Ük $‹A‹A ÷@îÜÙÙÙÙÙÙÙÙÙÙyòäÈ#G @<yòäÈ3g Ï@ž<yò äÈó™×ûσ‰ÆÀbÐbÐcà11äÈ5k ×@®\¹r äÈ5%%%%%%%%%%5555555555----------ãXÁZÆ [ ·@ng°Çìq{œÁg°?ŸÁ÷×XÛŠŒ}B"G²â¬vÒ5¨#[é³îI*BÓ2ÙÊ`±¡)3(g¹H³Ñÿ?…@Ô3`Ùʪi"ƒp$+>ΈèWÊ`™%;G¶²jå6ÀY/’“[.¹0­ŠÄ'Ìáy'C3C3èL |O¢P›€SÕYb»A3 £zFÄ…‘H5ÆÁXÔ=—ÆÊ2ƒs …¼öL+õz­ì93k¾‡VvVŒJÛ¤•ˆ „åÁº93G˜ûÎ’QÛ’ÆÓL û°%•…v˜)¤ôIr™'7\jWîEc:à¢pà˜@:sU2ò•“ðøJ3…\ÅÀ|r–Õ$YÇÿÌuœ!íÊÝ@¶J(H™Ù‡c80™#9!B/=0 ˆ#t!eÁfÐA#X/ò"ìJÇ…g?‚ÌlÌZ¡Ž*Lð»žQ¯B3{‡Ugk«¹'³µ¨±bÔO®¸j¹– vT±££­~dpå%£rrÅ¥Wž ·£¥ƒýRªO ÕÁÌ z¥©r˜*nÜèjù0UÜcÃÁ vå Eº,ÜAÚÌ qdðÂí`ÕÈή=¯ x±K²Á §bUÖyë7N˜hõz!X pÌ‚U#•MB“²óæ4ï»R:)öºZ ¨Š]ù«huy ¾'€3ZXÅeSγŸ¹‹‡Jép™P¦«¦î,ð#û±³ÜóR&œÝuµS;ÔÇXWeÂôç,ù¼– ËÁ~ 6âxÂtƒPHÚYòy©ý¢vxîá«Ï¢:„¾‹ ¶T[ýÆYØã€*¼°«s—Š8VCïx`]ŽƒÚ»íÚèÊÊ‹ YŒ”z˜M?Ë>/BGæzØAD+ÙàÉA§Ý¢ãÚ Ž *XëaTwd=Î.Ò]DPŽ Ö6™¯°²ìgØ.&Ø|ĈÅ8}z¯É7ÓÀÈ»˜@`[çz.»ñ55˵­wkbíb¢Ì£·D¡ˆ³®C±Þ£##¾)¨ª´Q|ãH<¾¥Eà ÿUqhÊ®ì“É/®ÙRÁ`¢"²éìBVÎòÏKëL]úñâÙ '*Â)^ÑÔºÞGÚt¥Ï»B$;¼—à;‚t༵£¾žeÁre‡ ÖàÛ¡G0A¿?>y_#¿¥ðø_¤ . endstream endobj 1696 0 obj << /Length1 1612 /Length2 17061 /Length3 0 /Length 17903 /Filter /FlateDecode >> stream xÚ¬·cx¥]Ó-Ûê “¬Ø¶mÛΊ͎ŽmtlÛ¶ÍîØ¶uúyß½÷·¯÷ìógŸïǺ®{VÕ5ªFÍyß‹ŒHQ…NÈÔÞ(noçBÇDÏÈ ·´5vu–³·“¥Sš»þÙàÈÈDœ€F.–öv¢F.@n€Ð 403˜¸¸¸àÈ"öN–æ.J5e *Úÿ²ü0öøŸž¿;-ÍíäÜ€6ö¶@;—¿ÿ×U€@€‹`fiˆ((jIÉK(%äÕ@; “‘ @ÑÕØÆÒ ki´sRÌì6ÿ^LìíL-ÿ)Í™þ/–3Ààì4±ü» øÃèð‹àt²µtvþû °t˜;Ù¹üí‹=ÀÒÎÄÆÕôíföÿ"äàdÿ7Âö¯ï/˜¢½³‹³‰“¥ƒ àoVEQñót±0rù'·³å_7ÀÞìo¤©½‰ë?%ýË÷æ¯×ÅÈÒÎàüáòO.c ÀÔÒÙÁÆÈãoî¿`N–ÿ¢áêligþ_ hN@s#'S ³ó_˜¿Øÿtç¿êüoÕ98Øxük·ý¿¢þKg =óßœ&.s›[ÚÁ1ü3(Rvfö&ÆÛM]þ§Ï èô¯Qþ33TI™ÚÛÙxLfp òö.S(ÿïT¦ÿïù¿Aâÿÿ[äýÿ'îjô¿âÿ¿çù?¡Å]mlälÿÀ¿/À߯ øçޱ1rú…ÙZÚxü6üg ðß$ÿ?p¤\Œþ6CÈÎü¯ ŒôŒÿ6Z:‹[þš*Zº˜XÌŒlþvê_v5;S “¥ð¯¢ÿj&€Ž‰‘ñ?|ª–&Övÿ´žíß. é’ÿ+Ò¿¨3(«ª*)hÑüçú¯(ſڻ¨z8ü%ö?J‘³7ý_‹0„…í¼èþž@:fûß„œLL>ÿ‡lÿ‚aú¯µœ‘‹“å€Îß’™þUøÿøý×Jï?`ÄìLìMÿ™#;Ó¿ãõ¿ ÿ¸M\œþªú¯ÿ·àÿ¹þ× ?€&pkËö&<ÁVi™é.µßr†'Euú{™À‡CJT óý«í{üÒ¶¹* ßkBè§¹?Û<–N>ö¥©F{±l(zR€—yß}H¨úòQ7È;8hôKÓÏ4¢¼®e· ´ÙÕv&•”õ‹ß¡ð§;Xœ`®ž¨üIÜòý1H|MRëc1;QAÐj NÏÈŸ)ÇF†‡zn ûöñh~ÅÂ’ñ}óM>%Jrñ0tºo0ù„|uãpßáQ B©§?Kjòu!¼Òjò‚ äÈo¶Â&KŸSòû5èR¦’ƒÅІ*½½Ùý9táM@Ì}§á\Z=ð! vÙ ‘ô´dë´”¯ÎŽ¿¾fsá 8 *vßyÒÓ_Jü¬ÙsØÂ4ë‘V[»ßrIÝNi˯$´ áTj0.6²n[ ×#õ~yIÊæÉ½ï5¦¼IÚd&S!œ‹B=—‰„ …¿¯]N0¯âÆàï ŠŸé÷ªí‹¦2]ðå œuò¾UzŸb#Oí~cV49žÆ[àùæXQÀ(™²"ö¥ ¸¶VôRH¼3 è0m¿”¦@ ,Mšû–øÀãQZà66T¢²GH hÉgƒû)ún›(MHàÞ÷¥XUñ+ é9øÖ®Êa\‘×AÞS¤ Ì Un»¤²Dí!Tí:_Ðs a•—“uô¤'Aê7f©öø‚_K~̱úN*î"hÄh蘒—2 à#S’>ÝËȨ.»Þº‰&ÌyýÔ¼Á/_É@m5rLKóäR}kçüÆóA<êèwÂW=t®`Ò¨ÙìÙ ¤‘†žšÖõ~‰ ÑCr–±+ë*<ú%(E3¸Y´tP Žô¾™¶å쓳, qÀSÒx=óÿdÑ„Fkzœí5UAÊM8sHèï`A_-„ñP€=/DLŸ.Æ!õŽfb÷qÓÕ9ä4[OÕºÄ-½¼°'uùމ ð2x84§¬kx‰‘ÓéOª‡2[j4OÝKÑž+îð’Ý<\ue»è _òÞÉ3=裞r¥­o""+g1e%(Ž$¿M ð">¸í+ë£OGK°)¿¯K*€=0Sm“ flð´é™<’<ØoÓÙ…I†ƒy¶w'çÔQÑ™NÖk%IDjôÖÝt&Ì/Ï:¢3Ÿi~ßÞ¾Z#‹W ïÏ~¾Gîê‡UÙÓXvqômÕùb=¬¢¥2Nì¾ÄN¹1Iªã‡UêòÞc0™² Õ¾öWÌ’;¾¬pÏÞZñJˆÅp8u %Ù³””–›–&M<ÑÊc°†j%æŠo¨%¯0¡¿nDÇãÇèeψȣu<‡Ò°—ø*ô¦ý,Ì—þ‚[ôÍÂ!%:ÊÐEÞƒ°G·$Õœ—sz÷Š).Aj“8êÌoŽåKâÎD"­óUÙK¦a»->Ó<¬’ŒI/E®¹«ÏDVA{ƒô+ÃpWƒ—Ð Dëœ;/ì#Ì:Èñ!Gû·CûŒÖF¥˜ƒ¾¸f£& s)Ôä ù©É&î’ÖSI£È±®Í÷lt!!h; )å‘1íó’f’º*Ž9.•^‹G|ßôÌ`òòìéÕ½O‘úÀî×÷þýˆKX_¤ìñ}A côð*È;÷¹% 9Öî^“ ¨²|tÑ9¯÷4;Ö­´”ð¾9_ÿ`÷+¶ l³6سšOé.Ž *®¿ë¸»ÿÎ$¨ñ[æ3~½7ÇÁ5ÿ¨a!MÃÍGO­¸áºhŠÀÎÀuå/Ó¨W„©×¼Ž¹OðØ…~BRaKˆŽù¡¤íiNe3;„§ñˆXÄ|ROë,†‹Í‰÷²ßf 7Ûäv ¦¸žÊéú®MRùŤž¨³MÉÑ8?e%:”‹óQÚ‡*_ôQ¤é™Å…éÞBȾÉ^aoùï‰óØÑ!…1yYÂU<[A­Ð…u)ÅÖgÕkP9Ò2´ù¬ÐâÜ»¤µû†*âX0µ$»ë2í–Ù‚¼ænlh -ÚíMc ›w;@¡ùsL#áoÄ×v„¥£Î‹Þ(òx䔓Xxš0)¿ åVðFÜÃÆ­;¿p ã/ÈÖpêNž¼¥µ×ÓíúƒŸl$}ç+3ùé}п­)‘E¾NaèÆ‹Ô$œbXÊÀ<0‚‚Ÿçrç ™œ£ Z xO(ìÒ4·*§’ …&!š@êxõŠ,W7aºüÄ…53Vë_HÛEèû#¸!мX(ä®ƗÆUŸšeAIbÆ,ÂÎ#MFÚø@sqU«7J@›n%!&ýZÔéT‡oLgUÔâcê7àêd“Akuvçþì"a„QóZ«„>”wïÝ€”¨(ÚØØÇ’×Jw¥¦FÃuéö¢òÈa·ÄI€ß‰ÒïÐ㤫H÷[((ˆ“@IâÎ>£‹Û£4uÁ=ƒþKeáÀÙ^‡I )Ï8ÞRÉÏßùqPhª-ûh¢”]P“cÈ0'ªQmqc¸Ò32f$™p­Ñ6Pñçèaå¿ècT.îÁa>}À{MÝjŠû6~Ùû&ÀãÒ*<ÆÛ^µÆw˜æ_ÈùàVÔSþ+É>)ktâMÜ ôg·¸YšüWn;±ˆ›ý3•¥ƒ$Ùï§‚io£e"²[WK`ê]èöP~* ‚LÜgɯ .´$ºu=ª:L2ïèõ~)·¥†‚Ç\§UÓbó¿&;k&~K^oA¹Ÿ8è9üÞ#?Ô„K ´ï&ù†úý©VÖý`=EÁ1á—4óÏ1 ³$ÆüÍñó~6BØÂ1æ'4`ðîp fÖÄ3B8I|ß~‚x/ª@ÉøÆð©³BÂWfŸŽÚQ>²JƒeW´H‚c÷l:¥9ÂØ‘œK?´k¾b¹¼ l±¤‘8ªy!ÄŠn<„9×â:™tv;MTéö8¨zþÄèÀ‡íŸ%ù†¼ù?÷që宄åÛìÓ¯nNV,ƒµJ<ø¨6ímY}VÊ‹­¯9W¿g¾õçÇ—¢3È•|·¡áoî)‡í š6»DÅ}÷ÓBö¨Äu ?­Ú(ES¸|Î_WIý3¾±voøþcèÛûcAgoÕŠÅÆw-3uÕ§™¦œ1¯ÍúcDÍ&òC‰ öát_t¾±4«1cÈXé7"ŽƒºHÓ²ÔÇwZuðwô¡ÊBybR)GÂ]þG„HïåÉ+_ð®´ËÔWJ˜³ÄýZªX©9f)á.ȘŸsúöóÂ%̇ľ?\ÒÑišB|ßœäòDÂg)‰EÜ:Ö«—ü W¦лV&|%13å¬Uf3TOÒòÏ|õCKgúV#wg§Z¿[ °¨½¹ä~r3ˆîH­nÚõº @Z?¯JB”è\v=â,;±ÝÌñö»Î4wà¬jޱ±€7aá(ëö@ªÐÄ—û%˜]Ju7¼Í´ïO€rç-«åˆ~ÿ ‰u5&îÉ*!5+߉Œ õX~¬XözñõÑçneoâŽtÉ‘:¹µ„¸jÓ‚Ò´×\‡¿iŒI³Xì@¢ÕS)æ>¨KÚÀw”v"z%p"Õ•²RRc„‰º÷"ÀâDýº–s‡ 9GY±áK»ž´EÝû¢‡ieJ&|ƒP¨•)ÃEÒÔJí`ÛËÁè"M"ÒÖ½ög„Kú`:-$0cy@`ßô:p~áLŒ0ø¾+áãbM®*Sà c¥ |N‡ÀHþmDÒBV‰†}=UâX@¬¶#è1¼’t7' ’!÷cS¶cäÞêðq/"«qD§­Q|SŒCTNÄ7u–nQã;Ž+™„ØŒñ󨛅mQ–§¯L-EÁþí·á^|W›™¢Á­®J(H o"á´Ô–¤H¢uS¥õÅ¥<âÄÕ9!œðGÒýhkƒJY`II´o7¶ƒƒëذ%F[é½£ý:é–Uô]9 –ÑDü6Äô1io'¤ªY/KGßû§Y{(‰á¹Á]r”ù,‡z¢Ø£ÛùsFö'š!E<)”^×!ZêbFG>2:ˆ &ãˆ/ÿì±}ü%† ‰ÖÖ¿XVe _íÍÞ9ÈÌxå¤ó€†NŸN¸3e†Å[˜tãïžÁ)|·ãoÏ×0ÝbÌ¥i±ßm†ú`>ZÌ5po ¼G^³)–”>öòUR¢!RB$Z{1EGlŒ#;¯7ˆ°uÐ× ÑµŽc_SñnjÚ˜m¶Æ;Ù¶Vm*'ñÀŸ;hm_Í{žñAñ7E‚`Ý?u¦È¤Ûœ)i²Z+x`^áŽ(¯–åtÆÃ±àf²Fˆ éWÁå÷©™¿.„e=ÙßÃÜºí ²Z"Õc/¢í”8E.ÿýÇF§ý¼ÄeO×ÛïαÞ:×¶^ƒP6}ûkR;uËW5ÈNÝý7ƈ‚Ë¡y_ÿfwb æm% Úàó¡=*+³„¦â®Š£hh]Šã}„<€ë…ïÏ/ufæÁ‰NaÙ‚]çÅB<š³ýÐå[ û*\–à $¿ueÄ{ZC„[“x»ÑøTŒ ðYïw³Ü´µLÊER7Z«*„Ãܵq¦ÇÁ(I¹¹!º7?V¸¹àÆK×Ñv‹Ý‘.­ÎZ ÷•k¶)«p<½šU5l%bc‘|h—¸a{ßE èO»_w^ÙYèWnKìÇWÛ–SÓ_@Þže)#IÔ°L”áaëš;•4´úŸ£DŠd9w+•Ée=_GÙÕ¤«ßtœ‡Ç.•C&$Ù‘—“Ç]áL¹h½<Ž>læE@ÈS‡kg”3˜ÕÔ?‹Ò0„:É“¼KsÉ5ê:íwÍæ’74cõð0dXóÂ\C4¾ · iä‘PRØK²m Py±h”I´»yŬhpaÕ°'¼Ï¯û9±‘>½&j$¨Î¥Þ‘µšÆE(›Ãhþ€ÇSøž`uÍ(Ø’¯.evQ¥ùÁÆGûüH_À¸˜]Ä3æÿ¤-¤wú\¾Hrúpp³ ¿Ò0hJ.œ6õ¨¨¶Ièðg¸ÑT­ïù¾ùYèZ=(À#‡Æ"ó­Õv8„hí˜Vï ¹ñiÚ¯€>Û/ÃðÁÜÁS¿®LP;?õâП¾R<—­Ü@Rs@WSº««ÈµAÍ& äh¤)arEVõEqÄÅGܯ1í8@?¥:ª2vDêI§ Í(*ñÔÓú„­Yà’ªøKÊÀ]vªG>ËäŽhû»w¼Ï‘Òóîû÷@KÓwÈ(º'b! B5I(ž#+"Õ¸i?áð"¹3\d_m‘Ù\±ÛÖz$­'ÍEä#S®þ˜êéô;[ªØÏðKîååÃE·à&í Éß0»ßg¬µŠó ðž¢‹RJjÐHÒÊJ|~ƒÖBn|Ví5ž[HÁï±ëW¨áàÔ¤a4­'ë´š›¬+KÒ¼š&xò×cö¹:¼Ð¤ýÜôGO?X›·ðT8ü¸:èaFŸÏÊx«b'sNÑ‘º~\êÀú6GÔ㇠VpŸX·C4Ò’Ô!1–¨'鞈k9×Å·.\¸RY¼TOhÖ‚k7~ ãf&l™Ç^æç@•!ÑÐ++?rÿ,ˆ…BØ»d"n¢p—vÉEѪR2Eè˜Fˆ×œœæùzä·›î«@m›Z˜Œ_íl@_Õ´õgjÉᨸr†ÿúmÓ¶.¬âÁ’Ç„‰ì¥H(ÐȼšGÿÈB¤|½‡È¹[û\­pÁÒÝ0Õˆy/5Vw‰Å)2ïÏyhi–öz¸~g9€éëœE&½I´¹Ž¨¹ î>‘ب¾šw¬(©4MÞ¯Ìtñ‡|·W>†±lí¥ålõÈk±åõÂËH@2T¹ûœ ÷·dIJ!¾>k»Û.sàÓ;Á÷ý±=¥CÜS.ír¤”?K“ã»%΢4}í×Û,[¿Ñ•“pa+´q´¿÷-föÔì¶žœÓ¼¨Lp*.¹ $â*ëö —ã-¨6Œê¡g³ŒÃ·3æ1¦có_¼B…™M¨ÒW"½¶Û­(àͱ[Åh[Ýõ&ßZQQ²œB¦ó~óÕ1:ßðîö#Èï„úžÀÍ=ÙÎËNêÒáó¦t²¼]TO„R›­»lA¬LOarU ý Wbׄ`¦š“<áÞ@g¥`’ °Ý«G:ôÔU»æý[ þ¾ÊEJ´0ÉÚ±>Y­i.-Íê‡H°ÒšŸÕ)n¶çnåÐ,˨ýúËkdn[/?ùö©ôìÌà†Ñ¦³žñÕ¦…)CŠÄ6E²«žgJ…ÿTµr$9„ËÐd;14{¢Y ˆ”á*ca ·˜òº%bw¤/Ç›C¢÷‚°¯GèØ'l2Á¿*_zÁA&¬™eÓ}ãó+þ.Ü)¹{"'¢|aûè7@ÐØv87@ãÊ8™6èÒõ¶i….³£¤ÜíÞÄ횥ÏþZоøöS+Ë6åçáRqõ <~µ·NX0š‡ß[èm3<² Åom…Wjiﱺ¤C#cTD2<ª•º+1y<]Ïb£ïŸá?*„f¢)Å6ÈLåSh,„£!´‘6y%³‚º×BÇêÆÒñçÝ@$IãEÿîV;“ÍÙ´\ʺõ{1d ãÖÊûº•Žj´:,Ÿo0ñ:ûUªžòï0ÚW'Ýì…Î6ò%FØIhñNÔ‚º§ÿìpå4¾ à–Ø &Á‘ýàÎ+OïÑB€ fù×ÓbœÒWàG1h Ê1#ï‘Ñ÷Eþ ;Á1¸Ë¾?GË+"¥†âô¥azè°k’ä†L¡ýàˆªM* ?Ìòj?Bámrv.xè„o ûÅd ‡,ˆ<#}I‘Ý:v}¹=p2ÉGÖÇ7pWžÎñóñŸV,£çüÃ!±ɳ5ÂY5³Zä wÖ©® Ïµø®Kª®ë½„'1õXØ›zúkèw0ÅŒ:¾ÞYãs î—Û¶ô µÕÑ Ùåd {è‘b#‹«¶ 7›¥Ëjn0ø7AM¹èÕ4 *"&Hôik0ÅstáGÆÅvšjžuÌ Ü\ªeKg°s Š5ŒÑÊœÙkÂÞ÷–ÞÑö4çyý>U½ÍÙê4 «>1¥N þ25=Çoø/æÉ»ÆLÉIËÇ!T‰GèËFÁ¨s ‘ÎjxO}™ûË3I6àì®W¡ÁsIÜï£ ÙÊ`˲Ál:"½Ö8a¾M¤Ë‡ºägÙN9ìÏ* ƒæ>;Q"¯°L mA:ˆÍŠ[»ðo¢AÞ1Urò/OǮĔã<›é•ÍÁª'ɾ¦A|¦£ù'GÎÏž¹•9—8*„ïf·¸SòˆÂo”†öƨzóÍ9'áB(^z%áÕërr`ð]¢×ìËqFŒ{†[î]Wz×±¾-*Ksqî¤"ÆLõ¦÷BÅÛÓ â/™’•ÐÄ)/„™¨:驿£®^7û¶î•Êe¹t¥ÓPé—Ov‹ñsà#qï7Y›3/„˜À©ûºÃ…£)GÄ"êŽ÷æS"ô&’Ïù¶«Œ’¢X·J·U’Ítݨr»)"ÕŸ­»&*Ý[À=+&×d;¡òâAbdaísQ¦¾9&x˜èzÕC—–g¾;Lá0Kc~™y˜goM¸Ãw_p­ß–…CS£XßÉyX¼ØJN*¸äË¥lå…ß;‡ÐÜNÏtp’° =~ÚdJ‰âg{ý³¦WB{&ÖL‰Yð4÷q|ª£ ãEîŠ@„@+Žïßn¬ÓHhÊ6᣼M)^Ç]"³«mšŸDeÓ2›l¥ï”W¬wÒi}böáën õ{ÑûäŸ;F…á¤0±ôÙß-óŽlÊ ~ícöR— ¸^6^GQM%¯Ý þŃÏK=¨ðûWÉÒ>6‡aý1 ÷ˆ”¨}NŒIĆ©#U^ó°·Öç„€=ßj1Ñr9 3û»8y_.$fYÌ ‡Ÿo¹7Ï“8oÅ #¦A¶žëT¸æÚàOÁs¹ß}V”y}Di¨°Î¦ äx8šÈaÔÞÆ¡,?ù-µ,›_ƒ-eQù1ÀO,ŽSä ä³^0òø|Ã&†êyRÔ½–}æ÷‚šªhŽMâìÙàwdQW:’# Ó~§xI©ÅåY^ÂKñ×u 0.×°ƒâ>“rŒ#¡L·Ó2èZåR+àC1i“®¹wœg„w_N+)8ðp· 9"íÆmQçAegô¶}‘„NQã¯q1*g¹¬O®Ÿ ÖR)OZ$޼l|{prtjKe®°$fpÑrù Š{tÃ5zXÞæw\yñ´Ó/ßîmr…}mÞ;™xdÔ̆+]ÍhSÂÙ„¸à—×»vG‘ÇR¾´V sWyD߯ûZÇC×oý3„ÜßaàdäC%£mÀ=j:yîè;@»¬K†›Â*RUÖÛ} *#èW¤iÖMUv|D›4†K‰”ÓrïZ`ö2< UyÍ|~!.iǨ¸ôkÕSYs…R±™:t]dfßêÂpUÄ«*¶k|b DÙÎèÏû‡+z˜ uÊ7‚hu_¨uF©èÓ ±î]eÝ7’QRL£G¥ù` /è̲EÌqÎõ}™tšã÷Ó5D{–²FÓH%bÔ…ö¡h¢?ËèÍ —~oqñ=6sXrrÖŸEØQE)ƒ3™®fÝÖÑëŠÊ”| Þp¦9Ê‹Ÿ"ï8­:4ÈMYζ„ î¢LXC¯Ë½<ÙŒñê-"u Û>óMÛÏ™›ÙÐÕâ;¯ELd쟧»7z,Ï hƒ\6¸Òåc»xiZ'[Þ%އšæÓ4KF®çVcLx~i¨lãi¾XoíÉÆköN¦^Ü:Q{bΛ·ÁîZ¾Ó0.Ü‡Ï g9íZæ·BÛÊŒè ƒYð]@¼v÷0zÝÇ©lƒp7Ïg¡ËœÂeEÂ[†íTS£é”Hå;¾òDÿPCuãžÎEUÎ#ô,I:¾¸§§Ÿ›_ü䜶pR¡å’áVÒ çOÔ­‡¼CDÿ‰kht®p¼ùKçäŵçü(AÜœÔݲEíËRÝ1œLÄŽ`?aöeì8º@Âñ\`nÎg='·áLâk$2®Bƒ Ú—”ⓘ^»ÓËgö…GaéäŸ{Ι¤ç!ºú¶}Ú)‰Ð¤ÓX‹Ò¢<ˆ5¨Z/rêkOEï2ïz¾j³t³;VšÁÑ352ô+X6–²FºqüŸžÓ‰¶c$­Æ#_–±#xXói ÈPœ`É‹`«%ŸkëFÅô'—°l̺‹˜ú¼IŪ%z—èíëWK§Öâ9dçM]Kšv÷ïˆáHÌjúö§ª§2=ôP!Iøq„JGb3ëòðàë¿zßܤMÁú†RÃ¥‡®.° .÷R5 ¬|Á¢J/œ•¬aóêÚÑÅz½/+Êõ5hN½Ê˜qšsi–HÈyd®{ëþš½õÁ?úfx‹wmÖI4·=,‡r Ç’+Ò0n.® ÐZRçA›†C^r1t( zöGÞ  ó7<Áë™dãýÞdª[§ íœ½´¹˜ ‘vc7Ii!R|áb·9ßV'cý ¤š¹NU›e[ ¦:ÅËœÓã5Ň0íÞ‡#¬;áê'Gû7U‡`Zk+ÂÍw†àæFi²þÓB:önÅ•ù)úܪQ“`ð"M×éC9Õ5g)ª÷lÃ< 4vñ|Õ’”Fz5Š©÷H\ú»µIïÄÝláoy¯j±W×’º5qÆ>c,8o’Û¦ª ø¤¨ßSn‹ ~¸½ô&¦˜¿5‘qÂF.ÀóÐX¥«þ0îl&±½¼žº¹CaêCÜŽooÔ!œeO¶ßÀ¬*ÄÆö‹ÂåFcxŠøÏµõ(ÔM+¦TCŸëùª ˆEÖõár=Ú’àyØ„8;”Û:ÒÑë]»÷‰jᯟ)Ѱªæ4^»â¼AI*ÒEr Ÿ˜¯Ì›q³fØeÌã®®ƒñrõjÍÄõÖ¡åm™Ò/÷àô~±Vbg2¶ ]ñ7'³pˆßˆ®¼º—àpbà_*/‰ñØ–@«ßŒÖŪʃ©FÁ=kSR¿Z]É÷Œ¡®×ìå@ƒwëH¬Æ2b ï~o?=·•w˜jø]΄XÕAÛ2ÝÍáôí±o}Äœ;jú(7dzcpcÍÐ)«ÅÑïçZÉ–ªÊà¯|UlOšÚ‘w««¾ ¤¼ý]ö³ˆ›p"nØî±÷õAZaÍ'¬¶‹Í®›E¹ña_Ï“MækÀ¾pzõRÆže›?·FŠ†Ë»:Ä.Éû”¼òóÁs’”DV¯Ò̬2]¥ró6œ/Zfn ò•fD¿M#ðÅ+òä"*Åì‡üf0<“­šë£ÇkÞ¶„tj±Y…^LËÒËK?[&HNØbp¡k¼WÒ`AW‚U«mŽVÿø±w«;7T•o95zË‘Ÿpˆ½²Þ°weüô´÷áš,"ážeµàhªVA´¾¨oj·ÁÛ_AQÃËf#KHVsݳlÆâ…Ï|]ú°ä$ÂÐBƺµ°¶’»ìAs‡@A‰Ø6”5Ÿ8¿Ìbðë"RŽqsü·• õoêÔ6ë99Ûí’šN74ÌÏ_ŽØì}Q*™Ð3¥QþKlG/m12j9@öú×°ÒîN=`i„r‹I¯¬@YG—_P¿8:°†î•׿ÃÇ6öc|[„Šqf@þþsÛµ`œ“¾]òרA‡hÕ›«æF2“Áâ÷ÇÏÏö¶ªç&m1,F™5¥Q>·‡©Åsm—ÔQÿ¬™:ÿgPÏ`îøA§{Ö!àxì|-úq…í hT=¬KÖª–‰8vGÓ uMXH ¼kGÜ´âï‹ßûçȘÜ a¯¿)AatÚ|!ñÉï©ur lÏñ.>¨†6ÎÎ>ب›'ïsе:8{ó¦ÑÐךSƒ¨3è« íÆ‘ìàNÃ>ûS<1*ì=6 ïXº¡1ßàeÑàÙG ¸áŒ‚J÷ö{FTÈŒ½PkùÁUu±kÒ­P'v2ÇÙeƒ6Ð^3whd| |s9ý ›ø›mš¯îzzåç!?»ƒn¼!ÑÈruÖd;ògßÌáµ7 c™u§W£øýûßÁ…÷ vâZÁ¸&?y§t«pE'•8f¯ÍÒ×!g*x±†¦a•?m,wù ëJ_ÒÒøQÎdŸ­®Ñ"XÖMoßDÄ3GÅÒ°rN¾Í‹¶ã,cKæVjk¹tðÔ.¼NÀ?r=‚<~Ç õEŒ_<Ý)·}z~f‰ÁƆû‚~Õ%½z»¨SÓ ÖEɬ„ÔæþêßUàYx@Œ)n„«i•üŽ€'»ÿ´5q¯8¶ÿöÛ7èσ¹ˆ2*ÿ $'…Œ˜ñIÅÓè\fqEð"&¤{Øé'ædíÇW§J{ÌA=µp»¹ÕœüŸËcÇ2çQ(—£wÅa1¥‚ͱʤnÔHDBü@W»dZù®T\ØÛ'd¾ ÈÓd úÅb9w’å›vèHò×ÄœÓýˆ½šÆùÎ zÃÒ¿oP»%RwGaŽç•ò#`žóhåzêë«3Ÿ0ŸKÄ’”¸‡|p{åaǸ⋄Æ"ÝÜhû¡Í¿ X#ÖÞ-}WšBìëÄœ£oÊѶ#ÐŒbg¿ ’Ú`Ö)fyîXB¸Àì‘)ꥰZ•7Õç<ˆßTH’.U惤ó"ÍÀH À²Š®cA˜B¶m‹eíËõœÏ""Ú*·Jºˆ2Ô·kzï¢HY7Ðäì’«ø("dü°«ÚòHe†eÙ—‡°ûA³ T­˜Åò·Îã^ÓTQßöe²?/tÜ.ù©è`Iœ&Üq[FÑG.Eô­¹ÊÊ¿OŠÚÛÏÏqÄS:æ}j|û³;NãŒz\Î"˜í :¬ÕY@ÔjÒ¯þ¨+xÉÝ;öˆ)+ Â/èJø°9ÌšÆ9þO}ù#ot £sOÐlð3͹~„(KfÝûO²\›3Ðrå$mNà"¡…hÖÆRS‹¬Ø­‹šew ûÞBF)Á%Xnzríþ[ì€Ki­/]ƒ2E²ÁLhŠ…c‚%lö£•ìCš ‡÷¢˜yy¦)êýšÚ^?³—œK¼´ÜÊ,!¼\íè³bN2ìU¾ëœÍ޽6¢ §›d²®äC¤hð? 6)a óÝlƒoôAšÆÌù{Æ~‚·ùª×`IÁPg­ñ¿ %^U]ªCïߨ{«ÛÏÍHÂÇ :ÆâÌbãüѶ«"UÊӵޤ© äþ> °'^¯&]´^ 䃘#·åŠÒd üÃÁÛ颥óÅöýw:ŽÖDÒ”èæŽ€Þ IF,‹=¢-ìD<2q ü=÷tòÆšPË ÊEï=…Qñ2UJûN*ÿ¤»PD¾^¾1=þX¯2w½g¥MwÕ ;»9Ê…LËÔ›@×J¢è£)î¢N¢‹‹Öã–¹¶¤bﯘð£QÖÚ©€CFέE5îéìàwM^›…2½™Ç"ìýî^J°¡¡$'$¤³ôY[RIe¿câ¾BŽz% XQ3óÓßC2:„Os‚ç®ÙÈR¯Q ÃÝ“GÿŒ¶ØØÖâ@sœ ÞÛ‚‰(b±ræÆpVɯô¾ÙmŽ þsò›¯5¢€ñiãö"ÛuÄñCéŽâ‘—¨€ŸÇP“Іƒ¬ZòåÈ ¤"¡M®A€5–9œ®èµŸ ç¯ žodÓUXèƒ`W¡Ä“¼}!ü˜LpȨ$ú>KQ°WöÚvgˆwÖA.XG2ÍßÒ±’” Ð|G¿Ô?ËÏ2ÌrR eúþP3k1žv`àC²ƒó4%ÇÕ¥€[°—…Ú¤•Þõ ¥é-dd0¹?—²9£.@7§dœ‰û#”L’™‚Ùð.^Êõ}b‡Wëœdïa•ê©‘ "œžÁŶxfl>-Wöôßzyì€E¦A©pL®qñƒîÅ…0”ÔÄ<s-^CÎ3QæC×@ŒIâôYS†5A›ƒ³Ò¢ïC¾Ÿ1Ž7ÏaN’ìuEa¶Çë~ò®Ø¡Ê bæ2•µ7Ýÿ´üÎ{‚þ¨Øö¶ëîÊÏ8j§©UèÙ¬ÿ žzrèW|HøEM$ÚÞ ïFÇœéîíî&B8ÕŒ{Ux b¶Î`§­ž¸Iµ—fi€¸zHoûIÁêNÏÉ0é 6ê—ó©¨í¨{ ¹³©ã¢1Oé…n†p’†/äÏ–Hœ¦¹6—ÈûŸ°Ã2ò"B8̼xñƒEÞ_ßëõþLEš6ÉEFö/´—‘ÜæÍÝh‚˜®;—×íÙkб:÷´¥¸é|Š©®P¯YžÁUq…;…Hå@rgû.ýýªƒë"Š }ß1Šçgä5꫚ ^´·¦¹,ñSŸáh}AVGjïÝB¨Œ Üw(â÷1­èÔ™e/YXù(Ë–%+RaЦ}°‚€öF±Òr2›3"%Qzø›?Óý¤Ïƒz–L¸Áœ•Åë §PFÿݾ¿ÏѨ$ïþ¼íTQööŠ:½çϤ? Lž¯õ±CœÅ—öüûÜ%F ¼Ã_”º»ª^^mµÄó× X)(§'/‰ òŸsk2㘦\X8od$1†ë=ìÑ¥  ÜŸ½Šÿ§Q$MbËA³5¥×÷lXng%ZxàÜî…Æ?Öײè^¤é¢sa¾PâO¹uÀw?jY°í‘~è7¬…e‚vO«÷ªEÜ¡MË{>Ù‚!q—¦t°6¼qžÇz./ô”»‘@ý[ i÷\5Ê—ê¢tñeþêÔ\ØÝb9Ë$.M4·IsÃH‚…ª€¤ ¶g`ðéêfçÍØÚÞ—MÅt2&þaCïñª«]‡øvÝÉ£ÒÕNçÛÁ´ƒŠ‹Ò@…NJýnV΂0˜¹×ΆiÈdNRŽ6yŒ´xKã¨ty îãhZ%±ýJf…C“ß³Xàž¹'6ΰÕ&9Kp6XPp+–Ha²/t"á·½:yä“$ï”õiÚܨˆ ³ÕÃá´êÄQ¯È<œL¯~s [ÛOú¥µâÎ<‚þû*Y½GÈ„!™A¨*ӣ׺õ”&ßÈDºöä†]„ÛÉŽ†Àã/»|\:¦d0a@µãª‡ÑÀŽ#ÃCõ¸:!! ‚q‡XâÓû:?`…©}AkŠŠjK+½54£¼ÏŠêîΕ80Ö"ᕌ@jêEJ{ý°GdÔ›Þ¨Îà&Ë&‹½èñéCŸâH¥ÎR%W;ØÂ¤àŠÑ 6£ ’b²§Ô Õì^o ´¡s`Ñm1“Š»…H:igMZè¢rÖù1v¸E¹túnâ—fÒYùÊRq²)Q!Û9¢˜ÈGZãɼßZ¦ÝÆÓhѳ¿¸ÔîÆø4ɵjªœ%'ȱg–?BvÂ4î#^B Ÿ{ö£•)Và¼îì -’I”ØðwF\F®:Sý@å´ú³zÂï>½Ç€æ—W Áh2P¶ñx :L4 .šÐ¨ {Èi;83vŽdZ“‘@@ÀñŠ£—Û£.à 7üM„Ž8³°“®çjAÀMµLÄ3ÚÛ® ±âðc‰#å"x̺¤î Ú2”YJ,.þ§*1Rй§BõA©ð%Ä5&U¥­•Ò§öZæs: åö7¸¨0‡ zã‰N™2SZ*È*pžšAè27­U“xz:sÖêöò߯Áð§,d³¬§WÖª‡ „Ñœ°$rÈ™¡˜«n"˜ ŽŠÃ²à¨>)W¶d²ß‰šµí)ñªV*~Ý™álÑáBÚ5¡KôpÍ6tté)U‚±3:‘ÏæLŠGLV:HªÝùø/ÍPékPºõŒ¢Ñ¿¢ÈKÐ`¼ù/´ÌÆjQÇQö“"Ñýê¸UØ;ÎX•óíï¾æ–A™§=¨‘IÝš‚²ø!‹ ±a©¼Á%#“p*ìBdIÀžz%eÅw|} ºdiç9àÇJ–êZúV WÕÊd?6žVÿxóàw—¢™hÚÏ[.D°\B*, ñâ<ßg¸þô"Tž­%TÓÐÞä¦O®²šà›—ÿ²=çÁ„BP»'Uæ?Ë~¥%p“eDgÒËU›rçSxÙ•~õÔúêä^bÌSc‘b'C¿4+}6v÷¼I^tm*Qï&èÊ Ÿ¾‘Éç†núø½(_ü`ߓДZ3¢éµàm SRÿ Ié{FEßc=­pP€•ZsüõF>Ë/\ƒDp“}Ä qÚ-ДÓÁ¨Êçcô |6î(ôèRQÉaöýÁ<‹ÌjveNXõž„ÁÈ}gßìßRÚÔ)ãfÉ`§1^FcS©#©æ=ž€§œetñ¬s°ªÂùVûs"Ú|tR §û¢vgÕåJi쨈Ñîá Ÿ€Ì¶¼•Oú„ôå^àÅu!™é•%ˆ‡Ž<÷NE“‚dÁ²7’ù>@Çϰ!(lIýÞ^¡É‘Uo?,İ’-Yè÷—+Üã9âVÁ@%  û˜¯p*€Ñ‹ŸòÇõÌx-ÍÛ'› =]ãT|fÔ(¸é7¥ùqÓÚXìêç€WºwhôüxD}.¿ÐY¢”:A¦§Qf@q÷4~ì`| ½îm ’|¯áMlYІa:柫q¦hDÉóg¿3£Ouðx5Xž?2al«ý\ãä_<$<ÅuugÃÊÝÚ¼ûÃÛÿG(^î2IóÔÜÂöÅ%’rËÏ@ÆÇÉŽ`ÐôEЖ¹Â@Úè'l]QòÍ‘Œ]'+òRÿÒHÆ—ö‡Ü©ú$ÚTgN^ óàݯ¦33Ë­ Këu)»aQ1KQʺ[Âváä"Âa_ÞoŠ·(ÞÈÍ£Xœ_¨¤#®ÇSÓÝøOc!ŠT)®gå£òy‡"H·À¶—.#œ '~q¢{„v³0Náê_ÒK(M´@·DxÉ*)¨e;9ø^± ÑÓôÊAª«ßf^Ÿ÷¦þb2ôsW"­‘ª‘_^ëØßÓ–Cv¸ Ý*_0>[¥œBª!8Â׋¸JÀ:þÀÂ`Xsç>´ì Vj^xk´÷Òò¼²“#œï[S™‹”ê¯õåJ‘ÅmLäÌLÌ­—MNPrGÁâÀéÅ>æïÝU«ö‚bw„†•¨ìÁS¹ÍLQš˜HˇµÓ{QI¶`­ v¾ShÏ-ŒΤ°ÞŸä&{ãÇlÂШN\Ž’0Èë Ó-Ž`žÕ#ú'ÄpÒÞêdgn¢;l¯ãËFw“Rªþ5\ÑTÏ¿®ƒ‚ÚèCáȳ'Þ¨²æ5¸©…òéqæ1ˆKÐËãžËsm»4›²`£»s* -è$\Ê×V«÷^áÏÍ)_ʹʊMë‡N-_¡ækßæî4­*ÒuaÊÝ&Ù½ÁÎ’®qól1ùu¾ÙžCZ‡Ž¼8ç éÚª«å 5Èn£Ä0oùÅ‹òbb*z¹ÚÕÀFÒ§»çoê̬³Ñ’{E§ÖÏ“à{3·ä MÙû,Ÿ)"îD3÷û% Vˆ¬-°L'nˆ¨¿Õñ¸:å+öGÞà1§Iä\DnÛ‰²­ôö]¬p÷‰ ÕÞ¾l\„°Âëµ³5È·Ê,>hw©k¹®Ll5ò"~:g…A“ðUTŒ»M²|´Jt£f}¶ÔÇy³5út½”pöœÂŽãð9¤ëu{çNáý'_M·]ÔM= ÿm“r$|ñ$›~œÿ0÷-·C¥GžØÍHßC TWïwÏCÝ~l©-*Xó"¿-;D¬@¤áý‹)o#\Üü³=¿<¯ÁÚ,Ó[¼`*ø”Í î mÖ ¤Î8Ï—`2~\ããŽa”&®[à… ‰3o©d®>_˜þ²aëà¤Sãàµ:í´ù¼*W§þÏN<­Õ@¹+fþ“”j£2óñe9Ä\³QbtùPvSù-<å¾@j*Û@‰b-'ÿj¹5g_¨W¶[µ‚mY ¡öËØ! ôµN“ŒÍ+ §£Æó9ab< R¡œ‡žT=c­]ÒÖK¸!zº&#¬ÐA¶¶¿#«ð,—ªcÎø]Ž =V\:åË‘j®5?eÁôãÃ`ÓýƒáÝ  Ö7Ì=Ì ×nÀ¥žÀžŸë1'œ²€7tæ@ei›ózÎJíRÂhKÀç&¼zX˜ðc£«P\ªn[çDÍWpú%âEëµcÓ)|5&L•]]BM]E´tJºBHz­)(Æš)H]~-ÝöØóQ;6«i"&ô«øOWÙW+Ùiž1pðe`5rFLœèŽA›¶ ¡L(²Ëx¹{Š!Ȩ]c§' ‘ë”î–«SçG4³ñŒ — T’â’½dÍ\:] ѹæ‹]ÒæÕùÕâÂáå÷ÖÁ;¯Š·¸¤£(! 2}V²ùÝ×rh–JàØ3üÔÕv\¡¨)¹"Çå¿ù‹»Ø™âãšÚOK¦Ö’ËÆƒ#Ž&+åÂDB¥|òî´ƒ#ŸÆyòR¤WWH[F ø¡ò•ïÈë‚|¬nÖ„–Ò-3Ôå¡’§v×Û¿éF-Õ4ÇÙˆ®k¨/p7PN{zÛmá« §w$²F¢ÖÄO²ëêAlÄP‚‹&ìqˆ»éƒH¯ùÆ!iߕ彩ŸÜy±mÿ[*…€ñÎéX“Ó=%K‰[Û –«£”vv9Ói§« !1hàÆd]Fs‡–M i+ìK‰E.¡rtû BMJ§u¿Ž®—HR/ñ®÷íBü]…ž#n …¸È¾þ° GGL5~€ ¡Ý3Ž. ¼…Ê„lâ¶Ô¯4¼ô‚“Ì,ßOæÀqP¢@ÿ?åûð{SŸ2ÒXA@O_ß)‘?qÎYŸ,Ôpñ6—s)ß¶e®ab̳Œ 9Xý» ¾Û³¡°¾§«Ê4#ÇâH‚Š%sX)øêaz±ýW~%µ­0{/šåÄìq”Oý =…y·2Iˆ›)\7Y6ªÈ'¥R+[GÑ–é4¼°¾Ï,¼aæþ¢ÁwÁ *Ö;A˜¨òßQ*Ãk³(ÿŽA²}!eHM÷åÏÎVøÇ›¼;¦¨ ˜Vå%ˆF+[Kå™*Üó]è@×'Xu;Ýs(ÊS@ËI¹L>EƒÝOccê&’æU?šþzàÌ\ÁÛ#ü¥ywÝ×Ù»Ã=Ï{ {»)3E½³ÏÇ&Ÿ­OíK‡_¯òbd¤ô’ûM˜ºômÁÞ‹Ë'eí•fXù9—¤Ž¿‘ìÝR&™ÌGLÆ!ØZ{.¸—­ÛâÅâü!éŽÓô”Dz‹4¦ üìY¼?3{n¿í¨6ËX± 讚€K1ÙRThƒø$†¨Òähb.º¦ÒŽí`·³S´í¥íò³> Ӱއµ-ï–‹ÊDº<“É|0\)Œß 'øŽ‹ÿF“­Ûå Nû8}¾iÿÀ÷—Ó`”.ù{ô’ ÇÎ32à¿ãX/j€¨ ½ì•™u^%íÔâQžæ7¿@D›ü>]±µ±Æ3Øybr4£yØH­=Cû~–SO$áç1„L£Zå,Üê §3¥yÙû¨—77ñIoÓ€ø`ÐØúfS 2? ˆíIQº¹ˆÃÁ§b˜LÏ`(I&rˆFS€©ÄP´ñôUÚL­"N©0O“ÑŸ‹¦Ò™Õ[‘YþNÈÎuVÊJZ)3ö&ƒ°å u¬ç@ ·ÉÅE[˜äz’œ\ËtrsÝ §åî/¹Qu[—à㔥Ÿ ›)ÈM¶¥)£¯x­ÿ¨×›IC ±ßtLºZ ìЬÊ4´²ÅˆË‚ϾaÖèäÚ»TiIÂ/JæQ+ºLë p0ûBžnƒÇ;‰7Øß%Ö)ØÒ$‰‰^„Šâî?/í4LÄºŽ¥„À«:ËüWÐ="s Ÿ}ÈçàˆjêÜ£ˆïôƒ‚ÏT‚3w·¥î$¹1_üæ4ñ%Ó™Yº …Zõ ZØ×8°Ä>×1aíW*ºV-Œ&òú,~u¤¤¸Þ¥*[WÊTÀ˜]½òøjè­’Œ’á°]¨™«CÌ[á/¥(Ëݺ|ßúOPJÚ'de"~°cª¡ç0Èì ìƒ j6à÷ ô(òÿŒp™ÔÏœ´?–Ö˜l²kªÚX{Âîºü1XkELÏÞ\cƒ™4d}ü…>KÓDâ/¯½¦…¾igPµìÜÌ€ DhŒôª;p—ÃÞ;ÅѶx#9íM~ì2ÙMæ‘ÌA^k’ò;ðÂ2›+óÁ´;mZ,º·êùŒF¢BH?_|2jË>Î%>gJ«rÿ욟%‘³qTåêœýË0Ûñ%x&X½¯cè…¦Eü÷#9#ÒæÉØÏ þ•ƒu†‡8[å<„zŽÕoçéøwÏöÍø¸†zy_»Ž¹n7¯´F4¡OÏ#¹2ÚýPk òîÝœ “@m¸†õå'XØ 1ýÉÝ=†=Œ^õž½ü¯ÔrûÕº{hÖ endstream endobj 1698 0 obj << /Length1 1630 /Length2 7258 /Length3 0 /Length 8090 /Filter /FlateDecode >> stream xÚ­WeX”ݺ&•f@¤cè.)é éf˜`ˆ!fˆi‘î Aƒé.AZ:%¤DÀƒ~gï}®ïì_çì3×»ž{=÷÷³Ö{½¬Œ:z¼ò¨² É+È' Ô‚9Ûx žºÀ5yŸAí<´mœ`À;@•õ‰;„„¹ÀAH¨Ð *BÁÀG€‚âââx¬À'.®(w˜=Èað̈“››ç_–ß[€6¨ wž˜Èv÷à urqu†Â‘wÿgG=(ˆ´‡maNPàm5- ‡Š–P ‡ºƒœ€:w¥€š00Ž€rm]ÜN-€`8ö»4ß—<"\¡`ØÔ uý ñ]¡îÎ0âîCíÜApä].@ìäùÀÝÖåOB®î.w;œï°;2v‡¹"wQu•ÿÊiBþŽ€ÝÁ@Û»°Çï’þ`w4w(ƒ#€H¨7òw,(C¸:Pw±ïÈ\ÝaÒð@Ààvÿʀ赹Cœ ÄÍ÷ïîü«Nàÿ¨äêê„úãíòg×?s€!P'[><ÁGw1ÁÈ»Øv08ÿïaQƒÛºþ²C<\ÿyBÝÿ4ˆã÷ÌpÞ%‚¸ÀP@Ô_ËyÈñS™ï?'ò@âÿˆÀÿyÿâþ]£ÿqˆÿ¿çùïÔÊNNZ ç»øë’ÞÝ2.@Màï{Æ äü}׸y@ÿ—Èæ„ú7Žßhý+Ùÿæû;¬†Ý5Enw' ¯à#>¿Ì0„2Ì Ñ!Áö@[Ó]ÏþØ à¨» ½ÓöO[ïœþ†éÛÃÀŽðß"ˆüAá¿§'ןäùŸiš*è=åþw7ìŸ:w“€ÔG¹BÿÆè© 䟋ß< .Þ@_^QA ï#!1 ˜˜0ð±  ß¿‰ø‡Fð_ë§ ¤;Ìh&À' ¼ûÿÇï_+‹¿Ñ(ÁÁ.ß“£‡Á!wÃöOÃoìáî~§ñŸóWô?ÖÆ õ†‚ñf¦\À’/Ò_¿B–Säô|V4ëhÄì u-ªÒÏÏ üàÒ¾,^f}ý1”¯zXâ¶5¹ízóMk½¯Ü‰½5ºŸKëÇÌÙžG²ÀÖ(ƽÌoYDøjÇ(Ú÷`Bs ËTTÀp}å³î3ËÂë{tÃBî8œÌžyd,ç®Dþà´Ê¸‡M€j4Òò·Û;lI[çì]ý½=Ý­GØíßh¸³ãpY%Aþ)ÛŒÉH”µûiøûÊSÌkER7ð“o'¹>Ú¯Ép`Ò-_ã‹%ß,–Wë@ÉújT7 » Y¢—Cþ¨¿ 7aJ¹†s¸£Zàhˆ©ãÒ®NŒá½ Ã-<¶¸ŽA™F12#‡…–­Œß'ŠÉ.ÿ%4ޱ©ÓvЈ}}õ]Õ­ Ž•dbÙó^ð±lú3Ä©ïf5…ÉþmÜH¨°„äuå³ÑÜã júšû'÷\c«ž»?1ž.7SLèz ÚÛ11 3‚£‡>œëó&Wœ¢9æú>±t/zæäìÔ4&åš–®WHž?¢E³¨Á¼ZiëìÙøüµ¦oLMû±ãíDCÀE°é"ý>V][¼lÆB±Ä¹ÃxeJEƒ~ G«©r›=T©Ód¥©Ý„ŠCV¿6éúY-yTãIïÒ(]! Ëp#±(­¡év† "2d’Ìkô\ }…ºd&GˆÓKv*|ݪÀ*ÒÑ#Íþ,Ì.ðb×óæ ¨Í°Žá0ß"oAªîªNÈIs‰H‚†AÈâ;*ŸàW&°/82ÕçÍ™![án,°ñݻۉÞ6^ç2a†4›îçä_°ô¦W »¦bU*~¤ƒçÆN*u±+úÚ|yEÜoŒg+j ;øøÌ@€`r>UUBbËI¼Ý×2(Æà¨cØn?î[aúDE¸ø·©rg]´ÐÇ¿dˆ 7êÛdìjd(Q“\D,`7á*ÉúÑsÊÂ'©Ph µå3ÌcpÿiSKœËz¯N޾Ñ8GÉsI樆MúBrÚoó §¼çÚ.že@ÖYʼnXá¦ÇFõb¢>nü>F#p°{1øÐ2¿u¿Ùb¯HãYß~ö+¾ “F‘z š*¡ôMÉ šæ.íq‘"—\[`ËÂç—°–èæÃuZ†V'fÚWiš»ÒVìßëÈDÁÛ “ëÞP&%Ïïß9Þð=ÈW÷÷«°À¦Ÿ½Œ•„Ôä cc±2l2RŠ’–“Ù{°$Ò1<o_pŽø$Ìi¦Lp„P¨ÚU8Ù©R$âƒrÒ3žEë P$):¹Dj£Ï©Öèî¯wžEÉlŸ®’ùͦ—.k‚©ûœñöPAr>Jö޾ô£‰ñn(YL¯+Ânúºúcá9bña%SÙ’_g|_wÅÿ–÷+ÿW¾K‰Žž•ÅØ©¾´M>èU&ØÁšhÏY¾“Õ™íퟪ ŸÉi r:¸§©|IVÊKÇ·€[¤ på82?Þyð ‚°Ü,²™d/Ác²?!£P×…È«ÛßPJ4‚ŒcV$€H`¦,aôBÒáûiÆ16}ƒñ3Þ ³·,|×ï ß>ºLîúò¤©ŸßÈûµM®$å$ qŲ́ï¸\¶Ä[ÑÚÐ[œ#²óÙþ5­ý®7.Ž5ä§á¤v·”ÄÁ!•ƒGA™¢Ü«†kyåq´¬üD2Њ>Y£K랉pá¾!0`®¯È äã ©¢IKà³v”=½Œq®~"0g’ ®s覔¯ÊÁ°åº²ð"ÑYqޱšì¢EO;®÷’Ñr˜\U‚ÓÐ=Dzƒ¥Þ)éJr½"©JŬ~HÉpë?ú@ËÑbLâH(ç·ºÜÓˆJ; š³ûpÔFÐÍë錫ÌÝg‘¸Q˜’´7|Ÿ˜;2³ËÜùãðÖb‡†Ì›2xH‰@!™yóMÕÁçÓÝØÔ—W ßy›äÒdƒD6kÊI©wT盉½²±Ïºx¿›RûÛö`€&ƉH~ E,$k™5´Órý¨_ÿW/·TžÀN´ÖÂçæF™öš³I+IðK˜‹`ˆÐc¾|ù-1œ€MŠìxà=6¦Å{Zí ꢆµ!{nÍ¡ïRÚ!LŽ™|ÛŽ©¶VhÅÒ ›glŠä¿Ÿ±‘1çÿúÀ]ÉšÁl謊[ƒÅx÷fƒÿó…Èv£Ç.¡°)ES¡ƒ’ô$Ú+L±^ ”8î£/Ѹ4whL1ëŠ(Võek}µè ¯ä*÷*ŒM¸¼Ä×S7tžwU¯é0”7¹H!8çÇEÜK ¿Á¡+îê´‡è:e×aCOòpæL‚ñÜ‚¢/y$#0ÕýÚñ}¦SÁ¸/sv#ŠakE· ›vvˆâ>z$_œC±o³/J™còç¶Ó™3±žrmmû,Ýô¨Mš€¿c ñ¬ñí¸y¿ÓOXûë’$µé†(æ‡&s£?ÝdÈU® ÕK\!™Ø‘!o¬l;ãXs“7Èøóî}8 ý²|5åÙˆY}¿ô’𬇴ÃîÃuôñf‰µŸu?`?AGEÁW éÝ`¿ o4gæ„6ao|yKƒHçImÕBq«À—zù{RQ€lÞ…”­˜ïù"‘ã‰u/DkîÊÚÂJß"¦,4‘*kLq]mê‹sÝTYÅ‘ÜûöJÍ¢Q»McJ [v,)ÜsâÚŽgåDðÖ}ÍѼ*Ú¬Dºwª1r™ååQõ‰ÍôÉCÖÉC#õÖ&aRy1.…×¾î|LºVŸœèŒéÔË­Û ™Ôâ^x¢ÀÂ1*ÞJ‡ ÖLMÀ“·/×oÚµálúy -7# Ó@þø_Ó&éèV¶Bà¼ÖñÙO]M§ññù÷ªF¦ëÊø êh,óÍõÔ, º?Q<RÄêØ{dzuÓPp¢8 ùs¼ÈšKh÷Ìï#9`+ýÁ…õ«Ͼة@_B¢y]BÊlÛûç÷P|Ý;µŸ«u÷“ÃT„<%H•í8™juy¢õi¿¬]MŒ˜g–éƒ1ìí!XnZÞ½X:è~ŽP–Ýô¨˜-ÄÉrk9¤oà±wWsÒy@zàá¥R^Nt;£üûÞqü Ú òeÓ{dRdƒ€Âc‰«¤Aøê£(ˆ2®´üÄ©çe‘”LWIž„ ¡¿ˆ¤]/Étî©.·9"˜'.‚£^£ÿ"¨÷Õ׌“Xi^ÐVz*&6·Ï›¦!¼_Mà~nøÎÅ?¼¬úK”U´#±@ééêMîOH›¯|Îü›i‘KHߤ‚™E9¥Ÿ¯ ááYg€¡oûšº V?{ Áø¾øÌz`ùp,—T‹³,¼/Œº¥dr †‡ØÆÚ•C½=Éb¤Oѹ› Lù+ð D§êÊÐeÿ+ž`wUß Ÿ8¿‰ç ]þÞ“®r‚…¯ïÚ Ò]˜ûÂïCx•MÆåâ1Vú±Lš™p%˜¸N% Õ6v•Œ_+j÷R¤ U¾ õU·üjw:)ÔRÈ¢ië@×À(ŨðŠ®zWb´‰­ÂîÐ}úX/ù9ù2q5–!Æ…(dT¶q£÷F…¬ƒ{žiÜ$€à'€  Y‰ðægW1lì´E§Ãf&ŒR´Ùܼb(Õ9P>æØµ~òøÊO®»·IÉ#kôØõÑy‡ªªE_ÒÉ–°=úýþæ¢Ä¤|ýº ðbú{ŽLœH(¡Šw—>ÑLj6а¬{-ÔjÚaàyúö·õá*¢¨·®ÊÎö„JPÁ©Ô}ùÙÀмšÒP§z{/,ÙíǾE‚}qÄ5[¼ÃcYsý+ ›ä]¹–^^…Ž{ã­Î‹”NBaÒ2[ ~ K0uѬÁnnõC v¢ ØÁ›w^,ÌÉC ´ðÙz›{} ³ê媯gõa˜õè-*×)¼‹¬ã¶â ‰5ßí1—Âóí¯Ãkä:iËÔ©ì\_ÌL½na-ŠèäBqy–fR^Ò7D2âù™ÊÒ¿ Ê—ÞDzjcÐå–³“[Ç,¯ˆÛN‚>á¹Q†ç‡±ëz§„›T‘‹õSÈõeSÄe)åú’#w‚œ¢PÜ ·’ 5æ.¥Ãƒ®(¯s°“fMrð"šÆc$zr´H¿Eg—7Ìh×ï¦JßHB2ÂÃ$°¬|ÇçHn|f_HDÖaª'ð1TûJX7u‘ ®ŽcÞSªngÏ)gáfïöA¡Gº€LN¢• 3\œ&’_•ÖpÔ)?ì+ó1’“wuË©”^¯&û*a1iàöó7NÅ’e»ô²¤ Ñ•j±dÌ9—Š3+Ý\gIRÑÜÖòÅÇ{ò%ökÏ ç3ÃÙ4J@ªª¸NôúóÞvìb0­—˜×Nô‰{ÄEÛ]䲋‚­Z‡Ãèןñ|¨¢$FÿXpØSe‡{£"î\Üq+7éÍŠ^ó9ö se<òÖIÂyr÷cz4„õýMà°·0<ïuÁdOÜËèÜ×ý WË0€¥ @£ éoÚ¦ïRâ#¼¶ ¸mYF[vAP‘æÍ”ÿQÄôC}¿±Wâ‹ívÜiÛWñmÖó]ºÁ‹)hñsœØ¶r²ÕZ3sAÕøc6Y.MaA“Ÿ qf{] BI&\ÇYèØ|+aiðÆ”¦>í±žÕ€œ¼¬u±acǃ 45_hñA; µö”/+GØ¿ØSA³Äx«w‘E ++;7­¤Ï»8È—ËÃ9WGƒž­y‹/Ä èÒ3ÏhÉeIÑS“[T)‡ä¸i¦ž:§“ÿÒA  »Óu†1HNô‰åè*qß—#zþ¦Þ•þ±-‚“?pe±«È ÌÅÊC£¤æIÝÁ`9Šzðúè…ì¼@‘äac+m÷óï‹L,Ss63RIÄÜïL^ðùRi gà_?x¢ÑZÇ }.9ÇBùcþ#ÚJPêÊg½GŸŒÙÓ¬ÇLECa¶¿·cRÝhê$Ö$Jš2H–ì•D§QUXú5Ñ JºÓ)©Oz Ö>V/›Ð$zŸh&ÃЖ5!!7—Ìÿàš}§úTšÁŒåÏòzpðéæ›ƒL#-‘ú›mRá×»<ÙAUðÖoÖW¿<÷,®ßKK™äOra*‹ L1ɸ<Ï+f šµ]M 8ïM…oê¯Gƒ˜:&w§Ÿ«•Æß3ŸzŸÓ-…!®Û#ƒû0 l ÍæÏÍZï—a© j <Ö{žÒ–±Í`»=/,Ĥ|êTá…֖ɨó+G!5ÇýV¾6|â¯HçÆO^ßûp‘ÿN™`•‚[Ìô“=yÝqÿmLÕ¹"ÄÜ`_eQ½€«9=4¹h7œç‘m[ˆIã»~²NO ¤µ¤ 'ÊZ z±êyÿvçú”!÷)  ñ<Ëjä)ÛQi;r*â<.-b<þ&lÍde)P”ÃwºløÆ”›ášÄÅÓ°Ÿºüźr:ÜM®IzÜ ŠüûÓ©ÇËGžKKï)ïcØÑlÎ\óK䇣ãb/Û躰ãRÇ{yÔÞ†„‘£˜µÝ»R0¯Ÿš‡U¹R%»–½ôž 4žÖ×P7g|ÄM¢øi<‹Í€§ÙŸTòG=&ØL·Û¶†á5C?¦ÇFn¶ßžt¶_üÎ³Ó¶Ë (SÇ,΂é5ÃÕ¯q¾¶v§¿òé&_ì+뎈 ‹fIE㬩ù­ïT.ÖÈh¤…ìá|K‘nWQE§Ê¸– /_Å~½剋B]{füÃvõ—v€cÙ/ÀY4Ðv×e}#p±ŠzbMaè+‘*çk€œçbK nä0Õ”Ðv‰ …·¢=g”<Xkêj1º9zÝ@‡‰ôÿà (O¤WàvMntàùå‹=>@>ͱC§ýh’x“– |²£øìÍr$é[§t¸Á &†ò;{oïç{ù–¬_nüò°núÞ—óg«BdÞfã¶^DÞWw%,÷—hk|¼Ü8”5ÖÂ_”€~MöV.…]àjø;ÓC¾`5&\ðº|«Àë9mžÊÝëŽOU‡i°A‚"æè<§fN)°ÌN¢°úå«òàëmòÂlÖñµÕÜŸï'Ãr>9¥µA´ØYÚ3½?þ(|VÆA"õÖ9C«.ËŸ·•øe§’ÛÈÔ/^BÇ^´àý9Z×Ô[ñÇëµ¹ƒYÙ6Æ\H8کδšNm7—8ìÔçk?‹UïÏîÅ Ï.žùÓ‡\C†£XߢXž×$„n\|& ÝMòÝ:ºh"“½4–ã׃Ï8’*M"ê1L89Ù"4ÛiRÍüöbW7,€,óöÞU†RúŽ÷ÑS—8{*ŠEH“ŽöÎi“ŸÆaÛ9½†(JRœ›»7dŽ× ¬8I9®ŽÔ' Œ…†Sò•ÕÖ£µ«ÖF~q€ ù6J™aàÁx¡è…ñç>é¤ÖâÒûezç'Hnç‘ &¾_ͽ§øJ»ØÚjãX&™_ñC±¯Ûp©¸‡ï›E·æKAºðK‘b¸Ù5`x ‰ëùZ„õPUè춦5%ô´Sƒ<¿ ’WŸè-eéVsÞ2¾w­ÃÍ2×ÀR¸ À3ÿf8tOö60óž«ZR½5šÍéè<•ÒÕ,Šê ëf+|eh£>8pÌ8”a¶ÚjLJCÛ;œcL‹Ñ¤Òø xN¥¥Éž=2¾»Œ“WÙðePúVí£®ý ÆLü”Òzm@µ{cÓ1Z(+yí§Xn¿ SÞb‘Dcb{ÜÊ‘*3Zu‡Ê- GË9¢y>|‘|’£¶"…´¶â( ¯ • 3ú=•D°Ìû½–KÎñ0ðË%þ[±v¶]9Õ‚¹ÚÛi$ºÚèšü›jƒ€h¡ÈÇk™Œ¬Ø—€~­ñ:á ‰êˆSÙÛ=VûŽ…^Î|E‘¥°xe2<ãC™ì˜Ãªü`ý›/D^ߨ÷SÉV¯–R5v³¼*rd³8á³Ò¥Sd:•õÀÅ“‡O&Ø®å:öyuqÇÖ1Y/ìø•6OûºèhƯ7d£ÊĆÐÌBùÄ:D®Ÿ,žmÞ&Ñ}8¾ !ús¡¬<Á‹[é1_9RùiaÔ*E—nÊë@ÞËßÍb8X(2„ÉõØ[Ó~À@žL¹¨úvOcéö:R”a8ûÆzA±M<ûSÓ«.×1~EÜ–îÖ®óY f¿Ë1âT€€šE9¸Gù£ø¡E~ iMDIyxsvgmüú›p]±G Xou²ªÄâva™Eú BH¨«Ð¬è¤£ÌÙʰ¨/ ªIeÝ6E5œdàïÐŽX†¼ô^Ÿ‹é ößA;±.ÇXáÏÌFð˜Õx)ö*¼·«GIjlY½[¥«ã‘®š˜!Ãçû±yN‡pÿu˜µ)í?õí¥þòªµ‰WÞAÙÔ>E×,™þò¶†nfí@¦¯¥ÔUìÌ {]E‰²Ê$Ó¼S×ç¤ë540U`ûÈFä $ÈÞ$Üøó AU«ÖJe²cFÑÔÀôªN|­­¤ëc J‘ߊ¶³ 5»ó–Ћf“w„e(ñ#9iC‹²Úšø©®ánê–’ÿ `»£ endstream endobj 1700 0 obj << /Length1 1608 /Length2 11740 /Length3 0 /Length 12571 /Filter /FlateDecode >> stream xÚ­wct¥Ý–ul»Â§bWlÛ¶u¢Û6*®ØVŶmVŨ *æ—÷½Ý}{ܯußgŒgaÏ5ךkï1%©’*ƒ°™ƒ‰¹„ƒ½  #3@Áhâ R5¶—cq°3|89()EÍ]¬ìÅŒ]Ìyšæf1sS++€…›› êàèélmiå QWÑüLGGÿOÏ_)ÏÿŒ|œY[Ú¨>>ÜÌíæö.ÿ냪ææ+s€…µ9@TQI[ZA@#© 4·7w6¶(¹šØY›ä¬MÍíAæŸλS{3ë¿Z1~` ƒÆ£¹©õÇ1sSsÇ¿BôGsg 5ôñ °,í]>fàâ°¶7µs5û‹À‡ßÂáoBŽÎÀؘ’Èdêlíèø¨ª$&ñž.VÆ.ÕY„™f¦®µôwìæ#êblm¸˜{¸üUËÄ`f r´3öü¨ýæèlý7 Wµ½å?МÍ-ÍìÌA ˜쿦óÏ>ÿ­{cGG;Ï¿O;üõ_¬]@ævŒ,¬5M]>j[ZÛ#0ýµ(ÒöæøÍ\ÿ3æfîü÷€hþÚ™Ï$ŒÍìí<fæL .%4ÿ;•ÿ}"ÿ$þ·üo‘÷ÿ&î¿jôß.ñÿõ>ÿ+´„«‚1ðcþñÀ>^@ð×óÿå­í<ÿ‡ìMÔ4ÿÃÿ DÚÅøc Âö–R032ÿÃi ’°ö07S²v1µXÛ}Ìèo¿º½™¹³µ½ù‡–ÀÀÂÁñ/15+kS[û¿†ÎÉýwÈÜÞì_™Èó7o&IUuQ º}MÿÎRúPÝEÍÓñƒØô!ï`ö_Æ_""o–/l6æ/—™ ÀÍÎíû?ÔûˆåŸ¶¼±‹³µ@÷£if–¿[ÿß?-ý·7u0ûkOT]ŒíÍ>Vë¿…M]?ýû¶´üŸößKnnîanа¶ì`Êb“ž•áR‡›;<)¦ÛßË9êXÚ¨VTPãÐ㟱Ë]iôRÊØ4ÍóÖæ¹têøº/C{0Ú‹cGÝóÕüw>¡/ùç¾ô-ªŽ/tAL¥Ègš1Þ‹r;P:œÌ?&•U J^`ˆ¦;Øœá.î?»`QÜ9¢ø™¦5Äcw¢5aÔžžQ%ßßQŽ õ\A÷íÐ}‹‡§ä5ÆõK=%Mqñ4r¾i4}ug¨áÉI"5í…a|¬¥@쥀:&"²ú­ŸÎ϶eú}ÝoQôÿD†uš¨^ß5ó{H×}Ó`Oï»»ªÈ§Êé"öç2¦Î /¤™÷)‚M–ÆÀ°&JÉA¾Ø{‘H3›íHKŸàXg„÷yvÊo)~6ƒ¬läÇ/ˆ„nð–êZ5’ˆŸ^Ú½õò/€oòß.9ô5gPÅrŒÍÛè=zÁMêÍÌbòÉëßËú;w0´Ì&G }µ®’]Zˆ¦ªÙ•:Ë9%UGÅ`hÓ§´å Ã*KBõ[ðâY‹ñn®ó„ó?Äóæ-‘X8K†~q>™AzËÕfdO]áÉo$éêhú.<ôò£þT3Ü}}5…„gÛçù Ón§Ë½—àq».ûÏÓ¸„Â*>fD0_ÌRöÉÛ?Ü’%¿v¹ÿËËc+¡r7ô|Õ¾IeDÆÏ¤\ä â­ú¸ôð ¿8žÝîuöÉY‘(®A‘Üé΃ Ù³û;…_ãáÖ³Pó¢ ¿È„ZX¥ð¥â1óö’lòèûÓý{OØïòp(ˆS›K‚Å–qÁ(àzÛ—q©à™47lôG :}¯9ÕZúÚõ«l½S³£Yþô2ë¡3Ju&]À]Å‘š(&#&T.ËÀ–ÀzoÏÛ3S³,%9)ý ކ~jüÎrN¯ßOKûTƒ1B4´‰ÁòàE×u2½ HPÂÄ«iìYÁÜ /Á'99Y¾¢3k8,Ópu|©l¥Øf Uq¾Ï\®XA¬åÚÈ(Ÿ?>ßÓ‹LœgjÔý&™"0r©c£XëqØ%Qþmªð5ÇXBŠ=ë1d 7Òw’ ƒ²_{FÎ].úq,é­PžìFÛ6…ø·ðu‹ªVdžzèa|U1&Í0 ¸×'×v>©™<&þ5,ËÅc\ÜƒÛ Oýšé(§A4’ÄágãÙZN ¥ïl+ë„<¬ŒV‚ð ä!µ- Ô¡ï‡S±ðë…gDyòì‹»`ù—©å6|‡:ýIˆ¯÷Ùæ»×½kõø¹¡êë©Ñë/I‡È°+cg9 ­w?–JBø¡GN¾Ñ&Lý9hÃýÃuÐyù†B~¼?d˜aÝè£xô0üäl3x\%4Iaó^dBÐ[C¨ò9ûUq) Sßù ÈаÒó“/gÉ}F3Dæ59Jñ bg›z‹ «Õ‰PÌ‚jž¨˜0¬ËOÈ­š‚44AX ·æo±fa¤rØVmyø%ªÖÖdz¦îD®2˜ã ‰©\¹ Éþå·Ýí‡ß¸w)Lã.êˆ.ùØ,møZÛ*T‘Žk³ª™¢;^SäÙmc;„\ý“Ô|ö!aÙäÆ-eWGÑÐVÏJ+|zR£[X/ä‘9áoüÉ|ñ¸{VºXš÷è×þjk6…ÁVUx¹w)S}‰všPñ;åwÌÒHÚØÊšÊQå¢z·¦ótÅ®ž|Ê®¦œÔqw7©:›!Y#§WºÚŠ,×f ÔÄŸ¯ú˜EV³¡È'OÇK¥Šp_Mí+¾»Q¾lŒE£JØóê!àkd-ù³gP¹åu‹²ð?!¿__l ¢f™vK'µÛÓõ¹×‰|CAÖW¸ÝïŠÒ”§Wà£&ë ÿÓê«usOáæÚÀM"V…·«ý€ó [¹n(;×n„@GVN™iÌ‚¦ßåQÖ§ÜKx’ «ÇO–‚lƹjµü‘"nÅsäTÉyîÜÅ‹å9„ÛȹäNuuÿ‹q"üÂÍÎå3Ju´Nꤡ§å#{Ä™«Ù¬Žщ•dð¥î5³Œðªg äO.Ü"f×'™ŠŽ‘¨Ï~;´˜Ñ‹¹w1Ð==¬Ê—~æ6l9-á©“,u„áYM¬««Ÿlm–32ñ·yÅð¦Ä|´[–ÂÇòI BºgÊ6\s3OGoÎW^ çð˜/?Såër—bg °sQ¤ã Èj42ÁœCòå&ñwT¬Ô[ëŒ( ‹&šãç n¶îàLZÔ?S6ÚN³ ?–þ©~Ñ–O°7kŠî”¨ IVááw‰lŸèƒäÁgë{À ÿ]9¾l° ²4+Ä`©¨vymˆÎiæw½4’ó&§r)Ÿ‰]³å=fP×¼rmùú"ØŸ~ꊩÈWÍ/Så=Ztž3È4‰ÁLìT@Ü8Ç ¥²]8ÒÖò*N—“^ê¿W8‘»Ûzó™ð®(n Ô^Ä+é.'´â¨9E\Ó×è@ÖÖTGEÊŠV”™ñ†ö§*š øt‡\ˆŒ¿G=v±·õº]¦o“­Ìz:%wv¹ã·»ëÄvœÂo–jîˆëÒeÇ\Ím–†š~ûÙ(ÐÔš ÓN%ƒÅ,–ö}Kƒ žÀÚu±qì¶;‰Ë®À?]Êù¡âÅ¥Ã'‚ËG£qþÇ-Ü]ÔÒƒc ¾ä”.ãÜf†“DµUUÐH[lñÚžÌ/E˜Æ«g–BƒIÙg•#KÎAa¤ìÆD™Ž“¨Š_O]U–ZØ C\¼Ý'q¡çeh”‘ó䦫¹DˆO|w‹_ÎþÔ±ñüly|ü&ÈÔÜý‡F‡ÿQíè‡ÃiR¾CÚçduï!3Íø,¯ûPš¥œNþÊhs¡°¬6#åvް êÚÝ~=‘9Ø‹T¢…*8Ød¼vµ6Òü-ÙìéZA¿Ëç9sÍ iÌÂ2æzŒ÷âZ‘Çé 2 }G¼Ø õbdÔRCgLÀ]ô„˜z»'N áõ$žØƒ–à NY¢Ï³jù6AÈæÙ[ 'so#Âjz¯®Ê¿‰¨‡DÒµ˜LÒ‹ʸ³¤KÍ™±¥1:(´™~…,í«°xˆ¨šˆBsàøJ‚5±<Ì^G‹gX¢|RßÜŽ%+¬s“dAf0¿¯ÀY©OíÖbc.@%¾8‡¥?¸e\Y¼?_ovg¾|Ùã9£_kcãAeqoåÓë£DVóxÒvL!;š*ÔA•'.ÒÊ—9ß”ÓÞ–ÖÒdÚzV«he¸·Z,g«šÒ˜èg¥ÙIL”Ó=áêéí5î²¢‡d¡ —^ײ‹KGžM¥ÜÁLõÔâÍê&g„N¸2º›6xøŠRH73ÈI“p¹qF­ˆzB®À/é—ŒæZ·v-ÔªJ›H¯÷Ø8R¿/LÒÁrK9U&<ðìžð‡iE/&ƒÉÓÈ•›ÇBwÀ¸ÚyóòC*òJaˆ3•"}­ˆˆç~]¸9lddMµÿ¢G]9ÉÝ9€?±žS–³ŽªÂ?û–ú€¹Ê,»ÛÝŒºÕ 25V¯UÜçD1^± ‰¿ÌtØêC7ˆîMø—úãÑúHpÚv£uóôá×ZžHg½·éuûàº$^f“æšF¤Ò¦¹µ&É'³úÖÀĺ¼Èìm áÀÒ°ŽKޱÅKÿ¡Q¤Râõ]~ŠÒtP“ä’nキÊnÖœüa7X -8ÕðèúD;EbúFl T³ì¯5l´ýÍxÖ›aÃPšXŸ}\A­gLû}æ™lî}ŒÄÞ–& æ,kùâÇÙ¶!ûëZ‡B’ú×7ùõd»a ꇌF)àÂAÇìWÐämH‡ÿµVyKÐP ÌŸËd”²³„¤K7dkÈÌ?ÒÓ̪Sx»4½¸‰}%ºFs§ -Úßú9­©]óPæž¼dx+²¥ "m‚ø8>C#”µ­±ó¿4²º Ô°Ýà°y¶ðºH|­W„ßZ€H•ZìÜŸ¬œEµai BòªõñÐØœ*«gMçœ4æÜmØ JÚ ;^A»¤HøjM‘\gʸPa8å„lŸ,FaÃÿTò¤L¶ÅÜ‚ø|4³âR B»`<ê¢oåcK€ƒ*† R„™#¼,{<»Yï!uF¦Lk‰aÔÍÔ ŠÙ?ïÀÒ+W¤n/wW½Ðmªv„°&:ÎKõôœ…›etr(¡û¯¨ÌÒéBo4´æ&A ºÚ¾n§‚æ ŠÒq… 6+¿„͈™¨ùÙ£óì [æF*R8ÄaÆö”˜¦xKР—qÈ) ŒˆÜßGžò'Cä§Ä¨÷pLʘ–yÝÙÖ Âçzd'.z?%)=Ú6«n…ÎY8V´ŒgøØÍw·FùlÍ£äâ¥þÈö™*HÇËëå×ú>§´Yßâ±éý‹úóß[ñ´íŽq©»ß,µz$¯ö¨ci…áxãY.÷íñþ¢Í ôʃÄ`Õ¥ÐÁ0Õj¬Ü`C¹ìM@í(ÊgŠñ¤¥–[gêw¬Ïk]@¯‰(âž;I÷‡×E5¼vßßkUU$>„N,@v GL£ï2(VûUkñdǨOÙ)Jdâè¾·=HŠø+‹ÊÐD¯d8xæÁ¶Å „ø–H3–Å‹C&Ù'FÑÌ¢ñÇ'¿”ª.ˆÄP)S¤R6Ð*öµj|8¤B”0fž’_20,ý­Â/Œ6ŠC•Ò&c2.3Ú¨„‚ƯV\Þa¨:C»âC¿±¤o¯Ýê}÷réVMÜA ÿ$ÄËÞ•Kì‹™Ù„ÕÈÇâO3ÎãËæG9€ã¾\Oõó!1Ì|7<é’œ,Ú„‘s•§7ÊIêg/¿•zŒîÌJD¡Â¾úš³@öß¡G_>-°e¢k§/™öÓŠ P¯êJ'r»)«±û!¿® Ë Á s.ü§ÕBÌ*ºÃ,íÚLu¡çäqH—°æƒmñ’IäÊû–†Êóð8K³MÛ=<+v24å.ØÁ’ëÚ(aå(Ϻ­š}x‡¤ªZwÑmôç¥ÁM0›ÍÎïç:¤é ô¸®@5è$ùŠ$»äþå"÷èšR¨l E|¤"PLD\å]ÆžÇ)ÜHc³Cœ}ŠÝ¼‹PœŒÔ²”@¬LsYìg‡îÕ,ó×Ö–×Ï‚˜«‚wÒ©iLIoý–PUÑH)ÙÛ¤›¦`¡$ Ÿhˆ_û}Uëá·˜sPôEã]V¤IhĘòÁ©¬ ç¸Ä¢¶Â-t¯D/Ù5²ÓÙ˜/ƒ4‘ŽQ{N[ai·¹Ñ{ߨY³ûÊPÈ•O ‰žæ ¶?ÂË ¨ÃÖ¬ÁùľP“ns~iµ:÷x½4$.E=Y™ZdnÞéÆòTF˜×®m$£˜¡ w*ö,j “è¾Æ<ŸV N± ÆUÅ9üI¢Î¸ät9( Ú•¼Ó°BÆÿÀ\FUŸEH¨/J¬à3Ô[†\rœ n½iU^3ß·GçË2¢ýµž€W>ëUþÊ®]ªT‡ø“ÓùÄ‹/jbåû>Æö\EÙÎV ÆZ•¢Åe„ ]Nø”­ÝV)W0Ê ŒÚÎ>§Ç/|I¬¥½o¾5x‘O«³ ×”ïðEÌE ùÂ& |ñöÏúì{Ó(B("¤é&ì`™1HWÉ‘û ˆ¦‡¶ý.€ø‹}Ãâ˜ôÜ"ÅS¬Y gïÏ{‰}.$„öCt«x“}%ã¶[¦"NEO wÂÙþ`9 ÕŸ¼–+•òÓ)dÒ)Û_³wy­¡]Knêºr+¦<‡žºäµµ¶® •oÅ]¦,Ë)ù÷§IÉL˧nET¥¬ ù“ÞÐŽºRÚ_5]Q6°*x1,Á ©Y³)! ,Ôð§qí¥P·‘’8Ÿ¼;ò‡ä]ð×Ոȅp ø·‘&ÀczÞ~clð˜~¼Mííøýþ¬2s;̽•¹Ø€VÝnBšBzæ¨~Úåbß'…N~ègÆÛŘÒ˜­Fm¿ÖÜqã>ôhø™êº­)N$¦«ÄÞ5h¼z£…M7É$â,(­õaî¸ ‰ÎÝ4‚÷’V ´T.¶Ê°T¦•ÙiXt†Ú4€Eu4'#{AgŽ-̬:£Ç>Ä-V5Ù3ל®NB©xPbp™ivŠv ãÉúïyhdÒ¬«~Ÿ+ KeV»k{Û°ç%LMya:ö¦g'ez¬Ý*äöŸéÍF²¼ÝïQFÎBfÄŸqöŒ,#QÒ‘ » - Òþˆ³<÷56ÉH³tvò°Ë³qùQQJ·}«0<ë¦8ˆ ¢iu'çC¤Pò êÏ-£› »»¤#š«^êõx¶†utÚQ® 5üÓŸ‹Û›'›û¾‚ˆï‡ÆW¼°(‹Ff®˜ï×j Rs v;òßvÇy3‰4Ö» ¿¤xöŸëµW±%ZAÅ– Ö– Ý&¯õldÄÎK¿.ŽÁë;GP¿9æmƒ&.µçËPq£ý8*Øl_ö чñr ûôÞC©‹D‚yCfXß{ÖŽ7íמrÿxŽ Å‰éuÇGÁq"µ¢¢„_4…Û™§–ÜJ‘(ºqvßvó™ágÇÝð³U©”DëK‹47ãù«›Åžá|î?å¿!b|ë]¿ð¼½:Þ’ˆÍ­¥U€§qJ}¯V‹"G@¦Q2Î 'Ž6¬Ž®W…”žÃÕTÿeI¯´Œì­i›Pf¹cêíîÓû'bAN®T´üÍW4yXÅ\vÛ­Ÿf\h¿Öí¢;N uYSBí‘ØFNBÃnõ]K¾ÍƤV8÷¥ñ¨‚þ~xЫmXµŒS©Íά×MvýK7¡5úQ0$ü Ìp½q€¢õ–ñÅZ-7¯7{”_ùç åX¨±q(m!5¢‘ ‹ØxNOÔÕg.?5ÎÄ<_ q[›$’îŒ*"²=‡j¤LQÓËR¨,Jäœp˜!‹{!r}ÔÛËU!H¦Tèm|¬ƒ™GÃ@Ñqk_Aýï?¨âøU2Ö8rñQÞù\êXhIñÆ´>Ý @06ÓÑ I@ À®w¾Ñ÷G«{r%Œ~BÛÄ\ƒ W Æ!ñÐJŸjëÌ×ñ1’,-Ã…Šœš©gmŒ&Ü’”bãWDºúÒOÆ«œœä¾ãLuŸ–^W5àH—ÇLbg¶Ö¦úÅn Ý}:’JÄ|º'ˆ'ün&섨|­ayc³ïk˜m󓫦#AŠTù¸®ÏÝ9-äËøÂ½Ï­ßìí÷±Ï„:©ô&e œórÐ_ö„ŠìˆLîá·ì×øSèi¢t'ä<ù&;E¨[f6ÚYd=¬÷ú¤Ç ;4¸ÇS%o•§’d!ã}LË|ƒM!%‚sÚJ„°$ÊôñEiŠÚ“ŸHG÷¿ rò}ÿâð]ÒëElàX,*Åúzû`Šu›Vr¦lzµH¯sâàk'‚ÿPøPà?ãíië¬*xŠ' ø@,çÛhÙq~Ä æ½1um8ˇРDè·ÁŒjZέÒH±¹Yx2òÑ~e 8G96Šæn³\ü.×q÷4­ ë†:ˆÇU­ŒöqÈtÄÔù«_±àßcÞ%–VcMÿ^m“Hºˆ¯ú¢ód2ÀÈ8Ó\ýì¼…×±ã¼*oµëÂv)‡;é+h“KggIQå÷µÒ^6®{ßrŒ•i™ÎîwÙžØRnž0N-Ý—kMƒ6ð2ûÙ ŽÌ£H‚ï–þaŠ?d¥ žh] •öIÃfD ©é¥¶æÄ–2 x¨ô„Ž¡BÚÿ¢-êÐlÚYq¤ê`.ß}J€*­ÅFsÉ`6.ÒÒ&|_D‹òÍ"º80Œ‘xJ¦ÜЉ­^,oÿeñè±…3Þ$0aËÎø[RÁç°6N/ó~¨^Ü}1[MâZ'´1Gž@à Á“`ñ£˜ŸØbQÁ#s·ñ 4q¼ÕîšÊ¡Å À qÛN¤…—=|WVù;!{IU„ø¥4ègÒåZ^3›"%LyTÀ™eÐ~\|Œ;?»rßÞˆÒ¢­ÆíˆÂËðû4ûsé@p Ù!„¸ážî°šdÑóš"´|ó‘jÊÁ‰î6«b²zñÒ,Xù- Š7‡Ç(º9ÃâqLÍ£Œz†gûÚ9PŸÂëZÞ#næÕÒË é–JϳÚNf<6BVõÅ‹åe¸'ò‘m*tî¬Òâ>)z Þ¢$ˆë¦¤¸&(•ÅhIÖ)¬Qci(žv À¿§É‚0Ô‘ßÙѸ`œ–¤DÓÅjÈt†šSäÑïÍ<øÃʲfõM’ ÐçBQö{:’Lì:õUŽÒÌÕèáUà$[éŠ2ƒï=,™Ç&‘ rJã\ŸÓiLÌ–7Æñz?Љô«\”p‹&léå%‘%!Ü#CwiìÕ¤áéÜhvJeL‰ò× ]A„:f‰¸[–”v‘ÖË^ö´ سÈ%Ÿø}ÕóCä €eIR½ûTUÐøòæeŒ3d˜#‰º£¤Õ!¬ò"`{m„|)Lüòôü&.yïXVk»;…¾õâµ·Óà-ÚTñ#ŠÀà0T«»9FwÜ­ëõ+VÛ1,‡w1dŠœtØþî˜}Õî­cz<»€ ˜?‰ýÞD×ï‡Ã³ƒÃ(Õ˜-×.ñ³km!Æê°ËÝ5„”#žï>yË2ÀþÞìÝì¤Û6žC‹N¯ßýðÚ›˜nK5á ÏÖöG©f¼ÒÙdôŽ`r†¥EÕIà*9ŸºÜ;Ý1’ÕF`À¥©ž·!&ó cjS‚L¸]¬´…7úËË-ûˆº³¿r{X®sa<ù¡ªàW½íòv—íð妵M VÑC‘Ûa[Yó0C!µ3ò¯ùÐ;i?o­n,„Z­t¤©@ùYx‹vFNîò”þʰº|»Õ<‹R@r4|‹‡Ñêw¡i³¨cø6¯|ò(R®<ý-LšÐïÖ׸¦ä<*E¼Ú¬>öÔùó²4°Ö‹)ZRQsšC·ýÛOrd)nǶƒØ DÓ5œQ¹ÍÛ5© :aíŽÜvᙘ„K%†œ~ùè Ms9«D¦R{è5-;HàË¡w«Ð\ŽŒy$ú-äÀe»¯ÎË»øoT·„´ØÐš›*Uïœ 7&-QôuÀÑëÁŒ'—©YÚÕð’¤ôÊk™7(©$®-þM×5çû‡dèØâ bÃ/Ü)m%øúi‹ïïïËèiw¾TÉQ…êŽ7¤82‡žáìxûôº;v?ªü®vȾ`ο9óöáŒN÷‡`§ŒÁëGO”õ¯l¸kí­!Ý–H´à1XŒ €­r­7XóÍ‘P”˜‹Q½ӡ…¡ÓRyN %—ê–^æÁ²Ûô&; —ë…’?txöZ¶¦0†i«ðúõÁ)…u0½©ÇÍ¡[ŽhöGgpW<hz¸1‹sU‘qT§Jí°paVomºM¸–Tº4."x<Åú*¡eBÂBÆJÐLeŠþëkeç¦ ³Eh¹%Ô/ˆ#Sv½ßÉ]]™¤÷Ì~Áï{uC¬c G•¢É»2ýÖ!2(àVßh‰¹9ç{{ k}šôÅÖš³{ØÖ”‘sõJü^^IÅùuQWWeÄãÇü\+o>c„ù¸¢Ïj¸8E€·¨vÛCWCùä|v]J^œßb?Ü5ˆ-|ã¡ßTªmxÄq½¸ë¼²‡XpÝ’PûÅ(l¤r6¯!è!”?0þP48ާDtD›ŽÐ’/Œ…âFƆ÷˜à­ÛE¤ªsÑ‚"¦O|Þs[ý^$757Âji©I¼å›–!·÷sGñt(A ³è¶4æ{ Óëø·Ä”ICÕn†?¢‚ŸŒíÛ%|í0ÌHÊeû&$j˶±`…çG+d®µ) Çõº7ÌŸÑyíˆ3†JI°<¬Â¾>û^kaÁ91}£áš/Z~¯4u¦1nåɯLèeùvòcS-D}þ8E8\T£UÞj[̾]Át-yE>Ç蜿æ*®ÕNzA}e1¤“@ßÀÁib^H“†­#AFµjê® ³'Íàø=˜1í±C¯3z`ãᦋ½-|k#œö6º†öK\ã£6TXÖHI9’ˆVR•SI²õî‰vàˆe›ö¸I<Ûø4Ëä>ÒÆ6¤tþ^#J«šNã‚ÝÍN {)iÆ:ºõá†ÿ†úƒ¸thè§¹Kù.TeuŽR‘p’lQµ¼Ð1%AP´ØÏň©Me8Z7þØ7>Dí!Ø”F±S¿—::eZ¾èÅi8PÑç;1h™E«‘Ï2ëP×Û={ txOÈ:Þ>9G«4µÜ.ÖoÏ\z쪣ºèDþNBóGFÙx>FÉòÖù6:XWö¦!·Ð±ìýË–œŠ÷tè3œÜiõ8d9±~Þ›B?yØ;Öïæ[¿ð"Nªm¿/ )5]z€ÒHú§ªÁ—Iˆ±X[ýjRËki埧ðyGÑYº7ž£ôêv%{@¦ËYfÃ׊ìÇí†lIúžb‡Tb·Pqeß~KƒÂŠ#üá0îÀÀR8åT®äXþ¶{aG˜Xº¹çtæ’Z6Têê¡ä/É ò»1[àìå0Œîø¤5Ùt6U3§Áàó´Æi)ëÚ›ÛþûV}ÔDay±ò"þí×éa°s}În>ÜãD ´Áî09[N‰ñáÃlz¦££ØGC¥m†5¶âó;(«ŽUù È£¨¤ûUWöãµ Y!¤Dò²Þ%Ž5uä_ܘj²|=dßÖ_ò¾*LêÖp71¹¡DQ™á‹êOÜ“\KV»s…Ä'aÅ$ U¹?4ɸ>Là6®íâDÒ¹ˆö&A_íǼÌ?À†ÆÈ—Báè$“¼ª»Ò,…‡”Óʦ-‚Ä´I ÂŒí1Œò1ÀÝéPShµ ÁœU4Ñå«Â‘Þ´Åo1€7™+¹ÑÈ ËöG—wœí$«¹sÒ½3Κ¤Ÿ¯6‹x¬Rl¬Íþ\‰Þ8gî1Žf7G£ÀÇ¢«XE – T“Îò¹; lÄÄÖÖz 'HHV+0–†òg¤8]íÂj÷¸„mn^” çÙu6ì”̲q!sñhùrÔúa`QÓ'{ÚDÅD]<}¥]ÉÌï¥0ÓUVòÙ/JêPWf½lÐNÀjßfã˜âÁ®ë…I#Ü}ÿ1fïò3*MÞÇóFƒB6ÃkÒe—sÕ0óÒ–wè„ûqÁó«Û£5Â."#³dÏñÍ–h¥…0aº*=b¦ŒÖ£pýø!ÖMÄçcz"?ô“ç…Ý>×óнøññ›ê‡ø}ÔvíCé–Ó蜶£éÕ&Ñ£U¢+8R|ßðo{=ÝÔ^Ž$öצËù“üšÛþ‚4Á¯`Pi§zYÈ#§8&_9ÌêK›¦ZDÙU÷·AÞ¬¤¼g–~\ÎögQ´‰#CE,Ò^Eè{´xâ©YsÝõz?â=2óãÈ"…ˆäò Žˆõ?@HT¥HðÏ4Ù:S6úh~:cg&¯²—‡P¤”ÑÄÞ¯¸Z _G4¿Œ?¡&®ú<"!Ô®/º¬ˆª¸×9Ë·ÖO±apé×Ç&TÑÞÀl !̆-(5N3Ùv;çÔp•)O*ö/v³Ec³÷êÚiIþ>u²3PDLW © dêir07YìËüoç÷2MÝúØŠj°$P ™É»ñÉ „?>çvZÀH_¶¶O©|8êÇ[¬aÅ{—„/ÖFÓkkr-à€0k¥ÖâŠoyŸuƒ¾¨áâWm–"†o’ì|·l*ýf^#Á7x¨Ïš°(PÔQ:ÀÈåjçÓ´Ž0›ÅWž¬ü)”D1C<¨+õ£VT/ìS±ãÝÞÝ#0¤4öñ´}黴쯱6 ÇžXn0vÇeáçE_X|Ÿ';1qùȦ§Ä6Ž£dÁ»ie,0"äruÙЭþé2~\ E˜ó†E:S²¶ºmáòì|0]žŸá‰oéݽÍt6$ É·5PÃJµ»%ó‡vv±lbŠ›íÉ!³ýwÈç¶_bkÒ.3Gê å" uÎåÄø…óq )rôðdúÜ ŒUƒÒ³«Cš¿YòsþxY!t9Ñø=àêKiH觇iÇÜ9‡•~²zÑîY®âÌzÉ—˜,Îh0¿¥Õ°¬×|Jn.1üñ¥o o©Hsõsý…öóIu>‘ÜŠ æ =âø¹5lwÛâC¶Íû‹Ë°š¼£л0ò¹wIañÞR|2o2mˆGÔ:å›Þ:Õ¦¿æFk0ÕF2¾»T–£«éï×&ÏmÌÊtšÃ¸MrãpôÏ\ߘí…å“…ï!`*Ç«í0F5#È#ð¿%¶˜”&¥‰òÃ\º@ËT„û[Açé¸B‚ý¹È ã‹ÇugÌí?ðŸ,Ö]ÿ*йá½j‚ù&^Õæj~¬±-??ƒd@Y¤/qôûøS­%„mE{FE_öºµ<ò{ÞÐgWÏ€Þb 6AíLD‰e=!»Ö±÷&eFªà–¤zåkü¼„ ¾/HÙŒ.cènê®zv ¡ö& ²ÅÆ3í´Æ©íMˆÞÈ‘9L²÷‹¥äw±,«0ÿÄoŠÓ{‰~“´ ²‰S›ÒU´:Š Ú£ˆó÷CX‹U©po"êÌmU"ßoØñ»qizutRQÉÂyá"7åB\…Á×âsµ$.kàιyŒ9±¿°éÏYµKÑ_=ØlocwÆU·êêÿhèí` endstream endobj 1702 0 obj << /Length1 1144 /Length2 6856 /Length3 0 /Length 7619 /Filter /FlateDecode >> stream xÚusw<œÛÚ6!z'zDM0zï½w¢…Á`}Dm½]ôÞ{ï‰è%Jô=ˆÞ_{ï÷œý}Þï÷üñ¬u]÷ºî²®Å@«¡Í&iéh–st€±q²…j{s7Wmƒ ›ØÚ ðò‚0t 0(ø¿è'BÚ ‚Ad@°'^ÇÆ   rpœ@! €/çÓÈý¯@G!€† ÄÞÑ †] ‡'JÆÑÂÍìÓvsr‚BÀ–Z`WG7 °«ÀꩲÿÎ vtòpXÛÀ̺Zú,¯^½þá˜{ü‹È€]!ÖƧÅ;0ÔÑéLOò`°ËSÑ–ÄjXd-!°?Ú0ÛÀ`NBNV ðÆîjÅî†q°<*ë`)íhÿ‡€+Æ3“¸€-žšòàøçÜìݼþ ¶‚8XþÙ’¥›‡®ÄÙ ¬(ó¿ÁOÆß˜5àr\°3üÞ†ã”:Nà?IÎ?`ƒ¥·—“£À u{C¬ÀO? /WÐ;0æâööú‰ÿÜapr,!0€9ØúéþV‚ÁVíUA0È{€äÿøþ½2yºPKG¨Çßáj {0€CFQRCSñÕ?{ÿw”””ã“$'?€K€÷É)OŠ‚¼ÜÿTÔAþ·"à߇¬‚þ4±ÿìâúäBóŸ†eü§’š# b0ÿmc /ðÉO?ÎÿÓ<ÿÁÿŸúg97(ôÏþ™ÿjðÔ¹+@ðGïPË…ƒì!PÿãÀ?õÁùüÿ££A!’ÖÐ â*y¶Ô€À,lþ2Æ_¸®ƒåŸ/¬áè ùãÍØ8y9ÿÁéØ@,ìÀ®®Oîû“;Xþ#¥¬ƒ…£%ÄÁ  {òÈÅòßÀ´…›‹ËÓxþ¼ §³ÿÚ[Až ƒßƒ-0æf-„mkÛ®ª$)ÜÙ¶F¹{ùt/Ýhx0"¡ˆìÏzÔHíŠ)x²Ï3d4†lÄ*ŒT‘?ÆPÈFò»Û Jµ³£Á<€%ðƒMÒÁlß¼Ò.lÙ³83‹žÔMU~u}áªi˜kh¶ý‡£Õ©µID`?Q[SßuªÞŒ=ÉÒ¤ÉÐÏwÒ=ÊkÃÕÆÔš”¾Ž•ñðw¢Ž {µM»sSøä£[xl%óDŽêÌ!¾1qh4{™TÛcÚGo¿e|þZ£ô¢Ïk–|㮜OÐQ%¯m™9ûQA~VÍa¦®L:ß%ÅF£NíÑ 5ÎtãÜÖ¾>j`ò¯¹êÁp¸0¢|éÖ[ÄøëÐØ¥DÄhàZ«(ÑòÝôå2š”(õc0H 7Jͤo™‡´¥ ¿;½~uª½Rï«S8½d ðËŠAÂÊaRCÈ«Œ'åÙ~¨ëñ僖ê'0D‡ôaøQˆ²††÷‹W§¾P>GPÅm¦tæYdž,ª6¬†¤ÇTw¿ÒáV{i/ìôz «OÛßA¢Õú­¦•ʦ„*ÎxAª2dZ‡;‰²4ö)(…(¶™ÄÌÏZ'lvŸàGNª‡á[¼Ê`Ir۬к¢ñû]UXˆÛ’ãh¡ë¡bgÛ\#’n]RBRÖü•3Z„¯[èö“Ìq6¦ 5‰ `¡ƹ³·y3^Ô6W/#yxÖ¹{ þгÕ<‚67Šn‡³g×'mî<¨-Vñ¶y û·UpÂÞl¦}l=|e=MT¾Zìq°D)ÛI¢„8IšŸž^aMl²”]²V¼Œnr:šXß ˆîÒ× ~Ù.ÚÈì8n7*ì04¨Æ|[7LDo5?öFÇs¿|N]ÂŽÒ>ñD³8. bqª’C˜™ Ê…›ñ«¾êÚÁ;þ*“¿éˆ BÅÊhFQüwMç¡ ¡t ,鰃߈»W¤E÷·3Q˜IÍ-Gæóê¨c§Ô{$V¿ÝŒZîï's ég†ý™«¹Û®è6.‘ „æzËÅ\;cêé~›šP}¬ù˜°%ÿÙ©½m/¼®`;²”qÝ']Â9»(RN«iö±p}7n*5Ž ék©Ëžó‡!”Ìñ㪅ʰ„ÒI”Ö T.ÎÂ|ÏÍEú†ªª9Pôº7#á¬!E'ž¨qžrÓskܵTuè·Ö¹·ýô¢Ð)˜HKq¦A8[…‡£_6û¿&\¯¥¬­û€à|ûËJ®d;ñfõy²(µáÛ~6‚¾)/Ñ6vÚâ#ÐJ‡¯T߉ÉÅ[Â4…°xïIüü¸‘ž•Zá^–Q3’¤x}ѨcÕ5 /“Ü`ôö&O$׉e{è*s$ö“¾K´[9€ì¬33]µˆ¼äý&ƒ;^û|°“lÑ“Ez¬5¿Rxó‰Œb×m«ºë;|?ê€ÎÍÃŒFƒ~ÆØÞ6¢ý)ìxÁÐÂ7G¨~š Ÿ‰Ñ†&g?“žX€Ÿ„ s<óx5ÁMj"s=M5”škÜÂNçžN¸¨˜`l¦%Ü%øê9f¢D{á&™dî] ÎëÐ1Âæ7]+†•±çØ©v¥¶"îñK «nÚÔ¶¡Ö(¾åpõE_þû¬uô¸híRÓùZ#Mëz:e¬tce*Z2ÍûTHÙrršøtÖ‡ü^ŒçÛ-åG´÷¦iy)k4qÜríš:io¦Jï•÷Ò,µ/©"”‹#¬Ð² =÷ý û­9|à¡"Ës÷L,ø¼¢LÂ" ÑîJšG zšhæ€Ët @9‰ø•´É¾H„úà&ÞûÑõù½‰â@Nu"V53Û0a­qI¯"h¨Ôi_—Å·˜«E5ˆ®èÓý›ð­ÕÔYc’¶Ü×F „+¬Æ‘N+0îæêSå ätÑÑ" ‹ÂËìÆlƒJ8»›ÆÕi"rá“?áÒùÊŸµ¢ÞË¢ü<Ÿ@´ð )f~³¬á~É2`Ežâ“sÙçUøÆrªµØšÂª>šqµt¸þ¹äDßÐûü`oÍ…Ò#5£…`ñØ¢Š?²G‡ Vꌘ†Þ‡Nh‰Æy”UvS‹bê£ôyØc([ýÖ%ÈÖö`Ù¬ˆN¶îy^Ò£=šìé}¹]_€fnC˜ìÂ=ªNý¼©Õ÷ØE2ÃÒâøô˜âã%>S©njäE@fjzèC¯ºè¦ð2w¨؇à&&t&¶<Ð¥@=`;û¾æ¦Xh–mF©ê;LòCÍ¡N墬“ߪãñ…X­€â¹È×Û%„ëÇx7d(þ÷/­vòKrFW²ZÄš´aŸcî—r{M¤9Noä1ÞS½“ð)»¸£ò)þÉ^FXq¹ ™žj,¹ÊgeÐ|Ò|ðqò€j”"4‡èãëƒÁÖÇýc—ë¹”…lÅ«ýv»³p²øÒ·JÍëz‹ySI.\ ˆ ,T«ÿ¹ˆh‹|}ö1ßÚÏÃòcܵ¼‰'Ãu£xâ¡"äZÛ1á]kZöøšà~Sèï7•ã1¢ÝIkØÈñõl@ì¼JÄWVìKôx-ó¹t güiÔ"{ê=³ü(} ÿrX È–‘óG¿‰Å²x"Í)IqJâÄj3Òê\êG.~‰åâez¸Ó¾QP$é˜}#_GöèÀ»*®í¬e+¾íž4â¯Ó ß{¼·Y¡=¡—‰Y®x¦äü¯[CReLíoÙiÙ¾²u¿ÎÔ¡.qU–Ð «Í_m²Ã©_òx| °‰òÆéÃ0u•»L¸(¶€ùâ«d~£øŒ’XäÜYÒ—¡¶>·fÇA,¿Lÿ¾C`Ó•`#4Éi‰,H¹Þ?ùÝ@RãM„AéKI!‚D»€;&ΜþžgÖ—øîëI|ZÂïy—ØŠýç%ei)QÉ"þÚ p/¦_IÇ ôCu)ß„O[8>üê}N” 3Hc=Á&lKS\å¢&Äàa~Ë%Έ%£’ ¥…õíæÛõÞ ÏB4ƒHg`^ Ž&&ëbýƒîÛ_2ýy+çalLËüoŽáÝÔ‚_µ>ÓÙ{ˆÈ&Ú"Þ1žK)¦5’B™òõè·ü0ϦôÁ}$䂯%’‹8£d;J¤uxlpõº„)Šäq>ÞcÏ ÙŒ$Do}¦àb“â¦ËšÒ1ßh^|Ç7寔€úP«‚™»Üe'Öù+jóæû¥ µˆP$×ä¶M|¶Ù¤AHyéCQôîEÈmköÎ^ÌnÎ é1´A)m~‰ ^ËëÓáÐpòÞúk`ªhúp¿»@ãÜ8^A O {ž=|ìýa‚ñ›å}b¿æ¦§óÜ:㽂¥yÒäÊèže‘{‡¨‘•Ìûæówü`JBr5?žÅ‚ÙШ‘z®ÀÙ4¿mOÛ$}Ý‘ZÆiåÌBB¬:a…ÑÒ»wÛ†˜åé`îÁ“˜Þˆ-ò¼ÏZ /6óÛÔθfÕÂÔ;Nƒ÷Mò˜Õ2j]h.^N}A—X0ù:1)ðÆPïaZheœ(f³ ÃWÙQŠ #M¼‹PÛÈç6_ ÂGª:| e]†ß•1'"¾ùîF!ŽeÕÔ „øÏYàå§âÔgœwÀA+^¡¦™—ÌíÓÃ/z?}uuOílæ§o =ÐS•3+Ö§ø´-ÊÑ;ãì—ôböP‘Â|³§ÀÀ¦ìLišfÓø N`V=–´¤ƒû“ûêý'lõ4Âçc_€ÉÕÚM´KsN€mO¶{mì†)Ο®ê…A;Boºdúî[©|JZ<3Öîfh›BÛYÚè-VîûÛH¼¨ýI©iã:m…5æWÜYÖ.}Ý_Í;`@骇gÈ%}v'q¡Ò˜ .õîw!ù¹[|»¢vOس²N†kV/.¢zš‘׈Ÿ›Ÿ4˘O¦™:{’7¦dçô0ü¬ïy+ÆrAµ0Êh‰"Q{ÙëYÞ¡#Ï·M£Ú+)?ð€…¤¥ÇëòŸGÓ¯$6bj\w¹Ù3Tûk6¼Èë;pj×h—åZgmÛ2³‘梑‰'oÕiˆ ×¹Hò³ ²–[øâ§?ŠR¶Z¦žž”E¦ÌÌ1];aòK (Ú] ¦~ÕÿÎ÷€ô#Páö ‘‚QümódæÆ hÕ‹†„×Ù_jsa×*qš3@:ÏÁºNë|»£%¼j\K„R;G%GÓºÙH<™F*xÔÆŠéT¤Kr†!-<ñ>Ë[J+McY½…d¤aƒM¶ñ´Bîƒä0¦-Ë`ìö9Ûñ§ö®GêÅàpõêëøg†p‹¥æ¯Üß¾Áõ +ÂõJt]Åwý¤Gî˜Lü¨×—uÚ«îÏ6퓤o>Â!1øe2½¹m9î\JÖÊv!ûr5MâÇe}úû$G"11kôCv ÷tÒŽÄøÊqzTûn/g!ÐLÝʃåýχ,£iåÖå¦uŒãùÆcÆ.oËšGtW­šq^ö“J`°¶÷@sÒþ)õüV *ˆÆ[®ÇŒìkþZ6üã¢pG~ '–”›L½v`í;=ýXx˜›`»†v†k,q˃©ànxG{E³ç¬çóRîÌüÐCZ%1ÜáO[¨kª±}ÛÚ‘ª}J]£²ñâmH ö21:åå÷…à³{ *¸Çȹ'~ŸåÔõï÷|eªa$ÇM;½vŸÐ…},v¢}úc–¯Ý´Y/Êw„ùg=¥Û8ÚŽ&/~‹,s….“cÜ&!¡:z¹ +ï»ü¤hÑÇG~a™À+ç;8€Ý=í ¿>t,òKúi"†~ü­âêÐÿ4+»X¸YVOìÓVÕûK1D€Ë ¤±ÀÄ\7Ã<Ã:ŠÜ;š ísOË5áiLÌH–ÒaÎåòzKnÞÅ%Ú¼JÍTŽŒq‰­žº¦€ä-îÉÐ'Øía§QÛ–C#Ä„éWÓC¼™rj!XRÞ!]ŠbœK€òa–Cøfa¡Ƕ–}U‰/®¦À-—ËŒTD3ôH—DáÞ Óö80jÂË\ùJf|$§ãa¦:ùCå¦E¾q‡«f>œeÂôu¹ˆöˆbø<°òGøéùãOØp{N8í5Ä}ƒ3á&ù-—«ž£«@e¬„2A㦮ùƒ}ÖäJ±íáeàÖ¿ ¿©|8 a½šW€ý‘x†øfŠi Š×á91k‰aЧØÛ;ŽøÙªLºÊûd‰YÅÖo-?Í•Wkø×ŠW Fô$µÐº…ág•DkUÅYnìUG—€y­%Ûi÷ì;ÅB‰Xî÷ÍÝÏÜ'Д¢÷ﺙw  aÙG×cûC-”¹œ[^hkýo©mñ؇/$†NDæ-<÷ÔÖÐ 8ˆ-kW–JÇg¹ü³I¨où=v é1}Ѹ̃, Cô¬ÐuJQ&f¡%ônt±˜L„°5Üí/]fó¾QRž‚ß¹®o4Þ)Ñt>Ó:,PÏèZ)"àïîEíù­™*æÃÎS·Iq-'ÝG+LùBt3‘N©Nt$÷¶gH¬#æuëÙ–÷ç3Ñ—Ë£/)H•œ§Éoß®§‹ M2}®ÜUf¹æ¶_:D.J¼z­_‘k;³Îæ·¦|{6F$E‚Mq"¦'CÄM Š"Ⱦe¾qpˆù‰Öã5TUÄ@øœ“±ÄÈœ/fJ5Ox_(uâ«d%jCët4Àïªî.cŠ(Ua9zëÄ^Gê?Å2¦˜ƒ¤óµó+qϘø>íŒÊîݤ_raQÍRá7!šeÉkí‹øh¥¡/xÅ‚l[±~¸R$Y¡æ$¾÷£w¬/‰W”‡}Ø-ί;cvx Uèè’YèÜ?2 _Óê@€ qdU’¨Wn1°‚»Ž³·Û¨‹5f}êØÎ”›y‡•†5uù—Ö¹dž§‰‰ÕU´>~cÅk¹’¬ghx o ”†#$ "Q~Y_¬­lvmëPttâ0*‰{7,iŠødu9:Z5º›‰2ŒÎˆ;SÒÈùˆ=dw^"&fåñÕRshÐ… Œ¹ß§.ýnh©Áù´aä³ endstream endobj 1704 0 obj << /Length1 1177 /Length2 3288 /Length3 0 /Length 4039 /Filter /FlateDecode >> stream xÚmSy<”ëû¶e"KˆáìŒÙ†$ûØÇ–lÕ˜yå 3Ì’}I–lIÆžµT“,¥D¨l-DQJË‘Š²„,ÑwÔ9§ßé×çýã}žëºïû¹¯û¹ùXgucÉ´ ©ê(R°‡}hgÑVÝ RO_ É\#wÿH"ëX2H ° $@D&eFÂÓA"Õ™'B¢‘ñ Eðevøç“SRP:âG”\Ü”UUÕ~!(4 ø„ýÃf :B˜‹c`)hó4f K’™6c±¾8sDÝ” (ùQ©AúA¾8‰!(¾"HÕPf6kN$˜’7 Px7çg‘Añ`w§ŽëÒwšŒozë[[‡½¸¥¤VÙ¢^v‘¶Ïoo­'»;kâiIótÝ´I+‚KH8Aˆ “¼cqu½>ß,·Ò£9dçŽÌ4ñÜ’¦aw13;«—Üå÷šÞrN$‰ÆÀ—=&ß;pJJWŸ«áqxÿD½}5î³& ÚQŸs¨ç–òh\R.̺­i`EÑÚÖ4ýU¸¦Uèðð“.~혡DK^jý¬¤{¥®þ­ûmš«~­6ûn±¶«U¤”*N~Ñè‡m¼êQâãÏÊ„¿àÛ*.þð¸¶m Á(ž[²`¸¼«u@©‡OoDݘxxʧ.D6åexeq©œ8Í–ËòÕ›çË×ú5ûž¶Ž|¿ñN‹¿'rÅ“04êA2•d¿:Í!k^f²6Xç ӈб¿ŠŸçs @s9½ô?¤¼ãù…RÅ6a;ð¨_ÁA`=4$N òJ’5:“)¹‡¾Åß?Y–ß¾ö@Úµ€Åü#hêe× ÈÒ“+j29«Iûâhwõ’Ï*£«%1œÅ}Öy[ê/¥¡¿¦HÂ0†=ƒ¹4‚–zÜu›KK¸€û׃¡ú»ù†qYËM²Ër^9·ÞïCcÊÈñpôÅùd…ÔøS“¬jDžte˜x†d?Ïþ¹K_Æ1«/k~·¯Kš:|ó .BíƒØ=ÇF—]Áñ”ÝFY|¶U½r|äÒ^çïÅÕ0€:ÇÁ-Äü/Ã'$ŸiŸÞXŽï×ߣ޳Ü=‹q*}Ÿ®Åqç#†“ß³º7ùv²Dú£ëªw^‰ù®Ü¥ön ½{ñêýøe®,\G·ˆ G‚YNÆk̃RŒÜà75Š, /ñ›JÈ _~]ȧpí¸¢öqº¨ ¡ƒ´è¤”Еë cåhžÓÐbɽYí̤€àíŽG’»uf×u?7Û=bй(RœtC£z ÚÈ ¾jP×ç"Ä‚uédsl,|.ÿ…Xx¶kyØ1wŽpg~GeíÛžÖ ¶ÊîôS ²pÆ»ôƒ’Åñ)΃–ú° Ù½F±qýE˜ÜIêB‹æ¡KÉå4Y•L‹Š]ßFóPøÙ̯)æ’îo+ît*1Öglü„Ûexb-ÊöÕ9g¸ÄP í´9ƒ!…™4ô• pš}‘ñéì.°+ œóŒæ~¦ÅûGÅÙ RYã¯C¬;ô.}“e}W¾|HOècñÌ.‡ò°˜”m”äÌít3º¹ó9ôùÅGM5æm É’Ë].åÛnµ§ˆ¸ý¥°ù•—Î}þwæel}'eSŸÓbYM÷«ÀwÕ@ Ú^ä¹aòŒ}Å Æ»ï2ܸa¾ÿ¬]]ýFÕXʱ·ÔçU ¸üñª]Üâ¡u\,yyÈ++ïjuxȉ1‡ÅJ€i¬£Ü*îË@<¯×BVæ=×\_{›¾}qžad3la.ßøØöÔ¢ô.!n[šwp¥éµIF~iò'º¼On±I±Ý~#×ìô<û¶®é/Z Žþ;ݬøŒ‘Ã'#‰×ªéÖƒ¨Î¡ó`qBœZŠÇQCÜ<_Å b&»EÒëÙ ƒUí_ª±€y»À…kGn@!Ý"n­±±f¯Õ©Ulø†ý·F^XÛ©iô¥ˆ§©Ï#D„bÚžÙS pôh­Zã̄ވ}oN– !ˆÙ6œQ¨²¡¤¨âsŽºä%x ¹aû¨ã;(š§W9g£ŠftÇB‚TˆR¼RœãîÒ÷!îážÓ¬éë~ö\ļ㛳¢¨6»÷•»Ié.ãfÍ[Çã»¶­)c ½åf«s߯¨YЖ3á‹PŸš‹Ñž²ý±¹÷´p2•¤iÕ±ãTÃ<9/à«ôlTn™,nD’aZv†Ðï¶L*“¶\8ìà¹Æ‘u®Ówß-úH†„ZéqûÙᎠM> stream xÚ­ueTœÛ–-$¸Z·ÂÝÝÝ] (œ¢p‡à4H.Á%Xpw÷ànA‚‚ÿ­{3gg{¯¿²þŠú/`¨+ÈÞ ˆÂÆþRÓúRÛìˆÂògWä­œl¬Û-ÝœÿÓç‚ü5 º?;CÿBÂÌÒÉÑÞ ` ²BaQv‚¾”ÐýïTþûDþ7Hüoøß"ïÿŸ¸ÿÔè¿]âÿßûüOhi7{{e3‡—øû¼<2fŽ€—w øóи9ü_)f`{¯ÿWÒ?£u@³w²·ü§Ojö21GëYX¬Á®Ò`O¥*ja°2³™×_v-GKÄìzÑõ¯‘˜ÙXYÿáÓ´[Ø9þ€ëoÈÑòŸô_¤ú‹<‹¸‚¤ªœãÿð¸þ¨ú²PM/çnÿÑŠ’“åþÀˆ‹;y|˜Ù¸yÌœl/wï…7«ßÿPò/ ¶•Ì °'Àà¥oV¶¿ºÿß¿NFÿ€‘r´p²ü³6P3GË—Mû/÷…ò"ð_—ÿ¥ëÿ<ÿµó 'ÈeiÞÉBà½mzæGh5ANÿ¨¤Aw'ÛëþPçâ:Í‚¼ÀJ§Ž€ôˆ ¾/¦U¡Àúqþ§f¯¹#çÇy†ÝÁN|{ÚŽTÐ\?Jú®¼7«4­<Œ»Á,ÆÅèub|Îf×áô¹Yµw7GÕÔ‹HÇ[9 Hg·ô”îy¸T7Îþiµñxß°êa°«óŽi’noh{‡úû:.à»vˆ?Å#S ˜ø§Q$C½L!WuOð÷î<Î0ZCnÎúòKÀDˆ– %«ŠU†€L–Æ ]àæ\UåÍO¥í`£q‡›"I5·ªƒé¸ÆÞÞ9R˜º„ ŠRø{­„ÎÛØ(\øÐÞ Ê$+K5¼`YãSdãÕ„tûÉç)#Y¯ÆÞêÛ™iKI"Xàm9SÃi­”k„û›® o"4!Ûõ¨Õ ¹Û±cTxiÖñà÷ú ŒÑ“~ÜUbƒoVBÕº jàÈÆÉ‚>‘ÚÌËh†P“'«ŽAç´òa‡Œ¢«ºkµ†‹ÕìÌD·Ã-4N¿9-*|‰gÞS,›"˜×ay0zðé|î&˜ÄkñÄLü´Øj–@oJšzZÂáñÁ–XH„¡r»LD%ÚÔ!®±Ìrèúɹ8 âZ‚ÏË„ãF)p9 ÖÉq5+XO¶,Ô€ãÑà¾öõ|Òãóv7a‡1þz¥_"³éÏqA#í4Ö×Ïi6Pùñâ]'ÔRáNÄÅÀsOøöèCìëðó%Õš†Ö*O™q˜æ%~Jk믌xL]6uÍ p0ûð€Ÿ\·Ø»W•TœO-F€„KSçQÏ„oì\Ôë~é}Øyãö´¸Àý.êÁ=+ºTܲ¥&¦Zi©Uµ‰Ì ·÷ 6öÛÛe|¼›°¯-!/Ûœ|ÙYF4j.Ÿ…èëqgtÁ7ĹI—Úç|gS©HUÎ,,B * !ù[oÙ“%fêo¯á»}_ÁíÌ4*£å3*øõœB|öwõ¾‚"ïø×Ä„ŸŠÀ©” ±Ë»)H9Gæëãc-8%ü+óL…„=×A&²÷¡{º³Ø!¹ЇE,—rÉh%jçxæ|³¨µ›¤:# yÄbò…Ù“6|îÉ ­l,É?¾ÀB~Ÿº³~èÍmøqŸPÛÅèØÆôXs•°Ð½Ÿõ"+T÷Rã”·²Ì%÷N׆š+ÚÚ»Þ“{`é”%¬½¾¯¾ÛÚÕ{9ùÀþ•Iay~së¢žŠ‹âè–ñÒSb4v=Åuö?VH»Õ)”“U"¶(·:¥Ë|çe287µuêÉ›ªH> j„p›Ú`g½ ÃÁ`~~ŠO¹P°ÏY¹¨Œ–\[õýpÏ~¢ÎÅù>:²0r ¼ÐèM ÚH“+]Y®ïà‘®Çòp¾Öï%åN鞦[}7Ç~¢T1£­¾.E¥Þl ?°C•Ö6GM X§’‘ÕJ<<ªT·8špM’Ð.Ñ®V,ø6pî«è¡tÅk]1:ÀçÒ\¶ªmµ9ÉÚÁ!÷™kjG_ÖxÕŠ×å'ñõÁ=ß¹óØM-ûC1ߪøsß ôi-Yí‹çâ+^¤{4cÝ}^¥iz…ýÎ%?Ú‹2ÅoŠÌ‘r¯à âtˆ³ý)d†•€hÙ ˆ§OÇéÌ!d3€Œ!%·£ñá¢~Ò{’Û"è¿C‰]·7Z–øTð#¢î¦í’øù+t;ý1s}]–ØÅ³rþ´òYa·^ŽÖ&g9°Š‡£iŸ<ÈÔ‰´ûS€‘[^ Íp}_órÃã­§uò»(ÓŸ®é2¶ÄýÛŸÚ­w1ìÆ|(<  »Ðã²ÎUÙÄŠaHì©§”ö«ùbƒ$¢Ýgq5Ù(Féy“ƒ‰‹L©öD-hÐKbG^¿Ø Ëå÷׿½"v¬°½Å÷D¼J£PÁ`ž>_¥$¹þð8Ú0÷õ'ÿÛ¶Þ2{ðŽvŒœU[쉑X˜ÚvW£ÝÏC—²¨±ˆ6ÂnžaÉ@ê_{¦H¬©À®J5£»89ž-übÂ]ŒùÔ烇Ÿ œÎѼÅaÕÐhFÊ wã¢e¥ó þ‡ùÖ é4lCÁ1—å‚[îÑš&[ uÔ’y÷Mæ.ß­¬ÚAŸ›%\Bµ‡°S‡‰"ï­7Ì«ö”-Œ =Ð7(Š~c¨ Ÿë7RæÖ’;"µ1e™7n5.è²f 2Óp‹ß] à¿®zJÊѾÃg,iïdoÊ^kEJkö£¨¨<¥dæ|v¯0]2Ò0w±sã«€z“ŸL—+E1\åéÁyLÒ¬eöy˜—šÉuì²¹,³J ¡É¹Ëé4ŸÿM™zëKÙ+Ê}X4μh_Ú2§éÝ¿±b!°@~ˆR®yKÆù-€hÒâãYþ%¢þzÕWuÓÃîªê¤ £×Š"ãój>YÄâKàƒMO‹¦H„vðäsÎM{tN©å/,dù\„²E÷"#ŒaA#¾ÅQ¹”mòS…Ø |áÑ <7ñWêïéZ[eý¼röÛùßÓ [펲Ýâ׆îààðñ0©½AS¶³?”êC)Á÷†UêS —±µHÙ‘d93MõŸöIÑ„ÃBv“»«J²&ýÉdßÒ‹ˆ6”±UIÓfRÇh”¶ýx7ë”uCðlÕu‡£Ìm{Îk ”AâxÙI¾ãë¡ïö:ŠMºOü¨à”Kà[8ñDeÆW‰YÅr×e=øƒºÔ}¹Ê€ù‹’PºñïTkÚ^ñ‰v¬_ù_m¨Ì†•+` 闦˜Äó;°ÖI¤ùIá$gö‹|x£{½Žî’ÎÁim³ëwoßRLdòxmкâ9Õ*w#Ç‹ò®u]„‘®Â¦‡(£@OМê :,]ó{c‡ëg\«ƒuevÝ@nOÛzò¨ÒWD˜nàØusäĺÄ5UÌÂ0m`"fJO2V†…°[êjY¥„—Ù4·X¾ë‚Ód‹Â¿Ú¢,wŸu0Ýñg¾çÉJ²Ç~³;\¢®hÜïoZ÷Ää"—…dÝ$)ö$Jµð€P1­‘iM%äÄ VæH{¤Ð|MFþ žå;^"µU‰þz ‹Ç ð˜ׇlÜ}ýx„ šéóÑÞÓ›V‹Ò°”߱ж5X,º´~‡Ü»gÓ ¢G®¤{À­¯{ PJ—Š´øèœ\µþz­já6µÙï|Óâ°1íò†ªSöÞý½tSyµÈ)·)_n[$Ã)¼°iú–HP‡êËWê1t¶— ü}¯9uêZ7°—¸ì¹—Z‰²ŽÊØ¢SÍ3ЩQµ¡VTüzpÂ,Y»ü“^uãÑ!W5gë0yä´šL|% —X¥Ùp`V¤ŒçTHEÜ7‚´–ÞRJw¼Ã –~Pe½Ëòèà@¨dyM“U_¨DÎ_öU›tðÕÙÛnX²Ïµ´÷g®VˆçûÙ…¯=Îj|5º&Û.ˆ†«)ÞZ’¤ï»”Ÿ<‰ÐiÈ‘ÜØî‡ÆN„â‹Ä2VSobðÄÝñ¬Ÿ}Nñ~©û €„¾Ê‰lÇ!0’ËK;ðq¯ÜÎotJŒ9$ÆÄX³#K˜:ùüºì¼c–ë,×nU©¬Û3“ {­#’ó8ËLZÜâ€múµŽè×Ï– ]áߛϼÚëîQ¾A(4iº 09R•³#1¿1S7fy£¥šÛ¼©%jœÊ@­S{@çÓŠ×|vÆôk Í=dÇߌh,Š7`ÇÖMd›/yÜä OŸ†øVM¬/øé}RŸ*¬ƒªÒª| ½dÞ͸_GùÁÒù)¾Õp´ð¦)Äô·vZˆãÖçCùµš›´EÛJõ°ÏG¹FÚð°ùÔ5~]ŸsÆäˆ ùŠd6HŠpù ½ éöäLWÒðÆ %ìmŸ±°§ô‹ôÐ Ÿ·2~îé´¶‹NÚ=x@ëÍ¥è‰ÿH«î-_ÎßU(oj.\ËyÄÐGÛ—ŠŠq¡BétO¤=¦«Xÿ=Eè¬x"Ö§ µTÑ ÃÍ ¶-Ç-iÐ_÷d§âTšÏjI#oƒËäA-ý 2ÅEJ}—b>¾H±#ê«..AÔH)Xö´u  ýbp!ä­`9¤«{/Öðõ)1ŸfjhÕÝiÞˆ?kV•ÿê‚33½®VW• ±« LJõ]5}ž¯¦²}bÝ`Š6¼Ÿ0;%¢¹Æ82]„ ª\Œ•þko®kèXpÖUýÒ›Tnúrêß­a0·kƽ–¹þ³7Í|–Ähµípeqù'É)z?Ó™ã~—Rþ˜Ý/ãâíOD¾uw„S™Ü¨š‹ÄZ²wèàŒ‹”]•‹Sì€êaxš¶Ï„¸ÇË^ÆzqÝ&"¡,é ©Ã ØÍ=RÉJÉTºb¥ÐTa;­7ÏÜ2db æÝ|¤Ü /øò˜ñ9.ÆÏIÎD¢–O×HŸÈÞ«òtûH®y½ïXjÉ%ÖQè¼¾xÕK̃iyæØOÏH¬Lp*ez‡¶í/¤Í¢¨3Ïf/v“ 0˜gvÑë« E1µM@²öì4‹Ú”®ìl_x}x9‡4¯>û,Ș Ã7H…÷4Ü»æoAÀ½ík'èiÚ8Ñ]g¨‡ëãHm¯,ìöOFĨAÏi {È#]¯d%­FWÎ(¢é°¶úDpòc¾úž”R™…$ÈÞ¯-|3R%íyÓcÔá¹ì»4!loó ¹»ƒÑܽ“ç f¥«rÁ·)õ¶AVÀü™Ï”¬Aos¦rù´r‰û[ªž­ˆ' WW™cß»áÒD@{¹x@Q& 3õvèã¶àY_PÅì<­ÇvàÃâ±ÇNÓ€©ã@±~&Sô&bi ³æn'{[u}‚íu|×Mï•@Ó+õà܉¤ŠO»ûd­ÓŒ‹œ9ìU³ÍO¨žuÇ¡QIŒ4ãÚ,#ó£S¢¼ï;(%”û ÜvN°ûíÃoX×.¯ň%uÀ8ˆ°O’ ­Êý$ÎQ$/ GÙT¿[Bo/Oˆzb“™qD/$£Ð  Ý³h£òÄ•Ø_ÉéÍjw}8¿³mü ž%ŽyçÕ›!ÛÏJ–óÄ« 6w"̰‘¬ô'uEÈNãD‰«(dñxT ‘Ø+6XÖâ?&äˆ*²Ã¸j>r¼ö®Œc—'³ÆÙ„Ÿzÿ]´»<€•¥Ñs‚+HÕã·e¾Œ'á)u!Wö­x÷‘7ªü±ŽÓ-ÓV¡@Ç—wp–aaûÉNYó;óùpj ÍyÝON&'–và茀K#NA—F>¥×;þì‘/Ú{=,6Ÿ¦—ÞäÂÂè®#R47ͬ4lܱ+¢ñâæ`PwÒ&n©¯”¼v˜DÄZvá0ËÎÕãóKG­ÌìŠÌŸPïGmô¢q·] ¼¡p¨ÕluÈsa]? ^¬ "ä:mcœH´´K޵Àíe°î+vŽ0]ø`:`ªârŸhÑ_ Rû“Îе)J‡ü,Hª4kÉ^ÿêCùˆÖ`C>Sl¤¬SO0€É: O+Ôˆ'Òjóõ¯-šú&à;¼éN¯›Eƒ ×xLE¬eE1y©˜«[ˆ€U˜¸*N*z埼îÕ^ ãš Ë)wT1@/%ÂK5Oþ»Éä;‚·U¸úH³7.ZЊš£¦2\'Ïç¦4“Õ÷‘õó£B…I, *c_(ïøÚà»4øuEpJJ™^â~â`ÜÅiŸ:ôâÜ¡õ E>JŽN+yÈÄ?F÷]f··Cþ"Yrc=hžGãÈKŽ ˜ û‘ïÚ"þ#AVP7vÝ1m÷¢æu\7Þ¸Ks`Ø6„‘NKÝŠaÏê–ºø‹,ë# Á Æ:’²·p-^—›ós—Þ|ÊÏdŸ÷js^jø€£„I¼V#Mzª«NšþþM ßX›¨}8!a€~Çu¿õ^±ð(qŠ»‹SKuT†=˜cµÞ® ðõ²Ä\¯ªdÅ«!É÷ªÖ>G_Fç³d¨×püçq =z²X‚àXS3ñZÉ=ÛP @³{HvòY[1âOô È·™lÇ$ʾA?ĘúÔó3ƒ)ÏÙ%‘wfZß²‰¸/îø´ÖZ¾¾qÐèPB.*à»HÚ¹ŒÓŸüø6‹×›ÍÝû©ý€ñù7g§Öª—Ú“š;š¢1þû¹£: ?™œ^ulbòÁé.c‰ÿ!Cü#J±¹\x¥|^‡ÄÜùœ²K€p»[š‰?ÛÛ¶J›:Ä–©`=¤tmE¬ž“šH냽ıÁ'˜b&?þ 1ƒTrõ —.J¿gQ³Å:såã>ß ÛÒÒî@éU¶Ÿ„›Wnסµ{xíß´ *,QS¹25bsï0Z^¬ÅûKŠÞD!­Û|%&ÁØX<îÿì¬Þ\Ãq|1ÿ,Bš ë dùý„ݤæ4® Mȯ¢·Jˆ8•ˆ‰|x™ÈÆìEþe†æñÊt¦ÆëœEkË_ÖÉ\¡=Yá-²È2 ª|ì,{‘4G ±'ÓØE{ÅËfâÂBuñXÊîåw…ÿ4{™¸ÑJ”íå1:‘Ü}¸µP&,AäQű<8¾æ¯ê§Ø1倪—"­òûgŸ°ÁñÁ§0ä™å`=Øf$ÙŠÑyp33š®›W kûæ¨a\ž€a.ùUŽÓÙWZwè1jíÃ7óä_š£%nœã&ß“ÇàŸÈD*v‚éEÍÝDžÊ7ÄÝä¡ý)Ó£{O.ßöкsäY†  å|ÕŒv²xv‡+ÄÒ_¤LŽÍ×À cg<:aH›Ëî¸ r¢0 _–?+}¢È4 '<=  h¢‚•5)n<8f;\|³‘xÂéÂ+IN`›FŠJ¸{ëÈj૨Gˆ‰ý£ÃÇûHsþ­ ¼Ñ{‘rT*% |Ó~PœW¥3—K ÁV±˜óéÞ“²#†!t*ZFðS¿ž…ð땪®WŽW™íÊç|”löÕ¬Ú´>egDZÉ‚”(bbîol=ÜÁ~Xy³r&JÖIÕ1¾~Îë¾ÆG\¢ŠÕµ>h1y4Ÿ‹g7buYwNÌc>DgÓb‹®‚Ö?«Ú5k.ÅÆÉ´sç4\{»û´«èð°õ C!z8%rïB§ÎA„ßXÞ¬<ö/üVQÛÉm$qÛ)’¦¡Á§Š?‘}—Ø{ò§ø@8Û£*Ø.g–ŸoÀwœš7a"¦¿däí_톷°AHv:{b”hÔõ8ŽXØQÀ‹>Û4a}*”g*ñËtnN¶f¨9]tüaYˆSN³#ÅN»d¯˜,¡>?ƒÃ×IAaDÔåqÉÔ00å8Ï߬TŽ…šmNlêQ½rH‰§Yh¥gÏcÍ*ng¥@:à›f{5Þç¥û<†Dã©‚RÍk”\ž[䀨(ÆxXXHóÈ·n+oq^Yü$T©7|gÔ!9: ÈhãoŒî|oËuÒ(H¦ÌTÃUÇËlk xøj•ˆÐÅ™·¨bŽÛíÓtê(KjÛÈãñã*~åí£".aŸMZ¼1w¥s$T‚hwÑÎ|gât{oÎ_u¤§£04¶ WJkÃ!Çy¢SŠ:®ÅÚ ~öClÙÁ~>åÂï«.ñ8 ½5\Zu¦‚•Z>¦Š’}ß6ÆÛÝ3pLR“´m8¤—½ÈÛj!†Zæ»ñ阩¹ˆåW/Ð<Çm™''ž€ùü%÷ÚiËiÒ€ý¶Uï„m­!Ô§ŸŽhDiˆ£´îV+#:×\GÔ&e]™£Z<› +˜D½¬JmÛ”‡9Ë'å†Åo\ —}Ê~y½#efôeFwÇÝÖ˜Ù ×kKa2h¨¿<ŸëàÁÊR]qËÀÚå÷4x1Å Ó"éàåïZ˜pv'gÍ‚oqCΖÊU(c©Ëã¼ü°¾E¢Ï$Å oMîÏâBxÄjÔ’¥ØY0»9Ìå;~>ƒ»­ãdrh R>í…[¦sþRÈÆýÎÄJ¡ë/Ù"Gß›üý(ŸlŠwÖÌ6õáUkà:è!—hªþªë­«¡… BÉ ÝÛOãõ–mûÉœ@j(¥˜ “[÷«°¶Âk¾÷ûNTmûJtÕ¥î8Q-_h•k¬¿¨!Ÿ §K/öyÐí`ëÞ²šZ gÀ bCÓRÔ†ÙÁ@¡Î”3䘃zWCí\Ÿë3X¥u¡1jÕÓ\‚6zíͳ@‡°Í‘Œ›=¡Íb­Ó(°ìû³û™]»FÝ™p5UH˵Ìg SÜž(Sá;*šgºo÷$Pi’š˜ZwR•Ý8ñGV?Á×Z üisJd¶Ñ\;Æ“»ï„ލai?ÃêYp`$ÖjQ 2Z)ÒÙ -zÏϞ㣈‘0t*p¤_u3ý´ó8˜ ¾ë·îDѾ_—Z¹ÐP¼‡l¬ÇA.”ã!9  – ‚¼´ÈÏÅl“ÖÚ—ØÔ•)Ù%Yµ!2m(ae'¾Ì›MfµôY$ÁÉËo=SSÜFóC^ƒÒ¾µÐ·6ÕÛùloøQFäÖɱÐo­I¿îmŽ9“|/y™…ü§vù6ú\‰`‹ x±½Kxᦇòg«X(Ûî“Ý™8("³c ´( ý%²tÛÓ’o}}-9 9ªgµ¿olw1_™ç¤Ùž‰0Ú1›…óü|Œ÷˜¬^ ‡ÛëV b'dD % RÙe­‚KFÐ<Ö}äyùoÞêg½IìðÕK;=z$MЖû¢f]þ?:gö endstream endobj 1708 0 obj << /Length1 1630 /Length2 19645 /Length3 0 /Length 20499 /Filter /FlateDecode >> stream xÚ¬·ctem·&WX±µcÛ¶mTœì˜;¶m³*NŶm;³b'ç«ç}ûôéq¾î?ÝçÇcÝ×Ä5ï9Ö¢ QVc1s0J:Ø»0°02ó­ìL\UìxäT®€¿rx 1ÐØÅÊÁ^ÜØÈ ÐšĦVV <@ÌÁÑdeaé ÖPÕ¢¡££ÿOÉ?&ÏÿÐüõt¶²°Pþ}qÚ:8Úí]þBü_;ªK ÀÜÊSRÖ‘Q”PK)j¤€ö@±-@ÙÕÄÖÊ oe ´wÒÌ@Û¦öfVÿ”æÌøKÄ` pvšZýuz˜ÿQÑ ;+gç¿ï+g€ÈØÞåo\Vö¦¶®fÿ$ðWnîð¯„A-ìþêþ‚);8»8›‚¬]£*‹Kþ;OKc—b;[ýUÌÿZš9˜ºþSÒ¿taþj]Œ­ì.@—b™fVÎŽ¶ÆžcÿsYý+ Wg+{‹ÿÌ€ZƒÌlÎÎaþbÿÓÿ¬ð¿Toìèhëù/o‡YýϬ\œ¶æŒð,¬cšºümaeÏôÏ¬ÈØ›;X˜ÿ-7suüô¯Qÿ334“06s°·õ˜Íá™\þ†Pÿß±ÌøßGòÅÿ-ÿ·ÐûÿFîåè¹Äÿ¯÷ù¿BKºÚÚ*Ûý€ïÀß%clø»gò€­1èÿçclgeëùòú¯ÖZÀ§û“q1þÛ{‹¿Ô032ÿ[hå,iå4S¶r1µ˜ÛþíÙ¿äöf@­•=ð/·ÿj+€…™ù¿èÔ-­Lmìÿ!ãß* ½Ù­à/]ÿÊŸIILCSZ–î³`ÿe¨üw\Ô=ÿæö?ªQp0ûŸ‡`DE<Þ ,œÜVn–¿÷ïoB<¬ì¾ÿ›ÿbùϳ‚± ÈÊðíoÝÌ,ÿªþ<ÿyÒÿ/0ö¦fÿŒŽš‹±½ÙßiûŸ‚Ô¦® Ð_’ÿµþVýçÍ=è4…_[v0å ±ÎÈÎt©ÅΞÿÖßË9êø³A½¨  Ú¡Ç?#b‡§Âè­&”±qš÷£ÍséÔñý@–öp´Ë–ª' x™OàKFÓW€ºIÙÁEwÄdð)óL+ÆûjQ~J—“YópwREÕ ä †pºƒ {õ‡&€Ì­ ƒüÑñ«Ÿiz}t=URfdÚCþÒõÅòßÅ«8ìPìÃJ C=êœ5QÝ<‚1X ”ÙDÀ”Í<÷Ú(âÈw"EZOU¤èÐQlVàfª8†!?öT„a ÌòùAµÖ\<&)1äU=‹\²Û³9Ú{Xa±ïƈxÞÆ¯[öYÓÁ ž«£0î.öåKØ VAãƒ)êÿ8‘Õ»Ão=? ¿Ý+Ë] Ó]Tl£ûºÕ›a «Ç͈UÎ`?ÀÇãpbÆB¾¡í¿·°jqrµ%Ó¼)þÎV+Wt:uØð{áOïwM]3´Jæ·¸Àî’2He­lˆéc½8RãŸ~ÎÜŒÚÕX`bÅ[o?¥¾–Ð%ìP"—?”yÔkiq¼¦i*­·‹r|8¦*’«X5X¸8ù ®7Úß…_â_ܥβ›§Àið{Ù0YÖ7N}ëå³ !Æ"­ ègqñV£Ùfk9è8l“3üÖŒ¹3tûufÃE…œ÷¹Ø,&¯ÎÕ* 9Z ã¾g6ô×¹Z5ˆïîö‚ß—y­9ÁK¨XrjIÈÂKß1éê,ÄĈ‘F~o)’Oz|Ìg›“>|(¢«GÜæõ, uA‡fØ!êK¸L ·Hy‡¿Œ—RžÝHu­‰ØvêËœ‹¢/Š’TKã/5ˆÿ"¯L(f©³xÃé*žDÐXÁ7 Uˆú,²¢^¨œ«²š¥øGèÅ?—or©ž}g­%ÒÚÈ“Â5ˆk¶‹/©2ͪ.ã&÷:L)¤,¹ÇçÖœŸ'ðuèà} ¸a%{šcøí ^w FŒ¯·ðE0mSöØ‚Ôèí5w¨Çwp#…€ö›¤fù¨‡%ØN+þ×Áw' [÷³½Ù¬Ý §•áÀÑ^M½Ïlç•LÑÞÖíÐ dòl´©'þ“¼ÐEˆÒ}ªÙÂÇ-ãæ»Ö‚É(ðœò¾GU\Š.¥UL%3ägY?i¡¬.Ôˆúíû°›ö÷§ª3 :??”r-¿…%pøSé/p/ÄfJ‡-ãìž:Y~ޱS|…¼6 fÈq<2À4>—Îé»Ó,#écãt ëNq‹ˆÂQ® ?éSTq»-Â&Øä6CÆ/yF[Éóä‚u=êIf¶Š‰aõn³‹¼Ì$MÅÌ[€õ@ËEE\©Éß/„£’¼t-2† šPC~Ë5WzÐ>^GäL=i°Gý¸àûYŒáÛ<…‘^nǰ<‡°æaèR²b»ôbðào~ cDVÙ‚·¡ð7= lÜ6оEžÜ4íýÐÓ¥E¶ Õfç ÷˜@- €±4@j«Vw¦ÇA‘¹Îàiã¨ûS&~³ØRüEN›bRö|B.Ξ"úÓQÝM!Ãì·äM8$+‘¾SLñÞ¬7®–çcÞòOT<Ê¢W¤L–íò>‘C{°;FUJèšÚ—ÏKŸ¾wžú]ØbžØgdwë_÷d>„ÒU³è¿æ,îu&P¬uÅÂdRL<‚±=¹yÛ«¼ù ›ÖÛœIrq93"7A’ç©»\àþ=¡÷0J·>ëJ‰ØÝäQ±º@RƒÆ`çØ"ÍŒ"ꋚRáÐ2žT“0Ýò °3ýa*Kž¦tn{híyÔN‰eû¯F¥¶i¡¸­ ÐKí~LU>M`:êbÌæ1xÞîé&í5¸H“xÕ°äAŠ`×dC.»½ØûœÊ{JM‹UŽx­kBÈk8]$4Ïæ'üË$ç¬/P%‰ÕØß —9EÌŸ¥°š¨Vg;ßÌIóÂÖOH2‡)¬¾#ô”míØ4ä‚´E`1 ®pƒ§Ì¿‰•À•bÖ¼ãÎnX™–ê°ÀRC4²ø ]öÄhªïôiÌ\í”/£ív'âî!7ѳs]Yøs5É„ŒuõÊw¯"8`ˆN…¹Õþ—žGCÿ6uð†yõ8aUr/ɇֱöÃò}h؇‚[!ÎûG¡çÞ ‘ wÕÞËhøúu”Xñf§Vº§ñ¸Xщ×Jöl—¿4:˜q‰6ž3Ž ÓGÀ’£(,7Ùþùº©js—ºo¶M{EÊO;´ªäÏÌg1AÁáöÛ™@Ë™fy9Ì gÏI´\[lãm}ßA{¸´Cí ŒšZ2h»¥\¹«–¤Á¡¼Ôeûl{Š'’¶Ì&ë\,v ÷~­SØM¥þ˜Ð÷–6å Pz“À©“è¤@Y·¬h‹ßï°ÓÂD)¸7<,?Ó,zÿµB¤ñ/„º Hc3K¸çìZˆ-Úíû…¢kœ…p˜ëKXp¤å·".½Áöu ò’À¾•ñßH0T]º×AaC?(…Ç·°­›sâú¦ê~aňÌúm¬‰a¦:kZdô>TÊp}ú‘µEž`èÛ²Þ»VûÌ’u _ãU½Xª—œž"qÕü$BÍæ'ˆè½I¡¥Š9W˜OŠ"ÐÂ'õ¿€&Š´×?(tœJ2âØÃ`×ß%ã LÑLvø!ôG~…}]æž³b^Á$ñû·Góî /Au#Ÿö7u†ÿp ĉÐì&¥(e¬Nø™ôªˆd>Ž(kV £HÃÔÒ´¬CûàpÅ/“ˆÏn‰þ®_v”²ÏÛ*ºÀ^Q?-Ÿæ¦‹Q}8Eäþ¶’h@.Ë‘ñ^Dœ,WÂíÝÙœŒ0Æ¡ég“_N1%a Þ•t¢h9ãÿHoò^Œãt ÿÇàC>TñÓ¡ÿ¦À‰lÐݶ[´BI¹y¿½èÒ–rìwm…ïTZ®Àny¦¹ã¤o,ý&*?öëøDlü]Û”ÄMò6ÓïaUjxQM4eÔ€Ožw“S+!‰¾lÁ§¥ßÔJ,´¿ÓûŽÏò§Äáúáw,n|ó¦DŽ( výüžmq,¾F>æ§¥êVã÷,úQ¸¼Yíò„43 ]ÿ“ö!+üm=Rmt•Q¥S@’“Ž7ð ‘§ä*Äêñiï¶¾ªL%‚èÃ0Ä®qææ¾¹vÅ9"Fh»ÍO”°³@ҌĒÈ.‹"ÝåÝc(Àø`$n ©Þ˜Œúb \¸ó•úTTQVåÊ‚Üy ¢ûs¹§¢VÆ£GñÝ çÛÝBVJm=_)†d®™á:(\Åćšã»9zz;]Ys³RøOçȼ,룃 f gpt½˜ŒJÙè'—^+ö´­Gs&^SñÕʦb4‹º@þ„xNWHDy6½‘'Ê jqá\€6aFÕµLÕ?†ß$¯š¼äë_lài—ëÔ[Æ ”ЂâOÞFØéAȰkéðÌp«ÜV4‹t¸R×Z@ ßËËÝÄA YJ6¸çŒïQ“2Ð'±‡ëÒÇ|OPéQþ¢’È9Nìz?‚*aqêEù. ÇØË/D?Ž­!+²ÛûÁea—†Ïn·*ÉÂj}‰Éb\øþ<çlMä,™DLUD”<¹å™N¬vZå:E¥6õ²àF¬ÍÜ„œ,¶žT«0œ³;+Jcx¼0zÆAr¡U,«ÑæÏ´âÍÇÏS-×–E^ä$îÖ°võèÔŸ5 ÷§^*•‘üNêOHOFêŠCn}%úO M÷‘Ì<7³(Á­ÜY(æEÛº†æ¤šUµmB„é“<µåñUŽì*„›°\›È·VqÏLêÆ_î^1s¶Ï*Ê B\¼5˜¨ê?­&´åé!L!b̈ðöÈÉôÖ±W³xâkÄ)„#×¥¤t‰û©w0‰Éå ô0D"Ø¥í¥å…-T=âË’9×~–ÝÔœw…ßcF óÚôc’W¬|±¯(9ůFÎ4¼ }æ¦æ7ú™¿½Ý«VÊÁ¬R=ËB³}ÔúÍ£=‡aQu1½ô}ÛÞÃsã‚“•¿ÕÓªVR߬ÍFÍèKYh¨ú½E±@ t´F;jç±Qp”4@â?+¾;IÚˆ} ³ošRúb¯ ú6P} ÒüýTñûíÁ‹{?ö±ÉC@3AWß=%A±Í€¶”CÙd‡´Nç$U#¢€êEŸ•i!XÇî†t… WÕºX-"‹aÿ«R+š¶nŽòFäÃô „ óÕFl»vµ'vMñ]úP°¹¦mknG?Õž_X[:•ר*œóˆÿV?+Ѭå´×®êÉã*þaß¦Ë £“Ž(} ¶¿…DoµØ„«’ÿˆ6¢ÇÖ;vò‹ü=ݪ<¯Ãþõƒ Aï!Á!³ß©ù°ícYÖÄEÍq.›ÙÁó³zbgSsr§ç~‹>ìÄBã7Zªî~ ŸËüV¦®âþ¬ÎYè;÷; õø¢Š¼<ÌÇAV0ñé-gÜö7%Wt6ãHeá6µùsÍpÛ¦m«S·¤_àŰýŸŽi»¾{xPMÂH9ÔÆð¥‹Ñž_×å–f`ͬÈj—J=Rmþ¤ Ó ‰(ñ8¬%îÛã,"2§µaiͤó‘Õ·D¸h.Ê*a!^ûø*¿*l(²Š®Ub#À IQGªE ¥m²s°þ–S_6[f©»È;úœ[¥?˜ á`L¿þÁï;}¡µ+£ø­´ÉçÔ5}âðpEÑŽhñzê¡• 3–¸s)Õ-NRf`q|6Á)ðiý8þì+x“>›×¦æâË€×®—âek P Ñ¿¼pJ/~H²ØÂ:«ù½újú´i›;>Â\¹pÏñ§Óa.® OÚM^–Í7ÍKжæP¼ï¤Â"1ÃTÈê¶·Ücö˜è˜-ÔúéÔ1HÕÏg-D.LÄr±öî˜x’ǵ*x—¶¡l"¤x=­æn}ÛQ^®kðMó˜Ôä9QÊøá»pÇ£¡«3“ܯo™ö<„ÖDI³±äyË –÷ç|<ÿ×S{»,˜y9â´óþeÛ'ñÆ„&.M ÍwœõS 3!Yr\ãtõ)àü`A˜­ñsp"°þ=cAºq‘ø¬†–HnÌ_=}Ë„ ûk¿kúXœíúÕe޵7Š Ÿõ'“o§M~ýœµ2M÷¼›¦>üŸB7bRÊ·–T…Üelˆ‡²À D½p[jàwiH­͵@[6ë·Ÿ)5ÝCB*¯Ûªc±‡Lã‡î#Wð  bÇžig%Â;øP.Ù±:ÞXÁÝ I¥(±yJÊ h4Ž:N3C5´Õ„&‚€y¹MŽÊ¥³0w0ÍŠ¨nƒu†ÆZüöQ’´öÎ95O: W¢€¸=„7›y&¶C‚¼.uS—ˆ¹Å¥Ï ΀•´‹ç“ÎßÛÔ<ß¹lgBÕ ´û‹ Ö E3ìääE•8݇ÈGþj4X•2­B{ù1Tn¼üc²•Lõ‰äùñ¢½¥ç3Ä=#³ÓÄ…;eóÈÖZ[¿± Bhófn²e#HtxöÆ,Vƒèd‡~s±zB³£a¼üYKÙŒ ‚Ýç÷åcGÉý«}›æsŠÖíüÙ#8°¹î@X|ó¢w~r·lÒ–œõ8þ^wPŠ©K'/÷zE„ß_p;¯‡?±j†§Þ-=`iû‡1#Ô>VQ‰Nˆ›^×µû޳آ½ÁM4è—GCļ—Ý9Ê>al°É‚¶=IŽÆ¹"y×ÛŠw²A!ë|³Fzhج6º0´æÜ,["<ó•¢CçgZæãý¡ÃWíG—è'8Â8¹[:PL"R‹bvu;zû·<ÅÖå¤àòM<©ú*å5qÁĪ F,ªÎ‰.5U˜[•5 ™Ö½y¹á†ù)Íð¹tjÉÎË ©¦*²mø Ii"®¥;î¬5}$õåÕs äüýV|ï=ËôeŠ%i¤ªëŸîS¥ÔæSÀ·ïNnÜ]­¡N’ðåÏ»FÀ\ä¾aaX\Fîéǰ¨/Ö&ÆÀµ})sí¯?£éš%–_¾`…w*‘s-ª6ê¬_¤b ×=Àòâ:ê²…Ô$Ÿ>@æíßr ›t¨jü BŠþõhûk¦ü‹s–ØËmS¼¥ð†Y¾Úai!–GïîûHÚÈ96É.áÌ!LS^‡ c¬“’Ò&Gº©¶´Nm€²þ: ÉÌ\}¢P=öH#!­îW%‚;âGbþ£ÌŠQë»;„’¼b,â+•¡:ÇÝf"þ.aC`/^”™&Ëû‚p}úÄJžüØèïC¦¦ŽY ß…ÉAÙÔäü$æhWÇAËu°Œ8÷a¦Ä[nÕïÅ”´¸ŠÂö#,ºbVªšu”Xùã'w@Óê(c,Ï^”N˜vàâVø/ZVv_ö86ó5…§h“í;óæîñ>ãùó=iûú$!P4‹Š j2o÷^ô ÑN R#ÜGì 6®n–×MÀ¹0¬øAúÏ牚&ó`%®údŸ‚w݈³°fYð}Á,Ó»l‘’PØäôç”Șøiè•?©êµÂm$RÛTÆÛ½ÞSÄéVÅ?Õa²£è†¨PD"¨Â¤Cœ+?È: Ú‚øøÉ0{“Egà™o”VŽLûg™çWP<›—¸2}Ò3L¤’óž”›¡ì}2ü½ñÁ›ÂJãO¥í&Žë8é 6osL˜ŠõÕ`É‚düDmDš«…I “CI,ZP–,ªÄ”ÑA¾3§Ë ‡3bÛ÷B“qÁ`Dz–cæÐùm,¡[‘t$b…j·r3ËpCesWЀë‡\ß`>§dPM±¡ò¬òäŸUO‘rDÜ–*_c£¤¿ˆiÕ5–®àe’è¹ï*í$'Ÿ¡€ëª»8¢˜â•׌å1³ïQãŸÇÂüi$Êf¨hñ¨Ë),Ý”>Aâ ‰{ßÊèM†{%PvÐ%€¿a…@øRS_Ö0¨5Œgn©Å jIQƒ–Wð¯®O[»Ñ$¨4¬L¼¯eŠl¤!¡×Òksí ¤0m5 æEÎ]N!Wl,ª› ;üŒþ‰gÚÞ=H6UðÖ2¥š'åÒà›ÿã –(Ü3]ÀWl¨0¹;çÖOŒe·A@×’íºø•Ñ\»€_Ä\9ÿ×&ö®FHCP¾ôü6zí\˜´(ö´=*s„¦N({÷«èOÓHJÁôoðØ-Ù»Ã*¦pŽmßu4IøôË ±Þ;0¶ˆ(ž¸(¶/½¡†nÎlïå÷ô¡‘vwß1V–ð©§V'ONö³Û!ôÀCëëú(uÄ<㣓Gk0³;N +ˆ·XÁÍžcj[TŠ}Ãæt‘ÑžK·Ô`& ùø•·'¨«×èœ,câÔšBŒ•¯EȓҊDÆ­î Ôb ª¨¦l-öW4:”ü6ÝóÖx™ï{:ؼîäyuòx~Ul^I† 4lý@kiCÁ]bàüèJô3ŠåÓûwÊÒãqóËlÜ< 'ÅuýWá *ùTÆ(#m®¼[¤Õ8Z…B¨×'±ì-ÇšŸ;Ç{”"±0Ùú ûI¬SB·½Dã“÷u¯Ä‰öõÞòî‡ @¼·W)ßš‰mc}kY?xœ»Ú¢¹y”~7z?ª*ö“õš‡GÛ¡ê@åv¾qã•…bç{ÜÖYÎ×êÜdõtÁÕàÉïOöhˆÛ‰³n¤±ò*?ik¸z4t¿2ÆŸ%“‹˜Ëf9E¥®¯0#ì^w¹Pn?Ñ EO),SòÙ‡šæ×…#/e‹Ë ¦·óZ%ø¡ô\'¯9ÔžPú p÷Ü mð~ެÄ._Pm'J»é{ös¡°vË@°Hûf‡{óÒÛGeß“øÐªY8U2‰_:r¹F»>œO=|ŽL¤L À‡£äãìLM]~dñ×zz£`þŽ-qÛ•ó(PýP ÛªíÊ7[„Ž–äï¤&w5[VOkX~¡“Šß×§sŒdHÙk¤5ig<ÛM¿{°U\5¾ßü ¸ ´)ìŽçÇmM@íþB—ä«‘þôæc+öº ü‘‹ñí™1$©!Óœ•’÷†õÏQƒ ÇAç]ò„¤YîÓ%GŸUY³œÚŒ|Ã]Á›0U }8¯hï§3ídv+ßm£o!õåøØ7d„?éâ§©œBêÅu¹ þAŸ½}îß…Ôˆ¹ Ç‚·¨µ'~°óu”µ² ß³ˆ•¹"Ú;Xø^ÙîÆ¿°Ž… d¬[úΆ…eîÁh¼@!¦’’âOO7ч훛1| äH‰›œb¯/ñŸ|Ô2¨Kþ\IЉ·#oèNú㌠ëƒH¨2lºþ“ŽÖÒsøAp/ž-Ím¥#ëY©­F=b±á¡‰¦¤PJQqÐÒŠUÌ%” ˆ#×Ó&ØæÔ5A§Ž‰$ì¶(LäÃA, é¾ìP õ¯áAyÁ(V×3}³‹Ê6 ?ü­ǽãÒٱęµOoí7@ÿ°„+RíUÌÖDª©÷¢C¯^DÈ¥Ò”ÂF½1?\Bz6ߎ:<¿lÙxÛ.æ:‚qDãÒÊ««'–ÔoWüúõù«´0}g%èÌgÃn6»Âé›»Û>‰2ye/ú¤Æua¥-D^Ù“³ãdàa_è:£QBsý‰6¼ÈÙì¤SÙõ8Öìï@+ÃÕ-wuº<-qÁAºëRÒ~gªº³îu`›in°—ËU‹v‹,ªßh¶gͯÔ+!äDÛôdû>›îÛ6ìÒ㣰ʒd´ÜîïïÄAR Úæ™ß{ói‡pEÕYt)ø?êù ò¦®õLž¿³—û;¯A€jà¬,+\ïnÎô7MØL¿öµ„,бL8=Ø,„üoØÅ$Åí¦i¬²¨G:.ई:#sГBÊ0Úâ+ê–ÀqëÙýfçÁgVb/ƒ¢«ú€†#à‰õŠ€£L ÇW–P¤Jîj´q½õn:dÒë­¸§6ª [õó»"= q'xÆxÝ ÷ù«Wrc#)lXùËk²»£¼·˜ç‚ˆÔŸ9ÓþFŠÌÓ˜qü«Ó=;3B™–Bd¸¬Ö9{á‚ëXAõ[·ì(CÍå“}3¨ÌP„Ï94 ldmC]2eÏ"2UûG»´¸ m2±íðJœ›^x2Æ!ëjÄÏ|I¨àøf“IeVO&È›˜3 ,Wšt»x&阸Øl+áæÍ;$T}+¤‡Á‰ì_:XƒÃd¤T“Ê]úä'-6;$¥‘¥²ãòÒGŠ©½Ý~X»?ŒÀ§6ns«†b–ίèF[ðÿA̰’éM¹Ô@¤¼Rè3‹UéL›ˆaðÄâýÁíÇ0¡kòâÁE83OZo_1˜&»Zˆ#5.Õ 1¨ùó˜œ[Ñ«‘6µ÷zr˜XÞë`ÂÈycÉôi÷R&Ë1†|·®Ã8våÛ`x^¨ìíá“®Ošhi°å*n¶436¬ Qø»uškØv΂+ðÀG9¹õf6Q¶¡¸¯–áÖvéu:ã²)ˆ¯+W_0)¦Ú¸ ««nœšzݶB©š.¾ù)Cÿᇫ§ú1Ú=÷,<öe›YÆ8ZexÄþãWçÔ„ÏWĦ½çž¡eM]@´jþâ:ÅSåâE|ê¥%nŒ:Îâ ‚¯¬Ó¹L8¼êÜ0œ³)>b3m$FïÅBvÊÙWkCŸµ:@³kh2¨Ú¤#ïÝ—*_Iü¡$¡~æ¬ÐDÆÖ<;CÊÖ¯ ˆ»]3@ìæíÙ¾Í=»{(ÌíÂ*î÷ÒË"ª“‡Ê©}!|Pó2\ê|TëÕŠVd•{w ¿@a fãfÌçZC¸~âSlZô´}uT[œÊ½l]ƒ›°h—»xÒ¡·ž‘>(øsB¡}è¥7<0\t±iÙQfªsyKþîñ ·ƒ5t]å.\vhÎm«öÅl´ùÄ‹XðGF­Ô½*›%ˆ÷+(¶dÈ_òPœ7þÓ/¹½ÚÄnÙ,9Ü‹¤˜n-r)?Ôè2/Æàp²Ùí*¤Ý½‹»ôÞ:0¯Gï=f¿´Ê~²üé„ ßÌà~#LSÄ°Ô +ï:¿N檤ì¨=Ыí–JòäTjþäœ3ké¦x~B-2Ÿ†êŸÖuWܧiërçÔrö­s‡[(IäJÞ‚Ôê:EÝœ×iêSÄëI]à N«Î¦d§ï›/&JMÎúúð÷â—a"s”™ðMÔØÍ+¨êÑö;/¿ÃëÝÒ}¹•¥Ü uˆû»ª y*£ <%a¬ʪûå FŸÍA†U1 oÖÂ[ùQg'Iól•îX3zĆHô#V4&qËÉ?!✻b)#<~¥¨—p{×löŠcEÏ‚¤€ëÞ-[ªùôE%[ŠðBXŸÈo¹—Ò-‘–ðqjª°!î×ZÓô.Ñ7Rl¬;tÇàÅ"¶£Æš7ħÉ.=ÌšÌh}­ÐÂç–¬Àêò, ˜úyì 1o²-æ,NäGÄRÚ •nM§Š2¤ƒ_—™"‹ ±D¼¸<¹èmÙšÞ´õÏ3tNÐ1Sén|ÖB©§R`æw6ìüP4@ÃxŠÑÀ/²ª“FR†"Ð[ôgñáN‚æ}Ü ç+,e‚e®Q^/¥¤WͽдºÊ'C¤f¤RûMzÎ,Þ”zx²<â9²7ëúb·v'Êu‡¦K.XgÜTI 4ÆW Z(ï EfrøËbÄÙ„}4«L… ×Jä ³(mî©#KH8z‘ øí7ás7Õlf´¤$ß¼3Ù©Z톬Qj{cW˜"é›»†СïÙâÁsšÔ&+ˆÑ!n¤dì‘#ixÝS ã½rÙôµ'|ŽfÔØ| ËÕ'VåðLß·zäS×€ ÌΑ’.OSÌÑThã0‰Š¶µ®úRÿO$k»'¹:›É¶xøtéùJ‹óÂ\[ֻ͛×FIjÿþEkîþßêT³4ífçìøŽàõ× ]'¯ðê/{œÎVBiÝ.¥Ã¢+*ž’Pa›I•1®@$­dWDà€&eà[ÙJ³Y÷Ïæ£Ì}4Ew§½,Ùxtñµì¦+vÖ¢£ X³~Fл&†0H‰Y&ôÖ¼ÙM~Íòé¸KB!·8Ô(»X#z$µ¡I…䆂Ý{åRãIyµ WؾGÞÃû}|®n!åíRøñ¸ÄÚæÿÕæ^,i®2›Ž—5‚.BMWÌ>’>-¸Ó'ù':ë¶ê‡Ñ”Kû5t!|m›FºBñ®E‡UßÜnéUã‚EºòÚÊ’/e’ì¨ÂR^±„è-ÉeÛõfÊÙ‰rTï P*_CÓ bXdm¦Ô£zÒÈÄñê§”B¬0àGj6ÂEÔyHù[MÕ+e[ͪ£5›š¥HÔä3ëù¤eýy6Ì2BDÀlc:„ô·6..íh «l•ħ òÈõ$¶mÎ2‡"Ì0•0Ã=žQ†y?|9”*ìÉCˆ9>J·nëÓ«xŠv,+ÞÜ×Ä6ÂK4^GÀ ðvjŒ"Ö‰>²Ç¶\Fr,Ï|;t—ôÚ=p HTE2œÇ–¹|ÉÈþ£¬Û¶g1Õ^ ¾Yè#þ"I ù•zŸÁ•âãÚ±(t±ÜÛ̶NšÉòd‚¢ ?fÄÝ#/I!æd“ÈåAîlP÷rZõr¤5|þê~e6tn„Œ?°Ú0“— &ßž6*Ìß+Ç;µ‹¦V€*×󫻺 dº,¡ðæÙÍý!ûaôãt·P´Žð©ã`þÁ¯ ÓëKOø«Ô!qEyªA~Ø–²6€f[¾ ÅçÁíEeÉïoT(­C¼»¤Yä UÞ&ÝAGG‹Ô¾¬i1€ý/[AyqÎ÷†{$xž0å$ÇÔ“5‰¿³˜×·ÆÂuQ¨‹l» ¯½o©åÉëoXímàÐ!czH¹"TR†Pc–ò~Šf¥ ¢\)ÜH‡Â±¹>ÌAl2NhREáùLü :HÞÊÅséfÉä:Âø—í`rˆžAÅ®ýœÆ§ð­±)KÂì×”ÜÉú“Œr¦Ä`“ãR5ö)ÙÁ–þ0 ›€Åã*ÆÏÓVDx w†áÉôm¥ÓRöPÐÀÆM÷Ëy´G[•µö@_¼ð[sh™b}©)£ZAŠhÎ~ä×ç¾±xœmßÔìVd”…L´w¦àžL%/7DÆÒ ÁÉë§°úЃ26悸Çi÷ür>Tt9+“µÂhøåwj "2íU':õmøûm¤Â§3[™ä<Ö ¨öøû¥[gŒn`ƒ(Ó XjÂFjùjš÷E žžlža¡m*½vcR¶±–ÔgOû ËM†=¨ÅÉ·¦Òr´’Ÿ¾Ó*‹×þœ·ÆÀÛpX7:oÁ `¸½ º:tå?šyxb,QF`,zCrùè^_Àü-ˆXɇH€¼Y²[—I_3JÊé­IlŽÙð=*áÝOD3L‘¦Ûë~]Þߣ:M³´ ë!(iðbž-3¨‚_%Ý€ÊHFšU x£ÈküÐÁ_¿ÝèNCf8Œ¼`ÛáŠÓ¦%-sâÈ hµìh¢ý¥¿nµhr¶¤WPÄ´±?”£ñv‘’4;¾ž´¼Û-ƒ­ìÛ_þëZŽ„]H]î ËÔá™É·1‹'9i˜·ÆJ©æu–ºàêÖÄô’ÄÈÆ©w'Ž¥…n,Ãàt¹¥2R €íÛ*h_m¢,éJ¶˜Q<Úûc$$Rµ3·ÆÐ)š+ ‘ðeî@:vŠsÚìQIÀVXô¾)í`"ÒW\_bHvŠçäµç¶tÒ"í¡ž4¬3[¹Mé´‘Åt¨Ö: ª«_ÂÇñ—ORZ„.`å좾¼kN£rËñò-Èòû"½ÂO©M‘rÛ2_ª ؇A ôÕÒráBW1ìiH‘›tËl%Îa:1»Cn•¡¢ù9°b釢ñð­É c?¦!C¾Zàk¢ë¶í”yãà%Š:ó­õ¡ôtó‰F/4i%ú&PNÏkâ®Ñ†ýŠG­~B”/²: ëÉÊdª A˜M?Ó,–¢Œè Û'à4²ob¾3Õ ¾.ùÈâšä@SYÙhÁé%‚©´ä9BËkö±n‡hQT[“„@xœ¬ë6  dð.Šùy^RHüx+'(bZ ùcœÂþî“)J(?Õ/E”Ô!ÊöNy®ÄÌú³ãÓ•O/íÓFëT"AcbPägÃd°ÕçÒMBÙ4°o$`ÝÁR_žWKÙ$%ïžüR¿¡(WX¤»Ã¡áñÐ01õÑnЉ´¡ê¯2H®Wû-@ОÞôñ0BTú½¹E[½üÚ×…ŒIk­Ñ‡öñº|˜­ö$o– ~ü—¢µ&™l1õž4·H“â¿?þ_¨çÊש̙êT çë×ßfÐ`ã™v_B‡ÛÍæDn_¦C&x¦šÌ#Õ`f!ˆF‰XÀÕ®ßïeÚƒ%ÍbcîûÓi“Ü{ÌhxÂqý©ò]„ W(Ä\ÂáÀ–Gà LÛ!A»Œ G”z/˜»€ZŽ mñ•\Ʋ· [Ñö/Ë••|ý¦ñ`›¿P¬ô†Bé#hmUÃt¯H—Nñ4aH(ʣƓɵMØI>‚'ÿ Çß5ÂKåj?Ñ7ÎlV®ŸáÑx˜KƒÃ]¢'ü“U6¢²ýyò¡ÌÔórl³†w®V[$•ðûƒ<`‚úv|š·°ÑA>åbº:…Ë)!£W¥¨‡`ˆÈ¿æ¹þ1¦¯yMg½¾ Ï1£UF4¤WZ³1úqQ‡ý]øZå_+^l{8¦ Fß{?×Ñ£™³Ì_wÁÓ  …»c;5o—ÑpøArBÿ«•ârÈÇ¢áIÞGy—ýñV‹!´ÃôwÏrÖÒ‘cá“!8Xo¶óMÿ¢qr×÷¥±µÍ•NªO²ºz›éo?FÂËÑÿœà¿J$¢›Õ5ºÚÌǺé8u†~U¬¤9³wŒþôâAȱr˜Ñ,vv;ï¯ßV %›è—htPå„ùA‹P¬ä)ªÁ÷Ü%RÖ\7Q'õ @ÎÇÖ‡JŸT+©#\DÆÔr‚n<áZæ¡"ó,iÅ¡pÝJp&òuY³Zö;«PÖ0>–ØÇÝ¢ÞØfÈ×{UîY1œœ±JeÜÙ·o¦dìòdC#?tâýÁ$-Z°‡ôË5 ‹n”¹Çì¸Þ8ÿHÖ€k£™?bïïxäï‘;Wè.« –¾+™=òBI Šç.¨Ì$¨•¢PLÒ¸3l×ϰu~{8°/çÇxê/è‰*’ëµ%0l饶&Ò~£ø¥Š}ãJ" NŸ{$ðŽ—36¨é„°±†;ì¶Ç‡íg‘XrØ,{b¦6•ÍÌ#é{ë›Êd#ù˜ ¨B‚üEw—$hÜ=5 ¤ xðêÿ”ßõ§cîâ’qQ¨`ùßûgf?~:TE‹îͳ˜ÚÏõ%i®ÖI‹ŠÉ¿ßõ˜RðÊ G ¾_i‹5“ºã†Ø8Æ¿&y9·w8S›B­Ÿs=ÅŠ;ôËÁ,H”nFÓÑÊü6ýŒlÊòC¹ß–?ˆd]Xš¤Y¿ ½`j‘ò3ú®~£Á¯ ¯»u]U/øÊ— ǃ0!¿ñØnVX„¬Kf+JϦ¿+©àæbÊ’„‚]l;"¾–â=TšÎÚ©±Y?¦x›ç@ø‰óÀñZ3憩ïÕ1[äH¸³ÖGP?âÏ`ÿZuQøó>¥5 †Ó**NX©}Оš#×?Ÿz“m¬TIÿDÊ¥Ãt}Ÿèúç1UëÎmÓãsx+ïHs ì ±.¾²„:ê¡ò€Xµt¦B¬ ~zS›8ÓÛ½ë¦ó‡ã%4€2 xNô]ø’³ÙgÊ{,X—•ÛŸê'ÔKŒuÊÓÌ…ŠÁ®—摞vnPð‚O±3îÙŸ¾˜J|—„bƒ»/h¡i«øúñho}C¹°ƒ9%ý‘Ózˆí¥Þy¯Ê°îèb˜;kƒ'dÂ@Ý´b.Æ¥,ƒû@OmüÖµðÒ @L¹±R‡¦ÄH+Õ ¤>_˜q—uÚŠ­)a—Zv1 Ì‘í-}‰¬*Öáz2KÔ›Lu¬qŠú" “¿d)hÓë×’ÐþÂÊuÛ¯×éõ¨ã–„gŽãrÚM^VíµöÚ&Œ¾ö-Xµô±# eñÒøA—ýrÜUÚLdŒ$©£|œ5­|±eÅZØ’DKÿ|µªê`PŠ`‚ví”Èøïe—q$©6<åyB;¬üè[Œû‡¸ÚŸž‚qtJô§!Ÿ¦-ÆD¦¶É°HJ*ñ˜ŒKM‚R°RFqþ ‹’?ÿ_ öðHG^ÿ÷=,‡Æ{KFÓ¨©$k#²ÒC› n³VÀ‡áusIä„“¼@¨K…™ÛO˜÷ˆL¡ˆóvåbýB¹·îÈöz`àK¹!ßsÑÎð)‡|3»çJ½ãÿ'”—öÁ¡žÛ.è¶œÍ_ ½TTaJtûÓcµF>3£UÖŒF‹(Ä·£€YƒI=ć¹lÎ;H¥ŸKÓÍs>Ô’¶« >S -zƒ]Á,É zXú§ªžõ¼Dà;s$‹Æ½þ«ü;'—•Ý&õ¿m°àb8TÇþŸF0r*ò)˹¶l·ã8u¸®-¨:†­…áÆ8Ïó¢Á~‘g~àK‰P¯ëMý£Å–¤êýn^OÍÃkñ?•¤L*<^Ó ¡m´¿U7É÷;?ø™š†) a$Rù ”0íØå[4ïûPâ[§P7,&õ®B-¸TvxGœý‡m/ªŽöî;¨ˆ¦»Ë‹LþX:•–8.M /²gâý—¾LU´`Åt>Ûè%L¿k’Jý€ ‚¸þÕÉ«AŸ¿I²êcC\(¸·³S8 ×+ëKT3ˆgtv‚U]¿ÆP‚yâz$!²ãú¹Ž¥q]è…s£ÖÉ|zE¼K£p]åŠ3A¼`e2dA–Ÿ ?ÂàmK]±³’v|á=À#µI“´p&‹­Ý[)N'Ëo çß…XªŒÆTö´3ÖൽctÀ´ê,÷†±¨0È=\ܵ ¢ÙÕ-r=ÓŸÛ˜ðí(²Àè7¹¯q Óê*ÚÓæ û©’Pmä›Îcv¡!£ß"oîÖe¦ï¨0¾b,³Î*þmËø÷¦aí$L.ÝûÚ˜¹;ÐByçšµaˆûD*d•Ö_oýã¢Ã³´©oèÒ¯•fÇ6xöU•¶~Ë I+ž+áê¯y¬8>k•z(3`ÓõÛHÀﯠ¼AAm«aË|o©:ðZ¯-º$‹Ó>€3ú$R8òõÖnì —¿bZÅZZÛ/·Ã»þ­iòèßsœz­ZøGFBžs¦ÓVm&’³ºûœÝj…õëä;uä.WÖ¹ª'¯t‹@ÙœL¨@Êþ2ˈ¦6M¸*õ¥ÿR—D´Ô’º!k‚YÉÄCëÑèsØ¢ok<Нñuó¤ãÔöŽT‚È>õ¬b§Ì\+Ri·‰õ+ø«•ŽG…ªÈ±eªñN6¬Š,µÛVÜ™Ý÷Ž6€RDÝ®¡´²¾0, ÄîJeÇçâI1õÒs´<ÒCjàÓÍŒÓR.ǰE¦9:ªå)’£´"8Dn?|×h~¥Wöòå22lGÂzŽ)ñÕÀ «> .×h£¤=Mé Ô™þ „[ü <§Æ{Í€úØdçJa4Øò¦·â(¬{âÓî§ÒããÒ#4Òpq³™‘!ÿ p>²™ûl.ÑõUѳð߯O|4!awÐt€Žyþ*÷†¦¦ßú58ѳqU9åòœæzÎïõV¶û9ÃÒsuqÝÎæ˜9¶E{HΖ ãdˆ´ÿdš©…Z RõšÏÍS/—ΖÂn+lHÑôY6pÇÌÂ…‘D]ïÖühòß`ʹ"Zòx‹nØb¼lNd@A5ÕÖB­W›;¬þ5¨¸2ªÃàyìS“7Z;é¯_ñÁ¼ŸÁ½§p”`FŒ»ȰB§K;¥+mUüñ®Î)G9•z¢þ v 8Ë(݉;ðMÓd/?‰ìNlÆŠóûP4)ÅLƒÅµªXOöÍ«ÿâh/"m´º ÁÇ$¾'åÂg9d º« (Ûžï)¹cÕ¢ŠÒ]uéÜÈemºŒ©EHlqoD}”ãb‡¸ýµŸ¿¬jzÎè!`8Xµ¢ê0- F‰^,«B‚XDAªeì[ÅD§‘9²ÜmÎ(Ö*2šb€šùƒ6 « |«Œ÷ñ2J—Ì lZ7s5ªƒI›T=†~ÔM~”/ªá¦YÝ>ç½÷Ýxv¶Í-}È–@"ÃùN gÜ–ªÂ°lÕ Œgê&FY€Nž=}r’²éÂ_¢4L>¾»ö/鈚"íM·òL#@ÃÔã…™¼òvíž•¥Áx^·ó&÷~}-sLSl(ý(öõäÝÊ<ùÙÀ&”U:xÚyëEÅg¾Ì¦;ø1þ¸Ùk깃 À*F»&vv‘Ķ&úC¢Š¥UTi‘ˆ~øËÛ Ÿ/ü$¿{pÔ¥í€Lù§c6ûÈÀO?ŽYúÑ¢¹äJ:†yÖ6ž¬g#×WxU Ð"pGÿiáfæ¥<ú·ïù¯*N·p–²ÊÑ:…Þ€Û]žÜÝÇÙJ)Ôƒ“»4wÆ«ç§;ä¢ñò¶uY"ifN|£žƒ9Òu¿Z?Vp ¤¾>é ªMæ1åÄÈ]3ªLjÿ†P~f¾²Žµª«Å.±Fº£ !ü‹\ãÔ¤Txf}]d) g+@ J§¢¨˜Û„ë6`'B ÷Ò‰«'„O¿Û”5Éé¥È¯Å5xIµ’ŸŠ3BVÏ)èÜu6Q<²àéGì m¸V Ï®Y7ì!ï¯ Œ¸õ™2sJÑJ'¯— Ý™^¢ÏŒ Šz0ÓVNî]gòÆ–Š›C;¸ÜÀ*q‘Y€qÇX4²˜eÁ8=Õ6p§v¨V“u>ˆ hüþ¾–WרckÒ :O𦋢SЈ֣ç9ÖþÓã-ºô×Åî Ÿm…Ö~£·¤h§¦7\önc¾Ü\Kú¬Gå‚Þ8_ÐSIs¥ô7UÎÑ`Ñösðb(†c¬…˜ç0|1¬ÍÖp, /–.H:OÂðpíV‚²W!Ó>xIÃ3-hú3`µµíþ»Fg—„Яðÿ£¿DáÖ3v"Ñ"‹Á}²KˆEeÇ>¤-¼;j@€CËú×ÇnãÔ@ Á(ÈŽÔkUj·d ٻܜõùH0ÉÆŠ¿´yË`ÒpDó„™âLt´\ÐÈÊ´BwC¹¬!³Î8i}Dèðé¯]‰‚¬·áÁïæ/˜- ²Ù0„C}Ú öÒîAé›õy×ÃZËV’œ5´h3ÔãÔPO\ù¹b!uÃ)Yˆ½ÌvE¨âU{Að®bš0ÇBuîçLløéèFd%Îwj"ËèP%’Ø~@]‡¬yÖNåDܰ‡ ¥«Z æbV¼4QtXC½çðæÏæÓŠÎ6þÃÆ÷8 …þ1x)‹ê†3«Ç¶çmÕóàìí)%usñj(àûGR°ÇW»\à¨\ZY;8}ŽTéßþJ2cËuŠÿˆ JÓ¡›Ÿh3“Sv†r½HO(ÌÒ)s˜2@¡hp¨TE‹ …¡È@ÑRÈnj×?h†Í™L¸9U r”†´Íüó£Ð€Þß Jsª•á8 ¿yØq˜»ò#ýo »‰–lN¹cpþ·xRI¹=¾©ô~`§ÆtÜÆ/ФRtæQç³Å«œÄEKÆ`kYa6 ¿ˆD’­÷ëR*¾ ÉGš±ÒéÀRˆ­]­$Û8Ð ÝcqÚna¦D·¢"'j¤49tÊÓÛ½A™öyZ1“ ‘BçôQ½ôÏœgœk(áUú~Ì[Œ÷»¦CFV€ùþJŸNˆk©äpú#Æo—î\-èwlÀðREÄ®ró™[ÆiËæZ×9¤Î\m~ %KÞ¡a6I ê¹È©‡Z´† ×ÁÖ=«FÚ ÅÆóÞÌ+'ÒЗî°eÚ³sFI|¦:*n‡>ÿ´%˜òr¿KUÏÚe=—ópV¥>qüCCxœ "¨ Uàùn¬ì&@F^÷·Ý°éO×}·„Õïl|¯èí¥÷`T—o8H´¯úžD£ÐsåC¿‡Þüç…± UãеþïüÕ"Å÷šíwyZħ^¿¬ ò¦¬÷ÎùíjUt’,=oÔÞÚak’·dQp¦¦Jz]zfÄÀÒÔð¹©ÝĬ:.Fu„éã&‹Ë¼œ!Á[6ךn¥ò²n¤†^§ÌP*'ç JoAžÃâ?6[1ˆàÌ@Ò(¼œ¢íð[a2[ %¡ÚÏÉ„ð…zG±6)·‡µ yZ_Wo©ü˜Äl’Í¢ók.7eì‹O½”˜Åž µÔoµ)â/â˜Jã²ùÐäq‚Xþ󘢬1ט=ERÊ›æß “>|4ý QwŠÿ–UnTƒû%÷^»lO˜æzgã‘× ô–£žÍZÅF¦Z`Áa¾Úûn>ç¶ÈOÖ>æ* 8»(뤧Šjv&vô[SºãV¡©°Š&óʼ7w=;…ƒ`qôs‚_kpbdI>¶A.ä¼¢F`ì5äíùŽûRã $yOO>«>±ÎÔþK˜ÔˆQ£ÑQÆÎ÷Óc™ “7ÆÄ2%ßά~aÍq C®¿ úóVs—Á…Ôî>Û³ÐVõ¦SØÞj}ù,K±Ë³mIYŠã!µáÐK`×O3~t‰•§N´¢‚MúœE¡Ž}/ ud=«Óè|Æ‘ôã;“  <¬>‚QìÓžKÑÈ™4Žq†ŽPAÌ@ù²{@¨»Ï€ªùÁíÂíÇ™–Ë~Kv>¯‘,?ïÆ¥Q|*í¿‹Ì´$~þ`ת|«Œ§ÙíLgäG;æᢩ9|Tä¿lß*óo@6!{+õ.-r€ÇÄh›ÌÍc?É7_/&ÀI}0âÖ(Â1FvÛ»¤-r—XŸ´FþgÕ§mãÑ©²%ÑFn> stream xÚí[YSÇ~çWô£]·˜Þ·*WªŒ ¶ã€øAˆ1̵°$œ_¿Ó³h$¤ `ežn%ò´fz9ç;_Ÿ¥I'%L:©˜Ôšš)ç¨a˜Ž–Y-©á˜sŠžùh¨XT–‘Ia©·Âl2Ä´0FÓ?Na±4»Â?6Ð…ñ¡…¯Á’ ëÆúy¦¤$1T`J™H­È”4ŸLY©±äRÎÐ|Z1å=€* ’EC¡i¬¶LKO²kÇ4nRË3mt˜¶IitÖ.imÓA‘Fˆ¤·Q̈¤¸ÑÌ(×Ã0Ia™1‘ô0Ž™¤ª3žoÓˆÀLiDdVH¥­´kXɬ ÔÏ*fMÒ€Y›4ÇÖšÙÂlå¬c6š4Â3'’æø§™#ƒö4 )+'a>AýœeÎ'\ –óɳGè:Œ ‘Zc£M-ô+-ã5µh¬·Ì‹d_,Ž–Ç> eÓÓˆ–£™a2/"Y:(æ¥ ™¡ª—šdÁâ^šô¬’-E³€L¥[ÉXуXû’VÑC>j)D2GÔ,ÈìL]BHTƒQ'¨bd18â ÀTBÁ=ÑBX£C 4#¡ïFJIë@ 4Mb@€TJ5KÌ̧A…=%U©O$Jà‰&-Á\l3áwè†q4 "¾¦ý¡½"ócpæ÷ÔŠØ*Dyi„"È!¾Á:,±,ôГžjl•˜žðöÉ“þþÛUÎøÓñx2ßáÇ×§óôýu1þ¼Ã÷&Ó³|z"°ûÅGþ‚¿äÏNdú²Ãòáœá3s{2K35¼°G¿§ìÉÆ>y?a|Ÿ=ºœç™¶Ù?ìàÿm!2½vYÀ‡æYâ‘ñîmBŠm a3lI¯L<á3I×Àô×ÖÀ5‚%Âhx¯t”íÂmQí3igËŒö°1&³D)Ìf¶)‚™²ÉEpª ‚Òäžb¥íG%3¸z¸NÐS(™Á~… Ë¢ëG n°)á˳`yˆDÞÜeBtÁ ·‹…3„ª,¸ öΙLôd ã2‹¨ˆ(QÐGš‘YE"© þ»_[(8F„#Aж *Ü÷fü6]œ4 r³,FòQ–œ4d ™ ¦°–òV¤\ þQ!ïAâ˜)û±E™†gBn” ZQg©Ž†dëi_ÀQhƒÑA‡<ÃFøpûÂBc\Îz°QË ©„ ‚IOH g°H¬5(ji™!½¥t6e;„P[‰Ì"³ðTÛ ïʬ ¡\ÑÏÞp ù Ð×¶%ª“‘q@M =ƒè¨¨Ò Q?„P©ºS0JO8ø)Kl pˆÈ¡`…ÐÈ_=Ôî™D—y²\(ÊÈ~dðWðN ŒÄ†Q1g¢ËTl!ü 0€‰VÓUÂ2%$Vª'JspMÛÕ+E--à& ê·Tó"šÓ;¥`wÕ¼Û”NE1$lb‰½pHú»J^µ]o­èGð½f¤ B!»“^;öƒƒ†_ô> EN¤—{pVAzáˆÌJ÷³1¨ª‘†ÞI!‡¤JCù,½ƒã]E¯‘ÛD‚Î˽‚Û†«Œt„/é­R&ä×>;‘ÎiL}Äøo¿ÿÁvÁr:È‹è]ëøz4úX÷>˜ŒçiÖzX:‚…ºéµ1€N'Ãã²2~¸ÀøûüfΪ¹–^ ®æù´òž¿ýÀžçã|Z Ùq>¼žóohL¿ÜýùèùññŸÙÓ×ì(ÿ”Oó1¯£Ç·fž¬b2Îd=÷ùlÖÕ«äê£ÁUÑÕ«tô OW¯28?ú<=µ]Ýì¢ÛîÚkt*Ù^ŽÏò›Ç;'•ÑŠùÇ•/NÖÓ§ßÕþÿiPךRwÍ,îXO@!ÒwºÒ ÷tÿŸf/ÜØÈ>½ûñéZ·Éó{z¡ïSz–úR›žÑ‘WêKßë~ôܺ¥y¤biÒ$8MH‚À‰Õ‚%!©PÆÄõµ}¿SµCÕ®Ÿ7cÈ1µž%¡JˆÀ¤Ö&5)#®à¤û4­Ò¨Iãª~Í8:mK2Þ4r„ô'ª‘9}À`š{tM«UcþéÓÞT’ ÒßrTÚtje]ù ÷ï Ucä1º¿l;ÓØ"ÏÛWêCmú´uM¶õ³ú“ðiKò¶ñ!žªÒµµ-¾Ù¦ Yº/[Ù¿@˜µÐÖBÐǸ Uí§Uš·•£>ª¢8]›m±Bô¼wk[Ô=eµAk‰jˆ«-ŠZY°24 ÔbÃô\†…·¢Ê»öD ¥öæ¨7:Vx¨wkÌèLó!9£Z ^[²!XeÕšFͩڵG«ÇׯŸ5^°×Þ ÉŠ•sKN íöµÑ¹-{Õökô®elcÒ²bšÓÞÔÆ•ÞÕ-,Q÷Hþ¸=ey£b éݶaš“dµåêü±•ÑR’¸ŸÏ†Óâj>™–IãÛÁ%ž½ÿó»ßÿó¶¸<½ž½™Œ_ïåç×è1œÏ˜)»îíMnØÉ. ¬]¥a¬d:Ÿœ s¤Ÿ(Awø³ÁÕ‹¼8¿˜CJ,6/ŸíJƒo/çƒQ1|:>åL µžç—¿0#wøoÕ£¦¸L);}ÄŸò=þŒïóùž’íŸø+þš¿áoù;~ÈæGü˜¿çø/üWþÿÿÁ|0żåh"=+fŸù)?†ù(ÿ4/[SZùpry9àg<çIþ‰*¾æüÓäzÊÏù/øg>â£|6ã—|ÌÇÅ8çãëËÓ|:+ÎÇ|Â'¸qůÈvÓì©UÎ~…U&güjt=ã_ø—ëÉ)Fµß©,±ÎÓ–™³‹|%Ìo#®îƒø›½ƒ/V'x6¡uD1‰dâ;Po¹:p_ ^o– õ­Í}´Þ{µøòU¥õÑäòí$¾Þ}“Ÿmð˜ÒAiM‡o©£-ŸE[éôu¡´ˆ]…h¹L'—u^娰«v¢%uþ‘3ó†#7+.•þúP½{öá—?­@Õ±+]âG •2-¨|X‚ÊÊ%~¸;ìJcÅ6j;“ ?—{lmNqz=åkozœ_žÑÐ[^¸Úù£ÚŸOó–\ï“p _Ýd"©ÑamR²Î™ÜÕŸ¯‰Ç?އ“³b|sŸª#Â;Q €²Ú’FÆ…–LûF—…aZ:¬Õ¾1\JÃJkTˆV€”*’ü EÒ±Ô6Y"™%!‘0)˜ð¯¡ªAKIbi×Êx îCˆ‡½° g pýRžT¦¨í`ÝΖÖi˜J?¡h³u‘,ÃÑÄŠ¼LZYõãíÍß:§›Øš{ƒYžN 7KN£ü‘ƒÓÙœ¶)Óð¯ÕI©á¯ÅÙübÆÒ/QRçš=å¯BÖz¦NẲß[ÆU£]P¶ q+nÌIW„£ŸÒ¬¢§—„³môôV„Û˜pÝN¯ GlrÑlE¸ÎÜä–€vU@×6mXOmE¾®,â–xþ>øÉ­È׺oÉwkg¨¶xvI<{'ñçù ázrMÁß§꥗ÕÎUœ!L”ïRd¢ S)7Aœ/oÚòªÊ×\6¿‰åœ¢ºšòý™ñåäVTW¥¾ˆUåû9keu­¾;S]ËE­Wß±ˆ/Ñ¡3ût-Ýýu~y•õ5<|úJšDW“™Ò@ô3Êtu¥fô‹Ê‡/RRˆUéý «ºVßu¹ˆ/½ó"²½ˆ¯0÷¾„É—n‰…R\ËûAë‡/*ICSpÕä•B°Õ5~Ç"•ä±¢pTå"Q—¶Š¥£[Øä> stream xÚ¥\mo9’þž_¡›4i¾“‡Å²,;ºÈ’V/™ä‹ƒÆîd„ql$ï&÷ëUÍn‘ÝEõ öCœV× ë©*«('ΪA1`ŒÉ+Ô€qcœñ“ZsfX1Ø@<ˆ.$<ÈÖÔÀOÒVŒãoüƒXeáM1pÜ3k¯™°†6°˜çôO̯­=AkÏË…]ž $®ã ¨†yªeHu^(õ†^ ¸(¼ÃÙ€+£à‰¸ž„7Ÿ¿¸d¹£8<é,ÊšÕ;;Ú ¬ó@•ókxLJ`ðଂ{ôèo®d8B€>¡Ú ”ð®à Öõª´Ø1,Î;ÊY¿†‡j9YÉV Ð,ùÀj«IïGWQåÀ1 Z¤8Z¤8]Àžà,âBÁ8>z]…pƯ¢¼+Š à.zÃ%ÁR&8hU>>L:XJùÏÔ?zs˜ÓÈëIœ¨ â&%Šy×VúÕ´_;fkÿC0xa´_͇ôj¯Qhô§O4&¬%´W#¤Ÿ´’°È©,$d‰´yýjªÐ…_ÍxåŠcH ¡”B½Æ«Q¸åÊYP¹§+wCÆh¿óþÍÀÕƒÏÛêAÕ>Jþáoþö·?¿BXÁ—‹ðà÷Hõ k’ ‹sÎÿ¥¸ úx½¦ðE¢zÐaMáXõ ¹ê[JÄK‰d)Y;G© ØW‘^}‰í2µµˆ VÉ €2ÕßZ`¦ÐÿÆ"&ÝÊJ›+ê$Puˆdp 1Ê9)8z¤j¸á˜ÂEC8g·ä¯§Çý¨¸ÙާêäÁeg;ühuõ±Z7ÒûÓc dS‘Gð¬ªç3‚úÅ¡üçYs[ƒŒ4ðTCcLÐ` R;k¨B›×`‚½óò;¢”Bc#…ºG¡L’)= Y¢0ÜVÈ#…EFa­AR´;kÐ&¸TðA"µ‰uŠˆ8E†ª^j¾ûVú\üËõóýp}ÚNoÕÆûËíz=Gãñd¹ùÏñh¹~ë;–Ðn†£år6ÙŒfj׿¸ZoÑÆãé¦Ñ¶bD}?Z¬j¨ÄïfûoûSËbRæmˆ Óõh3ú0=/,[ _OÆOå (¦M™M)Û¦­chÑ&ã»Q#Ø&¾ÿ<›ÎÏìÍØM+È£žÞ-ãuLÛþé|rŽsøltv—kÓãѬ‘lGq~uŽa;þó3‰eQ§vw…óˆçÛÙlt}½j\«[ë/ÖM8]; –Ûeƒ©x=?G³­s;_/'MÊ›¶ÚO\5Kª,æ–å„xõ|1ÞÌF·õ":±ïj±yßPT>„ÞË·ÃÉjµX ïFëÚá’_à[Üܬ›¬‘§(’òµP$Íáf5š¯S1=îš‚mû”I~X])zs¥ ,e&½²Pÿ„zÒ‹—Ek,IóW‹ä ‘TE?ûY7ᨥßJãéÒzm¹>æ³^ÓeÍÖ!©È¾ü¹ç¬pÑùtÉcÉRóe.xó|gmm®õðvx5ºÞ­o‡ãͧ†±ããš‘L )sÜ ª3¯ºädÚ ýŠó¾­%¶ëÑíÙbÅ)‹±%ú-¾Ÿíµç|¾=óh‚g;ÿ0_ü<‡R}^VŒG³©Ÿv}µMg“ÈS†`þyµð¸×ÓÿްäÓ–Yß%G~¨”Í&óÛf²ba’Œëéí|¸ù¼ŒLuïxìë‚O©ÅÝh3>+V’d®úíád½]ͦë÷‘Ç”%%6Ÿüh2^ÜÁíM´Hõ&Ÿ½Þ®-ê‚)¿üµ=®öÍíz{åÏFÊâÍ­/¬ÓõÚï‡3g;!£BÑÊüZ¾×jɡߜf‘Ò5"nG–_öRRV隊&ÀÆ"×¶èn:nÕ&Æ5+nÏÔ8YãNºâ8ïd.;â>ÙIr\é˜O _îó}³=»ZÄ@[R×Åíx³]5Í®¾éî9}Â\Í&Ø‚5¼ü2ïÏ«èb@¤¤»+|ër¦†=ûi9]5û• ›÷S‚ö’šŒÇ€w:ßúª2ñó÷b’ÃçÙ|ݱÍÄŒ¾ÕžŒ7Ó“î8ÏS•gÎÍâÃdÞ0%þ¸Þ.gÓ1”üIÕÑ5i%h¶X—†v ù’®Œïà:§É.»-SsÒ­€mÉÜ÷öw v™¤`çÊ„‹=ŽCâ‘Åìºå‹L ¥hé úí|´Ý¼_¬ü‘ØX!“Zà9>zýþøi|$yÊà'˜–¡±“N~:¿Y4-ʺ“Õzº˜û¦ù¿šp }:?ÓíSN镚o¾½»júžøJ­fXF§fÜzmfˆøânøº:  ;äþ×ÝË©<üÇOÌ¿tÉ;x%Èf‡´/뀪In!›EpPm_Çáîþ¾|9 åýðþùéT~?¥.føýu(‡÷‡òH:"=<Ô¯ëµúõóþÁë< ¿•ß~)ÀÐi/"sbPÈ÷²‡[ÄØŽ—ýOåñþ°9ퟟ|.†o¡ê—×§{ AÒdhÿûPžvûÇ#È‹”çùô+ hšêäýYŽF·a6&g„HŒ÷»§ç§ýýîqÿåðÉÀƒQPî-ïþ³<¯ŽÌºþö²;4RºˆIOÇÜÎ@MSÄ{ð=Ðt›öËë—/åaˆDF!$ ¦Äi°È‰4ôáÇ5DÛ€ûÓ÷†ÈÛDX¯"É„Ù<<íÑ*Vy(w§rX~{9ý¨S,–Ú¢3&­nÉÑPüzÜ}-+ÍqH„ÍX¯ÊûÝËñõ >=ÿV>AÍ(búcéIéþU,bØ_w?š| HÐ:¿AÎ’H£)IëÃëˣψS“Š62»|겑7Êï/χSc´èPRÀ†Ç ',r2y•øÍ0 jÛfRšD Lq•áF¥ëeÆ[!R¦Pg¼´&‘¤(¢8~…Š ³3Çÿñ[ÂQ0[Æ6ì$2ÿ'u^œ]@$ÅuX.U¯#©ÈûoI𥕂ÂÙ1=§€¾z¨rá[yÿ+n(A÷OûΩicr85ª¦¨ÕáŸH1iøË\ð±. †_žÃãîøXï1òüi#éQ“ñÆ™ýˆüõ¹DRÅTÛO@¬×‹ùl´k~;ü¢ð–ˆ§ïÂo¿ø}k›‡i¨ëK^é’†“ÚÛR¼zƒ7³{—šè°)W ^óísC§,q¯„\µB’Ûæ®¶’¬cº%+NóúÈnîqà%ÅåﯻGH„ùËáù¾Œôp`Äåä÷ç—J_$wðgãîX†ö6šÊÁm[KÉ“Pkžº=6Ýåë&»¤sóÇèXV.ˆÊáqÿȨ œJßtûl2áS+³â$Âz~i.çðåSm¤Œ_þë°{ÀÄœÇòðüžiQùô­ëþËçí—õQFƪ6¦ÍOZ^[¹^ygú&õÔ‚ãƒU¾F–ß¡…¯?±þvÅ:<ûÓ4$×ãñô¸?žöO_b? ýÌF[­ßáîØÚb(àv‰“+žÆXýÅ_›È(h"G¢¢‰‰†&J$v‰®Õ„d/V¨ðLfÌÒH̘eèh¢¢ÊøÉ!‘ö“÷!ñ-auW°+Ãà)+Ãà)+Ãà)+Ãài+Ãàé Vt~·(v¢½p1z†Nd†Ñ«{ô6£W·Àm"FÏÐ;‘Côh°½ßý½SÂjB´,ÇðY,ÇðY,ÇðY,ÇðÙ X _= ¶‰èýî”CØMˆöÂÅð¹Œ]>^dìrH¤% |ôþÊÑ> ‰º¬yK‰ö…ó†Á?5"—†ðqFƒ‰° ‰D‰tVƒDÛÏÉ®h/\ Ï„ÃÇé2%!|†ÓLbø2§šDï ÑÖ¾¥DûÀJ _æX”¾Ì±(1|"ƒÃ'3ˆ0|’.S½/ûj2ØMˆöÂÅði:!„Æ£0|šÎU…áÓt®* Ÿ¦7Bš V¢}`†/s) ŸË Âð9:ðÊàýKF-„Oº(‡Ä¾š v¢}p½Í2Óè¦Áj†D:|š#‘Ÿo«'K%Î|}EŠ8nuÛ¨ñbÀdVÖH¤¤1z™ÆCcô2‡ÆèeÎï«Qšhûë±ÁàY«ÁàeúƒÁËä¸Áà9«ÁàeÎwοŒy­!ÚFÓß6Ú3ˆ 3ˆ,3ˆiD¢GŸ¼/Y/X"mÛhj§ÁZŽD¬…ð5¿ØÙ&J¼<¢SÆbøDfMô¾ìƒk‰¶Ñö·×9ù,†OÒá³>E„.Öçh79ô¾îK´®¿mt>ú¬mŒ)R“§0ôêÒ& I—&˜/dïØãº½"ï=aa:‘tíÙDÒL&’žw A—ô´C…¤g)dߤû‡*ï=SairMG$]Ya‘t]…Ž\ÒUæE—'˜"T_êöƒ¢÷… DÑÅæE˜>ÝK@®è¨Ãà é¡Š•î Ÿè½ð`æÐt÷‡¦K Ìšžb éÖtÓ£‚¶daƒAA»ž>HvKÙ{V”Qÿ[ó6ÉÉÐL†nÚ Ñ6´[àРû˜ ŒêÃ×=Uïñƒ…¡ Œ†.=0Tº¾@gmè¶æ[ÐkyÛ-ëiîT÷DT½"Œ6ão%KßÛÁaiPZé†FGïuïÃ×=uïÓƒ£‡k˜==Ãäàè»[è íèú=gBÏïL϶º·9‡Á9Ú«Hd”à”£¯v°×/èþ[ý‚‘±Ó/¸éؽ#1½W$8'tqL(èÆ)¡ ;6ìñ údÅ¿ »qìð ÓÓtÏBÓ{5‚óAaÈ„„Öƒö;N…%s{û‚>°µ/, ;û¢¯Ÿ1Ý;ÛÛ°á\PÐm ŽÝ·àTPÐ öôŒ¾íÅ–žÑ³vô¬—aÚnÛf{Û6è9iŽŒq`t †½<£oy^àÓ¥Õáý=ë)=ÝPºÞæÆáå?'3ÏáÝ?'3Ïa¸èFÌa¸èË]‡áŠ.pŸ^á+c?:Àשׁž«wÚ·XˆØÐ Ð*#g ’àÿ #h,Ð$A㦠š4KÐdE#gâÔÞ®ÜeŒ*h¦,ÒFYd*š*š 4Ê;.Ðï ã¤â1ªÈÞ8²-E`d!ZŠÀÈB´4‘…hi# ÑÒÆào­/¡$B‰‚—a†p"aY—Q-„Ë‚Âeˆ=Ç«p yp¸eAêH¼’‡xY$ñ²Hâe <ÄËR C¼#hÁáN\‚YYܼ 3ÄËQ&Uñâe’ 4Â=¢Š± D¤Ç hæ"HÓ)z÷¥àA5RTñâŒ)d Q U QPt 9 L ¹K0+‹»‚—a†xqÊó!^œ(?²ŠE ñDa’!^ÔÑ$ƒÃ…¼Òv@¢àE2Ä‹:Ùdˆu²É/IA ñ’”/I”./ÖØÊâ®àe˜!^šH=D"©ÃB…xi")Uˆ—&’R…xibƒ¨àps±ÆVöv/‚T!^ÔA¢B¼œ"iøE«#r@…X:KÒ*9GÒð;¢âbçSYܼ ³J!AÕJU¥DùQ.Ð9]å‘°ºR„ã4 ´‹5Vuk¬î­±šÕ„ou•BB u•‚J=]å€0”œ4Ê9ÁáF]‚©»5V÷ÖXâEõ0:Ä‹êaL/¢ˆ˜/K€4!^Tb‚ÃÝeÝkšûÿÚ’Já endstream endobj 1900 0 obj << /Author()/Title(GNU Generic Security Service \(GSS\) API Reference Manual)/Subject()/Creator(DBLaTeX-0.3.5-1)/Producer(pdfTeX-1.40.15)/Keywords() /CreationDate (D:20141009153754+02'00') /ModDate (D:20141009153754+02'00') /Trapped /False /PTEX.Fullbanner (This is pdfTeX, Version 3.14159265-2.6-1.40.15 (TeX Live 2014/Debian) kpathsea version 6.2.0) >> endobj 1801 0 obj << /Type /ObjStm /N 99 /First 1036 /Length 4017 /Filter /FlateDecode >> stream xÚ•\Ën7Ýû+z9Z\‹Ï*r`PlO$±ƒÈžM…b †¿`É‹ùûa»¤nñˆ7^Äèôi²Î)²YÕd]ùâÜâ_\XBôr—Dz'-TõN^ªrA‹÷Q1^|L$Weñ™­‹ç"¨wKpÎ=jW~ !H'¾õŸb‘«¸ÊU®Ò K/>/ÑÕ W´Äèå%æ hY"'±á뫲 nIž¹ÙhݧX“Ü ºk¡‰(A¬…´d§mC^ZwÚ––œ˜åŠ—L½mYrímëB>ƒ&•šÊf£y†ºÊâ¢Wqá¦R®ÒÂÁK1/¨¢´0eEyáBŠ–¥ùK¬Åº´ÞÅZrKɾ4É/…[í*,¥fQÞˆWÏÂ%¥¥&'Jm8(ès´Ô’DejÝ;ÇÚaûTSj ]VbÂÄq;¹=å*ɳ¹õç›Wå2ÊØ*¹Üþñ9j³fÆSÂG©µËùª&r³|ÒgÛS!TyV¼RÍšØi^—g©µ ¬^”Bõúlƒ¢cÑCíŸT5k1V}¶Ï51AÍZÌ:Ǩµä.·ÿ kÖıV雵ä´nÿ¤ Ö¸Yk$=ˆÉ”Ô}2S›E¦E"`nPb$Cªb=»(³[—½¾¥Yk³K<)m›÷„ƒ¸3'u_Éòž8é·´™uXJû'}H5i³Ö€œ¾"µY#O¹Y“w‘‚ºOÞŠâ®")éÊ€´K´‰ˆ>ЬQÑ™]Y.ʼn¥¶¨öÎÄZ-ùÑ“'N_^|¼¼^þüׇë›Oß>þ}ùõñÁs|ìOįÜVŠ?–=–V¬,+–Ú<1Z±0^± °²bÊå¯G§¿^}¼ºÁŒÇ†=zúôa™uíHQ«©Mq½•"‹_1 ²„"Kwx u*²"µáTdéã•"¢»ŽWDt×ñJ¨Ý:^m‰±u¼˜;euxžŽeg<6œÊ¬}¼Êh´®ã•Á(×u¼ˆ¬ëxÑ蜎€ƒÚJìfú†QÔV3uÁ÷nÃh0tPÑ)%ëÄ€¤Ž]¹#ã Ô‘ÙÀu–C«©0îÝúý¬€~ê:Òï/ËØ‡¥Žºb÷lêâûº´ÕLWìÃÖȨ$3Xr¢KËJ̉ ‚$„DAòDXg9´š Ë“tKÈ`„B‚„° !¥!Á!¤ âg”åÐj*L'x«dCÄÇ1 D| VÏȽ· × °t $­ÒtÌh3m6ÕÖž ‰ MÑVkd¬SAºö§.ÝIo±ÌÄu¢C³#âdÞÅŠ,ʼK!2ï@hkˆÌ»"ó.ÁÖ¥*—Ü´ÕT˜¾T•¤Â@þÚÖ¾†ˆ0°ö5D„•‚VfïX¾b´Õam#°ô5¤œèæÜ€hnH ÓLš²s‰‚ÀÞ’ a.ŒOÆVSaš2øôOš²KaAÀXj Ä> D$ƒD9iªÆ=Q~HX¾¿Úk«©0RyHR$ƒD¹!"$Ê É QNšO2ÈA“¦b§‹ÝO‡µÕT˜æqÁ¸h¶Ãh¹×ü‚Aî”4¿`;%Í/8A;âÀi2ÜY­¦Âj§¼_;ý‚¥_"ô³CˆÐÏ£›úž Mu [ùHÚ‘5`«²æ bUÖ`É Ve é bUCDÈH²{æÙÒÑY­¦Â4S`†…>ˆHY3)ke°õ‘5Ø3*Yƒ=OÓûÎrh5;•q"æØ©„(0Êm¸„Ho¶i½õã … áY[M…é/LH„œ;•„$HFH„B‚Ì6u:Ë¡Õa,ÝkD*`FömTl$Þ±#k°* vd]ÉåØkªì^|ÖVSe¬ä W¨L¼ ý"¤_s^\IÓ!£ûñY[M…it,`MÏ: XÓ³nT°¦gýˆ/hM×­9]ˆ¸)Ïâsg9´š Ó(,GiƒÁþ5^Њٷ ãVâ)´fjX/ñ!ÍòûNthuD› 12(vù³îÈ!@dØ!Dæ)ø@ʺkP汬ÜOª´ÕT˜†õ‚iÍ= Z¤5÷¨ ‹Ïš{TÅgÍ=*Z«¸©ºél“zle¬â㊖ï*>®`ùî `õ#M*HâIS™ –YÒT¦Nw»;É¡ÕLiTÁBLšíT°.’¦¬‹¤ K °7±ÖEÒ„¥ÆÙ+ÖY­¦Â4Û©’`c‰4¨`ˆ4a©à“€4a©à“€t?¡¦ÙLì,‡VSašU°“æA5G„Éœ"$sFˆ¼bŒ¥&•f_š4ì бŸ4wª`&Í*A*B,¤DdEˆØË%iVRyvðÒY­¦Â4¥©`3Š4'¨Å!DH‚³MÒ°^ ìMì€ÔŸ4¬×2±áZ[M…iä«`ë™4¢V°±OQ+Ø×' 7lëSív BÔÎl›Š†ø¬­¦Â4$ybiLjGPV( ˆ]ÕχÁ^ ÷S}çfK~g:4›‰c1­_B&»nȦë.êº+‚T·ɽ0ÁùÙØu®C³©<ßåhRå •‚TøvhÊA²A¬ÐlôØy|L^Ñ~Áèõ¢ ¾Ä8¬N©R§D‡ u 82æÐÃ\^9›Må…îQpâÜ õ(ر[«¹8®åØ•ƒD€ãª¼ ¨+ŸNNå:4›Ê‹Ým ÅàØ•ƒc-Hs`KS—¾ÿ8uyàS—7=iê\‡fSy}çÏe@4w¢àŠs' ¶öÖ’:vð˜z‡` ©w8=oâa{„r¦î6ðMºÖ÷9£0w¢às•¹eءڟ«k½ ãÙ‘5áühµàZ,è@:ÒK•@ËZ*è@:²V :°á¸ :pXµÖ º:»áîh•àZ$è@â±Ö:P º–:ðÙºVz¬‚Dûµ>ÐOƒúXx´:°WŒÀ¶ÖzÒ×Ò@âöZèA©V+4Š«ÝÇ>Ì–•aè´ÕT[^»çX¥çX]ÇʺŽ”u‹†_.Þ_öúÙ¤¾”¬ÏRú})t±ðÛïH}‹}¬õ;R¼’wÏHÑŠ­)ýŽ«ðŽ”™ðÚßZ½}êbR‹ÂeÛ¡Ô ”19šµ‰ÞïT¹³%&kœ­ûýF³Mž0/:¹{ ó Z»²´ì$mïȉwܱÐB¼½#'Üy÷ŒÖ"TH,Üd ‡ˆÉ ¶­wýŽž\ï´W9åÜ’oLCÜ6ŠÍ=¶L£€:Ì‹OîžÂ¼¢ž’ngO”£”ô¨§F;^rØU¶Cåì¶îZÉö¢˜X½}êbºW¾3!{q«½ñŠyûH’Þš¤Ûç»Fºkû¯rr÷æ•dkw7Ï“ìÊ–í@&Ù­;b² »sO’A¿{Fv&&VoŸz€X•ý©íDÏ}·²“½™í@fÝîØÎ°¬ÛÛ7;맷ǼêÉÝS˜WÖŒÄoý“{:»•¬ilÞÝÒÄwäô+fçÙ\5®HOlß>†é5»içrÒaÚ:’tuç­Y’•Ëï^_’¬,ì–í°ïnW3Jq?…\?Å]H ñS¤Ý¢?EÙÎRªúCŠ-a–Ř[>¹}sc§?ØkõÞaqÑö)©Ht[Z¶¼}âª-Œß¦«X]]‰½m_rÇBöõåÛ›«ÏŸk cëêÝÍÆÕ¾ ïn¶Aµ—êî¦.<¢˜Û=8ð¼›Ç ì¼û¿Ûž~¹zמôVDã­fÆ[‰L»¨ëÅ ÛÅ0 Ÿ~{8¿¹øzÓìüx~~xvøíųŸÏ^=ñïgg¿Ÿ×\ª]D»Hv‘íÂH…af­FÞ¼~söëá?¿žýØÍtë¿üñC>¼|}øéÕùëÎÎ_|~ÿèô÷FñZ¾ØÔâ£ÓWßZ†ñ©ßÊýVÿrôk\oòÛçw—§o®/íq½ùëÅß—®Ÿ<9}ùíãõŸ®]œŸ~}ú4êÅó§OÿjN_}¹üt¦lo¼þÿ|Ä endstream endobj 1901 0 obj << /Type /XRef /Index [0 1902] /Size 1902 /W [1 3 1] /Root 1899 0 R /Info 1900 0 R /ID [<57541840991287F1A9D67FBBBBD9DF41> <57541840991287F1A9D67FBBBBD9DF41>] /Length 4211 /Filter /FlateDecode >> stream xÚ%ÙIˆ%[Bà873++k®ºYóìÇÄ!ÆÅ1Ç œÄ)œÆÜÅ=Ì þ£˜ÅCVa-6`3¶Áˆ×F¼>Ã^öÚ5±À÷Bruo<Ó~.Û,á1žâ^à%^ã Þá=>´j̨ƌjL¦ÆdjÌ£Æ4™ó¨1S¨1…³§1{§1qs¦1gem¶`ÌžÆÄiLœÆœiÌ™ÆtiL—ÆLiÌ”ÆühÌF(ÓNãÔ É“ïĽ2qs¦1gÓ¥‘y#îÆÉ«‘y#óÆi¬|ÇÙ ­‘~#ýæ¦CòaWüäøÅGm8ó¾ôçñ¹{pâkäÑÈ£q läÑ86Bi„Ò8#6’i$Ó876âiÄÓ8K62jdÔÄóåGsúïñ†W¯?þ+ñ»=„䋟‰[¾Û§æa$$?}->7†ùXŠ>`<$_ÿÉø– ,Æ0ߟÛŸs†˜ZŽ%!ùÆÄç–a%V„侟›´WomíªüòÿïËj¬Å:¬ÇlÄ&l†³ÐÔVlÃvìÀNìÁv‡ä×"~ò^Âì ÉoÎÆœË¦ãNà$ÎâŽá`H~g.þÅQœÆñüþ¡øÜ)\Å™üÉéøÜy\„SåÔ%\ƇÿÎÖuÜ€sèÔµüÅÓø·Î«S·pwp÷ð ÷Còy|óà#> áø&o.Õ§w9lÎÞŽÏ@UJõ)Ç¡4¥n”úR.„•b,¥Z»ñÝ‹ ¥¾”+ få$ô¥\(]œ”jQêA©¥@Ëõ!é>¥¥F”QjD©¥F”jVîÆcï(KI—Ãy0úóñöA7ʃP•R-Jµ(e^êAyºQêF)äRÊ“!,ù›øQÊPº–*¯áL“_P†RJ=(¯@iJ–"+¯‡°þ·ã›Õ¢¼ =(õ ÔƒRJ=(ïCú¥KµRJ(U ”`õi;ÎÇ}îðã?ŠP2^áéA©¥”Ÿ¸TKýÂþãñ¹\›MŒaÆ1ßÇß÷ÕÏâûVaAgÿ4>\ˆÅX×u˰}LµÞÄLaö`uW6ÆZ‹õ؆›°[± ®1'v`'va7Žbo·ŽÆÏÛƒ8„Ã8W¥.4'Ž…pÿ/ã›ãNâNÃuìÄYœÃ—pWq!„§wâ§\Á \ áõãøÜuã÷ÑÖM¸¢˜áãšøê-¸Bž¸‹{˜Á}<À,â â•´ RA¥‚JcxCø¡™ø¡Ï/Þ_â\{O¼Á[¼Ã{|@Ü?I}@Bø³Oã– ¤BNE›N`$„Ÿú¥øê|H?6âkߊÏY*¤ÒO—„ð³×ãs‘êAjåöCøF_P‹T¥ÒÕPTRËŒTReH•!Ýd$ãN*CjÑn á[‡âGéFª©Z¤j‘ªEªf©Â¥òM-3ÒáwįŠ¦%©–¤Z’jIª%©6¥Ê*C*ÕÔš$=·ŸÅ¿UT7RÝHU*½-Iµ$Õ’T-RUI§¡©àS©¦Ã¯‡*‰Ÿg1•êAª©¤zêAªéck¡øf‘¥BøÝÏãCÝHŸÆÕ˜ôSé§ÒOŸ >|*øT𭯂V}ÚòðäðG±˜­e_«a­†µzЊ»Uvx"˜W%!|w~|³ ´†½]Â_ý[|Î÷A+øÖʰՈÖ÷A«­Ì[™·2oeÞʼ•y+óÖÜoõ¥õÐʼrë  •t+ßV2­mã’qWŸ%îà[_7­ô[I·Ö¦­¸[q·ânÅÝŠ»õ-ÐjI+øVð­[ß­¤[I·Bn}´’n%ÝJº•t+éVní0Úþ^Ü™·òmMöVÈ­[!·¢mcBø¢ˆ¡mŒ[´­ißÊ·m+ÚV´m\TË·m+ÚÖk×`qý1„ÿúj|`å5…ÉÀl`u2°X¢ ¬ÆÖ)K²ÅÊÀºl`Å2˜ ½ñ%ñó,L«BøŸ/ŇlK™UÛÀzf°5‹¸•ÍÀJn°–sƒ=°¦샅Ýà ¬îG`‰78ë¼Á)œVÂxDop6„ÿý<î†àଗpWaQ8¸+ÃÁ-XîÂqpðVwƒ'°Ä<‡uÞàâb/åÛÐë}/îµßà,:ZØÓ°†½° / {aU^öÂÒ¼0ì…õyaØ‹0ìÅJX-î…q.¬Þ‹ ¡·òdü޲Øz‹¾ö²¾0ì…µ}aØ ü°Vù…a/,õ Ã^X°- {aZöBæÅYX‘ƹ°,-ŒsòJè-û,î/Ü!(Œxá6AaÄ‹¸l6âÅ Œxá†AaÄ w #^¸uPñÂýƒÂˆâ.ÞÂí„Â8*_'¡wäGüßÚQÖ½Ð[ûýøÐ°×Š^öZÑkÃ^+zmØkE¯ {­èµa¯Ý…¨ {­Ùµa¯5»6ìµÌkwNjÍ®s­Ùµq® qmˆkÍ®smœkõ® vm°k¯xmÄkƒSï ½M߉;®÷µj½¯P»ÉQ  VôZµ¢×1¨ {ïÕö:þ‚pÓt‰?iÄW•º~áW……X‚å˜ÄjÄCT­ãõíÐÛ1÷Jnµ™R ¯6SjáÕ«…W ¯6]j Ö¬%XK°^m’Ô¬%XÇ[%Ÿø¿ zÁ(Æ0㘠lÃvìÀNìÂnÄxÞ„Þ¾íñ“`c)–aúX‰UXƒµX Ø„ÍØC8Š8s¡wåW㻈˘ÆmÜÃ<ÂSÄ(^㶆Þé°{1…}8€ƒ8Œ#8†ã8‰S8ƒ³8 à®à*Þá£_— {® ¹2äÊDZ¿zWƺ›¸…;¸‹ÜÇ,â1žàžã%^á Þâ=>@,‚Çréç#¡÷tu|(ø\ð¹àsÁç²Ì8h.ó|,ôn}ÿB¾¹|sùæòÍå›Ë7—o.ß\¾ù:9rk“t.é| ¶B×r]Ëu-×µ\<¹2äÊ+C® ùîЛùfÜ1æÌ%˜K0—`.Á\‚¹ó㦩Êç̵)c.Æüd™Ë2W®\ ¹@s5Ë¥šK5W¤Ü‡¹ÈrýËå–Ë-×Ä\x¹ðrÌ%˜K0×Î\Œ¹s=Íe™Ë2ר\ ¹@sÝÍ¥šK5×â\´¹hsåÊå›Ë75ûĘ |-õGà÷ÕþæÁª}KÐþ\wöbc –b–ÃϨý>Ü—ê¯Ä*ÄO×`-Öa=6`#,3ú›áîy+¶a;v`'üFÚßýˆÑž ½Ù{ñ°ö„Þ~·à á0Žà(ŽAæý8‰SpuÓ?ƒ³8‡ó¸€‹à.Ã=¨þU\ƒ…gÿ¦áë¿ï—•þmÜÁ]Üà îãfñðOà—ïþ3¸íп÷_á5Þà-Þá=>À˾à3ã’ >‹ç#Ágñ‡uÁg‚Ïâ/éñÞƒà3Ág‚ÏŸ >|&øLð™à³øû¹à³xCRð™à3Ág‚ÏŸ >|&øLðY\_ >‹?›>|&øLð™à³øã¸à³xçi/¦°ÊÉ<“y&óLæ™Ì3™g1î}¡÷î_â@ #¿õßqKªxDzéAR2e¨â‘kD¦U µÈÔ¢Š#¤™nTqÔ$S*Žd¼S)Õ,Þ™PLA2ÉâOo ’Ý ½÷ênèýÞ—ãÖ½Ðûǯŭ™0²`mܺFö<‰[ÂÈé_Œ[³aäÝû¸¥C•h«±0ò‡ì¹J¾•|+ùV«„W ¯^%¼Jx•ð*áU«„W ¯^%¼Jx•ð*áU«„W ¯^%¼Jx•ð*áU«„W ¯^%¼Jx•ð*áU«„W ¯2a«ø%ÓTƒŠË‘˜‘xªdª˜ŒPªŠ<ª˜‡(*¶2a+yTò¨äQÅë5yTò¨LØÊ„­LØÊ„­LØÊ„­LØ*¶h+¶2a+¶2a+¶2a+¶2a+¶2a+¶2a+¶2a+¶NØñ‰$ŒüýÙÄV@#Åæaó1XˆEXŒ%XŠeXŽèc+± «±k±ë±± ›±[± Û±;± »±{1…}Ø8ˆC8Œ#8Šc8Ž8‰S838‹s8 ¸ˆ.á2®à*®á:n`7q ·qwq3¸˜ÅC<Âc<ÁS<Ãs¼ÀK¼Âk¼Á[¼Ã{|ÀÇ0ò·Ÿ 3ÿâMò&¤ endstream endobj startxref 255069 %%EOF gss-1.0.3/doc/gss.ps0000644000000000000000000251551112415507742011124 00000000000000%!PS-Adobe-2.0 %%Creator: dvips(k) 5.994 Copyright 2014 Radical Eye Software %%Title: gss.dvi %%CreationDate: Thu Oct 9 15:38:42 2014 %%Pages: 76 %%PageOrder: Ascend %%BoundingBox: 0 0 596 842 %%DocumentFonts: CMBX12 CMR10 CMSY10 CMMI12 CMMI10 CMTT10 CMSS10 CMSL10 %%+ CMSLTT10 CMTT9 CMR9 CMMI9 %%DocumentPaperSizes: a4 %%EndComments %DVIPSWebPage: (www.radicaleye.com) %DVIPSCommandLine: dvips -q -o gss.ps gss.dvi %DVIPSParameters: dpi=600 %DVIPSSource: TeX output 2014.10.09:1538 %%BeginProcSet: tex.pro 0 0 %! /TeXDict 300 dict def TeXDict begin/N{def}def/B{bind def}N/S{exch}N/X{S N}B/A{dup}B/TR{translate}N/isls false N/vsize 11 72 mul N/hsize 8.5 72 mul N/landplus90{false}def/@rigin{isls{[0 landplus90{1 -1}{-1 1}ifelse 0 0 0]concat}if 72 Resolution div 72 VResolution div neg scale isls{ landplus90{VResolution 72 div vsize mul 0 exch}{Resolution -72 div hsize mul 0}ifelse TR}if Resolution VResolution vsize -72 div 1 add mul TR[ matrix currentmatrix{A A round sub abs 0.00001 lt{round}if}forall round exch round exch]setmatrix}N/@landscape{/isls true N}B/@manualfeed{ statusdict/manualfeed true put}B/@copies{/#copies X}B/FMat[1 0 0 -1 0 0] N/FBB[0 0 0 0]N/nn 0 N/IEn 0 N/ctr 0 N/df-tail{/nn 8 dict N nn begin /FontType 3 N/FontMatrix fntrx N/FontBBox FBB N string/base X array /BitMaps X/BuildChar{CharBuilder}N/Encoding IEn N end A{/foo setfont}2 array copy cvx N load 0 nn put/ctr 0 N[}B/sf 0 N/df{/sf 1 N/fntrx FMat N df-tail}B/dfs{div/sf X/fntrx[sf 0 0 sf neg 0 0]N df-tail}B/E{pop nn A definefont setfont}B/Cw{Cd A length 5 sub get}B/Ch{Cd A length 4 sub get }B/Cx{128 Cd A length 3 sub get sub}B/Cy{Cd A length 2 sub get 127 sub} B/Cdx{Cd A length 1 sub get}B/Ci{Cd A type/stringtype ne{ctr get/ctr ctr 1 add N}if}B/CharBuilder{save 3 1 roll S A/base get 2 index get S /BitMaps get S get/Cd X pop/ctr 0 N Cdx 0 Cx Cy Ch sub Cx Cw add Cy setcachedevice Cw Ch true[1 0 0 -1 -.1 Cx sub Cy .1 sub]{Ci}imagemask restore}B/D{/cc X A type/stringtype ne{]}if nn/base get cc ctr put nn /BitMaps get S ctr S sf 1 ne{A A length 1 sub A 2 index S get sf div put }if put/ctr ctr 1 add N}B/I{cc 1 add D}B/bop{userdict/bop-hook known{ bop-hook}if/SI save N @rigin 0 0 moveto/V matrix currentmatrix A 1 get A mul exch 0 get A mul add .99 lt{/QV}{/RV}ifelse load def pop pop}N/eop{ SI restore userdict/eop-hook known{eop-hook}if showpage}N/@start{ userdict/start-hook known{start-hook}if pop/VResolution X/Resolution X 1000 div/DVImag X/IEn 256 array N 2 string 0 1 255{IEn S A 360 add 36 4 index cvrs cvn put}for pop 65781.76 div/vsize X 65781.76 div/hsize X}N /dir 0 def/dyy{/dir 0 def}B/dyt{/dir 1 def}B/dty{/dir 2 def}B/dtt{/dir 3 def}B/p{dir 2 eq{-90 rotate show 90 rotate}{dir 3 eq{-90 rotate show 90 rotate}{show}ifelse}ifelse}N/RMat[1 0 0 -1 0 0]N/BDot 260 string N/Rx 0 N/Ry 0 N/V{}B/RV/v{/Ry X/Rx X V}B statusdict begin/product where{pop false[(Display)(NeXT)(LaserWriter 16/600)]{A length product length le{A length product exch 0 exch getinterval eq{pop true exit}if}{pop}ifelse} forall}{false}ifelse end{{gsave TR -.1 .1 TR 1 1 scale Rx Ry false RMat{ BDot}imagemask grestore}}{{gsave TR -.1 .1 TR Rx Ry scale 1 1 false RMat {BDot}imagemask grestore}}ifelse B/QV{gsave newpath transform round exch round exch itransform moveto Rx 0 rlineto 0 Ry neg rlineto Rx neg 0 rlineto fill grestore}B/a{moveto}B/delta 0 N/tail{A/delta X 0 rmoveto}B /M{S p delta add tail}B/b{S p tail}B/c{-4 M}B/d{-3 M}B/e{-2 M}B/f{-1 M} B/g{0 M}B/h{1 M}B/i{2 M}B/j{3 M}B/k{4 M}B/w{0 rmoveto}B/l{p -4 w}B/m{p -3 w}B/n{p -2 w}B/o{p -1 w}B/q{p 1 w}B/r{p 2 w}B/s{p 3 w}B/t{p 4 w}B/x{ 0 S rmoveto}B/y{3 2 roll p a}B/bos{/SS save N}B/eos{SS restore}B end %%EndProcSet %%BeginProcSet: texps.pro 0 0 %! TeXDict begin/rf{findfont dup length 1 add dict begin{1 index/FID ne 2 index/UniqueID ne and{def}{pop pop}ifelse}forall[1 index 0 6 -1 roll exec 0 exch 5 -1 roll VResolution Resolution div mul neg 0 0]FontType 0 ne{/Metrics exch def dict begin Encoding{exch dup type/integertype ne{ pop pop 1 sub dup 0 le{pop}{[}ifelse}{FontMatrix 0 get div Metrics 0 get div def}ifelse}forall Metrics/Metrics currentdict end def}{{1 index type /nametype eq{exit}if exch pop}loop}ifelse[2 index currentdict end definefont 3 -1 roll makefont/setfont cvx]cvx def}def/ObliqueSlant{dup sin S cos div neg}B/SlantFont{4 index mul add}def/ExtendFont{3 -1 roll mul exch}def/ReEncodeFont{CharStrings rcheck{/Encoding false def dup[ exch{dup CharStrings exch known not{pop/.notdef/Encoding true def}if} forall Encoding{]exch pop}{cleartomark}ifelse}if/Encoding exch def}def end %%EndProcSet %%BeginFont: CMMI9 %!PS-AdobeFont-1.0: CMMI9 003.002 %%Title: CMMI9 %Version: 003.002 %%CreationDate: Mon Jul 13 16:17:00 2009 %%Creator: David M. Jones %Copyright: Copyright (c) 1997, 2009 American Mathematical Society %Copyright: (), with Reserved Font Name CMMI9. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMMI9 known{/CMMI9 findfont dup/UniqueID known{dup /UniqueID get 5087384 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMMI9 def /FontBBox {-29 -250 1075 750 }readonly def /PaintType 0 def /FontInfo 10 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\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: (), with Reserved Font Name CMR9. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMR9 known{/CMR9 findfont dup/UniqueID known{dup /UniqueID get 5000792 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMR9 def /FontBBox {-39 -250 1036 750 }readonly def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\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 45 /hyphen put dup 48 /zero put dup 49 /one put dup 50 /two put dup 51 /three put dup 52 /four put dup 53 /five put dup 54 /six put dup 55 /seven put dup 56 /eight put dup 57 /nine put dup 65 /A put dup 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 76 /L put dup 77 /M put dup 78 /N put dup 79 /O put dup 80 /P put dup 82 /R put dup 83 /S put dup 84 /T put dup 85 /U put dup 87 /W put dup 88 /X 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 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 5D2579DAAEE12528C23ED8A1A2F34CAD1CE8BA67D0B660E9281F247EC10F816B FBD6B9E8AAAA1DFCC4C9FF1C6AD05C0D776DBF675838C2629826D5337EED815F 4268604A4EED01A2C7842FCAED2E37F7F39F980866DC5BCACA8616749FFE946C A0AB0475DA734C00D99912C544BD31F8A69367D068F0A18EE79FBD4D5385B8C1 DEB92502ACB3B657A54C9BF786D7DC1ACABDF29591D77ACE1D4FE00E935D2858 3733656C79DD1C174C26DD97D462B4323F33B410DEB64244095927C572FA90C6 4C8B709C5B7E4386AEB936C2656B59AAFB74F9E40E680D890903458CB1B2AB8E 6E629F88B51546877F7799B99DECDC13638E2765343988DE2ED33279DEC3FF0E 2255A734F5925608991F068274CB1E5301C5B8623C5878851857B3E665490A7F FCE5A8DC0FFCF3D56BF55E4AB2ACC6743F52B59C1343A1C25BD46A6A3722957E 24A6F4B970A594F67A09BADB6A7B4BEAD3FF97D0734470750FCE29807D315EFE F93BE16F39C0B59D107D1834FDDFD520D8A429FCDCA408C79DEB580081191B43 20650B5375AECFC2DC500E3CA934AFA3D241FE7988892CEA42C8677DE18C43FA C3094F8DCB1D070DE0D32B69E2E1ECB4A82AD9E38D889D05418DF4E3C398FEA7 BFE9B364A389B13BE713F5B2553ACD16C14AAE521B63E8A7DD0258EFFB95646C 18226B01D916D41DDB322F6E83C3E3717FC113BF7D7AFDA2CC03B8175BD7DCD2 AEC82FB156E051F2D87B9F12F81E1F43E822EE27219758B3E237AD772E7B1DB0 19ABCE7BE6A2FC3C7DA0766FB82CEDBAFC19F7EB19C7448C1719C88FE99BCB73 F7DEA427FBFCDF4F00E0FDACD080AF068F7A1CDE18315BD694C60B1DC71DAF1D 1009AFC847156F96D9CD38A764D0EA70E5E9B6E19A2A0B80ECBB84CA44C137F1 4925EF5766F00C22F967FEED8115BFB080B2E13010E6D0C16FE49DB5DD70B6F2 B2BBCDF710370A14E4B419371CF255F11783A875497398D5059866AC5A8D42F8 C864CC60067A997A808F2F607F0A2A7E468B2E8E763415D55A92E543151A94C7 EFE9FC9B719148E7F754B8404895FCCE83EC50163DBAA27B9819D4C64D1888EE 16D4507B3BB0F9DC7CE31CAD5B84A02CEDB67BE34032A62C6A84D9BA4DEA5C65 1DD36643371D0BAEBEC7D1A1F920D15628C16E6793780FCADB1DF5527B597FD3 FAD5DD7FE9B65B35C7207A5F9A501ECBA1C6E908275A2F1490C4465D71D4E654 E34E33A8879E6E1E1C2D2C0CED0282D058E2997B621F6D796CC9385ADE2F08C9 BD32C9A448773697E3B916313BB4C7B4F880CFCE823CA5968AE062DA5102690A 59E5AB473675F8DB599319665AEAB7B258021C87C157A07AAD095647EB850426 B0C23C49395CDC48DBB13D76932D63B667CF035120BAD91EEA82A5E5858A463D 1D1546B67ABB40632DD64D12C7D9BB515E7526B5AAE5D7E6344DA0AD7947C1BA 2A9A504B2A0A92D648CB77B08184D56DEFCA72130213E9E9386A9041FB958F9B FFD5618983399D0C9F7CE2061903FA8E88D69B4ADF316B992FD40ED5B195E4AE 88B845F7FEC3D90C2C0D1E8CF78EBE55ABDB3BE802B2AE8F89259944B1272B12 59D760D7B237396DE813A41D27D4E2D6E2102C7FB130B8642096B3D28A95476C E58B1AB973D053D8D326F5791F6820B9D0571393A637BD2EF39360711B7BE93F BA3A396FE9CAC91C9BFFF791C452F098730BF46E36C97EBC06E01D63B18E4C06 758C2B1AF6E37CD04BDDCE1EA76FC1212E6BC289D87F1E8867FEAEE5D80E1316 0318EC6F8845C3751A10FE6C3304EEA131CBDB934C09C1251375ABD7EFDC5589 40CC9121FBC90D8BF6EAA19B4AE92A79516C2BFD8D17DFF19057BCDC87EDF896 0260F22A1C20D8A223A6725C9DC9B7EDDFBE35B4D7972899349AD8BEF0181E93 79C2A1E2F06106524F2C46C953E4BF7F8AA47863F6B47A88AAEF32F1AF02287A 44190D8CF1B2A6E1396BB46CB40194F980D0C6409788E3925D4810B3484D458C 5FFDFA02A61D28475F515B0DC938D9103424D049ACF1D82297BEDC0670B1F871 F98366F2FB38596340CB8387218CD94E7A3DCF37A7928DC30C37BFB09CDF6547 ED9CF46EE6DC5B5208F7F6E96BBA0C4F03A44E9C2280CA2D663CB06A29B7BE32 75B64C93AD9EE5E71EBBD22E602F38CC16B5DF771D52B18A41C484CC16E40E2C C9F1EDC70BD7843A3754B08F4D403CD694F8409C3C62FD6905D1FD5E059624DC 028D183288214810106DE9470F037FDD15E6113A181DCB5104577F6255528E6E 2C07E9AD472351050F942D4323A5ED11D9378E9227FAE260AB5109DB147FD724 4018F9B4B87C9013FAA1FBA84BF4FE1A22CFF901CEAD1600AE4045696A667C45 8C7EDA46DF040D45D1E7FAD11510C1BBFC895513091C9B89611F16782459C931 DF7312CFB64FC6960F53FDB47066E706833F4AE63F4970CFCC6D2CCE1475D2E3 B44891AEF195AB239219B07306974AD878CED91BDC26AA18C977745938C14F8F 8D31B1B2C3D7D953667210078B00E1CE0582D42FF74F69655F8DBE930FA1B658 C337BDFCA6A408E5D88BE127DF83324C12F0E912C8058DCA329FC6D345DD0D66 FD343C8630DB56DE77DC6C788B8647B03BCB60B33A8A2C4A0DF7D8F8C7ECF046 84EF05E565441D9BE7E935E0B80DDB2072D78E1B8D9383E1D9E34140CDCCC084 D643479D574E42A849C517542856C40069B5533342E66140866DC0E68EF2DF11 A4C2F423C43F880E25E6917667A4E60CCD06A70EE237471F73DE500676EE2693 6A87031668908DDB0D6EB35F45E0DD047AE9B8B438292A4B46A2F8AE21B0C003 3C96C268E521CC3AB6A7D7C2B7B4EB7AD9CCE6812D749F1445878EB2F790DF4C 8A761DDA323E4065084FE742764F95CE140A8E6BFEAF34C7EFC62A27FAAB38B5 CC1E1314FC643C41F0159F8F8AA0EDE8F9E97D0E7E0EAB677E48D5309874E42D D1631C96973EE0166A46509E3379A0E1387C5AB28E107D66295E99C3EA9504BA DEAD9D3DF5826CBF4D50651FFED6B8584224CD65C636100842E77BC7758A0C83 54260DD59665861AD0AB90BB5CB6E4E259FA29C8EDA86F53F6EC2BA552E909B8 CE94515E699ACA13610309633CB2F9FFC7C75E65CCA84C2982C8F006C4E992C6 F18BF2228C3E5976922461397BF82F5E0E8201E8110BDF9F291E5872E1B491B8 E1036CABBA0643074D05B42C64EFF1CF0DC40BD64CD6D198E7D78143CDB09AE9 F6194F5DFDA67A30B2D13F69CC348CC8F8ED95AC06C63C315535265D187A855B 2C9B9321D20B82B3A8E52D6882C516AE249B0F54298C45BD433384CF186B0EFC E23A142BF2456B2641B2FD85902615BA7500270C823665D2B4491E2F19BAE0E5 E912AF44B028A47D98A48B2EA2943ED5F86205630DB78953E582DA869D727439 9B115B636F1DEC5AB2DADCE2951532CD0910C8BFA3C261C08EC214B03677DBF7 94DFC2FC300A2D2306CCA833DF9F1E872973C9D3066E05BFC838D412225B69B3 A9B39695AC4C2085E63191B42D02B1B888302AB1FAF3A156729225504FFCB32C 66B92698BA15D76EA3407F159510DE0E4C4EBD301393BA4CB5DC9F092DF5886B 4585B1C3EBB8F640127AA41F50C73AA7CBEB106B30741F8C732C61ABC34BF467 6B059E918DC9103DED83DBC99A9A8739A2193C8391313133F3D1F40C46665A74 F901D02B31ACEEE15D3770D379C0E2792DED4719E878C1E449853FA9B6694F5C 3720458745886350F6A106EE57E30F7DA0782DEA54D3C84AC2B9105B4CF01BED ED879DC1A2753A54B36F598256D8F10BC43CA90E88C228D3FC435DD52650BFC0 6CC3DDD8F9328828049064BB713667FE3F49DA4A7007A44FCA8D1F9E7162D8B9 6D2152FC911203E0D1C645FD1D0D501CBCC9BD980281FD89D3AB10984D0F3476 F8311A44DD6E4C54B8E77BB293BA49B899B2D3046164FE5A1EFD37CAA1EE1530 B3D507B1397E32E2D63C35A7184987C45292314D252220AFFB9566231C63832B 3103794D59AF0424995A28585DFFD3705D46D3B7A0EB6AB82831E0BE23857D43 E199018044E08618B131430110463DE01F0F8136BBF6829BD7BFD6DD03A32052 314BEE0BC1436A6BFE7BE9E7E1365A67D14C4F689B67E3235B998B5BF235E86D AB7966CF71C09877B42A7F36AD2605F3D3AB2B7406448510FCE10A1C9AAD2838 09A980673DC2F691000E95033D25D4E86911E558C794393920E87277A70C8E10 03D37226653D8C7F5341B04268E88D7C0626A9FA0C52498A3C09CD84CD4A9EDE 3E21D5B67D650CF75E1D1339BF0E534E10FCCA22B079BEFC5DA10F4BA6D0B44F 56F4330C34F352D119CAA3F1A37F0BD9E74FA882FC7D9B20A36F971AEDE3149B 00B8C6DA1BDD7F96D6C928728272F64C9DF84128BD461832DE08772D75BD184A 248AD93C070F748DCD4B9DF57602684498B8F3F9941662E6E0CBAF855EAF7FB0 3C3B74C9FCC271DF42EBC4183CC4145308AE2833D63C4A7C31FF46B931A904B6 16E780EC19DD0C1EFAC488BA5C7768D7CECB995468E5B466948B4D6F7AE911F0 A647C5AD30BE5BB966B2ABC2DF01D1AEA67A0191C0316EF9911A9E71ED7858C7 185E20048AD0827748A23057C88719DBAE181346B20AB9759EA1FC68AC295639 27A76836DCCC3EB068AF236D7D52DD54CED1D9DD37D483D8905546ED44B2A0B1 10F338449D18501A94A35313C18F6AC5BBCB9FBA2BFA67306C1B7734A6C80FD5 A28444CD1EC8848E0C448B6B35C06ABA61024908D697C9A5935A3891F405A014 A077662F44C9BF8FF45AE6A2D7D395137F60C62C9742D8F18E18CF454A15DE0D A4D046A725A765CD21D870EFE380A093729A3AA10151ABA5E604CC5AE32D588F 51715481185BDFB456143D3F6435A866CE66370F1692713548792898540E1C3D 1F204065AC56CA691D5B13B40512B7A213BDF4B55A15FA1313133D437B12FCB5 D561A428D6D9FFEDC446BD7D8BB03CC918A96EE832AD6B714E2B480B4A7FCD5A FDA78AB2D0581AE72D8F65A86D17AED8B7D3958ECC5DD9CAC6A1281C1F3024D3 948E617A5D2CC1AB908A3FD29AE6854F20F6683C16D0ECCA06E2E2F68CCBA1E2 E093FE089991A4EBC5472F9EC97BB3D3D0EC3C7EB7450AA2BCC6380147BACE0D 8C37D4429CB67AACD384464FAAAC4391074774D73B832D908B040A736CC71F2A 67298D8EB3FA5639CC2E2CEF25F673C48CC84F8084C53B39CA73D17F789F2E3B 72AA059EA4AECC617453238CF238DA50FF5187A4AB7A781EEBA57928767066F0 00391C189F08D072B84741EF85F229D829C55D7DC651A1C0AD3ECFB9711C3F19 26BBC798B664994364307A0B8942537E35386A12B9B430374912C87C5C61B1A2 CE0AD02B58EA4EE582F7E24DA3BD6741EB30035DFA07DC821CDAC4FD74918BB1 8C3F297A928E3447B95449E8049775AFD61BA35FBFE1141BF65201E85600299E E0ECFE5A31378F4BC50507F87F9626E292C57B7DE9461FC1F9C8BAE71BF9A571 361B3EA5642EC09E5797CC68839A93FAFEE40454C16F12452F36D2F5045749C4 647D2AEA8ADAAE0800BA072A824F23B32E47E5ECDDB3DAFDBE1EBF6B4EBEF514 6A687E26DA02755284A872947E06ABDE6BD002DDC4672CA57720FAC335FBFCEE E7A43E0E2F486A6BEA918E9FF2FE993ECD146E8219B44E1FE6F17FFC181CA004 2E22BF7EA28BC9CAC943117C0364FB1561A10E891E3699E233D2BEEA94ED7B76 F8C2CA092AC326BABDA72E39066CFE57907EC4D8CC0C81E1CC38F57DE8A85F92 951BD076FC72A6EB54BB895DDF9A17455D9E39C84DCE7B6BCB13BB0FDC1B9416 EF67335685F5038DDEF067B58AF3FCF43EA8B9A5B7950771A975C3AC64D117B5 51310909AE772E0A565D422493C3E2B5187E69940FEE51457C0F4DEE3BD19855 7D28F4DA9B40290874C703E04009856C478282BF324540231C3462CE04374DDE BAD203202C9729299E4F52F0A0B9592F5E4F4BDB6F6B9280F4CFB4B7A328584D 153002B810AAAD7C47CF446440DB90EC35C1774788A1D408704AF898414DA4E5 F4606C79B512D7319F3A1FA6F2EFFDDEAF19F29DA7A70E91B98F310FB0A894F0 8D7774109BC2A86B0ED87907A8AA112EB2C57F7F0690EC279E8EE6F5B0A69096 9B108A4623761E3BF94D9DF32EAF425075AFEF7E338A4D92CAABA3F45AA5E397 6E6797A2F1EF72E7623D370013E0AC0AAC4011170FD5B419B0F07539AD53F261 C216DB044609AC114D43424662B60C3A36BB4A7DFCBBCB6CEBBE1BAD972FD44C 30814D0B88323556BC8C9B248912346A8C20B2BDAF4739787A3E4B26FE6F4C96 B4A8048F83A881405EBBFBDCDD8EEFCAA90ECB2B7C29897041F4F417975242C0 01DD1CAE267B4BF09E7D80C7224B8AF30D0B51C7D8EA069FD4227AD496CCF52C 8FDFF0585B16103DBC0AA5C9EE95C4086A079E7F73C733F95174245E5B08AC9A D958188E395B9848C33F113CDFF0EC03E89789840A5620C8DDF516C43A860C67 E550EB1FCCD9EECACD5CFB92E6FBF7B9F779A3A9C81E8ED736C5B18DF821A463 CFEAB8F3EB625ACDD926907A931D0BF9299AF7D760D60D4DE6C348A6D54638CE 8D523918B58C09BD36D500453BFE425B7C86A9D44F4320F8FDF892470D09C478 29B81CBBB3D78E3851D0F9E1E8BE6DD822DB5ADE3E342407DE9525D8756661A3 B0F8A34BCD806B6B7E798CD4439D9CF5B3368636E865DFCF0DE8D4A82DC3CEA8 8BC85FCE58510F4DB686798DF1615DB887072EB7AA92404A6CB773A1D41C38AE B2F0E89A37C4B825295D2F1E3B95D9A87F3A949291357C24C70DA005ADD22499 E94D7EC59D09982F1751A3AA091168215D61A50FEEE4E6D289A8A3552DFDEF2E 7A4030BB2484323211F45CC2CA0D8382A7F157A7554221AEC495235586CD1D86 D709C75F342D3A6D12F220C6159D267E03D14DDCD43AD7C518DD0DE20D92D5CF 4A99B86FDFA77EB468BDA5E9155C38FC3C37E466070D07467E706C0031A83162 401AEC25E206C127465CD74D9CB7092C89A2E8AA6A9433272C99C572D18FE988 237A7B6B2D8FA5563C77C982B3BF82C733B23FB96AEF5782333FABC4A72B6A07 446E56998E644D6C38AEA46D23AF95147649A68D74FF8138C7AC5C7AB9D013C7 F712B8450DE638DD777287725B44B507396ECBF8081631FC5A35E9B59D2F41CE C394F613A02DF33EFEF8B170770BF63E4BFB3DE5FE37B58495FA0CD01D35002D E605E8278355DE31AE1869A33C02AD0C13E2E21ACE426C472BFD2B6D230EB1DE 1F5CB9794C7CFCEC864A2036491DC59AE25502B605871C8891BCB1C98A8D3D8B FD63F4339B21113B83FAEF54536990A08E5DB2D8CCF551CE091BCC73EE4EDCE9 60F7A55806AA8CD3C05924D7EA95BFAB996C5B8C016F63AE09B4BE30BF1C06B6 05F6B780DCD74B121354F7577FC5A97553471B682C133865063771A1A39E3891 AD1A8DA6443B519D9F37642230E4DE1884D783C1E204B344D83D1CE7EA7AF0E4 5BA48C46CCEFC274A3FD636A4681D45D22956E610CF47DC5758C06251E59821C AD3840294402F57EDA60865F18F24F825CBCF9F2EDA4760A6CAD84F1194B7DEF F3782C2CBA6541ECD92E79F1E2484EEFAF628883F867B24BAB7CEAF7C0AD799B 20EE4C2877CF070B19A4FB722B0D46D70A119770167DAE0315F4DF8C5B42614B A427557C23279E303798BF50E9C7E64B334272310F93AE16CD83AA19B621CE0C 166061CDA3AC1755B640B2C34CB4B9372F4C7B90AAF344C39898B58877D80242 EDAB48D0A5AF8610220FA62EF4DB9F3022E843FBAB429684E28192FAE629DB16 C2FBB5960D7B6893D493641B1634CAF68818FE79D8FA335C97C5076C8C7B0DB1 33244D1BDC11C4A26CBFF6CD40349796340603B1F3D4333D8927D4304D89DB64 6CF452B1658FF099EE65B7917B2D35072A5D9813A313077127D59B2723D8EF5F 03E5F63D738AE6FA4A2608432A89C988C7BAAA9347488B0D136AE3D2D63A6CB9 92D3B1743535238126FDE906898BB39033B27BC86DE476F8588CF3FA8DECA8D0 00776A14FA0B6A715485E233A642DF7E50D79853BE23923FCB44E8269CDC11F0 B61B497F4AC77B3BDB3AD3DD69F344DF7A7A30F61BCA2B16B2EEDA69D601999B B3CE72FB87345B1E5C20E4B7FA05DB54DB39F157ADDA78D83B50E7D9878EA31D 9144E642EF2EC36DBF981A9386E9E9D00F3B48C32CD5040D3A7C1F4EFA0AA0E4 1EF985C14E08F82F534BAE9C26C63FD893B25F0A7759A54575937C1766748187 22231525983627FAE4D6C271D5C394A333026DBE59DD607BD251815EA80F30F3 EDEFA6F029694726D6EC45FA94B7353435092B30A9EC2BAC7F7C3A9805EEF1B0 2C5B63E331D1ECA5472BD90948B2CEF4FFD44345978C8CB9A642A55289CEF6A8 9D5633340C27FF137AA356DB35072295DA1E1E393C102FED3AB0BEFC13A597F3 3CFE7A1A3F4882C299A1C230A720516ED8954CF9EFCD949132DC9B1EF60BB4E8 0DE5199C6B2068C60CFC3818491D2626E1C17ED9BA5F0058DAA124461D95C94C 0EBF9EE02C607C154BC513FD5F6FD7D43D9134ABD9BFA9AD7CC4BB6F7142AF82 5DFD75368D27705FC100878CE91DED6773465DC85D92D08DF511843DE81FC1B9 89B16CC0A6CC23D5B27A7C3E246BB41DE6EB509918A670F9748F880C9FCF40E7 E8AF251371C069262F5C134C91468BF4133472B3CCFF72BFD5897D878C00D68B 2D0D580EC387CD55E95014FB61935AE9DA210F01FBB4363175F6895D52F4A8AF C6B98683B98C3EFD7EE504549D4B5B453AFA537AAFB45E6A2C757A1ABA391E96 FEF9B1839F9C461F912493B1BC6A7EEE4E2A6416C7C8E9115F16580751100863 F227244179A61B86BD97FA8828C41C86D74E46759B6123CF3958548BF22EAA23 86971344C7F8E92600D0BA1187E79FFEFCA24E4F705A0CCACC5CC87C263E14E7 718C0ECED2A48B18A47515A0B3142BDBB5FA5B1B0F3661278BC593FAD639A69C 1A966D458122FDDAD4A083C99C193A7776DCA8708508F7536F69E4C3E50E4336 749E31E2BBF774E8E8A658C9DF91EFBE869AF1DC7D60D8BAB38B6E3B164418D5 1FA58E0C540E13C183A4AF3E6B5EAD5D518E3C98860E4A15315C595522223FD7 D60ABF07B81BE54931C2BCAFF4D241B5DBEA9B0B11E27304CB6C01F2706794F8 83B65AF2A7279CEFB624D23DFD1E8DA18A97D3FC6F535B60B0D3027A4BFFFBF3 4FF6E25D0BF5D92E4F6EBB8C8F307FA68AD64DF34F6E80B5B84E9915E4D8ECFF 4F7F58F87B3BDA6639CEF02DD76A8D97B22FA4BB63DBCB6E1D1975DDDFA4D2D0 04B5FE8AD6446CE559C85E89A94073FA7884781A274759915B345956D04213C9 1543ECB0C495912096AE8D7770DC537E9ACC34B487AF9F623E5F821383189B14 5956F83E24C5885CB74AF47EE673C8F117F48F3655889CFACE67235EFF50DC4C EA0780CF2F9D75DC31ADCB52B299C70222E68954532629016AEFC29082CB66A7 FEF76478153AD1F255AAA0E0C2C1AE8C57319EE6AF4700DCCFFBD466996461C3 4AA1C92C3106D72590C137E382B54990353477C335A394916D70AA0B1220467D DBE753D073F2C1C4830451DD212242A5FBDAE47D2348A0AC0E2347A465C17A7C 42FCFE2E2D660275BCDB6450FE2B0289404F77C150D4DD77C484BAB86EBA0FC5 F6D3AF4DE34340E353EE7ED652CBEB293753AA2A01A204BF5A9C06B8895F6A5E 3987640CE4E6ABB22584310AD714FA605CDBB7DDDA2E640F890DDC8331CC725E 36E8294DDA35DC051B8B741609B88F35EFFEBAD853BDBA583326E3FDCF7D711D AC82860F74773F6FC2895FA40FE7D7E8FDEB34259F0091A294CE9894E3124EDE 867D21A3688BFB611162165FC9BA4CE81699D37327239D248C1AE27C5925E767 59BC1E675B428DD544EBD2DD9259F0D11884CA890348446B739F3D57EBC10930 6D83E66B6287B940F1D571E8848AA11BEA0391CABF893A246A2E3C4FEAC7C587 75C26A2ACA4D93C35703341295B2D219C9ED7FD783290055098B23BB466BCD60 1AF0206D93660CAF21A22E28732C229CE743D2C665A5BC17CF97A52F2DDD4CED 02B9D8CCD04DE347E31DC0CDCD3CE2B6FF6C2A35326F09D396425DA080F074A5 57459E0BB588FC51335C53794F2C46917141993322C73AF806B60AC565EE1BBD 3DD16320F3AF4C175913A0759234C157BD0670C87E6B4C2D2E4294D4647723BE FC16FE7C1D58D3227B010BB082947398D733361C6976CCA9B17B818468C1D16D 07B117F9574B9BED29D0748079A7B5F2B7EDF5BF5EDE066665C013E252A776A6 E4DC20D3ACBD65511B678BE7D815B45D41326BF5F3B7C6AE70E3520E6F513E01 59E17A56DD18136F8B879034A11002E75E360F2D33E9F0CB71EA8AE7328E78AA E43D568DE7DFCB490C04ABDFF6B465070838639A1573544CCDF1D044E1C62D55 F54369451480E901200DD55DB675033D80BDE8FFEA852129AE472CF6A443416D 2256510180C44D95A80A9E96348644CFE5C0A6C7A941C813B2D03130FAD25E0B 4E998ACAC484E17F4D877111A7507FB6F654F9FC8D783FEE2E17AED3D0EEABA4 1D22A86E322580A50DBAB9753795078B70EB3397EB5455B1B1EB9AAE392338F1 6A15A109CDD9AA01C72354052D77A4D8354BE9D1FA5962A66EDC9C275421B241 5611DD5CE12E2CBF8D5BCA0D6B7FFAB09F5791D5CD9FC921B32AEC5F8276A854 8AFD7D6D4AC084926057B77C7D33C4B88296BCECF7E31C15952AD6BBF55E865D EDD33E6C7BB7E2822B1BC15091A612E1DFC30872CA93F001916D69E932200AD6 D5ADE0291CBBE5996CFE8A7A31C1AE4A3253F3062952F374DD845B942B4C3B39 7DEFDC683A049597365893CB5E39B035E8A498B1E509B50D534D518F49EFE24C 5C632FFAE449AF1787E505652947272FA356978B892E86C61310E59B3EE2355B D4D042B7D0B9193B9EBEA78B7C2ED7861F668986DAB7CE44E65A3F02C857FD09 D87BE1E0C49E6DDDCF8D64F78D9F62359A32818C729FD89C7F681861543CFD11 36BABD668D8C008433952B698525619DE68440476900EA6AA4A7340F46B002E2 7A61C07DA0252B8AFDC9016CC0A2CE3BBBA2A27114E8CF2D75C0D1812FB81419 6472CE342E2E79DFFA1A2DEE15E936ABCD755B182840931FA235AA417EE54562 C5B6EE80658993BECB9095036087C668DCF2F19583948608EB4244BE5EBC8BED F67FFF26A991DC7DB31F3EE537791731AF99BDBDCC41FF7FA1359D8F3707CD06 BE93AB5D49CE66DE3D996A98928404163ED3643301DD9410F1A640C58A99F955 045C12D6518C5A70D8171CFDE6198931B5B19C52E4A23691B733815C460B0175 726A84D7DC5C9E3627A832C699A405FB58B6B76030BC109E960FFED50B435CCD 819C5B306B99463FDD5A7E00D0A6656DF0F45EFB0269FBC92D9820B06836026E CBC7B7E7AD4DCB16E900A34F29A0C322443719FCD4099A7F0292B1B54A243617 AE98FDFCAFE210BB33BE50315234EB18E8CF42CEAD32ABC4E5FF1B436848321B F8FB649C7AAFF78E7EFC909228AA31415B24354D0609D6588605D0C408F88B04 07A197F574F0982747CE5E04BA543F40AAAA77FFAFF598D559660C5BDB168044 919150671CFFBE6B9D5C4EA33611164F276B8DDD296D05B9024BD04809C49896 E189AF67E41E572B1B1B34C41113E0BF14CBE3139771DCD4306452FD3AE11413 EC9233D4EB04B3C2F6914D39E4E388B777ADE3C4E33EA65FC02A0F3120A99B3D 9ADF199B7182D9E0D0A2FB3564D618DB9E4BF7326014090C36353981044B89D0 C861C286B99BBA9B93FC624FDB9347C10AA5CFE369A6C5C5D5D6B6149BD4562E 7E0AD5786F0F2BEF4A9603EDEECF02A6FA8C83E4AD433C08EE35FDD002CEB156 D3920DA840F65F862CAA1990942C3E39238F1DD230FC92A7A0E2C8DD99819459 8344EDF1891ECC380CCA616732BA726FA3C7248594917ACD3BC463D2D2D7918C B511D8852F8EB43D3B041FA363E275F2EE459950A7634E97F350369A3C357C33 BAFD48FD9FBEC71FE46F0E63A4412B3407ECE19393688B1DDB7F1F058F25A249 11528D12A5BDA64E8E580E8F5FC4383CC0B6B1BE90A56EFB166F0D3FC8D55C1F 1D485224952B34813325D367793E1918720760F58A613435EA4AF864168A2873 2632726F199781C6A1EDDCBDF18EEF379086CF14A65E37D4DFD0FBCCC37964AE 9732073741224D6F74F37C7DF0858E7E063444AE94EFD9C05B8D32EEBD647ADA F3B96D275346C2BFF95DF3FBC9878D86DCEE7A26E2DE175D470DF259B3AC7905 5A14E1A2080368487BD65436CCAA1559D1843853218B6CDF4D6DC0CA2A98790D 3F3D963DCC9A2B37143EE628A9A050F5854B0EEB8EB3362CE191B76772969953 3C2EFDDCFB89E1F2016A251B4C75EE55D046A00781AD548969983AFA20AC12D2 1D872B58BF45017DACA2005A38861A01E91641E643F1E149F827421753BC0C5F 55E5DD9CC4EAB4E073EFBA0205F8F310DA8B6B0FFDDCFB288CAE132925220E3A 8D9BC6CC4B6B30DBF35FCB920BED967CD5EF6FAA6FF5341ADC97B6224FB40874 E9D27C1C67CD39AB2589BF09A2EC693F1D9A2E7AF0CD2BDF0429E829CB9F3EDA 601DCF41B1AFB569B8191183317952C3C6DBC808423455032104E3E435043FE0 3050ACDEE662436FAF0A4241CD9CECDB3B836D12EC1625A682525AFEA8705DFB 51357A737AA90E5E5FE28CF2D3FE6052EF60F364B96961E085A2A2711A5EF45B 01598ABEBE206F900568CF6E79E9B186584B1FECA91FD309DCB85584BC304713 D3E9F3219F4E5AF0D13F6FCFA5F9CE51E99EC6CE2CE07225DB38B3F27DFAD8C6 FCACDC88CC9530C69ED55F0C27C45CEA53B34D915C6AFE236A2CEB33E7884BA6 590F333C00541DF68BCD419BFE7E5F410A8B54FDFBCCE40872F1216648897F2B 42621B68400E91259DA4D7CF94E98D2596D9D8D2D92A262942574818D8E2E330 46788DB160E8FB25DE3D311E053BD704323EAF8FDD929FD7B3DA8EF9C6F97AD0 AC2B90722184C0FE6B75E11B85C79ED97562708747F00727A93BDF07F0ACCFFD 6FF186793BFB752F24B34343DD9ED33F4A0B9A26156609246E9C1A2C7C2C6584 CA50771CD9A1C108F72D7B24EA95C7E7841769F9F4011DDFE85E296BAAEC1C8E D1C42A4CCF792B132E3F706B30584C9F07B7BFC52C4FB206CEBBF249FC2B2520 43B90458408A4DEF2C2052F0D4583B1EFFAFAFDEA8AA14DE5332BBB6FB6CAD36 560D4567875BDA4BB9E99048B4C21E3191D363E492D88BF160743DA7E618E22D A306BCD9B9EDF1E0E8DB6D7252344F7D380C3249533C529D9D2D86A01FDBBAB6 57E77F120B0B25A3F4776FF579FBB48F4DBD655276A7D8F6108079E68460E973 92F8BC1A9BD3230290ABC5AF7B8DDF9E92CF8B599BD0997BBD082E13A4180F50 445F58010B35F1D9DB0C0EDDC8204BBE7F9F67E32EA0377F8B05C933F3DAAC32 DB66BEB7C7A66E90462202FC8869105D0CEE0ED08AF4566AAF97EA6964CD7BAE B6D4F159C99A8134019A1D2FA36F074FAF6E107F7767B1186417503CCC8193F3 9548CB704592E1EFF92979C6824E45BF418FFD22ED0405BBCFEB7349681CCE8F 0C2C2A2440221A2F3A446968ACA7F86A54C0D9AE3EC0AEE96728C8DEFBCDAB71 56878E891FD2CFF4B053D720C0A2E54C2839D5BC9FB4DD4B521F937A458AC6DA 7C7A423128612CBDAD9724987B49B3A4C95C8DF60AE935B6ECC48DC33282B85A 5600D0ED49ED36D9DF07EB8252C890E470BEE74B058445BF075803C22C632259 3EC4B9321712C02AC67339ED0F1B4A05DC2D434F1DA82004CF872C4FEBE98B03 DF82ECD21DB053B3A88E7C987612B72CDE387AF95D8E53B2648FC16BE593FD82 81F270C046D931EC75E04793E31B336C8821AC13770706234DC36FE15F0F589B 4E8302EFBFD496BFF8754CCB507D7E44F9D65382D1D1262CD7F2E1543E4E366A 781A35D6CBC44471833E188BE6C3FE55C2B5B5A995E9BE8702E84E9B486ADFB4 306D577B80DACF4EE0E6E53704CE412A663F5128F3D9198E42D3727F015F8746 FA59999F8B23F13E7F5577D8B87DBBF845C9BB364640B0430BB45CE589C832FB CC8581FEB9998D732581ED44E4C9343E75DE7152CBB1A82A7901985700BB4F18 3D2BCCD607F7727FB0C3F9FBD24BF54CF5C0B8526DB691AD4C5F6D58873917A1 6284C83784611F6425137F7352A6B28518D47EBD8AE8742621CCD15A7FB22081 6783F6F3C6DEBA05E706F6D7DC924AA486214C2BD0527D2DE6224366BA1C3EFC 7B332AFE476F09DFC2339B0FD1C4FC2F89B4EC6D2BAAA906DD632B7B8DF16F17 6E7D3D48E08383575DC8DF90EA5A535B988DE6D9FF1A7FB6F3ACB2391C028076 DF1B20239C3BE9FDCBAB3F3829263502B2D0645E92A9B210CFB6A48B9520D8B8 558EE5AEC79E810C716A7D226421C6164C6D430C26D99F98DECF4CB6B0C8B538 E59E0CEC1CADFC8904579AECFC27B844E67EE69F7E33D6BFA7A55D8ACD95C940 DF71D0F73A580295F227FB62D963EB3BA0535FA588A146797B98E0CD78DFC07D 4A1A7DFF79F026BC36D6655BAEECFD0135930E9BAB7E3886C50E125D389A0486 1665B29C6C4DAF45978E057008C48A43B9D056F4242553FC15D412866C3B686F 7FF6A1F5E3848E5CB47D05B3AF480D7CC9F0EF27CDC9C9A65B4C6CCD67DB4952 57D1D498A0D9CFADD2CF08A979D5927A76513650814E6107BD02FB8AA27714CB 3E03664DD4F4AF7ED6EEFB0D0AF1646774700DEF8B3233695E593E16F8746BC4 1FFCD34E277592D3209C1EA874517B7147C6051CE074549965387D4F2257C76F 67758F60A5BE309D5D926AE5644AC9A1ACFE3244339006E5BA863A0B31302C97 475E63BA6C82030D4181CF34AC1FB341B91D873B66BAE1C9F772459A03819B04 B14010F3B937C053B178470D00612DDFDE6C11DAD4D72C59DAB482A0A4A7E5E2 13316D0B8A76423DB3B57D04D988D07DDA44580F866CB90F37B4BC8AB7EE8327 54603AE171B6873B65B7C36424130840FF9B748E406F12359B69823DB43341AA 37BFE2A3D53B2F8C9FBAD19E959A76561CB51A6DD9A5F33FD8B6755C466C2583 4EBA369177B9B99D90277B8D4527FC9344C671E47160C75AB2A6602F6C621542 D56A7EEDEFFEF1835B95F259598DEDF99D5A68533BD3D76D75B6B44634509595 3EF3C7B9AD3DD363466860AF4A29C50F08B2374BF293F1C96A99E02030AF6BE9 2EA085B7434408E867EF3835191A9E6D182ACBEAC4B4F0005F00D855CC85CAAE 93561F199BE810710E25D27BF0C62078738798630F1BA33405699B6745BA524D 9CA410E989AE78431BE54C17B45A78C317A5DA7AD120BE04D8CD34F613E2B7C0 127BC773F89767660FA7F235A8DE4133D7BFB71E9D757593634840C593DE53E5 C0743FA8156B352B55A30C3258B7A1BDBC3E4602B098FFEAAD47796F977770B1 D2C94E56530FF57B34A7C0FAAB546C63BCB93632158935DCA4FD62E6C5A02619 92FFD8D1B3AE29E0D1D59CAB8DD1DE7DD1C7E6B51F8A908332222EF7F5DE5710 BB7FE41C7561998568D133DAA3471DF99C72DE5EAD568EC41B1C3C1E8E547AA1 45FE39DA7EBA28B564F361C830CD5B0F06BD7C148CA8BB639F1D7D0D0B727EA7 91A503CDE2662919E4FAFE13C31EE4434E5C7D6E86F0227BB8F5777B311FEE31 3B7E242FED9E8986972E6FFFEC9BE6681C7985A0DDFB05146C0E541D74994BC9 B657DDAF7AF5BA2C9078541C5C2F79CE171A6BFDDA22EE66EB694B5240DF5BEE 54209404CFB67EAE7982BD8C94AF63BC4198F55FF03C9485E8BBD86C34F22370 1FDD388E13E93AA12FB42E2D31DA46BE0B73C48D9152DF6B37B92D8AF5A03AA8 5798DFC78DE82085D19BA666C61C5E0DFDF0C4F315F71FA060F6D549553EE4F7 1FAEA87205A1E8E71F6C5D849A34A76E3E3E2F249DAE06DAC365A32E8273EDD8 29393A19EC92D2FCE7492C64FA353EFEDB7B93760DAA33B00E93A6CB3631DD77 5F435ED013A71685CD8C8CC5CFB8F102934717C04378905789E5BBD9E63FC70F 533C4191054C35932F12AEFDE3D51964BE846C59775DB89EB2C286C5518814E5 F0CDF9EB59A446F15EF2DE50C224A17FC9839CEEA6FF6B56D4BAFFA53A94610C 8A51D5BF6D4167CD811F3318D70DA0B6CC2C2241F9CE181DB5F1CD1371D64D53 8C20ADBE2B06018E2A1018F72951EF8784C11076E4DBC8333122239D0572B916 74137B70DC398FF7E478691375995FFC20EC314BEF2E89E7A0CFBC291902D2DB A1BE8F683BD58755DA2B2D511AB0EF92D42DA2418F5BD70961BABB65056FEE1C 735ACA14DF80063D7B7BD3B8414095AC752987EC3F42925A4A34F66BFC081B7D BDBF818C719D7F6F63DB11FC6184CE4182E1B15AE572EA360E341092E1F92020 FB688660B96E62246C19D2BC095B814682483F77D99DB38859E0A9E3F190B278 D56DF3D3779DAF1614072CA52F9462C5C391D4A1159CE17C7BABF9E38CF413EC 2B13BB9AAE22B01EB2945D215C18461D1B5435C8D289FC41AA3332D76DD9750F 6FE3FB5B1B75BB089F445648C01C22EC7E57E43DE31ADEB573D1963F579D1DB2 F851D5FE73E6847627FE685A93F17244F1773995A27E1DC0AE60B51E33B77F8B CD980FE252785E422090B754047736DAFE682880CA677B5273FF7F14401B162E 2379FB30F05D33CA2822E2EEB91DEE86B5986B120D8DE39248D3C5543B71A081 7E0CBE1F78EF0888C4649F8914DFFF38F2B8D3BB694B54ABB34C77F428D84023 0FC2468D0EF96F84DFFDDEEED398A1EE0BCF9CDB2D037A0004DDC2E19288576B B420B38E27BF24CCBBFBD15CAB466AAC4C042772BA31E8C5A51B8D059F342B50 0EBE1AC36FA8B328A3A42EC1FDF11EC8AC7F913F5FF962CDB99F73734D71D548 72020495456C55E06B4813BE0BE76993D24134C381C19C505946CD0A4F532B26 7A7E545BF87A49E6667C4F6EEB40BC0E0E1658D9FB7268E239D61332D3376A1F 10B30CEECEE00AEA79AB2251FEF0E7130B3B13B111E11466C37C91E2796BE327 01C4794B56D387E830FA6D9644F3D152A7DD38D32C47B645C265E75589534AD2 810AB9950862E5EA4841CD6F112C0BDF94849CB10EEA4FF92EA985049BF052D6 5FF9E40FBB17D60D65BAFB0C54F9466173FBE1580862082AD9A0D61438A50D58 1D54C8BD14D14F14081619F1FB11BD896AD5D200BA3172C313DF30642E283816 7B747A5BB049B86A3F4D8763770ED4796168E2E464838AF8ACC381B83C1B254F AAD52335B506D410A261A2AFB1993605BF0E0E8ACED59DC6F51F6A1325CAB3A2 E2E61D7880C87EBA0D5A25 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: (), with Reserved Font Name CMSLTT10. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMSLTT10 known{/CMSLTT10 findfont dup/UniqueID known{dup /UniqueID get 5000800 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMSLTT10 def /FontBBox {-20 -233 617 696 }readonly def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\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 49 /one put dup 50 /two 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 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 120 /x put dup 121 /y put dup 122 /z put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE33C33655F6FF751F340A8D6C01E3 2E02C24E186BA91B34A1F538959D4450CB683EAE5B034D030186901B458D3777 6B3942BD2E07121385120248891AEC2EB33C4E3A0CF00828D0F130C31A918C18 979FE94379C648EF21ABF659253E43CD1253866F157F1DF85AE7E8714F061B1E ABA3AD094FE8D6293916FA82EE4F486C7E513A06D4C9BE44306A8287970B4ABF B6D1F9274A5A0BB6ECF713ADBD1260D5D6C4420D357FD486470A74B2F0621B59 A9373ABECDBF32FA68AABB66FAB0C970A3354A335FEDDA1C288245E6C890B8DA 3D0EB953283ABFE372221EEB1586B0167F634E3F29CADCAB484B81A243CE1E3F D5106AD6BDB1AEC91123377F816711CB9D5140120FEA84B8205B79D1569509FC 6B671211985CEF51691C45A168740BD826464B2CB0ABC575E7D453161328F80F 3AF1C99EC219010EC6C95E0A8D1909719CF18BE424967E90DF67537220E60C3C 4345B154D08F9EA684710E659DFFB0BA1B7FDDCD519305900A5E1CDA219A6C90 DF8BD712A3686DAB90344E8784C7A9AF3318550285039B701B9FA1D3A3C3B6C2 753F1E794A3463A173C99A9EC0E2AB5737134CEC2C97CD6A37E38692ADB4B131 54697B7BBBB23680C72CE96066D8007B90AF0FC5958232AB4F21826691E9874D 107F47DAC1026298D787989BD77CB43A09FC95F6997DB00D8483AE9C2716CBD3 7CDF02DA34FDA2F0754ED0968270E118DDD8BAAAA65C41D699E2BCC2556AA231 328187D2F50FD518CF458B0BA1F7DBAF4B231CFD61D5DC56335B53C3013BCCC9 85690E19E992ACE55EEF2BA7A75DEE6DC33933C226FC1494269B7CA4CBAE987C 2C787386400172AE3F44AE47115F4117EED866713BDDCA4A7AF658C49F913CB7 308635000043F63BA210410A66E192289592882C477B2EEA0B2A339F0E7CF450 CA0EF79D3A6C28598825CA03FD688DA60C95EF707C6E67CB7E57DE7A80545195 739ACBDF27069F34C9E0216C3D17CFE7A652B910FCC9B9AECC2E646809C22D93 FAFAD465DE794755AFF5BEC17160C9563B5C51D07022E2D3A256FB5CACE131D6 F4B30F591A0419D957D8F0DCAA0A8D65A8D83422AD7C2613FF13A302E152B312 3F1ABB45E42084EAC894FE335C07324849C9736D00C872C4551997DB889AF17A A52C5AA77DEB548B0103B77F65717F70B90C1BBAEA7BCB4959F32851A9882A3F 55673F24103D6BF7FB3AD3EC3CC50FD8FBB4A6B13C3D278174320713A7B327CC A71F01E50840B33D0FC3F5F6A6F2B0F2D0E38494B1C73096A430510F927235FB 69E931DA8CE5415EE88D0248565E3347353621A48F7948AC9EAB5F5057541B50 82BA955D90BBC82E582FD71904445A59186022FB928015235B60830DA59813D0 8DA3FC306C43FF8BB2CB6772B1F7BA3C1AA4B2343E7DA7E065EA53A4E5E28DC8 0790F2D5CFB203CB135A08DCC9702B59A63290444F202756E55B9FB053F773D6 0F69C63E74DE593E49186FF4304E8FA76C3E3006358DE549E946DB69431981E8 1261C9C9A884E4EC708F69E6AF5D22C5BAC49F2AE85903E3D48D03B7B97054F1 D2937A0C685D912D6D20A75A77712164DCBF8FE4D5460DACE139C5A934EEA09F B94DBF168A4BC03A9D689936D833018FF43837DF9519AD10F357F00BC068E737 170FC9FC6715165F733A0B6FADB9ABB48B845167DBE6D771C916577FC2132863 767DC6E3D460E779254194AA690983184D934F5E858C1176B3862B69B42EBE7D EC9AC4E020085D474093F7694C8A8C2025D4B0163E29320C384D62A9F3FBCB1F AB5A374EF3DBA48AC2147A207AEFE8B78BECEBC55C97B538F3A0FF4589D171E3 826342C8A5186224FEE54E4C6AD5EB02BCB4088B132FA1A48362824BEF161235 8E661DCFDFD8429C65CCEF63902D0E07C2FEC1DC2756D942F13FECCB7E8A8048 345338F24B7808E46A04A915C111F939E2669A12FAC0BA4F74B832EAC83EABEE 67E2817C058E69C2010F2572FDD15194CD8DF0FE9F827D349C0444A18D1A86FD 802BC120A5114FA3523C221242C7E767B0AAF6AD15DA1561CE8EB18A2401D71E 20481FA5F1E247CB5288F47795A6A3A3BB186E89EAAC4A54AC91405427136127 5B151203426830F7CADABDB3FF63B40CA29CF8E667E71615869978E99E6F3F07 0170EACDE3DC62DC05681D7680E2E96C30002AE34A4E5EAEDF88577601A82C36 22D625A03B0451D7BBAAAE0C396711500E94A482EA787495073F16A76D1657DC 4EA7C7B83BC30CE7F145B65B6E2ADC207D192CE3B5FEF7031F4BD64F57E1BEFF CCFFE06F1E4ECA48B442DF413766A70DA626359183A9B24C70419487423C816B 4BCB067E661E47E172563090D6328BD738D2B0FE41A0C1D7A47576A79BAFC880 0473229D134F998909898301CEF50A82B627A9A06DF59D0B9C530EC5D877F1E5 220D3A1ABD2ACBFDF1933F92B3137B22B9F95A961D93B729307749A50D8A6403 7AD0F9C40743E39B8D198CFCF7C033D99440D46D821D97545B930EF92E7AE005 27F2FC766FDD4790FD1913C7A13328E73E587618ABD9008022C5C6C23935CEFE B5ECA2CEBA1D25DD846B48423F7186E03B1F61C8F1D5AC95CE03C83B2F221300 7A761D6CB5F7F9251D3F9A7F4B25B99EE7A1347ED3059A811A82A35A033E9B07 A4FB2A95009576F48665605C478E5F6C1B135016FEB4AE6A6BE4B4359836E04D 45AA11366992162973FB6266547C2E570B8F56F6D992D2C0F63950A16839FE10 F56E59D93A37573E3268C5892C9F3358753D1FAD6379E82BE740FA17236E96F7 C53A2FF785FAB86AD17EB1DE8A6AA9C69B91C9D9B43B5188E51F6939FEC21B65 AF17DCE95DD3BA4F1DD51F0BD5E5869A1ECA7398B6E664EB0D189181E9C23012 DC1E54C146842A90909DBEC03B79B58909205F2CB2A7F83C66B437D7F7DB9781 FF0C67F004E979C95B706D8D85255CCD827CF6196D847DB380B56980109E96CA 997157BE78A4F758CE59D78158A854EF2C20099438F74777D3B0298D45BA86D4 3C0AC30C984718FD62ABA0567AF0A70C1DD41953E3E7212D5C562085177E650A 2ACD49940551E3F7619B4CC31DBF67AC15D938619B95DBF66E6D1300B1BB8605 31C4011379FB5388CA49E4A9BD6C921560CB8D513F8716A0733D2A7D77E62D22 A69B54E9048CA168D210816E613CF6357706EF6B118A1263B858B7E19AA98891 43BD675B06C893579957BAB97199ACB82C080593ECB8B66A7334779CC16E4D0D 4AF365CA6AF9727AE29417B61A5FD52452873B1D666044F8E7C1F6C6AA3397B5 94A5780F4005FB5E41698FADD1594B505A58253D68D2AE3320E22165D198050E 425820CC0A43FF1D61F168D87CDD30C14D387610B6CDB63BAA39B3EC9B3CA616 FF1CC679227749DED3DDEA26B4D97C633090DCB8D8A6E5E07E3579E4A99BF1D5 51E43D1D7F139C9CB1D76D8F693A3F23A74EFBE79F01E0B850BC6B6C7F62C2E9 859469A144853434895D73DA6BD2B348A48BA80E79327ABD96539F2EA2209852 E1BF6B0B819D7C68A9A1D0F6F39416E3EC4AC21DCD3C51D3B5B8D417EFAE165F 2A7E0B76E558AC9F685A76FEC7E3C73CD607D9025DE6113BE5D0401887A53910 82A813B026A502B51D484797D9D7E79A25B6624940AEDB4A15F2C73CA1AF60FA 22D15BFBF268EB044FAE17822511AC6580D1D74DBA3C3335217780B29FEE792D 200B00B8CD888A8BFF15D938FC758BB5CD9B3E08E1AC6CD1669E663BE86711A5 892684DFCAF70C11E803164994BDAD89128AAD6461D4558AC2ECA3E05EB56D32 0290AB16A6DF7133DDCBDEAE89C6CD83552792E23CBF567D57E46548EEB0A140 437492B53C14419B6FE7E64AC23923A9E85F56A9DF209DC4E6BCAF1E045F9CA3 BB904BFA150F4083C18B0CB5580450CDB657EA768E71222C71DA911A722AB9D9 E18B6847F417125C40EA8A0CA1F551A4548712D098209C78DF9C3F78605E5402 DA2DBE2218E49B819296D5AC88D17DDBA982E171733D1E9E295B3157C9B90BF1 CE68CB185947D1E3D7544155B741296D14B064BEFD3E6AF25C74006CF6800551 80FCAAEE6FC9105E1674EDFE68C45617D8D3E2264CD395EE94EDD017EB85884F FDF530EDF4F3F14750CA066F149E688FAF8EF4B5FE6AB515CD298E8D170346CA 9B32BAD1D86DC147BD12EBEDF6CE1E749C5B48314F512470A568C172C35CFA41 031E34586A89404CB5372D7B2C7A6D96F420D4D7C2D4C08184F4AF86B4536A90 9367598424112A7B05D7107B23695CBCD569002290599E0FF4EC5C852C31F5F3 9BD56BB840DC17DEEA579E7A7A9F764788D4E3774BD523D21267869224D68891 4523070E80A123B58F7B579866332FC38A41A5915EC06F2D14FBE4A6CAF59AEB 57E98D661637EBB885AA5D74AD429CCFF64E5149815E7350118E6385F4C74E0B 2EB474A6DED021D429F01C9B0634A09250C40E22B3BFE1B7246D18116D585F39 0E06E9B5F27A6CB77C8E9462189CB900CFEF08F798CAE15FBD94587F33816EE9 03FB2DA6826EB69D8C284AB9F7B00630D0420EB6E35E0E288BA25F5C2345C067 22412633898AF99C2FB232D1469025BF262B567F29A05F4816FE8EEF5F02BD79 06202F6A1E3E5D4B3C91BA8D5FF53D5136BF70E5FAEF441A7310CA83721711FC 39EE48BFB2FF287234B1A6102AF146B10A632A53AF97E11FFAC3A2A86BBAE3BD E0459ECF0305366078066F2CC628A3918E775E4236651B3D817AF1684B07A163 A0142D16F55D2FB5F2255A8813B8E54EF3E801E95A4A226AB8C0476AC5EDCAD6 9258ACB6F7C0CBDD298A0B816560622A1871FBE2FAEBFE697A8216A0D8FE30C6 B1BA6C3E975F78182743842E7F851064037394142AC91B2530FB1D511EB20F3F 79EDD8B7E1579D35F6E7B2883C47A46B6C1A458BECD6BE58AAFD834A7D82A553 2FE4E66878E4699856DEDE964F454638F768AEDB595A883E380408F558015FB5 8720954ECE2704AFAD4D62E8BB2657C4FA920D72248B3F762B2F12D125B796AA 1C4BD6B42D766EC1C9B2C7AA4B6A3474BF753742DE8AB76D0AB0DD9A20EE2DCA 0F34CB25995ED3183759CA83ABC32B8BDF0B06EF169252587971F7D37463BFA2 BE36B2E45559DD73DE7CBE29DE92B9BE6B9F8093F934BA311D81E18A8DA92FC3 312E3FAB43C53E803975981F0076EBB8F257C123908450661B6FA79E7ECE98F3 B0A94E0DE3A4DCC8E0FEC106CDEDAA297A75BF1E40F3C2419BF72A644F452E2F 9A8793810319885EB3AB23B1E80E8B62A889311355C73722C18E62711A7E6A16 A5B923408444B13F6522FECA9A60B067EE332B83E1A69CD835C9D69B5D8859D6 91F9276863D2E2E8193641E4239F4ED15E2C482C735BF5434BAA454EC2830C1F 7CF766DAC9E924F17F03093132627673BA3D99DC2DBFC89E5BA032C16D3C1C8D 78B3C464081044DB53C7A29E925F4157EEEE928C8E28EDA5F0A4BB6E0042D8AC 7595C350645118172D04FBF06B2C9A9F3603A54B57999E2960C993724CCD6A09 766BDF73F66E07FCA9BD09079CE8010E6CFECBE2E5DE1EA4E280AB78D5184C11 016385007CB5AC0BC95955A1E88EA1A1D8EFEA886007708BA063F556D9284D4D C764E75CECA51BEE3D35DFCEBF6175953D30FDAC00F23B1721A1DD577945B5E3 8176A21A649D907B5F63C71718ECF32ECCF1B26BF15AF694F1045CF98FC75278 E9782ACD3D83CBDBEE690D29B3176E745AAE436382D258CB22F3DEDD02E441FC 6A9931AC2F61156DE258DAAD5EDAD41E6C0DFC902173168BB4F51DFA7EA615C8 B0F92FDB118378CBAC3D56B6B9BB0883C0C14EAA67396AAA7987222A132B7959 44FC1E9D6DB6D549DFBEF8D2DD8C53DD3B66935FC239E74E2C440CCA13C068EB C4A3B69F499F573D076E2C92E24F2C69B806591B0807CD903E078683854963EE 5125C3640860CEF37BE186DB781475554BFE6C528A9633AD5772BD53244E24AB 42CA2D1123AF45FA257940CE611D83014DF04E60220E9AF27CB2A2247BBB004A F5722A5EF058FDC7DC2B6ED1406649DBAA58DF2ED3A91483D60F11C4A39BAF57 CB1E320A987B790672CDD3E3BEF4A67032244DED2FF4588B2072CDABFEB36009 9F4BCBEE16F811A44CEC77F8AE873C90C0F4C975E51014ECBD45A56A63F034C2 82212977023A132E5C88AAA826D841FDE9CBCE7A01E4B6F0EBDDB9A69EFEBD72 0B41EDA807CEDB791084047624BC11CE10B7A0A311272EFC9E013FA374D97EA5 F7998FD908748CA72D8CABFD0F01220C2114D3B462B22FB71A23B284B1CBC7D9 EA20BE71F8ACCED21F096009A14A7C7B51450BA51514707EB46B9FAAB31CFBEA E1DDA6F5D9AF0B6E7D05A1EEEEECD606427B0F2363D1B882B50140466B9D3CBD D00DB06DDD1BD4681E367DAA4B7C405C6281B67FFF794041738FC6A01D261CDD F6E0A330985F2CA782CBCC02B6F4EE5993434F656B91A51CC03B1D73FFA6629F 14F6075EBFD83B702D8844A96CFB5C14051595BC7DB2218156A6DEDA5C98CAD8 BEB5284D9D9F86406A8C1AE85857185991C360E5F44DEF352A1F301207BE94C2 9A3A11BA468FACB3FA2D683419C44EFDD7C8F1079659F3ABD89D7F168B1591E5 6105F9B3FA481BA953CD34CCFE73E427D3AFC46E5C58C2981198BA284DB8B37A 6647BEAA561799877DD6858FCA71CA6003F2961FAA529906673EA94D82D78116 4DAC81011FD175DA707C1E15D4B6FF19F8720A4E05E6E103E2DE880FA9C192BE C5ABE7C311C2ECCBCE8F9713DBA74AEC37A61C8F21F271B35F0F7C88B182525B A4183377597ACDA9A6E2F181725D427795B975BC4168A408D292CAA484BD1B8C 9DC62E737ABC805C8FCB7E96454DA032B601345570EAE0379BDA84BB6D15D780 42FA1E068A7D62F152B43B788513E13724666FAB4E2B4F04B0448194E46582CE 7389BAF0D1DD4435BAA6B82AC305C04686B89FD51197C721D941BD2893596024 1598E6C2BD84527EDA6FAB782033E4BB4F964FBACD96CAEC3F3CF89CBABF6B4D 4D3AD14A03D4BE931632BB03BC2B92842FAD51A19A756892D5B978DB695D0540 CC9D030C612E2B201D60D09F56332DD0BA1351EE62816C21A35C33DC11B37BE4 D2F164ACD836A5CA1553CBC733E3B159860454B17064B4E22D3764FF6293BC81 CFA3B2325C8E072857F6FF4ADAA8818247D431A28D3C5FDFBFB24A6CAA327AC1 0B3630C84ED9F0D33B8255A3CAA9C5A0C79F7BF6BA3B9801C3BD0B30AEF7CCA9 92F25E332EA97A7CC653C93D1497992D6B76363885B92ADE34C2A33E30A3B1A0 57E9C16D8CEC189565808D3FAC92973C71CDE74DE9D8781CCAF88747758014C4 5B62667D4D2CC5EBEBE77C5AD00C6A69D1819F5A786964501E077EB3BBEA52A4 57729AEDF35253F7E1D31F2DD1587BC15CCFC1B0CA930DA83E2031B099A38158 8D1849E7145AC74777A3C7136DEABB0C787E5A218309A65EC7D128147EDE3AE0 C0AC039B56F767A22555CFCC12DCBC7F5A5A3B4E86EF5A69EEA93DF0BAF2A3F3 7504F5C6A7A67388D2F9045BD755BEB7DFBC2EED679497EBEC808BE20FDCB5C7 B586463BBB898DECCCF7249E9047DA943FAF0718A2050FCFDF8A4C2029FBA674 EA64003AC03A847185936FC375CC67B3006EA681F61F640C3640A78D0C7FF521 D477981E23E5956BAF42252463FDBEC49BB560A9428D248B0C5250CFA2A49CD9 DBCEF73123C13BA382D3CF6A7B8A8CA3191D379A659F0E2C6E9CAFE9DA2AC074 F622E397A2F7C73347364AE249B11AE2C34AA7F0D27B5F35D548D5AD1228597D D16A478C901D3A34D870BA39F770885B7DE62298F0114752435050E99EA4E5E0 56B965EA185E8DF96B9FE97EE23DD45AADBFE02B427222B9FC99DA94FB2648B8 46BD30F881BAD3820DCA4D8093BA0FE70E03482CC063B751439125623FA7AE40 52DB2A380D89D5E37BF264CC73DA9A1540031587F481A0F146C6ED6F3F2957FA 19477F075ACF608CD94CE466C1FC3EDAEA3ED25C96FE89A7CBFE528A33C4E84D 465FE6FB031B48D904C5120D428D6B51F3232847CB0B7521E5CEA887FFC56F02 0882B3BB7F5B0B954E7078DE3E31D8AE65F9EA55F4C169DB7C35DB9645617AFE 078E03BF9A1BCE4E489AC9495A1E6CC7D1FFDCC03CEC1A32490186FE8B53B09B DBA7F0E23C8F5E5270D039B409D504203A458EEF12C035039A8AA12C719C0339 F766BE6275511D585F82E9D4AC9B5424312755C4B74383FD094BBB24817D6525 EE62456392E5DCAD0A0157A4A033E440AA014D5682606312F72248E13C43EC3F BBC9B4A2CF19A4AC6ED7F561EB13C3AB22FB3F3EF644B5B47DACE807262DE5C9 50578464845B950140ADD91D72D28470A5A5FB134EC52F4DBBB9C50A7523592B C5BAA056E46F8C004062298BEA010C1CF9F49DEAB58C4D2012E04E630F54C985 328DB2B6FEAC584308D71A9F5FD945A37EA13F3DEB1748320870057A362E70CD 50C269D32993CE9CD1E8CB35BC6F69E7574F37032219C6E1C960F3680EC66747 00A5D1C99D77B64CF8E5D3236086A5729C857EBDFC30A964724988786362262C 15A95BCAB03F6A11D274AE10FB70CDF6BBC8221F5B71F51D5579B7F9B53F94F9 460523C511D7D331B14E62897EF22963A961CDC1F23A8493B0FB3D089738247F 10F9AEF0B5FA968A2B6C9ED6024B861954CCFF5132C7BF2D04D8505DDF8F106E 12D7814480C3D31BD397DDDF6C7BA2BC911666B5A7B486F87642092EF19640C1 7E689D03CB0F98EB430557CC188BD480940A9B80788D093A75E17B4BC5FED6B6 E4418153A169EA7FFDDC5522FA5FA086C68F322F7FCA8004F8C1F5024C7C255D 689B777F6D03CF44BF93C2EFF467C16AD7ACEA252F1D53DEE4DC9E1F399B7F37 F8B3B3AB9BDD447256669856D2FF58210ABCD28391C6EFF9DA3B00B69EFCE5F8 2AFD9A132A48632993E304EDD4C61F579949A9F41CD8C4565E5A5188CEDD24D1 07FF7BFBA5782B418578622E6A81F9E44749D606DC616E3E8A20C2FF263BBFEE 1082880E1220BAB56750D7011BCAD9B86B26D8A988322E921800CFCBF55FC45D A360D551BD28E6E2267519DF48BE1D2BA7B5D9FBE4FA88B496E4B83534ED9DFA 9FEAF760D1A96224A5374B7D51DAA40E9D4CFF1373CACD9001248E415F55E178 98C7FEABE1F9921F565FA8CE085D1F28A85CF221BDBEA334D61B14B2FB76568F F9EF07750815BC68EA5633E7CB195690F9D1C1C3C151F9F833D900F1D1A460AA FD049F1BFADC4874C1601EBACD7A3D7D91ECD8DBBCE37C9F5612DF7EE6B565EA ED4A4C5268C09F8EB417F23230E28246E3F1E4ED21E78D0914FFFF8EA33E69C3 DF2D7F29B1315E51F40B0D3823358571A44A83AECA9583E7437D677B2E8AD55E 695A4AF8678E9BD8FB31AE9AA7A4DA308BF6ED871E30AD6B74CBAF8BEF822A94 7487A7F2914F0879B07773F6E8F024A221794B8B1EE7C42A9D667F47A4EE5318 7A21278E96548C43B78F66D0A42279CBAB4901F51D420A164172FFC7D2053DB7 BC40A9F21C690D6730D135EC1DE44C2E94DE8C96C60116BCCAE9DB8B3CF8140F CA01B945D5359BDF3DE2AAE08597EF4D359C421C70993370AE4366238CAD99F0 F83F24E3CD84A3C6A182563FA823E7C03584EA5030A8055FE594D8274B4061D1 4BC8B1F9859F5CCB48DFC52E27D97D55A0978F453CBFFE1EAC1EAB1C924DE750 8DB4AE58249F47EFEFA5FEFC1B955A6ED5B2CD110F8A650DA54542B083B2D598 EC0DE4787389217F662CD995D91B27DC000076DC92975EB56B9397B6BEB07D28 DCBA511EE23E1C2C8C1BE995EF62DC556D5B98AAFB609C8C6B7B0E16A867BBBF 2DC29FBEEEF511CF7FA6FD2DE5B292D992B6341C4DF58A189EF9F324AE06C5DA EFFC6271614FDC5B0BD56B06CE346B01D3230BE8A27424FB6EDFBB9C4963EFDD 98C296BF6DDDD8F233A01E709ACFA4FA62FF37BB4243206F8F2C440D99AA220E B9003886E693C64E3A531F286D084B16C7F1AF35E9E7EA584D3226D926BEE795 2F769C36C5AC24DD184A0643CF73975D956185008987952868E28E9F0519CEBA BEDBC35C84E8D3B3076ABABDDBAFCBB4A2D02EA60655EB35BF80F6B7E18AA86A 5D86026A04259824BB88A7B6D90329D1F274AB2C58BE9B16C43C12D7AA236262 DC1A6BFD22600075D1684F34A8B9CBA98CD0FAB6131F4CB0FD83CF3D27F90305 1EA92DC7C12212C5B8FFC36689F830BCF81FAB2E528CE7F6AB6FC7F552920654 8A55A47DE3FD41BA699BF0A87C7EEC62419C80EFF557E6C027F9432470CF6EB8 87A1C9B755AE9B9974CF6F260E6188F59F2586B23565158CDBF07BFA25503293 44EE2E8EBF02DAFDF8C9C895A959E6C3163A48E5AFD09C58801A479925C83F6C 735EDC78499F7CB9346325E7FB728430BECA68ECD19F529B3E22E58A5EA81489 81BF6E728FC31D8EC09FB27CD37ED7604D4F47EF9DC7429AD3110B2FFA16943E B63E3BF6EB8B2CA871746105B9F2683E2B273A328DC0D754835605F8F68453CB 88F28BF8F156A88B5B188D04FFB2A47760409C6122691F687E22B9A0FAFCD308 466C97DEB63B5860C85D85D94909E448627FB304A71323A8C0719E667E3BB81A 97B4EB0B85949C01352FDD83EDBEEFD7B97B6704038282539299BC28A8174975 0022746396D80A885C0597ECF3F3AC45F4C625F99B23BAE18BEA6E8CA4681219 4B360A13A7F9383411CA43A547B12E8EBDD9A2DD0977311C1A6AA19D1588BCA7 79D38513559593B04DA5425B5E147E90545BE0593C4662FBAB0AD2FA3F2D1F80 12080E2E1E52690C509C17E46DF9758A241CA06D33AAB0A3B162C715DEB4BFD0 98110DDF814AD6BB3685AD92479B3927BFEFF4734AA3ACD41428ED1D221E36E0 C136013CDE5960BEEBFF5653118CA476F61A70A44D805B69882E0603C27D92D8 18B1F5E3B575A5A597A328DEB726612DC262A67E10C8488C6266A6E35386C985 9B7376C7C42E636731DA72C6937B0A8D340E3C93D0673EDFDBA3BCE9AA2A8E20 7139751685BC26E621A1CBE5D9E080A01F8483B7D9E6E8673626754CFE901A37 67264A457C3A362C02380E96E5421CBF02662C2822C6585465352801A79FF3C6 E83EAFF5D3DAB41C9C9906A3399BC3BBC1C22364F90442913D599DA29AA08740 D7A5CD23B7BF34C3DFB68BB8C4CC4BD706EA4574802D9F6D89EA4CAEAD4E1A98 3187F143E73B5FB588695C435925FB7FA3F06EA89232C5FF117F451F1EC44444 92D019231F63B69BF99C8690A44FA599810D20D0410B75BE82D4DDADA82B0DD9 0EA50BE391C9DBA9E7FBDEF1E5D9F53CD0A66C7EBFC849ECBB6A47E3423FC156 1A00AE02C0EC720D001AC0F785C367628367D7DE0E80709E6E41C9F876758211 F04940EB59D9EF686CFC5506C7C1D81D733A02370DA35F091D85FDD06701BA4A 9CC53DB91ECD900A988CA73C278C2E5B4F0BEC812A80A32F92B23D2A0677C7AC 2251E939C48048431AF14CCBFD93CE67246EA811AC426362B344543E08F47F2B 721B844CC74D70793288F93F85C5F67F531402CBAB4E6F90B3242DD4BEBF1EEB 668C018124E4FB83E12083D42ACF02AAE526941050B461254243C859EB146107 87C39FAEC92F2F6FFEA6B36E711B5B33A159A25C792960AD977996B996609530 482B78647E3D2A79FA95EB01A00DFA71F2DDFB18EAB7EC67DC33EF7AF76D758D 9642DD8FC8DBE45214AA745F62F0715C8654B512CB94A94A29676F8A31C0AE04 6B2ED00F0A7CE65C1994821C82A07CD8ED9A8E4EC56C129E1EDE1022B8E9F4E9 BFDFDC63E6392C5070C254478FB0FA2B3A04BE26E0D4D1768DA3E53D6A47DF4B C0992687EA1653B69A7C12E0C835D6992F0AD9A99CA8F31D20A9B70B49832F34 F383F56816E0D85ED30B6933BBCAB208A2C5670F4E7042967437A1339CF755BA DC7702C6D241E535A7ADB45A73B9CA9BBC4B023B701764F342047FABD1B3E25A BF4C7A16630A89CD5057398B80239378C56714A569667D484F594A7D4266F626 D1497A5B7E166FE1165CEAE1E35CE6FFDA0D3EB3FDC9D1E69ED3C142C390C688 CA28E3B58BC37B1D2F2AA57B5E536930C342C1D931CA5ACC6FD037E0BE94EEED E00BE803A801854BEDF269C06B18B2021230E8CAA72B105EE979F5D15867E1B4 85B8055E8DD93D1EBEFF123546F6A1DE34EB28F32641DB1D5AEB0570BE31B628 E2D32541898E90C0B33E12D202194BB89460A822CEE9FEE1D3A2BDB46900EC04 9E62309A8BFC4E4B87AD8AADD618C5822711E4A2BEDE6EE257B66C6B2B9012F5 C2D8C5C6B23F291CF8055FD7312B185480CF60202E92C227887E679256150018 4224A1213E076A17014B9F227B90715C75C903EAF7B468A25272038EF0946DDA DF36192FAD03068B4FE76FDA95D3F36AEE389489264FC8A659F31B565250A460 6627F5AD2C458CCA6C5121986B2FF80FF30978B4878CF115C9977F92B64F2159 0D91E1404899C071874B726B3B56AEBDE651852996840331799FD9C1D86BA31D 72F1E15A69B9096CCB3501D0B3A8CC6147E7227A3AB9B2A231EFB39EB522CE04 8AA32B96E02240EF84E7C75FCBC2ABF17C3A6914E83B6AE2B0377DC87F36E263 6096493F57970634D6BFABF537087FBAA5980ECD935609EC9B91BD1FE933036B 0EBE8AFCDD7270D5B1296508FDB1EF446BD403D39BE4D8545A7E516998ACCF89 0B242E56BBCC7F5393714904BDFCC64556622D1E4734FA44A06167417CA0B458 4971A5BA35A3B4A54962F0A9ACAACA02250FBBA2B028729C0B22DE5CE4352F1C 3CF9AE53C590DE2EE2F2F77CB0EF75FC3F64682660A2ADE858D63290A0E98089 1C81CC02CC1191C8B4DFFE9B3EC764868E495A76AFA518E6B0E3395084A176D6 274B04BD7112D9CE2CC90308429538329414761B16785E91147F67FDB08A87B3 9A999CF06C95863D257F3096D06D91E02A0F9D75DCD9EDA4ACC49C5E98BD38B1 4F7F2A21E81331F3A87FBE81FFC91C05BF341986BD725D2EA8E80A2D34406B43 EC821C92969879E9FF71B14A85DF07B395B8A5109DFEAB000B8865D13857BAE0 C7359BC917E2F62D7B80D109E8235F405DE0F6831EBC7B40960B83DFDA04AB15 12A48FD20D71B17DDFC5195E21A5EA8327EEF753AAFC780D38B15851F465F464 AFCF402BEA777FA915091DCFDF3F1AFD712F57138FD0BF4D072D2D562D75DA0C D686133FE57B19871B691B34800740E8E402B0E81E3C1969555492B8A6FC1B48 449720B208B33712AE3B67C97710ACCCA571EAD3C05D09BFE47A9C21C2A67CC6 C18DB7721B63856EA8FBD7023B98D923B335B5328AAD435E7EAE6A1147181997 F4AA177AFAD642A304F73804A11A1545B6C671737DB85B4CC7F570AF579FFA84 CE5879CE677F028A3CC5739E2813C57BF79BC00BFA8C01BE9967EEC55A44216C 939D3F935D781FB67DDD654BE9086463BBA0E491CCC44EA36C345CF888B05B7B 310FDD391D01BA01432C768E334560A750D263EC96CD5A332EAC55358E1B08DE 53D53E889D7BD19F1F2F1123D5E85096D404D927EB5A33427C12B470A3773963 3F735967C2E39A6D88B971C42901D6EB60F39169E60361E855F285D3317916A6 1AF8D29C8943F6DBF2CC745BF6C23FAC78D8D425E15F8D53C4D28925032A0D0C 2748C3EEBEA61E2D99813745B3A86F362A8F162B9557046946CCBA8E4EFE8212 8270DDFD7B06B1A8F795DB38BB36CB6533C38F14C2D948C010BB04A80C5737DA 092805085BD08DF8C10E1F7DD448F05CA4632A9D738B908393C79E5FEAF5D87D C984E6AC517A5E97AF35756C3DC2240D1B087468BE4F25923AEFDB5EF6BB90DF 8B33A01BA277488CBD0711D812C916C1E221F3BCAB15E43940281FC3843C83F8 9B795B839EA5B6E8AD0FB55AB274E47A9A9E394313A6FFFB6AB8BFFF7FF5E6E8 DD35229DB5BC573B068082CAECB171FD3A6BAF6436F3346376B172E84DE322B3 4B40E24053BF0E2A2022FF23AA25DE16C69AAC9661FF5DFD2AD5961A83E04BEC 59A70C8D3DD8E6AB84A31D276DE556E5A5DBE1236DB07D63C75720B1B56E6D89 9A4F43A863EEE092DFEE8043168AE61A3517E517783E6DAB1CF0A5758DA1C0CB 1919CEE703A72C3D1CFDA59C53427DF46673F8252F700CD41916A9C92CB69B8D EAC7042422130CF218BED92B4CAE6E2E6008F73CAF12694531679BD2C8485BA8 163CE42960788593B57979891DA1ED62F58D89CD330E0967F65DA242CDEE47B6 C7859D0C15FA3F6E97A73DB30A36FF3BE5618ED73DF2FE770FD2EA3C4DB12619 1428370C99A94FBC550D58006B7C70458EA1C3C0B8A77025E68B88EA5FEBB524 EBC3F90A58745B3D31BC3F0BBC23B3C9575D123EDF842E 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: (), with Reserved Font Name CMTT9. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMTT9 known{/CMTT9 findfont dup/UniqueID known{dup /UniqueID get 5000831 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMTT9 def /FontBBox {-6 -233 542 698 }readonly def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\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 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 77 /M put dup 78 /N put dup 79 /O put dup 80 /P put dup 82 /R put dup 83 /S put dup 84 /T put dup 85 /U put dup 86 /V put dup 89 /Y 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 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 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 097C4995B2C3BAB2DD04B1A7097DE16DFDD76465E79ADEEBA90489ADD0914EBA 53E11A43ECB11D072C68D2131BE1C7C43CB9DD5FBA0A67BA43D6851AD4CD3BC7 39AE2E22CCC183A56CEB71D4F9F578518E376426E42B6390426A8434B5A83E78 77A5B9963BAECD5FA5521C2A29418764E4EC1A72462B04957F823E2817A7F8D0 1512919889500024B1C42EC107E8B8533C0B314EE4E23313A4C1BDB009A2073F 9BAB479A3F9DA76CCD65629CCEF78015ADBC2D0D124B3BB2D322FC4D209E417D 84BC3C758B6AB64A01E25C9C7B71D741AF90A19A339F99A0BE9FC39622F04C6F 737474CFEC19C890A657BCE192B9DCD8F273CDC5294875DD4507DC5723EBB357 73DB0933927DC21081E67E5DCF4E41FAA6E00E8DF04128F86348FB0718068FA9 918319C4EE9D090CDF348153B6CC48648C55E889B4FFD3D75466F1B50C437546 7DD9CF20980B148F60BB146402DC0732A27F255DCB859CFB6F9D329C12FB14A6 7824D6DE27B03FF85BC59703A5D6C5B7D1CEBCF3C3FCD71D6D6F0311E41BF8BF 0609D23C84720FA9EAC961C9D49C2E962D9618C32BAFBAA8CAB0B2F616E57DA6 8CB44C5595A22E13B139A54642E66ABA43C9C7FCD404A33AEE9BADD327687917 51C23053CD18E028C0F8972F75E7799BB107ABD758E8F18263F72AC8A0152778 0B7BA7606326881C5A9010BE6B5A7C0551D3B76CC9E1EF2E6E6DFD1F7A492E80 165085F2A8F99128D9FC2B77E40CDFA38872FA61FE5D5C4B638EBD51B9D39D95 469FEE50E6F917DC4AD7ABAD25F8FEC4E554FDD58B100697CDA5581570343A98 B67BF41449B8442E91AB20F3ADFDE37CC5A8431D3655099C61639548F4C5D64A B8CCD89BCD70E21E760B2DDF0151B5DFB1E443EF9E1A5C84EF9F9C61301EE76A E71D38DDC451716FCB7B8C4827536968117A7F0CC093B509ABE15A19CFFB4D09 40AFFCB898A2CF28ACE5CBF5A8EDA7BD9B9809DEFF7BDE76BBFF3C6BBEB1B18F A7DECA3765508B1E19EAFA4C678CB53D2004223378B84D310623C312B4161F1D DED977AF67A40B420CB9687134F7C6DE57E9AEF25628612E2F11711FF5B9CC0A 17A6D8E0CFE67490B03D2B832893A5D82493C4E1293F7403E172E866D47EC8EF F0384DC42412C36E078E4DD045AF539547BF195B5E8951EE8EB75047F0D8C276 ABB12E2B141C09D653156348F2C2F6F0440F17F0823F5B5544F2B9CB29D2AD3F A2D49AEB7B5F234E33358860C395CD00F02D8B3E64EC454D29E8616914710D5D 5C52FE88F24F3F1DC3D032D4994480A53EED5E7F8457ED62F1BB2FFFE2761335 66DBCA50F53FAF187A5D9797DB4C7F27C5558403D6E956F38EB3D0DB00D4B3A7 2C7535209C546D92FDC63EA38ACC56A598947BD0927346DDF0E8AD0E20415C81 BB55B02D91A691B83A5040B9654679EE7E72DFE3E97383ECB04C1F2AA74EEE12 9DC2321B55B47EB3EB7A04A7C11CFEC1A438F59CC33F279AFF28F333B06C0115 E03F9D97F57A7862DBEAFB5C92846907134324C5195AA97D581D997B4DC34F8E 643B53372EB6D33879B01603917E62224723F95936E663FB3300931B4EF3CD11 488F7C682DF50ED15B8E5941A97A69A52AC333DBEA9964A149C730B0E8BE20B0 92D31A5BAF0AA81C950A3D2FCE9D30265787DE32DA6FF5366240145EA5082DF6 75E69156E1F7BB4A481B3B426827F9AD350B9F9D22F16E4018F67D79C3441B1F D0E5CFBC6FA5E55BE05BB5135D8F3ECA6E90D06F0D72367C37C7CD1346AE63E6 057F3E8755E2F3F19EC80AFCC78A465F21E222EF7C19859D585608BCBC43E5F5 893DC5382B98A287E302E6E01EB9AA8868E7F7316C0E7501A5C8B0892B64C737 C1A1796D53BE7711132167ED4EA999850642C4EF529551E9C46C06B8A1D3E424 F16380501E1ED5753914F2E8A6D9056BC7115BD588C97E85761BC634085D5684 CE95957EFAABBC90A4D42CAF712CBC44DDC3B31261523AE5AF8DDD8BE5C8B6C7 0C08C4D43908A44463119227AC97E722BDC229818636F1FBCE46C984800E9765 383D7658A30E4E7F84CD5A06EADF0913EB2A0D30B929DC5D4B0C2261D2EF1BCF 42C239F2D6787B081BB724E9EB190C286187BC26D4E14F95B1951132643AC459 3D59F3A83F84344F3477031B638C1FCD81EFD4FEC112DC86C75F1F3804403EF4 BD2DBC0C796884BEF93C450407E55AD6EB36744360B72DB41369BA0A122E54B1 391F89166D9EB117AB8AFAC01A7AEE55D832B16FAD1554877A0B1DE9DD216596 C71DD3CF19FE03DF6B34D0BBA2C0B8803B505C4A8FFC415984CDDD6013050863 FB649BFEFA7269E4D9846D34BDE286AF7846D9D9D5FA16BE75A313B9C561A8B3 19138A78D737864ACCDADC38A7D75AC3646D24C9F61442EA7ED2EDE114289160 E7D73F047AEFFDA0382F901F7C901C44E59C20E3D17FC7611CF534F7EB182737 267D785E19CEB686D3B077AA73F028A2D497202C461B02838149244736807575 E4C33415E6C2DE83063C00CE510B0CDFDFA60868886F63658CB4441CF6BC41F0 6633E672E02AB976F7EDC7A1CA0ABCCEAF546C07C38DD170B24DB8F746B85692 5D1E8B717330DE2F574A68F5134E62B79A6BC895E2C8BFCC84B8298EBBD8D1D0 F2C756052BF9F4559F347022A1082EF91DBB4C4DEF816E56A570DAB1239B4DAE 919E0E47FC7D96493225A8E38BC4E11B4A13A4E29DA244D5ECD7063AA13C974B 2136F2E03B8EF86BD5CBD90AAAF076F818CE03C7F7516A64B33412EE6825E21C D2E50868DBDB142D9D7DCF06F6C0A5EE927F33B908F74AD6EE7B3C845E30F969 7DEB52A0A6FC61163E1B665787AC0B203B35815404EBED35AB7F423E89B96F8D FE5198B533A300A743001BA1C9F06E1384C1311D418CFE2FD44122E511E5FB85 21768C233C1E7B50EAE3D33EDA42347961DB9FF95D72B159EC533A3D20F8CBC4 5AFE713B56152C80896D4099F023C07F570F4E47360422D71B04EF68655232B7 953BFE42307E57492A709D3249ABE109D284AE0BBB8E498AC0EE81B2720EC174 5293123944AD8A7E3320E85D4E6E945D0A4F8C4FDA6A9D188085E0BE3083DD18 3471E9275F4DE0E2E7BB698DF8E637576946EE4699E0F3BFE28ADE72E1F74B12 A7D89F51E20292ECFEE21C44F7ED04801E3E3A86E6FCC8D0CEB2C803A086CCD3 720B960752C2F4131B509A139B4F15F9D8CD0CB379510CC8F0E3CF76DA436E99 308D6B97CFF9DCBB583920D3FF076F6FAF88F303886A7954B0BA42943BA5327B CFA5913E6A06C397D5CD550D44708BC97F2E8DFB371EBEA07AE74077176C4E29 203194AD1A5711581A0944BF63153E8EDD8B6C12CC2947709C44A856ABCA5254 7F01C987AAB9922C06AB28BC3E56517329042C7FA663B36FEC8206BE98D723AB 0C4FCAB8C01BBC4177408483922777EC26815FCC8458104DA2D73F60AE8F58CB D9E0FE4D2B4429BE693ACDD0993B7E19EEC187A1E4421863360C2A2506AB2920 CA756DC6310BBB2F0AB03931691DF2EED63860A0D819F92C7C7B46D54F15DE7A C4FA66D543ADB23954FBC8EB8836242E698BAEE3C5CA1CCAE7C2434F40BEC9F8 EABB7D570559D373A561A62A17C25564F7F441AF109AD61406747196AC43DC67 0C419BA4B0067CE0545772E57BAC9C4C59B6F63D06404D9CBC0E3970EFFEAA2A E99925FC5587AA9721A50D443E103C4134EE5302AC8EE5561F6A26A3F61F62D4 A06167965092A06747141DA5BEB64191A263054991B943D40D2BED38AC7FA207 9A6151BCA924C67DA12807CD8F3A02C45ECFA48F0138A120F03EA7A3AB01A476 E6F5515F34028DC38FB85862832EAE6FF7FD46CDB3A46D73209FE7D7B2943C50 1E2CAC2E32267C084A36C902826343DF0CA045139675E757013A9245A5CB61DD 09BEB79DB2802EF3BC0058207E5E43E365878E90E893CC9DF91285A4C616084A A1ECFF97DF099A5951DE522F117198D8C4303D9F6647980FE86C709701F5F558 982B0784B093E774696D3E3E8B731D782EB0B775EAD198D53389279E06F80B40 343A62EDAC58A13020E509B1515959AAD6736BBB969FF92A80018C80F4A55515 A986129F9B005F65E8AD5B88DB73377DBD9DB82C79512398A3E1FB102A0DBE19 7732C2DC0C160740F68F4364E182F034A44B5E761AB65415861D47BF27A5ACB2 7B977F2F243008559F46D1EF1A3A9B5596B3B3CBB0915B4DA6F6C187857DF886 8B2815A9F13CBD6DF520AB629878E1FDC22C375C304626BA308D2A37DF6E5733 15A9ADEEFDFFBBB439E2461660C485767E628523E1BB1EDC7E15E9C9152480E9 7F5F0664A1A08AAA12362FC4FADB484A56F1C1650B4A5FD39A32CE4343749C4F A5F7FC3E0AEAB0F58410DE7110A48839DE1F846BB924173FD2C623530E4A986D 9FEB6AAEAD5085B400DC36254F9583303F86AEA67C98D7763451B092E06194E6 E949774D47EE1BE25E37F37BC01903E5AFBA0A5CE8644C8633BC32C4010829D5 139314401A2ED8F8BDEA6B48310AF0B66CAA2492402C43865262C0AE31BA0ACB A3C25AEF64011644CCCA3F62C0976D814A6FCD0D01E35E6FF9CC2D277913A127 B54EA81A64CFF61B7B54405A1756451F74CD8E2EF563EDAF06EF1B4E4893F621 0A71F4F66C534C32C604B0D0172EEC1FEE24F16152705448DD0A7215EC23F87D D9F8CF765FFB09DE4CCB37B9BF8A4245A46784BE9BDFD1AA1DF10002EB4FCA1E 48A2335C0C391C5F89EED5A65A05ED48964A383ACB40452168C1689204732725 57F22C5E274D5CC0C7FEAB1CEBE0E0AA9EA82AF654BFFFBCF0280BAEBE408591 2397C93A11BC5F24B2B42E4A96CC963B75E75E0C592672B901E6528FBBADFA8F A8AAE001DF22A32A0E9F5D13D0BFE33E7C55BF86E2E2070E598402EB19DEF008 4BA8095B64702E8B3D98F029B47917F0DA20C9B01EFEBEE16886D0E7D4EF4D4F A0E9C2F7A2245DF317DDF5A2E1FD03324C06B1A62259104010D75FA2B6758B46 BB7DCE4D89D6884DDE3034DFB0F4A5826E50BB026098F2DD5F34FCA909D15C11 3214DE8E7D931C1F751E49285F82313B7ACFE820799F2E503106B688355AFA28 D52BC8AED62E0A6DC97D1C58D9AE8E07C4455DCE35C942934A7BCBBF7410D1CE A9423301D49EFDCD8179790ACDFB9FD0EFF9D3495B271193567922BD46E54982 0FB270ABDEE594F84E53F0AF23B3E75A2538F3B2312B1B7F1694EDB840756A26 6DE3368A17E1A3E77083F2566661C0B0E44CFC289B8A56E92B76924805D0D9FC 39D4F536CABFA083144C9FAFE7D24EFE6B1A1AE11FDE5C7067571B3C0CA0D087 67209823C7DC00001FA89182890F39B452CA047709B0911BA8A0EDC65DE4ABCF 90291530A1DC8A2CD4D481FDB25888C4F2A46952DB3A35ABD99E79CEA64C8E30 B8E1C1D57BC14B2B10DB8D7199747737A65DE95A331B47C505731822F5E5FCAE A07EA20018FDE5A4C8D7EAE0E89164655156C8B8D0F7A9854B51775019A05AAB ED4BF08B85C13DEF1E7BD12641E044956722BD1BC901D43DE66CF9202BD651E3 C9CB93C50ED32DF3018905E821FA169CDC8D67AC7DCCA252C4581132A58E1895 2B0FDBB70908F596C906168BDFF34E3D0895B8DFB8A4AC2D503566AE9CCAAD33 30408D53EC6D8ABF436D4991F1610A7E286DF371FACA41D705B9F1E9D5784E5F D8500F58114FDBC08381287EFAF136EF983EF673D45820030246136217C4DE73 85E1BB7C7D4C0897CDAB5564EFD6FFF49CE090E620ABF277379E176B53A40E90 D8A1CFAA49305C226B74C23092A1908A65B024EA2CB4F90728062690907A7C3E 858FB29DD54A013C911D6FCD2F8A4EB009FBD55CD8B3A0FB1CB6B0307DDFC678 BA716A09B2FFD21C901A85FFE070B7F8F35B0B71C9C943226C641C35529A5078 CA2450173A133662ED755D1BC49CE0469E8399E865EA04872563DCF82D145934 DFB9C165431E3B4C27EDF9EA9F9A95B52450B4982D09092C25BD3517A96471DB 912C676267DC12BC8B70A276B0ABC2F167A80FEA6F7664923CF9204416445250 C9039A431D0354AC76F385BDE667E1F7EC81F4232A80C403FAE556B085B5AC78 29017B4845AFCB27243291916D17C9362FE8C961FB1851264C0DFBB9523BF624 AA38833DC93F7E2B3E1D4271A451A6A9FFEFBBB8578B04288A3672E2081BF79E 2E4A24DAAF8DE3DFDC322E215279C3BA41CB3A4902BF7BF58D9652AF69EC28D1 40C83AE1F196E61102ADB4C8601A7D466DCDD84181882BBE6ECAA002A61CF8D7 C5D0070FB8C04044FD0C082E11CF26CA8EECC0F29CF323A03FA7FB31CA833D1E 41D4179A57131C82C9FC658C6112DBD50EE5C7BA0E34784E67B5343046F27CE0 5A137D8EB4DC1733BEFB8436F9AF150362B3487B95C83A61EE4118F09B87D8CD F9BF3C35D59C27EBC060A7ACA9E8B546312EB84AEDED95B6898D48A7E98A78F9 5D749B9A6417E82543B188A69748CEEB27C65A69C4D0AF1B91B6DA51BF2611AF 0CA17AFFE92FFD25C9175C3843F021897CB1833DFF33CC67CA31DE6183B79918 5CEEA8EF6942E6D8D5FC0F55BBA3B395BF983D5295E0D0FF8874A9D90DF5D232 483DC8E9CCF94B74A73E18801FACB5598E8A05989B074DF08F3F58C3AEDDC135 C0C0474D16B8B91DA9F71E2166903C1CE084369A31BFC2FA203849F42ED22836 DED4A7567AF2AAEF7641F1CFA094768EB5F1B732BEC3BC1BD894ACE0EA06BB94 066BE953A01A366865BF5C5F74349ECA66198B399021826B0A04ABAEC3A4F839 D5EBF0000E4AB2CC3907E002C3B8EF26896250CF90D7D5221EFAD9EDECC96816 D65EC197BB5A797EACC1EB62580F2C4C8018B13317D75093130DBAC735672C64 F79733F4610F3F3BEC6EAA2AD17200B9A70FE33C2A337E6F53BB2488C646CD1D 2A02EE0A14DF53491E0F702D94E0C838B7F2ADE3AFEC3B9F0AE5D4D29EF97483 61FCEC1B207B357B044222B65000A08FCB508D5208E1E3019BFD99719F0E4C47 6D355F4D1CAC1B22804FD88879C14C669132BA63EDFCC065E08693A4EBC7B79D 86515AE33AC27235288AAA48B27FDF2F3DFE06306A863C08EDCF7422963DD01D 7FB6EA07943D68673DCCC79DB7F87F21EADBE54531AF82B2D954BD69C448DCF2 C7BFC740F4707E9389D91833F51064986DDA53A77F044E5D8D36B587E3A5CB07 838072F9048E10C69351EEABE6ED228A3E9ECA9C292CA37F47D67C8DA3C59A3E 31F8CE9BEF34F19E56BBA7C08CCC6A62333AACB26C18CD3D9AB70121BF370058 B401E05C510CEFC29E04CA157867EEDFB974971E95520320A0A279B6B5184D96 9090F3FB717C25CC601B5ADA53DB4C9344B1688CD50D48DAEEF9CBD3E0F888E8 830CFC27BD59945FD89ED8FBEE97EDEBC4F28CAF3E3E7FB56D5A472A4343A1F1 83186DEA4F46DF03DFDCA8F398B5682DDDFCB2A13998E022B500EB1AD2E632E5 9C5D187910398231871AF123A0DA1779C75E51803B64DD638D6947F939B75D30 823BD971A988D70FC65E33FEA00E8CE52F9C7F1CF603B0F9297DD957A972CA54 7DDED339A8FB84A273B7912602C22FADE95400C025FBC393BA1935ADA3422F54 F82B53A7F04367843737CD4F159D7AB25255513F946D6A92578E7C8B4ECDB5E6 7C4A5BBCFC1AD62834A320C28001380D33A455583330E502C5A7188843BD1B48 6DE2FB6E8ECBF57CFCABFCCE42F80F2FBF93ADE796EFF06EA34E9C06EA0F0C8B 53B724420C981B63CFA06BE231AB100586642AAFAB76C7D0879050677F9B9DE9 3BFC81F54BA28E1078960198F5EB919403DEA234C3BFB236CDAA4C4C6A35F152 942BE53FBC3D93368FF62877248CF86AADD990EB34DE3AEE9D83566FACA56DC7 0578A3972037DEDA26E5D8F85EA34AD901006D26D0F97019FB074DC93A484AEF 5F0A838346B7C97C61B0B8C6046FFCF4D5F3E102A94BC6E50ED7C717C26AA403 F96380D4228569562D9063613C2078AB2221C37531FC85893DC44808ACBA49F2 4C8C0DD184AE2A17F0C0F352BEEB6859606BB6C5E08EB0A88DC07FCC16BBBBA8 B687B014DE07FA0144A352FBC02B408AF5C432886F93C61185AB50AFB82780EB 2BD5C45488949D2C0BAB2D8E7A463621C9F8DF09F20269D2AA1CCFD0719C3874 0084D4CE728978865267759178451E48B04E9BA1F7869083A6D02324325F97B0 84601E06967C9EB1C1CEDE36D732268C80EF06F05A8F58F235651183150C0AAB 0BD83D7EF207E45A6916100789F0EEF96BF094EB2F33109A68AC1B32FC1ED266 6FBDC0AD94CC07F67CCDFE751EC45B7F2DA556AD4E4F3A2218F38D0D8E53B1DD BD3AD483007167666BF235424828E461FA9AE69621255C64971667CAF2799B3D 43636C036D2A51B78B5E0FB82BB233A15A847F26450C5563212E017D5D3590ED 46D013DD47935390C074E5E1260F6699D945A69F6C631554BA2B9DC48A72ED2C 9AEE2744D78A62287981C3A2874EA6BE7389109D0BDEC0FB6ADA7570C28D0839 D69125E56EA5FB99C64F3CEE306F7DD06E9D5987C33C828A7939E6A85E0AFE0D 8D25646587DB3B6CA3A92DE9565002040A3E101C779A7578758F0F03CC38A6DF 2CFBC503CAB50D87DD2B7EBF6EA61609F8368D977A0A12A632031E2AB77D6DF1 CA04B5C59D42524866D9782513D6F558E5EF728A08DB2034F7C7D9DBA1B4554C 6CF349D32D5A1E3CFC98B85D5ADDF0821009F5687E776D96E5BC1939B7811DA5 572D98741C6BDD69D55AA0BC33F2F9D5CE65A42B9FA718398B39C43D415DF77B F7DCB58ACB18D8E70BEB7F30B82BD2948522E9A0145B7EB2BC5ADB465C5A53E5 E6114CC726186A54B302C90A488565DB4170A4B3B9F408518CA2903C1A89A8E9 25484AE2C3865BB54ED857DEF9713F9D199D09711F40B22E854CE6A2914100D3 86CDF3420F3775FDCABE5D572C810694899448C622FB0A297A9135560CFC573B 283BDE5CC7B0EC63B989447A61EAF545D33D72649B8998EA1968FD432B7EFD72 BECE77DD42DAA264B4075955A63BE72093D94429B97728EF2A32A761D9AAAE02 4E596C0C46333CCCE9536B35D5657CA3D00CB8005B13FBDA193044679778498B CE908085223F329FF0B64975855192326413A04202E3E4F6EF30F53D2ED4E136 50D677BC911E6BAF6DEA2E68A5319F3723937E4ABBBC2FB48D06262A185BBA29 44199516D6891B5F3A0167EB5563FD97434E27D809A0493E41C389E5AC5446FA 3DE6DADC353EF52CCCCEE09B7F35EED4348F33853BF0F94A3AB5483B60ED20E8 581F46B0AD09B1324AD7A83DD637FE155465BD2111C0342862A87D152500945B 6315833DA7D0062E2567EF7058DACCF1A5EA487482F48C573DA1EDB10395ED08 E14277D2B690873B9A43B0996C8C10041572764664B7D5F6511DD6CB7553588F BE9CC02A9FBAB87810AFF3ABF31E0F6E4E141EEB1D14DA062AB0DA7CDDD4AFBC A6DEC1FD4DC147869A558821708FB281AD27EE888CAA098C44B3CA0AA2EF9A36 953F7AAD86968A7ECBD31D0DC32CB616F4392AF72C97985BF4722A332BB4C6B3 DDAEDDF2656E4CB67AF0313EC640E268C8CB211A24F8A235BA997A8D57A5D6CE D5B08CC0356541527228F1D04A4333374B014C7E0CFE2067E0CBE8BB59F7BC8B 811075F1AED92552DA95726377AA4AFE5F73860B5DC2A5D793466D23EC26F850 2A615E0B38F6A017A540F00C64734D70117A53FE36B96571D21874E359343599 B803F32A17FA039A1663C42E13727A37AB1FD94A2603F948D8DA832C989D9904 AAFDC5FEE3295928AF1918FBC4803CDDFADE31CC0F8F1091440EA495B5077A03 04A8BED668774A3A67B161D4A94661A90C99DA5A3CB2F56B9D8E7251363FF5AF 4CB90852326DE98A17CACE56A4819E4B2FA3061F771DD997FF1192595597D09E 681E349225B6769F1EC25FB506FA1AC228ECEDA197F5BF167A85D0A41E547483 36B5B8AF71ADF03B83302105750078839C2F65E0BCA6A209507E3132B8D1D236 142B9E535B458FB927DAEC6F5B09DF0D71BEB6866DEF243994B5B7B981A36098 34A6AF2B5B1598D198A1A920531E44C24EE70D71DCC9A17A8143EB3412E86A10 87D099170B434BF6CB2CE5031E2DA0092D9B8BC60EADF4C54B04FB9228278538 06C7379103A2F2382FF6D8DA1B465795601920470597A646D042DC8105FF44A5 3D5A71ECF5FF27F8C03D6EF607262D209598C570FFC56256E734143991864EB8 C4F37BA7C46ED9DAE354195A2563759D56BEB38756966AED3FCADD7F08816D31 723093D1D421972C4952789CABE590AFF88C223E8FD54CD31FBA608BF29EE353 47E28B7A4BC87C40372C2427361281B789F00A7217DC7F9BEE39F3C7FB879168 9ADCA9C6C09178D4DCD61E1547AF4BE302931AB9237EE2B99B6671B1D1FFF13A E5E877FF83DADDD4639796640C32DFD90CD02654BB53EE16C7E14023FBF9A1C4 1F52AFA6A9E1FF89B2DB3F5F803D24359FCEFB2BB98DDB10698D6A555E2D6174 FC4E41ECF5C08BF9F525531A06911CFDA24901034840DE695E7F3219079E1114 5C32E20EE5F2FC01C73F269164FAC22B8E5F158313B47F58B3DC10C820994865 0592E89358C3A94A9745180948E571D465842889F1434DC9EFA70519BC36E1F7 20A7785E7A9212A7D040F1DC58A12C21C1BE517F47386A45E5EBC9421938E53F EC02465EDDBA0FC3769079224D98627DB3F7EAA8D6EFBCF8AE7D2995CA2BD81B 28B8C855E0A4D9E93EAB65A283EE16AF65294B112A271E61D617F0F2918867B7 E7E568D9635463C304E6C445CB02A8D227F123A45F8439A96C70F39A7CD4898E 563909E016E351E4B14A20CFCD01E9D34F600EC881A88359809E5689F3677F21 872B67642F1DDD859C5BFF6850100F923FEEE91C0F9B6F76B87059684FE70A0D C9C15BAB6D30F9E8535A85C5278F4B895FC2435318310C456DE9F2935610B8BC 24157C3BA156FA8D026D3970C39231E3985D602B6E0862AABCDEFB8DFAF146BD 5E33D989F7C7EF5A643E947D3E64209C01B6A08CC6A4F768E8E1CB35553485B8 049183D8D961640F32584EC13F1F67B02BA89FDD0EEBD723C0486C8766D1BC93 18F19EDB0B96FF6533AC6C4363C2F834FDFA7630DFD9FB447F7B2D4D7971D714 CFF257F03F1F8CFE1BF2317E8A5DA172F14ED218D3452F6E7D5811850B2642E0 653D003F4AF77A6AF4B00565F42C9A770D2F09BEECC1FA3C23D13A329E6237CE 07CCD1F3AFA134AC1CEFF5FFD3D9F0802127D412816DFA853BF2D5A32A165730 5651C4B6ED9BC98EC54E8C7C263E11655A356F2A8869E458707333EE9EAF795D 57FFD2839E8A6F5C0B76646BD4EC8469F6A40C31ED063FC06C19862412228464 76BD4BE06D337C570766E9692C12AFFE9B8AFC1DF0BDC436EBFA980FC561DE19 8DFD9313C7F2E33D5F0268CEEF5A4B65FAB79A9F574082B45AADA2AC8E8F483A 03F6A2959B7BAD37DF0B6309 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: (), with Reserved Font Name CMSL10. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMSL10 known{/CMSL10 findfont dup/UniqueID known{dup /UniqueID get 5000798 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMSL10 def /FontBBox {-62 -250 1123 750 }readonly def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\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 11 /ff put dup 12 /fi put dup 13 /fl put dup 42 /asterisk put dup 44 /comma put dup 49 /one put dup 50 /two put dup 51 /three put dup 68 /D put dup 73 /I put dup 77 /M put dup 79 /O 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 113 /q put dup 114 /r put dup 115 /s put dup 116 /t put dup 117 /u put dup 118 /v put dup 120 /x put dup 121 /y put dup 122 /z put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE32340DC6F28AF40857E4451976E7 5182433CF9F333A38BD841C0D4E68BF9E012EB32A8FFB76B5816306B5EDF7C99 8B3A16D9B4BC056662E32C7CD0123DFAEB734C7532E64BBFBF5A60336E646716 EFB852C877F440D329172C71F1E5D59CE9473C26B8AEF7AD68EF0727B6EC2E0C 02CE8D8B07183838330C0284BD419CBDAE42B141D3D4BE492473F240CEED931D 46E9F999C5CB3235E2C6DAAA2C0169E1991BEAEA0D704BF49CEA3E98E8C2361A 4B60D020D325E4C2450F3BCF59223103D20DB6943DE1BA6FC8D4362C3CE32E0D DCE118A7394CB72B56624142B74A3863C1D054C7CB14F89CBAFF08A4162FC384 7FEDA760DD8E09028C461D7C8C765390E13667DD233EA2E20063634941F668C0 C14657504A30C0C298F341B0EC9D1247E084CC760B7D4F27874744CDC5D76814 25E2367955EA15B0B5CD2C4A0B21F3653FCC70D32D6AC6E28FB470EB246D6ED5 7872201EF784EE43930DC4801FC99043C93D789F5ED9A09946EC104C430B5581 299CB76590919D5538B16837F966CF6B213D6E40238F55B4E0F715DBD2A8B8B8 80A4B633D128EB01BB783569E827F83AF61665C0510C7EA8E6FC89A30B0BC0EB 5A53E5E67EF62D8855F6606E421BD351916549C569C7368AAFB714E22A023584 8B1D6B52FC6F635E44058690002C6BA02CEC21C54CC8875B408A8BB84F445894 5D6B3E4841CA20AF852A660FE9C832F773691DC6F7197FF3DEAEE97418A5ED2F F2AE65300416227CD3BB03C29003C770CD7D2A7A2E4C1DCA193651C2CDDBF93B 966938788694BFB562AB0010268955FC3555E5984CCAB0A9B7590C77C9BC713E A29E5BD7193A4E971D1752DDD0F0AA4648E7E87BBCE66A1E836C715C408B07A5 9EB56BEFD4596706CF839BA4CFA90CAD4038C1E006B51913279A2C31FBEE5BD4 A7D74F9103CE6124F5B439CB860987DF44FE17EF88EF1BF62C67060D25696BCD 94ADF08F04E349CEBDF9D3389D870D94CC05E393B3F4362A13A6A672EE5E8F5A DFE7046AFE3EBAEA58FFEBA4A47BF61F92E2003756DA643CCF2C9DFCCAB62669 E3C2A18D690B64D907F50BCA155A85E47C3A6954C6FF7ACA36D8DFCE777B7929 5F5D5F787B9C247ABF13D6D7B4A8F06BA25CCB342F8A5071325CDA86AD71BA23 8A9695C7D1D50D0AAC267AB7CDBA7AAF46A264B7B081B7E79AD937FEE4969FD5 155A99E652461EFFB4BD010E5885631E2B2497D6B8C43CE77D7D47FE201DD46E 4482FFDCE150A1183C22C004A0AF0E1F42AA6804E038E1DFC8B0A3CE26B52038 44D2E7F759DA5C252489E5525963D68BC27C82247BEB18818C7D4CF0BC5CC97D 8C701034B8DF798DD4CE36C3F8B1FD40B2DA14EA75583852875031AF8C909EE0 04495FDCD04B05A5EFEBA56A8CAC1F57F1B8AB91FB25C81CD51EE69D6E0F52CC A0E12CF7E3187D67DF71A599FFD895FAA7BF80E2E6B96592BE77AE96905BAF0F F547355A36C443797DDA7C414AA606CF9153E03450B77D1BA4088D739DF55F07 111B9E11AF37F45B6EDE6D7AC126E05886A57C83886DA87761BE600DEECD1344 8A82BD652BE7ABFE6A0F50ED7C6F4EE12CDFD80CA7A5518692F267C51C3FE76C 567BB8DDBE09A2AF901F79AD02B435287CB8057B3D5EE6655071F67B00438728 C4C3EBD648BAF650993AFE5E2B29074A99ED0FB725D9B8CE8B0292B08A280214 C3AF252BEEAD30C88F72E322FAC3E9D78A1038F5DFC41F7BF1AE3744A0677094 51B77C2D630B67853FE5E975A395C06A4D4DA744040B272C2B88D8B7ED3A2C01 66F503C9DFD3C7DDAC865900D2A4F2CDF517F449851DB1963468D0266D7A3E58 9F6B2A1843E6444274F16A9930302DACD8D2BC4588765099A86BCCD8A31DF0E6 2853114DFF2D19F812F19AE6C2E419D7AC1BC024D1195074FD0C6717BFB389A4 4D5428E7BB2E4F9E9FDEDED7BDCBDD3460805AEA0B5F6460C2FDF19273CE5BA7 5D3AAE0DB94C6AFA8339646191C23B0149E7CBF136FC4C844E025A38935DF256 0A0A6466A45EE8B9B23B6A055856FB084F87C73BA28F1883E3B184CD813C72F9 233B78CA4E125ABD26F29B92CD9DF39D6FDC2A217E2B6B45D9B0A4D536790A5D BC0903069565A442FA7466414D948AC432C6B75D8D0E1DBB217CA3DC38A52DEF 62E9D5AE9E753956C13819D93148C7683BE4F71B80BC066D8C19FC807FB1C086 B49215DCF56A91A42089F0D063B9981925691F7DDE3237403AC714F5CC3ACA88 DB2F1DD205578C00472FD70C8BA4F752E3923ACF3164D442A6B639902ED060D0 C5777BC20F9A3BDA60FA3BC986C38136FBD2E8F910E32EF36377C9CC187F4AFA CCEC423DB925B378522B748BDF12D523804CABA83CB5A7ED69FAB9AAB75EE8FC 38D9866E3754C4E2F2B9AEFA804044D878DED0E114EA0E9682FCF38F6628E63D FE1C1B5615E54FAE8684566EDC4B616F76EEFD6207E0386F06D3BFFA26425F24 303CC7C8A8D7021E7D09B202616988287838C3DBCE3179B4FB5C726E603A47F2 8248CB508F327D1291CF3F08F7C88298DC2D0F778D24304EFCF6E074182BF5B1 8E6551811FD6991971692108E289B61053D6DCBA2925B3903E8916EBD09D97A2 C6D08E89DE4C0CDF7185E1E00DF456B249F0BFC686E04FDAAD2772DC2C39DD53 9C23A41471267F53A87E5C2B8CBCDB66CE0B9844BC506428E6150B48D2FA6363 4FDB2CEDFBAE0B7DBCE4D83E29B2955F8966272CB865EDB360C8A8C19EC62A29 03066483E4083524A1E8D80FE3867BC1AA91753C26ACBE8489AB0E3330206212 93E07ED473DBF457EB8489E66FB4B8ED8A9EA8911CF9308CFE3E6D6F36810EE8 91CCB11BD548617B2C683C354452B9229E7C9E68828BBEC324420DF7C188CCE0 FBB514547553A7E9B38AC265783891F42DA472388569C8E7594F7E8810895A27 06E456902A8D9F65CA808F1FD475D011C4572F8A654BA01D67942226A663D179 95149FFF41A9F55AE84EEB9A6A39C017D7E4FD6EFEEE7FF3CE847CDB064A4954 9DCD273B810E0F259501BA4003A3EC1ABA6E13D24C0B57FF82D6DF077833B6A2 7EA54801BA81DB961C261689C0887FAD83771E55D3D137AFBB21779397E11972 6C6CA922F45AFA5C0526863A5AD8B9C0775CCBA17FFD37A44CED4710884DBC31 5C9D3F5441595B86CF7CA2EEE42AE87896E9E60EBF5F35C2B7FDBF9A9CDAE262 3F48396F0F741E9DDF1D4FEF75E68AFB020D06CC29B3A7B2ED819D1AABC12B91 CA2A65F1AFDDA2F3FB322E0268DBBA024663E49EFF076455338FE31A16B04EC1 797EAB0B49AFFB906A0690A1E8E2F5314773E1CCFFF43E6FB3875AC907F0C5D0 DCB9BCC127014D472463560CA0CB1C2CE614D94177C7A52A5B089316689C8112 CA57E35D716D956DBF9013B1E5B9626456B1433C8C15FA906458F957133B9E19 8D46DC3AC015F7602538C2AE3927C6DDBACF38E59220C2F5AF36B68DE9117C51 04CF7DF32B1AF55B87D1D8A5F4BCFEC66F63B32B6548DEDA3AAB06C5310E4757 78AFF947DA22809B360FE535506A554DDDE5A6F2411246653710ECE5CD3185BE 730520A766C47E1ED01890059882BE1432586864E1A86A7F586438C8DD35C00F 021A741ED47E0F16DB6070ED0C50038632CA4AC2975578A8372A080CC0447C79 CEABDF2BCD5E78564247B0F0025F556DA8FB62125227849EACFB724A4AE3EF57 90C07A5B27D2E59425F56BF8AD84C5F5310FEB1BC73D536339FC2E6A5BE2DAFD 97FC835E0D52F680F80ACA37DB498AACF152B9B44626CD89E3302C3EE1623EE0 F998FA78305960AAB9F483F731F5F67A8C963C23DB8E48FB804EF8B86FAFE7F9 4C09641915FA7E3930AC922682313408BC1607C76751CEEAFD660206A39CF394 40ABE2A313AB7D5FD6444E219DC5C26734D322BA268D330AC17959A390D6C8E7 3A155095BDD66516DAD5D65519A7FB871ECDA77061EFB21F359158B4470EF79B 362C35C06B85C9A9505C8361939C6AC013F2CFE8EEF46FD8CB4452AAB3EF1FA7 DC066557BADC2ADDDF7DDC2A0E1DD4A357E27A2073427EACF9B9035DA5272136 7DF37E26D96ED4B2ACD60596E039BCB15E259C72FEB3344E3EEE3D4F17DF4233 04C1416BCADE80BD483DD8C9AF979E1C7D50C4CF015870703F88B92C4FE46AB8 DE6717B55C460C805B391B84333097E116F4A51F631FAFAB34CFC925BEE8B72B C9FD5F5A79D8F2295FBFAE649DC6AB47794AC7D73431FFE5BE992F2B5AC67049 B5208251C0E442385A9FACF25E3A98D7F5D4C2A1ABDC600AABE84769CA83350F 9B87F71CEAD3600E02FF9AC03C1B5C21C84F911511A0CF0111BAC7605EE31229 3C526A79D943D92E1CC3C38ABE82D560CFD4172F318030852A5FCC0534B8B3FE D7365987C8B48A072907B26CDC2108130A33233E8E0BB5FDF14FB55098A10EA2 B51AD9EFB119F82B08D256D396D3263FBD9DBF172D43A90ACD1A31F3E89E8571 74BE98B9560E2CD661A2F93C69FEA3FF26B00772AE2C2C24B98D3D122EA2AA8A 44652CCDF4EF4F01CA7D62A976E23E8A86291F43BFAF38FD9C325E70F9C36CB5 A181DAD30156E98339E6A0498D3420B7BB3B4E651A9090D4A17604AE386273A8 3D4AE8CC18345E6E19DF06BA848F203F74B161D6A8882991CBA7385F308696A1 BEEB0130D938A764B98A2001A38489B1334025EA848CA44A116D64926D460D64 01159E77EA7ED9ECE7BA77635BE564A4ED89315BDFF54ACE6AA1A26591D13CD4 6D6425CA7933769B842192858D10998509396829263290A3A7CFEBBDA3EE6CDD DF1E492AECDFF7941B53573F01F623CA0A5ECC9D05A3D0954F7AE8CE94AC3B2A CD4E27519B2E16F033EB732AA024BBAF74626DB55DC74B1FDDB07FAE98B4AC5C 683CFD8744F361838D343B657EBF52DEEE7AEA7565C5BEEFE455DDDBC4DCCA7D 87D6D769C5ECCF14118A14A85A86865777C8E28F953160D5E82844AE54D541DF 550D5F1519E183E0C42BE88F0458CE8087F2CD4B1B49A8E9E3D127C4A4CB74A6 2E73BF4CC317781D03FF04BC36AC0E4AF99E2ACAD20F6F8029DE8A035DAB40DB 17D237850BCDD05931FF4B0FE2D0B79EC5A88FE0236271CCB075BD194AA25AFB 3FB93A5206F61A14602E4EB6F1C31C654527CE0C02D04314DF9AFD710D0EBB9E F8721B97F5FB18E27507E1F800B5509A58A1A8296C72B7B73F99B6CFE42E9C2F B63B3555475E562672645CD374BCDE937A9B05A157FB3E74C8297507253E957B 1A9DC421946734CEFA3D5EE357DAC7E9DE17A5BDDEF6B2D2A740BC58128FC514 61154664412BA1C05209EC992A77B7CA45AB7C0EEBF590A5B5652866008CDEF7 124A3003AE6A7CF9DF3C72750CBD281358CD2FF25B162B78CBB971DB3477F8D2 ECA3EE9CBC90323B2C236E375337EA0848CD7CB5781A2B0A42DE7E4D99DB2746 0B26796CEE129D23C76794B7CE21C13C7D4A998B752C8CF43A4821B736EBE246 D2A2BD7BA3351FBCD1B0A501EC1EAABE60D06DA2FE39BE1F0AD629769FDDC933 F9D02F9686EC8C2D7455C26AF4DD3F6860B2289E3A30E1C254AD17D731CB73B2 BF4DFE90CAEECE3ED0CD3FB4C8F4C7BE1C056AB4E9B95781A8968E3CC1010003 75DFBC4AB9F6B27C5A9AD88D94441A8ADF09EB275E5F0E5E6F3BFEA0FA8C308A 8593ABA0645ECA8FDC3F0E264B35D4B0DDB86B93CD8A047FC409E18196B501C3 B003622999C47BAC04FD1ABD8AD359C977766E9643EF3BD6385306B08EE3E13E 7DA5A06AE33D17A3D574C6390DB6E9429754B210F0C349C359559C7EAA2350BD F61D4D8A92B1AF697BC620FA0351E67E0D9F41A95A47EE0BF210C2C48691901F F905F65693DCB85BE412F097480F6A7266AE0A928729DA0F691CBFFF3B276EA7 322BCD2206D96E3DAFDFB992CA8F2955F0E8B882729DFF840569D12E4DA1775E 523AA734552AAB6F2F16B89B39F1A3FF0E07EA08D13E612F201716C67F327017 6C041760DA30374434808273062C1FFA2C47B3FB578807BC26537F542040FF77 66C995EF3E8B08B09FCD3EE89C30F157158A739606D2CEAA26694A4F1CEA6633 B54933141CB85C60AB262E2D4E824A3B85C2BEF810DD774F296AB37D0BAE7182 5648CD18556ACB124246A75474B232D712C2358908B5D9A76F82C626BFDE01A1 093B8FA6AA0B32F2CDEF737B28BC0448FF816DDB5812131DA0DD5979D77C3838 B978CC3F6778A4BFCE9A7087EFB19749285AE4C92B99A6649DA349A2E0889D72 6D4FC664522F06C8C4D86D30BA43ED4E42211217D01636A4E17E2A132D26F394 EC34EA12D84594AED9C6CDBBC0908860F39B240FA7D7B3003DB10322498691CF A294C0FC7ACC0BAD1EED3E9D60AAE3F7429695892D1A21CEBF062C6129B33966 8B2EF6E932F9891DE6028B81C5E9B23278D35B7F0D83989BCBA25E20E9D503DE 144DC485F09A4EFA1268AC5E4B551C5B2F1D51E9B9B9C0FEE585204F869D0BE0 7287D7570A12940A47C1F51AC6134F03B415C30E147C49F89228855D093EE55F 172711F37776E97A99CC4B36E2F10713E36FB279FD3FA5A0EB9F3938F42E2BB9 254EB8F0C0F30391735019E02BFDA21D9813C6A22279B898EAF01AA892B14DC6 5912B9275167AB46EBC420836CC1A5F38A4EB47C039A7BCA62BC3FCE4199FC71 011DD6E5FFA0F3D7F04AC02AF91B9249B9F993AE346572329DA852115BEF8460 B94690E790003586F473F37EAB5AC2922F5F663EE2C3C0C336A8DB71650631AC 0A923A389AC911CB215EC2EC7D50CF8AEFD59EBFFA53A9F1FFB7E6215F17093E 3975F186FE23BB5FA5474C11408FABD223E1E6F62035B5A5C1AEFD8899F00FFB E729C2D5FD551E80716CEA4E8281660286A802AAE8D5834F37F2EAC46297E57E 993B09251DD7789D3467417E393B7DEABD06676B96241B0E43ED1A1A9FC3B12E 0D34B2B0792B79AA648FE9450C3B209FB6D7D91F50C52A5DAB0BC81A8B698BD9 18946EFF691912D7348D48FE68CD876FC6F71F81165D0C3272DA1A992308D9E0 ED6D0A4DAD679AF495F62B78D462B463BD4A40931172290C615B3B3B6B47E45F CEBB85E0A6AB6832067CA6D403C239530D07F199788AA4DD52553836851C5228 1072406F6D7323A334E7A7FCA588897C4FBA6D4F7DEB65525EFB74E539C988C3 A685A98752F7198E77E456A545F0D23A1BEF81EF58B02D289CF980A3F17BEC8A 6F83DD90C4A917EB0E5E2B444A608E2E9D2FF80620E16AC1D7775C0A10C1299B BEE0E1AB24C50647E5CA1DA65CFF3B2C295F0644CA7826E1DC6FADEA93D66A20 DE852F20AD224D28DB900519EB1569837139C833F24B799F7EBE3FDC14235323 1D0BCD4991C861F38DF413A5A5588B73AEC3BBFDB885CE17BB3E97B4E6A79761 93EC8418C2BC4725CD61B5E30C07352F647C3FD50083878C13CFAC241DDCB082 E53703D182068727F9EB6FACEC25F6D901D7309ED7370867E34E267519E22D62 4FC7093448BD0D6B1C43D318A3E14C92032325C132AE0FF7ED707E1FA4A955FB F5224BE0045CB14ECC321D0F333FE24EEFCC504F7C756451D7693C3E6CA87526 4912E1B6DB935BDE76FBFAFCA4ED473F1D2618812CFF25A6859C626A216603C1 361BE3E071FCFEC2D4BF2FEBDE07DBD56A1BFF8303901168FA06488BA6B76F36 95B0A90D7724E9ADB567C2ADC65CF3482CF47FD1D16F70AA19A97D0F9EFC611C AEA5E1ACCDA7FB2DF05E9480936281484BC329F0B771775E73F7FD72FE3F45F0 50ADBD03932B38F37A8F0A66B2F739EA3AC8811C8F514E68C5643E4AFF485C81 88475A523D7FCCA5C8809BD49846C77795A38DC6406082000236A4D2628B5932 AB7916D44EC2210CB941B9C9DDBA700AA803F99E12BDCE73F10F769D7C8E1AB0 77431FDD829222D4A00DFFA8E5FC89B8DEC03AA4910C57E6A689EBC39EA345CD 785A2885C8133229160EB3DF0B348DE734E4F78CBFE9340432C21026C5832003 E5688E20806F46ED465309FBCD5D50D1585C981C7430956CB436B883730AEDAC 1E76732CC2F9B08F3950A7B84F0CA9C5B92A11EDC335D079E6ACC69BD64BF071 A2E22CA7B18E275EB0CF680AFAC9DDE4F9B48568A1F4CE85A570530780EEA08A ECBBCF0166876363395FA5F7B4BCC0AFDE2B01C8EBFA7405BA281FFD4EC32B51 FB96AF5652F817C75600D22E6C0CEDBDE0A2974D52A44E36C743DCAE8F110775 372EAEB3AF2D55D68B2C76A1A2814E5E7F1D077FC7E99B3C80C381BEFD906452 8ECB03F297CA32A5F7535AF525A87A942AF4D93144D178477E926EF6943F6FD5 522D9959FF22A0D0F00D5BADB0CE79EEA0B7D8CFDF3BEC5CE672A1A93BB6580D 8795E65F7BE722F86CB07C12BFBC4FA27708E0D3C1061FCC2B24033A40469AE2 EE7C5B44A6FAA1A4E0DE6D3DD355FF9EDAA8A80282DC5E241C6B85ED22EB6F32 A3615DF82B3C97DE1C9377E74B5A4E832FECD74F6712A0EEB26217EDA0A1915C 92C4924989071D2634D615694FCFC25A3EA44735B1B60E08E0F116A3F437F214 712A2290BFD8182A0D35E287C7B6177B201B8D9811F08545ECB8934AB6E4F36F 9970CB8C83EEA9F0D6DE7519672A1EEB889BB5B3AD6FACB079863B702DB447C2 3D945B9D9FCC05EB06DDAD1F8D71F7CCC9523D406CC63AC457D81A407DAA05F1 4FFE6B917BA72140C939A0CA037529A9F2F5910669348796CB8F5CA1A14F521C 8B53F445CDFCCBC6E9A94D32F3FC1C55404E73039A7B10C901E4490DB78E3403 926A936799B256B6A1AD4567DE56E9E1D914AEF0AEF42CA71F8252FEAEC53FD4 1F4E4174B7501E1CDCD4143ECE6AD920458C5E8DF7C39646A95EA56AE08A5BF1 9E09F2C44DC93D76F203637782391C308942D678163D6E22D1363BE248DB1D80 D6000AD8FE52C21374E2D22AAF8414F46DC452567D3FE11093922F0282015616 5D825319A74AF0D0FD88920A63E916FB2CCBE450F27EE6F96343D1826155663F F53474CDA664DB56A0DAD0AC97720AD0BA06BD1D55005E3B767E0C6526C9C347 9E0E072500CE5DA8B16DC70D098834AB9DF05E8FC7DC62AEDE0587D8CB0AB319 C27C340E48E48417FF449941C919F46363462F7291F0C88991276BA1557D8993 EB0D3AD912287A1B2BB68B4731A35392406B3A23E3DF2C1592B7531537C6F613 D93ADABE826A97B1F918DB35AD433512A26648077C3D948FBC064C02EDA1DBBA 66511570E9ED38EBA608EA024616C0FFD0A433D84B5F1A6DC1CFDA01AC9C1ED4 06FF32F731D6485A5DFF8A7726DEFB5D15E930464BE5016B74116233B4DCF8B4 81A33120E2BDBDCBEB57E14E45AE1DBD270B4AC359027F1DC8F6FA67194238ED 37EB6256D4494D11F5CDB715AEA3DF46A15DA03824EAF331CD85843A23E1AA77 BDCB175748F7153ABFE3F05F56F44F903BF31E532AD97271413F97DD0C570453 3B466DB9D0DAC026B02DB37E3E8C4821960694935D58E1F183EECAD27D3EF03A DC19E91C1B628CF5870FA7791B27C3DAE240B68F14A5897FB3EE875B5A21DD95 CAC5071F5BC24BB02C42F3F5F130E625055B855CA412375E413215CD11B008F1 047A80AE2862A35221FDADC03EA74981017FAA5CDBC91B2749BB60B127EDC707 806D23DE8DCC3381A1433BAAC919E1ACD205A00D5C6228AAE1D7205F7E7C35BD A7E46AA9F67DD13E7500F829B36BD2031BA1B0DFCBC0E315087AD90EB064786D 87ECDEB9009AA305785BF7212447EA60D1A2F1622F29F846E34E90D1F7779B2E 08D3A32941FFB67E1AA8A8868237F175F133A15E4BAFCED9CD2193010D63D70F 6DC53B54F0ABB6B89BC7DD6769BDC5CA9A90D006A1A6A33CC22C6F9D16161BAE 6D690AFFE6BDAE4B8BE287DE2D8CA0576D17FBE5DB16F9E385A918F405296DA2 733EF011BBB4BC787D0AB25A7F3CE49FD98B82B12682EB7CE0C2B1ADE33FD146 70C6B6FCA22F1041D4A78818E47015BCCD94AF0BE2B086DFDF762EAF91617225 9E0FF72EC34AEDE14A309898144DA21CFE61059634672750E282262997F3D5D7 9692348605CE10F2CE1242E83E35E9088367CE26568F78981B480F8943CE943E E2BA5E9CA223EBFDB7EF3A9A4C0A85CF2F03F0DF9830EB9795DA2D553A50F34E 6A0105C8BB858261685D13F387D865BE4FCE7156AE29F21D5B413B691E5FFB22 2349B6FF80B48C9C6E157388CF057FAEE6AC1D1EA46831956B221F506D3368B7 633BAD549F50523A1EFE4A54E0D5A3111743A18C2D863A34A18A1ADD98C5CBE8 30D194171CA6938838ECDEDB14CCD18971026C9AA7BAF3256EDDFCE5464D027B 08A7A52BD30821717F51580C8153C0DB6E78CA1D8D521F8F115993B75975BDD7 27946B96C5E0A5DEFB59C07A3D8C2A6BF6205A81435D3A955D8F92DD690468C4 DF2285B1D72D794FCDFA78A0842FE72B365DF34D1FE27BFF4F1A933C83984602 3427042AAD38FC16DE936A2832FE1F3C3FD21ABC508AA4AFEA1083E43873A518 2F14EEBD69F4CD7D6823BDE8FC22256DB660F2EC3A0321CDFF81E8B58F2F29E1 5ECD2962D7F622608643B736D9B445332906800BB453C32F2958B77486F1215F EC8B9431130BB35D0B4560D6FD7D437B3C838C2B94152A4EFB7AAC52FD7DFDD9 5FA07AE14E486144555FFF38D9A5AE2B01A02E265135167D41656FDE7D8102A1 4A6D16DBE6371E1AF2DEF96ADE101C80BF03EEFFA64CA1F2360B3E0A8E29CF74 34EC65CD5B3F317429846C0FE711FC97CF5A7A4B71FB7EF868E8E4AD442C7217 90A3C75CCE061E5678B2A8D493CAF9B05B8A348C71A9B097A32A794F1C46F232 8C58DC3A2E27EC1F40885323BAFC0BDA628F1637B0AD62ACB06A8D31009EC6C3 DC8520B4AA94FC2E3873B14FB9636BCA1B99F504C7FD5053C85B79F22D577993 FCE560C93F3DABE4D399FD6AC06BD8C4AEA70D412C276FED6435967FFFF31780 072CC6B0F5870B8B1ABF1BEDCB6429632C674D4344AA3BEC235AE64B64680711 024D82A7AB55240439474D5C00A729866853401C91522D02A352AE3DE5D771C6 C2BCBF1FDB1BBCECFB4743C63C4F9C601C3009E2CD2D8AAE1D2A77B7908A6215 2E4D0D4351083643C4A389F9EC0A883A1825B5BF56C46A45700A51C284FD134E 0C655E0D4205A8DA61DC248CE4668002E554F0029B6839041BF63BF4F50135B1 F56621CC41E39B0AE8AE99B3CA89C05F0856EC4623ED21E7E175EFF2E0403D94 606021876A781BE404854FDDEE0B536E12FBD27680DA50D31509923CD5497484 09D91933EAC9361CF5AEAAA913A76150692876C4B1708DA51973FE65354B84F7 B92C492BD8F7DA28DECA971B0F70534E217EFCC64A937F8909368B3B59B8F7DE B7C1BBD4D59C69DF532B59C1126BAD4438EB2C009CB12A0F2EEE1414611CAA24 78683EECCC9DA975CE1A1302CE90486053D3C6AB1BB6A7EAD3F2FD5D72F01F00 01F2B8CD1C4F7CAFFA418AE0DF5580814BD4C1034CCE04DA36CA3D4F8D2497C8 36FE73384B7BDB6C2097009690AEEC180AB34B74064B2F5696CBC6778C967500 D3E86038075AF711B69AC17200B5BDC1AE2A8D2805DA150330F9268FD484F48F D10F4D209CCD4E64B0C5B6C5CE08DB708D05D8E80617C5D90A7F13A1C3B34961 0C6A0400D190E5187A0760D68B877E6A4082DEDDCC44E766577268826E348789 E52A68EB38BA4FC1D3EAD381BB82D40A994AEFD1F78EA9C491FDE99AA4EE597A 85495634A8380917962C18EFFC9A558D4A71B4BCE1B5EF02F165A9C5A72ABCFF 558F3EB5436AD0218B1C9B252CD8A465659277CCCB25036968952B4B74D1F94F 5E3D25D766ED2241B806E3757656D84C3CE5F4EDCF8C4F5648570167FA3A4AA5 3928565CFA592C54A428CE1F28C27DE92DB0FCA45C92202949FE6AD6F46B90D0 FCFCDD5D3DF0685AB5081F497C590D19A015E7709E7F78FE593EC85E4247CCCA C603672DF488BF320481B3367DCEF68955848E868AA6F5CCAB080A64A1D5F731 401293B476EAB3FCD7AC94C8DE0BF530A7EEB3073C06492884158D137BE28815 7EFB37B977B6E3582D1ED955E6DFAA6E897EEB5A5D0CE35F5B60DCC59293E3F6 CEA45EACE076D69E54236B778C9E35F1B03108C6DBDA801025E6DD0FE87ED149 95759DCB4B5CD3216F9594956A28D793CCC2D8E9B7C6A23C5E4A1D255B7A37A1 D50CA5B66D78F43CC9C0D885E63C87BCBD846334332C64390CBC29BAC4F31C07 BF9F3407DF53E948742AE32792AD41637311F7B5CD3521CE83C2F359C041F24D ECA3C168EF679C5B6D350E8FD9350BA83ECE1F9723F1457A691171327606ABC5 6F953C9DBE83CBF117FAF4403ED21B71DF86BDBD9E31E40AC1BB581EAF5072DA B8B7AA58A43E35EA1AB1D51CB7DE9C1766DF5C81963DC58EBB0D70D05F42D3E3 713042E26D616A634C56AD884790AFBED234E5F233608FCE643E91ED52649B30 0D961236D21B32C6024F3CD246EED413456AB65703102F5B03C3956EE4AB6FD4 E7054DACA6F5B2F238C176D032DDA74B06B4D9AF1AC9B2A32E9B8CB18F55F049 00000304E7778121D65C0F8B1C2157A5E8C18F8A3782829B0E88EA7925EFBE9E 02C61D74DED66FACE69D9B8C1CFE8585F3926B163E325F4BCB8C83602080B5A3 D1F9578629FEAFE165BEEC490756B4D91FCAFD11B183BF70E245ED0DC4B85FC9 ED13E18C4951C42531E66708DF3EB49026D55C4696A6F2DF429B099713513F8A 4FAA8D51F8A5C72B7133F43648A463AF7CDA767DFFC85B7620F9CC3A71F638DC 01E7D98BBA0B92C0D5F4285F0F7C47FEE06BA3CDFD72DF5D7145E7E5F959CA68 BD0EBF62C046C7C116AB5606B33350811862425934FC9A5384128D7306A92F2B BF85565B71536F3038198E8B7D5F3686A8AEC17FE7BC39AF38DF6DA270F2591C 556A8C0AEF3AC7B7999E1957EA1BD705B605D25808EC640B9264392F0B721FF6 0CF6648A0FB60EB72A0AC683A0D49F348BDD1CD9B943193DE838F722AD2A11C0 8F9B82D2F0EA4D689F4A112451473D0284EF6BC01369EBD30F2273BB7942B23B 0BB651AD27262DE0754F13528916079E48C9B4CB8750EB7DC47071E28800F953 2CFB7B193176D1A5B5F51629257C3DC0A91F7D182F7C152D03B7223FA73E5246 A62CB07CB87766AB18B8A0BB11A005053A0519DBD69C7D03B1C867CFCB9F302B E338FF36AF977C879573BCE4ACD3268ECB7D575701F650095D584C3445C51C8D BA9982C62FA34301899888BAA60B4B1C39DED2A15C8F63398C6B53AA9BBF7056 699F3108683D355FB7529F8ED0943B228789C2A311B343ABB6439AC7F80DA64A D42E8510E0C3D69131D284F8CB7306FE8639029F2EB5900A8A6A0B93FD797F8C D0527DE50DE5D82ABE9055DCBFC983D4B11C3594F0BD375BE0396340094EFC59 66A771B728E224BE955B0EAAE636468D88E2E2FC7C1716EF3F3510BBD4D359E8 2FA2D20B6322C8D29933E6A33F9EE756A12069FFDF2B04F415677D64923E361D 3F590A21EE6DF57C26A58C9FB07FAC142BC9B65B1184A4615C39B35F8036F61D 21E3C297E01D4CA1942A91B3FE9074D98C7D73EFAF5FF9AB3B3B55DF2FB1F580 01A81693A1972D11746FFDA5E5FF657CFDA822E0216F959E2C92431ACD03EF17 F7C1FE1AF19631425E0C93DDFA803CCCF3E144FB1B79CE2C25EF0AF231B0F529 2C764A0BA56F14B9F8B1E8F7AB350778741A3FC4191F013156F7C4ADCC1641C7 4002E1F9C93AE270A5E43597FC4EA5D8BC36986461DE011FC7796795D7A09AC6 4DE84856C18B2FE8249464862E23A1F98BD1C9FA97F73ABCAA684E275323D7D0 443E985704DF3CB952E82E00C70798E41168E050FC09EB0FD231358FABCE07E5 849F1AF59E0A9571E46CCBB3F0E03920A03A95BABE9FB3C9E3B3F05736C48D37 885E887EFBDA8059C968188B83215FA2E4C14EAB3D38F548B6E7F2756E1BA7F4 14CB40349207E7C4D32FD64B656CB6CC5EEC1797D42926A0491F1FDA4933689E BB78C2933EA92E48D5E02F960E9399805763CA8368324C47D7C898D8D6555133 C73D58C1E2E7019904C4D200A8C9FD34C1069D7A8141D25AB538D1D87D1CBA29 DD6BD5A616517FDE17F15FE795EF681F4A151729253ACB20ACECC38B53F3E0B6 710984B40B5D8BF202FD090823290F9260FA3DF4EF656310DE92BB1CCB78E203 FC1DEFB38979F695E623FCED55872C8D388A430F87B0001E6CC3083E822CFF91 3C2DEFBB95FE7ECE9AF67E7FA3C7B37343878D108082516D5B03599740AF3A45 C097014FC505A83B0750A2133C5703BEF3B82AB4626EF61132DD4E52ED14D283 2F50425F4A9056161C74E2F67BA0D41038621B74C086742ED24A03700DCFF6EF 1E60BF825B22DE4611B4E24F835FCB8686EA8242CE73287BD004971C10266C8B B8FBA61614A1947E8FC7E8E060A59C62588572052655CBB185BBB8F8B251F522 DD7A8A2D135D741AA7EB11BE3BF083FFD57A0AB78F83563BE3E7D1271065D670 32E40B8B1BDF47ACD8F7A63EB7558B2F89D8D9293AEB5298CE6D574E33F85A6F B94C0794CB397CC84DC15404A942407D97F60A46BB537BF328806DE2AC02B96C B00BE05169A4E3CB5E7F839DFE392FC155662334272B6889C69F6B0BE85EF015 077F98AFE247850061856EAD97CA46A75CDF761D8C53BA38C622C662C9EB9B15 B5048A8C02E3331B0A0FA98F9FDDBA313B0ABDB1D3FE7FCF34253C45D6AAE735 7A91B9BB3058A62B3021170FD80CBA44E248DE953B8CF7BE8A950E48A4AC46BF 5A0086B58340641F525ACAD86563C1BAAB24B2EB56052F01D31246554DD7759D EE98C52EF9CB7A3480B781D64B6075D35E66FFD476553277E98207503F6A594D A6EB23517E2804B7937C0B1A52CE767E5625F3EB58AD088555AC6CC833530858 E133F17629E9C118263E67380097F56724792A4409FBED492A1079283AFC6FC0 CC576172A429A284A1FB36AE1485D3B126E0156BAF24EAA43D654F8A81EC5C9A 9DCE682992B82A23A91DDFDC0D7FD59EA5625C9AF7B41ADC379BA802B68AF5A8 1208E7D878B77016F51606DA23902061B7231A38F2BD361A311CBBB8E4F81837 70983CDB085EE766506B6A0D8ED0661B9199AFB5CB3C11C87439BA6B267FB038 EC994C943D785EC0F82E4C978241DA2013D45CA130B17BE0AFC2E3EB2BC2576F 4CA57C21B66EFFCF47DBD17F04B5D02DA03C9F65BD260D3C0AFD4D0C2F03B0C2 53D8BC7F598A94832DF93E9EC8C885C6BD103DA485FD41F9F1C628889EF49339 3925544FB456C43B142F775672ABA9A56F042060BF6FCBD51215719E9EDE54E9 657298D20A4BB0B09B003AA2BFC1D57EC37C791AF2662D98EBC3EF23959B2322 1D904B6FDCB04392BFD204503E8341EA05A78E26A86B1CF7AD6C11569C549E27 BE7D0EC70265B19DE068E1B33700C083F783FD73E0B162D73F14AF68FF4DBF0D 13FA45367F212DE52A693A93201D1E73085778A70B0D9211B1888367627D382B 813666EDC3035C2F35F4A22CF1B072B94C4A7BC789019E1806D0F9B8C058E6D6 7A6A9A9331D8F8D85F3B8A9FDDDE80809FBB0BC34EFFEEFEC90DA48D529924DD CBC74E41E66EC7234F0C71A73C6C9FEAE12A60A090E7A08EC3AA483AEFB99019 49C56F2C30CAA788030EFDA0267D69122357A169A65A63131A11B55D0506170B 18C49B1308F4D21C234C2FC7568DBB6A103162A2B783918FC520B4805BC074AE 2C18AA5DBE694B3C18B76446F9163010BA7521D6318C3D2DC785A6475B38B5E2 EE6AA7725813A49C74E93E9A2FD2CB03C5CD75ED028D07B245991A36AC72E355 B9FC5F35E826A7BF1F83E4DB5F1A9A1DBA23C05679D26868894BC5448A59D8F9 D2DD70601FD3613C72BC09EEFAD398A486289954999C7385F09AF30823BC50B6 EF36D6559A0248780989986D17B5924856AAD8677F98BE47D15F74B2B69E0216 15FA82A0960BE381DAA43ED33D08372C30CFC84402E34CEC934F99C14E5C658E 466D2B6787F68B3792D3ECC2364A6C76269FED6F6CF014305D05614A67B878E5 B8368BD56D833E764295DDC35B5EEADD161425C88CB6D8F81579F1F97C5A31C9 FE55CC44603105B72FC69F01D07F350A1FF0B943E70235DAF07E6EF960183611 0C81A9AB28A9CDE69874B4A70C2C53A799C9520C13DFDAC2C8488CEC702C7734 39A7FF456A41F48EB8D9A3EDDBAC21FACBE014B1F558DB9A5449608324737456 D9932C34C9B18CB8D8DE213024A4078E63B1BA1B491DE961F815410BAEBB5489 B80CDB5C2FAAE282C0512546355907CB0D77E8DFF5A0CD5522EDE5CFE3911566 3F70E33B2D41EAE2C2B86F0D203DA2A072F1BC75DCAB0C56132836290769EF39 16220CC505DD5FE9DB8ED071C5F81DF6A41BCF2A0608B5208ECA0F86EAB89539 4DFD77CC2F798496E5F5998430054EB5EF7BF5E9AC085F57948854365BC2D2CA 4EC3CFAEA580E280FCE5392666111DA2084D0DB310D29001DCAD0C35A33C499F CD77A1422556D0C71CBA2FF7900968B90FBD64B570F58550D2383DB7B67046A0 7E2D5F6F01ADAB704D51C110CA04DD30BB91969A0DC4A0CBA62B94148E0F774C 9F78EB6A8EFA538947DD17A141DA8E0E9F5D4A1A38042601831EBF77D7A1FFCC C34F8FCB2D5C39D6BF6B726C16F38D87EEB3DB9BEC665C397E11271A8C04BB66 84EBA2C6E9FE2A05CAB1712862AA4F6834830E881B86B93CB1772F27D1FC21ED BF827BDCC7B6D798B71BEE0A1DBEF5C74BB5154AE4421D831DA29AA308859345 F77565ACD19E4300610B07B0F47AA1497A0D0A39E6F0A86741E34774BB65FE96 F0421081D0CB24279A28E45890A13F79341FFFC9EC4DB0F5373763060D7EEECC 184928F854D2CE679631CDE95B057C10D255728641438CB48B10768BFB910966 E3AE93DF9E703E2990D0A6B7345E22AFBD16C6957F0A90CC8047BB879D8DBC2C 9EC306C1139B3D3CB2EE734720DEB37C33D267F57B8AD84ECFFFEA0EE5E1CE46 8A5E75906FB6EDCAFDD02DF68084D649289E46005285822B68E434B2E8FAAAD6 BCEB687FA607F2ABE98DCAEAF00D33428C87DEDB95B0905A55918FA2AA10B20C D9B32E188CF120B9488AE836E4532DCDAC3B77A7349B2714D2928E9EB26AFBE7 E5E13F51364CC3DE4CE6BFA27F2AFC4DAE7CB0CA8FE4D4E8906C287DAEC59FF5 F1D9582847A43EBE9933AE3B3053ABA7535213D772C1E4A23623832E3ABB11F4 332E4E64A94ECCE3D53598E523311535072C61814EEED0C8155492F100C01737 D0D9922AA9781AF7B0AE340CE82F92788DA2F01F6E9130F2597A28F00A554C7B 6B0A5DA3D8A4B4980736ABEA80D288565525B1442F333F7260B8F99C6B70ED5A CB9AC9B87BE619E905745D36F5DF9377889CB39AC77C4F6B0BFFC68F5C830F50 D0BF1A5A554A83529E79111CE041AC95D9A2B0DA99226207DB782A36509B9F64 231CF815E5EFCEF221101BE1A49B1A824E3F754FD4935E48B244CB9C0640587A 9C146FE80CD26326D94B4274C5E8B2B90388374D2E7BBDBA974D7EFD79A17891 CCF4F6AFDDB91515DC6290542DD387966D227F44A9E0B9822992EEF63B5A42C4 D85BCF30DCCED3BBD426F1E39C07105C233085233A45C398DF878542A0F8A0B9 40BE14D770099CFEF8784A8EBB0C0C4E71ADEC358E82A021F59D6BAE17F2C414 E6F1EA531BE498AE9E1C9858F88D1491050233C754709F137E7D29EC3AFAE1D8 A7FC946818E7E0DAEF6D5C7FA4AB8E2561ACA45E2C76D3F427080D2FB50984FB 5FB1CC0045C2DBCD70888B9D3A2038D91F478CAB43C93EB35D7335BD83847130 EAE208416AFB970C3A11B058C7F8CEEA67C138B132ABE519D3B8328ADB091F09 1948D00BD316A9456168B5B8B15CFD0828B4FD46C4ECEFCD50996F1AB5528E32 8E1DD5450BC16B40EB8D41B8B564CD7E4F4161A5377E6FD7CA4F33F8A3E63392 1DF81689F032C4E4056F29D055EAB09BD617EDAFF678C33E321440B17033E08C 1154F5B979BFC063A12EBCE9A4A42CA9223B0A4174CE6F26022737F652A14DA4 046F0E166C7FA258B79AB0D1E0E73DE9DAF2C73F53F3E292B0A5C672CC4DE949 4038C8C4146D026116DD4BB7F8B389F098D2BA39E313D2EA96BDD85E5FC0406C AFDE5CAC26A5787BB4D9A7F8AB1276AF7295723CBE193FF6F6CFD5BEAB6BAEAB 998CCEFCEB6E689B79F3F82ABBC2A75769FDE3DA891F73D3C041769DA7D4F445 2FB5AA348DCBB3CAF0E0DD39257C1971E5CB6CC6D5C9D10836384E96B4E90132 9B558AFF10F0956045A3287CCD6BA9D705F7980543AAEB9F1AAD87C3A8A3A012 1F981F34791543F910D0BE003D76DF7E471F41B9981573A0EE427AC26E9D0D09 0A9F9DCD0D61881C48508853F56EA96DC9B26D2CEB9039C32A7154124E8DC6C0 04599CD1B653DDCB2384E17AA673648856208B697F3E0BB7780632CC7DC57F39 73B05FB23A63322473558824BD8C1904A05FDDDD23C7CCC54F14B7896834C57C 600DF23635E0264604969D2EEA7EB3DED268085A0B16CF733FF6EDDB75E07A7E 804DF86174D41F9D81EEED917D7E0E5C3C7BF4B533E9B54F42D63C8D7C5830F9 48B2276D6EF7FC08D561B94144C968A0682F2CAC2C775B6964AE26F11A1CA592 0F58CC076A015E2DAE560DDBC136343E05CF1F098732AFFD2F2402327D7894D0 9D69267154C79E7DFED19D0F2821F9490DAC54B3A93D8F896D7C11A74F799B57 93A20549A6BD5CA1F2DA98241F3EC3BBCD6BD3ED4DD2E2F16DF519B2AD42378A 130A1E8E9F134336B2453B8F6F81124F4082ABD7AF6B6A67D3A44F553827F1BA 9FFE657A0A28CCFCE919FA09422AD2415D7F33E86DDD2C5E4029E78E6907CC97 92398874A6DE3910A374A6D5A53585FF5BCCDBF5A6AE5CC5FCB5BDF2897B6D2B C459B7E0457A6B4C9B4CF557866176621AAB6A35230F3298517860F4AF3D4346 F79C4CC2A3C02056E11427D39743060D79DC3EE65ED6081A620A007D730A0BE1 4DADDD06A6DB7CC8BB6F6C044AAA42D37C48C6844AAA15FC796D3B50158729FF 6D6E7B19D27E71C31D7BDDB315A8331AA60707345C3E5B3D1E6CE79D367C1FA3 43B0BC63B8E85A2773E6591DF30061B10210BDA17FA74263B3EA84A5B77F741D B1B5CB1BE3E5B42292C182ED6CF27F9AA2792C08EAE963E83271E07F9EE0E728 64589BF980E1E524160E5F15B0D87A7840CA4F4326475C46461106795FCDE982 0DA22A6FA88ABD1C1DA3B1452246 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: (), with Reserved Font Name CMSS10. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMSS10 known{/CMSS10 findfont dup/UniqueID known{dup /UniqueID get 5000803 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMSS10 def /FontBBox {-61 -250 999 759 }readonly def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\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: (), with Reserved Font Name CMTT10. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMTT10 known{/CMTT10 findfont dup/UniqueID known{dup /UniqueID get 5000832 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMTT10 def /FontBBox {-4 -233 537 696 }readonly def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\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 33 /exclam put dup 34 /quotedbl put dup 35 /numbersign put dup 36 /dollar put dup 37 /percent put dup 38 /ampersand put dup 39 /quoteright put dup 40 /parenleft put dup 41 /parenright put dup 42 /asterisk put dup 43 /plus put dup 44 /comma put dup 45 /hyphen put dup 46 /period put dup 47 /slash put dup 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 60 /less put dup 61 /equal put dup 62 /greater put dup 64 /at 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 92 /backslash put dup 95 /underscore put dup 96 /quoteleft put dup 97 /a put dup 98 /b put dup 99 /c put dup 100 /d put dup 101 /e put dup 102 /f put dup 103 /g put dup 104 /h put dup 105 /i put dup 106 /j put dup 107 /k put dup 108 /l put dup 109 /m put dup 110 /n put dup 111 /o put dup 112 /p put dup 113 /q put dup 114 /r put dup 115 /s put dup 116 /t put dup 117 /u put dup 118 /v put dup 119 /w put dup 120 /x put dup 121 /y put dup 122 /z put dup 123 /braceleft put dup 124 /bar put dup 125 /braceright put readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3DD325E55798292D7BD972BD75FA 0E079529AF9C82DF72F64195C9C210DCE34528F540DA1FFD7BEBB9B40787BA93 51BBFB7CFC5F9152D1E5BB0AD8D016C6CFA4EB41B3C51D091C2D5440E67CFD71 7C56816B03B901BF4A25A07175380E50A213F877C44778B3C5AADBCC86D6E551 E6AF364B0BFCAAD22D8D558C5C81A7D425A1629DD5182206742D1D082A12F078 0FD4F5F6D3129FCFFF1F4A912B0A7DEC8D33A57B5AE0328EF9D57ADDAC543273 C01924195A181D03F5054A93B71E5065F8D92FE23794DDF2E5ECEBA191DB82B3 7A69521B0C4D40495B5D9CE7A3AF33D17EE69979B82B715BAD8A5904C5DE0260 6C15950CCF6E188A0CDF841EB68E5A2F88253E382140F87C87E55C9EA93B8C89 14A36CDF630D6BE7CD36DBDCE22B21778E8648B97B7EC6742EB5114BDF0454B0 0EA7B1FE236C84C0E5308C871F67B973892890557AA12E00B2C20C71F516C397 3F3BBD14A1D0149CA064391056E45E9470FC7F6F556ABC82653B3C8049AB5CF4 BA83C8F2158C236B2FFD4208846013BAF4165E8BB8D334C8FF2E8D74AF5DAB2F D44788869B08399421AAA900ECC6A2D594641C121660D4B5F512938994C18DD0 FCD9B008F68F0351D21ED735B2740CB1E0C1CCD25EB548C35B844601D98828DB 556F71D07E081A593FF12DAF83676492A0FFE16E95717A07082B43A966C1EE8F 8A59E1255E1705C43A23CF29A5E4A6547C93F1680A870EE7BAD8CF74D838CD5E F806911D8FE4262ED8E7F5BC58B92C9C6D74F8AD45FBB021EC7E97393018B9DB B1B84E7B243ADB05ADD3F1DB3692ADC5D47FEC7DF93080669E63281F1576B673 125EDF08016664BE73364F65389F7C3B66623AD1754ECBEF9E5CE6948D933787 A5674279ACB2EBECD3B4E6361419AB32028A27670C9F3E18B746A10B00AF6D77 4EC00E3BE521C02A99AE5BAA98F793EB1228952BE67934B91472E01AF7B816BC 56D7F19F631A1927846D800C107B1E9CBFF9D2DD513B4A8CE2E0DFD77B1ED178 E43FA7052765E9FAF89989D490D8FEF6C536EC0D4AE27A74F474B98DA9E6B92F 15E063DB260571979A5DE2423920CE1F59F56EB11E00E3BB9D466A8263E1E385 2014BEFDA8D1EA3EDA04BE32AEE6CD15C5C010A1DF7F705A2C0C18E87C8DCCE9 05D9163181CBA56C0FAC8C06A2990554C8E759D076B01BBEADE3B5FB8B551390 6C8E4A2A1C6E7D9C708614626F3770C0AB7DD2027469C77975C27576065862AD 04E5E50CEBE907E3E991FA0C627302C0E207B4D5992BEBAB5853AD1C0D271728 C76F40A79392ACCA7358F948AC65DC823CFDA59E1FF69CEBB6B7EC3CF21669E4 70D999508F9C49E2D9F8818CA53C977D93E15FBBBAF75B1E84F0BA62BCC4BAFA 4EEC82D804C8A8C0210F3E5E258BB1F6921AF02BA9861BAD5C3D5FC8CEFABA8A A607E547B802096F7AEB09FBA99C83C9A494B94408DD607CA6561A6E6660C473 62CF8D35F31D052F6C6C8138A8E1430CBA7EA6973D6D510C1A06B3FBD79D9364 240C1A00272DA44B89A9FE8D5BF36DC1B5EBB4A78ADBE9C5EDB485F093D9517D 69E1AC9A8E6C9D7C324E3797CFEAD9A18E82E03F69B2CED7D5DDCD1A218BF2E2 ED2293AE999FE2A4B5213A10083EE0407BCF8007670B8C737EAB30311C868D84 121149ACB4A27F3ED6C0C181C98AAAF51B105F264B5672D7F745131ABAB5BEA4 0C9B43C0DD9116D6DC61F90BE72018F290D26D5E9D341055CAF09C9F45333CDB D45B7954271767F638EEC499F7B53C2CC5774EA7A7F024C4CABFB93D9CB1856A 0C671A4ECA7C62EA5242648A84E7F3AFB9547A0AFC29593CFCE6D8B873A78157 D337CABD291431C0A2CE1F37E0CD7340567AC206FF98E4B5A6410F70F750451C 550EFB54AA259A1B236CA9CB730D2CEF125EC65D959441F7CC9768F777B44844 CC9842A307C72B740680ACBBF6AA35FA7A94825069BF7696ED81A371A9E5475A 9D997F2DFAD339AADF797F7E03E654234455AC3D17702A420EE0A597BA31BDE4 FEB8DBA7C61D311CC90441A620164DC22DC2D373973EF84CC553453AB1B3337F 7B39983B8DFFB3A9425F119B45C1CD37A76F905777B3154CA6200792F1759D06 E017890F4041A385F2238E3C48B6C8EE6F5258463FDBFF7AC762F6C4363926D6 50F004D473B7B7F73CA686B559C2885F1AA761653C727A77D73431E9D110E76A 2E55C68CD50F43997C9B2FC4710F8C8540909829E215678E63BB8363C4B8AF05 9986102BB36580D9CA95CD216B7C321822CB41B2E0422CD077F3B55E0246FDB2 44D5976F67296B5B0BE4B06F6E43535C21164E6C5089C3E9BA2D6B30888C57DE 49DC8D9D46C0D5EDC47ACF2C03B72DE3B69512508539019B759280BABEA12BC9 385308A0395C4CD33182A10A5A229743379C2075D82D8BFCE4A66E1AA087A091 8F5372684FA5037D1B92D50CD9CB4F50AD4F8EE7D51F1C9E63C721CB5B9BD011 6F0A8DD4FDCD2B008F223A1036D90F0F3B252487DE7898F9AFBB3A9D9CD49E0C EF4ADAD5155A98D2125ED5A3D3907F67301649519419F33CD942E8DDEAC1BDA0 E90C431B198F646766A8FA9F8D1561B57E126EF604838C0C1966655CF31FB7EB C8CCC434FC1C96046D38203E1791EC824A3D7AED85C029288D4608CA7668A2BE 484C99639F121845B22EEFCE0A3B808261921AA042AE19E641769E91277BEC29 4594082CCB3058F90FAC4A700A8A827ACA00FCF574ABC8EB7DBCECD97F2B22C0 0AA19E8739B81AF8C6F621D69B8E6F29BAE233FBA655A0AF5BDFD7F5C6B9167C 6BC7AB693D45EF2AD999F5DA3CEFA39BA48A17EE6D9F2C4DAB91AE3F0044DC3F 5D5506CE4675AA928B0092D6F173644F91295216D8BBB14CDDE0AD524A4D545C 1B5E284A3BF0396664081CFB4F186A84A0D24D61E82F4767C1E55A0642720CF3 909FA1AB8EAB78030B59BEA067DEDBD2F1D0340E790AB2777DB18248521934A8 BB38A58B7F633DEA4291B0D5D13E9A882C974697CC6D3B49E030C94EA29B5506 CC29C44D01B4751B453A46A9F6BF3BF135AE87A4CE232AF57B66578310DE41E0 2A6AC422117F1963C4D7CC306BD25A6E724E51921779F22F029733122E23E2F0 CB340008813ABB104380C80A492B3FC6D0BB07CB8D8409E9576891EF6E5C9D08 EB8320DFA31BAFFBD336D0C2BBC3D3B2D30368B9860768FC080D30569C7F7811 0EBEDA2962476113625EEB555490B8CE4C5F99D74ED10F738C61854CFF8B41C6 9402E56BE8856144A1A05D0B05F4CB7EF728B2F4F5A439F18C3B68CEFA41E59A D8308ADC92EC1289DC84CF48D2CDEFF509A145BF945E1E00D552D329EBD2A7C4 21D58082CC8FA790E981F4AC8EAB99950678FD3A7DA3DF13778681B208DD71A0 7C3CBD0664B37C9EDC6B601D79A2C51FB54DAEE849F93209793849104E722D3F 52DFAF7047EEEDDFE744787A5801E4AC2C3D58EC5DDC15FCEE03990C53B0C57A FC54F125A04C8E4A0ADAA725808C587E7DAFB9F784FA2875689979D316DC22BD AA36B306A1ABCF907B63C6476737B746099973CAEA8C1E2C5C41F27E0F7DE8D7 F0D942E34E92F43FE902653D4D2EBB6F3B9F7928B1550A82AF234D45D028F429 067652BD3D391BF423AE72B9CB1E8D91E898161BE3A7849D456A861A2046711E E934DC59442AE7D81661CE8EF727D8D7DDC0270E937E40F896AEAE6171661431 C1025C53172F9D366834BA0054FBFD84503FBAE328B6FDEA180F8EA35B1DA937 5CC3B8F00C206908C2FFFFA6A7AC6915D15EA44BDCF29E2BFCFD4A849535F19B 0D307C696BE8205C7D84B9C77F02EF27D911056EDBB4080E4D3ED72788666CAD CD91B0ECE27A177DB23320A7FA9C31408B4D02D2A4B1CC6DDE1A6CAC3D8EC1EC 2226EC98E51046D1EC26FA20EE62D24747D83CF4941DCE5CCEEC0DBE387149CD E05B19FFCAFC0D117F9A3E60DCD4C815228D98EF95EB559AD0ACC0D50FFDF714 56C3C812EA5ADBB013BBD956A7C4CC0ED7D3E25D5C9AF5E626F18297F75D4957 F5B0B33379114B903FE98BCF35C3FF76FEE1D9AEB711F2962276531F7380EE3F E368720E0292A170A15C5539B1FC7BB954EE2624B504CB8C805B8D31AC38307F 0513606F09211AE64DAC447693B2A0AD15E9A64C34F5A911ECD0ABCA90E9791D 67C6BD202B0858EF96E7722305B8AC02B01AB1706CC6AE875A8DDD15EE349046 EAA65005E7866B506EDFB7A5A2AFD5C9E9DCC821A79EE9C1EA2C7BBA32A40BC7 CEC26DB1AC473C8C3960ACEC581B37D6569E8C8C42950BAB7930B65E1570E3F8 9A7FA719F1DCFDA45A3BF2AAB32C9A93BA3552608A61C623DE59BCB346E87EF5 9CF025A87803161221C5C1C6F6B3403712C76E9D755C7BD68D7F2DC03C14CDF0 C1BBED1D648B905B4B17037B7263C1EA7A7F06FAAC4E09E08483A8D714C19861 327CD9C32DDF850302DD6DDE24912D00C22ECDF3CDFB18FA831A41A7488EC203 F564CFE30D506F0829A96D35A7E09C3DCD107D589B627A15B55C5D6649126BEC 60B88C55ECCBB4E680265D9EAB4CE22965D3B1AF759B01ACB0D0E6C92B6B4EFD A81E6A648708979487FC591CF09631310D46891423F4EC159A73E30D8DD147A4 B0EACF6D45D18CD16CEB8176F03ABCB41F2234747B9733C8FAF34AE5D43D3BA5 0CE0FACFC9B087F84FB6C68678BC6E76022B1526D6E5B3A48EC1A110BD75F45F 1C4DC6D39F254976453F57DF873B7D635C80C42026DE020E5BAFE0DA0D54D1E1 DC634D2621BA184347E5252F645A6A1DB7657C48124186F0E4C644077457C24D 55753C651A9A7B6349867641464B515B821349C795A645420508673B93750D0C 7A3B33EB1F09782033742AE8F3A23FC02284E6C03818FADD1731361542E3FA3E 75B8D52B668C3E18A4AE967D0FC3157083D952AFB8144D549E69EAAC51C279C5 E5D88A0D9D53013DFFB4352A1598FF84DCDE6FA32FC377306B9B92C0F96EE149 8CD55E7B2445B86CCA7A547FA732D52D59025129FD8C6333AC0DF4F0CFF6287E F2036D5DBBB3B91B92F12FEBE0B61A313A4DB5A9CF0BB3DDB781A56FEBFFACCB 8CB9D1D3DBDBC4CB6AAE6769E470582403CB920630221B68BCB625CD4605FA8F D3D5B7A1A28D15E44B38E92E906C138E72C15B86F64C38E23BF0440052A8C914 54397F49DBED99D0AF7CEA3B0A05FF37C2D7EAE1412567E6776333237C31E3C0 49949EC8BFD6E0F6446CE2D4DCD2C1524A288818CC5D159BF8463A847AE4A2B9 CC8C58F822804B81B13BF4F2DEB6229C4F51F093075581791D02C36A13B855A0 34900AA7CD4F1A797652656FE3A8425A38F421C4CC0ACA1CDD44FA6B31219276 1CDE1CD63D6A58CE705CB56CCA1260F9B86E989019071563A9B4C274A87558CA 6EF1660D574EDA276801F0057740E2C3B80D253D697736484D892CE1AB128B8A DECD69712F5E70E895FBAA927E8194D792A04AB6CE205E04E38A433BBB793FB4 E8BBC4279D58A223C6673D909D6AFECD246E66A52F4CB35E5931D24C828489BD 4ECAF621A220D8ECF702BEB01C4FC7510197D3F6D15321EC87175ADBA6434ECD 2B5A306E91375CAD22CD94301763E4A8B981472890422C5488FCD523C9CB17DC ED22FBF12D5F7525D0D6BCFE8CE85B0DFB1D6F989C267FFBA0A996D309E4A934 3DB54A9D29C88B9D55D7300DA3D46419256C5A07A2A529A8DE8BD1727281F5FE 97033D861E0531B14E811378EC1AF1CC7EE9BA2B07D935843D3053F673979F8C FAFD59D555B56CE338F606747238B22BD62C42BB7238FEA335678D474A643570 A9E7B4970E8C541CE9DBC7BF70ED7BA33639D6744A18379455029E934C95E2EF 639C4848CE9A0879B51649FAB023A71782444B451F92A34CB8A124270CCF86D4 D18EEF5C1D2B2A29012613851C49F50702D63BACF95EE2AB4D72B375E0A62615 E0991E130A67ECBA9E05329B740708F1CB148724C3A6E5E3AEC1F88EBCA398D2 1CA8827C977D72734310233176D1AE26C55CF2CEACA62223315C28FCF6305C7E A22414D4739A059F552F1F9372CCCA5FED4F9AC987942848EB498900269511F3 F408CBEA0659B954F5F1B18AE4FB270213646F9B28AE4439D2BA2D3E0AAAA780 5E530E4EFC8A060EB979E12191044509DA0C14397AFF949E12DC970658D5EAF5 4EA963F5BC1407A32F3837CA6A24B7F3D60EB8E6222B702E25ED903F9D21AE50 664A095009BDEAF4B78DAF94E5A55D48366CABF07791A1684B2F54EA69070844 4F031AF8DF416C2D3679F8BA038B0DC9DD0400CA6B34667BCBBC07E62C1668A8 35A8C57C9048A7227E672E89681B54D662079A189A9E96A3CA96D8DD10189B04 1DA49BA2729F1CA585B1BD5C467295285D52E47CA904235A1A3E48EFAE9EB6F6 01374125CE89D53C276858668CF45D2F092DDCAA52418E0BB94C2B8266B4D88A 5D911507BB1DDA3D8F6E7C14A91CA11AE799EC42E993098E18CADA70BD2A1D82 2C39326C6E3F9E84CD9758B9AE43D79BF99E6A0CD713E95B3D9B7DB90D127DE0 DAFEBF850CAAACBD860B5DEF2082F1ADA64B44B193C4A1417BE221FDCA36456C BE5934C8CE3ED55AE3A11697C2D682B7D0F72D48976451D205783BE25DBD2507 39C14FFB4BB828DFD187104F38A7F11D5F0698C11E8C1D4F107CACE573FDC4B1 C56FDAE47024D6FD16A2FEABB434CA320300FC4B6C1B6CA08F76C60B7C08A665 99F404DBA8A2A1EB18EF6750E4EC186E31561A3F080BA6562967546715859481 7BA782940F5C5D06626D6F6A412CA7C13820EC7C1DF23E15E5829F698CF617BE D940523E4EE4ADECEC48C24297DBAD528BA1DCE7AC335A1D15D55415B108EFC8 6D45030D27B3EA63B2B4CD771DBE66AE0218ABB1153D4B7482289D1313CEF184 5C960B1E3C3C953912CC6F4521D1E15636C1545EEE457EFB87B88C9E43CC2F38 6BC4BC96969F4FF28ABB06F4454C01CEF1B6DC538F1E832FC1666D977E5A881B F72F1B4C7DD4BE167A5535F1163A0706F9A0B26400178DF8A128FB5EBE6A7B81 E478AD183EC06622B591337B9F1872AAEA356F4FC67EE767B34CB5A4D90702D9 39FB846947F4096FB3DCF16EC81455164783BA0B5D723060DAFF411B68307E81 7BEA1D9A47A5AA3D648E618C83C60F060029E6EC4D46B045FA7415BAB2AD0AA5 ED9C729C24136F6AF61E6409C0B5CA760B16225641E268A68CFB8260BBEAFC77 6626EBD97195E77CAB425CFB0096D805D9EE699E41680D095AE9FA10122A7882 2F00F495C9EB2102DF0D3E61833BC0A2E468C5CF7AB430FDB7C0BE3DF2C0D230 1580BAA25D65F599378D873165482A1FBB224AEA89C6BCCFBDBA42AE1C5DCF41 06969F585CD3B737D1388D6359F5468D88FCD2279BDB270F6A858FB7D2ABDEFE 5EE8FB79FA437F8F50237B92C307B73B0DCB808D07A9C3255CB9B3B17039CE5A 288103D05D132863FB522A02CEE3839EF9AF7F07D99732F0B8B384745369FB3E 7901166478F4A16076A1504C5E98D17408494E270BBF4470ED12B4332422679F 759F1D93984D7E506D16950DB6C2682FE1379EFFA6F6C95DD71F6E55BE3EF6AF E0CB25388EEB436E6527806FC75484133F6E561DEB979D5C1FFEFDAF2A6D964E 03BAE0BD593C2992AD84569C81050F7A793C5263E50C2F50B98C4CC703EAE17A 6AEDAACE312DAFAF5278D125B6EFC5587484F61DAFF46B87B7C9B1EEDECA4859 314A9A9E2248467DE1E54D90DD671660B9040B3E0DD982260822177EFD757266 74A16C83A7FB168016A320D3DF3BD7726F1F4EC90EE5DFE810C96B099FD4368D 906AE4699049EFD37E8EF058D4B97BF71106445AADD4FC6E90615A0066823A36 673B8DE32322BBE861AE251226B4385AB28702831270DBD25D666FBB0AD7B96E A44E891EA1EAF0F87013AFC982E33D67A28E96E0C9CB99B9E4192536830D9901 931A8CAFA41289633B20BA3BD7AA3414B6DA8D57CCF2FBE39920CC06361F075B CC40335DB9A0071CFF77F6B7BB47F3100DBDC9C4A58C2B81EC99E8E966AF3390 E3FBCC28BA1D79961C8A1584266454DF772FBA99664D74D4A89FC82FFEDFCFE1 4C9E4A04291E803D142E37E7ACA66AB279378F2F192FFB2B5BBAD18B95F03136 2CB594A3D6D3F8576B90A6C4DAD6D6C8EE07AF682F925F01D0B26CBA347C03BE F3B0585CF4539FDC66915E22117078CC94D621F31DCB3E021998A5D6EE94CA4B E214D07517283D56973D8E4367392BF6C1150DEBF459D141AE0941C1C8C5CFBE E735D796E365A1B0F60BB4CF2801EAFE4889EE5F338D3C4885368281B3C95CCE 251C28A90D318A8A0384439B38D63B94757252062EA44E88509FDD2E75FAAB71 7329622828B2785C1A8B26351BC74237A6BF99216652ACBD4CCF54CFC8AC72A6 46342F1E32D4318E7E27C7B2DAC943B3E72C472FC6F1DDA8684AA922516A672C E969C047E318B5E3B1270C1BEB1C4071A15BC81B29B268C679B41FC5E381BE33 DD95F0D68118CBB60C521E5CB2BA46A10E50E9238163713290DF6DD8A27D3813 F871C07E725D4518013D9A84CEC96782541E5580E33C2EBCDB18F08EB4655A46 507A8526DB26C854928B81FD502B0CCE4A68943C12078F57C10F4E85FBEE1025 46D925B8B3B447D4920410FEEB9844FABE985F9228FDD9F58392F2F3BD650E49 2E3AD5A14984874DF4572816931885CE8A448EC95BBF40DDF4F85653AD90A88C C4A879C0C7596E61997B972E8A55E57B17F802C738E5C7A8FBF6424F8B131B23 CEE3EA3747DB066246C250EAD335A76FA166ABF75120CECB59076AB31A51F176 57176CBE8C802A97B0542A5CFD6D5E6D7EC848B923012E45D9F065BFFA0D03E6 788B68BA4DE51DA37994948F859D41C28BA939C3A82BFDB44DA585AE80B8CD7B A6EEA79B70BFB4864E06F06A9751BD2D2A209D150D7135E0A25D67263EDD2A7C C63B5B76ADB05D44BD5BC0BB3EBCE2E74E1AE5F7DE07A59D90C932DAA2553505 27F2AFC05F7CEB39E1C7E54F69FB0BBB069959F2FBD11709F8E81F6E7CA06DBA 1CBDD8E7A78487462596DA288B50B295E46F4C3D9BA862688C68859734B232A7 4B371D2BD786924F186524765E789EEAA30B20C069322D42C893A30BF1BD2C46 F8F3732DDFE80B8FC1789239345944D8B457824FD80D11184E73FBA30EB80A9F 2FD466826D4E666E3A835B98A1D4AE5D17053A6A648E26E77BD08F9A3E02956A AE82C4929E9666F539079846527D0E326FE7CBBF86E3722BA3E53F8A5121080B ACF8D3C67A2A1DF624B9DB92105D3C833F5A6ECEC108E026E1D3D968967A1447 15CEFDD09123D56606134BC3449404ADAB1330C9238DE48F3CDFBC91EB86D7B3 8B85B5BA97376A0673E434DBFF19798EA90BFBD94493E2D21976F8106FC0C276 C81C9B9885F7A063D99B451BFD666E82909A1D8257272FE1D422DC5B6D2629ED 8A93225B7A50361D743D9CAFC3B054F4DB65684D6CD4AEA47C3FA13A6E7805CF AA4A0794AC016409EBD90B0E23678322EBA23081CB878B4619BE05CF8B9128DD 71CD833ED502C5E084783A5B4E64B9536C3ECCADDC8A013BEBF58058F65CF340 E43A7EA1495801B2A653FF57A78F54FEB6EF07418184B93D084429BBC6703546 24C31C68A7AE969455F4F303CB1D43978B1B064CA979CD7BB29C37D0E9262BBB 55C96AC1596DFCD5940FB75B0BFB3A2D301EF97A217A1CBE5F047EE68288BFBD 0F115453084448547D85FF2FDFD5E35764D09E1995B982450EEF4D1102CA1D44 6D95674836F18A3A1CB8A85877A99E2E7B0F7E6FBCDFA20A253F0C369CAEE40E EDF6588A320C483D7F115E637AA56E4BE0FF069DD38912A98A634190E9BDF3F0 0159C0AECD0B0C93B6508CF9AFA3BC3CDCB01B1CDC99FD86A83C0FB059C1AC93 5B62E9E58477426945F4383020829462604E0C0F4AA22629FC1A003859F382E1 89BCA593C95F42C6CCAA8281D85408835CA33861E640A1BFB8817CEBB6072BA8 57413323BC8250901DE5A87CB9C42D6B6CBC2426D341BF6984D90593170598C4 E94B5A824F39C7893D07EE7D9EBB4B412140835472E69F598D00F410A7E6E2EE 83A718BFC83445EC95D6B59D20D56A1AF89782A6B454893AC1860D8C9613AFDF E10B3B1DF0DCC3424389D10F8008633BCACB1FF8C62185471D220AA648F5E0E4 31F5745C5BCFE6571958DCAABB93524A33AB072B17C975B875A2AAE505935906 A3F382ACA7B4667704107304FD0A456ABFCF03293409601BAE9048AC2E1265B5 B05C531CB96F1D8A2CEA2111F06336C394289E4763F61FD0CAE9DDB70662BB91 45402C3D4184CFE66E4C75F90B9F4A9E56F33F5224C40CD458FFCE01B00377E7 A2C132EBA267362CC9FA700CAD34E125F582D350773E040312AA0240DAE7E9DC 7566DF1E02BF6E5037F37D757AB27636723A3D319225C3C8EE4E5270E29D66E6 01908A101027FD08EC9C500F754F00ECA9A4693DF0370A9804AE51C1EB36BDB7 62C7896AC6646AD3B2930BFB1D34B257F666D26BA31AEDED9A2A1841400C3A12 E720D8078517696443853A97912E7A58D1CC858BC7B4D76940D49B2C7FD9A30D 9E8FFA6DEE15F14583074C4AD29962F8203CA2590BF80484EFBF74859197831E CF5056018D10C6698B028783A0CDD8728C0C717C1F9D25C94AAB1F71EDB16B1E C17403B22A37A1896B97443C692249430BFCBD229B02BA38D99F9A0A3B3FE662 D6408C006F302CB1578B0EDD5DEC1169F6528EE862FF17A34790A7867FC5903B C35C08E4CB031695DDDD28D8ECB34302DF9C9D4CF6632404047C91637E104E6E 8E228854A2A9530A29786616C618A04CEC0F3A909C9E8EC4F2F371E86206D78D 05B29615AA6A0FB93AA2A62E556433EA3ED527C12EBA31479C7175C0A7E0AC89 7AE05761B5334EC76474E2637C297111BAF676A32C9FEC87113CCE04F91B54A0 6D57CA54137F685ECBC86A5ECF1706A74143A283F5DE4895846D034082F1A84C CD34430F91B297578C0D126509EBA53AA70B901CD5D2C491C47500A260116A76 3E959E889718509A171F8B340312939F66900A73028F25132450F9540D78D510 FEEBA8792AD3C87BC779081577CE1ABE416B7B9BE2DAF7E2B66EE0D1D8FE5639 2710BFC35873FB0E18AFC68372B75AF9B3BCF9275F027D92A0AFDDC4852663D5 6BAE0BF64D386BBFE01AD0CA8F7C209BBB365B9C04596C8FED28F07755AFBEC9 2B04F359CB44732509954BE1911E4DE05E1E31B4B71D32404CFAF40EDA07278D A541BF3B7F6FA3E714F7C2A423A60D129B57DC384054531198CDAA0EB710EBEC CEC5B24B93A548AE056AA2B7755C4BCE15B185CBF6F362C146A2D5C6DCEBCEAE 0BC6723E560B0F26A5086577792BA250A88E770CAF5C02D3DE41ABEF822B8DBE 79801B1770AA335A906E068C3FB06031BC9B8FF39084FE1117958D8BEB74C002 F5A3F02A460E3BB0F8733801E4BBA165DB560BFA91ED654B70ACD4B999FB07D4 2C6626F4AE7F314E91CF29E496AD0D561147CF31A5BDFB4AE28B9F1A787EFD86 5C054EC02FDAFABC4FDD73F861FC84D09D35E7E88B2E3556845797BDB8C2F50C 4E8BD6037D0712BB92DE482C8FB5537B24DAEE4E7A13DCC2DED74AF56EC177FD 764B5F60E1AAC9308D1B9509AEF753D417AE044D0DD0EE884995A03226C7E81B 2503002121E71A063DEF1404AB28C4CAE164433BB3192FA0ECAD5D35300533FD A11730BD7EA27D916E0D98F44524D7CAA7F0D7939E4276B7B3E8B0182F75F913 214D0ABCF9F0FA64A3650BC1C062368E00BB0591CD56879C4BDC972E785EA579 A8D085F14DE63891723AF3778A22112B91E630F8828E4A6EFD1D15316FF759A2 69D677F5CCF1CEEE6356AFED0E49BA445FF958E4CA093789730F38786972B600 F19D452C21DCFD8B708CDADBA263D30CAFD2579E9D65EE858616902D1EECBA41 F9A09825A51AE8E9B98975BFB58DE98F22F36175328099DBF6E7057F8948001D A7BA1C1D854D497B84048CC315FD58574C984816DFF2D949AFB89B1F5DD8B21A 2598997249656618FC81B2FEAD4AC9842AAA8FEB35A4342512A5AD8D3E549604 1C220707E87C78CA60BEC4E0B3C08E327CDBAEF2EBAC073F37B49D4A482E4C0C 5B441E6D7CA7FADFEE72FB8B53A06D842F175BC45A18934FF5377710DE625BE2 34EDCF0511E54A807294833CA3F6F7DDAC38DC59551FC0B03A83DD69EC1100C6 D68BE34727132340A9D431DF875A36D6ABB48996B72500D9133AACE1F466F948 FE89F1AC768D822857B78FB8549072DB59362210962B3400AEA9AE865B64B972 FD45AE84AF73BE9DBA41DE61FAAC62898AADEAA3EDE18C7B899E56E58FADC821 EF99C749AE61C14525FB68441502E1581D32673351B7E408FAD7E158142DD70B 0E1E3257C679127E1A9679929909BD8EA8CAC83A4E615629A80900580F160337 6F3E43726A6086D2C4E95EB58859B0E41309CC59E177918249E3003B29AB718C 6E523A99B340ABC5D1348DA71AFFC583754BD934CB93B2816B70068AD8BAAA90 1752F2F5C60BFBB038274C8D02C55097BFFE7BBC274004FF9A53D0B5320944E8 FAFDFFD834D562080F9AC57F9C22099F7B2668B569007A84C14A806C8B5B8AC7 79F592F194CC43EC7AFF53EB4364B3B40A27394B7F9FCAC530023B9864583B14 B74797999086F338B2B2145A8C8DEE1937381B191F0B23A63BF46A02A202EDA3 A441DA9FE8B1C7BE8BF194448C8D29FE92835019C97653A8087F9959DBA04740 3FEFCFDEC618AFCE503AD02609CEB17A95CC167FE8798862824FE01BED7FC7D2 A78DB08183183ADC2DB4EB58F91D02ADBE6F76898C93125F1DFEFC0E6B4CAC90 D83E857514A383B35AE1FB69E4B24453C173D2890471A48AAABDBD2BF5C6D077 9226E53B46DB56C9B53AFBC2008EB74F21571A08A944039254F537F1F5E72E77 6420DCB1300EF81106AEB151D8D72A335DBDD9F6916DACD8F89FB680A29320D5 244CA1F368F1B16BCC12AA3BD3CF4FED46E88F5FDD77EA054F8E539A981D77FB 9556F731D2D0AC1912BAD4CC07364306799CAA232AE22F6E773D2D6468368696 0886CC2ED5EB7892BF067B0F20163DB8EC89A214E3A9DD746078C642BC9571D5 58544DDB94392890D2464A99D0DBDA32BA0CDCFAEB8BD0E0CBFECA5110830737 E7B850DD1DBC47C14D6D0FA6A87FA413BECF0F2423C2904D31952EC214B99970 2C6AC75D351BF7DBC78DF1DBD02FDE1CDC9E6C0840F78DA49005FC1489C9C7B6 FF082FDA07E717EFD0D6E0C775FBA3FA82D3F258938476B1FE68D059F0EF6381 C14BD17FD82384C3B8FB5115C6212C823FDF2D5E8B7D73E0AB9048D45017CAB8 09074C26AC29825B2175C8A4755CA6A03D24A40349FC7085DBFE70D3141D0EB0 78ED7DD6108081454DD4943E1709C63864051DACA00CF0F959CC853A12857EF6 A941B082878AC4BE094F7652341876C09B07F3EEC80A453097021AF62464AFD8 BA8993D128D1524829F87251223435C3763C34D715AF7AE7E0384627FEA980B0 1536348AA60EA2A2D553A9C68480A9C96CBA1E6677E6E2B35C58847F36B87BCE 4FDEDA106A8D05BD4A6743CE4FD027C864CAAE5A6406680139FA45E378E809E6 A36BDCDF9901D1917121376DAB00887464AB7C1BE1753802E3A4029CEC1B4026 8E27B78C536190052FCCF18264B008089C6AE0D2C62329A19C7078CE54DB4079 D818A8B4EA49ADC4A5DA5B841084826428969394126BADC762B3C588E18C72B2 F5C2431A555CE505023812F36973F343706E6C1A3930B5DD308C14B9731BFA84 08A74E2C40DAB0DA1697A498B899728BAB2228A2079EB49FA0706630ADE9B782 52D5C62A409AF1057E6EF2D9EF0D3E514DCCCFB8891E3F02DC6A1AA8BABB4D73 8B14ED4D4EE09CFC1ADEADC2C2200E21A13893E8B5CDC63AF1F33FBCD75A5F01 5329773BB0B431038D34852FBAA764B87141E21E409CE0EBC254D4C25F6DE6F4 8CB111399FF004ACBC181D6930A96C790C727CFB513FB161FDCEDE6E49C0BFAC AD69CD3E1648DA2D5A628958D0965FEBD6240956E7982FB45F9E73676B32F247 5D5FFDC98B309E1C1ADCC54DD5371CF8A464E911BA5CCD10FAAB4431A11ACBA9 C9A0B3B90D98A819922B294470F8663C2DF17D8AFC3006F66A44268200279614 F32CB80C7768DD389429A2C4B880B04744FC2B1410242C0415CF7816242C6FDE 13BA2AB8EE83500C2C31E57EF3BA571F7959901F6CFB631738F7E8691D5F19DE 52B338024CBC7E80075035F80945030352042C666F8878AEAED2ADF066A79B40 29DD4306A6D50BEC20C16CAA6AA175A38EE517731953C4E216EC7527AE72D26D A968952EA9CF9072FBE1F009B3BF91E9519B038C618FB4F71FD9C3A63E225526 49743D641EB98C62EAE7026F82FC07F201D0A1A86A61683E6CCC89ACF2A1DC22 23E0F3FB6D97CE9A4867AF4882C68F4DCB9000F400C0B9667A5D3C5D211BC2C2 1953E11F4998671962342A1B6A067EE8B44F031A1779DBAC2CB634CB61EABC03 19BF694DBE2F07E8F0A879549CA69DF426397F8A8DA7395DE2F6968669C162A5 F45AA0B4F633660C909C70B0970F95EE2907BF71A39EF59C9E97907C05572A8E B76C09CF5BCE9F0F486B1E5DC08ED418DE025AD19638EA7010CA5CF814DB309D DE9B173FE32FDFE0E15959A9396AFDBCE5E3FBC0719BD61D38D3D1F4E3604F8B 5899F52F6D1022018A72E4C31B6CE7CD72DD6E625BE7973782F981364A55F7F8 366123A1C24DC33591A5E1A634B5B20C8C664C6F732F6D1ED4E73ED86DD062FD 2ECDDC839CFF32F95AF612AC7BA5B485CA63D6151B9F833730E587C200F3A159 C5C00517602D98DA85987B6E839DF5C61611745A91E670282616F3D8CBE605EF FBB948A3530C0FB5699E9BB834EEE2E9F41A6641D779A7FFAA037F38A408F3A2 ABE61D11E80AAC8079572166D37423BCF950D6B6D103E4F92A4445CB2B17E2E7 0B854F4038A69E43D924B0F3FB2E03D071F45A7D8D4F480FB133F3436D3796BD 043C827CB3D96C7623B23908A97A501C9B1D76D0A6E75C5BD75553EBA4ABA41A 558801F875920B3373F620DEDC6E41E6C4AEF2CE72154D67FEFE429FBC41291A 132EAA2723A818578EB60F4F2C97E109D2AE4BD8B25652A359EA264E53269353 6CD8B94D8E57619D398D4AE5FD5EC140850282D239D31BD1BB0921C9B410E3EA 9AAC981E33BEFD029B907A6BC7D2C9DDB65DFCE9B1B826574CC22477CA196065 4A50A2D7343804309E3D96A276BC8C98484007468309CBEC7838D1F5766F4DD2 EB18FCECC24276DAB9E4294184B4598EC42776E391F0E384B8D1EAC64BBF10F5 88B1285C40E8C8AC46CA8A570921F8E3C4B268FB9865CB808D54F0A461DF3D3D 79C4F094EA84AA659B9316FDE1102A13305C2358E1D0601F1D3F50BE54537DA2 22CAC0049AAEDD12D985C9304F0735F757C6BFBFFFF1305DBCF26411C5A0BAD6 D888E50E003F653E613E4C06F53ECC2BF7DB31C56C90B3683F277FBFE9BC7B7F 14D367440896A753B513A289FBBED7FD9D4A4A4BA7FF19A2A5B11A86BA4DABEC F49169780C0FD20EBAB216B3A05B9036D745EDECFC78BB88494C9C793D8F47B3 54E82E843AB1CBAE275620F3838781975437FDA1B2169FB062429CA4F308F78E E42F1090B30124EF69FD73F2A777A1EB5BAFEC0625EED86532EA4CE4287C5E91 01596F968344A468898BCBF1D4017B958010DDCF601A3B3D100EC7F4580DEBFC D8E1CB63C256053918FAF4420E9A7C95631B3E16D49DADCDE79F67BC19321F1C FFCAA39A9C6C06B38C2258E4706D4FF1FCC545C9BB5469860246DF419A620D0D F44BBFAF494970B92B6D1A9A9EC92A40006AD1FD1A35C35217DF63D6A26B8425 AFAC1C61CC76E70F6220376A7FBAC64AF327D212FA258701F574BF575EB00BEE D0B4D5AAB7218D609614131EEA9A4B9F2BBC4BFC258139C5F0FD4A2A13ED5D48 47434DB23F89BA6667F0848D219A8C4BB5DC2DAF1FA3C7A8F6670B4FCAEF1F45 525D67ABA897A84D1349283383136E3B65EF3D10A3D4775681A80255DC91AB40 8101F60D6F56E5BB183F651E2E35FD12DE3AC2496EC9B161253BBAA98B14E5E2 F7D3B8955FAFDA7FFFBC478924B9F11EEB6C812557D48D43EBC58C2D9ACDDD10 EFDEC51CCA4735436DBBF25FF8F710898D2613AAEB1D5BC9ECC68828AB1EFAAC 21463E45CC76EA65AE89753A51CC3D676E57E765AC6CB47C270777082A133738 032D065346555606D1F0B5397EBE47B2AE68EA46274C2F98F4DC136EA18FFE77 D023F9606F97F3E77601110C4FA64E951DE5865F1F877C104A26A29C3900B60C CCD804338BC2578C8E2363B48DAEB44FBF43DA642973028EE763A570C9AEF4AF 7D8BB9A5BDED8920A21E23DBC240E6CBA5ADF51CC5B67196B10F57CD66D37E77 15504ACA17481900FF6EDD0C97AC887AD0F4ED9A606C0C5916E18F8C085D5961 E07ED1777C4F88057FF2710E286F18DE16E50BF8009B579A1D28DEF3BD1AE8F7 50B1E4B53F659ACF5D04191A42618FA7EFC0839E814869333E4F711E33DE19B1 EC5F417A54CC4BA649BB1DB6C8CB9FB7749DE522EC506E0DA50938EA9AD3007B 2430C27F2DC85049A2CF01D7C28A839309E92BFDEF4E7C7EEAA863E9CC116FBB E516F45F154EFFB79BAD807F3FD5D519E5E76E60665D8121953085496A4090B2 40B0E6AE5291274AE7E1E16F3BD61F5DF0A74A9327E7A8B27B305E343411466B 32BDEB3B0620E3C483EAAC168160C3C5642783F9DF90488A802C5635632A441E 06A487753C7404F66910CD436A2C9E34200687C99E4022E675866C34FB806406 2853443D00141179F7185B13C595422AEC1574305A639E20138FB1738A49E621 238E6B7E08D5F970BC4E62CCFB4C5CE5663CB474161F12A35C028E905D80C5E0 81E75D154A242C933B2AEB1ADC358797696E033FA1DB76D491C5519D297F8F78 884787709694B7B0160CAD730021A1857E6990D7FFE062415E97D5AD741C1FCF B897E834D81079BDEDAE74FDA37715CD354DA836DAB5C5C36ECC97FFE9DF85E3 D19F67956CF0C5955BA0B4C5C2F92E63E298102BB63BEE58EFA109BE3160F2C7 BF878E4C3B90B94D3B8B7818EC5D98A34FE8BFCB8142ACCACDD12B9B8DFE1CE7 E5BABC23CF1BB0BBFC27716419D3A8B5EA02CD10C4EA1B5F44281581BBA89929 5D425053D8843453161DC288B707B7A5D261F47C466599829F9737623D3AFE82 F0BBDC604F45954ABD2018A8D886D0FB2B5623868B499FE824C378E2C63E501E 467C31FE29A63603A87C50CF119AE32E4B3584DDBD03B38D3BBA85F48DD4DF7C FEB083CA72876B4692CBCBA915A945E130DC16C91678F4FA008FF4D44276177F E46F18FD0D192FD463E2F153BDD406467D15846D5E9C1A2B2F01053335786CC1 23E523A028C3397B93C1B87492B02FF4ECEEC1932AAE520EE2CCC5C5299769BF 8A3C4756F3C27A8FC22A87A24D0CC74E0911C96D1D20735673D0542410FAEF83 10BA7AFED2426CC39B026864B4C1DDFF1BD7866B82207A9A5F0F995A31263948 3696DBE301EF83EB63A7819CF038150DA47D107E9ECD73F3360DB1E164E18969 13C01945361C96FD633A2AC26F4CC80389E388E94BA3E3CE4126FA0DF41CA974 19C9DF917A530DC5C8EB5CEFC616CEEC7B9664ACACF32990B114A4BFAA4F9987 B7E1E14CBDD9B62474D44B5FF7010C93C652B744AEC543FA1D5F88646DEEFCF1 E7815EE58D2437E8B07D3B13EE1FC95818CF36847130CA44BC4A89BEE8B5EBD1 7BF220B302D314D659A76DB45BE6C423D4094C57AB1101D01AC2926E600A7E73 E831323939203C7BAF988AFF64079E985A377CBE3D1A66962448B48574B1820D B33CA8B93F5A4E1FABA7ED7674C5142BC1E8A5C155B23012D02A4C473800CD32 8B332F06CB1D40BD1B6D633C9E7860810F317BC193D4B7016B315FB277A29E8D F2B04B387298B06A513ADFB7704064A9ACEB876584C1C7EBF0191523EB517570 62F0C1500A51E0BB521447CA3179D827682FE77D9041677CF2444C2D036FF628 57F42CA827B5ED36C1F03789FE6C80FE9653A5AA5628636F02B39AA69BAE31AD B6D6CEA603ACBC0B9B0C777ACD0210BD1CD6A29CB469475845716CD2717AA85D 25B746555F3DF86234AD2494BCBC1FC435AA41028B0FAFA38966D18FA87F7474 ABBF123B6B4ED5A82665BDE53F4618DF0894D248C9E97A07DEF5E5799870570B D1617572C554EBC3BAA6AEADB35847742DCBDE4118FC48B5879C391040E52B89 7ABC4E60C135574259E98503DF6F11FE4F014B1C04B47ED2A30F9CDE995E063D 8BC1439EA0A721F35D940CA8C7A679F45DDA9CA108486FB8712CED4C57FA261A EE426E32F93A7BF194F413CFAF7DD523D8E7E412F2BF2CBE36751EC745289142 8226FA81B449A8004141E4728FA127E430F2AB982F9F5D9DA847304B337C1AE6 9A50C6E89AEFC884AE26ED3BE8E62A751007F4F229752479E31CDDAD069EB992 7BF70510523C04CDDA57D45F2D3E94103F4A8BF8C2B2F0572F965A405D720CF0 C1EE46911454AFA33874CF803F165D1F750BAFC7E591E0A7C2E71E89E59E198F 407BFD8583B7A5E3E934867E5AD017356F6B4D9041346DC2BE1C370FF718E4CF E1D346BB02CE8450C76F21774A3C2EECDBB81EC689E9BA23B636DEC931E87FE7 71F60C5E081D48047DED128D6CD481D3812225EA5E56A69B10E72523C3B1BD06 9FE3C2D4861E37FD3B37C591647241449FD1DCC6BA755AAFC1FEDC2FA463DC5B B8E9C991905A8A4F29BAFF75A18012BFD80376A821D815B4EBEECB8661740106 386974740E161BFAA0BA16E4079AEA640F496D83D4007283B8E89BFD728716AD 10EA2D0300D50325321CD34E86C0ACB8FBDA3FB503C2B0AB3A81403D953E89D4 647FEC38D8CF40F2485F2E5EB07A26800379E33A0FEE6B3653D271FBE16FE7BC E0C09E689F43D9AF112D05A0EBC0E8BC63DD44F9BC2B2511F941DC4197BFCDDE C378F2C30C80AFB675C0EDD917ABA5CB3DA636D9212A99228454B91F69961B67 045DE7660EB23ADC41C77F03338BC2403A6C3CC21C18A06D0EC709DDED7EF970 EE88BAC637D95B7056B4FC21262EF206EA40D64FA0E75A402A26F8F2D5E6C407 ADED717DC703D21D1230C91FB78EBAFA3A9B3BEC43AB57C2D265878A1053C506 6F82B98C696730A5DA7034E02B486D53E9013165F60C2561EA8C3543B31D0201 979FB4ABE9C9D0F7376FC6CC54423F462E421E0ECCCCB2779D86D45CB330E070 5D9F40D0732262E1070D5DFFF31EF906C23AC5D12E0B9AD833F33A0E00562944 073AEFA54C256E49AC5106A4082BE51237DB6E5AE7E301EBB3B7508A8632ED20 7639012EA2371452E230408E50C0C880DCB34AF59958F76F400DBA32A287BCA3 B2CF6807E29D7D1AA30FE99B45C45E634389214B283F6F55B10BCC9D91C96A07 9F4C2B39DFB6A570991B6756DF55033150EA4DA851E5E6288AA0692AB57C4AD0 8754F7AEA79A236F55AF6FBCD9AFD7DE10CC280BC7FD83E0947691B0B95BDF15 763B703BD5E2839E5674EAC89B9DEFC6113FBE730B3651686F703C58FC23C75A 2269F26D209DD88DC9B84371E02A3D2C02A72CC5CA6896B46641428808F40B62 CD2DB6D7C64C709C6F0D92C460EB218B32B2EA3C523C32C69E40D0F639771A01 2089F578DF8D79A806D350EB6E022072EDA5A5CA5C65611CB11A26E1F155E3BA 114EAF9065C8DA1C4FF855EA417C7B56810EA405FC09C1C810643F7953004B2E C784D63E864F926B9E59FC7249BEA1B9DE87CB0E398E5E193B86B050F28D5DB3 0596BFB5CF77052462465372239AB609D9D18D2B683E8F1F71A943C852F50779 83BB5CDDF7536E33D5CF8BC591774B6DF460B4D8BF788FD3C1E2684F64D092B0 9FEF1E8801B29B65316BF6D512997059A329855874D1C9E19DE9A881DF68A692 128785AC9F6B399F05766ACF01F744C7F27F8793A568B7F38E44FF593C530B00 78970C139C99D9E543311DBCEC902EC2C573C8210EA73F50C47193C34E96F0F4 2233865C7B77A30162F80998CFBEA90CE88E3B71CCB90BD7ABA618D9D50F6E28 430D3D37D5004436AC394C78D77D8FAA6CD3BCC8FA5E96E6CC042CA0D96A253B C505F4BC7C3D8B167F47C217471EF7ADB010458F0E40D05C9DA085BBCDD2CE34 AF35EF50BC1851FAD639FECE551A4B333111E0266ADEC30288271A2FF867EAD9 2DD48EC29C72E617FD641775AB91AFE69CFA03208E023C4F16061326D32EF7FB 2E56D34AF1269B8185B4BF8299A93ED8CACC6BF44296AB0444DF8F29A5511038 C20B6E0B093EE1E1C9AC1FB15F88C977DDCEF7FB1687A5086704356600792BCC 1241653FC72611723FECB742AF9AB4EBE2E9818C5C299DC1AAB24616EFA13B87 58151A4629A9602B4A42D23606AEEC853D2B0840E040DD490793152E7449142D E103B7D3BC1E2E2F511D78A88E248887E8EDAD3D1DC7E2CBB77CF9AE3F18E60A 1550D9FD7780EFE04FA0FAB685640F44AF281D3EEABA27CCBEAA22A48493BCF0 4B6E58EE242F5D57CEDE8D8720A80DB999D9361548B8CE62E93553959EDBA5E0 406189CA9B20C7531F1F6E397F64DEAC5CCBA9D58B4ADA6A6435ECF587C1BD47 162211D4BE49824598CB6FFFF8EB1F0E7D18F02719DFCBBBCBC4777CA4834656 C8A8B298768E113990EDA15522F2E543F2C4779DAE2CFAAF3F4CBDCC37360F48 40CF64A6FC7D65F0BF5219FF73E880D6EBB5855F7D581FFE17B4E0CAE644FFFC 8DD92A60D38ABD0ECDBDDB8583B25823CC88FBA4F83D58F26B57280A9FA07CBD 3C268FCBB35B407150A79E362938E372B98DCE9CE8922F4AF7C05A189FCE3A21 11B1C0B4FFAD057AAF2BFF3AA99E6D320B1DD7D20FF34212A692BB34C00FEDC6 06A0FED3B831C7414BED938CAC0FE4E4EA258BA1C04299FD43A40291FED4EFC1 2C110A15CBD54706ADC4B9426A010B069FBBA5A45BF4EBA6D98BD8D6E9F20712 265D5140770624FD5A078CF1E84AD37E047D9BDBF3D646A7DBC6F73B68570D07 05CD35418D243121DBC64B1651CEF73D9030A8263F2C85B1E420344624C89A1A 958AD45C76C5B3284809A199EB29EF3DA12107C0AC9FA706CB78928ABF842822 C3DDA14E2489A2553E867BFB71E0B0E0ADD2F65857AD75BD707540A049AF60C8 60AA9D2E5045FB0D212E60F25DA8C6C1381BDD208F783FEB1D21D0254EA4F405 5990D295DCE2F4D0DA09A21E60BDC7D7FEE2288C84EDC3999FA3D5BCD2317BE4 39FB11408529BD3CE89C76D653876E9949C3DD8759AEFC0B4D05C85BA52A4A1D A780D2AF6212767DB0ED1DA9E7829815CF9C7F16372EBD964A96CDE3BABB25EC CDC923F3189014956BC57A404BD95C766EC62EB1CC34FA40A21A1CBFAB5AB8F3 1B5C366BCF5C499DA3DB4E7336A389DD8C3D78D9A01C0BFF9240EBA6DB1089C3 88656D882B4A68298B04C0B5173AF9995B4B519428E769E185E68EE67BE8B7C0 511324903DDEEFABEBB5AA61997F6B223B7A5E2011E19431448A337D981CD66E 8255536CB110E4DA773FDA668A0E32093CBC52B8EDE2E10CDD330F540F54E10B 2874725B02F812A9C75F3E4104EE3EA40371045E9F500DA26A73E01BDA076587 60C071C489EA98676E6FE8ABBE0809F8E80067E2B930B2D8F7FB878E02431A4D F2754712F89640577BF8B62C49D896D9A973BD9ACF49288A7304AFDDF88F35E1 5AE435F0A7F76EEC2A9257211E876A2CE411462A802B4635136B3E1C451F8938 9593E415E4E6243A6596DD597E1F7C696E10ACA0E4562EB29AC33990B410A47A 7525F73C7F85AAD33E1AA0278DC2B1E6D60F4DA58ECCADD0FFDEFE37030A60D9 28E22A0F552016E478F440DFB117B08AB8B7F9B1CB9CF8D24671475FD4ADD5C5 D2766DCF52FF25EADD3FB72CFBFE9EE71EB2462068D3D2A90E1BDD747D8C9F2D BDC299EA45BBAE2F2A4DCC629C545DC3B58125DF69276526D1C207B78874F722 EE3E76BDB1CC0265E54A27D880410D8143E8D9E3A17BBC7E72AFFDD4EC7EF555 CC7B3AD73703FD5B48F9912EDDCC658CE720800B567466240E3A5918DF8F8CD3 CAC80FD7583C437FFB7E1F1910A8313A4001089B62E11D2767C1DF94F04C2ECD 6BC2FF3A5DAA9F45BAAD25A34DE2CAD65712832FFDD5A4418AC80338F46204CE EE86754F00928C3DA4B0FD45BDD15D4830488A0C040E4A4A7C6ECF8BB49F0633 B9FF3CCA815E70EA14FC066429BB0F4FFD50989EB7CE1FEC9D317BBDD6D9FD95 6308547EB06A34D2F66DAD4FF2B789D0F2BC18C76D5A00B587C0EB9B3027B566 8D8094FFB19A22B107F9DF55FEA6D86A1ABFE4BACF8DEEF7A2458B7E07B80DEA AE82BADFB0F703FB6AD5E008D67520FA21ABA0821FE0325528D191A869E89A23 58439E9F3B910350A2AB64A95F4F8AD42704B4192803426A532287218A09E82E EB995B835D28A8F347AB957D502DAE5522FF7A32F1FCD6C3A401277D841266BD 6D9E13D2F41180B17163B58C9931C0BB70E4AE5399FBFDE96D60C2AD2AF67E91 EC2BE69597558B0011A0F749F36863736552681C1E1ED0C7153E2DAB45E6916F E896E64F8CB9725CE4C9894339DA750419F2115F47683C6A784D4C6EE8114349 2E42C144A2EB69AF312A159EABB3C63F36BB69642C91413603401FE72AD5A62B D2AFE4D7ABF1034A39B5BF9E075BA06AA02DD00BFC25F205158ACE306CDD0BC2 D1C526E898D4A438A5F6A25F583791B37B647CF4848AAAF7EC6A21C3511D930E 5EDE79C61F414C4C20A906BECBC51F4C771BE8FBAFF924872EB0A77EEDAFDD0C 1E74C5133116C2D1B9BAC642350B4B46D2E3F47AF418F453C0ADBDB07227D8A8 27F53D29014005AEF6C0822AFEC0AF3E8EC780D7C27E3FC4BAF4575B2B0DFB06 6B2E55B305DCD4798F05F574CA925543D2E4A0638068EB734B5B41B098CD7A54 17BA65CAF4B368428B0B56E1FACEFEFBA6FEC38F45DFE473B9BE82B788A2ED0A 75CE310577613C26348AAB7C54CE560C3DEBCB0C0DBE2A5AEF882BA322FC0255 1993FB7AD4EE93E9A9C28445D96BC800A9CBE2CDB323F5D9B6157FD04A54E43F 93610D187857E3F43FF46F345CBC03281BAF2013D49B3C813A1771019578A804 6752A18115E78B1AA066558A47EAAE222B1D5502DD80F51D782A2F3497DC09E9 A9C54A425A8A2672907451E01D6D49ADC42C68CA7563D0BC25300FC8AE02B6A5 736FFF9A95C6518179B53CA1D5951D2B9DEF7BBDC80C17A4AD9B4B97F374B98B 535B174855A9D3764694E07F4B4D107FAB5A0BB4655C28FBDFF054BB993F92BD E7746C85844DE26A187FBD813EBF3F4261A2CF7CBEA7E98294F7A930B264E944 778A95D5680B4486CD5551926E9F5AA6AAEFA9D33D9468D22AFAE3F1CA5CAE65 B70AA8096DD593A3B8A49F5382BC9BD00FD6CD2CEE0538F231237E4BF46C17F2 F648922CB5A480463BCC001CB369E07BD9501DF0C01789758FA449C146B135E4 7487EDD11AE52F288DCB8ADA075D62CF95521E037009E4C5C3187F3A1EF6D136 ECCED3F0B80550CFEAD28DF961E9F2438C8062872739A170C4C9ED8B82075269 21F65362384F5CCAA6DD5513E9A5301856F2F568747BA81E706038786214F92C 51B971F6FA30294E628CF258B4BB1FDDBA95441F73AF53425007BD4610C92BB8 FAFD0B87F1313B05DA8960309A86FFE8422CB053E286534C7C685ADEDA70DBC1 BA67A3E05C8EAAB25A062B8193E94757566AD280F8A90F5B0523C045999B2551 C6F01AB561FCB0654FBFDC37C68578E8A57117EA62CCF65744B7FFEA11FCED5D FE2C23A3B5122EC4CD3F965C5B4E345A088FF9A302B88F8096379A4E715307ED AEF30E5328DDA928828944EA65AFA894439D1ED8E4497FF5E20B9BF284D53F43 2106F75A3DFE1C0C71972A7186BAC36ED094BC150F4BF1526F99D8901D4D67D3 27B18BB06D57B6EB9381DEC0F5E93E851B4A67D0623C3D6E7765552BC6C41809 38B9F9140883608625AFBFA7A21C36184700FCDCBDA3BD6CB9AA81ACA57D41A1 065B5C6EA99457BC9A864941DAF60E380859791C87A619A254483164B7643C3B 9237BA720D7565C397C8D28530D5BE827A64B0D847A909F513FBF445165B5E1B BC1D7263DFC33B99CE64342DB37A33606C4FA27CD2CA0E822F7E1ECB92531DAC C05614A0B0E5C47C47F3F8BE3D6F8AEB8BB08C3E286B78477C865372556CB519 EFEB0B16C2B242863479401C4489B2ADA7F2DBC757E5DA38D4B75139E123449B B91DE657AFD7E411A2B6AE1448D27A0AE8AD37367D886857E1EC9F598A94BB18 390697003E71CD6C018C77931904DAA4980DAEA6679608E61EFD89A99F75AF40 E946B1BFF8EAF8360F28BF9F7436398CD64E686C440F30B19DB9BE2F6D421DF4 2C12EA689AEB1DB706B35F6B1365C4715FD45794FB2C5043FC34D52F18B02CBB 3BBD424D6A45E2BCADA20387F59CB7C5CAB59F679DE8EA825E023738F9E88427 A5109F8F08B036DE4601BB4301572D7B73CF6BF2162291B309E09B80EC7AC31C 7B223BC494D03CB1F9EDE68353CD93FF57671B95FF013071106BDB90F335CF73 CE6109C79F65939B07A261E94012FD99344E78F477BBC69FDA6F3EE49AFA4CA7 04BDA1FE40FABCBEDD5869964F01A3A4A5197E977AFEE7EE29DD14892ABA4109 665C5C7396A8EEFFA28FD7B1C1242A21D6AC99592797BF8C687D14AC4D56DE3B 2F2762FF2BA7C0E59BE9AF36F375F33A19F932D2BF7E77340E8324F309F4230A 4D05D3614EB57D8E1478EFF4D8F1E63D0087CABAEBF521F056F61E156550B0FF EFF462F4B8AAB14B6D21E6C61EAAD452DEE958EA44E0962471D073E0A150563F 9458FFED0E20BAD1AA46CBE13E518E5DF56D4A2F0096AB79707835A2B137CCDF 5B28A2FA630480DDFA68FFCCB91B3F4B2ED120A5A9318C09C86A3CB693E8C10D 2A5A941AA8C0C5AA4744AF051DC991C127E0146E1FCB9BA620AD5E87FA125C12 9AC9EAB74C15328CD1DE134163E19472D6A4D5B3213CAD65E6FDDBD5CDDB8458 C60D9E2AD50B20DF08DF39089AD3487FAA1C8887C68E55535BDE3AA8114828D9 44151F31FA69AF5E70667D80C76FFCB90BD6087BB40436204615539325209DE4 DABBD8767E5883690B4C486CDB7DC9B374770B0DB4EE6495BB127EC633063921 A25436B439CD1EE442FB4A43088157234FC4431BED22A9E83B7C851A1C861FAD 5A7ED39FA13442CE9F0A18F5EE7692EBA5817ED0E5A62409A920628919408707 1ED8B4A37A2187BEB90BC0709A49A7EF3CD2AFA06BFD0F9D27F7C8F54CFF9680 29EA5BD6CC3DE6461C461ED60908DDABE570C7226296911030E99AD80E099B44 2E82C0E8F4638533A7DE97DA71D6AA7BF8B3A09038C0EC7A15CDD1263DC983D9 7D79CEA541A76FED8B072FE4BE607942C7276D3D0760802EC74B7A8652BB7618 A78E4CEAE76A3CF2A1D8ABF1243C528A23B37EB7B48578D3BA37FEA818AD299B BAB87E6DC814F0D43DC49B8E2CAEA8C69A9994BBE9A2F2569F58703095C74B2E 9866E0CE2C1778D9840209DC7BA6DB3D71F6CC5C9DDDE54EF055927DD7856693 6C16F6C827DAB77196FA5CFB27024F3257AB2833B1D73229EE0ED4797FCC9918 F0426619FE5F40B4E7CAE74AFEF8399D567FEA8C50CBD0A43DE087B52835612E DF32DF0A4BBD389F0D55AADE0643EE494C1ED2A5A36CA52CFA4F3309C477EADA 6736F6FD653BA24011236DADD168B7F55E54009FDC286657D7D51308433848C4 C0715C4AE2481C31ED38DA1822BC59392738B3AF5D5CA89FCD2691199ABFB6E1 54534D471A9EA3099422358AEFB2D0A56668F09655132C073B9F1BDCE9644AA5 664834A2CFA318D2324BFE4E0FDF96B0D5EABA0BE7F9597B54EB3DEF8A88BE79 13502E5618854F2352F3194680E11CB9E771B7F10C5E3BEC177955C861FDE844 6098B0B7858AE707F1199ACCA98EA6F2A993CDC15A479945E55CC26410F1CB60 E301B438F3682C8BC04B377F921E4303626F73B3F1976F4D3E04A67D7A135A99 7FFF7BD3888B1A4E61F58A6166EF432CC22177A41D7B6173514F72429868E497 9996448BC08C81E359FD33A4D5AAE1CCD2BBE062BF98F15F72523DFE444B73E0 D8741900E195342B9BBE061C3BF82B0AB180BBBD088F1B826CCAF3E8EF861293 9B6F1EF443B09A972731D700CE0538FF89C5963AFD66C6AD3B3C4D659673CEC5 F6E991341A10BA09EA76C3E6F243040264442F31888237AE25871D54BD3432DA 84223EEA53C18C581CB796A8ABCD50382CCA0C7287928F3D897470561DA3EE37 83AA35B9475E586CB2ABC92CF1D1BD2FB2AA4B093BF424794698EB1529630ADE F535522848371B11AED41A055B93CECBB10E21F73DE796760D4AC349E08202FA 61C800C5C0A8FAC2B0FB8F61A5E3FAF5684FB27CA87D87B0C1280BC9C9B999FD D69FE1AB03670F230D9C91CA81351B2D9E3B8779EE9104DDADAD43DA5967FD02 71D279F15CB0211552C375C2FE1369A9682F553D40D1A6E683CBE18AC873C980 D536D1760FC4A2401E784B333C25493BE406562F5E9F4A9D0444E8932179AB27 4C1B5BC5DF7B02D60D89D0680AA1DAE18764C1D985E610FDE94DE164D766FB00 A032465003A5310EA4BF3BA536402A0AD4C89EECF95F5C5987450B4B5EC1ABC4 BED71105C9CC07FE24DE82403A0ACC95A9970E0DE76384C8F2F305D04000431B 55F33705B6A4C94ABCABB3DF371B370994FB5C585FF557EB03795C1FA3AD842D 23968980ABD677F267C047EA6D14E10408F992BD46BA38FC43CA4F59B3F3B81F A58248E447DEBFE32B0462BF6B5DA1F204251A99B1D3D574C9B869B42C50A0EA A22342D61F68A0B0DD7128C1A604664F4F2D17F61ABCB6CB2412B6A44540E6ED 8194F078ABA7C611ADD6452C29B46E0522F087CE48FE0FE3640D95621E6A0D2C 7BE557C81AB7C74797BE370E7ED1B7CC40B7B9D951C601223C6DEDE80C8BC124 F41B4CA6EFD94B6F75D4563FF9A5669DF46FC4A4BDBAB46789ABD4F9274B7CB6 43D8FE6265BBC0DB880385A86AFA145BE23C31C4F43913FA113054DD93440ACA E2BB1CED4F2BC0A75FEFBC42947CF7A39629B19FFBF480EBAE0F31F690D6D43B 21C691D8F070FF6C41CCF6B0EFAC13CF0F3CC209458AD58005BF032A8995838E DF51834809FCC4A6F2520BF5BDB7778EF177E8182C9B4C0226E6A32E82673D75 F04486CC122BDFD986A3F7EE97C30B009A438252FEF10B3BBCF55854E307E6E5 53F6E0D5CE67F91A4B779B84CE5DFE4EB24C2B94F8E26AB295F10E3F6B4770CE 76295F3DF4DDFD27C4B8D5EC7529AF03CEF4B19C04DC872A80667A5879820274 1A1DF891DAF78F775A8601F26A018948310787A32679BF1FC1654075C4B28352 2D2114CF9BDA187327DD8305DE0344773367505BCC67C352A6E88F01BF75AEFD 65E2FA4CD0E313107502D3B4DB50CFD0FABAAA64CCF4BD8EAAE25EF810CA5D97 B3811FF41867539BBE607E81F153830EE243A482B0C80345B0A5069835EE9884 BCE96EE24CB5CFB6C58C11AE2A88A4FC5DD831164EBB6DDD53FD8F9BF2D726A0 942D86DEEBED572A5B78E3407238FF5863DC29AD6A7592AE6D951B598BC65BB0 FB79F3EB81A2FABFC44AF393737A5338AB3C7B24ACC8F3B2EC74F2BE1B92D3D7 87C4FA2AEDC2CFB14DCEEFE4A7070D753F9E5B19CF88BAB17E5552EBBEC6E342 AFA0DFF259E0622F8B840F2B26D6B9FC8A172172EDA17317AFA79B012441D472 5D6E0C8D3011EE1DEA9E61F775053AC456BB438B1622A0CB7876F27693C4D75D 47F1B231754BD9A7FD6505D8CC068BC5E67AA7DA16C3BAE3CE18149070025A12 FCDEE9F1B3B2E7166217C133315C98284DDA4030FA0CB1DB8A3CF970D8FF53FA 9795C4FB304E1146C8CE9BCF6391138908145B523E4B0D95D6B383283AB8E7CE 43FAAEDB6E372CF93FFA8911C16035D464A8660D87B6335304853772AA22F042 2064558703EFB0788FB4D8CFA2A65AC73977911117EA070AD522E7C6F870A089 78624804F4B38AB3CEC430A1DFB965D804DA6E56C3F93D04361560DFB589FFC1 C2E1C07905F16D765BD449646AA5D4BAA08C7E0ACE006E1CDE80081195BC3F46 AD851B9735585A6B33149DC42F0346008131C9B6CE5AEEC7808B40E067412198 C4A0C686FE0FAC2DE9B4D6851CDA5597D09B0DD94F9105F80371FD5B77AE99DC C2084E251536916B9F601DF14A813BED07470239BD770B790ED88EB9CC37C57C 4779C293F54883F68165A4A1CED8B289E80A41FBF97309A0EA2EB660BD5C4315 24289576869D12D9CE4C1362D2EE852743F8F023272CD1DF9F244F5584F1C69C D29225E6A6355771ED4E5181C1525C84A931FFE9B1875D28FDECB1D6C3AA0215 3274C43A0B8013844F45D070304211102BEA68029F4C49F7E71D65B9F6FF5ED6 9267BDA6A47DAE49D28521BA40DA3BB0BF13EE6F47A3C4B0D30D4D96E56858D6 50F3C1646D7EA1087EF2A27F4B3B49BB5386083A06F90041D351B84494B368B7 EF45648763BA34DE37D96318DFCDCBE46B7FD18F22EBCAB2D3D2B037F8D281DF 03B6C8E04645D8ECB7C195833A8B9DEC916A53BD6A2DC941CF36371A520E6C92 400F44316F412558ECC6CB529F3ACF9A35B64D89381227E827358CE4EA713DBC F067B4A17E0115DFD398C98024A1084A3C65DBF278BF69B3DB9A4162464C4FCB 94AA6B9A58A92574D406611C6EA6B95D1F460A9A36FCC3BB8330681E2CD1328C C3AC493DE8C20CF87529175F566EE761F0E0280982C42624A0A7A74CC6497663 C32FAD1753B362DED89E9A7FB79CEFECF10AF74765654406C37132ADCAE507DB 21032D06B424069C9C4288D7C7BD03DE5C86EB921759B043C2B3095E22DACD46 D25F1E9E9CCD3A10BC68057CEED9C02D02A7B264FA895F8C1EC8F14A6A047306 9BDCEC0BC4C15E472E7BE9D980C4E1688314FB963B15BA868379C274A39BBEF9 FE58B4A64216197F9CEFD0A1B6AAC42CF5CAB2861967FFA959106E3747EB14AD 8AF450A38C5ECBF31D04C7620FCF668260AA959CE699A6D2B8E91DA258BEDDC6 18DEF5487B752017B7E02AD77F227F1A2FC6F3FB48826733FD68DD302A1C91D7 61A9591374DA9DA4888E2BB59E0BCC3254ED9671ED164C9132A24E863A2A96AF 89E748422F7B471ED3F3EC337E9416E9B63430416BABF91BA3 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: (), with Reserved Font Name CMBX12. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMBX12 known{/CMBX12 findfont dup/UniqueID known{dup /UniqueID get 5000769 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMBX12 def /FontBBox {-53 -251 1139 750 }readonly def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\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 11 /ff put dup 12 /fi put dup 45 /hyphen put dup 46 /period put dup 48 /zero put dup 49 /one put dup 50 /two put dup 51 /three put dup 52 /four put dup 53 /five put dup 54 /six put dup 55 /seven put dup 56 /eight put dup 57 /nine put dup 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 80 /P 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 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 readonly def currentdict end currentfile eexec D9D66F633B846AB284BCF8B0411B772DE5CE3DD325E55798292D7BD972BD75FA 0E079529AF9C82DF72F64195C9C210DCE34528F540DA1FFD7BEBB9B40787BA93 51BBFB7CFC5F9152D1E5BB0AD8D016C6CFA4EB41B3C51D091C2D5440E67CFD71 7C56816B03B901BF4A25A07175380E50A213F877C44778B3C5AADBCC86D6E551 E6AF364B0BFCAAD22D8D558C5C81A7D425A1629DD5182206742D1D082A12F078 0FD4F5F6D3129FCFFF1F4A912B0A7DEC8D33A57B5AE0328EF9D57ADDAC543273 C01924195A181D03F5054A93B71E5065F8D92FE23794D2D43A151FEE81296FBE 0CF37DF6A338C826464BA5198991445EC4BE80971DB687336AE8F74B516E333D 2D8AB74D362C559AAE6ACFAE49AEEF4F52E28C869222C1301D041E7A0BC1B608 1BF728EF9E98F3A12EB2714E7F16B14E055FE1FA0EEFB058860ACADEDA9D0E4C 42E3C6F1E4869471BFAA3760175F3FBD842755A9D7847EBF605F18293B42F557 FBE2715002669091BB033E1AAD657532F34F7C66E4F04D63ABB07E6CB9D9AEAE 78EDE8B79DD9BC87A1FF445EAA05B5572BB880E69F4DE1F82D7F0E9980AB0C18 22C448B0B1722D3CC33C56FF287CECB80658B3AF5E7675BE82CEFF3DAD5942EE A03C955FF979E41E54BCFB5316A9AB8945C403A73180D0961416EC9C92F49811 4B91BC4C788392994587517718521E416D469F69952149FF7F9224377EBA1065 4A727BF806A112A7B45B0A1BA1D5A23683960575368D9EAC8C04753BF7465AF7 95F25C258C63E4FDFFD0B412FD381946AA38C0B961652BCEC30322C47BF4755D 9F91880688AF066E32FFB22E1A52DE741307AD3ED830D6BAA1D1F562919666DC 5E8FD9862AC8600B0AE0BC7FC779252AAC57248744ACC8A8AAFA836BCF09B0DF 9253DFBB1CB77EA8A59D42D1B18FF25E9AED72FA62FEC3F126F030F5D7DED9C3 CF60FE890BA4A48E39E687BFFAEAB96AE542A6387F6624486037C8924002A511 BEE5FBFD780AC1D4BEC3FBC47A930BAD0280D444259528B6C565DE11DE36BB65 9BADC55C1EDA1A80458E98896D782DFB5C137897419602809F9BF8CA39F00C68 EFB9E076FB324C2963F23CBFED28B9EF70EAA4E4B903225D1F199A7162AB239A D92D71C18B1B682D04C6A48926275BCB16D413B2A0E953E1257E0B12D8B717CE 2EC84CFBC046A4338A69F454A469B12118E562B4F56C5FFB3CA5D357513E6FFE 947A564B229C7FD873057D5C7CDF03E958294A1003B37D8DF565A70A00A3734B 0138AE5277D383D10C2BD853EF806D3CCDC47739F0E374A3DF3B63638B949ED6 4EC25869DC1C0B1F4DBDFFCC97382841D8F10F3635C792139A1EC462FDBA379C BE0990CA2E70FE73137AFBBF30CA54954D7E7377CC50BDD780DDD4C7FDC77AD2 F3EB1169F14A0041F18160F43C24FAF556DB5D621709FBC544CE55424F7446D4 6AC07A51C8CD5161AB0AD5084A96FB35D77F1CA155147DEF8D7A590EA6939514 D4A226588295CE0007BA8A550895511C8D80BBE5CDFB8A50D249C3BDCA974415 F5557914A9B805782F399E4078DDB6264F1A49A9A5BA45E284A5196E9828EBA8 481D357B8D9E6ECA631A6204439FDFACE7D7E6A2392726107CB7D2517CD19A24 FBE592C119626DB221BBB635B6EB84845C16A9585282E34958B961F4A543AF9D 419B6A9105BF185FC767712D923437BE08A9C0EB92AB6792DBDC671029B6FCA6 7F717FCE379C0F3B51C6CF042A762ED04898FBB4B0105C3C4ADDDC18C51BAA3B 70A93666669547081D9246732CFF74C83EE90DA17F5B4F8BAF47FE4D81590988 2858C9B96071341FA0A0D23BDD4947FC9BC2297913CFBD4FD6CA4303AB3179AE 0203F1BD502065F90CE9BEA3B52DAFE4A29446082EA0E6B1D7AF1F31D0AD02CC 9A7FACE2CA86E5FE0F6A425B28A5940ECA306891CECDB3CFC7A5BBC76B5D9E8A C754379ADE80B4D72CE493010317BF21A0CF4A0A55C1246218839DCA3F4D626D 1F4161D38F54AD5142C1CEE95C61D8BB10FAD4B772F4955777AFDE8AE5A837C2 A2BBB11D0BF5DA2E63D0B75ED421DBA9C789B281B01846B65DC572BA69591969 21265DB722AE86BD8CAA3D887C975A617ACEDDFB7AAB341F47532AC0F354A530 7662C089DA3939588774FFA16FC4A52555DED6D6F51DE718BF5F345C23C90198 17B77CB8B5D53A5CE7A79F3E286B6A59F3F6178AC8BF15C0A15C1A8A95D03B60 30EBE53DE328CE085CD9A1D49C69AA299C5B58B24334A546F6E274C1B534DC8F 3289553F560C2F81E413ADB92FA0E7DD1C2F39D5FD268EBA97AB7335ECF28257 96B4EADB7D0778706CB41C7E9C882760E7670936774A1088FFB2011115FDADB3 B69EBD5108760762521C25C968C3E282DC3400001AC8FB1EA27FF643E3025950 1D617BB8BB321281708E496277E11DD3AE0023DA9F25AD06B39C7CF527FED27B 57397E88D3DF70EE4FCCEFC8A0927D6B05517E571B3E70ECC99F3CBA32CCD4DE B8BF22626B6C94FE65598A88AB90D238461EBD9A098DADEA4091AF1CDD7560EC 8E1B9BC2321686E1759E6B8A270C8CB4A254F7368039602EAEAB86ED21CDED91 8F2DB9889F46981C494C7EAF5E819B91C129F0740B8002B510014985E5791F59 B16879CC6521D8E9F1C4C1890AC85A78022BE614BEFF318AB2616F0C3F02405E BB425D1555472A2642BA7686E431DC3FB8A1688B76660D9957C3FDE8D58109AC 21B1234C9DDF3F0FAF93BCF7B2F88A001F23162E1A13E5E9118D51B485B70A91 D0CBC39CF44413FD8686D9030782DAB58064F5B987E0402AF5B264B17BD31BD4 FDF63951BECD73ACA6138854EF35B062D01F33073850D9C09A818828C581241F A625AB3638081DD0F00F946BE5450D38489CECEA4E66B4D85CC8AE0157E2AEE4 A22A9313829F24D573101D84CC1784D1CED7DFAD5DD966601370C6CCBB723082 A86BBAF0A5D867D0D2E3CA16E14E5109A29EF02649C47E12E88B3B397D65CACA DEB9940B92100744D686066F8250FF30E5F13D81428EE238A2E4E07ACE0F5C38 7D79D4A336D0D26AF9C2B84088ED8ECDF94A1E3FADB45AFDAB46CAD6FF950B0F 07AA2CDF82374DA76C56D29C80138841EB13F0D02ADD32F88B23E282ECC845F9 BB9AAECE9CDC644AC2D49577A92307A83A99434F6493156DF25DBF0FCF2EC21E 8C50A312C3D19E0609C0038554CF4FEF3ACEB7A833FD54B06EF0D617C2971C89 E4C06075B09B84A4F78A82152B9A9C540B1D881313C2C74F20ED064A9606EC2C B56D7BB4797F1EEF4A9B13579CCF311FA4A4DFA62D80FDB7F535CC6526D1AAE5 45C008EAF024B48C377522F74D939A475970533E645B1BFA81997549AFF26F67 2AAE6C2EFA357DB3B525276EF330905688777057F4E4CBF584520A534A8587E5 5A8360891E75A15205E8ADAC4A4E5A6E27D0C4A7D492216E4BC023AB027F37AF A8DC7579BA50204D5F45A51460C5BD8A5A7F87668CA6451137F2F59E117BBE28 5C40820882A5546FA76F0CF49F8A6EC445F0647CC3227C400F56E7E9B84A6975 E85E243CC1666DBAFF4E07EEAF3AF71BDACB30DAEA792F2B8504CAB071544F01 5D66243D529C479D276FE22F7E275D9E7FA9C6EECA18716B2F213916E32C1D94 6E32397B41AC6779543218E506569E3544803BBF9B404A983EBA62A494187B30 8D3DFA4E1237A2E5E08224A60492C09ADAD8775B7CDB830520829BA164209ACB BCDEB2D574CEBFB7AE4BE72DF4EB1945FEF2458761AD8DCC0D378AEB7DA002C6 9C14A665DAAA532B0ABA98D7BFB5A6151FF6703385AF7AE8FD315A492FCCDBCB B825707F9566B3B4943A3C61C3DEFDC31A843A2D67AB06891F3E110DD8C73D3B B5E4151B51D9F13905D7D94DB9ABBFCAF35F43B6EEE256B1A80ED6D1739D8D5E 8C767F6F0E8704C5345D028A2A6DAFD9BB7AA048B8B895FE9423A7ACE858BADD 595CB074A128DAFE08FDFFD6BDAC0114159A702FDCBF8013804B0CAEAD7AF38E FAF086A3248AD4FCA1401A85AE2F72E3E6956DC0996FE8ADB18F89B14A208A15 13F81AF73D0DB72F78C4DA634ADE3C73756CAE6AF2E149C26316DFD93370BE1A FB4A79F77A67C07CB0A53C78367F21661D4AFE9E27328E077B522B50FD9AE2E3 DA087BE481515B5DD7BF894A96A84A6C78874100505B7DDE1D22EFCE8D58B3AB 313AB5495F72E2CA4E6AE22C0CB854302B9990372F1661D9F0A517F90686F248 C5643008B3D29F7296E5C8FD4049886662EFDD4106E17C879F5D41CE84F87E89 F6A3117C968B95A35940CC29C43E1E0DEF51C1E46B676301F40D59615C3F73DD DE37B72FF7105DB84227DA5241583272AB1C3CD97AE11C1EE98FFDB5E5F44844 8FC41BEA5C54B26341AFF6830D9D0A5A2901B0653D8BD0746838194D240FF753 E99750D3383373F453723D86BE97B571B8B84D8696089B5CFDD53E6C562A2197 A8C4FB0CC690C27761A816B441029D3D306245052E0C41B53025D8CB7267CFE3 C17FDFE348E765326F91AEB700CC49162DF748171214252CBC821493DD01AA20 417D66DF47EBEFFF3E9BB2B0A2BE7D9B8C68BD570FC2EB0FA54CECC318F04C43 19598BDE93F2F13DC7847354C99059AB20593EE51E94F9D4E9241869D605AAF4 9D9B5FD88C3798A039A67993C5EC68B6326B132E647F67EACCA7F7AE7F718D85 12666E90D7C73EF210E344964A38228B236679A2B18F5E081234CAA2458F8D83 3F0CA308D19663CB12EB904076EF88E556407C33C9380A6A3D68A9EFE65387C1 A1BCD2D26DFD2AC0881EC30E81C0A4E76C244A2BD822EE88C4A60B480D107E68 90E419A1F512E865BA922A7830909BC2611A80931CB2E9344529586726614D94 3AC5200FB9FF68AD9686506C5EFA8788C0AD0251AFE7F95E84683380CDB421C5 B1A783B6D5F3A6BD1BC1C14B363DB01C87C0796DCDD5BECF41A1A9F43183CF6B 82C2AE49F0BFDC5DEF7729F2E638EE6EA9E4D059EB9BB1B992AD8C82D501A550 1BF73CBBFE740179B54E193E84A55DCD61B343C1852780FFB44248FC9426AC94 AA2B3FE20FBA30F6C4D1E0FF3EDCDD8C0F57CCB50CDB0EFE2E04A8927E239C1D 9B026C7929BB48461D4D695FFC766C8A0E545B1BCC2AA068D1865333108E7985 2D93F9B00EA0A90939D0D3840D59B6CC0CE2C147B2E1A9A4F14270FE3ACF51D5 99F7349106165AD627CBBB0ABA01ECC6D3A14C1DC1ED23A9DB9865BB4396C51A 31ECD001EAC94B33C34E29C5611148EF3E55DD61813470B8F3CE32564C749414 3C93C77EA5A3538A0B5AE3FC4DA32813B06772E0E48E25BB39F3F6FDCC077E86 F86FA50E18FD19EB2F37311CE87F18F3BC85CE7FD71CA92D5C3264E34E04A2E5 70C79D99F54D6C6D9D527AE45EBB48411221134587D2253E7C8ED7658EDCA34E 5E768DD14E0200470F73C44D006CE8CB35DE1CA3EC10ADC668B0662A7774C891 84EC95A31DD872F0728D9F65CA80940080E04630BE4DEC77A2C49E3913C39978 BF145F8832AF2C4385EBCDB15F9D32C22CBA0CF950877717D6F1591D7C0B8047 8C9BFCB16AF7124ED83137695F3D69228DB633053208C29E0ABA1B06A7FB3EE7 5625CB44927E2DA6E038A6E62DEBDA2D96A03177982D8FA33BAAF4426E05F4B7 9C1748B3FF7691F9888E7FF864A10B9DF761A41E6B5CFAD2BDD7E1C4924AC97B F4B352705316DD1A58637CC12D71C18A5CA691AB2AA8F171590EC24582B1123E 94D4DC587D8F99E18A711776BF4013C96446BFECFEE4C809EA94B169088024DE 0CBD20199A915AA406F0BD5F3D63D1467C49B4691AEBBB35ED6624F2D7BB74BC E80FD92B9FD04DD9C2BE9B6FD29EC7EC07FAB447511C61DD299C783BC09AE2A4 7B3CBCA6A20C6631D06D0B2E2482A50612BB7C29B7E7D0A205EB0E8436702581 596BC996ABD58CD8D5BAAE4B1478195CAFF98FE0141287296C4EFB8D2E7A8442 F0A3AA9F9264329982532295A176BA1867EF732BBAC49AF485D9D0F7130F617E 7F7DEEF935874D55A22240F8EDE4F247D5F73481373A392D40A8076BD91079E1 1CE5998BA13D48D56B49A92B4A18430E316405D2E2E391B496A1934671FF1785 AF42BA3B2D14B8E04014437FD194455C50289DFBA61B5C377BCBDADA48E82DEE 4E70EF5E9DC03064907BCB8BE4D59DE069FB0C0CB140DA54708E630767313F9F 744594AD8A499CFEF733E640A11FD74E46A749F9C7D18D49251BF85C6EB4668D 67598C31A8F90922FEAEAD4B83B6E7184567DC798E4BA1C4C9B3461A478D63CA 054F13B502DACB674EB49D6BB935E5EC82BF99FDA7D47C581AD7F940DF4FC6FA 6C6D25D647033AC69505F0CAC58DE99087F365531A6283CB89CB644688963C3B 8B2203A94294E58739EF23C7803630A1F9121D62BE1977DE2F41687C8CAF87FE CBD7AD3B98E0D95C8C6E1A7CCB0E09465AA874DC90A0F5DB2C5E7C130297FD39 EFE63B0350B5139D09E6864D22C3F1150B29196E40EEF9723E71158B7ECFB8E4 C426FEDCD439420B7F1C251FADA347C9A2C49738B5A17922E1EA93CA7B125B76 57449EAA9C1D591CAD327D0E98EF2D44D614EE9ED49DD31ACAC0B956620B6BA5 5BF6D08CA7541059D5ED2EF00AE2EE95488F5645BF6837D9241C0D3959B7580F C9ECB2BCF3E65C07D52EC9CFB21C11CD4C883E44C173214C900C44D2E1E43DD1 CE8DFE3DA93C38B548BC4EC46FF91F30CFB97525E1FD4E77686433B20BABF8D2 848C1CDF1BCF185CFD7A81D2D4BB826E837E2AF35CFC4F419F698DB0C43E9F9C B0FB628AC9A3CBE9B1FF4A067016E70333E78B32AB2D89C483834B31F5808FDB 77492E099F1504DABCA5722C7860CDCEDB2DDEB512FFCC7D287F4945FD711F28 87BC3D36173566B81FC2C1290C717A09697DAC6072408E20926D39270121CE58 3EF97CE12EDD7F87F2C8CFE36C3C0400869C0D813B71C425343EE0CDF717BDD8 409D5297D0F8F7FDEB0257C0A391F5635E0DB1116058942FF3E7C94D5F2873A7 A3B0ADAFC3835AF2BE474E6741319BC6695FB37F59AEE388F81F6E66F910000B 72E6BA7531B4378CEFEEDC79CCF4947BA1703823B5AB4F4AD73D9615C66C489D 99D68E49C9BF765B7FC547BAB9640D51D5A7A2396507AB5A4DFF3D14F52422CD 8FCFEAA06A56C6C7FFCD29C9A7A59DDD2A909A9363FE5F1E9629616D25ED38CB E754C059E4379318CC491C3B1A90128693AC53F80F8210FAEA7EE638902A7D3C 82B95B3F5AE340EC1B648DBB9FB679D6E80B7F426D8671FE7136D97F51E2D2F3 C9CE9183E4061CA40091A2A70DBB9ECBB19CE3F65ADD0FB346B54BAB182E2CD0 EAF4C0F402C25573FB344EA771B297BEB615FCD0595172E84ED2A62FF8962634 23C19076C2A9ECEED5135994EB397303A9619C76DC55E032DA83FBA441BD484A 59F70A5110A8927F6239A14D4E223E189A5462E4A92EAEFFA4B961A2A32B320F C2B4E8C1821FA67A655B5042C15E4DE1FB3652B55078DB123573C4E986B19DB0 1C5131F3DFAB271C30A5476B4A19D8FC922E31879C34BAED94C07A4841B8209C 403369FB8E842610D1EB4662B6171A4465FD0E819964F62EC5B0ADC92F08CF90 1DE0B410FFBAD16F6D355E8AD72CCF67961EDB6CDA82398021007C2D0462E893 75EB0710AE4A6CDD15077C9DEFC5774EF4A657734D703CE42174259B58E5277E 0DF26BF59AF8D1A3E7DC12E3C12AA4B67CF35B19962F6950C2020B698D971B35 82FF84E72F72FBB0C54A112BADBAE6C4CAA358BDE6A705AB59332C3850CA3D25 C7564499BC1319121CE0D93218210C68080AFF33420E3CB3A48BF9EB66BC07C8 A79D8CD8E78C200FF7CFA3DAED0B9E87E6141C88B436D8FCBA50AC195FCBB9BC 9512B95FE3A37FFAAB39850FCEBD4D50A243EA416E73F53B4B00F3B6EAE0CA06 0693AFFEF215D00BFCAD02E45496D7C8F5E99EB9096FC4300D038C1AFD31EC4C 5ACA6B72C1BE7204E37A4CBBCB1EC26AB87F2FF82DE20601025169A5FBD2D060 62B5B2DBC288C79C33B596832AA18D730AD572C6EDFABCBD36DEA87C0F323C3D 6E537AD3B43C6F3A905597570A8C6B0B4A5E08C08EAFF9731E745F2BA8ED0C0E 1ADF7821CFCD4E38F3F4C243CAD31D9F8FC68B9043740852B4CCBDD37BF728E5 648215961FA82A0C847ADCC5187331D0863A4573BE520C02CAE14AED4F06B3F1 FB4A318AB54CD86DEC824707B29F858FD726A167F2333855C0575EAF4EBEA0B6 754B1775F967140641FC06F82B191244186FF347A351FBD8FA62E8C978B21F6A E124929876488AFA97FAD262BE3D172E2F03F564F1325C9F1E050C83C12E0CE3 C7F58270B5C40B46B3F592FB41FFB7F59EBD69B2F489441E398FEF7F84C85055 531D95FD21629B0E509C2FCEE995D025BAD5D3F28CDBA5CD414405ACBD936C3F AA4CB2620D7426002161F983AE95E542EB8553AFF7E57B82E05FDD5FC433E1DB BBCFFB1ED92299DB0291CAB10A84529B7FE279C62628A24A2FC36B01976E13A9 C528A198B8EC8654AD69CCB5C209964A2B25D6DA9BA0FFB366D19D8C69701D7E 8ECBEA88569601C80ACCC2D5487DDBDC27DC463A53A8E59F9EC17D0ECB7D2188 B6CEC6BBCEE631DBB9959A9855B997481B5D88B8BA29995053CF42C5518A3E8C AD21553A0F6BC3483624B013D3537F7C85D7C558A9C772554CFC1C3FE7A70633 318A98AB557FA3E196B6AD543DA00AA0755835DC3112A06E45CADB30141C56E8 D567AFE76F96CB3E133EFE62C1503F9BC334C4B7C5E6616B55B1147525E3B6F1 EF158CFAE36DE2C7E6F8D7DF6E491C6EEEC62B0666B4874FD093F255DC5F41FB 0966EA5777606548FCDF2EDAD3ECE925BC583A54B4E8A4D1717876DB799B281E 47A160C2A4462C94B274197299B2FFAB72073DCFBB1DA8E6FE7BBE1558854E2E 3F308CA55B9B3A04474DB470E915D7DBDDBB539CF7447E951AF856BA1D94104D 3F3BF218B51FEB6E478FDB46FA13602E464A770FE634ECCE28AB4F4B56FA9A4A B2044C856D1F78B8AB5C6E7D6A36C8F9AE08CD38AD79ADD98A14E89C4CEBA459 30537117FE097901451244CA9172F000A4EB5943E7FF177A86193B6FC3AF1F43 3B8FB6363C40FB542ABF979ABD505F7609F191D87E28280FAD9E7F9D2F0B6D69 5DA9C34962D936ED50A0DCFCFB5DB37757E92EA2F51BF0D8D2F276CE279FCF71 5B0B080DCDE6678029F6AB8110AF381707F09E4657B787BDF1A9FD33C2EE601A 0B7E83555BD940D43F20FD7B116635E531ECE1D93565FF3985E13B3ED732F6FA 4787F723D998A4783D235F6AED7C4369CD135C37C1C7D03E9FC8D3B2FE07C9B8 4B229D8A9D6349F92454FF61CD59442360F544EC083D85F30FBEF47CBB7CF79E 2A09852C4E08AA37C0478B3BC19DC4CDC6581516C443EEC55F7C575A2EB807F3 64535B6C9C477D6E9C29A74640C453023C6E8738F7E0233ED8BCFAE06CABBE54 4B6FBFA292ED81E032E4514B4798BF36CA8461F7B2973E0D9497F67A9D11E1DC F7DBB4EB6DC1A314BE4BE021F64750E1BAF989D6A43F78405BD365DB61310241 B38B554F1091282098068476B55C1042B88CD99246F8039B72861AB2310D68DA A56404030D9A25BDCC510ADA560AB0EE9D4F5CC7779253CF69C1B9A93B602C89 B679B96347EE3ECCBF06967151BB154757579CBEC58F091041CE37DCD9210F95 BFD4FBB7E6281211FA9A963CF4D0FA0B1AB08912DF34EB4980CF0A9232863F62 F8C5A393A1F82E0515587B70DDE055E0F6184161D74FDDE9D968D8FC1E58EB77 006240D0CD2B4D15F02D234890AFCF0E4E7DD18865B565DE6AB3CBC269D90D21 B626741BB25E860696822149BEEC892C62C3939231A3729B44BB42516113232D EFB2D1B52819C2D3BFAC9406587D6E3014A5D524D18D2374B3917C2C50D80CE1 0677DED00941513835B253B6AB98F2DB90ECCAAC21F02E717E6062E7EE6B603F 2E9B878D65903F235429C5D288345D0961B4889C5CC59114FBC77CBE830B7C93 F217F851A9E2992AA02B8AA133ECFD08562DE87B8C301DFB443E37444EE46755 987D89F344723318A8D3D3F1559FBADB94BB9290AAE0F50D4FDE70299484672B BDA5993A78F820ADC6B57F9D336EDDCB707E1AA2F69628F204F7FDE7C41E8497 FE55FF1E0FEA6C6590E8234D59D6511B5C7D8F5BA817C4FA779EFDC6CEB2907F 67D7698965CAD623AB3F7FE8FC30B8F5F80FAF52850FE55C166BFE88AA9BEB65 4A860C25342929341560767247156D945728987434CDBA46B1CE406B0D34DE3A 3B31F8245E4F5D17FB705F9594C8DA16B3F4A1DBC9631C4571F95AB2882BACC3 D7D24CCFC84D418599893B98A0AE578ECADD11678AF01D34FE9406DC553AC10C 1CFC9F3EEB818D51C3F3CD6B498735049D96FD40ED40FE490BB67B2951371077 D95703C1B607A32B51EF5222D902C7F897E4A9538889CC842E30908E8E9FFEB4 1AA3E3B09D6B041083A309496FC9F3FFF1F108CB3A472D5D9B53C219400ADAD1 E6453952696AA151EFB07C187D5383FA9537D4D7BC8755D1AFF13BE1FA2A5A70 74B74FD9B96C6C1227A83413F9EDD9C6115CC14B77FF0E22219EFC94AFEF40E5 00891819EAFB9DFCB5E1AD662188D011E0B4BE9C108EDABA64553B130D0A187D B0EAC38830EECA330801E672CAE02D354B649D79DC77119773FE14CE078A848B AA0AA2BBAFACA09D8BD76742B1ECB99C33A9D42E71F0F57E906AE339F953BAB8 706CD7E45223CEB3F6F2384E73F536390332B2C34FC6C3064229DDA550AC2D99 F22F56020746FF5F0CE1D3360EC453BBB99B4DF4C72C1006CC832AF41C585455 FDF113CF9FCC8B60AB0F09F1213ABDB714761D6BF82E865108B9F76325B098B6 2AAB116F84E3C491DCDB72AF33730BF4D924E92EF32D87FA6B123227988797B8 07CD7867058D902DB582BC86285397CFC2A8B589EEF3612675590A29732E3F2C E16F598DA83E1F1D67E32AFD408355C9D6AADDE563EE743A5C8361603F882551 8160D51145BE698EFBD085BB4961FCD2C444C490AA87B49B6B1A192C5450DADB 4EECA9CEDAC8BE244BAAD2319B4D2AE802732D2C2F4B936BF55655E456B81C77 42C7CF032B70AF1AA08131EB5128C64C47B69636AA6B5058D113E16B259D564A ADB11BD2E1577BC2BFC741F10A89B35E09F48E3A6C740C0A62FF38E1B02E11C4 9F3BC3EE57AB2A3557A4BC16F20197915F71ABE62BD8B955A7C8D26CBAEAA405 593CFA10E65550C16E049D2E66452350C183D6A8F7D14806AD1A9A8581F97EFB BC35EBF6804738A36C19314D35048D23954E59B3FFA98C2ECE5925A0B110DD4B 7C4AC72933B8B6763392880A8EAEF919204608BAA4F91AB141E6FCB117A87458 33C5CE4299E35BE4E24F7CB17C2651F6C9E0C61377608CA70D450251053447F8 59F1C75EC10F70EFF9CB056DC7A79E31D7CE36701780C2CCD66665A3E4D438F8 0C9FC66FA8632CF44DAA10D44D147F88FAAC57B16D30294D50AB88BA1C245B83 F8553C431C6BC7E2263FFB8B7BC631891C307F7DC3F74B52A4706E19934C2E3D F6BEFF028B5B91D372688779F6C10BC91816F89DA3E32F20B11DFA134632CC24 F88B0621DA63414D1123D7A0B8D941A901AB8AB440144B3F8E95F0236F9A9443 F19F2DB4631803E9256C52199C86900DF3CF0F4F55CC076962230E79A471A403 B042E524BF3E8C87891EB0F9496071B172583BFE8211B9D0DD9291EE4B96E275 AD5E1C208879F539CA85CB0D231926C77981898C51A3D04B6C3AD528F65D6DF3 435702942B9D9461B27DDC8143D3FC15282F22117DA15E7C6BC6C8252E8D60E9 A5DEA270194F1852806DC41C5FCE64BCA450F764671DE9E8CCA7CDFF4F56A49C A3950452BB16F85A9D9D8F5202BA9DD808F9A01594F9F84DB7A3885DC996230B 8A92BBE5306C4BBB59919BB507D6A79B9E0C59F6584A83334DB1982694761EBE 565A5EDAE552C48575C5912A6C8275F7261093F8A8E52B13BF39D342E06A0251 4EDE2DC2181A0781D61E096D7F704D42837A8194B2A8B745F31C9523F3DADFD6 8272C2787DAA4256F36936482461B5E40415D3E5950CE00234266A06528CCB55 80EEA73CB1F802FD242792D54F606458082E4BB5F1033DF45F60F5012B977AC8 ABFD69FCCEDC7966C904EE7E416F6664520D6ED4ECB14C12DC325F03C3DD8F68 D98AF80376146F94FFC81E8DD6099611AC03C889922F1C8F1ED4723CB095E64A A9CAEE2769EFA29ED745D6D2212CD8EE7C739B1547BDC426C0C5DE1268B53BE9 0ED7A5976D9FAAD5D324BCC6F790D0949C94E0CECFFCFF420E8552D70D905D29 1D92B5AF64C6FDAFF7212856B5135EAB4D2E377DA3F0BED8B91DD71DDA76CB56 07051A67C1673A1912B605C8976CA47AAC28572FC3FDCBBE3AD231BA5C751F8D 2FF4991EC2046FAA6A0A7C48CCBD36660656C183E27CD85AF5B31F8A6EC9EFBE 23E178FB79AD88F35AD52334BEA3522EC8A6F38739EC6E21F0E811AACA2F68DA 8E8F16942065367FF7A080142098B6ED672DD30D135FCE8ED83AABD323D9302D BEB17AB8B4551A44B73BF4D1397634E0BBDD6DEEFF365E2FE3ABCD01F247C641 30E968CA76A7AEC83DE42315F3D49AAAD0E46CB375C9337BF52A2209A8B0CE14 A179524F6B0D3478A0F159167264094001DD99804EB4E561C225E4E0608D2FB0 65EF52F507E1AA2867D5F5A2B1621AE7B8747F35C264823E4DCE5C273BB1E4A1 E7D61AADB2E90E9D5DE4C4B794DA06099EF2A0A08DAC1214B25AF55B2147C2E2 A8EF9FA1536CF4ACBEF0BA7941CC95F983416071AE7871073964C25CB49055AC 15FF78DDED129506D2E0F122EC2384DC1C62127964704564ED4A513AC9FEDEBA B5BCD2FBEE3E67809D21454CB759B3D8299BB7C1B5C40C808031F07F6714D0B0 4CB1CA7E969AD64D2BD655A0DF861580715A5AB086F59B39E11D08493255B438 FC6BCD9B419EDF7D3D0709D4EC6F1468724C385665B5C1F9998ADBF03A28C176 2CE4B94B7FC3354EE2B06372C6DC4425BEA393410C84490FBAD7DE5DDBA0E245 5603CE4204D5D8423A4B836B012C613E8BFA21AD9DE66220C3992AEA47E6BA24 ACA28485E1DEFC5CD4DD1ECA615F97933814B3F0E096B8D9C62FCD18F45670A2 93AD33647F6ADF92931219BFBC9A5DA9BC94B9F70725E472196537C98D51D4E3 36B4EDFF60680171775F2D16C153098215048B1F726FF3C39ACF2EE770BAF88F F3E2A7984799EC38BE1EDD5C6F416A17C96CA9EEA182FE801B7DD7591B770A51 BFC1904957E07C5F99D6218B8B081664DD1B7518782C967F7EF200B2A6B25365 2A308EE538D6DC74D22F8B28211487D7FA1B60138484DED4C2209E470E4AF2C8 9E05E714207F7B2F468C96AF8E6E58ADBA025C12642E3A5655FFFC05FD8D39AA 82751892BB0010679BE748CCB645FC49ED0DEF6589B62633D67E28FDC84EE171 C738B9EC5E7DEC903287C8AE6F0580A6839EFB5D70358AB8E4C4A922EB07D5AB 6FC744E59F89FF9B85A9B1B4FD96E3E28D88411E8FA1804AE8ACBA728FCD9AD9 28A7513508FA6D2A92B1EABC92DD70C326FD097A51BECDFC9D43950B52848A20 90D9FC0115D85BD70263ECD3FC3F71E8B3E7A0042686D02382EE031E3CA363F4 1C9F82D13ABBC22522467E2A4B862D77B1B8FC5238EEAAC24F6FE9C837A0C8C6 A8844D5EA98AA6694B075CD45490DFE8D06CE45640090ACB7184ED0B4CDABD11 7E4A2F27D0846B896EE0CF10F2D89D9818D615B4555EF7738E459B049614F957 D8DD377C301576839E4BF30620CE3444CDFAE6227ED0955C0559E709088621EA D26BA68F2EF833169FDF507C4DBB198562FFBB87E21067D47D5798E81A1AEF02 A5C5684671ADE8E5013D420405306E9A4143E8DBE368D985872B1571E4D6EE87 D941FC2B88A5530BAAEF6C8FC07AEBD6B425E001DD11E127D854B224D401055F 5EB2EBEDFBC07F1FA8EC84D07073E8AFEAE8580A45C14E1549B563901ABE0658 99ABF9CC458C4B38C431EEB68D785A645DBC4118284853EB30C667961FB4F003 5377C4E494B2644E2C2D6237C38609BF731D1E87664C08BF7032104C9C63B24D F7CFD4EADF02F34B1A8C10A11C86C7D6B0A0A8D6A72FF5549F66BABFCCDFA9FD 568EA526F32F3823BD9407F697656208F37A46A7EE5FBD6CB46D320867A1500D 25E35D11F455A6B758B14D0445C046BACE49BE3E7C05A4BD642DFAD8B9BA6A98 BE4DB9BC75372B9295870F70BF842550F6E0A531165B646936306838B8425A79 BC61DB8A75BE4F21D348C756339F55352A8E9229C3DD2A06BD1BB68138612BD2 D29933D4FD5F3E8C4CBC060588D08D9F739C8D19E6301FD1EC8F21EB2959D8EB F47FAFD44EEFA02A0C6FDD18C0DCAEA863245408DB1CF79FB5CFC6B620E47FB6 B70E0A455586ED656CB58AE03B178250651DF60291BBD40CB2C83D685267B146 358FC3D88574CB91F0371A54C9D5E97A8B39CBE24842FA6A810135A407A72728 7702C16A4B79A1083C4F3869D8C39B8A4E656798CC108B75C0F7142D6229731B 59C10B90F4D5493C4A0F8802E398794D52E3A1EF82758456C83BA8567A3C2551 3F511CA52FDCB634318C13AA50542995B6A40E0575FCD3E0A70B9C413E4CF763 2E92F3969FF15B94013E16E579FCC15F2B100DD06BF4EF62651CF6E08A49489B 0ADC15E3E5583E9FABA25721BB6290E3CA9EA1A67A1C148A18D5300064F2F702 BD7C78A610D2EC6E2DF7EB1A7232FB92E97F6A1A8EC08B579D1AAFE0BF976DED 815E9891A56F32D2473FCC7BE8AF4440751A18CD31EA10C671C3438F0D3A124D 7C9892300DC93DC7DDCB628BAFFE5A53E40CD0DFF6557DC4D09E1615E6F8305A E092F96753AE339D8A2D5B44FB05F5C3BA4C18E1BB1A468B390744BC85EC9C75 8D45F0D230EA663BA8980F0223974F3823999FF64980E3CACF6DF5BA08539BFE A00B80A2D8F8845F688DACEFD72F59C39D7D65B25F0D983EDE4126E846366F11 B27866A57DA69F614DFF2D9C99C88353D82500F3FB2234A531AE7414BA7243AF D1F7AEE3D9F516B3A1256C8B951C818A6EFE097FC5CF11519E0CAEC490B5045A 7B41A129DA4DE91AD7471312CDD15515FA0EF4A8DA14BC9F1A7518C6B3070659 56E0868A123101C0CB31C523751BB44285411DF76692D1687EB127D7F02996B7 71ABEE0A274E9C3D833B3C7A0D988323A4D559754BD66867000983659003EA55 A0361E62D00DF238C5B3A7779270CFBEC44DC29CA89458DAAC94771F7F196E1E 08A87FFA0D749A44821C0FAD646C903E5428C2BB0999EFCFD079AB653186ED04 E053D1F531CA987CB63FF625F1DCCC2F00D0D76196AA34F60E0B0299A3CBBED3 1F1BB46A247DBA9207DFEDAB532607CE398ED8E6D0772F082A8AD2CE3A6668F5 2BD448FD4C0EE0846C96BAE61427D08986422D214A186072F0F8BAD655CB9CAA 69397A418461A0B84CCA45F8D2B405284D952C493A51CD35F695603101E03823 16D2F752EA5B073D5F1A7AD0FCB451CDBB56468CAEC180DB88012926CE4C3704 2698ABF600454E8C42C6FE285A69A0633599E596C5C29642420764B4122765EE C533710C3214942493143D77CC0805CF32F666D9B28EA6CDE59CC8AF26B171EE BC23569F0CA8C4C6F931B5D6B9F1FB7C3ACB6BACA131D80AD858A79C0B36648B 79C81BAAA0DEAC0831B778D9439D5D6F6D428DC4F516812BE6F3C45013A9E58A 478DA8BF34061CE7995A5E118D00BBDE39BCC97E0927A31AB694CA05F0E30001 2657A79B85F41AE67AB3D9D6CF97616A5D4DF359AA47E670D4E48146124B4F33 F520050F3A1731E4908146F9D45DDF72BA84C0D600BF25EE09EC38D193F6607B 9D4821C3AC5F401D0BFDF45F7DD4D2622F4478B4A62975FF599CD0B78C926315 C86E158AD2E1A664FE92680EF80533395C86D86550C780E160F3C3295659C9FA ECB54C2AB2C46E4755CF3FF0685C436DDFEE49641B84923501E9A3BCF55B5408 AC8A11488D3343BA93B6653FD6837BF70014FE1DC8921C0E66C10C8C68B1AC15 0680CD83F82761D54C0BCA89E63B384BB9DCFF36954759FCBB77F1758564D095 6A8CDD3026C170B599AC3340FAF2A96BDA9CAF7371E7F33AB1A664A3C4407F3C 91BE1B25B31F55FFD36EE390786CA809D1C92E2D17C54949D7420B08EF5E4CF9 166685BE6AC514BCE75D6C7C33E8C6BB5AD3FF649FEF6289C5E45CA4E279D061 041190EF86C69E8BD2410FA83B25AD959BF2BFF37B703F7F3831D658DBB7494B 9AF9A3FE13B65D6DAD3FC55EE9015D97A95DAC8B69E4E22F85941DE6B3093D9C E3EB8C164AFDF8FB6BFA241ACE080519865AB63F4A73DB447039CCAFF1A8013E 01D638E5B1406A07E1802247BA3C6A8A87820ADC455109C81DA52FAF2F6A08A3 D4387EFBDD25C672D20F9B5981FFCB9432EB612BE7223BCA0C4E4B03597D7C75 A9282430FD43BEBA807317762F04BD4CCEDDF9043846F672ED5EC51D56BFBDDF AAE005B05B51E7A79809A9F600DF001F8787ACD34DE06D80A4968A544D8CB1CD DE3DA649614563E0484BF9DC2F1674C81377942213EE2C9C2D99173EE1AE507A 07298F118323A8B498E195DDA2A8A59E311F35EB4FE0BDF7FC633DCB6006431B 95277F4AC1C9B1C5B6DCDE5E21D7ECB77F47EDE903937171C24F7EABEF10BB60 2D6D422B3622F4027A7FC80C72BB9DD92822FD157A06CAE4CE233A386128DC0A D07280F779F84BEAD3BDD9901CD397487FA62CEC1DBE22EDB623DBE2F574738A 7BCCBD256AEE1D40272D0ABA755B321A2B2D83C876A427BCD4869A78B2CA8557 D4A9EEDADCA0D3AD910873006DF5C95E373E42F08C412F22DB42763A10C44F6F C7CA6108028F519F717F1271B1F79D454F1EBE7A48594B97299BFC519BFD4429 F6872913D791F1F373830AA8591087EB1AD949FDD3905FD62216F470B2D91C70 A26DF766BC3FCC604F122DA0731319646207CFD24F584E1E4BD7D6688377BC2C 825DD7FC029FE58F00C2F9B2176679AB601FAB0A22F7FF77535233EA2B812386 E75E7116431A94DFF5EEE29FDB9BC1C890CD11C059E65AFEB44D814C92864DDC 59AA653481AF350D4216436404E08ED2873A77B5AD84F86B83E4E87AA2D10D0E A4DC392F6C6D8C22F5DE23DA6E9C6D16ACE32CE7A3B96969AAA7C0669AC12023 E972C623A41D6AE5C61616A0770910BE5E6C5E4603CE5CAFCA0F36151011083D B6869EBF90D01F9DEB4C9FE5DD5B32DC2CFFE4EE1B04109F926C9ABCA9EC988C 7C1355EB24F0F3880FF5EB980D18B4B36471C5199EFD44C4BB298A82E615A438 AB7846A073736DCAE34004EED81464EBB354CD04135C205DCD45D30B7FFEEDDD A542C39ACA4E73E5668FEFA4005CDB322B39722C2BABA4C42A1E1CE3C0B84713 23B65D375ACACBE956D2FD1900AD05258389676EA6C161EA5BEA601ADC8198DE 9556326534B41D041FD9E47FE326AF82BB126FFE6BE23910413600349296A309 13A05303BE658F1064F44149002B0F3ACC926926E1DED58258C25CC53B341DB8 9BBA87E83BE487519BCE8B3AA92027D794055D4ED8E3354FB9FCBA527AFD4A38 A7074F5FF30EB92E13518C1BBF92F9B815153AB004A15D517E9BC9B6E9C17BA1 987ABC4783BC5DDC6174DCA9C57461205D8682B831FB4ED92BFD5BE143ED907D F6D66C5F8C42AFB915545C780728728F7A364F2198902442B5B2D08CF8D850C7 39F87D4B7FFCE0C187752F952027FC578C922DDE673789341D01C6112F0C258D 47752A51C89FB758DEEDCE9A321D399CB0448B3E94D29826E0212E9DFC08C968 E985368A9E8874A52AF7F852A88C6A63B35AFD1B7AA5AFB2268175817A014BA9 C0995D2757C81A16342A43F943F24886857484912272C06C8656A18ADD562645 0A29AE9AEEBD1568A966EB6F49818C81CFD92D0AAC573142C2D9FF3057AA4955 36962E7224E37263B9A4EAC880C7F1382633E03D0B371A8E2BD43F9A519A9C45 78B328E1F3050582D08B4E33ABC950C85651876D16BDCE29113872C48201380C 8812F8FBED8A2F295673C66CF6B3B7F75989C5B768DD321A588FF55C92AB380D 655D7A072513C78F71B7A1C992FA112C0B21211A2ECF838F52C4B50B61D60083 B3BEF3B90EBBEC663648DF4383A8FC6511C7792405046282D7017B38F1D53066 7D2A76732E7AA7E0B00FA9607B4685507AB0AD03A2A52721A21C20FD019E1D39 6C512E29C880B3A180529E3C3DDA895953B8D0BEFE87D50A3CE39B4291F55A0E 676A768619E57C01CC2D4313D5C3BC32FC85F9AE85700C5BCF8242AFA8A555ED 430AB80391DFF477CFEC78BAC57BD18D4D4D1E0F7812EDB3F87D947FAE1A1B83 5DF6B14A03D7FFED487EFF8815E8EE658931751CE433301CF1613EA14EF86B4C D8EF1ECAC9C82CB25BF43572A819701366197D089DA2FC158599870E4F31698A E25237063B20A55607ECCD6D545FE081AB32B64F3855AD239173F033114E0F26 603C03CF719B0234C4E778693DC1A5025E7ABCFF8E959E270B436299332E8D39 A56FB8CC2FCFE5C29C8F7CED21D7B43B0ECEB5876F382F694732D29A200F7FEA AF63CED12A2E4B06B3F270AC99B996669DFF24D7AC0270A1841B9C287C724E3E 02E87803FAD7E6F9B8E01DC327DA37C3B4CA9190A34667628536C00B888F2954 45760C313A94991286761656FE4D97C22F2E5C3F12D4B05F779BC726F51C4E60 87B3CCE265700E49960EA30593BBD5D346E301FF03853471FE6875BE2D7A66C3 1C9640B56173190BFA9545A3C73537FAEF3D078D7D6F7CCA3FE1AE9579F64DFC 7CB77D8EFF48FC323F24DEB82C5957B493FCB8C2D7D3E9C27B74249ED9E99429 4F218F2129BDD7D23434BD4398242D7D8FF51FC493C1790451E9FA60180F79D2 E11D162F62559F4599A3A5AA6E5C690C27763C667FE5557DE143C4905EEBE3F8 975805B55673B545C4E6355C6261F09CF51131AD81F0461E988722A5A153A602 41E4611F2A7919AB66AC8F3A1C976AF0D28F18C91AADE306176EFF8036E9A1C5 F74952DC1147D6C9D2053D994506C0B612F645E8A9D8066DBE472F83389D747D 0005227F57E934F350BF228E8F31F61FA3F5AE8FAEB2CD746A05412D8DE5F03E 155460CC2D9CC03ED9980F447A0A5C3EEEFB8A6D67D745445A47775F5C7E678C 6E4E27DB186BA9251B6D1BF428E0943C5F7C5618318226C8371CF02E9DA174B1 C1E74A86C3AA1662D1A94F37AD93998DA12B85A920FEBBD9E490269D37E8DAC7 DEFF6BBF702B86B20EF00688E6D6FE8577A05602A47FCEC154AEA2FC9D1900FF 954643B627FB8852B79D3F6F2A507DC9C468702748866565E2CD79F10EF59413 0163B0659D9717F0BBF019C75BA79AFABF03B0F8361C21DDAB7F885511338323 25637AAADC8AF0E388FF6F99B15F6F75A0A6DBA8E4D2C1F6EA23B7145C009571 269DBF30B6C6AA029ACDD3C192B37E3E08D846AE6E7C4AFAE1EFEFA8ED478C0B C5547978DBA8769884F7406116AC4621E44810E9D8434E17A50993F963808941 11A5C608FBDCD3950015F2EACCA793BA74682A2D5F2A54C174F64585D3D7BFB8 294D3441BB81659435A470C42A04EF06E67B12FEE375FFF61CDE00EFEF4765FE 8B5263EE631BE20CC153B077A70370A0C3F97E4FD1126731BDF9CE49841AF0FA 0E0A41E62A4CAEC67D72095D42105035F2E22A525ED2E882FD0417D9001ABD9F A9AF3C7CCF5A48F7831F809BA762E51E1D17CF645473C04BD6DBFD97A4E80248 7100C62B6283ADF0C255576BDA3BA50A12E12056F5852396534D64C8C85D4C83 03BAD734B26C4937359DBAD08ED8EA2C04FE62EC36E1223BA09B1E50375D3781 EABA1B8EF770C43587873CF7E8CA5170A30CB2B92CAAE222812E4EDA58DC6E0F 3C574829E827D206C9E0668AC693A212F8BC99DF9B1C29B7125B083FEF235EE6 F7C145584D3B8DAB7F97E30183DEF030A80E04E80300817111829E25AB55DAA7 8CFBE755DEDBFC1B8BAEB991B8028862FD8E185CA4A25549721103667E34C201 92C67D5B95A4CF5A78C73C66E584B9342D1831E93024A15D8E6BC416A6CFE112 9180CA519B66B3EBA563210B133177068C47E1BAC38E9A8744384B9729CDC5AE 411174F7DD5045CA490D6D07FF384D5986C6572C07D6DF4B41A35D6120C8F9C1 81540243E36DE782456DC592BF4E642EE99BD8E4A99AE5537B2CCAB55BE4A9A3 82C1CCEF94F570D82519727D7A046868B0B782348C6F465B7F64B50DC0080126 135B8E0889E3D35E14AFA463D83FFD2E348AEFEF850112348DDF4F7344ABBD03 0935159150AA46A7D65E8C394A7695F7E8742B13144393C7ADAAA99FF8C24F36 818B8594AB3915F4F1F9E93C32A49F7CE29B1BB065E960502E3E3089AE7868C2 D94336E1120CEFBC4EB7439DE1B7A8AB7F01EB8525BE5BFD4876AFAC03725CA5 621201587BDEDC541173A110411136D764B971EDFCB7A9354D62BC170CE6DE3C 8AB194D6A3FCB8C1B7D247F1985BC84B8015F5758CB3E512685A09A91C4B1B19 2AFBDD0B518485596B1F019BC93E202ABF18B04018C1255B75F2AD4579E594DD E2FFEEDCF7153B0644B105BDC0E5FA285ADBB3E3C3BE9C79FB89B615314432AB E6CE8830D1BA6CA359172FEEB8CA30094593769A56E399A25429754E2953BF26 1070D1A8109226050A22A1D47615D56E39302C39BB3FE15A361837BF3DA79EC7 E5DE52B5807AFAA84A9204BF8EAB406E13D812C399875525EBD351BF81113F79 40AA44869A06CD0CD51862FA7D91CB05BE9B9CC63D943984DE6B4DB4414DBA5B F5A6C1BCF9D42F602ED296150EF29CC031CFF6EDF90C09094F1C134DFF43C8C0 6BD481F38DD868CD2BEF96E768CDF2E682694AF4B1E85DA585F6D0ECFD48D609 D9B7E5F9B78EDE42CFC199E55563D547D022F5EC791650ABFA30B306B95E4303 4C53B25505F5BC50A8C167211222BAF247161891DC7665653DDD4122F80E8D1F 69426D82B58999FD831DCF9ADFBB1B7743DE829B0156F9C5D46BEC36C38FFEE5 8A7C51F578E10018379DE1E31AA7D3FD28CA029103053D3F64E979290B5FE460 E00E4E0528A0E160DE56772790D3D422C4BC7F5E85947B18332BA672B7277A58 298518AD926EFC07AD4EEB193B5F62700C15E65F9F52C70CF739DED09CE7081F 2E3F7D5F54BD6122FF615C23E7E9AD4E6DA58413C047089933A791F006744E19 F940D039E0A9DCF8EE1A990210CAE530E7E67B16F08145C8CCE519FDA97FD1DB 1E7234D719A61F376E32A56CF4893C6475A47456A10D6D9301D09DE412A9AFCB A9BEE6F9CECA20A2B5C5B15E23B7E3CA820563BE6EBC424234015C59A936BE21 AB4EFAEE0CEB14FCEB7F6C5DCD39A88B5E472AF10D97A598773F54CC9466D41F 5B85432D4897A39006C33E7602187733B5A445F96ECA73391B2E9538A51D3131 B3F1FA2DBCB13F100CEF95E12BC1D36E6416445C9F9D52D001614438961D925D A5EED23DF369614CA0CC956AE0E0510BB25FB5D6EE6C93965F91E20A18732DDF 28DDCFCED0645E092A48B755B17AB73916C50C6B1F194142E2691E0A5910A940 57C18B980E3729A8621575CC536EABD08F3D19E4E0CC587A44CE3D32BC367BFC E96D49858F569E40FF94C9C9BA3A953B082EB521B3EC79D2C608EE6C854CF01F 30A8CB809053FBBBB80D851BF303A5B603AA10247B98B6C84A817BC2CAC6E19C 9940D03381FDD57A8BF1419DD223827EB9607A968E4079C25959F80412389237 B64EC621163ECD5218CC4DED0513ADDEE92CF4FF2DCA02C66AE3CD5C06AFDF89 367097CF645E6308A3CDE823C9F5F7C1EE97756C2B7472F102CB149CB1EF833D 78900CF2C0CEA42029102BAD196BCC577BEB4E246A06504CEF793A3D3214EE13 EA52E2FA373489EC80565D0FB86EFF79B5B66B962D9F4F3F91385DFA83815462 BF97D3CCE237E0CB944A5282871BCC5D0E5E3C09EF95F8AD462DCDF7DE375A04 3D3393BD3A0D4DAB37DCE823E76D526BFE270F2DB77C82023CECAFB6645753B7 9E0022ECD020D3497BCDD8EFDF2B41C1721525FBA4F33862885816458648ADEF AA9F446AC4018D316AFF715D10149A41376495E7AFC6D2186445DB3C45FE3632 2E79BD3460A2A88BD2BB9F342793C4FBEBB1CC401E5D9BD2741BD5A40F0EACDF EA0911E65764FC02EB6DDAF2BC4DE2C7AC38E8FC03F882FBCFD57BF60B3FAEC3 78400765046F7E5CE4CC0B277678FDC87ACF6850D0B1195D5ED3BDC4C76FDD37 161331F24C394BB9518C3BB08CE855CDDC95DC96668FDB40E3803DE16493C055 8CC51AE868D9ABFA4E344BAA3563F39C818C266A546602D9E6BB65876CB81B8E B6506BDFABB736A999FCB87B0B195B65171A356686748932FDD77C9BEC57E2AC 5AD7BBAECD7C04AED17EE2A98AC064F265E1D9CB0F7775313E6938D2C1688F1F AEAB24914845D2C05E42DBDE0EE62F7AD62323EF2EA52A94534D46135A19EDAC 6FE190F6D40D15BDD7943ABDE07559A593ED0E5A1FD7757BBE9486958CE1FDD2 40DA4C142892282085A65EE81B066AEE3E4A6652EB6C570291B92BED035BB984 A519FCED44316EB73ED3B869D6E01027BFD226AB199692D33616C8754D6CBC12 B30F42D05D230E19A3B4B6A100F3768155691C5BD3CB8F868975124D1613EBE2 58AAB353AC5A93C3CD2B78368C4794B3E9C3165B202781BD7AA05D08EF4007D2 1986E7E83015EA5BE880E001D43ED1B97F46BEDD3392726EFFBD14A521A28A4F A26153F07ECF741B79BF0826A85A9945F2D2E7920DB17117F76E6305FCF90746 9DB97F3168E09B7DB4E9B59E115DEDB76F07212188090ABDBAFFFE56CE4F31D2 E580F77AC92B889242E44693BFD90C220AA7C4874D26CB54035D4D155A0B36A0 E6C5EE2151B7EA5199378EDE31A696C7A7C295174556C5E77A47D16E508F5018 EDE8C634879DEC86AE4B9703A04F81A6440758655BD109B4C9868CCC2B15D629 638EDE89748A2FE1BA91CEFEBBA94A28513BD84F285A957D3753C67FF3025F60 808AF4ABD0DD575116EDA4156F077E51315C77DF3256CE606747BDC23A48E06D 4A803E1610EEF7BB3332BD62072F0821D103C791893551C3F67C89608865D648 D30F196ECC5F016CFB6F39357C0E01FC978184085C7034E11C2C74EBC579CD5C 290AC9BD461C310E77A2E0EF326ABF6E4AD77901F12FA5940D0A1BAC358FE57F 806AFA7B2C61A0CCEDEE284A5B6E998AABA61F02D664A53663D84BEBCBC819C2 350C7D67A244DF8FBECF3457251253537CF3D550FF57B2BEA126E6F53C485E40 5962CA5B66D6B3517FDCB5CF2DB68360ECB1DA04C5B8D6FB8CAE9B5CD386963D 6D863FDCFA19F127085C9DD012EC20226139F4369973F90C0ADE491DE72932C9 5FD3AAB7B8A7686782320A1C1BE9E7FDBFE860AF59A4374DF1362810D465D1C0 48B31EB9724FCFDDC2EC7D7E3B018CCB9B61DBA9AB8BF63976A814E884114B21 13C97002C5B032EB93B92BE9044F7B86F5D63D7E1E46D4E8A91BE7DC4C87BC24 1D878913B97A88F6A21EC769D5BC6D29D8A1C8FE185C798C1B71E3CE03E3E046 E7A83B009CB16DEDE5DB4A03BB164256DC936B273BDCD81C8223F3BED73CD501 3A99B37B8E0758C1D1CBDBC190B251A81BA8F861D62FB87611FA49B3C057247E B8E469BC0176F04BB16B0307865ED26F66085EB423DD99B1313F15B3A6FF9B42 766F4658B6EE33F2A398C0C452657BA98D993A858CD2B19FF1B8A8FEDEC8740E 66898EB9471DED2661E9990BB68BAAF76608202B7063391105FDAE9545601FFB 368D932D99228717487A8D125A0039E0244784ECE80D2959C013FE5706BB16A6 064ACB734379D6F82EBB9531BDBD6098D4EE7B2ABBEA634D9A3109AF33AC86A1 C86A164F9BCFEB903CB7466647951A8D76DC19F2BDC76940B74C4A1C2220DF5A EEECE8610C6CA112B46C4AA99D4DD95485F96AC3874E8FF591BDB5D75BE95432 B77188D9B043DEB8D50034 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: (), with Reserved Font Name CMMI10. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMMI10 known{/CMMI10 findfont dup/UniqueID known{dup /UniqueID get 5087385 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMMI10 def /FontBBox {-32 -250 1048 750 }readonly def /PaintType 0 def /FontInfo 10 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\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: (), with Reserved Font Name CMMI12. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMMI12 known{/CMMI12 findfont dup/UniqueID known{dup /UniqueID get 5087386 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMMI12 def /FontBBox {-31 -250 1026 750 }readonly def /PaintType 0 def /FontInfo 10 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\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: (), with Reserved Font Name CMSY10. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMSY10 known{/CMSY10 findfont dup/UniqueID known{dup /UniqueID get 5096651 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMSY10 def /FontBBox {-29 -960 1116 775 }readonly def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\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: 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: (), with Reserved Font Name CMR10. % This Font Software is licensed under the SIL Open Font License, Version 1.1. % This license is in the accompanying file OFL.txt, and is also % available with a FAQ at: http://scripts.sil.org/OFL. %%EndComments FontDirectory/CMR10 known{/CMR10 findfont dup/UniqueID known{dup /UniqueID get 5000793 eq exch/FontType get 1 eq and}{pop false}ifelse {save true}{false}ifelse}{false}ifelse 11 dict begin /FontType 1 def /FontMatrix [0.001 0 0 0.001 0 0 ]readonly def /FontName /CMR10 def /FontBBox {-40 -250 1009 750 }readonly def /PaintType 0 def /FontInfo 9 dict dup begin /version (003.002) readonly def /Notice (Copyright \050c\051 1997, 2009 American Mathematical Society \050\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 14 /ffi put dup 34 /quotedblright 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 64 /at 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 61A06A43575568DC3CF3844BABF04CA767E2995196097015E0C4F622C4356B6B F41DBAFD797A4B9D7AC22332C552043EF98913D0D9B50CA6B7CDAF903BC5C04F D20A952BA5CC35B646ACD0A287C956B98C450051AF6AAF79DF37F8954473F8F6 652BF03AE2AE82B99D820CF93F5FC0BA17EBD7AF90313E70594EB5C354023BFA 07912408F1757319C7288E99872B907D5AB583B082EEED8AB079C63E38B07D11 6744856E689A479CB3A8BC081F33CB06755926204981DC0A45B3ACC18F6865BB EE2C50DB43B62E3630FC1D9B1FFB3BFFAA6D0A20C0381ADF48E4D916BEE85BA2 BB40F538F55C11D50F882B73913840B45161262BC8B0012694C3EF26452F9B77 2CD7C7AD6BFEEAFE31C8A721C2D46AA00C10681BA9970D09F1E10DDB693AFE84 246AB18279A2B24E5B50A2FF6337B7B1039FFDD4B00ED3667B5F2F7BC2786D2F 525A0E82234B30711AA835EAEAC2E404915FC7EC0081B194765032708B5E11CE EF6868298CD26E5B9EF345BFA3EC2911E2B96A0B40AEAB95BDCCEE38F5EC170D 3BFB792D2DDA7E57BD2FB7669484EF9322A1BEE009594901095DE2BA9A15A0EE 4DD77404CEF16EA6C31FC04A8FBDEF27B9FC1AD3264388B650C641D6051E47EB E7EE41B946B5A54D2990748AAA64237BD4ADA31C10843E1C235AFB36BF1DBB47 A3FC8AC6F98C72AB9F84F3C354A44EE0530145D80BA7810314D977917A4DC4BA 2CC4AB63CD3E87DD7D040E8FBE63D94C9BCB476AD94BA7E4C0AF953BF4821182 D723D9BCC92F2B14A8769B9EFCA8FED9DBF2A836BDC23E27AE1BC097FB3D2297 DD32DFDD7E7BA91C05B33583D92EF193248C70B9B0A260A7959045DE6AB129F9 05F7F25D087EA8024C9F63852A12B46114C581719B4723810DCCC8183D7E6F10 450511BFDF8CD29A57EE9653F2651D54A62141A8142C8B857B0D3E2B9FC5DA3C 38D79A7AFE0B565A57A7C4F52DE6933437EE03D0DC1D286880896392B5C513BD D76497FD980320FB10E6CE08C3953F99A3618675B04C8EFA2E2DEF4511B4300F 2E5C733D69737C7428840FEA2A1D89133341DE4BD065034F7316B5922CDA4D83 D8804D8DED8CD4409859CB18F45C838D6F18CE8DF82B78C79AD664A57F705D8D 9CF82E48176AB5869BC634B2BC053A299600E1F9CBC66EE5715E9C70D86E6909 ACC25A0858B10DC043CE7A5AEFE9E3F8C28EC36BA0E34F850CAF6C0AF664A142 AC30D3EF7D61C7E85AF9963BC58143F92B5D64DA3F8C8F131B190E8333769BF9 0186F3840565E7C3CDF85409DF3E0134C97837AC17E7F988B62D82E068EFB478 5D8BDEA6D3A49A83886DCCEA341E9B4012EEA7944F69564B5F0EBB5360C067FC 70DE0B05B117732530099ABEC6F1FF955C9F269CB29422AD7A3F2BADFD97CCD6 3624B8E757ABCCEBE5B1F2620B814FA2A3DE2698BF0B06CE3AF4C560DF372AB1 A79B06195FEC5EC862560D6767FD20EC17481FF64AEE679B05EBAB7AC520F240 E2EF71614A3A93D4697747A6BAC42DF8DD4F2AE3CF46F1DA8F0A1A0372C6F83E 5857A31F725B28DE3AD77F1DDF563C4B3E8AA4CF5A1BE4B4D0C672D68ADA4FAB 5DD7F618B1222BE7727547825EFBCA21408C5F84E3E7781B5ECEB19CDA8EC4D2 120A75F8FBE6B0D64D79096233696BFA2AC17072EA6C9F52E42816C85AF34C21 215E72CB2995A8D7B363AAEF5CA4DA8F2567B40B01049191626A4D1CF8BF36EC BB17A076F501F8A81C0AB9C03E26CAB4684ED1672AB0284500CDDF5BACCB90E7 95EFFE1B505F201112DBFB902B72F566E0C6E1CDB8CA34EED9D5F6A831AAF04F E092089757CC61819159F7D3AA4123C21C6FC5F56A0D634D0DF2390D6F0CB442 D649D3F76762C4F3F49140D1BDB5E5E19462485F52DAA9CD4A32CEA7C6281EB6 979310262C103A833CF1B393E69BE17EECF31A8D36B6247E10FE60D71DAA0EAE 1B0CD177142080FA5687D01B87AA24ABC3CAE648B69A407E66BAD35866BEEE6B BD5A238C064A25664DA6A6F7407D0F5BCCF856D1419AB9DF15F1DE86F6072ED5 D31B088F7C1E4451B54041BEA187D705B3D99CFC9E2707D02F4C721B7ACDE325 5CA12E155C9C41F07E81764507E20F83EF6C45771D7EE187BAB92F32E1542F26 F0AE670C260111B76369299A5DAD5E4D11753CE4F2239692F7782E865F4D3739 E02E669AD27633AD9936DCD84192F14287790E822515A98E24A5373C30B5E4FF 5FE4EA0F868E0B1E18FA0B92C402082E216E49D3F598517B197D0D05C9974D86 B435DCE5A4276EDD80BC7EAABB279579DF6742AF516EB3125267D929CE8BE76F 42BCE1F2E4CDD1813257163C88B15E33C3B671A422A78C234FA2E075B9FA9483 F087CE013C9E099C3AD51EB826FF3B34D01186D4CE3B82A57A69AD94FC46B31D 347252804F6C4F5CA2C9BBE16D87C7A070B3DB13F27E7FA18B6D1028ED40265A 2AEC1181DE27937481B72C4CE6818C162250EC13D1FED060F7F5ABA1E3A2D69B 4E5750AFA81AB32C3C1C49BCDF2B2AC566E43458495C1051D2AAF24378427684 B6F226B7DC848F97A1B88EB2BEE17A3E9E9CC51D9A05435B93CA1752F2D5CF25 6101EC0A83496AF0832A7B71B8163B3830C989DF400AA71F370E61D7CAF9E20C 3B21A3A0775EAC753D0CD656FC15842D694DFC860079CA3FD4E9C75A824F5292 56B491252AB21099CA16D5DF449AA1DD44FD202924A95B2634B6AC0CC3397820 5427B54100B1947CC3E44AA1EA09B9D9A9560E5C645215C9CBEC05302F40168E CAD68257D5C5EDAE4FC01305470160FFA5A9F9467C4DBA2EADC60BB6225D9C36 24C9186EF3B136FB7CABF98AD55FA42B8976AAA5ABF67ABEE3A6F2A937DEF0A2 359122F3E9F7091571FECD771920510053E90470459DDD0C4B5855FD47D19666 640C755B7AACDB8A6BA568E04DBF112EA07129A941D4A6C2BFADF84428FB4DD0 FD0EB7D0FBD3BC15657FCBD4043BBFA3915C53AD8A5BE8492BD192D14C78E242 636CAD3C760D9FCBAFD2157E37A6EB7BB45145DDC5E298E7F639C8B27C1CDF8F 78D035F6DEF33A7556D14D1F75E4410501D370DAE50451FC90F4826FAAF02715 84805688C232D239AE85696AF3B644459B4BD94410871AA666042C11CDEDF020 EE0466F4FD735B7AB94E4C153F2640C32E9E3521D146CE29080AEF3B2BFDCB16 885FC7DDE62033CE401D65DBE2B977E2FC07AC2DE0A96034552D25912EEB6009 6A5436E1E520370A0CC54047A5CBDB888C84A9DA9E06C8B1FF14094FEBC224A7 6EA6736BF65F0922EF282F3745B43982FDB35604BC4363215E5D5B3F737BA615 7B5E1D1D6F256645432B6CF2B9B44D76605EA86B1C5D94372F215649F002A544 FFA277AAC8A5F25413026431BC892F125871674A177BE426AFE8986A3B18EAD7 AA800D5D7CB6532230CFFF984F022FE12D3D466479199C88C53490119121DA14 9C7BFAD59AB019CEBD7F77FD7703ECDBA90B15BBA561DEC2BE7DE6F582A3D803 51CADC90CABBB072DE17C117EBBEF90E592BA739808B2CD705C9E66894D5CFCB 7E8EA54059BB170AD00D19CFEBF7C8993BB1F0B1BED7BD4BEB79C4DBB0E4B6A6 E516FC92D57CD7942D236E72EE413256303898F57EEF40E66F95EE7484EA4767 A901CE079AC1D433741AF24487FB74FC58F8545713325BEEF0FABDDB6C50DF24 852BF04D247CFA5BE75EE797BFBF2BC48075CBF7CC00AD38CE90C43F898C6A85 70E70524F9F7AE089EE09BEE595F4E201DE81CE3FB54CFCBDF383D124AD0A3F9 15958A46754F038108BD7A61E03ADF620D07B0BC2049B3CF610AFEFA026796EB 130B5C45C0F9A1C40DF7FC093F1D8BD82C3D568F06376BB8488EA98D7E7B8B1D 25E46E2FA19C6ECB9CF4F231842480000A90CC422043B8EA7FF2D938A924F210 54DC43848814905D323C803C59603B9AED05B9760DF748EFB1A7A1071CCC95F1 C0DFD32353D4C6B55B1EEB445BDA8C867B5EB7B652D4C20EC662F27818495A0E DA5DF4A1E25783E9B7F23FA3687F296A261426C32115808EA7F5B266FDE74360 30382F970549F7BC63F4E02A5A1B8F12F3D6EFECE3423DF773F31A59D79EB427 73ABC9DD5B1A5F8F71BA9488C9D2DD211B4E26DDC5285992E62EF99A5FB3A5FC 64D36899C312BCE1CB7C2B0E2BF6971F8B43CFEB4C301E551D708F504E14A71A 5A84844BFC8A8FC424266554331231D60D3930C4375FFCDA28EA3C9D8802AFD1 1FFBB88DFDA43902984DC0719F90217B8FADECB32D48951A4FFFDFB8F5CF4472 87DCF4D6075F64AAABD55EF32527C296B8CA7CBD2F9F6875345F747E13FC8437 42144C46B02A65CE045E860F70F836364005FFF12BA3BAD27A8582549E697B0F F2A4DD9AD740E8CE533A0528C013A3BF8A415F51E380D3AC9EF4B833D9ADDA38 E0B3406B9614FC0D356FB82F9989E32FC518B674DBBDFC9B0F0DBD32E5A8917B FCAE8E85112E31C6DFD8E9E4243D64D9CEE445EBC7F8251E3DB40E8C43DBE62A 644039EDE9382C4FE521C75690148274E0CF0F7B55B71CA1EE451BBF176A08D3 C975E227AA9281686D3DA1F50B8E4C288F1F476D6F12356421AFF086687EB18D C29B334644E0AD43AD08CD79BDA2ADDE7965F6E76A1E5F398FBDFEE1B6CAC914 D1F879ECE6CFABC8D044FE27505269A71AF6F15AAF0CA84C22B2EDB0A3034370 7103EE834ABFC1A17F2212E2ECCA38D4D0C83350D96566A6B0F39FAB2267B770 E61A67FECE25FFCC5CBABA815C35687533A2896E643711A893842D40BFEEA8BD 3911A280726A159358C7A5B25E2907D445AA4B08E97B5BD3466C6897065446F7 65344E0FCFA66182DCB872B6BE7EBD2A2284A2C3E3B1DA10F5A55B3207708704 47C61F2EBB8C69F042F7A5179B55075FCF7B47C540603DCBE9F97A4F2D6F81AC 3A0607D670B46976F47DD878F7B72C32A371B0547403EB63FC9EBF1B518D1CDE A0FD547418344FE48A782E29E07A1AE9600074CB33AC1F4B82C652B101F0BCA0 E040F776F1EE9F81371ACB9AF0819EEEEFF1853D6A0D3DF1483FFF97794144F0 34FDD5689385832C0E025CCD1672FBD40A3D1394CB31E0B32C249A45664F72F5 6E8FB7BFBA03EC2B1D21E9574454DDDBBA5EDCCDD8577624BBA178289A60ADB2 6FB3C8234DCBE922579864A4B1215BF65B95E7D2B9F4F373FC4F3D921183A3C7 69172BA99467E3FE347A072B05B4A5CD9F0D1C251C4015883FEBDB48EAFDB54E 29670B9C1CE5CDE4850389E5927DEC9B8A936EC8DDB0043B58188D9A272A1717 671E1528D06115D8DDD51AE79D86E0770703FFFD6DEDA4861DE9ECBD206983F4 8AF00C07A9C1EF0EC64E0F4ECC85F78DC9DFEC99DD18733EFE551E190BBA064F 59E65635C95F001EEBC9D0A7F4FF73AA77824324205888B69993DAF65893C3D2 397259775A8E3A0EFE8FEB4B11EC70BA36F8988EE6A04AA67F5920B67B89B59C 214B41D3F0560415104AD5D9C298C2844C6859DE9089F724B2AB6A8C3CD3725A E877738EC17710AFAE5BB4043A74424EF2F10A89A9116CF7E678C1E96775113F 192F2F02AF60753D7E93A6146EBF1536E940DEBAE9B62D172135E7BBA00CDCF9 23491C8188EB1E10D764286D326C95DCBC00CDDF30AF8B6724527DF13EC346FE F7D19666CB73C1C9E4CFA2D1D1C88475C08499E25C52104CCC31DB85DE0FB2D6 4EC4BD94C20E6A8A991853A87B7A1A275E8BA79E95D5DBA6A82E164587ADAA8D 3BD474FB2E8671A9641932A6596446C64A78FFF7E21823E62B097A5F54B78C79 4B35A4B2D14BC416C6F3E76DAB203E972B62257247F2764206078D6875C1A206 9AB89AA8BC4F77BFE6BC1C02A684A8EC5FA35F752244C4D9CE0055BD7915DA68 D6A243DFC23C2B4E35DDC834F9873FC8C0A2F62EF50BEA05036D77EFCFABC99C ECA3EAABD32E0072FF928A18785F0D69171A9F7D1A23EA4ECB36BAEA9764402D FDEEEF83D825EFD96C0D19BDBADBF93EFEBB5350F5C63785D7DD81FDEDE68E6F 833A57F97EBA6328FE6793C13152A2C9240634DA911D1E25793659AD57783599 7F24376AF133A3DF054595CD1FF2973FE1680668E93925DCB1019B6B6C6E533F 5F59C8FA067828B380DCE3A64023C3FCBDFC242BA22D4A98FE4CE90B86CE1D22 E82A80F8DDAE673AEE3CAA74124C075C16E273AE62D837ADDF7A9058B4EA67D5 6BE5B16E0D1BD91AD79EF5C05600455FF0E5BD8D482C5E4B0F0306D2AC978DEB 177D142606D51DC989AF883C2FADFB9FBC783C1A4F902F6ABC19E123D7F9A00C 08335C025AB95FD3527AF85B465621FA090FE2E2D4848CED10464475B331B36A 326D0DE36343B394E90833F95C309E9AC21190B15B921528D955AC3FA1A80DB9 C2F6A872E0F28CC0684AE48F062BD4D6A7220D8FF643916603889907B23F00D4 F60DD2FC38A53AC00C7C5671B10FBDD623940EDA1C95B361DC5322C4FD569FE7 A69446D08BDE9284EFD255A0D0BE95CD461B0B5EA8252268F4F39BDDDB85324D D53BF9FB787CE3C89D959717F2E1345A17389A12F7A6C4B1C6FCE33027C762A9 F0E8FE7CE709A953518065C2591D893654534C243743A1A5F877217AD0C2EE75 8916E2D42D68D6569E5B99429162363D2F1F33E399D292593BC89BA1B213CFE5 EA5A0B2C379A04DFB34A93EFB62C88E8BF9514609E51406291D140DB8C79D87F 48F9BCCA839A3969B4283FBCD3A8F240A7D52EE8189D842E32776A3BF9EE6EEC 8D2351929C6AC4621DC21FE6039036479F0FDD5FD5C4D2D7D04D52E8FA60492A C3CB6E06F3A1CFC388805E3EB35BAB5C491373789EEB252F592C04878F91312B 3CA184C457B59AC91DA127CDB4D9D15B2716BA00CB6A9B316BEF3F08BC7DB122 5D8F183E37EB8D6C383013EBE4616CFE172AA3FE3B60583E8C3DEAED3BB2B2CD FA15731D11B79AE8180916F0CF6BDC9B42154C6C92FADB067D09A4235B3C6854 F588F5F68B56D05007527275355CA93424D38B0B311BEB3A1AF27A3C413336CA 879133411F2C8C484DC22207CF0B474AE8ED5F5AC84BC69692A328ACA0CE3AA7 570EC304140C4E1569B7E40CE7B2F6B7AF4E1769883A2E943B3DB243955EFE02 DD56929BBB37AEA3C271A2AC3ECF5F79C924EC988AFC7FB812FDE8E3B7314588 1A645474A50D492D5554BBFF4B144A707C337976D6CA16FA4A3DD02B742C2FB2 F9A7AD756CCC62DC4408FAA93A74F3ECF15CC95E4C394A54BAC410D605E9F7D8 7A8E18E1838F4BD242BC8CF7850C231A071C7A36A993D522FAC29A57BEC987BE 6AA65433E24EDE72FC79DD64A0A893E6BFE38B7863D527FC6C93D1F32584C1BA 41063C17EBD2EBF5EC1E5A6F5745CF5C68A46CDAA52743B896891ACBB4470644 5DB8AA0D797340CC50987AAF9FCB62E099965947F5F0F3A9B36B1B395E747EB7 B2CFD7E622EC2211DB621C9885492C6DC81931448AF15B2E4E13AF7300BFAA59 FD3624CB7334E2B69835CE3E50D7759276A5F53F660D68D98159CA2663944F53 A77789839ED39269CEC94F981BC0CF1310FBE0C75EF349A6D4F279ABDCA382CB 07A4A5DC971FF5054B1A710D9EE02EC8CF0936387C5C2B825A4C61013524F6C1 7BA24FFFE2DEF10D3E5A5A565FBECB88C725BF065AF2D50A47BB7EB53F363429 B33899B3EF7C971AE4E1FF49959C58426C99A6E8D040BBC1A37AC300FCBB1C65 3D4E10F9E8BE9D6D346CC58C731C170D51DA7DA650BAC639B4740D7123CC4398 EE325D1CAA9AECB0D7B16CCE442EAFC1CC2260135D9960B1B3BBD7C03CF10D69 DAC1A510391532F337564BECBC86FDC69A6DEAA787FA4E224FE21B536C6F7541 57683C4187DA419ABBB0164314769F2BD50C9330E871912AE6254DA6E8A8E59B ADAB0D1C18C9CD8DAA593CD3AF2B4EB2EDF697F4CCDB751ADFAFCD061ACC8503 68E59A7C8DF2AD01EBC93B2F4FF94FC2C8D654B8E469701E21FA16A77581C9EA 72D06DCD1BBF15622C58B02EE067E24F344FF10A91FC26D73C8C40E77B1C8C77 F42BB868914293839DAFFBA586000BBEEE720A4AC5500872E77BAFCFBDBD4816 AA8002E440D1A63ECD12CC9B60050BA0F3D5D015A946FF36F1B2E95CE6CB79F3 E4AE796FE846B4AC8D52D71C94031466F79378B7E5E12D2898FC16CA42690ABF 71754080AE2E14FCC357A2C0AFF6FA561FABE5FEB09B24574C8E1524127F7121 0DD43DE11122D28064B359436E0479E422C453951FE286AAB3B5DC10AE6372CE D3C75172D3A626F1EF7AC0F290B375AC9784265BB9546605E80E68A65076EBF7 BB068C75BDB40568754FD6D9C4A465D683043930AD1A8E95782D8C3BBD09FCD3 DDCFF2CABC6FF7D91DF2522CA1CFB011022B5754F605285A3F5223EF701AFD6E F319B4DFFD76F7D7E1EEF5F443382FD765517F43C36FD3C8C765A80CC4B77C05 86FB437C6029CA061F548964BF3861A1E59CEB94744CACEEBC6F9F1E27AA63E0 FC8203F851BF811A181A7B2724126BC888AA447F5FE1A4B5CC0731EA62028F24 FC9EF95CFF05FF5BADC030E897A2FAB00918931DFD200645B6A7E4B3D3103731 09AE5274ED3EA82B5284D1754A1BE271A595A114D41758A23996341F81B46564 D9F03AFCFE020CB1D27E8470BE2BF6DE578E64C2B2D3EAE1A4423A10DBAA5393 AAD88D9E722353E1264152941A09AB5A195ADE2B23B7DFF56255073EF506B052 60DFBE24CBCBB345256BD6DCF8D7E6853B9DBB2190F1E15381B037D60F073CF1 B03619E61B8570C5C70CC6488F75C7BA1B3A986BAA2DDFF93CC724535305398D 34BD1775FFA887808A31EB67AF9C88E546B35D2B2929DCA83EAC90506CE5A756 2898DF3B3D3611E659CF915A7DAFA010BE4D290A85872D6C100E97DFD65048F2 65E513FB6959EE55876998AEFA44F718B77CBB169906D7E7948D3AE141749B47 A7EDB919A2C42FD030689CE11A3264F185500C5834F4EADD4C4FCE1D0E6914CE 308F3AE8AB1D17370405FDC524E7BD7CD0A688B8F58EC799C99D985070DB5C30 FDC4A6ACEE9F6AEB9829016991248E4DD1DD5D3C28E5802AB40161218258C9F5 A417D88BEBC3D6735E77675600326098A1237EBE9DA270D8723775297851915B 31BB18AADE95A951194BB9583D2414FFD7DFC0F87BC43B7676E7245081416418 1E3DB7971EDBAC5524F9BB6BF46E2BC667440CD96C03E8B5AAB8C39E6C41B9F9 C2A726CA2AF5FF667CF87981FCFF693AA67598D2FEBCEF2EE7942BE4DAA67F0E BCBAA2C88EBBC609AAE83FDCD1975435B08197BF96B1E2FF06C3CD01188DF859 E3AF18588C73DAAA8D608C402E1A4155DDE021A1D21048CC452D6D8252571F41 447293D338080C8E0570D9BFB50961931CC34A6D8DA77D166241D4EC5B3BE700 C35E2CEAE64648455EBAB4924823AE3F6B3D979FEC256E3DF4B2816619AC5437 53962498A1E8843B61BDF379ED3B65F577DDD6D86F87FFE9EC04DD1FF4048DB2 323473A16AA8D4AFA0761C7CD0DD2236C3C71C166734E748269D162C79332803 6BA1560CF308E2CD5CFF0CEF0463DFAC35C4552C686BC1134DF842CEE92F71FB FAC19445F44289B150ACC642A5FBDF0B32BD22FEB1EBF20A803EF0DA9E1037B2 7F4F204DD564C1B4677731F884BEE40C8F1C4F1125EEBE77C37DC0395C688672 FB7D0F9B72B0B0187B8F59957352228E8A435BCB7E0DEA294C3BEE460BD9603C 2F7285D591D6BE057C863C00787D1B635B3CF3FE168E5151736D5F6D17300348 F2259E1A563FFA62B2FD0A242B23E0DD329913D8CB4F7CBC612A92C7F5E52E68 4777E29AFEE15510CEA53210B4B5156C028831BECE9A5CE9C12F17B80B2B2157 26E900D3C6F703BAD307528DF5319D3EC2FC5D366E81D98D35FB12CA61D1C0AE 0CF3D4D9F5DF6EC30D844E11D129BC43E5146708269C13A3ECA23E9B13F5F428 415168A5F67DDE75F9305253FB352C93FB83F971ACEFED74FE248F1913E411AB 468741E6A26B8FF38932B0A98FB1CF9F7B0A5559401D683081C06FD898EC18B8 F56F0156EC44583C608A119F704AA4EEFB2790C469D2F3A047389EEE9F2C1A59 2148F2B41DE485B2FD093493DCCD901783B2EB9DE725178CC36C0CB664467362 8B5929B7ED09BB074C0F81C313B0D0ABDADEF5AE98F0BBE34F917FD6F2067BBC 9DF870F3AA602E86EB513B2B0DAE2C34422D9E543ABB81CF0E358E8610CE0160 62B564DA18AAF1897FAC0A4DDA490B293F609345B908C9EC0847832440F558E4 A036611D06461ADECED1E7F4A2A6A143BB99CF0CDAE89652C852B13FA22431CE 22CA3BDE41C6CD866141E0F0909AEC01CA4E701FB70ED5F1CCBF4A9FC1E6CD6A D5B730D659FD5950D8FC50DF33394AFA81A7B24F1A13B76D81C105CF0DE70C1B CAB8A7248517FC14D9AC7341D50486AB5F8E953FEE974B755E9573CE48028B7E 107AE340B8794B75F472B52EAFCF334887367FC173E97C657DAFA4742BE311A0 49E1816B03AC483FBF0554516E8AF5D19DAB8C02D894DCD35D647CFCE2E697B7 F463A3EDB416792EB77D01CEA50E0DAD5BB21F68F2BC2509B2C5880F02D12D03 000B35E6DEB1C9029DA1892AC1680625826C1A275723A13E6E7921D1C98E06F8 B897355AF54A5C87502F422EBF7FE6B2E201469729DDABEE319CD66F62D68CB3 993F5C617DCE70686E3AF0773C8B9DD0042C5E99F804B8EB53E6303ECDF9A96E CF986CAA958ADAE5ACAC6F4A51B39CE00ED02F312F3E423DE2EAD15C65582210 7864CEE22369EDDB009BF0B49E5C81529059BF6C93B18206A90482F337CF8404 E30A2B2DC94041262E82B30A51F98B8AA6A406D8C3E04D9F3CAF75BAF8EDBAB2 89F8E432BC02B9B3F1F20A2865825A20647CE05F0EC031722721ADFB4F329353 D2ADB6B534A809744E7D0EF020475D54DF4363ACFACA294CE5E1F5DE9BF27230 F053F76EF863BC3AA190320A69B52BBB370EDB2E7599A44BAC84C4010D7698C7 5924DF1140EB224D1557CD27E6DBBA5CD3290CB5F3D14273053019D79D94FE42 67209782671DB15BBA573F73D869530F84B3DC341EFC04558AB806F7B7EA805A 414ED05F44578AD9169DCDFEC1F599001CD897771AB345D41B677D86939CF215 971269D453134F634866B9C2BC39D3F0221B18B314B3824AF9CA4010B40719CD 12496E1E980E6A5BB731A1CD568BD612F9983627DE7F1A3959342F759267FADA 435A53EA2014E3BE1A3B782893E16317355CC01AA829D8F8C234E85D260E9F22 05474A0277344886811CA25B390009C8EEF6B32AF3D3EA2F81889A403EAD62BD 922409A7811D81BA27AC9832B4F4CD1E68D5A1EAFC834B5B458DDAAB7E57D159 7B1283F1550015CDEA61687AE83245E5DF5A885E8161107C634C8B2B32A32AA2 B843A43BB45ACB9349313AAD7B0D109F26C9004866CE8570A81F3BEA951174EB 5AC672D3DB3CA833251A325DF4BFD44515B009E216DDED2E8EC3C2D112202B19 BE833ED0F169E04D38FBB53116AAF697CB9DE447AD4316BCFC5B2E7C53BF6658 6C693D96294AC19B324A81764C798409B2122FD69A43A1546B15B35B32A52CDF 89398A5C26F1E2E5CB38D585095DCBD33FEBA204FEA41CC809A47ECAAB00A470 E3E91D806543687511526C875A293E44D8D65847CFD3D5808114B8B8110FC0DD 5CD26664AED52CC6540A2B3B6DC3AA863144BBAE789D29B90C74F35F745EDDA8 4B6BCE0B20F4AE218B50C9B3520E74EE6AE50CB6278D32869C0C91E6DF15400F 353F928F00909B26467A3BBE544AC757B5592FF88D8EE4F697557A6EAD4D5950 02CE3796EC70E4D25ADC6711A191266ACC16BAF4E539B51E5C3163DF5147011C 8D3FD77F1D3BD529F4F7D05CF5D29C8048D980D51B060BFDFE282203594DC959 84A38E53A471AF54F1F6A5A452BFB1BEB88C2A0F8D2BE11A4A54A017FAC3A133 EF23E6DCDF68CC39CB48DA6611E0ED9DB52B650D5C9D11503B3A867DA0A340CA 85BAD57A29C9EB6790328B3FB2A86CF5AA71F1CC42682C1095C476DCAD9EFCD3 2615EF93F0D8AEC79D8FAAB36AF872FC97970C6A79780781D94F154E72F22A43 E38360F5B4B6DDA4003F1C8A276BCAA375C1BA49505380BC687476EA040612E9 B96580C168011D1ED14F1B077E54B8ED9F821BE9EBF60DE64D4B07E500F4AC8D 62E7610CAB654BCB7BEA38CC4786D5617DD8F6B2CCE52D685E9C3CD8E993DBDF A9D53962C60256624B57B88566CAF51CC4B9621E855E863D32807717A5B104F7 66580C0A4F19A02247220ADDBEABD60EB9099B5CA7327F8B92FA406191EC3BD6 056D2428677677B32ABBBC5E587DD96FEB90606E7F20580C04EE344A325F7F63 BF1FBB46B92CDE3C52068391F95EB921869714F91BE7CDA2CD6FFA9D6707A92C 8DB6A384A0F3210FBF4DAF8562811C3B5D606443FD1F78F18B90093D532933A8 F46303FD5E4BC6DCFEC1C08E4F0F8E9117A0FB9AEB563D9930BF22784F134ABA 106D2D2EAA2C08FF1FB93FA7A8262B604B40721921864456CC9965F00E825D7A F62076B788C1A3B840C3671E3A77003950CFB7811FADE001D96B8A700180CEA6 918DA71821470123459F8F9C542DC95432ACF24378427684B6F21D1C13CBD136 901E035C0F52785FC50BFE5CDF6901473CA7B7340EA082DC3DF82ED576069A68 FC302F98D3774C2ACFB03C296318408477C6E3DE595FA0FEC12D562CF0AAD7E2 C6CF46939C873F6966A7039C9272846264D62401AD2A20DC4175D29D4BF5BAC4 F1BABA53EF0A01DB86774E3BE4E5B45B22B27DC93FE820DC8410092BB607AD0B 1BD7E1EE03B2159331E42584895022BB71DAD138A98C8C0B771EEA42F170A2F7 611649ADFAA7E7F876F01A346519B3B7F31044891C9A93C19AF284434F64985F 93A16DAF98DB46AB2ED7063401248E2105A638AA8D9F6B1C9B25F05029F80E80 3470E33D28C011B700FB8ECFDA19C29847C7CA0E04AFDE8019550BDC32383F97 FC1632FD145150D45053BA0C9E2299F614F20CA5068D783E0A2A54DBF4E18E6F 14548DF6A3508AD778F1E16E581A2730E3448E45AB19634A46E1032BB4AA13D6 2A0720072B0CE50DE24FD0409F8A03FAD503A5E5CDBDB410EA45FF4A2A8D917E FF7B1A6D181C36357CFBAAE7C3AFBAC53C02CF47384EBEBBEAC93DFFBBB189D6 2B74734D95C94AA8ACBE2DD21699C04C3C6480A89FF0D2A4E37D3357B160EB97 A25D8EFBFFC076E1DA314A9875E4C46CE44AF4F34768A7D807DD622E5DEE0441 3F5159656105DCE8B83F76D5CA8404CD7D7826B2DA67EBE78F5D270EA5803BFA C5C4C425E0C514CBA06A98FC648B415EA3CCDE67416525D693615FC322F564EA 3FD6C2207B1A4295777914139A351BDD0D2C0FE2BBBB60EDA9205DF69AC2B5ED FD904FAF5492CF5B8ADB17F849E2A97DB542618B8D56F4371898105F7CC571D2 444D125EB3D76BFA73B342B56A6178D731B927C36634AD91B4EDACD1AF669374 172FC32EBD9BD57F75C038DD317AA7EFC22640B0CF84C9D0F0453129773E134D EE70AF50E1DF224AE3D9AB927D4014DC2350C94868524F97D75A63FE6060065E FC65BD589F28BDCF1668C7D10AEE9EAE2BD17FBC80CFAA2EE66EA7CA3186BDCF 00AA2757F356DC68B3D661ADB0EBD0CA730EE8A8BF2D6E580D9310393130B08E 905D1B6EDAFACA0774426BA78C4821E02BBD9E00D91A8358D3568524AB4B6457 8D72595CE6AF977420E36D7AC6833F547805DF85FD562020B6A791AEEACA2D7B 56AF0603CF67C28FD24A2521E3EAC691E54A8FA99BA4A259FA2FA548D3FACDF1 8A63B0804D806059A3ECEE5920BBAFFFDBA6B0E9EA87FD56075A7A6425DF0001 54784F893C21BB67B14112F6088FBB6C7F5024EA815FA7DB51BFCBCA1BAB46F5 7423B5B1BC9FB59ED65292DC3B092CA0DE33B6E262D034588448849592715CF8 18C3D47913EA2C4A9D42A1F357F4E5779AD1DA60C20241459BB257C8B00AF94C B978016580ED99AC7981FC489BE0674CB4ECEE302D74BEE56C0BE244863F2023 B665066CE9E0F9450BC00481E1E38A4A195ACA64D65D7F223434D3DCF6DA23A4 21A22E6165EF0CC91CCD8158362DA5883F3CD19DC4B50ECE41D18236A90452DF B8B14550DA78BD29A8DB4DA3649EB77E4FAD7F555D9BCAFEAE2FC1A0A96278A7 F8DA98EA2BFF3BA67B77EDB869F5F09C891D3DF1872005383F8B5BF4939F00CA 6557FE69EB9AF64273C276548B8BA2E89BA424E842FE1EDD8C2BF6C26BEF3650 DAD323BAAC9D90A0C605806F6BAE14EC877DA8A1BA4C17BF640D2A565760955C 10DAD70A76292F9898BD96F52C0122BB7C9CFE3A14F7985794A73BCEAC340436 749D57F9A04784F0231377E90C18F12B4C2EA0AB6C481C9635ACE05D7F42A13F 8A9C996237AC88F9877F4E6233FCC321D27D0AE825A7A2FCE90BD19A2AA7558C 8893D8BB331E315ED96C1D0DDC01C7B7BD6B698ECBEFA942B3B0FD286982C8A0 D33C46BFAD337C69B5681BE101D97E2B2F4CD637A11B75B240B44467494625AD 36321D4404E50642BD8F6013B25ECA779A156B5E802C5406EF85D108DBFAE81F E1487CC6154DF9BC55AD556BD3DC7A6C9CD79DE3910E7E5A31B7B7CD77212D2D 5B566888C86B3276F34DD2052E49ADC414B109416D8D6AA9EC1DA482CEBFC40D 04407622BC1DDC10962018196E2BDC5694E938DD2D4C368276C7DDC9BFBE8B0B 7C123002D70A5DEAAE5C5D0EC95F499907B7F6C69A255C939592A3C6930B1B6A 138BC0CF16170F9C6460F5507305481261FFA416D60470FEE17078D937A0A83B 365FDEB80235785A6FF4D5F1D2E7A0B24B4565C40242DF6083F01B67BC40979F 9B86E08547A6118E3214670FF6D2AD83B1A668E1527CCA3E5FEEC57630210511 1438E71E6A2373646158953E1017CCD931ECB1DBD3FF31BE4CAFE034084A8938 DF00374B92E96B8FC6C6E07EBB7F2657971DCF58283B5F8B04EF3C5B9D4FF3A7 E1880F7A368BE8BC500139E12ADFCF03BE01FD7B483D2EE78ED4332891A35958 5A41C18CB81B3BE7C3C5C9E2B3DE8613B4413D66D6E4DF9D90CADFBD056E6334 3F66238B1E0029A2DE2D5C2787EDBEC3E41090D0291CBFA5E47BBED1A72436B6 BF76DA5A1BA723425D27D70B62CC16B0FF5B2E5D67EE6B338119C6045977231D 86C87652CFF8C0D513E96E76D4CE24606BD2D4180D0B7302C6966621BA6A514D A276E800E5E30AC50FDE86697B69D7D3134389F94B1E27491E24A688EBB44230 CC4F32DA9A86F4217FAC6ABF3636ED20B50A986089F87C4737E971DF38DA8DF8 D59B56CE717B8DB9206A4A3CAC91A4F77082A2D935E2795FABC02A684986CC95 D6B94A0A9C25F3B1F6A2F1CE786499388001070C332BB06FBEC538D0795CBE37 C6F61502B38945294A9D161EB8951904F70F817AFCAED24EC845706AF3EFDEF4 3C2A4F913F746F0C278BAAF92FC827472FB1EB6F8438D51256EC37ACADA6D668 14E842239FDC6278DE5EE20471A421569AB09A9740013734F6F296A23366EA5C 58AE75A5EAFDDF0AD16A1A0175292EA75C23B77B10C07A7A2801E8F2815F44B8 91445E2FDC2242B997234B927C0E519EAAB69B2D28FDB91CF170CB14B85C9EF5 53BC442C504B8586773B18D7A20CC9A89BEF76A3423467710AD98FE77BEE66AB 7525E229711752489411F87BA421C4650DF63136017CF2D70DF373B9EE620BF4 91ABF922B4CB80A6058E98D882A3B48223AEF3989665D82BA0452FBF934D7430 F4461146DD5EFD0CC8E71D2F0BA5F7F7F626F1B4E41B96A2E2C6B153BA55F194 E93D02D3D24DFEABF7302670BD8C91B017337FB313B284A62FEF5C327A7CCCE5 56ECEA6B9F26E45E680089615B0976F63F328BEE5910D89382974E41FAC0C936 1A72CB0AF38E80E5034C4D99D8F1EE3996AE887F4CD847520D790A1816F2AA12 6EDB511AB5B928C9275DB4E048E9D503259CCB578076DFFDF339D434C7FF08A3 7758D8C17B15E1EAA2C1BA25F89E7EFAB9CFED6500E2461C4E9B2F9A8477DCF8 99ADAB51458B3F4FE7DD5D7737FE9B9218CE655BCC947D9B8AA3F8CD9E1764D5 7EBBDABFCBA83923B4BDB5FA4DA6B5BE93EB51941F90D83AF3EBF3EE2860CBFD 047F59FBBEDFAE49D3FE7B47F07C64A2D1BBC1C62FF6919E752E791841578B9C 58C5DCF3E00F6F00A8F2905180EF6A773C2A79F5FB805E3E4EC9BFBDE24BAB02 85E100E2DE92B4F2FE60B358894E15F46CFCE3FDA8EAD7408EADEA6872173A87 C298F154CD2476D67D70C028C1978137E07543DF786EF8A25CBF1DA40C40CA14 C1FD6B86286155A9D75B2BC27C3B6DE8CC2EA13530739FA07303512EC19E1922 C8FA015F8D99E4822BD87E2DA8640A68B2EE68DCF7F9A8BE55F479F0D816BCD4 C996826FEAF0DB7C42CACB27A24236E339B14759B127A600BE050E645B48599A 55C7BDC7AACA6CBAD7A81D01F5CE8FFCBC3D7B83D5987E5D78DBD3A835093BB0 957061A877C14290B2DC4D8AA266C2D35D5FFBE518D5124D035277717B5960D0 E1B08DCCE83FA2BA229C7A1F820A2A9B03CA2CA374CDB4BB471F9743CB6258F0 7C3118FA62FBACB204A73164B655B1BADE0A7B3D41E7E91D157C1DB469A52FCF C692985E9A0133E7D9D1A1949427236224167D98AF350A621CF9F98B01CF8C30 A6DF2B7EEAFB346A9DF4B7B0F0A79F22A4FA5505B3EA2455236A484C753508EB 557F00DE3E2D85167E3FAEDDE9F45C263E4FD9DEBC95E7D7FE66B6CF1B210D13 D93576EAE05CE3712CB4F35829D33149D3E5F4BC2A4B683C700389E106E60F83 DD2F5F61EF8A03B0C0040EE0BA64BDE997D25181EEA736597FE1941D40C1B461 A28E8D0145112F78CAEFF3F9F956C47F94ECB0D64FCE77E5565A9F95626A6249 6845E973DC4E35E65DB88CF114E0E676EC5125EF4BF9A26E27574A334B68FD6B 5F275A42193556F65EFB32CF678B3621EC00DD51C96CC29EE080D3AC9EF4B833 D9C4E431B6E9A6478B2DE4546E32179B72B46D10E15413E0E0E1F18FF7A135E0 2EEC23A2B6FE562D0699CD60E1AF6FC1263D0DFDDD2C3CA9B9940323F50DA33E 5E8E7E0C4BA296E658C53FCCF80A82D9C22BB7FB9396D08AFDC8CE63585089D8 6A5FCECABFF8708D0F287FC7840C9990658CF196538D341AF8FDE16B0B0601DD 4DF2072A726E8E77AC10C7D986EDFA7D76603A5AA07A4FDE5A15E6DD24AFD02C 5567F79E6455CC83158DFBB6E768AA63DCBA40EF7776878E7065053152FB5266 764258A44FA4D5A948AB04830EF0E1D889C2F52E39B3D8EA760E1D8E4B3CCF1F 495BCE62282C73A2A103D1A5F7721916ECDEE3BA076AEB0CC075BE93C06DD463 AFA108188F5424C3E7556C60FED577ADB1FF223C7B4180878E9F8F59D09B5688 660785779B270350A01197D24AEC415384AC747F8A888915BB826F61EA721726 54B96CF2EA1E62FAF2A006BF66577714CB6D44D8F9A1F919CA21B853228CF7AC 4A683E2C78DB7ADF9CA9241895C2757BAA10D1A634CAAD8AB39C614B1FFE71F2 9B61B44EEC4A3630E968A3A67F7409584DBE36C00643AB412F75AA791016B3A2 E20293DB6AEDF4CA8AE379497DD62B16724FBF71C66D20FE6C39D18F2334B7AE B3B2C5BD8AAF80F71EBB4D3AAC91DBD140340AE9F43B6F70223D2777B7731388 6C193A70A78315A3C827EBFA77EF850F3602EF23C1DDC69EC793E98EEF25493D B95F657B7196397C2C25F985F3363C0F4075F2F89D8C21ED8940753EF9596639 A5AD4518AF08AF816162F919DAA138AA1A929D96D3FB3336CBAC2573D46899B1 0159AF58D2E825DF2D3BDAFC3FBFC78AE193261C084DFDACB30B9F070CA039BE ECF271AAD04F107F1BECFA0C7D8432F3EA2B82C0E589CC2FBB5994AAFB265B31 26BBDC706D22EBF0091214706E18BDD5F896CDFF0F8C8B61F5044D02A856587B 6EFADAA21BE2F77698298A4BE0FD15073F090B429F86D659B429F74BA3FF309C BECC8A39B1CEDC48DB41FFC0964A1F31B309A14CB4BDF900B0803E6A2FD92BE1 FAA0002E980FC58FA1051AB8F4DA7E84E8E56C748708D77A19A134C741E0B59B EF99B50F0659A3317A8F42C8142A84059C0803901F4AE5C7DDD7B58EB429DBFC 78819C46E305B06B0D86AFA54D9E3B757272E75F151EC15C3F6C8ACCB2C552B2 04C9559B6B4621712BDEEDB62DF3C7902A3E9E47215E73F672E817C44F74A45F 28741E9A49C5275E66B18E5AC7A008EF07DE5CA81588193980518303048765D4 31739E325D84BE01266C9E3E12C53A2C68BB782B5282485B93FC9412643B0753 55DE76EA7F481F6EF593B845B6D38E8B91B6A4374CB93AD11D6676206B8B658D 120C15BF7D37B0839EAAD68CC14FC1E6840335379DC3D0C0D0C781ACDAAA35CA 121A357D4D547CA55A44E5448F0842C6FE55AF3F1BAEA941634A73521F3B2A72 0D5AD0844846A3B8D611C97E26B3ADA1D4543704EB142035D46666BFD54EFC81 9ED6775040D920780D62F1391FA97645A33228095E21E315D118463C04D9910D 752A6E629DA1F678C9A5F070A70B0126C88E13800193E6409795863A784DA9EA 2FDDE066366132D40C7BECBE1C6EBB77CEF25808C1D124640813D6613EF4B185 223B20784078CB7E1AE28682EA545BCC0F88A2D2630D8438802FCBAA99F26455 7F70A9D7C96EF0D06C71720EB6B582A8D69C0E0C4F9B7CD47F2D3BB5F6CA58DF 874068379DAB8BC2F5EC2AEFB81D82DBF4509CCD2A83235DFD4BBBDBC6B5AA6A 1DE5A0DEB874CDB15707C5D9BF629F7760ECA769CCD076BD8B9CB52250E768D4 D7BC52D806B8E09158194624BC19E2B5D31BA651CBB7D286C47E6EC2EECFCC7A 303BD9BD24CB343FC7E6C72759F15F6B9444089A4425ED61F3A0886D01642C80 F8E10362A198EF2B79056AB11E1A06595803E02A8115FCE5D4A8967A03173236 E6B2BFDFA47D71DEDAD84934B978767DF53EF62B8A3072551241544053BE315D 653626C0CE457CC2F0F89BF63DBF3246AA36E54966EED126F9490C8416AF6C57 1703185981A39885193A84B7DD5CB8DDA976CA6ABE921F1AEB659C973D52B28D D2EEA8B398855E0ADF5AB5415C235DD232711AC0A34CC15E9E0D28B13482BE0A FD98973D22CEB4575404E21F2B123C52637266221AA4BC5A6EBDDF83F1F802CF 2C518053DBB2178FED466EB394D11562CDF6882BF676CE82F9CE90056936C769 76B166B82E720076CF3C81CE1FC9A0A1401F1D09CDA51149A0D0ABA415F7F1B7 FED5659A9E30BDE859A9A8C185E42699DB158E212641452B2BF56B79FDF64F64 ABBE8B2928167724635A4B9BF30AD0B6AF2C3E9CDB9B25A538481555C4D5813C DC08FD944590B92C89EDC66A78FCB96BDEE007D08F54E629F687BDD3E1D05C7B 2A509FF20BA4A54A6305C761D8A6922C4457225DE031AC157F801C031B8DF1DB D994591975BBC7374010C785E9ED5A8CB099DBDECD3CBCDB11ACE081C0E87F42 291125D34BD17DACC36BB8AAF9DEAE09A506934AAF2E837276432C5BE97FA35D CF80C1E5094E980F27DA645160CD3A72851E8F4E89FF05F6644860BC54AA2A3D A6F94C1FE5E61C507E06FF7C989C6807588D544E04A7C068AE027AAB97357F56 839444875207DB49440236F70D01C50E4DF231261242EDE49AD00EE3E1670E95 2ED3AAFA37F66107963D1A27485343E894F254E32DFE1A015404C4DA39E4277C E17E54801218BEFA5132E78B51CF3372FFDF0EDFC849349A8A95F2F62F592E8B 287785F93164CC48E1B46C7061D92899475A6B0B7DBC48B3E3964EA48AF77DB0 C0A42DF9D424B716D85A4C6567D499EFB0AE6D690A6861CEFCFE9F666D9657DA AAB32294A15856811D4A1734223EEC9B6955C06A9B21C04C2FB4B4B28E400F89 D91CE2199E1D3DDE1B98D78FC49BDD7082BBF38145F1DACAB2F4E637BEDE6832 DE7E9A5C6AE026BCD932B80CFCDDD7D107EC1A0AA72272F6196BCD4359F292A4 7A395158CA19D5789AD659CA1A130FD5805E1F665E0CB92DAC12C183073EE11A C18C943E85A5E0E90956E0E8C20D66ADC0AC4123508BFEA2291E05A5AF0705B5 CEFA3E6E2A6B21172C3F5C15CF65817532EE7370B833D2D7A5780D58EFE7F3CE 2FF33460B3DD79B814C50E33E7D49C1761B6457AC07EA97AEF0E2E7E5CC06731 4B1874FAA67D61F630C7A82924E40ED825A03740A96F685DCB2256C92F1C5424 9374F11EC5CF4171F25C29E2761181EAFFA41B3C01C3238784197740F9AE5E0B 82F7A136E44414FAE2A4D03C5B47E63C8B73EBB916EC421AC19C925E3B637FED 21325A5252F683758277BADF3A8C33B411AEDDF34CB8514866CBFB46E98286E8 07EC4895672821EE3D99C97317817571836ED6726667BD5C91E308EB8A5A4CAE 2882F9C2CCAF6C316F2C8D1851A4615E8E1F12EBFA467D9745367C2A56FAE307 749902FF0B8B42B6477743127E0F62DA4420303C35AE73EB8D426D0B969757C2 91894A6D9E87F71FA60D3A1D62F68852C15F560021A52512B2D8DB31526F9D31 F9420E5AAA92CE22E7BDEAB672A9BF5A79CAC2A5348174851F94CBB5C26E41E0 5C35FFBF46F34B611A36AC5EEAE63AB0E23368D8CAB628BC67D0E36A67BA3347 BC0C563653FE3714A20BC67045CB638106F28B327C61D3D5F238BA59C1227F9C 8757B2CD4D7D602A7CDF2D6B20800A8488E853D4BD86B17DB15AB3AF1F9B1E97 16FE642D297FC4AF27BB8AD7AE80C00476653C20C225AD8051D9382601381A81 EB0D65A0E770DE23123A02EE7A7BB2F2A61275B826C20D308AAAD0CE8C12F0D2 CA43FF6556384653272A1542D3D15C4025ABECD9E406C9E3349C55E4A5A38D9C A5B231FB82A5B4ECCB213F894252E2820B0815B5E9C669A76A21BCB2F0EC6165 272A219427446B268E80126E4408EBB2B988CF7297DE8ECCFBDD87F4DB17AC74 01731D972AEFB75E3C9424C68B640D6AE772C2F2C64170B793947602AADA9BD4 8107FB8C5953339D6AB6DDABB94325D03D2E32A2A38E539D9345535F56AE6493 409AE4CAE8A99385ECF218F2394B4612FD458AE88E0011BB05F224C2578A357A D789315AD42BD8D24E71121EBB47856413B86B4B6F63B8BD889E569A41C581EA 94D13804A590F082381F0F981FEF40DAE260FFAC84404AF81C53491FC19E2AD1 C6A09EF18B7E97D2B74AFA7A374BE4EEBDCE3A95C08ED60212CD9BC8B7DFF88A D537DBE0EE1BD9B07C6E1D481C4A08BEA16C8639D09937535DFED5D28E5E3B95 6311A5054311550BCD2F553EC945597D7D73D19C07E9F3A5060559B04A0F01B7 51651BC60E8239A4D3D025D812A9B738DF4CA5297F06484D89FD8D3884BD687F BFBCF5D4CB2B4B5EB7D4E100CCE8DBCB6A2D6FE605A347E9A249FC909269981E A003C40638BD5141A8688D596B49A92036551245CBDEB4B512F853FBBD2F1A14 2899B70F284372EA6736333B9A378C7E53463224398DEC6E1522CD5C5732B810 87402E86B8D2CCDE3E79860562F5B18C39474EAFCC50FB916BF119FC852688F2 C2AF3400D74C2B84D0FF2E23E04A7AB5C20F2CF203782E752927749BF09255AC 9EDEEC9507597699A8F296073817E1D1683854F1B5BBF98DF95780497E5C93CD 283187C1ED880A0FC72FD717A798B78F46341AE758D628772517702EC4A39860 758DE2522C2E669E75404DD1251AA568B5E48E75FD9AD868BDBE6FD35A683490 7C48469F1B6625B5B8C3C4D11270C330E83A7CE0729FEEE0DD7998FFD53DE5FE CE86E06B469E75C97FB7A5C430D1460CA9F8D22891C33E0B24D015D355E95283 4A7F1FA56525A7E64430D6A6C6FD563B5203CC2481F88424E473923A98DF562B D8B9C78AD22EA7E8892BD76EE683235F07CEE99566612F0C2394C772E6FC7A9B DBF9CA8A9AA0C839F31B716703FCFF98E3B3B7CCBC48642FC684E6A66E1E10B9 7233CD6FBCEF5D8D466F6A264E5D65A2AC6BE02731FACBDBE5C478E7694D25E1 93BE3BA0E7823ACF341CA6568719764B693CBFA86DF65DD56A55906806A67A27 6A13F55A786659042A6F68E1F4B6612E5C2F1A6D920476D1B9A1B7BC20AB81F1 06CB0C2273FEC16642257A1ADF4FB0B1B2B22AED8A9A30CF69507FC5186904BF 5A17DE7FC301C20109140DE80B102D8AF2F7556D032D586FC63B222D2D886E6F 364D852D3E4844C5DF6D21C469FA820C0CCF6A69D1C5F5F61EE4F7EAFE0F48B0 68F65B0A67E678CAA78B4BFA78D64C61D3C7DF3B0AF499ECFC3D22521969723D E57046EA5F83DA03BE5D00412A4892C0001D187104CA0AB9467844DC9AC0149C 400047B9F176F4DABD57DAA66431247B31A5657A9D834E3E55F0C5B03E17D4C1 A2A1D1131942D0CE5CFDFB88EF73AF45AFC88AEE86CDBA1CCA65652996576D91 561E4C8B046CE0FC567585D9CE4A70F9961A02B3500B55A27F7FB560FAE2DB2C B7A49EEC7BA0E548759AD4DF96EC5C14817261CA6F6F6094FC64F3F7E3D8F320 2D4D4A13AA9BCADF6AE9ED45284B98548E8D25EB7DD91C18ABCBBF74495D17CE C812E279AE4220C55148CC6009251E9552CE7D52350D5EC53A42443DBF14CA3C 18E5A702693CF8A99DF53171387476F03295BCAD415AAFD831E4A86454ACAEAB DD11C2361E79897253CD8F50E17827F2D0B1B895101C9BD1AA64F62A0DC45919 C9B546B9CCF28BC1B57ACAD2CFE03F886277D6F08883E9EDA4D0B4DF9AF039F7 7107234D6B2ABB48B8A12AD6DFD2C7FD1B22781E6376217DC399895399DAF482 9F1BCC262EE119FD332A5F3E47BE706EE7AB3DB88F3BC3545E898A1E009B09E8 6F2346EF327BD94779122451B18FD130716AAD9E7D1A2BAFA9ECA3B90DEAB523 5AC25FBB6DB9AA5CA25A9E9CCFEC1313D7D45811C1561435DD389E8E9886CCEC F566F9E2B2CE64C7385B3E3AC4BA76C1A236A700E329D8085F080420FE746988 B96DA0B549A191CDFC379A4475840053CF4D9F624430B443E3C3877C4647D79E 89DD140425ABCDCC05E5BD7F0AB060EB67592205C743409A6F5DD128DD50342A D1FA68C5B57A63624E32B52248E1F73CFEB7AF1F2AAD992941D79FC981EA7EEF 4CCA10BD5E02DB3E60D360F6954A1D13F4ED0061D924A0E09D3B4971361A279F 53E8F1825A9C90811C76AAF98310D565E774AAFCD59EA0E95EF5AFAC5F9F8BC4 D0DE89BA01AA3A078D5270ECE014BD1FC4731A757979E1EBF5782CB7050A57FF 97814AF3ACBE82F22B13E4531E0FC507993DC893E57117ED21349B6D504BEC0D 810A8097A00A893119BE231B76F023E5F9E7B2F0B97BA484A842DF10EE36ECE5 D6CFAE46385457CF9E5025AB28262C2CEBE88F39069D6E71C4DD26F8B6F0422F 33400745353D22E55701A0B993DEAAD2A76726784D3DDB8639DE48277DFD08B7 5828D5FAEB7FA92819244C95105D5CE7670A49490A69B15B811FFAD1F7BD2488 77E269FACDCC7A0CD5214CBF59FAC09B4F5B67267CC8B729DF0FF3147DC19E14 06E813D41E2E0C3C4DD275FC9D45ECB5B10E79EE215FBD7480D557970266201F F419A342FF2026CE1EAB18803E5381945AF8AFB792D7AE40D59108232D38F1EF 8E8C301568A8D4CD5744C10643E0139C9275D913F1951504EA4DAE25EBA6ED87 69691F9CE7ADA0609D726AD9A51E5CDCCE2D56ED2FBA3D273D57C033B44D277A 44110DA8F6074FCFAF6003FB9FC1DBD451CC7D0A2F473481E1EDAD109F576BF3 2E8E9CB23BAEB8B4F546FC780F6607F718EA48E851264634E669F7375C78821C CF8E0E07A741B482F24B9846FC97D6BBBA07ED0F5EC7ABFFC74ECD8740AEB896 9F891856F174163A1D932E8C26706BFF541019CBAF0778DBC2C2146A43D01787 73CC19B26BE4F875FB3EA6B91A7571980D5222DFF202A71501E185D7C35295F5 AEAB0AE26839AF4CE0982DC832C4318439E111FC4B41FA37916DFCC22DF7B7B3 A5BE6812B73B25F0F772141AB4EA3E107FF594ABA184CD2A50F54B4C5E8212A1 3F6CF5BCDBFA3E908F62F3E3C93075A900923F42F91C6FD646B5253BBD983ED2 7F3EBC985039F5CC78D41824CCB5371DD7B0E42BE1EAF9C3AE79D7DBCE91E964 0F03F1FADE714FC202C8404924E88FB10ADA954893290DBB379777A42EA5C9E7 9C1FDE7BE6F9D36D0856674A20F73BEC75968C0A4BD0B610EA751A1C8C42FDF0 3CE55E83412E73CE722B2653B1C8552D9804564131FA9DF0D66B3BB21026F308 C43A952995456404D3B809DC438081B54B04A3BF4B1459A657A49260CB3E61A7 70AA1A6A1A0324C8AFFEC51FEF808A7C4273A92A1B4049D06A24006601219006 6D92EB22BEC64C71823CB5B942DA25FD4BB80DC288E06C1243028EDCC5150F22 35A9F3823810D8A03386A4E444AE4CEB166F057935A64C073A7155957C8A29A3 9FCFFB99BF6B7805AEB69C311A2CCA25EA9EB05315EC7743E8EDB24930A50F66 5CAE2D0834D32E5E4815456AE25B3E604FB5F62189DA2AB475FFB310466A3AD3 E7EA33FFA911D7B389A31E12FD00725EED48EFDE5A32D798A024F50761391768 6318784C4022597E2F92E05E08BBEE7C3BFA5C9C358937A329732B862CDDD497 4547F51A767A5331B4B2A81A909EA34A478F64506B7C90C5CF56C7974E80E5DF 8C280ADCB97F8D65C2EFD858A6BD145EBB728B11CF5D824D9B24E6F5165971F4 C8AAA92844A5C94483299BE8D274331AEC4D156809B746D475ABC3EAEA465EA5 BFC0086304647B228DE086B384BDDFB470B002FE3C8236721AA79807461403C2 A87D08069AE020A7521A10F89DF51D521C1373CAE35CB754B1F5DB202C86514B 91A95EE7FA6EC9E9267DFA74C7E1EFEB49D66C5F97D6181E8174906277AFC5B3 6DFDA0915B3C4F29211E492AD2E611A332D7D6B49F08871A6B9F989A207C822B 7D3973D0A1BC1882D148454A92E113A71572F76B12410EB0A313255A6B987E12 E1A2AFCBC8614065EA4FA5E33CBD6C984F583D0635C40752905B7350696F4DED 73151040BAA5383F7BB5F7DFA8198E3F32A178E16667C255414D4EA9BA9DB2C9 AD790B6CDD80DB5E37E01861958807C47A85CC95A5CBAF07503FC29841EA07D7 10B79350AE5280F66CEE4CD1FA6F16B806BBD2C2BD95C844E3A3137B88559729 570A7EC35420878D644F5986EC76DA1AECD51FE4DD42510D64F4B46133446183 39AE118710CC4DC5B6BCDF20EBE2BD26E1D651FCFD293B0083267CB12241DCA5 BFB1695D82B06B288B875BC22A58E496889646A1861EF83701F51900C697FCF3 939E1CF7D3049735D376B90AA6E1FABEDC9E757F28A2CEC015E1A2E9B9BD5454 30B43F6F1F3910920E714FFEC8ED572A285371C12B3638E6B45923CA9D230E5F 10E2516BD42027BE6AD17DCEDEB058F876991FF27DAA7E9BB2CE77B685D9E5BF 33781D642D671DE0E3E56FA8CF88CF26C3201D96F34DB9BA11B84C43F05DD205 5CCF272E567941C0ED63DF68762CD65556FF2F005E90CD64DFEC115BCDA35919 08676E106D22B826DDC8BB7062F2FA31A386454A0B22896CE9FBEEE3F66897D4 A563EF4BC12505D359E5840B75CD3641BADA91F7AB79BDC332B4F44165AF50D0 5E056C552F9ACE7438C93B9C060D5CE41D0A581DF535861D8178D23A8FDC286A E8A015B0804182EC3FC32A15EA3D220AC1798A57010196ED65F1878AC5B51FF6 11E5E6960B06996C5FFCCF4F5C73127D8B0ADCE309472D389A39D4A47AADDE64 DCC93180166D4F0776815B60C2D95C1B215B4C571333B265DDA0F58084A97E25 4E99F044CC6368604314D3B1932CF4D8E1BB754A6E2C027A98357DE5CEE3041A 0E8F48D28CAAF789C0471D6065A96AC3A0BD6298F1923FEC966D2AEB396FFFAD A45A0F5082B6E1425AC935C67AA26C2D34E5DB54EA05A6029F40CE 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 0000000000000000000000000000000000000000000000000000000000000000 cleartomark {restore}if %%EndFont TeXDict begin 39158280 55380996 1000 600 600 (gss.dvi) @start /Fa 197[21 58[{}1 74.7198 /CMMI9 rf /Fb 134[41 41 55 41 43 30 30 30 1[43 38 43 64 21 41 1[21 43 38 23 34 43 34 43 38 8[58 79 1[58 55 43 57 1[52 60 58 70 48 2[28 58 60 50 52 59 55 54 58 7[38 38 38 38 38 38 38 38 38 38 2[26 21 31[43 12[{}56 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 133[39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 39 1[39 39 39 39 39 39 39 39 39 39 39 5[39 2[39 39 39 39 39 1[39 39 39 39 39 2[39 1[39 39 39 39 39 39 39 5[39 7[39 1[39 1[39 39 39 39 2[39 39 39 39[{}56 74.7198 /CMTT9 rf /Fe 133[52 52 52 1[52 52 52 52 52 52 52 52 52 52 52 52 1[52 52 52 52 52 52 52 52 52 1[52 44[52 52 49[{}27 99.6264 /CMSLTT10 rf /Ff 133[40 48 48 1[48 51 35 36 36 48 51 45 51 76 25 48 1[25 51 45 28 40 51 40 51 45 17[71 1[83 3[33 4[69 16[45 45 45 4[25 1[45 28[51 51 53 11[{}36 90.9091 /CMSL10 rf /Fg 214[35 35 40[{}2 90.9091 /CMSS10 rf /Fh 133[52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 52 1[52 52 52 52 52 52 52 52 52 1[52 15[52 1[52 25[52 52 7[52 42[{}31 99.6264 /CMTT10 rf /Fi 133[55 65 65 89 65 68 48 48 50 65 68 61 68 102 34 65 37 34 68 61 37 56 68 55 68 60 13[68 3[92 96 116 3[46 1[96 3[89 87 93 10[61 61 61 61 61 61 2[34 41 32[68 72 11[{}45 109.091 /CMBX12 rf /Fj 130[48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 2[48 1[48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 1[48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 48 33[{}89 90.9091 /CMTT10 rf /Fk 197[25 58[{}1 90.9091 /CMMI10 rf /Fl 197[33 58[{}1 119.552 /CMMI12 rf /Fm 134[85 85 117 85 90 63 64 66 1[90 81 90 134 45 85 1[45 90 81 49 74 90 72 90 78 12[112 90 2[110 121 126 4[60 1[127 1[106 124 117 115 122 10[81 81 81 81 81 81 49[{}41 143.462 /CMBX12 rf /Fn 240[45 1[91 13[{}2 90.9091 /CMSY10 rf /Fo 133[60 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 9[139 102 103 94 75 100 1[92 101 105 128 81 1[69 50 105 106 85 88 103 97 96 102 6[37 67 67 67 67 67 67 67 67 67 67 1[37 45 45[{}58 119.552 /CMBX12 rf /Fp 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 71 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 4[45 19[76 51 51 53 11[{}86 90.9091 /CMR10 rf /Fq 134[102 2[102 108 75 1[79 3[108 4[54 3[88 1[86 108 94 11[149 1[108 4[151 1[116 4[152 71[{}16 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 Fq(GNU)65 b(Generic)g(Securit)-5 b(y)64 b(Service)h(Library)p 150 1418 3600 34 v 2222 1515 a Fp(GSS-API)30 b(Library)f(for)h(the)h(GNU)g(system)2451 1623 y(for)f(v)m(ersion)h(1.0.3,)h(9)f(Octob)s(er)f(2014)150 5091 y Fo(Simon)45 b(Josefsson)p 150 5141 3600 17 v eop end %%Page: 2 2 TeXDict begin 2 1 bop 150 4633 a Fp(This)30 b(man)m(ual)g(is)h(last)g (up)s(dated)e(9)i(Octob)s(er)f(2014)i(for)e(v)m(ersion)h(1.0.3)h(of)f (GNU)g(GSS.)150 4767 y(Cop)m(yrigh)m(t)602 4764 y(c)577 4767 y Fn(\015)f Fp(2003-2014)k(Simon)c(Josefsson.)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 Fp(i)150 299 y Fm(T)-13 b(able)53 b(of)h(Con)l(ten)l(ts)150 624 y Fo(1)135 b(In)l(tro)t (duction)13 b Fl(:)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 Fo(1)275 761 y Fp(1.1)92 b(Getting)32 b(Started)21 b Fk(:)15 b(:)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 (:)f(:)g(:)h(:)51 b Fp(1)275 871 y(1.2)92 b(F)-8 b(eatures)26 b Fk(:)16 b(:)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(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f (:)g(:)h(:)f(:)56 b Fp(1)275 980 y(1.3)92 b(GSS-API)29 b(Ov)m(erview)12 b Fk(:)k(:)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(:)f(:)42 b Fp(1)275 1090 y(1.4)92 b(Supp)s(orted)28 b(Platforms)20 b Fk(:)c(:)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(:)51 b Fp(2)275 1199 y(1.5)92 b(Commercial)31 b(Supp)s(ort)23 b Fk(:)13 b(:)i(:)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(:)h(:) f(:)g(:)53 b Fp(4)275 1309 y(1.6)92 b(Do)m(wnloading)31 b(and)f(Installing)9 b Fk(:)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(:)g (:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)39 b Fp(4)275 1418 y(1.7)92 b(Bug)30 b(Rep)s(orts)22 b Fk(:)16 b(:)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(:)f(:)h(:)f(:)g(:)53 b Fp(5)275 1528 y(1.8)92 b(Con)m(tributing)18 b Fk(:)c(:)i(:)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(:)f(:)48 b Fp(5)275 1638 y(1.9)92 b(Planned)29 b(F)-8 b(eatures)10 b Fk(:)17 b(:)e(:)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(:)40 b Fp(6)150 1872 y Fo(2)135 b(Preparation)34 b Fl(:)19 b(:)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(:)f(:)g(:)h(:)f(:) h(:)f(:)h(:)77 b Fo(7)275 2009 y Fp(2.1)92 b(Header)13 b Fk(:)i(:)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(:)g(:)h(:)f(:) h(:)f(:)g(:)h(:)f(:)43 b Fp(7)275 2119 y(2.2)92 b(Initialization)20 b Fk(:)e(:)d(:)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(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)50 b Fp(7)275 2229 y(2.3)92 b(V)-8 b(ersion)31 b(Chec)m(k)11 b Fk(:)k(:)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(:)g(:)h(:)41 b Fp(7)275 2338 y(2.4)92 b(Building)30 b(the)h(source)9 b Fk(:)15 b(:)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(:)39 b Fp(8)275 2448 y(2.5)92 b(Out)29 b(of)i(Memory)g(handling)20 b Fk(:)15 b(:)g(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h (:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:) f(:)h(:)f(:)g(:)h(:)50 b Fp(8)150 2682 y Fo(3)135 b(Standard)44 b(GSS)g(API)30 b Fl(:)19 b(:)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(:)75 b Fo(9)275 2819 y Fp(3.1)92 b(Simple)30 b(Data)i(T)m(yp)s(es)13 b Fk(:)h(:)i(:)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(:)43 b Fp(9)399 2929 y(3.1.1)93 b(In)m(teger)31 b(t)m(yp)s(es)18 b Fk(:)e(:)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(:)48 b Fp(9)399 3039 y(3.1.2)93 b(String)30 b(and)g(similar)g(data)17 b Fk(:)f(:)g(:)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(:)47 b Fp(9)524 3148 y(3.1.2.1)93 b(Opaque)30 b(data)h(t)m(yp)s(es)26 b Fk(:)15 b(:)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(:)56 b Fp(9)524 3258 y(3.1.2.2)93 b(Character)31 b(strings)17 b Fk(:)e(:)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(:)47 b Fp(9)399 3367 y(3.1.3)93 b(Ob)5 b(ject)30 b(Iden)m(ti\014ers)8 b Fk(:)16 b(:)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(:)38 b Fp(10)399 3477 y(3.1.4)93 b(Ob)5 b(ject)30 b(Iden)m(ti\014er)g(Sets) 11 b Fk(:)16 b(:)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(:)40 b Fp(10)275 3587 y(3.2)92 b(Complex)30 b(Data)i(T)m(yp)s(es)9 b Fk(:)15 b(:)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(:)39 b Fp(10)399 3696 y(3.2.1)93 b(Creden)m(tials)11 b Fk(:)16 b(:)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(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)40 b Fp(11)399 3806 y(3.2.2)93 b(Con)m(texts)17 b Fk(:)f(:)g(:)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(:)47 b Fp(11)399 3915 y(3.2.3)93 b(Authen)m(tication)32 b(tok)m(ens)17 b Fk(:)g(:)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(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)47 b Fp(11)399 4025 y(3.2.4)93 b(In)m(terpro)s(cess)30 b(tok)m(ens)15 b Fk(:)h(:)g(:)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(:)45 b Fp(11)399 4134 y(3.2.5)93 b(Names)21 b Fk(:)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(:)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(:)50 b Fp(12)399 4244 y(3.2.6)93 b(Channel)29 b(Bindings)23 b Fk(:)15 b(:)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(:)52 b Fp(13)275 4354 y(3.3)92 b(Optional)30 b(P)m(arameters)19 b Fk(:)e(:)f(:)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(:)49 b Fp(15)275 4463 y(3.4)92 b(Error)29 b(Handling)9 b Fk(:)16 b(:)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(:)f(:)39 b Fp(15)399 4573 y(3.4.1)93 b(GSS)29 b(status)i(co)s(des)12 b Fk(:)k(:)g(:)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(:)h(:)f(:)42 b Fp(15)399 4682 y(3.4.2)93 b(Mec)m(hanism-sp)s(eci\014c)31 b(status)g(co)s(des)21 b Fk(:)16 b(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h (:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)51 b Fp(18)275 4792 y(3.5)92 b(Creden)m(tial)31 b(Managemen)m(t)18 b Fk(:)f(:)e(:)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(:)47 b Fp(18)275 4902 y(3.6)92 b(Con)m(text-Lev)m(el)33 b(Routines)25 b Fk(:)15 b(:)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(:)55 b Fp(24)275 5011 y(3.7)92 b(P)m(er-Message)32 b(Routines)17 b Fk(:)f(:)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 Fp(41)275 5121 y(3.8)92 b(Name)31 b(Manipulation)16 b Fk(:)g(:)g(:)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(:)h(:)f(:)46 b Fp(45)275 5230 y(3.9)92 b(Miscellaneous)32 b(Routines)11 b Fk(:)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(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)41 b Fp(50)275 5340 y(3.10)92 b(SASL)29 b(GS2)i(Routines)8 b Fk(:)16 b(:)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(:)38 b Fp(55)p eop end %%Page: -2 4 TeXDict begin -2 3 bop 3699 -116 a Fp(ii)150 83 y Fo(4)135 b(Extended)45 b(GSS)f(API)12 b Fl(:)19 b(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:) g(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h (:)f(:)57 b Fo(57)150 353 y(5)135 b(In)l(v)l(oking)45 b(gss)13 b Fl(:)21 b(:)e(:)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(:)58 b Fo(58)150 623 y(6)135 b(Ac)l(kno)l(wledgemen)l (ts)27 b Fl(:)21 b(:)f(:)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(:)72 b Fo(60)150 892 y(App)t(endix)44 b(A)160 b(Criticism)46 b(of)f(GSS)11 b Fl(:)18 b(:)i(:)f(:)h(:)f(:)h(:)f(:)h(:)f(:)g(:)h(:)f (:)h(:)f(:)h(:)f(:)h(:)55 b Fo(61)150 1162 y(App)t(endix)44 b(B)166 b(Cop)l(ying)45 b(Information)25 b Fl(:)c(:)f(:)f(:)g(:)h(:)f (:)h(:)f(:)h(:)f(:)h(:)f(:)70 b Fo(63)275 1299 y Fp(B.1)92 b(GNU)31 b(F)-8 b(ree)31 b(Do)s(cumen)m(tation)h(License)24 b Fk(:)16 b(:)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(:)53 b Fp(63)150 1542 y Fo(Concept)45 b(Index)18 b Fl(:)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 Fo(71)150 1812 y(API)44 b(Index)35 b Fl(:)20 b(:)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(:)h(:)f(:)g(:)h(:)f(:)h(:)f(:)h(:)f(:)80 b Fo(72)p eop end %%Page: 1 5 TeXDict begin 1 4 bop 150 -116 a Fp(Chapter)30 b(1:)41 b(In)m(tro)s(duction)2592 b(1)150 299 y Fm(1)80 b(In)l(tro)t(duction) 150 514 y Fp(GSS)35 b(is)h(an)f(implemen)m(tation)i(of)f(the)g(Generic) g(Securit)m(y)g(Service)g(Application)h(Program)f(In)m(terface)150 624 y(\(GSS-API\).)h(GSS-API)f(is)g(used)g(b)m(y)g(net)m(w)m(ork)h (serv)m(ers)g(to)g(pro)m(vide)f(securit)m(y)h(services,)i(e.g.,)h(to)d (au-)150 733 y(then)m(ticate)k(SMTP/IMAP)d(clien)m(ts)i(against)f (SMTP/IMAP)f(serv)m(ers.)65 b(GSS)37 b(consists)i(of)g(a)f(library)150 843 y(and)30 b(a)h(man)m(ual.)275 974 y(GSS)39 b(is)i(dev)m(elop)s(ed)g (for)f(the)g(GNU/Lin)m(ux)h(system,)j(but)c(runs)e(on)j(o)m(v)m(er)h (20)f(platforms)f(includ-)150 1083 y(ing)d(most)f(ma)5 b(jor)37 b(Unix)f(platforms)h(and)f(Windo)m(ws,)i(and)e(man)m(y)g(kind) g(of)h(devices)g(including)f(iP)-8 b(A)m(Q)150 1193 y(handhelds)29 b(and)h(S/390)h(mainframes.)275 1324 y(GSS)c(is)i(a)g(GNU)g(pro)5 b(ject,)30 b(and)e(is)h(licensed)g(under)e(the)i(GNU)g(General)h (Public)e(License)h(v)m(ersion)h(3)150 1433 y(or)g(later.)150 1658 y Fo(1.1)68 b(Getting)46 b(Started)150 1818 y Fp(This)c(man)m(ual) g(do)s(cumen)m(ts)h(the)f(GSS)g(programming)g(in)m(terface.)79 b(All)43 b(functions)f(and)g(data)h(t)m(yp)s(es)150 1927 y(pro)m(vided)30 b(b)m(y)g(the)h(library)f(are)h(explained.)275 2058 y(The)c(reader)h(is)g(assumed)f(to)i(p)s(ossess)e(basic)h (familiarit)m(y)i(with)d(GSS-API)h(and)f(net)m(w)m(ork)i(program-)150 2168 y(ming)37 b(in)f(C)g(or)h(C)p Fj(++)p Fp(.)59 b(F)-8 b(or)37 b(general)h(GSS-API)e(information,)j(and)d(some)h(programming)f (examples,)150 2277 y(there)31 b(is)f(a)h(guide)f(a)m(v)-5 b(ailable)33 b(online)e(at)g Fj(http://docs.sun.com/db/)o(doc/)o(816-)o (133)o(1)p Fp(.)275 2408 y(This)c(man)m(ual)h(can)g(b)s(e)f(used)g(in)h (sev)m(eral)h(w)m(a)m(ys.)41 b(If)27 b(read)h(from)f(the)h(b)s (eginning)g(to)g(the)g(end,)g(it)h(giv)m(es)150 2518 y(a)38 b(go)s(o)s(d)g(in)m(tro)s(duction)f(in)m(to)i(the)f(library)f (and)g(ho)m(w)h(it)g(can)g(b)s(e)f(used)g(in)h(an)f(application.)64 b(F)-8 b(orw)m(ard)150 2627 y(references)35 b(are)f(included)g(where)g (necessary)-8 b(.)53 b(Later)35 b(on,)g(the)g(man)m(ual)f(can)h(b)s(e)f (used)f(as)i(a)f(reference)150 2737 y(man)m(ual)40 b(to)g(get)h(just)e (the)h(information)g(needed)f(ab)s(out)h(an)m(y)g(particular)g(in)m (terface)h(of)f(the)g(library)-8 b(.)150 2846 y(Exp)s(erienced)35 b(programmers)g(migh)m(t)h(w)m(an)m(t)h(to)f(start)g(lo)s(oking)h(at)f (the)g(examples)g(at)g(the)g(end)f(of)h(the)150 2956 y(man)m(ual,)31 b(and)f(then)g(only)g(read)h(up)e(those)i(parts)f(of)g (the)h(in)m(terface)h(whic)m(h)e(are)h(unclear.)150 3181 y Fo(1.2)68 b(F)-11 b(eatures)150 3340 y Fp(GSS)30 b(migh)m(t)h(ha)m(v) m(e)g(a)g(couple)g(of)f(adv)-5 b(an)m(tages)33 b(o)m(v)m(er)e(other)g (libraries)f(doing)h(a)g(similar)f(job.)150 3492 y(It's)h(F)-8 b(ree)31 b(Soft)m(w)m(are)630 3602 y(An)m(yb)s(o)s(dy)42 b(can)h(use,)j(mo)s(dify)-8 b(,)47 b(and)42 b(redistribute)h(it)h (under)d(the)j(terms)f(of)g(the)g(GNU)630 3711 y(General)31 b(Public)f(License)h(v)m(ersion)g(3)g(or)f(later.)150 3863 y(It's)h(thread-safe)630 3973 y(No)k(global)g(v)-5 b(ariables)34 b(are)h(used)e(and)g(m)m(ultiple)i(library)f(handles)f (and)g(session)i(handles)630 4083 y(ma)m(y)c(b)s(e)f(used)f(in)h (parallell.)150 4235 y(It's)h(in)m(ternationalized)630 4344 y(It)j(handles)g(non-ASCI)s(I)f(names)h(and)g(user)f(visible)i (strings)f(used)g(in)g(the)g(library)g(\(e.g.,)630 4454 y(error)c(messages\))i(can)e(b)s(e)g(translated)h(in)m(to)g(the)g (users')f(language.)150 4606 y(It's)h(p)s(ortable)630 4715 y(It)f(should)g(w)m(ork)g(on)h(all)g(Unix)f(lik)m(e)i(op)s (erating)f(systems,)f(including)g(Windo)m(ws.)150 4940 y Fo(1.3)68 b(GSS-API)43 b(Ov)l(erview)150 5100 y Fp(This)30 b(section)h(describ)s(es)f(GSS-API)g(from)f(a)i(proto)s(col)h(p)s(oin)m (t)e(of)g(view.)275 5230 y(The)g(Generic)i(Securit)m(y)g(Service)g (Application)g(Programming)f(In)m(terface)i(pro)m(vides)e(securit)m(y)h (ser-)150 5340 y(vices)26 b(to)f(calling)i(applications.)40 b(It)25 b(allo)m(ws)h(a)g(comm)m(unicating)g(application)g(to)g(authen) m(ticate)h(the)f(user)p eop end %%Page: 2 6 TeXDict begin 2 5 bop 150 -116 a Fp(Chapter)30 b(1:)41 b(In)m(tro)s(duction)2592 b(2)150 299 y(asso)s(ciated)29 b(with)e(another)g(application,)j(to)e(delegate)h(righ)m(ts)f(to)g (another)f(application,)j(and)c(to)i(apply)150 408 y(securit)m(y)j (services)g(suc)m(h)f(as)h(con\014den)m(tialit)m(y)h(and)e(in)m(tegrit) m(y)i(on)f(a)g(p)s(er-message)f(basis.)275 539 y(There)f(are)i(four)f (stages)i(to)f(using)f(the)g(GSS-API:)199 669 y(1.)61 b(The)37 b(application)h(acquires)f(a)h(set)g(of)f(creden)m(tials)h (with)f(whic)m(h)g(it)h(ma)m(y)f(pro)m(v)m(e)h(its)g(iden)m(tit)m(y)g (to)330 778 y(other)31 b(pro)s(cesses.)43 b(The)31 b(application's)h (creden)m(tials)h(v)m(ouc)m(h)e(for)g(its)h(global)g(iden)m(tit)m(y)-8 b(,)34 b(whic)m(h)c(ma)m(y)330 888 y(or)g(ma)m(y)h(not)g(b)s(e)f (related)h(to)g(an)m(y)g(lo)s(cal)g(username)f(under)f(whic)m(h)h(it)h (ma)m(y)g(b)s(e)f(running.)199 1018 y(2.)61 b(A)43 b(pair)g(of)h(comm)m (unicating)g(applications)h(establish)e(a)h(join)m(t)g(securit)m(y)g (con)m(text)h(using)e(their)330 1128 y(creden)m(tials.)65 b(The)38 b(securit)m(y)h(con)m(text)h(is)e(a)h(pair)f(of)g(GSS-API)f (data)i(structures)f(that)h(con)m(tain)330 1237 y(shared)29 b(state)i(information,)f(whic)m(h)g(is)f(required)g(in)g(order)h(that)g (p)s(er-message)g(securit)m(y)g(services)330 1347 y(ma)m(y)d(b)s(e)e (pro)m(vided.)39 b(Examples)26 b(of)g(state)h(that)g(migh)m(t)g(b)s(e)e (shared)g(b)s(et)m(w)m(een)i(applications)g(as)f(part)330 1457 y(of)32 b(a)g(securit)m(y)g(con)m(text)h(are)f(cryptographic)g(k)m (eys,)h(and)d(message)j(sequence)f(n)m(um)m(b)s(ers.)43 b(As)31 b(part)330 1566 y(of)e(the)g(establishmen)m(t)h(of)g(a)f (securit)m(y)h(con)m(text,)h(the)f(con)m(text)g(initiator)h(is)e (authen)m(ticated)i(to)f(the)330 1676 y(resp)s(onder,)g(and)g(ma)m(y)h (require)g(that)g(the)g(resp)s(onder)f(is)h(authen)m(ticated)h(in)f (turn.)41 b(The)31 b(initiator)330 1785 y(ma)m(y)d(optionally)g(giv)m (e)h(the)e(resp)s(onder)f(the)h(righ)m(t)h(to)g(initiate)h(further)d (securit)m(y)i(con)m(texts,)i(acting)330 1895 y(as)36 b(an)g(agen)m(t)i(or)e(delegate)i(of)e(the)g(initiator.)59 b(This)36 b(transfer)f(of)h(righ)m(ts)h(is)f(termed)g(delegation,)330 2004 y(and)30 b(is)h(ac)m(hiev)m(ed)i(b)m(y)e(creating)i(a)e(set)g(of)h (creden)m(tials,)g(similar)g(to)g(those)f(used)f(b)m(y)h(the)g (initiating)330 2114 y(application,)h(but)e(whic)m(h)g(ma)m(y)h(b)s(e)e (used)h(b)m(y)g(the)h(resp)s(onder.)330 2244 y(T)-8 b(o)31 b(establish)g(and)e(main)m(tain)j(the)e(shared)g(information)h(that)g (mak)m(es)g(up)e(the)i(securit)m(y)g(con)m(text,)330 2354 y(certain)43 b(GSS-API)f(calls)h(will)g(return)e(a)i(tok)m(en)g (data)g(structure,)i(whic)m(h)d(is)h(an)f(opaque)g(data)330 2463 y(t)m(yp)s(e)26 b(that)h(ma)m(y)g(con)m(tain)g(cryptographically)h (protected)f(data.)40 b(The)25 b(caller)j(of)e(suc)m(h)g(a)g(GSS-API) 330 2573 y(routine)34 b(is)f(resp)s(onsible)g(for)h(transferring)e(the) i(tok)m(en)h(to)f(the)g(p)s(eer)f(application,)j(encapsulated)330 2683 y(if)h(necessary)h(in)f(an)h(application-)h(application)f(proto)s (col.)63 b(On)37 b(receipt)h(of)f(suc)m(h)g(a)h(tok)m(en,)j(the)330 2792 y(p)s(eer)29 b(application)i(should)e(pass)g(it)h(to)g(a)g (corresp)s(onding)f(GSS-API)g(routine)h(whic)m(h)f(will)h(deco)s(de)330 2902 y(the)d(tok)m(en)h(and)f(extract)h(the)f(information,)i(up)s (dating)d(the)h(securit)m(y)g(con)m(text)i(state)g(information)330 3011 y(accordingly)-8 b(.)199 3142 y(3.)61 b(P)m(er-message)38 b(services)e(are)h(in)m(v)m(ok)m(ed)g(to)g(apply)e(either:)53 b(in)m(tegrit)m(y)38 b(and)d(data)i(origin)f(authen)m(ti-)330 3251 y(cation,)d(or)d(con\014den)m(tialit)m(y)-8 b(,)34 b(in)m(tegrit)m(y)f(and)d(data)i(origin)f(authen)m(tication)i(to)f (application)g(data,)330 3361 y(whic)m(h)41 b(are)g(treated)h(b)m(y)f (GSS-API)f(as)h(arbitrary)g(o)s(ctet-strings.)74 b(An)40 b(application)j(transmit-)330 3470 y(ting)f(a)g(message)h(that)f(it)h (wishes)e(to)h(protect)h(will)f(call)h(the)f(appropriate)g(GSS-API)f (routine)330 3580 y(\(gss)p 488 3580 28 4 v 41 w(get)p 649 3580 V 41 w(mic)27 b(or)g(gss)p 1083 3580 V 40 w(wrap\))g(to)h (apply)e(protection,)j(sp)s(ecifying)e(the)g(appropriate)h(securit)m(y) f(con-)330 3689 y(text,)34 b(and)e(send)f(the)h(resulting)h(tok)m(en)g (to)g(the)f(receiving)i(application.)47 b(The)32 b(receiv)m(er)i(will)e (pass)330 3799 y(the)23 b(receiv)m(ed)h(tok)m(en)f(\(and,)h(in)f(the)f (case)i(of)f(data)g(protected)g(b)m(y)g(gss)p 2655 3799 V 40 w(get)p 2815 3799 V 41 w(mic,)i(the)d(accompan)m(ying)330 3909 y(message-data\))40 b(to)e(the)f(corresp)s(onding)f(deco)s(ding)i (routine)f(\(gss)p 2668 3909 V 40 w(v)m(erify)p 2930 3909 V 41 w(mic)h(or)f(gss)p 3385 3909 V 40 w(un)m(wrap\))330 4018 y(to)31 b(remo)m(v)m(e)h(the)f(protection)g(and)f(v)-5 b(alidate)32 b(the)e(data.)199 4148 y(4.)61 b(A)m(t)26 b(the)e(completion)i(of)f(a)g(comm)m(unications)h(session)e(\(whic)m(h) h(ma)m(y)g(extend)g(across)g(sev)m(eral)h(trans-)330 4258 y(p)s(ort)h(connections\),)j(eac)m(h)g(application)f(calls)g(a)f (GSS-API)g(routine)g(to)g(delete)h(the)g(securit)m(y)f(con-)330 4368 y(text.)40 b(Multiple)27 b(con)m(texts)h(ma)m(y)f(also)g(b)s(e)e (used)h(\(either)g(successiv)m(ely)i(or)e(sim)m(ultaneously\))h(within) 330 4477 y(a)k(single)g(comm)m(unications)g(asso)s(ciation,)i(at)e(the) g(option)f(of)h(the)f(applications.)150 4701 y Fo(1.4)68 b(Supp)t(orted)44 b(Platforms)150 4860 y Fp(GSS)30 b(has)g(at)h(some)g (p)s(oin)m(t)f(in)g(time)h(b)s(een)f(tested)h(on)f(the)h(follo)m(wing)h (platforms.)199 4991 y(1.)61 b(Debian)31 b(GNU/Lin)m(ux)g(3.0)g(\(W)-8 b(o)s(o)s(dy\))330 5121 y(GCC)39 b(2.95.4)j(and)c(GNU)i(Mak)m(e.)69 b(This)39 b(is)g(the)h(main)f(dev)m(elopmen)m(t)i(platform.)68 b Fj(alphaev67-)330 5230 y(unknown-linux-gnu)p Fp(,)140 b Fj(alphaev6-unknown-linux-gnu)o Fp(,)f Fj(arm-unknown-linux-gnu)p Fp(,)330 5340 y Fj(hppa-unknown-linux-gnu)p Fp(,)163 b Fj(hppa64-unknown-linux-gnu)o Fp(,)g Fj(i686-pc-linux-gnu)p Fp(,)p eop end %%Page: 3 7 TeXDict begin 3 6 bop 150 -116 a Fp(Chapter)30 b(1:)41 b(In)m(tro)s(duction)2592 b(3)330 299 y Fj(ia64-unknown-linux-gnu)p Fp(,)91 b Fj(m68k-unknown-linux-gnu)p Fp(,)h Fj(mips-unknown-linux-gnu) p Fp(,)330 408 y Fj(mipsel-unknown-linux-gnu)o Fp(,)68 b Fj(powerpc-unknown-linux-gn)o(u)p Fp(,)g Fj(s390-ibm-linux-gnu)p Fp(,)330 518 y Fj(sparc-unknown-linux-gnu)p Fp(.)199 652 y(2.)61 b(Debian)31 b(GNU/Lin)m(ux)g(2.1)330 785 y(GCC)f(2.95.1)j(and)c(GNU)i(Mak)m(e.)43 b Fj(armv4l-unknown-linux-gn)o (u)p Fp(.)199 919 y(3.)61 b(T)-8 b(ru64)30 b(UNIX)330 1052 y(T)-8 b(ru64)32 b(UNIX)h(C)f(compiler)h(and)f(T)-8 b(ru64)33 b(Mak)m(e.)48 b Fj(alphaev67-dec-osf5.1)p Fp(,)28 b Fj(alphaev68-dec-)330 1162 y(osf5.1)p Fp(.)199 1295 y(4.)61 b(SuSE)29 b(Lin)m(ux)h(7.1)330 1429 y(GCC)47 b(2.96)j(and)d(GNU)i(Mak)m(e.)95 b Fj(alphaev6-unknown-linux-)o(gnu)o Fp(,)47 b Fj(alphaev67-unknown-)330 1539 y(linux-gnu)p Fp(.)199 1672 y(5.)61 b(SuSE)29 b(Lin)m(ux)h(7.2a)330 1806 y(GCC)g(3.0)h(and)f(GNU)h(Mak)m(e.)42 b Fj(ia64-unknown-linux-gnu) p Fp(.)199 1939 y(6.)61 b(RedHat)31 b(Lin)m(ux)f(7.2)330 2073 y(GCC)47 b(2.96)j(and)d(GNU)i(Mak)m(e.)95 b Fj (alphaev6-unknown-linux-)o(gnu)o Fp(,)47 b Fj(alphaev67-unknown-)330 2182 y(linux-gnu)p Fp(,)28 b Fj(ia64-unknown-linux-gnu)p Fp(.)199 2316 y(7.)61 b(RedHat)31 b(Lin)m(ux)f(8.0)330 2450 y(GCC)g(3.2)h(and)f(GNU)h(Mak)m(e.)42 b Fj(i686-pc-linux-gnu)p Fp(.)199 2583 y(8.)61 b(RedHat)31 b(Adv)-5 b(anced)30 b(Serv)m(er)h(2.1)330 2717 y(GCC)f(2.96)i(and)e(GNU)h(Mak)m(e.)42 b Fj(i686-pc-linux-gnu)p Fp(.)199 2850 y(9.)61 b(Slac)m(kw)m(are)32 b(Lin)m(ux)e(8.0.01)330 2984 y(GCC)g(2.95.3)j(and)c(GNU)i(Mak)m(e.)43 b Fj(i686-pc-linux-gnu)p Fp(.)154 3117 y(10.)61 b(Mandrak)m(e)31 b(Lin)m(ux)f(9.0)330 3251 y(GCC)g(3.2)h(and)f(GNU)h(Mak)m(e.)42 b Fj(i686-pc-linux-gnu)p Fp(.)154 3384 y(11.)61 b(IRIX)30 b(6.5)330 3518 y(MIPS)g(C)g(compiler,)h(IRIX)f(Mak)m(e.)42 b Fj(mips-sgi-irix6.5)p Fp(.)154 3652 y(12.)61 b(AIX)30 b(4.3.2)330 3785 y(IBM)h(C)f(for)g(AIX)g(compiler,)i(AIX)e(Mak)m(e.)42 b Fj(rs6000-ibm-aix4.3.2.0)p Fp(.)154 3919 y(13.)61 b(Microsoft)32 b(Windo)m(ws)e(2000)i(\(Cygwin\))330 4052 y(GCC)e(3.2,)i(GNU)f(mak)m (e.)41 b Fj(i686-pc-cygwin)p Fp(.)154 4186 y(14.)61 b(HP-UX)31 b(11)330 4319 y(HP-UX)g(C)f(compiler)h(and)f(HP)g(Mak)m(e.)42 b Fj(ia64-hp-hpux11.22)p Fp(,)26 b Fj(hppa2.0w-hp-hpux11.11)p Fp(.)154 4453 y(15.)61 b(SUN)30 b(Solaris)h(2.8)330 4587 y(Sun)e(W)-8 b(orkShop)30 b(Compiler)g(C)g(6.0)i(and)d(SUN)i(Mak)m(e.) 42 b Fj(sparc-sun-solaris2.8)p Fp(.)154 4720 y(16.)61 b(NetBSD)32 b(1.6)330 4854 y(GCC)85 b(2.95.3)j(and)d(GNU)h(Mak)m(e.)208 b Fj(alpha-unknown-netbsd1.6)p Fp(,)94 b Fj(i386-unknown-)330 4963 y(netbsdelf1.6)p Fp(.)154 5097 y(17.)61 b(Op)s(enBSD)29 b(3.1)j(and)e(3.2)330 5230 y(GCC)79 b(2.95.3)j(and)e(GNU)g(Mak)m(e.)191 b Fj(alpha-unknown-openbsd3.)o(1)p Fp(,)87 b Fj(i386-unknown-)330 5340 y(openbsd3.1)p Fp(.)p eop end %%Page: 4 8 TeXDict begin 4 7 bop 150 -116 a Fp(Chapter)30 b(1:)41 b(In)m(tro)s(duction)2592 b(4)154 299 y(18.)61 b(F)-8 b(reeBSD)32 b(4.7)330 432 y(GCC)79 b(2.95.4)j(and)e(GNU)g(Mak)m(e.)191 b Fj(alpha-unknown-freebsd4.)o(7)p Fp(,)87 b Fj(i386-unknown-)330 542 y(freebsd4.7)p Fp(.)154 675 y(19.)61 b(Cross)30 b(compiled)h(to)g (uClin)m(ux/uClib)s(c)e(on)h(Motorola)j(Cold\014re.)330 808 y(GCC)d(3.4)h(and)f(GNU)h(Mak)m(e)h Fj(m68k-uclinux-elf)p Fp(.)275 965 y(If)d(y)m(ou)i(use)f(GSS)g(on,)g(or)h(p)s(ort)f(GSS)f (to,)j(a)e(new)g(platform)h(please)g(rep)s(ort)f(it)g(to)i(the)e (author.)150 1195 y Fo(1.5)68 b(Commercial)47 b(Supp)t(ort)150 1355 y Fp(Commercial)36 b(supp)s(ort)d(is)i(a)m(v)-5 b(ailable)37 b(for)e(users)f(of)h(GNU)g(GSS.)f(The)h(kind)f(of)h(supp)s (ort)e(that)i(can)h(b)s(e)150 1464 y(purc)m(hased)30 b(ma)m(y)g(include:)225 1598 y Fn(\017)60 b Fp(Implemen)m(t)31 b(new)e(features.)41 b(Suc)m(h)30 b(as)h(a)g(new)e(GSS-API)h(mec)m (hanism.)225 1731 y Fn(\017)60 b Fp(P)m(ort)27 b(GSS)e(to)i(new)e (platforms.)39 b(This)26 b(could)g(include)f(p)s(orting)h(to)h(an)e(em) m(b)s(edded)g(platforms)h(that)330 1841 y(ma)m(y)31 b(need)f(memory)g (or)h(size)g(optimization.)225 1974 y Fn(\017)60 b Fp(In)m(tegrating)32 b(GSS)e(as)g(a)h(securit)m(y)g(en)m(vironmen)m(t)g(in)f(y)m(our)g (existing)i(pro)5 b(ject.)225 2107 y Fn(\017)60 b Fp(System)30 b(design)g(of)h(comp)s(onen)m(ts)f(related)i(to)f(GSS-API.)275 2264 y(If)e(y)m(ou)i(are)g(in)m(terested,)h(please)f(write)f(to:)150 2397 y Fj(Simon)46 b(Josefsson)g(Datakonsult)e(AB)150 2507 y(Hagagatan)h(24)150 2617 y(113)i(47)g(Stockholm)150 2726 y(Sweden)150 2945 y(E-mail:)f(simon@josefsson.org)275 3079 y Fp(If)29 b(y)m(our)g(compan)m(y)h(pro)m(vides)f(supp)s(ort)f (related)i(to)h(GNU)f(GSS)e(and)h(w)m(ould)h(lik)m(e)g(to)h(b)s(e)d (men)m(tioned)150 3188 y(here,)i(con)m(tact)j(the)e(author)f(\(see)h (Section)g(1.7)h([Bug)f(Rep)s(orts],)f(page)h(5\).)150 3418 y Fo(1.6)68 b(Do)l(wnloading)46 b(and)f(Installing)150 3578 y Fp(The)30 b(pac)m(k)-5 b(age)32 b(can)f(b)s(e)f(do)m(wnloaded)g (from)g(sev)m(eral)i(places,)f(including:)275 3711 y Fj(ftp://ftp.gnu.org/gnu/g)o(ss/)275 3844 y Fp(The)23 b(latest)j(v)m(ersion)f(is)g(stored)f(in)g(a)h(\014le,)h(e.g.,)h(`)p Fj(gss-1.0.3.tar.gz)p Fp(')21 b(where)j(the)g(`)p Fj(1.0.3)p Fp(')g(indicate)150 3954 y(the)31 b(highest)f(v)m(ersion)h(n)m(um)m(b)s (er.)275 4087 y(The)i(pac)m(k)-5 b(age)35 b(is)f(then)f(extracted,)j (con\014gured)c(and)h(built)h(lik)m(e)g(man)m(y)g(other)g(pac)m(k)-5 b(ages)35 b(that)f(use)150 4197 y(Auto)s(conf.)40 b(F)-8 b(or)28 b(detailed)h(information)f(on)g(con\014guring)f(and)g(building) g(it,)i(refer)f(to)g(the)g Fj(INSTALL)e Fp(\014le)150 4306 y(that)31 b(is)f(part)h(of)f(the)h(distribution)e(arc)m(hiv)m(e.) 275 4440 y(Here)k(is)f(an)h(example)g(terminal)g(session)g(that)g(do)m (wnloads,)h(con\014gures,)f(builds)e(and)h(installs)i(the)150 4549 y(pac)m(k)-5 b(age.)43 b(Y)-8 b(ou)31 b(will)f(need)g(a)h(few)f (basic)h(to)s(ols,)h(suc)m(h)e(as)g(`)p Fj(sh)p Fp(',)h(`)p Fj(make)p Fp(')e(and)h(`)p Fj(cc)p Fp('.)390 4682 y Fj($)47 b(wget)g(-q)g(ftp://ftp.gnu.org/gnu/gss)o(/gss)o(-1.0)o(.3.)o(tar.)o (gz)390 4792 y($)g(tar)g(xfz)g(gss-1.0.3.tar.gz)390 4902 y($)g(cd)h(gss-1.0.3/)390 5011 y($)f(./configure)390 5121 y(...)390 5230 y($)g(make)390 5340 y(...)p eop end %%Page: 5 9 TeXDict begin 5 8 bop 150 -116 a Fp(Chapter)30 b(1:)41 b(In)m(tro)s(duction)2592 b(5)390 299 y Fj($)47 b(make)g(install)390 408 y(...)275 539 y Fp(After)30 b(that)h(GSS)f(should)f(b)s(e)h(prop)s (erly)f(installed)i(and)f(ready)g(for)g(use.)150 762 y Fo(1.7)68 b(Bug)45 b(Rep)t(orts)150 922 y Fp(If)30 b(y)m(ou)h(think)f(y)m(ou)g(ha)m(v)m(e)i(found)d(a)i(bug)e(in)h(GSS,)g (please)i(in)m(v)m(estigate)h(it)e(and)f(rep)s(ort)g(it.)225 1052 y Fn(\017)60 b Fp(Please)28 b(mak)m(e)f(sure)f(that)i(the)e(bug)g (is)h(really)g(in)g(GSS,)f(and)g(preferably)g(also)i(c)m(hec)m(k)g (that)f(it)g(hasn't)330 1162 y(already)k(b)s(een)f(\014xed)f(in)h(the)h (latest)h(v)m(ersion.)225 1292 y Fn(\017)60 b Fp(Y)-8 b(ou)31 b(ha)m(v)m(e)g(to)h(send)d(us)h(a)h(test)g(case)g(that)g(mak)m (es)g(it)g(p)s(ossible)f(for)g(us)g(to)h(repro)s(duce)e(the)i(bug.)225 1422 y Fn(\017)60 b Fp(Y)-8 b(ou)29 b(also)h(ha)m(v)m(e)g(to)g(explain) f(what)g(is)g(wrong;)g(if)g(y)m(ou)g(get)h(a)f(crash,)h(or)f(if)f(the)h (results)g(prin)m(ted)g(are)330 1532 y(not)36 b(go)s(o)s(d)g(and)g(in)g (that)g(case,)j(in)d(what)g(w)m(a)m(y)-8 b(.)59 b(Mak)m(e)38 b(sure)d(that)i(the)f(bug)g(rep)s(ort)f(includes)h(all)330 1641 y(information)31 b(y)m(ou)f(w)m(ould)h(need)f(to)h(\014x)f(this)g (kind)f(of)i(bug)f(for)g(someone)h(else.)275 1792 y(Please)36 b(mak)m(e)f(an)g(e\013ort)h(to)f(pro)s(duce)f(a)h(self-con)m(tained)i (rep)s(ort,)f(with)e(something)i(de\014nite)e(that)150 1902 y(can)29 b(b)s(e)g(tested)g(or)g(debugged.)40 b(V)-8 b(ague)31 b(queries)e(or)g(piecemeal)h(messages)g(are)g(di\016cult)f (to)h(act)g(on)f(and)150 2011 y(don't)h(help)g(the)h(dev)m(elopmen)m(t) h(e\013ort.)275 2141 y(If)e(y)m(our)g(bug)g(rep)s(ort)g(is)g(go)s(o)s (d,)h(w)m(e)g(will)g(do)f(our)g(b)s(est)g(to)i(help)e(y)m(ou)g(to)i (get)f(a)g(corrected)h(v)m(ersion)f(of)150 2251 y(the)j(soft)m(w)m (are;)j(if)d(the)g(bug)f(rep)s(ort)g(is)h(p)s(o)s(or,)g(w)m(e)g(w)m (on't)g(do)g(an)m(ything)g(ab)s(out)g(it)g(\(apart)g(from)f(asking)150 2360 y(y)m(ou)e(to)g(send)e(b)s(etter)i(bug)f(rep)s(orts\).)275 2491 y(If)19 b(y)m(ou)i(think)f(something)h(in)f(this)g(man)m(ual)h(is) f(unclear,)j(or)d(do)m(wnrigh)m(t)h(incorrect,)i(or)e(if)f(the)h (language)150 2600 y(needs)30 b(to)h(b)s(e)f(impro)m(v)m(ed,)h(please)g (also)g(send)f(a)h(note.)275 2730 y(Send)e(y)m(our)h(bug)g(rep)s(ort)g (to:)1567 2840 y(`)p Fj(bug-gss@gnu.org)p Fp(')150 3064 y Fo(1.8)68 b(Con)l(tributing)150 3223 y Fp(If)25 b(y)m(ou)h(w)m(an)m (t)g(to)g(submit)f(a)h(patc)m(h)g(for)f(inclusion)h({)f(from)h(solv)m (e)g(a)g(t)m(yp)s(o)g(y)m(ou)g(disco)m(v)m(ered,)i(up)c(to)i(adding)150 3333 y(supp)s(ort)38 b(for)h(a)h(new)e(feature)i({)g(y)m(ou)g(should)e (submit)h(it)h(as)f(a)h(bug)f(rep)s(ort)f(\(see)j(Section)f(1.7)g([Bug) 150 3442 y(Rep)s(orts],)32 b(page)g(5\).)44 b(There)30 b(are)i(some)g(things)f(that)h(y)m(ou)f(can)h(do)f(to)h(increase)g(the) f(c)m(hances)h(for)f(it)h(to)150 3552 y(b)s(e)e(included)f(in)h(the)h (o\016cial)h(pac)m(k)-5 b(age.)275 3682 y(Unless)41 b(y)m(our)g(patc)m (h)h(is)f(v)m(ery)h(small)g(\(sa)m(y)-8 b(,)46 b(under)40 b(10)i(lines\))g(w)m(e)f(require)g(that)h(y)m(ou)g(assign)g(the)150 3792 y(cop)m(yrigh)m(t)d(of)f(y)m(our)f(w)m(ork)h(to)g(the)g(F)-8 b(ree)39 b(Soft)m(w)m(are)f(F)-8 b(oundation.)63 b(This)37 b(is)g(to)i(protect)f(the)g(freedom)150 3901 y(of)44 b(the)g(pro)5 b(ject.)81 b(If)43 b(y)m(ou)h(ha)m(v)m(e)h(not)f(already) h(signed)e(pap)s(ers,)j(w)m(e)f(will)f(send)f(y)m(ou)h(the)g(necessary) 150 4011 y(information)31 b(when)e(y)m(ou)i(submit)e(y)m(our)i(con)m (tribution.)275 4141 y(F)-8 b(or)33 b(con)m(tributions)h(that)f(do)s (esn't)g(consist)g(of)g(actual)i(programming)d(co)s(de,)i(the)g(only)f (guidelines)150 4251 y(are)e(common)f(sense.)41 b(Use)31 b(it.)275 4381 y(F)-8 b(or)31 b(co)s(de)f(con)m(tributions,)h(a)g(n)m (um)m(b)s(er)e(of)i(st)m(yle)g(guides)g(will)f(help)g(y)m(ou:)225 4511 y Fn(\017)60 b Fp(Co)s(ding)26 b(St)m(yle.)40 b(F)-8 b(ollo)m(w)29 b(the)e(GNU)h(Standards)d(do)s(cumen)m(t)h(\(see)i (Section)g(\\top")f(in)g Fj(standards)p Fp(\).)330 4641 y(If)21 b(y)m(ou)g(normally)g(co)s(de)h(using)e(another)i(co)s(ding)f (standard,)h(there)f(is)g(no)g(problem,)i(but)d(y)m(ou)i(should)330 4751 y(use)i(`)p Fj(indent)p Fp(')g(to)h(reformat)g(the)g(co)s(de)g (\(see)g(Section)h(\\top")g(in)e Fj(indent)p Fp(\))f(b)s(efore)i (submitting)f(y)m(our)330 4860 y(w)m(ork.)225 4991 y Fn(\017)60 b Fp(Use)31 b(the)f(uni\014ed)f(di\013)h(format)h(`)p Fj(diff)f(-u)p Fp('.)225 5121 y Fn(\017)60 b Fp(Return)32 b(errors.)47 b(No)33 b(reason)g(whatso)s(ev)m(er)g(should)f(ab)s(ort)h (the)g(execution)g(of)g(the)g(library)-8 b(.)48 b(Ev)m(en)330 5230 y(memory)27 b(allo)s(cation)i(errors,)f(e.g.)41 b(when)26 b(mallo)s(c)i(return)e(NULL,)h(should)f(w)m(ork)h(although)h (result)330 5340 y(in)i(an)g(error)g(co)s(de.)p eop end %%Page: 6 10 TeXDict begin 6 9 bop 150 -116 a Fp(Chapter)30 b(1:)41 b(In)m(tro)s(duction)2592 b(6)225 299 y Fn(\017)60 b Fp(Design)38 b(with)g(thread)f(safet)m(y)i(in)e(mind.)62 b(Don't)38 b(use)g(global)g(v)-5 b(ariables.)64 b(Don't)38 b(ev)m(en)g(write)g(to)330 408 y(p)s(er-handle)27 b(global)j(v)-5 b(ariables)28 b(unless)g(the)g(do)s(cumen)m(ted)g(b)s(eha)m(viour)g(of) g(the)g(function)g(y)m(ou)h(write)330 518 y(is)h(to)i(write)e(to)h(the) g(p)s(er-handle)e(global)j(v)-5 b(ariable.)225 653 y Fn(\017)60 b Fp(Av)m(oid)38 b(using)f(the)g(C)g(math)g(library)-8 b(.)61 b(It)37 b(causes)h(problems)e(for)h(em)m(b)s(edded)f(implemen)m (tations,)330 762 y(and)30 b(in)g(most)h(situations)g(it)g(is)f(v)m (ery)h(easy)g(to)g(a)m(v)m(oid)h(using)e(it.)225 897 y Fn(\017)60 b Fp(Do)s(cumen)m(t)23 b(y)m(our)f(functions.)37 b(Use)23 b(commen)m(ts)g(b)s(efore)f(eac)m(h)h(function)f(headers,)h (that,)i(if)d(prop)s(erly)330 1006 y(formatted,)31 b(are)g(extracted)h (in)m(to)f(T)-8 b(exinfo)31 b(man)m(uals)f(and)g(GTK-DOC)g(w)m(eb)h (pages.)225 1141 y Fn(\017)60 b Fp(Supply)29 b(a)h(ChangeLog)h(and)f (NEWS)g(en)m(tries,)i(where)e(appropriate.)150 1373 y Fo(1.9)68 b(Planned)45 b(F)-11 b(eatures)150 1533 y Fp(This)33 b(is)i(also)g(kno)m(wn)e(as)i(the)f(\\to)s(do)h(list".)53 b(If)34 b(y)m(ou)h(lik)m(e)g(to)g(start)g(w)m(orking)f(on)g(an)m (ything,)i(please)f(let)150 1642 y(me)30 b(kno)m(w)h(so)f(w)m(ork)h (duplication)g(can)f(b)s(e)g(a)m(v)m(oided.)225 1777 y Fn(\017)60 b Fp(Supp)s(ort)43 b(non-blo)s(c)m(king)j(mo)s(de.)85 b(This)44 b(w)m(ould)h(b)s(e)g(an)g(API)g(extension.)86 b(It)45 b(could)h(w)m(ork)f(b)m(y)330 1886 y(forking)39 b(a)g(pro)s(cess)f(and)g(in)m(terface)j(to)e(it,)j(or)d(b)m(y)f(using)h (a)g(user-sp)s(eci\014c)f(daemon.)66 b(E.g.,)42 b(h)c(=)330 1996 y(ST)-8 b(AR)g(T\(accept)p 924 1996 28 4 v 42 w(sec)p 1082 1996 V 40 w(con)m(text\(...\)\),)35 b(FINISHED\(h\),)c(ret)f(=)g (FINISH\(h\),)h(ABOR)-8 b(T\(h\).)225 2130 y Fn(\017)60 b Fp(Supp)s(ort)28 b(loadable)k(mo)s(dules)d(via)i(dlop)s(en,)f(a'la)i (Solaris)f(GSS.)225 2265 y Fn(\017)60 b Fp(P)m(ort)31 b(to)g(Cyclone?)41 b(CCured?)p eop end %%Page: 7 11 TeXDict begin 7 10 bop 150 -116 a Fp(Chapter)30 b(2:)41 b(Preparation)2619 b(7)150 299 y Fm(2)80 b(Preparation)150 540 y Fp(T)-8 b(o)43 b(use)g(GSS,)f(y)m(ou)h(ha)m(v)m(e)h(to)g(p)s (erform)d(some)i(c)m(hanges)h(to)f(y)m(our)g(sources)g(and)f(the)h (build)f(system.)150 649 y(The)d(necessary)h(c)m(hanges)h(are)f(small)g (and)f(explained)g(in)h(the)f(follo)m(wing)i(sections.)70 b(A)m(t)40 b(the)g(end)f(of)150 759 y(this)31 b(c)m(hapter,)i(it)f(is)f (describ)s(ed)f(ho)m(w)i(the)f(library)g(is)h(initialized,)h(and)e(ho)m (w)g(the)h(requiremen)m(ts)f(of)h(the)150 869 y(library)e(are)h(v)m (eri\014ed.)275 1005 y(A)c(faster)h(w)m(a)m(y)g(to)h(\014nd)d(out)h(ho) m(w)h(to)g(adapt)g(y)m(our)f(application)i(for)e(use)g(with)g(GSS)g(ma) m(y)h(b)s(e)f(to)h(lo)s(ok)150 1115 y(at)j(the)g(examples)g(at)g(the)f (end)g(of)h(this)f(man)m(ual.)150 1351 y Fo(2.1)68 b(Header)150 1510 y Fp(All)38 b(standard)e(in)m(terfaces)j(\(data)f(t)m(yp)s(es)f (and)g(functions\))g(of)g(the)h(o\016cial)g(GSS)f(API)g(are)g (de\014ned)f(in)150 1620 y(the)29 b(header)f(\014le)h Fj(gss/api.h)p Fp(.)38 b(The)28 b(\014le)h(is)g(tak)m(en)h(v)m(erbatim) f(from)f(the)h(RF)m(C)g(\(after)h(correcting)g(a)f(few)150 1729 y(t)m(yp)s(os\))d(where)g(it)g(is)g(kno)m(wn)g(as)g Fj(gssapi.h)p Fp(.)37 b(Ho)m(w)m(ev)m(er,)29 b(to)e(b)s(e)e(able)i(to)f (co-exist)i(gracefully)f(with)f(other)150 1839 y(GSS-API)k(implemen)m (tation,)i(the)f(name)f Fj(gssapi.h)e Fp(w)m(as)j(c)m(hanged.)275 1976 y(The)g(header)h(\014le)h Fj(gss.h)e Fp(includes)g Fj(gss/api.h)p Fp(,)g(and)g(declares)j(a)e(few)g(non-standard)f (extensions)150 2085 y(\(b)m(y)25 b(including)f Fj(gss/ext.h)p Fp(\),)f(tak)m(es)j(care)f(of)g(including)f(header)g(\014les)g(related) h(to)g(all)h(supp)s(orted)c(mec)m(h-)150 2195 y(anisms)41 b(\(e.g.,)k Fj(gss/krb5.h)p Fp(\))39 b(and)h(\014nally)h(adds)g(C)p Fj(++)f Fp(namespace)i(protection)g(of)f(all)h(de\014nitions.)150 2304 y(Therefore,)27 b(including)e Fj(gss.h)g Fp(in)h(y)m(our)f(pro)5 b(ject)27 b(is)f(recommended)f(o)m(v)m(er)j Fj(gss/api.h)p Fp(.)36 b(If)26 b(using)f Fj(gss.h)150 2414 y Fp(instead)31 b(of)f Fj(gss/api.h)e Fp(causes)j(problems,)f(it)h(should)e(b)s(e)h (regarded)g(a)h(bug.)275 2551 y(Y)-8 b(ou)30 b(m)m(ust)f(include)h (either)g(\014le)g(in)g(all)g(programs)g(using)f(the)h(library)-8 b(,)30 b(either)g(directly)h(or)f(through)150 2660 y(some)h(other)f (header)h(\014le,)f(lik)m(e)i(this:)390 2797 y Fj(#include)46 b()275 2934 y Fp(The)34 b(name)h(space)g(of)g(GSS)f(is)h Fj(gss_*)e Fp(for)i(function)f(names,)i Fj(gss_*)d Fp(for)i(data)g(t)m (yp)s(es)g(and)f Fj(GSS_*)150 3043 y Fp(for)d(other)h(sym)m(b)s(ols.)44 b(In)31 b(addition)g(the)h(same)g(name)g(pre\014xes)e(with)i(one)f (prep)s(ended)f(underscore)h(are)150 3153 y(reserv)m(ed)g(for)f(in)m (ternal)h(use)f(and)g(should)f(nev)m(er)i(b)s(e)e(used)h(b)m(y)g(an)h (application.)275 3290 y(Eac)m(h)i(supp)s(orted)e(GSS)h(mec)m(hanism)h (ma)m(y)g(w)m(an)m(t)h(to)f(exp)s(ose)g(mec)m(hanism)g(sp)s(eci\014c)g (functionalit)m(y)-8 b(,)150 3399 y(and)31 b(can)h(do)g(so)g(through)f (one)h(or)f(more)h(header)g(\014les)f(under)g(the)g Fj(gss/)g Fp(directory)-8 b(.)46 b(The)31 b(Kerb)s(eros)g(5)150 3509 y(mec)m(hanism)h(uses)g(the)h(\014le)f Fj(gss/krb5.h)p Fp(,)e(but)h(again,)j(it)f(is)f(included)g(\(with)g(C)p Fj(++)f Fp(namespace)i(\014xes\))150 3618 y(from)d Fj(gss.h)p Fp(.)150 3854 y Fo(2.2)68 b(Initialization)150 4014 y Fp(GSS)30 b(do)s(es)g(not)g(need)g(to)i(b)s(e)d(initialized)j(b)s (efore)e(it)h(can)g(b)s(e)f(used.)275 4150 y(In)k(order)h(to)i(tak)m(e) g(adv)-5 b(an)m(tage)38 b(of)d(the)h(in)m(ternationalisation)j (features)c(in)h(GSS,)f(e.g.)57 b(translated)150 4260 y(error)21 b(messages,)k(the)d(application)g(m)m(ust)g(set)g(the)g (curren)m(t)f(lo)s(cale)i(using)e Fj(setlocale\(\))e Fp(b)s(efore)i(calling,)150 4370 y(e.g.,)30 b Fj (gss_display_status\(\))p Fp(.)k(This)27 b(is)g(t)m(ypically)j(done)d (in)g Fj(main\(\))f Fp(as)i(in)f(the)h(follo)m(wing)h(example.)390 4506 y Fj(#include)46 b()390 4616 y(#include)g()390 4726 y(...)485 4835 y(setlocale)g(\(LC_ALL,)f(""\);)150 5071 y Fo(2.3)68 b(V)-11 b(ersion)45 b(Chec)l(k)150 5230 y Fp(It)e(is)g(often)h(desirable)f(to)g(c)m(hec)m(k)i(that)f(the)f(v)m (ersion)g(of)g(GSS)g(used)f(is)h(indeed)f(one)i(whic)m(h)e(\014ts)h (all)150 5340 y(requiremen)m(ts.)f(Ev)m(en)31 b(with)g(binary)f (compatibilit)m(y)j(new)d(features)h(ma)m(y)g(ha)m(v)m(e)h(b)s(een)e (in)m(tro)s(duced)h(but)p eop end %%Page: 8 12 TeXDict begin 8 11 bop 150 -116 a Fp(Chapter)30 b(2:)41 b(Preparation)2619 b(8)150 299 y(due)31 b(to)i(problem)e(with)h(the)g (dynamic)f(link)m(er)i(an)e(old)h(v)m(ersion)h(is)f(actually)h(used.)45 b(So)31 b(y)m(ou)i(ma)m(y)f(w)m(an)m(t)150 408 y(to)i(c)m(hec)m(k)g (that)g(the)f(v)m(ersion)h(is)f(ok)-5 b(a)m(y)34 b(righ)m(t)f(after)h (program)f(startup.)48 b(The)32 b(function)h(is)g(called)h Fj(gss_)150 518 y(check_version\(\))20 b Fp(and)k(is)g(describ)s(ed)f (formally)i(in)e(See)i(Chapter)e(4)i([Extended)f(GSS)f(API],)i(page)g (57.)275 653 y(The)i(normal)h(w)m(a)m(y)h(to)f(use)g(the)g(function)f (is)h(to)h(put)e(something)h(similar)h(to)f(the)g(follo)m(wing)i(early) e(in)150 762 y(y)m(our)i Fj(main\(\))p Fp(:)390 897 y Fj(#include)46 b()390 1006 y(...)485 1116 y(if)i (\(!gss_check_version)42 b(\(GSS_VERSION\)\))581 1225 y({)676 1335 y(printf)k(\("gss_check_version\(\))c(failed:\\n")1058 1445 y("Header)k(file)h(incompatible)d(with)j(shared)f(library.\\n"\);) 676 1554 y(exit\(EXIT_FAILURE\);)581 1664 y(})150 1896 y Fo(2.4)68 b(Building)45 b(the)g(source)150 2056 y Fp(If)26 b(y)m(ou)h(w)m(an)m(t)h(to)f(compile)h(a)f(source)f(\014le)h(that)g (includes)f(the)h Fj(gss.h)e Fp(header)i(\014le,)h(y)m(ou)f(m)m(ust)f (mak)m(e)i(sure)150 2165 y(that)g(the)g(compiler)g(can)g(\014nd)d(it)j (in)g(the)f(directory)h(hierarc)m(h)m(y)-8 b(.)41 b(This)27 b(is)g(accomplished)h(b)m(y)g(adding)f(the)150 2275 y(path)i(to)h(the)g (directory)g(in)f(whic)m(h)h(the)f(header)h(\014le)f(is)h(lo)s(cated)h (to)f(the)g(compilers)f(include)h(\014le)f(searc)m(h)150 2384 y(path)h(\(via)h(the)g Fj(-I)f Fp(option\).)275 2519 y(Ho)m(w)m(ev)m(er,)h(the)f(path)f(to)h(the)g(include)f(\014le)h (is)f(determined)g(at)h(the)g(time)g(the)f(source)h(is)f(con\014gured.) 150 2628 y(T)-8 b(o)32 b(solv)m(e)h(this)f(problem,)f(GSS)g(uses)g(the) h(external)h(pac)m(k)-5 b(age)33 b Fj(pkg-config)c Fp(that)j(kno)m(ws)g (the)g(path)f(to)150 2738 y(the)g(include)g(\014le)g(and)f(other)i (con\014guration)f(options.)43 b(The)30 b(options)h(that)h(need)f(to)g (b)s(e)g(added)f(to)i(the)150 2848 y(compiler)25 b(in)m(v)m(o)s(cation) h(at)f(compile)g(time)g(are)f(output)g(b)m(y)g(the)h Fj(--cflags)c Fp(option)k(to)g Fj(pkg-config)j(gss)p Fp(.)150 2957 y(The)i(follo)m(wing)i(example)f(sho)m(ws)f(ho)m(w)g(it)h (can)g(b)s(e)f(used)f(at)i(the)g(command)f(line:)390 3092 y Fj(gcc)47 b(-c)g(foo.c)f(`pkg-config)f(gss)i(--cflags`)275 3226 y Fp(Adding)35 b(the)g(output)h(of)g(`)p Fj(pkg-config)27 b(gss)j(--cflags)p Fp(')k(to)i(the)g(compilers)g(command)g(line)g(will) 150 3336 y(ensure)30 b(that)h(the)f(compiler)h(can)g(\014nd)e(the)h Fj(gss.h)f Fp(header)h(\014le.)275 3470 y(A)23 b(similar)g(problem)g(o) s(ccurs)g(when)f(linking)h(the)g(program)g(with)g(the)g(library)-8 b(.)38 b(Again,)26 b(the)d(compiler)150 3580 y(has)j(to)g(\014nd)f(the) h(library)f(\014les.)40 b(F)-8 b(or)26 b(this)g(to)h(w)m(ork,)g(the)f (path)g(to)h(the)f(library)f(\014les)h(has)g(to)h(b)s(e)e(added)g(to) 150 3689 y(the)i(library)g(searc)m(h)g(path)g(\(via)h(the)f Fj(-L)g Fp(option\).)40 b(F)-8 b(or)28 b(this,)g(the)f(option)g Fj(--libs)f Fp(to)h Fj(pkg-config)h(gss)150 3799 y Fp(can)e(b)s(e)f (used.)39 b(F)-8 b(or)26 b(con)m(v)m(enience,)j(this)d(option)g(also)h (outputs)f(all)g(other)g(options)h(that)f(are)g(required)f(to)150 3909 y(link)h(the)h(program)f(with)h(the)f(GSS)g(libarary)h(\(for)f (instance,)j(the)d(`)p Fj(-lshishi)p Fp(')f(option\).)40 b(The)26 b(example)150 4018 y(sho)m(ws)k(ho)m(w)h(to)g(link)f Fj(foo.o)f Fp(with)h(GSS)g(in)m(to)h(a)g(program)f Fj(foo)p Fp(.)390 4153 y Fj(gcc)47 b(-o)g(foo)g(foo.o)f(`pkg-config)f(gss)i (--libs`)275 4287 y Fp(Of)29 b(course)i(y)m(ou)f(can)h(also)g(com)m (bine)g(b)s(oth)e(examples)i(to)g(a)g(single)f(command)g(b)m(y)h(sp)s (ecifying)f(b)s(oth)150 4397 y(options)h(to)g Fj(pkg-config)p Fp(:)390 4531 y Fj(gcc)47 b(-o)g(foo)g(foo.c)f(`pkg-config)f(gss)i (--cflags)f(--libs`)150 4764 y Fo(2.5)68 b(Out)45 b(of)g(Memory)g (handling)150 4923 y Fp(The)31 b(GSS)h(API)f(do)s(es)h(not)g(ha)m(v)m (e)h(a)f(standard)f(error)h(co)s(de)g(for)g(the)g(out)g(of)g(memory)g (error)f(condition.)150 5033 y(This)f(library)g(will)g(return)g Fj(GSS_S_FAILURE)c Fp(and)k(set)h Fj(minor_status)c Fp(to)k(ENOMEM.)p eop end %%Page: 9 13 TeXDict begin 9 12 bop 150 -116 a Fp(Chapter)30 b(3:)41 b(Standard)29 b(GSS)h(API)2330 b(9)150 299 y Fm(3)80 b(Standard)53 b(GSS)g(API)150 630 y Fo(3.1)68 b(Simple)46 b(Data)g(T)l(yp)t(es)150 789 y Fp(The)30 b(follo)m(wing)i(con)m(v)m(en) m(tions)g(are)f(used)e(b)m(y)i(the)f(GSS-API)g(C-language)i(bindings:) 150 988 y Fi(3.1.1)63 b(In)m(teger)40 b(t)m(yp)s(es)150 1135 y Fp(GSS-API)30 b(uses)g(the)g(follo)m(wing)i(in)m(teger)g(data)f (t)m(yp)s(e:)293 1269 y Fj(OM_uint32)189 b(32-bit)46 b(unsigned)f(integer)150 1468 y Fi(3.1.2)63 b(String)41 b(and)g(similar)h(data)150 1615 y Fp(Man)m(y)31 b(of)g(the)g(GSS-API)f (routines)h(tak)m(e)h(argumen)m(ts)f(and)f(return)f(v)-5 b(alues)31 b(that)h(describ)s(e)e(con)m(tiguous)150 1725 y(o)s(ctet-strings.)49 b(All)33 b(suc)m(h)f(data)h(is)g(passed)f(b)s (et)m(w)m(een)h(the)g(GSS-API)f(and)g(the)h(caller)g(using)f(the)h Fj(gss_)150 1834 y(buffer_t)28 b Fp(data)j(t)m(yp)s(e.)41 b(This)30 b(data)h(t)m(yp)s(e)f(is)g(a)h(p)s(oin)m(ter)g(to)g(a)f (bu\013er)g(descriptor,)g(whic)m(h)g(consists)h(of)g(a)150 1944 y(length)i(\014eld)f(that)h(con)m(tains)h(the)f(total)h(n)m(um)m (b)s(er)d(of)i(b)m(ytes)g(in)f(the)h(datum,)g(and)f(a)h(v)-5 b(alue)33 b(\014eld)f(whic)m(h)150 2054 y(con)m(tains)g(a)e(p)s(oin)m (ter)h(to)g(the)f(actual)i(datum:)293 2188 y Fj(typedef)46 b(struct)g(gss_buffer_desc_struct)c({)436 2297 y(size_t)190 b(length;)436 2407 y(void)286 b(*value;)293 2517 y(})48 b(gss_buffer_desc,)43 b(*gss_buffer_t;)275 2651 y Fp(Storage)j(for)g (data)g(returned)e(to)j(the)e(application)i(b)m(y)f(a)g(GSS-API)f (routine)g(using)g(the)h Fj(gss_)150 2761 y(buffer_t)29 b Fp(con)m(v)m(en)m(tions)34 b(is)e(allo)s(cated)h(b)m(y)f(the)g (GSS-API)f(routine.)44 b(The)31 b(application)i(ma)m(y)f(free)g(this) 150 2870 y(storage)e(b)m(y)f(in)m(v)m(oking)h(the)f Fj (gss_release_buffer)23 b Fp(routine.)41 b(Allo)s(cation)30 b(of)f(the)g Fj(gss_buffer_desc)150 2980 y Fp(ob)5 b(ject)26 b(is)f(alw)m(a)m(ys)h(the)f(resp)s(onsibilit)m(y)g(of)g(the)g (application;)j(un)m(used)c Fj(gss_buffer_desc)d Fp(ob)5 b(jects)25 b(ma)m(y)150 3089 y(b)s(e)30 b(initialized)i(to)f(the)g(v)-5 b(alue)30 b Fj(GSS_C_EMPTY_BUFFER)p Fp(.)150 3288 y Fi(3.1.2.1)63 b(Opaque)41 b(data)f(t)m(yp)s(es)150 3435 y Fp(Certain)21 b(m)m(ultiple-w)m(ord)h(data)g(items)g(are)g(considered)f(opaque)g (data)h(t)m(yp)s(es)g(at)g(the)f(GSS-API,)g(b)s(ecause)150 3545 y(their)k(in)m(ternal)g(structure)g(has)f(no)h(signi\014cance)h (either)f(to)h(the)f(GSS-API)f(or)h(to)h(the)f(caller.)40 b(Examples)150 3654 y(of)24 b(suc)m(h)g(opaque)g(data)h(t)m(yp)s(es)f (are)g(the)g(input)p 1699 3654 28 4 v 39 w(tok)m(en)h(parameter)g(to)f Fj(gss_init_sec_context)19 b Fp(\(whic)m(h)150 3764 y(is)27 b(opaque)h(to)g(the)f(caller\),)j(and)c(the)h(input)p 1653 3764 V 40 w(message)h(parameter)g(to)f Fj(gss_wrap)e Fp(\(whic)m(h)j(is)f(opaque)g(to)150 3874 y(the)j(GSS-API\).)g(Opaque)f (data)i(is)f(passed)f(b)s(et)m(w)m(een)i(the)f(GSS-API)f(and)g(the)h (application)h(using)f(the)150 3983 y Fj(gss_buffer_t)d Fp(datat)m(yp)s(e.)150 4182 y Fi(3.1.2.2)63 b(Character)40 b(strings)150 4329 y Fp(Certain)27 b(m)m(ultiple-w)m(ord)h(data)g (items)f(ma)m(y)h(b)s(e)f(regarded)g(as)g(simple)g(ISO)f(Latin-1)i(c)m (haracter)h(strings.)150 4439 y(Examples)j(are)f(the)h(prin)m(table)g (strings)f(passed)g(to)i Fj(gss_import_name)27 b Fp(via)32 b(the)g(input)p 3235 4439 V 39 w(name)p 3486 4439 V 40 w(bu\013er)150 4548 y(parameter.)91 b(Some)48 b(GSS-API)e(routines)h (also)h(return)e(c)m(haracter)j(strings.)91 b(All)48 b(suc)m(h)e(c)m(haracter)150 4658 y(strings)d(are)h(passed)g(b)s(et)m (w)m(een)g(the)g(application)h(and)e(the)g(GSS-API)g(implemen)m(tation) j(using)d(the)150 4767 y Fj(gss_buffer_t)27 b Fp(datat)m(yp)s(e,)32 b(whic)m(h)e(is)g(a)h(p)s(oin)m(ter)f(to)h(a)g Fj(gss_buffer_desc)26 b Fp(ob)5 b(ject.)275 4902 y(When)39 b(a)i Fj(gss_buffer_desc)36 b Fp(ob)5 b(ject)41 b(describ)s(es)e(a)h(prin)m(table)h(string,)h(the)e (length)h(\014eld)f(of)g(the)150 5011 y Fj(gss_buffer_desc)22 b Fp(should)k(only)g(coun)m(t)h(prin)m(table)g(c)m(haracters)g(within)f (the)h(string.)39 b(In)26 b(particular,)i(a)150 5121 y(trailing)j(NUL)g(c)m(haracter)h(should)d(NOT)h(b)s(e)g(included)g(in) g(the)g(length)h(coun)m(t,)h(nor)d(should)h(either)h(the)150 5230 y(GSS-API)h(implemen)m(tation)i(or)e(the)h(application)h(assume)e (the)h(presence)f(of)h(an)f(uncoun)m(ted)g(trailing)150 5340 y(NUL.)p eop end %%Page: 10 14 TeXDict begin 10 13 bop 150 -116 a Fp(Chapter)30 b(3:)41 b(Standard)29 b(GSS)h(API)2284 b(10)150 299 y Fi(3.1.3)63 b(Ob)7 b(ject)40 b(Iden)m(ti\014ers)150 446 y Fp(Certain)g(GSS-API)f (pro)s(cedures)g(tak)m(e)j(parameters)e(of)g(the)g(t)m(yp)s(e)g Fj(gss_OID)p Fp(,)h(or)e(Ob)5 b(ject)40 b(iden)m(ti\014er.)150 555 y(This)30 b(is)h(a)h(t)m(yp)s(e)f(con)m(taining)h(ISO-de\014ned)d (tree-)j(structured)e(v)-5 b(alues,)32 b(and)e(is)h(used)f(b)m(y)h(the) g(GSS-API)150 665 y(caller)38 b(to)f(select)h(an)e(underlying)g (securit)m(y)h(mec)m(hanism)g(and)f(to)h(sp)s(ecify)f(namespaces.)59 b(A)37 b(v)-5 b(alue)37 b(of)150 775 y(t)m(yp)s(e)31 b Fj(gss_OID)d Fp(has)i(the)h(follo)m(wing)g(structure:)293 956 y Fj(typedef)46 b(struct)g(gss_OID_desc_struct)d({)436 1066 y(OM_uint32)141 b(length;)436 1176 y(void)381 b(*elements;)293 1285 y(})48 b(gss_OID_desc,)c(*gss_OID;)275 1467 y Fp(The)35 b(elemen)m(ts)i(\014eld)e(of)h(this)g(structure)f(p)s(oin)m(ts)g(to)i (the)f(\014rst)f(b)m(yte)h(of)g(an)f(o)s(ctet)j(string)d(con)m(tain-) 150 1576 y(ing)29 b(the)f(ASN.1)h(BER)g(enco)s(ding)f(of)h(the)f(v)-5 b(alue)29 b(p)s(ortion)f(of)h(the)g(normal)f(BER)h(TL)-10 b(V)28 b(enco)s(ding)g(of)h(the)150 1686 y Fj(gss_OID)p Fp(.)36 b(The)23 b(length)h(\014eld)f(con)m(tains)i(the)f(n)m(um)m(b)s (er)e(of)i(b)m(ytes)g(in)f(this)g(v)-5 b(alue.)39 b(F)-8 b(or)25 b(example,)g(the)f Fj(gss_)150 1796 y(OID)e Fp(v)-5 b(alue)24 b(corresp)s(onding)e(to)i Fj(iso\(1\))29 b (identified-organization)o(\(3\))24 b(icd-ecma\(12\))j(member-)150 1905 y(company\(2\))h(dec\(1011\))f(cryptoAlgorithms\(7\))f(DASS\(5\))p Fp(,)21 b(meaning)g(the)h(D)m(ASS)f(X.509)i(authen-)150 2015 y(tication)36 b(mec)m(hanism,)g(has)f(a)f(length)h(\014eld)f(of)h (7)g(and)f(an)g(elemen)m(ts)i(\014eld)e(p)s(oin)m(ting)g(to)i(sev)m(en) f(o)s(ctets)150 2124 y(con)m(taining)23 b(the)f(follo)m(wing)h(o)s (ctal)g(v)-5 b(alues:)37 b(53,14,2,207,163,7,)q(5.)44 b(GSS-API)21 b(implemen)m(tations)i(should)150 2234 y(pro)m(vide)h (constan)m(t)i Fj(gss_OID)c Fp(v)-5 b(alues)25 b(to)g(allo)m(w)h (applications)g(to)f(request)f(an)m(y)h(supp)s(orted)d(mec)m(hanism,) 150 2344 y(although)33 b(applications)i(are)e(encouraged)h(on)f(p)s (ortabilit)m(y)h(grounds)e(to)i(accept)g(the)f(default)h(mec)m(ha-)150 2453 y(nism.)59 b Fj(gss_OID)35 b Fp(v)-5 b(alues)37 b(should)f(also)i(b)s(e)e(pro)m(vided)h(to)g(allo)m(w)i(applications)f (to)f(sp)s(ecify)g(particular)150 2563 y(name)j(t)m(yp)s(es)g(\(see)h (section)h(3.10\).)72 b(Applications)41 b(should)e(treat)i Fj(gss_OID_desc)c Fp(v)-5 b(alues)40 b(returned)150 2672 y(b)m(y)f(GSS-API)f(routines)h(as)h(read-only)-8 b(.)67 b(In)38 b(particular,)k(the)d(application)i(should)d(not)h(attempt)h (to)150 2782 y(deallo)s(cate)33 b(them)d(with)g(free\(\).)150 3028 y Fi(3.1.4)63 b(Ob)7 b(ject)40 b(Iden)m(ti\014er)h(Sets)150 3175 y Fp(Certain)f(GSS-API)g(pro)s(cedures)e(tak)m(e)k(parameters)e (of)h(the)f(t)m(yp)s(e)g Fj(gss_OID_set)p Fp(.)67 b(This)39 b(t)m(yp)s(e)h(rep-)150 3285 y(resen)m(ts)d(one)g(or)g(more)f(ob)5 b(ject)38 b(iden)m(ti\014ers)e(\(see)i([Ob)5 b(ject)37 b(Iden)m(ti\014ers],)h(page)g(10\).)60 b(A)37 b Fj(gss_OID_set)150 3395 y Fp(ob)5 b(ject)31 b(has)f(the)h(follo)m(wing)h(structure:)293 3576 y Fj(typedef)46 b(struct)g(gss_OID_set_desc_struct)c({)436 3686 y(size_t)190 b(count;)436 3796 y(gss_OID)142 b(elements;)293 3905 y(})48 b(gss_OID_set_desc,)43 b(*gss_OID_set;)275 4087 y Fp(The)38 b(coun)m(t)i(\014eld)e(con)m(tains)i(the)f(n)m(um)m(b) s(er)f(of)h(OIDs)g(within)f(the)h(set.)67 b(The)39 b(elemen)m(ts)h (\014eld)f(is)g(a)150 4196 y(p)s(oin)m(ter)c(to)h(an)e(arra)m(y)i(of)f Fj(gss_OID_desc)c Fp(ob)5 b(jects,)37 b(eac)m(h)f(of)f(whic)m(h)g (describ)s(es)f(a)h(single)h(OID.)f Fj(gss_)150 4306 y(OID_set)29 b Fp(v)-5 b(alues)31 b(are)g(used)f(to)i(name)f(the)g(a)m (v)-5 b(ailable)33 b(mec)m(hanisms)e(supp)s(orted)e(b)m(y)i(the)g (GSS-API,)f(to)150 4416 y(request)25 b(the)g(use)f(of)h(sp)s(eci\014c)f (mec)m(hanisms,)i(and)e(to)i(indicate)g(whic)m(h)e(mec)m(hanisms)h(a)g (giv)m(en)g(creden)m(tial)150 4525 y(supp)s(orts.)275 4707 y(All)39 b(OID)f(sets)h(returned)e(to)i(the)g(application)h(b)m(y) e(GSS-API)g(are)h(dynamic)f(ob)5 b(jects)39 b(\(the)g Fj(gss_)150 4817 y(OID_set_desc)p Fp(,)29 b(the)j Fj(")p Fp(elemen)m(ts)p Fj(")g Fp(arra)m(y)h(of)e(the)h(set,)h(and)e(the)h Fj(")p Fp(elemen)m(ts)p Fj(")h Fp(arra)m(y)f(of)g(eac)m(h)h(mem)m(b)s (er)150 4926 y(OID)26 b(are)g(all)h(dynamically)g(allo)s(cated\),)j (and)25 b(this)h(storage)i(m)m(ust)e(b)s(e)f(deallo)s(cated)j(b)m(y)e (the)h(application)150 5036 y(using)j(the)g Fj(gss_release_oid_set)c Fp(routine.)150 5339 y Fo(3.2)68 b(Complex)46 b(Data)g(T)l(yp)t(es)p eop end %%Page: 11 15 TeXDict begin 11 14 bop 150 -116 a Fp(Chapter)30 b(3:)41 b(Standard)29 b(GSS)h(API)2284 b(11)150 299 y Fi(3.2.1)63 b(Creden)m(tials)150 446 y Fp(A)35 b(creden)m(tial)g(handle)f(is)h(a)g (caller-opaque)h(atomic)g(datum)e(that)h(iden)m(ti\014es)g(a)g(GSS-API) e(creden)m(tial)150 555 y(data)e(structure.)40 b(It)31 b(is)f(represen)m(ted)h(b)m(y)f(the)g(caller-)i(opaque)f(t)m(yp)s(e)g Fj(gss_cred_id_t)p Fp(.)275 694 y(GSS-API)37 b(creden)m(tials)h(can)g (con)m(tain)h(mec)m(hanism-sp)s(eci\014c)f(principal)f(authen)m (tication)j(data)e(for)150 804 y(m)m(ultiple)f(mec)m(hanisms.)59 b(A)36 b(GSS-API)g(creden)m(tial)i(is)e(comp)s(osed)g(of)g(a)h(set)g (of)f(creden)m(tial-elemen)m(ts,)150 913 y(eac)m(h)f(of)g(whic)m(h)f (is)g(applicable)h(to)g(a)f(single)h(mec)m(hanism.)53 b(A)34 b(creden)m(tial)i(ma)m(y)f(con)m(tain)g(at)g(most)g(one)150 1023 y(creden)m(tial-elemen)m(t)f(for)d(eac)m(h)h(supp)s(orted)d(mec)m (hanism.)43 b(A)31 b(creden)m(tial-elemen)m(t)k(iden)m(ti\014es)c(the)g (data)150 1133 y(needed)d(b)m(y)g(a)h(single)g(mec)m(hanism)g(to)g (authen)m(ticate)i(a)d(single)h(principal,)g(and)f(conceptually)i(con)m (tains)150 1242 y(t)m(w)m(o)35 b(creden)m(tial-references)h(that)e (describ)s(e)f(the)h(actual)h(mec)m(hanism-sp)s(eci\014c)f(authen)m (tication)i(data,)150 1352 y(one)22 b(to)h(b)s(e)f(used)f(b)m(y)h (GSS-API)f(for)h(initiating)i(con)m(texts,)h(and)d(one)g(to)h(b)s(e)e (used)g(for)h(accepting)i(con)m(texts.)150 1461 y(F)-8 b(or)38 b(mec)m(hanisms)g(that)g(do)f(not)h(distinguish)f(b)s(et)m(w)m (een)h(acceptor)h(and)e(initiator)i(creden)m(tials,)i(b)s(oth)150 1571 y(references)31 b(w)m(ould)f(p)s(oin)m(t)g(to)h(the)g(same)g (underlying)e(mec)m(hanism-sp)s(eci\014c)i(authen)m(tication)h(data.) 275 1710 y(Creden)m(tials)41 b(describ)s(e)f(a)h(set)g(of)g(mec)m (hanism-sp)s(eci\014c)g(principals,)i(and)d(giv)m(e)i(their)e(holder)h (the)150 1819 y(abilit)m(y)35 b(to)f(act)h(as)e(an)m(y)h(of)g(those)g (principals.)49 b(All)34 b(principal)f(iden)m(tities)i(asserted)f(b)m (y)f(a)h(single)g(GSS-)150 1929 y(API)40 b(creden)m(tial)j(should)c(b)s (elong)i(to)h(the)f(same)g(en)m(tit)m(y)-8 b(,)45 b(although)c (enforcemen)m(t)h(of)f(this)g(prop)s(ert)m(y)150 2038 y(is)34 b(an)g(implemen)m(tation-sp)s(eci\014c)h(matter.)52 b(The)34 b(GSS-API)f(do)s(es)g(not)h(mak)m(e)h(the)f(actual)i(creden)m (tials)150 2148 y(a)m(v)-5 b(ailable)40 b(to)f(applications;)k(instead) 38 b(a)h(creden)m(tial)g(handle)f(is)g(used)f(to)h(iden)m(tify)h(a)f (particular)g(cre-)150 2258 y(den)m(tial,)g(held)e(in)m(ternally)h(b)m (y)e(GSS-API.)h(The)f(com)m(bination)i(of)f(GSS-API)f(creden)m(tial)i (handle)f(and)150 2367 y(mec)m(hanism)g(iden)m(ti\014es)f(the)h (principal)f(whose)g(iden)m(tit)m(y)i(will)e(b)s(e)g(asserted)g(b)m(y)h (the)f(creden)m(tial)i(when)150 2477 y(used)30 b(with)g(that)h(mec)m (hanism.)275 2616 y(The)44 b Fj(gss_init_sec_context)39 b Fp(and)45 b Fj(gss_accept_sec_context)38 b Fp(routines)45 b(allo)m(w)h(the)f(v)-5 b(alue)150 2725 y Fj(GSS_C_NO_CREDENTIAL)32 b Fp(to)37 b(b)s(e)g(sp)s(eci\014ed)f(as)h(their)g(creden)m(tial)i (handle)d(parameter.)61 b(This)36 b(sp)s(ecial)150 2835 y(creden)m(tial-handle)c(indicates)f(a)g(desire)f(b)m(y)g(the)h (application)h(to)f(act)g(as)g(a)g(default)f(principal.)150 3038 y Fi(3.2.2)63 b(Con)m(texts)150 3185 y Fp(The)29 b Fj(gss_ctx_id_t)e Fp(data)j(t)m(yp)s(e)g(con)m(tains)h(a)f (caller-opaque)i(atomic)g(v)-5 b(alue)30 b(that)g(iden)m(ti\014es)g (one)h(end)150 3295 y(of)g(a)f(GSS-API)g(securit)m(y)h(con)m(text.)275 3434 y(The)h(securit)m(y)h(con)m(text)i(holds)d(state)i(information)f (ab)s(out)g(eac)m(h)h(end)e(of)h(a)g(p)s(eer)f(comm)m(unication,)150 3543 y(including)e(cryptographic)h(state)g(information.)150 3747 y Fi(3.2.3)63 b(Authen)m(tication)39 b(tok)m(ens)150 3894 y Fp(A)24 b(tok)m(en)i(is)e(a)h(caller-opaque)h(t)m(yp)s(e)f(that) g(GSS-API)e(uses)h(to)h(main)m(tain)h(sync)m(hronization)f(b)s(et)m(w)m (een)g(the)150 4003 y(con)m(text)32 b(data)f(structures)e(at)i(eac)m(h) h(end)d(of)h(a)h(GSS-API)e(securit)m(y)i(con)m(text.)43 b(The)29 b(tok)m(en)j(is)e(a)g(crypto-)150 4113 y(graphically)h (protected)h(o)s(ctet-string,)g(generated)f(b)m(y)f(the)h(underlying)e (mec)m(hanism)i(at)g(one)f(end)g(of)h(a)150 4222 y(GSS-API)22 b(securit)m(y)i(con)m(text)h(for)e(use)g(b)m(y)g(the)g(p)s(eer)f(mec)m (hanism)h(at)h(the)f(other)h(end.)37 b(Encapsulation)24 b(\(if)150 4332 y(required\))30 b(and)g(transfer)g(of)h(the)g(tok)m(en) g(are)g(the)g(resp)s(onsibilit)m(y)f(of)h(the)g(p)s(eer)f (applications.)42 b(A)31 b(tok)m(en)150 4442 y(is)f(passed)g(b)s(et)m (w)m(een)h(the)g(GSS-API)f(and)f(the)i(application)h(using)e(the)g Fj(gss_buffer_t)d Fp(con)m(v)m(en)m(tions.)150 4645 y Fi(3.2.4)63 b(In)m(terpro)s(cess)41 b(tok)m(ens)150 4792 y Fp(Certain)28 b(GSS-API)f(routines)h(are)g(in)m(tended)g(to)g (transfer)f(data)i(b)s(et)m(w)m(een)f(pro)s(cesses)g(in)f(m)m(ulti-pro) s(cess)150 4902 y(programs.)38 b(These)23 b(routines)f(use)h(a)g (caller-opaque)i(o)s(ctet-string,)i(generated)d(b)m(y)e(the)i(GSS-API)e (in)h(one)150 5011 y(pro)s(cess)g(for)g(use)f(b)m(y)h(the)h(GSS-API)e (in)h(another)g(pro)s(cess.)38 b(The)23 b(calling)h(application)h(is)e (resp)s(onsible)f(for)150 5121 y(transferring)h(suc)m(h)h(tok)m(ens)h (b)s(et)m(w)m(een)f(pro)s(cesses)g(in)f(an)h(OS-sp)s(eci\014c)f (manner.)38 b(Note)25 b(that,)h(while)e(GSS-)150 5230 y(API)g(implemen)m(tors)h(are)g(encouraged)g(to)g(a)m(v)m(oid)h (placing)f(sensitiv)m(e)h(information)f(within)f(in)m(terpro)s(cess)150 5340 y(tok)m(ens,)50 b(or)c(to)g(cryptographically)h(protect)f(them,)k (man)m(y)c(implemen)m(tations)g(will)g(b)s(e)f(unable)g(to)p eop end %%Page: 12 16 TeXDict begin 12 15 bop 150 -116 a Fp(Chapter)30 b(3:)41 b(Standard)29 b(GSS)h(API)2284 b(12)150 299 y(a)m(v)m(oid)46 b(placing)e(k)m(ey)h(material)h(or)e(other)g(sensitiv)m(e)i(data)e (within)g(them.)82 b(It)44 b(is)g(the)g(application's)150 408 y(resp)s(onsibilit)m(y)37 b(to)g(ensure)g(that)g(in)m(terpro)s (cess)g(tok)m(ens)h(are)f(protected)h(in)f(transit,)i(and)d (transferred)150 518 y(only)d(to)g(pro)s(cesses)g(that)g(are)g(trust)m (w)m(orth)m(y)-8 b(.)49 b(An)32 b(in)m(terpro)s(cess)h(tok)m(en)h(is)f (passed)f(b)s(et)m(w)m(een)h(the)g(GSS-)150 628 y(API)d(and)g(the)h (application)g(using)f(the)h Fj(gss_buffer_t)c Fp(con)m(v)m(en)m (tions.)150 827 y Fi(3.2.5)63 b(Names)150 974 y Fp(A)42 b(name)g(is)g(used)g(to)h(iden)m(tify)f(a)h(p)s(erson)d(or)i(en)m(tit)m (y)-8 b(.)78 b(GSS-API)42 b(authen)m(ticates)i(the)f(relationship)150 1084 y(b)s(et)m(w)m(een)31 b(a)g(name)f(and)g(the)h(en)m(tit)m(y)h (claiming)f(the)g(name.)275 1219 y(Since)h(di\013eren)m(t)h(authen)m (tication)h(mec)m(hanisms)f(ma)m(y)g(emplo)m(y)g(di\013eren)m(t)g (namespaces)g(for)f(iden)m(ti-)150 1328 y(fying)25 b(their)f (principals,)i(GSSAPI's)e(naming)h(supp)s(ort)e(is)h(necessarily)i (complex)f(in)g(m)m(ulti-mec)m(hanism)150 1438 y(en)m(vironmen)m(ts)j (\(or)f(ev)m(en)h(in)f(some)g(single-mec)m(hanism)i(en)m(vironmen)m(ts) e(where)g(the)g(underlying)f(mec)m(h-)150 1547 y(anism)k(supp)s(orts)f (m)m(ultiple)i(namespaces\).)275 1682 y(Tw)m(o)f(distinct)h(represen)m (tations)g(are)g(de\014ned)e(for)h(names:)225 1817 y Fn(\017)60 b Fp(An)40 b(in)m(ternal)i(form.)71 b(This)40 b(is)h(the)g(GSS-API)f Fj(")p Fp(nativ)m(e)p Fj(")h Fp(format)g(for)g (names,)i(represen)m(ted)e(b)m(y)330 1927 y(the)h(implemen)m(tation-sp) s(eci\014c)i Fj(gss_name_t)39 b Fp(t)m(yp)s(e.)75 b(It)42 b(is)g(opaque)g(to)h(GSS-API)e(callers.)77 b(A)330 2036 y(single)32 b Fj(gss_name_t)c Fp(ob)5 b(ject)32 b(ma)m(y)f(con)m(tain)h (m)m(ultiple)g(names)f(from)f(di\013eren)m(t)i(namespaces,)g(but)330 2146 y(all)e(names)f(should)f(refer)h(to)g(the)g(same)h(en)m(tit)m(y)-8 b(.)42 b(An)29 b(example)h(of)f(suc)m(h)f(an)h(in)m(ternal)h(name)f(w)m (ould)330 2255 y(b)s(e)42 b(the)g(name)g(returned)f(from)h(a)h(call)g (to)g(the)g Fj(gss_inquire_cred)37 b Fp(routine,)46 b(when)41 b(applied)330 2365 y(to)33 b(a)f(creden)m(tial)h(con)m(taining)h (creden)m(tial)f(elemen)m(ts)g(for)f(m)m(ultiple)h(authen)m(tication)h (mec)m(hanisms)330 2475 y(emplo)m(ying)d(di\013eren)m(t)g(namespaces.) 42 b(This)30 b Fj(gss_name_t)d Fp(ob)5 b(ject)32 b(will)e(con)m(tain)i (a)f(distinct)g(name)330 2584 y(for)f(the)h(en)m(tit)m(y)h(for)e(eac)m (h)h(authen)m(tication)i(mec)m(hanism.)330 2719 y(F)-8 b(or)35 b(GSS-API)f(implemen)m(tations)h(supp)s(orting)e(m)m(ultiple)i (namespaces,)h(ob)5 b(jects)35 b(of)g(t)m(yp)s(e)f Fj(gss_)330 2828 y(name_t)28 b Fp(m)m(ust)h(con)m(tain)i(su\016cien)m(t)f (information)g(to)g(determine)f(the)h(namespace)g(to)h(whic)m(h)e(eac)m (h)330 2938 y(primitiv)m(e)i(name)g(b)s(elongs.)225 3073 y Fn(\017)60 b Fp(Mec)m(hanism-sp)s(eci\014c)39 b(con)m(tiguous)h(o)s (ctet-string)g(forms.)64 b(A)39 b(format)g(capable)g(of)g(con)m (taining)h(a)330 3182 y(single)30 b(name)f(\(from)g(a)h(single)g (namespace\).)42 b(Con)m(tiguous)29 b(string)h(names)f(are)g(alw)m(a)m (ys)i(accompa-)330 3292 y(nied)g(b)m(y)g(an)g(ob)5 b(ject)32 b(iden)m(ti\014er)g(sp)s(ecifying)f(the)g(namespace)h(to)g(whic)m(h)f (the)h(name)f(b)s(elongs,)h(and)330 3401 y(their)38 b(format)g(is)g (dep)s(enden)m(t)f(on)h(the)g(authen)m(tication)i(mec)m(hanism)e(that)g (emplo)m(ys)h(the)f(name.)330 3511 y(Man)m(y)-8 b(,)43 b(but)38 b(not)i(all,)i(con)m(tiguous)f(string)e(names)g(will)h(b)s(e)e (prin)m(table,)k(and)d(ma)m(y)h(therefore)g(b)s(e)330 3621 y(used)30 b(b)m(y)g(GSS-API)g(applications)h(for)f(comm)m (unication)i(with)e(their)h(users.)275 3780 y(Routines)43 b(\()p Fj(gss_import_name)c Fp(and)j Fj(gss_display_name)p Fp(\))d(are)44 b(pro)m(vided)f(to)g(con)m(v)m(ert)i(names)150 3890 y(b)s(et)m(w)m(een)27 b(con)m(tiguous)g(string)g(represen)m (tations)g(and)e(the)i(in)m(ternal)g Fj(gss_name_t)c Fp(t)m(yp)s(e.)40 b Fj(gss_import_)150 4000 y(name)j Fp(ma)m(y)j(supp)s(ort)c(m)m(ultiple)k(syn)m(taxes)f(for)f(eac)m(h)i (supp)s(orted)d(namespace,)49 b(allo)m(wing)d(users)e(the)150 4109 y(freedom)i(to)g(c)m(ho)s(ose)h(a)f(preferred)e(name)i(represen)m (tation.)88 b Fj(gss_display_name)41 b Fp(should)k(use)g(an)150 4219 y(implemen)m(tation-c)m(hosen)33 b(prin)m(table)e(syn)m(tax)f(for) h(eac)m(h)g(supp)s(orted)e(name-t)m(yp)s(e.)275 4354 y(If)22 b(an)h(application)h(calls)g Fj(gss_display_name)p Fp(,)c(passing)j(the)g(in)m(ternal)g(name)g(resulting)g(from)f(a)i (call)150 4463 y(to)j Fj(gss_import_name)p Fp(,)c(there)j(is)g(no)g (guaran)m(tee)h(the)g(resulting)f(con)m(tiguous)h(string)f(name)g(will) g(b)s(e)g(the)150 4573 y(same)c(as)h(the)f(original)h(imp)s(orted)e (string)h(name.)38 b(Nor)22 b(do)g(name-space)h(iden)m(ti\014ers)f (necessarily)h(surviv)m(e)150 4682 y(unc)m(hanged)34 b(after)h(a)g(journey)e(through)h(the)h(in)m(ternal)g(name-form.)52 b(An)35 b(example)g(of)f(this)g(migh)m(t)i(b)s(e)150 4792 y(a)45 b(mec)m(hanism)g(that)g(authen)m(ticates)h(X.500)g(names,)i (but)c(pro)m(vides)h(an)f(algorithmic)i(mapping)e(of)150 4902 y(In)m(ternet)35 b(DNS)g(names)g(in)m(to)h(X.500.)56 b(That)35 b(mec)m(hanism's)g(implemen)m(tation)i(of)e Fj(gss_import_name)150 5011 y Fp(migh)m(t,)24 b(when)d(presen)m(ted)h (with)f(a)i(DNS)e(name,)j(generate)f(an)f(in)m(ternal)h(name)e(that)i (con)m(tained)g(b)s(oth)e(the)150 5121 y(original)34 b(DNS)f(name)g(and)f(the)i(equiv)-5 b(alen)m(t)34 b(X.500)h(name.)48 b(Alternativ)m(ely)-8 b(,)37 b(it)c(migh)m(t)h(only)f(store)h(the)150 5230 y(X.500)f(name.)42 b(In)31 b(the)g(latter)h(case,)h Fj(gss_display_name)26 b Fp(w)m(ould)31 b(most)g(lik)m(ely)i(generate)f (a)g(prin)m(table)150 5340 y(X.500)g(name,)f(rather)f(than)g(the)h (original)g(DNS)g(name.)p eop end %%Page: 13 17 TeXDict begin 13 16 bop 150 -116 a Fp(Chapter)30 b(3:)41 b(Standard)29 b(GSS)h(API)2284 b(13)275 299 y(The)32 b(pro)s(cess)g(of)h(authen)m(tication)i(deliv)m(ers)e(to)h(the)f(con)m (text)i(acceptor)f(an)e(in)m(ternal)i(name.)48 b(Since)150 408 y(this)37 b(name)g(has)g(b)s(een)f(authen)m(ticated)j(b)m(y)e(a)g (single)h(mec)m(hanism,)h(it)f(con)m(tains)g(only)f(a)g(single)h(name) 150 518 y(\(ev)m(en)j(if)f(the)g(in)m(ternal)h(name)f(presen)m(ted)g(b) m(y)g(the)g(con)m(text)i(initiator)g(to)e Fj(gss_init_sec_context)150 628 y Fp(had)33 b(m)m(ultiple)g(comp)s(onen)m(ts\).)50 b(Suc)m(h)32 b(names)h(are)h(termed)f(in)m(ternal)h(mec)m(hanism)f (names,)h(or)f Fj(")p Fp(MN)p Fj(")p Fp(s)150 737 y(and)g(the)i(names)e (emitted)i(b)m(y)f Fj(gss_accept_sec_context)28 b Fp(are)34 b(alw)m(a)m(ys)i(of)e(this)g(t)m(yp)s(e.)52 b(Since)34 b(some)150 847 y(applications)e(ma)m(y)g(require)e(MNs)i(without)f(w)m (an)m(ting)h(to)f(incur)f(the)i(o)m(v)m(erhead)g(of)f(an)g(authen)m (tication)150 956 y(op)s(eration,)43 b(a)d(second)g(function,)j Fj(gss_canonicalize_name)p Fp(,)37 b(is)j(pro)m(vided)f(to)i(con)m(v)m (ert)h(a)e(general)150 1066 y(in)m(ternal)31 b(name)g(in)m(to)g(an)f (MN.)275 1196 y(Comparison)39 b(of)i(in)m(ternal-form)g(names)g(ma)m(y) g(b)s(e)e(accomplished)j(via)f(the)f Fj(gss_compare_name)150 1305 y Fp(routine,)29 b(whic)m(h)g(returns)e(true)h(if)h(the)g(t)m(w)m (o)h(names)e(b)s(eing)g(compared)h(refer)f(to)i(the)e(same)h(en)m(tit)m (y)-8 b(.)43 b(This)150 1415 y(remo)m(v)m(es)d(the)e(need)g(for)g(the)h (application)h(program)e(to)h(understand)d(the)j(syn)m(taxes)g(of)f (the)h(v)-5 b(arious)150 1525 y(prin)m(table)36 b(names)f(that)h(a)g (giv)m(en)h(GSS-API)d(implemen)m(tation)k(ma)m(y)e(supp)s(ort.)54 b(Since)35 b(GSS-API)g(as-)150 1634 y(sumes)g(that)i(all)g(primitiv)m (e)g(names)f(con)m(tained)h(within)e(a)i(giv)m(en)g(in)m(ternal)g(name) f(refer)g(to)g(the)h(same)150 1744 y(en)m(tit)m(y)-8 b(,)46 b Fj(gss_compare_name)37 b Fp(can)k(return)f(true)h(if)g(the)h (t)m(w)m(o)g(names)f(ha)m(v)m(e)i(at)e(least)i(one)e(primitiv)m(e)150 1853 y(name)33 b(in)g(common.)50 b(If)33 b(the)g(implemen)m(tation)i (em)m(b)s(o)s(dies)e(kno)m(wledge)i(of)e(equiv)-5 b(alence)35 b(relationships)150 1963 y(b)s(et)m(w)m(een)e(names)f(tak)m(en)h(from)f (di\013eren)m(t)g(namespaces,)i(this)e(kno)m(wledge)h(ma)m(y)f(also)i (allo)m(w)f(successful)150 2073 y(comparison)e(of)f(in)m(ternal)h (names)f(con)m(taining)i(no)f(o)m(v)m(erlapping)g(primitiv)m(e)g (elemen)m(ts.)275 2202 y(When)e(used)f(in)h(large)i(access)g(con)m (trol)f(lists,)h(the)e(o)m(v)m(erhead)i(of)f(in)m(v)m(oking)g Fj(gss_import_name)c Fp(and)150 2312 y Fj(gss_compare_name)36 b Fp(on)k(eac)m(h)i(name)f(from)f(the)g(A)m(CL)h(ma)m(y)g(b)s(e)f (prohibitiv)m(e.)72 b(As)40 b(an)h(alternativ)m(e)150 2422 y(w)m(a)m(y)31 b(of)f(supp)s(orting)f(this)h(case,)h(GSS-API)f (de\014nes)f(a)h(sp)s(ecial)h(form)e(of)h(the)h(con)m(tiguous)g(string) f(name)150 2531 y(whic)m(h)38 b(ma)m(y)h(b)s(e)f(compared)g(directly)h (\(e.g.)67 b(with)38 b(memcmp\(\)\).)65 b(Con)m(tiguous)39 b(names)f(suitable)h(for)150 2641 y(comparison)24 b(are)h(generated)g (b)m(y)f(the)g Fj(gss_export_name)c Fp(routine,)26 b(whic)m(h)e (requires)g(an)g(MN)g(as)h(input.)150 2750 y(Exp)s(orted)32 b(names)g(ma)m(y)h(b)s(e)f(re-)h(imp)s(orted)f(b)m(y)g(the)h Fj(gss_import_name)c Fp(routine,)k(and)f(the)h(resulting)150 2860 y(in)m(ternal)23 b(name)e(will)h(also)h(b)s(e)e(an)h(MN.)h(The)e Fj(gss_OID)f Fp(constan)m(t)j Fj(GSS_C_NT_EXPORT_NAME)16 b Fp(inden)m(ti\014es)150 2970 y(the)24 b Fj(")p Fp(exp)s(ort)f(name)p Fj(")h Fp(t)m(yp)s(e,)h(and)e(the)h(v)-5 b(alue)24 b(of)g(this)g (constan)m(t)h(is)e(giv)m(en)i(in)e(App)s(endix)f(A.)j(Structurally)-8 b(,)150 3079 y(an)27 b(exp)s(orted)f(name)h(ob)5 b(ject)27 b(consists)g(of)g(a)g(header)g(con)m(taining)h(an)f(OID)f(iden)m (tifying)i(the)f(mec)m(hanism)150 3189 y(that)32 b(authen)m(ticated)h (the)e(name,)g(and)g(a)g(trailer)h(con)m(taining)h(the)e(name)g (itself,)h(where)f(the)g(syn)m(tax)h(of)150 3298 y(the)i(trailer)h(is)f (de\014ned)f(b)m(y)h(the)g(individual)f(mec)m(hanism)h(sp)s (eci\014cation.)53 b(The)33 b(precise)i(format)f(of)g(an)150 3408 y(exp)s(ort)c(name)h(is)f(de\014ned)f(in)h(the)h(language-indep)s (enden)m(t)g(GSS-API)f(sp)s(eci\014cation)h([GSSAPI].)275 3538 y(Note)j(that)h(the)e(results)h(obtained)f(b)m(y)h(using)f Fj(gss_compare_name)c Fp(will)34 b(in)f(general)i(b)s(e)d(di\013eren)m (t)150 3647 y(from)24 b(those)h(obtained)g(b)m(y)g(in)m(v)m(oking)h Fj(gss_canonicalize_name)18 b Fp(and)24 b Fj(gss_export_name)p Fp(,)e(and)i(then)150 3757 y(comparing)h(the)g(exp)s(orted)f(names.)39 b(The)24 b(\014rst)f(series)i(of)g(op)s(eration)g(determines)g(whether) e(t)m(w)m(o)j(\(unau-)150 3867 y(then)m(ticated\))j(names)d(iden)m (tify)h(the)g(same)f(principal;)i(the)f(second)f(whether)g(a)h (particular)g(mec)m(hanism)150 3976 y(w)m(ould)33 b(authen)m(ticate)j (them)d(as)h(the)f(same)h(principal.)49 b(These)33 b(t)m(w)m(o)i(op)s (erations)e(will)h(in)f(general)h(giv)m(e)150 4086 y(the)d(same)f (results)g(only)h(for)f(MNs.)275 4216 y(The)f Fj(gss_name_t)e Fp(datat)m(yp)s(e)j(should)f(b)s(e)g(implemen)m(ted)h(as)g(a)g(p)s(oin) m(ter)g(t)m(yp)s(e.)41 b(T)-8 b(o)30 b(allo)m(w)h(the)f(com-)150 4325 y(piler)f(to)g(aid)g(the)g(application)i(programmer)d(b)m(y)h(p)s (erforming)e(t)m(yp)s(e-c)m(hec)m(king,)32 b(the)d(use)g(of)g(\(v)m (oid)g(*\))h(is)150 4435 y(discouraged.)41 b(A)31 b(p)s(oin)m(ter)f(to) h(an)f(implemen)m(tation-de\014ned)h(t)m(yp)s(e)g(is)f(the)h(preferred) e(c)m(hoice.)275 4565 y(Storage)44 b(is)f(allo)s(cated)i(b)m(y)e (routines)g(that)g(return)f Fj(gss_name_t)f Fp(v)-5 b(alues.)79 b(A)43 b(pro)s(cedure,)i Fj(gss_)150 4674 y(release_name)p Fp(,)27 b(is)k(pro)m(vided)f(to)h(free)f(storage)i(asso)s(ciated)g (with)e(an)g(in)m(ternal-form)h(name.)150 4864 y Fi(3.2.6)63 b(Channel)40 b(Bindings)150 5011 y Fp(GSS-API)g(supp)s(orts)f(the)i (use)g(of)g(user-sp)s(eci\014ed)f(tags)i(to)g(iden)m(tify)f(a)g(giv)m (en)h(con)m(text)h(to)e(the)h(p)s(eer)150 5121 y(application.)k(These) 31 b(tags)h(are)g(in)m(tended)g(to)g(b)s(e)f(used)g(to)h(iden)m(tify)g (the)g(particular)g(comm)m(unications)150 5230 y(c)m(hannel)24 b(that)f(carries)h(the)g(con)m(text.)40 b(Channel)22 b(bindings)g(are)i(comm)m(unicated)g(to)g(the)g(GSS-API)e(using)150 5340 y(the)31 b(follo)m(wing)g(structure:)p eop end %%Page: 14 18 TeXDict begin 14 17 bop 150 -116 a Fp(Chapter)30 b(3:)41 b(Standard)29 b(GSS)h(API)2284 b(14)293 299 y Fj(typedef)46 b(struct)g(gss_channel_bindings_stru)o(ct)41 b({)436 408 y(OM_uint32)332 b(initiator_addrtype;)436 518 y(gss_buffer_desc)44 b(initiator_address;)436 628 y(OM_uint32)332 b(acceptor_addrtype;)436 737 y(gss_buffer_desc)44 b(acceptor_address;)436 847 y(gss_buffer_desc)g(application_data;)293 956 y(})k (*gss_channel_bindings_t)o(;)275 1121 y Fp(The)34 b(initiator)p 794 1121 28 4 v 41 w(addrt)m(yp)s(e)g(and)g(acceptor)p 1739 1121 V 42 w(addrt)m(yp)s(e)g(\014elds)g(denote)h(the)g(t)m(yp)s(e) g(of)g(addresses)f(con-)150 1230 y(tained)i(in)f(the)h(initiator)p 1034 1230 V 41 w(address)f(and)g(acceptor)p 1919 1230 V 42 w(address)f(bu\013ers.)56 b(The)35 b(address)f(t)m(yp)s(e)i (should)f(b)s(e)150 1340 y(one)c(of)f(the)h(follo)m(wing:)293 1504 y Fj(GSS_C_AF_UNSPEC)235 b(Unspecified)44 b(address)i(type)293 1614 y(GSS_C_AF_LOCAL)283 b(Host-local)45 b(address)h(type)293 1724 y(GSS_C_AF_INET)331 b(Internet)45 b(address)h(type)h(\(e.g.)f (IP\))293 1833 y(GSS_C_AF_IMPLINK)187 b(ARPAnet)46 b(IMP)g(address)g (type)293 1943 y(GSS_C_AF_PUP)379 b(pup)47 b(protocols)e(\(eg)i(BSP\))f (address)g(type)293 2052 y(GSS_C_AF_CHAOS)283 b(MIT)47 b(CHAOS)f(protocol)g(address)f(type)293 2162 y(GSS_C_AF_NS)427 b(XEROX)46 b(NS)h(address)f(type)293 2271 y(GSS_C_AF_NBS)379 b(nbs)47 b(address)e(type)293 2381 y(GSS_C_AF_ECMA)331 b(ECMA)46 b(address)g(type)293 2491 y(GSS_C_AF_DATAKIT)187 b(datakit)46 b(protocols)f(address)h(type)293 2600 y(GSS_C_AF_CCITT)283 b(CCITT)46 b(protocols)293 2710 y(GSS_C_AF_SNA)379 b(IBM)47 b(SNA)g(address)e(type)293 2819 y(GSS_C_AF_DECnet)235 b(DECnet)46 b(address)g(type)293 2929 y(GSS_C_AF_DLI)379 b(Direct)46 b(data)g(link)h(interface)e(address)h(type)293 3039 y(GSS_C_AF_LAT)379 b(LAT)47 b(address)e(type)293 3148 y(GSS_C_AF_HYLINK)235 b(NSC)47 b(Hyperchannel)d(address)i(type)293 3258 y(GSS_C_AF_APPLETALK)91 b(AppleTalk)45 b(address)h(type)293 3367 y(GSS_C_AF_BSC)379 b(BISYNC)46 b(2780/3780)f(address)h(type)293 3477 y(GSS_C_AF_DSS)379 b(Distributed)44 b(system)j(services)e(address) h(type)293 3587 y(GSS_C_AF_OSI)379 b(OSI)47 b(TP4)g(address)e(type)293 3696 y(GSS_C_AF_X25)379 b(X.25)293 3806 y(GSS_C_AF_NULLADDR)139 b(No)47 b(address)f(specified)275 3970 y Fp(Note)32 b(that)f(these)h (sym)m(b)s(ols)f(name)g(address)f(families)i(rather)f(than)f(sp)s (eci\014c)h(addressing)f(formats.)150 4080 y(F)-8 b(or)24 b(address)e(families)h(that)h(con)m(tain)g(sev)m(eral)g(alternativ)m(e) h(address)d(forms,)i(the)f(initiator)p 3251 4080 V 42 w(address)f(and)150 4189 y(acceptor)p 488 4189 V 42 w(address)h (\014elds)i(m)m(ust)f(con)m(tain)i(su\016cien)m(t)g(information)f(to)g (determine)g(whic)m(h)g(address)e(form)150 4299 y(is)30 b(used.)41 b(When)30 b(not)g(otherwise)h(sp)s(eci\014ed,)f(addresses)g (should)g(b)s(e)f(sp)s(eci\014ed)h(in)g(net)m(w)m(ork)h(b)m(yte-order) 150 4408 y(\(that)g(is,)g(nativ)m(e)h(b)m(yte-ordering)f(for)f(the)h (address)e(family\).)275 4573 y(Conceptually)-8 b(,)40 b(the)e(GSS-API)f(concatenates)j(the)d(initiator)p 2455 4573 V 42 w(addrt)m(yp)s(e,)i(initiator)p 3240 4573 V 41 w(address,)g(ac-)150 4682 y(ceptor)p 403 4682 V 41 w(addrt)m(yp)s(e,)24 b(acceptor)p 1182 4682 V 42 w(address)f(and)h (application)p 2151 4682 V 41 w(data)h(to)f(form)g(an)g(o)s(ctet)h (string.)39 b(The)23 b(mec)m(h-)150 4792 y(anism)30 b(calculates)i(a)f (MIC)e(o)m(v)m(er)j(this)e(o)s(ctet)h(string,)f(and)g(binds)e(the)j (MIC)e(to)i(the)f(con)m(text)i(establish-)150 4902 y(men)m(t)j(tok)m (en)g(emitted)h(b)m(y)e Fj(gss_init_sec_context)p Fp(.)47 b(The)34 b(same)h(bindings)e(are)i(presen)m(ted)f(b)m(y)h(the)150 5011 y(con)m(text)h(acceptor)g(to)f Fj(gss_accept_sec_context)p Fp(,)30 b(and)j(a)i(MIC)f(is)h(calculated)h(in)e(the)h(same)f(w)m(a)m (y)-8 b(.)150 5121 y(The)41 b(calculated)j(MIC)e(is)g(compared)g(with)g (that)g(found)f(in)h(the)g(tok)m(en,)k(and)41 b(if)h(the)g(MICs)g (di\013er,)150 5230 y Fj(gss_accept_sec_context)31 b Fp(will)37 b(return)e(a)i Fj(GSS_S_BAD_BINDINGS)32 b Fp(error,)38 b(and)e(the)h(con)m(text)i(will)150 5340 y(not)33 b(b)s(e)e(established.)47 b(Some)33 b(mec)m(hanisms)f(ma)m(y)h (include)f(the)h(actual)h(c)m(hannel)e(binding)g(data)h(in)f(the)p eop end %%Page: 15 19 TeXDict begin 15 18 bop 150 -116 a Fp(Chapter)30 b(3:)41 b(Standard)29 b(GSS)h(API)2284 b(15)150 299 y(tok)m(en)34 b(\(rather)f(than)g(just)f(a)i(MIC\);)f(applications)h(should)e (therefore)h(not)g(use)g(con\014den)m(tial)h(data)g(as)150 408 y(c)m(hannel-binding)c(comp)s(onen)m(ts.)275 545 y(Individual)19 b(mec)m(hanisms)i(ma)m(y)g(imp)s(ose)g(additional)g (constrain)m(ts)h(on)f(addresses)f(and)g(address)g(t)m(yp)s(es)150 654 y(that)45 b(ma)m(y)f(app)s(ear)g(in)f(c)m(hannel)i(bindings.)80 b(F)-8 b(or)45 b(example,)j(a)d(mec)m(hanism)f(ma)m(y)h(v)m(erify)f (that)h(the)150 764 y(initiator)p 478 764 28 4 v 41 w(address)22 b(\014eld)g(of)h(the)g(c)m(hannel)g(bindings)f(presen)m(ted)g(to)i Fj(gss_init_sec_context)17 b Fp(con)m(tains)150 873 y(the)43 b(correct)h(net)m(w)m(ork)g(address)e(of)h(the)g(host)f(system.)79 b(P)m(ortable)44 b(applications)g(should)d(therefore)150 983 y(ensure)23 b(that)i(they)f(either)h(pro)m(vide)f(correct)i (information)e(for)g(the)g(address)f(\014elds,)j(or)e(omit)h (addressing)150 1093 y(information,)31 b(sp)s(ecifying)f Fj(GSS_C_AF_NULLADDR)c Fp(as)k(the)h(address-t)m(yp)s(es.)150 1328 y Fo(3.3)68 b(Optional)46 b(P)l(arameters)150 1487 y Fp(V)-8 b(arious)38 b(parameters)f(are)h(describ)s(ed)e(as)i (optional.)62 b(This)36 b(means)i(that)f(they)h(follo)m(w)g(a)g(con)m (v)m(en)m(tion)150 1597 y(whereb)m(y)29 b(a)i(default)f(v)-5 b(alue)30 b(ma)m(y)h(b)s(e)e(requested.)40 b(The)30 b(follo)m(wing)h (con)m(v)m(en)m(tions)h(are)e(used)f(for)h(omitted)150 1706 y(parameters.)66 b(These)39 b(con)m(v)m(en)m(tions)h(apply)f(only) g(to)g(those)g(parameters)h(that)f(are)g(explicitly)h(do)s(cu-)150 1816 y(men)m(ted)31 b(as)f(optional.)225 1952 y Fn(\017)60 b Fp(gss)p 453 1952 V 40 w(bu\013er)p 724 1952 V 39 w(t)33 b(t)m(yp)s(es.)49 b(Sp)s(ecify)32 b(GSS)p 1606 1952 V 39 w(C)p 1711 1952 V 40 w(NO)p 1890 1952 V 40 w(BUFFER)h(as)g(a)h(v)-5 b(alue.)48 b(F)-8 b(or)34 b(an)f(input)e(parameter)330 2062 y(this)f(signi\014es)g(that)h(default)f(b)s(eha)m(vior)g(is)h (requested,)f(while)g(for)g(an)g(output)g(parameter)h(it)f(indi-)330 2171 y(cates)37 b(that)g(the)f(information)g(that)g(w)m(ould)g(b)s(e)f (returned)g(via)h(the)g(parameter)h(is)f(not)g(required)330 2281 y(b)m(y)30 b(the)h(application.)225 2416 y Fn(\017)60 b Fp(In)m(teger)35 b(t)m(yp)s(es)g(\(input\).)52 b(Individual)33 b(parameter)i(do)s(cumen)m(tation)g(lists)g(v)-5 b(alues)34 b(to)h(b)s(e)f(used)f(to)330 2526 y(indicate)e(default)g(actions.)225 2661 y Fn(\017)60 b Fp(In)m(teger)31 b(t)m(yp)s(es)g(\(output\).)41 b(Sp)s(ecify)29 b(NULL)i(as)f(the)h(v)-5 b(alue)31 b(for)f(the)g(p)s (oin)m(ter.)225 2797 y Fn(\017)60 b Fp(P)m(oin)m(ter)32 b(t)m(yp)s(es.)40 b(Sp)s(ecify)30 b(NULL)g(as)h(the)g(v)-5 b(alue.)225 2932 y Fn(\017)60 b Fp(Ob)5 b(ject)31 b(IDs.)40 b(Sp)s(ecify)30 b(GSS)p 1329 2932 V 39 w(C)p 1434 2932 V 40 w(NO)p 1613 2932 V 40 w(OID)g(as)h(the)f(v)-5 b(alue.)225 3067 y Fn(\017)60 b Fp(Ob)5 b(ject)31 b(ID)f(Sets.)41 b(Sp)s(ecify)30 b(GSS)p 1486 3067 V 39 w(C)p 1591 3067 V 40 w(NO)p 1770 3067 V 39 w(OID)p 1982 3067 V 40 w(SET)g(as)g(the)h(v) -5 b(alue.)225 3203 y Fn(\017)60 b Fp(Channel)27 b(Bindings.)40 b(Sp)s(ecify)27 b(GSS)p 1591 3203 V 39 w(C)p 1696 3203 V 40 w(NO)p 1875 3203 V 40 w(CHANNEL)p 2372 3203 V 40 w(BINDINGS)h(to)h(indicate)g(that)f(c)m(han-)330 3312 y(nel)i(bindings)g(are)g(not)h(to)g(b)s(e)f(used.)150 3547 y Fo(3.4)68 b(Error)45 b(Handling)150 3707 y Fp(Ev)m(ery)22 b(GSS-API)g(routine)g(returns)e(t)m(w)m(o)j(distinct)g(v)-5 b(alues)22 b(to)h(rep)s(ort)e(status)h(information)h(to)f(the)g (caller:)150 3816 y(GSS)30 b(status)g(co)s(des)h(and)f(Mec)m(hanism)h (status)g(co)s(des.)150 4017 y Fi(3.4.1)63 b(GSS)41 b(status)g(co)s (des)150 4164 y Fp(GSS-API)27 b(routines)g(return)f(GSS)h(status)h(co)s (des)f(as)h(their)f Fj(OM_uint32)e Fp(function)i(v)-5 b(alue.)41 b(These)27 b(co)s(des)150 4274 y(indicate)38 b(errors)e(that)i(are)f(indep)s(enden)m(t)f(of)h(the)g(underlying)f (mec)m(hanism\(s\))i(used)e(to)i(pro)m(vide)f(the)150 4383 y(securit)m(y)32 b(service.)43 b(The)30 b(errors)h(that)g(can)g(b) s(e)g(indicated)g(via)h(a)f(GSS)f(status)h(co)s(de)g(are)h(either)f (generic)150 4493 y(API)i(routine)h(errors)e(\(errors)i(that)f(are)h (de\014ned)e(in)h(the)h(GSS-API)f(sp)s(eci\014cation\))h(or)g(calling)g (errors)150 4603 y(\(errors)c(that)h(are)g(sp)s(eci\014c)f(to)h(these)g (language)h(bindings\).)275 4739 y(A)k(GSS)g(status)h(co)s(de)f(can)h (indicate)h(a)f(single)g(fatal)g(generic)h(API)e(error)g(from)g(the)h (routine)g(and)150 4848 y(a)32 b(single)h(calling)g(error.)45 b(In)31 b(addition,)i(supplemen)m(tary)e(status)h(information)g(ma)m(y) h(b)s(e)e(indicated)h(via)150 4958 y(the)f(setting)g(of)g(bits)f(in)g (the)g(supplemen)m(tary)g(info)h(\014eld)f(of)g(a)h(GSS)f(status)g(co)s (de.)275 5094 y(These)g(errors)g(are)g(enco)s(ded)g(in)m(to)i(the)e (32-bit)i(GSS)d(status)i(co)s(de)g(as)f(follo)m(ws:)436 5230 y Fj(MSB)2672 b(LSB)436 5340 y(|-------------------------)o(---)o (----)o(----)o(---)o(----)o(----)o(---)o(----)o(----)o(--|)p eop end %%Page: 16 20 TeXDict begin 16 19 bop 150 -116 a Fp(Chapter)30 b(3:)41 b(Standard)29 b(GSS)h(API)2284 b(16)436 299 y Fj(|)96 b(Calling)45 b(Error)i(|)g(Routine)f(Error)94 b(|)191 b(Supplementary)44 b(Info)190 b(|)436 408 y(|-------------------------) o(---)o(----)o(----)o(---)o(----)o(----)o(---)o(----)o(----)o(--|)293 518 y(Bit)47 b(31)572 b(24)47 b(23)573 b(16)47 b(15)1097 b(0)275 664 y Fp(Hence)36 b(if)f(a)g(GSS-API)g(routine)g(returns)f(a)i (GSS)e(status)i(co)s(de)g(whose)f(upp)s(er)e(16)j(bits)f(con)m(tain)i (a)150 774 y(non-zero)24 b(v)-5 b(alue,)25 b(the)e(call)i(failed.)38 b(If)23 b(the)g(calling)i(error)e(\014eld)f(is)h(non-zero,)j(the)d(in)m (v)m(oking)h(application's)150 883 y(call)j(of)f(the)f(routine)h(w)m (as)g(erroneous.)39 b(Calling)26 b(errors)f(are)h(de\014ned)e(in)h (table)i(3-1.)40 b(If)25 b(the)h(routine)f(error)150 993 y(\014eld)35 b(is)h(non-zero,)i(the)e(routine)f(failed)i(for)e(one) h(of)g(the)g(routine-)g(sp)s(eci\014c)f(reasons)h(listed)g(b)s(elo)m(w) g(in)150 1103 y(table)29 b(3-2.)41 b(Whether)28 b(or)g(not)h(the)f(upp) s(er)e(16)j(bits)f(indicate)h(a)f(failure)h(or)f(a)g(success,)h(the)f (routine)g(ma)m(y)150 1212 y(indicate)i(additional)g(information)g(b)m (y)f(setting)h(bits)f(in)g(the)g(supplemen)m(tary)f(info)h(\014eld)g (of)g(the)h(status)150 1322 y(co)s(de.)41 b(The)30 b(meaning)g(of)h (individual)f(bits)g(is)g(listed)h(b)s(elo)m(w)g(in)f(table)h(3-3.)293 1468 y Fj(Table)47 b(3-1)94 b(Calling)46 b(Errors)293 1687 y(Name)906 b(Value)46 b(in)h(field)524 b(Meaning)293 1797 y(----)906 b(--------------)521 b(-------)293 1906 y(GSS_S_CALL_INACCESSIBLE_R)o(EAD)89 b(1)334 b(A)47 b(required)f(input) g(parameter)2107 2016 y(could)g(not)h(be)g(read)293 2125 y(GSS_S_CALL_INACCESSIBLE_W)o(RITE)41 b(2)334 b(A)47 b(required)f(output)g(parameter)2155 2235 y(could)g(not)h(be)g (written.)293 2345 y(GSS_S_CALL_BAD_STRUCTURE)280 b(3)334 b(A)47 b(parameter)f(was)g(malformed)293 2491 y(Table)h(3-2)94 b(Routine)46 b(Errors)293 2710 y(Name)906 b(Value)46 b(in)h(field)524 b(Meaning)293 2819 y(----)906 b(--------------)521 b(-------)293 2929 y(GSS_S_BAD_MECH)760 b(1)334 b(An)47 b(unsupported)e(mechanism)2107 3039 y(was)i(requested)293 3148 y(GSS_S_BAD_NAME)760 b(2)334 b(An)47 b(invalid)f(name)g(was)2107 3258 y(supplied)293 3367 y(GSS_S_BAD_NAMETYPE)568 b(3)334 b(A)47 b(supplied)f(name)g(was)h(of)h(an)2107 3477 y(unsupported)d (type)293 3587 y(GSS_S_BAD_BINDINGS)568 b(4)334 b(Incorrect)45 b(channel)h(bindings)2107 3696 y(were)g(supplied)293 3806 y(GSS_S_BAD_STATUS)664 b(5)334 b(An)47 b(invalid)f(status)g(code)h (was)2107 3915 y(supplied)293 4025 y(GSS_S_BAD_MIC)d(GSS_S_BAD_SIG)140 b(6)334 b(A)47 b(token)g(had)g(an)g(invalid)f(MIC)293 4134 y(GSS_S_NO_CRED)808 b(7)334 b(No)47 b(credentials)e(were)2107 4244 y(supplied,)g(or)i(the)2107 4354 y(credentials)e(were)2107 4463 y(unavailable)g(or)2107 4573 y(inaccessible.)293 4682 y(GSS_S_NO_CONTEXT)664 b(8)334 b(No)47 b(context)f(has)h(been)2107 4792 y(established)293 4902 y(GSS_S_DEFECTIVE_TOKEN)424 b(9)334 b(A)47 b(token)g(was)g(invalid)293 5011 y (GSS_S_DEFECTIVE_CREDENTIA)o(L)137 b(10)334 b(A)47 b(credential)e(was)i (invalid)293 5121 y(GSS_S_CREDENTIALS_EXPIRED)184 b(11)334 b(The)47 b(referenced)e(credentials)2107 5230 y(have)h(expired)293 5340 y(GSS_S_CONTEXT_EXPIRED)376 b(12)334 b(The)47 b(context)f(has)g (expired)p eop end %%Page: 17 21 TeXDict begin 17 20 bop 150 -116 a Fp(Chapter)30 b(3:)41 b(Standard)29 b(GSS)h(API)2284 b(17)293 299 y Fj(GSS_S_FAILURE)760 b(13)334 b(Miscellaneous)44 b(failure)i(\(see)2107 408 y(text\))293 518 y(GSS_S_BAD_QOP)760 b(14)334 b(The)47 b(quality-of-protection)2107 628 y(requested)e(could)h(not)h(be)2107 737 y(provided)293 847 y(GSS_S_UNAUTHORIZED)520 b(15)334 b(The)47 b(operation)e(is)i(forbidden)2107 956 y(by)g(local)f(security) g(policy)293 1066 y(GSS_S_UNAVAILABLE)568 b(16)334 b(The)47 b(operation)e(or)i(option)f(is)2107 1176 y(unavailable)293 1285 y(GSS_S_DUPLICATE_ELEMENT)280 b(17)334 b(The)47 b(requested)e(credential)2107 1395 y(element)h(already)f(exists)293 1504 y(GSS_S_NAME_NOT_MN)568 b(18)334 b(The)47 b(provided)e(name)i(was) g(not)g(a)2107 1614 y(mechanism)e(name)293 1797 y(Table)i(3-3)94 b(Supplementary)44 b(Status)i(Bits)293 2016 y(Name)906 b(Bit)47 b(Number)523 b(Meaning)293 2125 y(----)906 b(----------)522 b(-------)293 2235 y(GSS_S_CONTINUE_NEEDED)138 b(0)47 b(\(LSB\))142 b(Returned)45 b(only)i(by)1916 2345 y (gss_init_sec_context)42 b(or)1916 2454 y(gss_accept_sec_context.)f (The)1916 2564 y(routine)46 b(must)g(be)i(called)e(again)1916 2673 y(to)h(complete)f(its)h(function.)1916 2783 y(See)g(routine)f (documentation)e(for)1916 2892 y(detailed)h(description)293 3002 y(GSS_S_DUPLICATE_TOKEN)138 b(1)429 b(The)47 b(token)f(was)h(a)h (duplicate)d(of)1916 3112 y(an)i(earlier)f(token)293 3221 y(GSS_S_OLD_TOKEN)426 b(2)j(The)47 b(token's)f(validity)f(period) 1916 3331 y(has)i(expired)293 3440 y(GSS_S_UNSEQ_TOKEN)330 b(3)429 b(A)47 b(later)g(token)f(has)h(already)f(been)1916 3550 y(processed)293 3660 y(GSS_S_GAP_TOKEN)426 b(4)j(An)47 b(expected)f(per-message)e(token)1916 3769 y(was)j(not)g(received)275 3952 y Fp(The)39 b(routine)h(do)s(cumen)m(tation)g(also)h(uses)f(the)g (name)g(GSS)p 2416 3952 28 4 v 39 w(S)p 2506 3952 V 40 w(COMPLETE,)e(whic)m(h)i(is)g(a)g(zero)150 4061 y(v)-5 b(alue,)31 b(to)g(indicate)h(an)e(absence)h(of)f(an)m(y)h(API)f(errors) g(or)g(supplemen)m(tary)g(information)h(bits.)275 4244 y(All)44 b(GSS)p 616 4244 V 39 w(S)p 706 4244 V 40 w(xxx)g(sym)m(b)s (ols)f(equate)i(to)g(complete)g Fj(OM_uint32)c Fp(status)j(co)s(des,)k (rather)c(than)f(to)150 4354 y(bit\014eld)36 b(v)-5 b(alues.)58 b(F)-8 b(or)37 b(example,)i(the)d(actual)i(v)-5 b(alue)36 b(of)h(the)f(sym)m(b)s(ol)g Fj(GSS_S_BAD_NAMETYPE)31 b Fp(\(v)-5 b(alue)150 4463 y(3)43 b(in)g(the)h(routine)f(error)f (\014eld\))h(is)h(3)p Fj(<<)p Fp(16.)79 b(The)43 b(macros)g Fj(GSS_CALLING_ERROR)p Fp(,)f Fj(GSS_ROUTINE_)150 4573 y(ERROR)29 b Fp(and)g Fj(GSS_SUPPLEMENTARY_INFO)24 b Fp(are)30 b(pro)m(vided,)g(eac)m(h)h(of)g(whic)m(h)e(tak)m(es)j(a)e (GSS)f(status)i(co)s(de)150 4682 y(and)i(remo)m(v)m(es)i(all)g(but)d (the)i(relev)-5 b(an)m(t)35 b(\014eld.)50 b(F)-8 b(or)35 b(example,)g(the)f(v)-5 b(alue)34 b(obtained)g(b)m(y)g(applying)f Fj(GSS_)150 4792 y(ROUTINE_ERROR)d Fp(to)k(a)g(status)g(co)s(de)g(remo) m(v)m(es)h(the)f(calling)h(errors)e(and)g(supplemen)m(tary)g(info)g (\014elds,)150 4902 y(lea)m(ving)f(only)f(the)f(routine)h(errors)e (\014eld.)41 b(The)30 b(v)-5 b(alues)30 b(deliv)m(ered)i(b)m(y)e(these) h(macros)g(ma)m(y)f(b)s(e)g(directly)150 5011 y(compared)f(with)f(a)h Fj(GSS_S_xxx)d Fp(sym)m(b)s(ol)i(of)h(the)g(appropriate)g(t)m(yp)s(e.) 40 b(The)28 b(macro)h Fj(GSS_ERROR)d Fp(is)j(also)150 5121 y(pro)m(vided,)34 b(whic)m(h)f(when)f(applied)i(to)g(a)f(GSS)g (status)h(co)s(de)f(returns)f(a)i(non-zero)g(v)-5 b(alue)34 b(if)f(the)h(status)150 5230 y(co)s(de)29 b(indicated)g(a)g(calling)h (or)e(routine)h(error,)f(and)g(a)h(zero)g(v)-5 b(alue)29 b(otherwise.)41 b(All)29 b(macros)g(de\014ned)e(b)m(y)150 5340 y(GSS-API)j(ev)-5 b(aluate)32 b(their)e(argumen)m(t\(s\))i (exactly)g(once.)p eop end %%Page: 18 22 TeXDict begin 18 21 bop 150 -116 a Fp(Chapter)30 b(3:)41 b(Standard)29 b(GSS)h(API)2284 b(18)275 299 y(A)38 b(GSS-API)h (implemen)m(tation)h(ma)m(y)f(c)m(ho)s(ose)h(to)f(signal)h(calling)g (errors)e(in)h(a)g(platform-sp)s(eci\014c)150 408 y(manner)c(instead)i (of,)h(or)e(in)g(addition)h(to)g(the)f(routine)h(v)-5 b(alue;)40 b(routine)c(errors)g(and)f(supplemen)m(tary)150 518 y(info)30 b(should)g(b)s(e)f(returned)h(via)h(ma)5 b(jor)30 b(status)h(v)-5 b(alues)30 b(only)-8 b(.)275 784 y(The)22 b(GSS)f(ma)5 b(jor)23 b(status)g(co)s(de)f Fj(GSS_S_FAILURE)d Fp(is)k(used)e(to)j(indicate)f(that)g(the)g (underlying)e(mec)m(h-)150 893 y(anism)31 b(detected)h(an)e(error)h (for)f(whic)m(h)h(no)g(sp)s(eci\014c)f(GSS)g(status)h(co)s(de)g(is)g (de\014ned.)41 b(The)30 b(mec)m(hanism-)150 1003 y(sp)s(eci\014c)g (status)h(co)s(de)f(will)h(pro)m(vide)g(more)f(details)i(ab)s(out)e (the)g(error.)275 1269 y(In)58 b(addition)h(to)h(the)g(explicit)g(ma)5 b(jor)59 b(status)h(co)s(des)f(for)g(eac)m(h)h(API)f(function,)66 b(the)60 b(co)s(de)150 1378 y Fj(GSS_S_FAILURE)42 b Fp(ma)m(y)j(b)s(e)g (returned)f(b)m(y)h(an)m(y)h(routine,)j(indicating)d(an)f(implemen)m (tation-sp)s(eci\014c)150 1488 y(or)58 b(mec)m(hanism-sp)s(eci\014c)g (error)f(condition,)65 b(further)56 b(details)j(of)e(whic)m(h)h(are)g (rep)s(orted)f(via)h(the)150 1597 y Fj(minor_status)27 b Fp(parameter.)150 1928 y Fi(3.4.2)63 b(Mec)m(hanism-sp)s(eci\014c)41 b(status)g(co)s(des)150 2075 y Fp(GSS-API)35 b(routines)h(return)f(a)i (minor)p 1511 2075 28 4 v 39 w(status)g(parameter,)h(whic)m(h)e(is)g (used)f(to)i(indicate)g(sp)s(ecialized)150 2184 y(errors)47 b(from)f(the)h(underlying)f(securit)m(y)i(mec)m(hanism.)91 b(This)46 b(parameter)i(ma)m(y)f(con)m(tain)i(a)e(single)150 2294 y(mec)m(hanism-sp)s(eci\014c)31 b(error,)f(indicated)h(b)m(y)f(a)h Fj(OM_uint32)d Fp(v)-5 b(alue.)275 2560 y(The)28 b(minor)p 699 2560 V 40 w(status)h(parameter)h(will)f(alw)m(a)m(ys)i(b)s(e)d(set) i(b)m(y)f(a)g(GSS-API)g(routine,)h(ev)m(en)f(if)h(it)f(returns)150 2669 y(a)40 b(calling)i(error)d(or)h(one)g(of)h(the)f(generic)h(API)e (errors)h(indicated)g(ab)s(o)m(v)m(e)h(as)f(fatal,)k(although)d(most) 150 2779 y(other)h(output)f(parameters)g(ma)m(y)h(remain)g(unset)e(in)i (suc)m(h)f(cases.)74 b(Ho)m(w)m(ev)m(er,)47 b(output)41 b(parameters)150 2888 y(that)35 b(are)f(exp)s(ected)h(to)f(return)f(p)s (oin)m(ters)h(to)h(storage)h(allo)s(cated)g(b)m(y)e(a)g(routine)g(m)m (ust)g(alw)m(a)m(ys)i(b)s(e)d(set)150 2998 y(b)m(y)g(the)f(routine,)i (ev)m(en)f(in)f(the)h(ev)m(en)m(t)h(of)f(an)g(error,)g(although)g(in)f (suc)m(h)g(cases)i(the)f(GSS-API)f(routine)150 3108 y(ma)m(y)39 b(elect)g(to)g(set)g(the)f(returned)f(parameter)h(v)-5 b(alue)39 b(to)g(NULL)f(to)g(indicate)h(that)g(no)f(storage)i(w)m(as) 150 3217 y(actually)g(allo)s(cated.)68 b(An)m(y)38 b(length)h(\014eld)f (asso)s(ciated)j(with)d(suc)m(h)g(p)s(oin)m(ters)h(\(as)g(in)f(a)h Fj(gss_buffer_)150 3327 y(desc)29 b Fp(structure\))h(should)g(also)h(b) s(e)f(set)h(to)g(zero)g(in)f(suc)m(h)g(cases.)150 3756 y Fo(3.5)68 b(Creden)l(tial)47 b(Managemen)l(t)293 3915 y Fj(GSS-API)f(Credential-management)c(Routines)293 4134 y(Routine)1191 b(Function)293 4244 y(-------)g(--------)293 4354 y(gss_acquire_cred)759 b(Assume)47 b(a)g(global)f(identity;)f (Obtain)1820 4463 y(a)j(GSS-API)e(credential)f(handle)h(for)1820 4573 y(pre-existing)f(credentials.)293 4682 y(gss_add_cred)951 b(Construct)46 b(credentials)1820 4792 y(incrementally.)293 4902 y(gss_inquire_cred)759 b(Obtain)47 b(information)d(about)j(a)1820 5011 y(credential.)293 5121 y(gss_inquire_cred_by_mech)375 b(Obtain)47 b(per-mechanism)d(information)1820 5230 y(about)j(a)g (credential.)293 5340 y(gss_release_cred)759 b(Discard)46 b(a)i(credential)d(handle.)p eop end %%Page: 19 23 TeXDict begin 19 22 bop 150 -116 a Fp(Chapter)30 b(3:)41 b(Standard)29 b(GSS)h(API)2284 b(19)150 299 y Fi(gss)p 316 299 37 5 v 55 w(acquire)p 759 299 V 54 w(cred)3350 494 y Fp([F)-8 b(unction])-3599 b Fh(OM_uint32)55 b(gss_acquire_cred)50 b Fg(\()p Ff(OM)p 1750 494 28 4 v 41 w(uin)m(t32)31 b(*)g Fe(minor_status)p Ff(,)j(const)565 604 y(gss)p 688 604 V 40 w(name)p 940 604 V 40 w(t)d Fe(desired_name)p Ff(,)j(OM)p 1883 604 V 40 w(uin)m(t32)e Fe(time_req)p Ff(,)h(const)d(gss)p 3032 604 V 41 w(OID)p 3246 604 V 40 w(set)565 714 y Fe(desired_mechs)p Ff(,)35 b(gss)p 1424 714 V 40 w(cred)p 1631 714 V 40 w(usage)p 1888 714 V 40 w(t)c Fe(cred_usage)p Ff(,)j(gss)p 2690 714 V 40 w(cred)p 2897 714 V 40 w(id)p 3013 714 V 39 w(t)d(*)565 823 y Fe(output_cred_handle)p Ff(,)36 b(gss)p 1685 823 V 40 w(OID)p 1898 823 V 40 w(set)31 b(*)g Fe(actual_mechs)p Ff(,)j(OM)p 2993 823 V 40 w(uin)m(t32)d(*)565 933 y Fe(time_rec)p Fg(\))390 1042 y Ff(minor)p 629 1042 V 40 w(status)t Fp(:)40 b(\(in)m(teger,)33 b(mo)s(dify\))d(Mec)m (hanism)h(sp)s(eci\014c)f(status)h(co)s(de.)390 1176 y Ff(desired)p 675 1176 V 40 w(name)5 b Fp(:)46 b(\(gss)p 1155 1176 V 40 w(name)p 1407 1176 V 40 w(t,)34 b(read\))g(Name)f(of)h (principal)e(whose)h(creden)m(tial)h(should)e(b)s(e)h(ac-)390 1286 y(quired.)390 1420 y Ff(time)p 572 1420 V 41 w(req)r Fp(:)64 b(\(In)m(teger,)47 b(read,)f(optional\))e(Num)m(b)s(er)d(of)h (seconds)h(that)g(creden)m(tials)g(should)f(re-)390 1529 y(main)c(v)-5 b(alid.)64 b(Sp)s(ecify)37 b(GSS)p 1405 1529 V 39 w(C)p 1510 1529 V 40 w(INDEFINITE)h(to)h(request)e(that)i (the)f(creden)m(tials)i(ha)m(v)m(e)f(the)390 1639 y(maxim)m(um)30 b(p)s(ermitted)g(lifetime.)390 1773 y Ff(desired)p 675 1773 V 40 w(mec)m(hs)t Fp(:)93 b(\(Set)58 b(of)f(Ob)5 b(ject)57 b(IDs,)63 b(read,)h(optional\))58 b(Set)f(of)g(underlying)f (securit)m(y)390 1882 y(mec)m(hanisms)43 b(that)g(ma)m(y)g(b)s(e)f (used.)77 b(GSS)p 1919 1882 V 39 w(C)p 2024 1882 V 40 w(NO)p 2203 1882 V 40 w(OID)p 2416 1882 V 40 w(SET)41 b(ma)m(y)j(b)s(e)e(used)g(to)h(obtain)g(an)390 1992 y(implemen)m (tation-sp)s(eci\014c)32 b(default.)390 2126 y Ff(cred)p 563 2126 V 40 w(usage)5 b Fp(:)39 b(\(gss)p 1041 2126 V 41 w(cred)p 1249 2126 V 40 w(usage)p 1506 2126 V 40 w(t,)28 b(read\))f(GSS)p 2041 2126 V 39 w(C)p 2146 2126 V 40 w(BOTH)f(-)h(Creden)m(tials)g(ma)m(y)g(b)s(e)f(used)f(either)390 2235 y(to)34 b(initiate)h(or)e(accept)h(securit)m(y)g(con)m(texts.)51 b(GSS)p 2143 2235 V 39 w(C)p 2248 2235 V 40 w(INITIA)-8 b(TE)33 b(-)g(Creden)m(tials)h(will)f(only)h(b)s(e)390 2345 y(used)f(to)i(initiate)h(securit)m(y)f(con)m(texts.)54 b(GSS)p 1961 2345 V 39 w(C)p 2066 2345 V 40 w(A)m(CCEPT)33 b(-)i(Creden)m(tials)f(will)h(only)f(b)s(e)g(used)390 2455 y(to)d(accept)h(securit)m(y)f(con)m(texts.)390 2588 y Ff(output)p 664 2588 V 40 w(cred)p 871 2588 V 40 w(handle)5 b Fp(:)65 b(\(gss)p 1421 2588 V 40 w(cred)p 1628 2588 V 40 w(id)p 1744 2588 V 40 w(t,)46 b(mo)s(dify\))c(The)g(returned)g (creden)m(tial)i(handle.)77 b(Re-)390 2698 y(sources)40 b(asso)s(ciated)h(with)e(this)h(creden)m(tial)h(handle)f(m)m(ust)f(b)s (e)g(released)i(b)m(y)f(the)g(application)390 2808 y(after)31 b(use)f(with)g(a)h(call)g(to)h(gss)p 1446 2808 V 40 w(release)p 1748 2808 V 41 w(cred\(\).)390 2941 y Ff(actual)p 637 2941 V 41 w(mec)m(hs)t Fp(:)39 b(\(Set)28 b(of)f(Ob)5 b(ject)27 b(IDs,)h(mo)s(dify)-8 b(,)27 b(optional\))i(The)d(set)h(of)h (mec)m(hanisms)f(for)f(whic)m(h)390 3051 y(the)f(creden)m(tial)i(is)d (v)-5 b(alid.)40 b(Storage)26 b(asso)s(ciated)g(with)f(the)g(returned)e (OID-set)j(m)m(ust)f(b)s(e)f(released)390 3161 y(b)m(y)30 b(the)g(application)h(after)g(use)e(with)h(a)g(call)h(to)g(gss)p 2194 3161 V 40 w(release)p 2496 3161 V 42 w(oid)p 2659 3161 V 40 w(set\(\).)42 b(Sp)s(ecify)29 b(NULL)h(if)g(not)390 3270 y(required.)390 3404 y Ff(time)p 572 3404 V 41 w(rec)6 b Fp(:)36 b(\(In)m(teger,)26 b(mo)s(dify)-8 b(,)24 b(optional\))g (Actual)g(n)m(um)m(b)s(er)d(of)h(seconds)h(for)f(whic)m(h)g(the)h (returned)390 3514 y(creden)m(tials)37 b(will)g(remain)e(v)-5 b(alid.)58 b(If)36 b(the)g(implemen)m(tation)h(do)s(es)f(not)g(supp)s (ort)e(expiration)j(of)390 3623 y(creden)m(tials,)j(the)d(v)-5 b(alue)37 b(GSS)p 1459 3623 V 40 w(C)p 1565 3623 V 39 w(INDEFINITE)g(will)g(b)s(e)f(returned.)59 b(Sp)s(ecify)36 b(NULL)h(if)g(not)390 3733 y(required.)390 3867 y(Allo)m(ws)27 b(an)e(application)j(to)e(acquire)g(a)h(handle)e(for)g(a)i (pre-existing)f(creden)m(tial)h(b)m(y)f(name.)39 b(GSS-)390 3976 y(API)45 b(implemen)m(tations)i(m)m(ust)e(imp)s(ose)g(a)g(lo)s (cal)i(access-con)m(trol)h(p)s(olicy)d(on)g(callers)i(of)e(this)390 4086 y(routine)32 b(to)h(prev)m(en)m(t)g(unauthorized)e(callers)i(from) f(acquiring)g(creden)m(tials)i(to)f(whic)m(h)e(they)i(are)390 4196 y(not)23 b(en)m(titled.)39 b(This)22 b(routine)g(is)h(not)f(in)m (tended)h(to)g(pro)m(vide)f(a)h Fj(")p Fp(login)g(to)g(the)g(net)m(w)m (ork)p Fj(")g Fp(function,)390 4305 y(as)34 b(suc)m(h)f(a)h(function)f (w)m(ould)h(in)m(v)m(olv)m(e)h(the)f(creation)h(of)f(new)f(creden)m (tials)i(rather)e(than)h(merely)390 4415 y(acquiring)44 b(a)f(handle)g(to)h(existing)h(creden)m(tials.)81 b(Suc)m(h)42 b(functions,)47 b(if)c(required,)j(should)d(b)s(e)390 4524 y(de\014ned)29 b(in)h(implemen)m(tation-sp)s(eci\014c)i (extensions)f(to)g(the)g(API.)390 4658 y(If)i(desired)p 769 4658 V 39 w(name)g(is)g(GSS)p 1320 4658 V 40 w(C)p 1426 4658 V 39 w(NO)p 1604 4658 V 40 w(NAME,)h(the)f(call)i(is)e(in)m (terpreted)g(as)g(a)h(request)f(for)g(a)g(cre-)390 4768 y(den)m(tial)26 b(handle)f(that)h(will)g(in)m(v)m(ok)m(e)h(default)f(b) s(eha)m(vior)f(when)f(passed)h(to)h(gss)p 3019 4768 V 40 w(init)p 3195 4768 V 41 w(sec)p 3352 4768 V 40 w(con)m(text\(\))390 4877 y(\(if)g(cred)p 677 4877 V 40 w(usage)g(is)g(GSS)p 1220 4877 V 39 w(C)p 1325 4877 V 40 w(INITIA)-8 b(TE)25 b(or)h(GSS)p 2091 4877 V 39 w(C)p 2196 4877 V 40 w(BOTH\))f(or)h(gss)p 2789 4877 V 40 w(accept)p 3080 4877 V 42 w(sec)p 3238 4877 V 40 w(con)m(text\(\))j(\(if)390 4987 y(cred)p 563 4987 V 40 w(usage)i(is)f(GSS)p 1115 4987 V 40 w(C)p 1221 4987 V 39 w(A)m(CCEPT)g(or)g(GSS)p 1961 4987 V 40 w(C)p 2067 4987 V 39 w(BOTH\).)390 5121 y(Mec)m(hanisms)f(should)f(honor)g (the)h(desired)p 1882 5121 V 39 w(mec)m(hs)g(parameter,)h(and)e(return) f(a)i(creden)m(tial)h(that)390 5230 y(is)36 b(suitable)h(to)f(use)g (only)g(with)g(the)g(requested)g(mec)m(hanisms.)58 b(An)36 b(exception)h(to)g(this)f(is)g(the)390 5340 y(case)29 b(where)e(one)i(underlying)d(creden)m(tial)k(elemen)m(t)f(can)g(b)s(e)e (shared)g(b)m(y)h(m)m(ultiple)h(mec)m(hanisms;)p eop end %%Page: 20 24 TeXDict begin 20 23 bop 150 -116 a Fp(Chapter)30 b(3:)41 b(Standard)29 b(GSS)h(API)2284 b(20)390 299 y(in)34 b(this)g(case)i(it) f(is)f(p)s(ermissible)g(for)g(an)h(implemen)m(tation)h(to)f(indicate)g (all)h(mec)m(hanisms)e(with)390 408 y(whic)m(h)25 b(the)h(creden)m (tial)h(elemen)m(t)h(ma)m(y)e(b)s(e)f(used.)38 b(If)26 b(desired)p 2465 408 28 4 v 39 w(mec)m(hs)g(is)g(an)f(empt)m(y)h(set,)i (b)s(eha)m(vior)390 518 y(is)i(unde\014ned.)390 650 y(This)h(routine)h (is)g(exp)s(ected)g(to)h(b)s(e)e(used)g(primarily)g(b)m(y)h(con)m(text) i(acceptors,)g(since)e(implemen-)390 760 y(tations)40 b(are)f(lik)m(ely)i(to)e(pro)m(vide)g(mec)m(hanism-sp)s(eci\014c)h(w)m (a)m(ys)g(of)f(obtaining)g(GSS-API)g(initia-)390 869 y(tor)34 b(creden)m(tials)h(from)e(the)g(system)h(login)g(pro)s(cess.) 50 b(Some)33 b(implemen)m(tations)i(ma)m(y)f(therefore)390 979 y(not)39 b(supp)s(ort)e(the)i(acquisition)h(of)f(GSS)p 1827 979 V 39 w(C)p 1932 979 V 40 w(INITIA)-8 b(TE)38 b(or)h(GSS)p 2724 979 V 39 w(C)p 2829 979 V 40 w(BOTH)f(creden)m(tials) i(via)390 1089 y(gss)p 513 1089 V 40 w(acquire)p 838 1089 V 41 w(cred)35 b(for)g(an)m(y)g(name)g(other)g(than)g(GSS)p 2280 1089 V 40 w(C)p 2386 1089 V 39 w(NO)p 2564 1089 V 40 w(NAME,)h(or)f(a)g(name)h(pro)s(duced)390 1198 y(b)m(y)28 b(applying)f(either)h(gss)p 1260 1198 V 41 w(inquire)p 1577 1198 V 39 w(cred)g(to)g(a)g(v)-5 b(alid)28 b(creden)m(tial,)j(or)c (gss)p 2875 1198 V 40 w(inquire)p 3191 1198 V 40 w(con)m(text)j(to)e (an)390 1308 y(activ)m(e)33 b(con)m(text.)390 1440 y(If)67 b(creden)m(tial)i(acquisition)g(is)f(time-consuming)g(for)f(a)h(mec)m (hanism,)78 b(the)68 b(mec)m(hanism)390 1550 y(ma)m(y)50 b(c)m(ho)s(ose)h(to)f(dela)m(y)h(the)f(actual)h(acquisition)g(un)m(til) f(the)g(creden)m(tial)h(is)e(required)g(\(e.g.)390 1659 y(b)m(y)78 b(gss)p 687 1659 V 40 w(init)p 863 1659 V 41 w(sec)p 1020 1659 V 40 w(con)m(text)j(or)d(gss)p 1708 1659 V 40 w(accept)p 1999 1659 V 42 w(sec)p 2157 1659 V 40 w(con)m(text\).)187 b(Suc)m(h)77 b(mec)m(hanism-sp)s(eci\014c)390 1769 y(implemen)m(tation)41 b(decisions)f(should)e(b)s(e)h(in)m (visible)g(to)h(the)g(calling)h(application;)k(th)m(us)39 b(a)h(call)390 1878 y(of)i(gss)p 628 1878 V 40 w(inquire)p 944 1878 V 40 w(cred)g(immediately)h(follo)m(wing)h(the)e(call)h(of)f (gss)p 2696 1878 V 41 w(acquire)p 3022 1878 V 40 w(cred)g(m)m(ust)g (return)390 1988 y(v)-5 b(alid)35 b(creden)m(tial)g(data,)i(and)c(ma)m (y)i(therefore)g(incur)e(the)i(o)m(v)m(erhead)g(of)f(a)h(deferred)e (creden)m(tial)390 2097 y(acquisition.)390 2230 y(Return)d(v)-5 b(alue:)390 2362 y Fj(GSS_S_COMPLETE)p Fp(:)37 b(Successful)30 b(completion.)390 2494 y Fj(GSS_S_BAD_MECH)p Fp(:)37 b(Una)m(v)-5 b(ailable)32 b(mec)m(hanism)f(requested.)390 2626 y Fj(GSS_S_BAD_NAMETYPE)p Fp(:)56 b(T)m(yp)s(e)40 b(con)m(tained)h(within)f(desired)p 2579 2626 V 40 w(name)g(parameter)h (is)f(not)h(sup-)390 2736 y(p)s(orted.)390 2868 y Fj(GSS_S_BAD_NAME)p Fp(:)c(V)-8 b(alue)31 b(supplied)e(for)i(desired)p 2160 2868 V 39 w(name)g(parameter)f(is)h(ill)g(formed.)390 3000 y Fj(GSS_S_CREDENTIALS_EXPIRE)o(D)p Fp(:)45 b(The)35 b(creden)m(tials)i(could)e(not)h(b)s(e)f(acquired)g(Because)i(they)390 3110 y(ha)m(v)m(e)32 b(expired.)390 3242 y Fj(GSS_S_NO_CRED)p Fp(:)37 b(No)31 b(creden)m(tials)h(w)m(ere)f(found)e(for)h(the)g(sp)s (eci\014ed)g(name.)150 3436 y Fi(gss)p 316 3436 37 5 v 55 w(add)p 567 3436 V 54 w(cred)3350 3628 y Fp([F)-8 b(unction])-3599 b Fh(OM_uint32)55 b(gss_add_cred)49 b Fg(\()p Ff(OM)p 1541 3628 28 4 v 41 w(uin)m(t32)31 b(*)g Fe(minor_status)p Ff(,)j(const)565 3738 y(gss)p 688 3738 V 40 w(cred)p 895 3738 V 40 w(id)p 1011 3738 V 40 w(t)d Fe(input_cred_handle)p Ff(,)k(const)c(gss)p 2416 3738 V 40 w(name)p 2668 3738 V 41 w(t)f Fe(desired_name)p Ff(,)k(const)565 3848 y(gss)p 688 3848 V 40 w(OID)d Fe(desired_mech)p Ff(,)j(gss)p 1732 3848 V 40 w(cred)p 1939 3848 V 40 w(usage)p 2196 3848 V 41 w(t)c Fe(cred_usage)p Ff(,)k(OM)p 3035 3848 V 40 w(uin)m(t32)565 3957 y Fe(initiator_time_req)p Ff(,)i(OM)p 1722 3957 V 40 w(uin)m(t32)31 b Fe(acceptor_time_req)p Ff(,)36 b(gss)p 3104 3957 V 40 w(cred)p 3311 3957 V 40 w(id)p 3427 3957 V 40 w(t)31 b(*)565 4067 y Fe(output_cred_handle)p Ff(,)36 b(gss)p 1685 4067 V 40 w(OID)p 1898 4067 V 40 w(set)31 b(*)g Fe(actual_mechs)p Ff(,)j(OM)p 2993 4067 V 40 w(uin)m(t32)d(*)565 4176 y Fe(initiator_time_rec)p Ff(,)36 b(OM)p 1722 4176 V 40 w(uin)m(t32)31 b(*)g Fe (acceptor_time_rec)p Fg(\))390 4286 y Ff(minor)p 629 4286 V 40 w(status)t Fp(:)40 b(\(in)m(teger,)33 b(mo)s(dify\))d(Mec)m (hanism)h(sp)s(eci\014c)f(status)h(co)s(de.)390 4418 y Ff(input)p 609 4418 V 39 w(cred)p 815 4418 V 40 w(handle)5 b Fp(:)109 b(\(gss)p 1409 4418 V 40 w(cred)p 1616 4418 V 40 w(id)p 1732 4418 V 40 w(t,)74 b(read,)f(optional\))66 b(The)e(creden)m(tial)i(to)f(whic)m(h)g(a)390 4528 y(creden)m (tial-elemen)m(t)50 b(will)c(b)s(e)g(added.)88 b(If)46 b(GSS)p 2123 4528 V 39 w(C)p 2228 4528 V 40 w(NO)p 2407 4528 V 40 w(CREDENTIAL)f(is)i(sp)s(eci\014ed,)j(the)390 4637 y(routine)35 b(will)g(comp)s(ose)g(the)f(new)h(creden)m(tial)h (based)e(on)h(default)f(b)s(eha)m(vior)h(\(see)h(text\).)55 b(Note)390 4747 y(that,)39 b(while)e(the)g(creden)m(tial-handle)i(is)d (not)i(mo)s(di\014ed)d(b)m(y)i(gss)p 2643 4747 V 40 w(add)p 2830 4747 V 40 w(cred\(\),)i(the)e(underlying)390 4856 y(creden)m(tial)32 b(will)f(b)s(e)e(mo)s(di\014ed)h(if)g(output)p 1831 4856 V 40 w(creden)m(tial)p 2256 4856 V 41 w(handle)g(is)h(NULL.) 390 4989 y Ff(desired)p 675 4989 V 40 w(name)5 b Fp(:)63 b(\(gss)p 1172 4989 V 41 w(name)p 1425 4989 V 40 w(t,)45 b(read.\))76 b(Name)42 b(of)g(principal)g(whose)f(creden)m(tial)j (should)d(b)s(e)390 5098 y(acquired.)390 5230 y Ff(desired)p 675 5230 V 40 w(mec)m(h)p Fp(:)f(\(Ob)5 b(ject)30 b(ID,)h(read\))e (Underlying)h(securit)m(y)g(mec)m(hanism)g(with)f(whic)m(h)g(the)h (cre-)390 5340 y(den)m(tial)i(ma)m(y)e(b)s(e)g(used.)p eop end %%Page: 21 25 TeXDict begin 21 24 bop 150 -116 a Fp(Chapter)30 b(3:)41 b(Standard)29 b(GSS)h(API)2284 b(21)390 299 y Ff(cred)p 563 299 28 4 v 40 w(usage)5 b Fp(:)42 b(\(gss)p 1044 299 V 40 w(cred)p 1251 299 V 40 w(usage)p 1508 299 V 41 w(t,)31 b(read\))g(GSS)p 2051 299 V 40 w(C)p 2157 299 V 39 w(BOTH)g(-)g(Creden)m(tial)g(ma)m(y)h(b)s(e)e(used)f(either) 390 408 y(to)37 b(initiate)g(or)f(accept)i(securit)m(y)e(con)m(texts.) 59 b(GSS)p 2165 408 V 40 w(C)p 2271 408 V 39 w(INITIA)-8 b(TE)35 b(-)i(Creden)m(tial)f(will)h(only)f(b)s(e)390 518 y(used)27 b(to)i(initiate)h(securit)m(y)f(con)m(texts.)41 b(GSS)p 1924 518 V 40 w(C)p 2030 518 V 39 w(A)m(CCEPT)28 b(-)g(Creden)m(tial)h(will)f(only)g(b)s(e)g(used)f(to)390 628 y(accept)32 b(securit)m(y)f(con)m(texts.)390 765 y Ff(initiator)p 718 765 V 41 w(time)p 935 765 V 41 w(req)r Fp(:)60 b(\(In)m(teger,)43 b(read,)g(optional\))e(n)m(um)m(b)s(er)d(of) i(seconds)g(that)g(the)g(creden)m(tial)390 874 y(should)32 b(remain)i(v)-5 b(alid)34 b(for)f(initiating)i(securit)m(y)f(con)m (texts.)52 b(This)32 b(argumen)m(t)i(is)g(ignored)f(if)h(the)390 984 y(comp)s(osed)27 b(creden)m(tials)h(are)f(of)g(t)m(yp)s(e)h(GSS)p 1882 984 V 39 w(C)p 1987 984 V 40 w(A)m(CCEPT.)e(Sp)s(ecify)g(GSS)p 2950 984 V 40 w(C)p 3056 984 V 39 w(INDEFINITE)h(to)390 1093 y(request)j(that)h(the)g(creden)m(tials)h(ha)m(v)m(e)f(the)g (maxim)m(um)f(p)s(ermitted)g(initiator)i(lifetime.)390 1230 y Ff(acceptor)p 728 1230 V 42 w(time)p 946 1230 V 40 w(req)r Fp(:)58 b(\(In)m(teger,)42 b(read,)f(optional\))g(n)m(um)m (b)s(er)c(of)i(seconds)g(that)g(the)g(creden)m(tial)390 1340 y(should)32 b(remain)g(v)-5 b(alid)33 b(for)g(accepting)h(securit) m(y)g(con)m(texts.)49 b(This)32 b(argumen)m(t)h(is)g(ignored)g(if)g (the)390 1450 y(comp)s(osed)k(creden)m(tials)i(are)f(of)g(t)m(yp)s(e)f (GSS)p 1934 1450 V 39 w(C)p 2039 1450 V 40 w(INITIA)-8 b(TE.)37 b(Sp)s(ecify)g(GSS)p 3058 1450 V 39 w(C)p 3163 1450 V 40 w(INDEFINITE)390 1559 y(to)31 b(request)g(that)f(the)h (creden)m(tials)h(ha)m(v)m(e)f(the)g(maxim)m(um)f(p)s(ermitted)g (initiator)i(lifetime.)390 1696 y Ff(output)p 664 1696 V 40 w(cred)p 871 1696 V 40 w(handle)5 b Fp(:)50 b(\(gss)p 1406 1696 V 41 w(cred)p 1614 1696 V 40 w(id)p 1730 1696 V 40 w(t,)37 b(mo)s(dify)-8 b(,)37 b(optional\))g(The)e(returned)f (creden)m(tial)j(han-)390 1806 y(dle,)k(con)m(taining)e(the)g(new)f (creden)m(tial-elemen)m(t)j(and)d(all)h(the)g(creden)m(tial-elemen)m (ts)i(from)d(in-)390 1915 y(put)p 533 1915 V 39 w(cred)p 739 1915 V 40 w(handle.)45 b(If)31 b(a)h(v)-5 b(alid)32 b(p)s(oin)m(ter)g(to)h(a)f(gss)p 2124 1915 V 40 w(cred)p 2331 1915 V 40 w(id)p 2447 1915 V 40 w(t)g(is)f(supplied)g(for)h(this)f (parameter,)390 2025 y(gss)p 513 2025 V 40 w(add)p 700 2025 V 40 w(cred)f(creates)i(a)f(new)f(creden)m(tial)i(handle)e(con)m (taining)i(all)g(creden)m(tial-elemen)m(ts)h(from)390 2134 y(the)j(input)p 771 2134 V 39 w(cred)p 977 2134 V 40 w(handle)g(and)f(the)h(newly)g(acquired)g(creden)m(tial-elemen)m (t;)42 b(if)36 b(NULL)g(is)g(sp)s(ec-)390 2244 y(i\014ed)e(for)g(this)h (parameter,)h(the)f(newly)f(acquired)g(creden)m(tial-elemen)m(t)k(will) d(b)s(e)f(added)g(to)h(the)390 2354 y(creden)m(tial)27 b(iden)m(ti\014ed)e(b)m(y)g(input)p 1533 2354 V 39 w(cred)p 1739 2354 V 40 w(handle.)38 b(The)25 b(resources)g(asso)s(ciated)i (with)d(an)m(y)i(creden-)390 2463 y(tial)31 b(handle)e(returned)f(via)i (this)f(parameter)h(m)m(ust)g(b)s(e)e(released)j(b)m(y)e(the)h (application)g(after)g(use)390 2573 y(with)g(a)h(call)g(to)h(gss)p 1074 2573 V 40 w(release)p 1376 2573 V 41 w(cred\(\).)390 2710 y Ff(actual)p 637 2710 V 41 w(mec)m(hs)t Fp(:)40 b(\(Set)29 b(of)f(Ob)5 b(ject)28 b(IDs,)h(mo)s(dify)-8 b(,)28 b(optional\))i(The)d(complete)j(set)f(of)f(mec)m(hanisms)390 2819 y(for)g(whic)m(h)g(the)g(new)g(creden)m(tial)i(is)e(v)-5 b(alid.)41 b(Storage)29 b(for)f(the)g(returned)f(OID-set)j(m)m(ust)e(b) s(e)f(freed)390 2929 y(b)m(y)j(the)g(application)h(after)g(use)e(with)h (a)g(call)h(to)g(gss)p 2194 2929 V 40 w(release)p 2496 2929 V 42 w(oid)p 2659 2929 V 40 w(set\(\).)42 b(Sp)s(ecify)29 b(NULL)h(if)g(not)390 3039 y(required.)390 3176 y Ff(initiator)p 718 3176 V 41 w(time)p 935 3176 V 41 w(rec)6 b Fp(:)57 b(\(In)m(teger,)41 b(mo)s(dify)-8 b(,)41 b(optional\))e(Actual)h(n)m (um)m(b)s(er)d(of)h(seconds)g(for)g(whic)m(h)390 3285 y(the)e(returned)f(creden)m(tials)j(will)e(remain)h(v)-5 b(alid)36 b(for)g(initiating)i(con)m(texts)g(using)d(the)i(sp)s (eci\014ed)390 3395 y(mec)m(hanism.)84 b(If)45 b(the)g(implemen)m (tation)h(or)f(mec)m(hanism)g(do)s(es)f(not)h(supp)s(ort)e(expiration)j (of)390 3504 y(creden)m(tials,)40 b(the)d(v)-5 b(alue)37 b(GSS)p 1459 3504 V 40 w(C)p 1565 3504 V 39 w(INDEFINITE)g(will)g(b)s (e)f(returned.)59 b(Sp)s(ecify)36 b(NULL)h(if)g(not)390 3614 y(required)390 3751 y Ff(acceptor)p 728 3751 V 42 w(time)p 946 3751 V 40 w(rec)6 b Fp(:)55 b(\(In)m(teger,)40 b(mo)s(dify)-8 b(,)39 b(optional\))g(Actual)f(n)m(um)m(b)s(er)e(of)i (seconds)f(for)g(whic)m(h)390 3861 y(the)h(returned)f(creden)m(tials)i (will)f(remain)f(v)-5 b(alid)39 b(for)e(accepting)i(securit)m(y)g(con)m (texts)g(using)f(the)390 3970 y(sp)s(eci\014ed)20 b(mec)m(hanism.)38 b(If)20 b(the)h(implemen)m(tation)h(or)f(mec)m(hanism)g(do)s(es)f(not)h (supp)s(ort)e(expiration)390 4080 y(of)28 b(creden)m(tials,)i(the)e(v) -5 b(alue)29 b(GSS)p 1533 4080 V 39 w(C)p 1638 4080 V 40 w(INDEFINITE)f(will)g(b)s(e)f(returned.)39 b(Sp)s(ecify)27 b(NULL)h(if)g(not)390 4189 y(required)390 4326 y(Adds)f(a)i(creden)m (tial-elemen)m(t)i(to)e(a)g(creden)m(tial.)41 b(The)28 b(creden)m(tial-elemen)m(t)j(is)d(iden)m(ti\014ed)h(b)m(y)f(the)390 4436 y(name)36 b(of)g(the)g(principal)g(to)g(whic)m(h)g(it)g(refers.)57 b(GSS-API)36 b(implemen)m(tations)h(m)m(ust)f(imp)s(ose)g(a)390 4545 y(lo)s(cal)i(access-con)m(trol)i(p)s(olicy)c(on)h(callers)h(of)e (this)h(routine)f(to)i(prev)m(en)m(t)f(unauthorized)f(callers)390 4655 y(from)26 b(acquiring)i(creden)m(tial-elemen)m(ts)i(to)e(whic)m(h) e(they)h(are)h(not)f(en)m(titled.)41 b(This)26 b(routine)h(is)g(not)390 4765 y(in)m(tended)33 b(to)i(pro)m(vide)e(a)h Fj(")p Fp(login)h(to)f(the)g(net)m(w)m(ork)p Fj(")g Fp(function,)g(as)g(suc)m (h)f(a)h(function)g(w)m(ould)f(in-)390 4874 y(v)m(olv)m(e)28 b(the)f(creation)h(of)e(new)g(mec)m(hanism-sp)s(eci\014c)h(authen)m (tication)i(data,)f(rather)e(than)h(merely)390 4984 y(acquiring)32 b(a)h(GSS-API)e(handle)h(to)h(existing)g(data.)47 b(Suc)m(h)31 b(functions,)h(if)g(required,)g(should)g(b)s(e)390 5093 y(de\014ned)d(in)h(implemen)m(tation-sp)s(eci\014c)i(extensions)f(to)g (the)g(API.)390 5230 y(If)22 b(desired)p 758 5230 V 39 w(name)h(is)f(GSS)p 1288 5230 V 39 w(C)p 1393 5230 V 40 w(NO)p 1572 5230 V 40 w(NAME,)h(the)f(call)i(is)e(in)m(terpreted)h (as)f(a)h(request)f(to)h(add)f(a)g(cre-)390 5340 y(den)m(tial)g(elemen) m(t)h(that)e(will)h(in)m(v)m(ok)m(e)h(default)e(b)s(eha)m(vior)g(when)f (passed)g(to)i(gss)p 3019 5340 V 40 w(init)p 3195 5340 V 41 w(sec)p 3352 5340 V 40 w(con)m(text\(\))p eop end %%Page: 22 26 TeXDict begin 22 25 bop 150 -116 a Fp(Chapter)30 b(3:)41 b(Standard)29 b(GSS)h(API)2284 b(22)390 299 y(\(if)26 b(cred)p 677 299 28 4 v 40 w(usage)g(is)g(GSS)p 1220 299 V 39 w(C)p 1325 299 V 40 w(INITIA)-8 b(TE)25 b(or)h(GSS)p 2091 299 V 39 w(C)p 2196 299 V 40 w(BOTH\))f(or)h(gss)p 2789 299 V 40 w(accept)p 3080 299 V 42 w(sec)p 3238 299 V 40 w(con)m(text\(\))j(\(if)390 408 y(cred)p 563 408 V 40 w(usage)i(is)f(GSS)p 1115 408 V 40 w(C)p 1221 408 V 39 w(A)m(CCEPT)g(or)g(GSS)p 1961 408 V 40 w(C)p 2067 408 V 39 w(BOTH\).)390 559 y(This)h(routine)h(is)g(exp)s(ected)g(to)h (b)s(e)e(used)g(primarily)g(b)m(y)h(con)m(text)i(acceptors,)g(since)e (implemen-)390 668 y(tations)40 b(are)f(lik)m(ely)i(to)e(pro)m(vide)g (mec)m(hanism-sp)s(eci\014c)h(w)m(a)m(ys)g(of)f(obtaining)g(GSS-API)g (initia-)390 778 y(tor)34 b(creden)m(tials)h(from)e(the)g(system)h (login)g(pro)s(cess.)50 b(Some)33 b(implemen)m(tations)i(ma)m(y)f (therefore)390 888 y(not)39 b(supp)s(ort)e(the)i(acquisition)h(of)f (GSS)p 1827 888 V 39 w(C)p 1932 888 V 40 w(INITIA)-8 b(TE)38 b(or)h(GSS)p 2724 888 V 39 w(C)p 2829 888 V 40 w(BOTH)f(creden)m(tials)i(via)390 997 y(gss)p 513 997 V 40 w(acquire)p 838 997 V 41 w(cred)35 b(for)g(an)m(y)g(name)g(other)g (than)g(GSS)p 2280 997 V 40 w(C)p 2386 997 V 39 w(NO)p 2564 997 V 40 w(NAME,)h(or)f(a)g(name)h(pro)s(duced)390 1107 y(b)m(y)28 b(applying)f(either)h(gss)p 1260 1107 V 41 w(inquire)p 1577 1107 V 39 w(cred)g(to)g(a)g(v)-5 b(alid)28 b(creden)m(tial,)j(or)c(gss)p 2875 1107 V 40 w(inquire)p 3191 1107 V 40 w(con)m(text)j(to)e(an)390 1216 y(activ)m(e)33 b(con)m(text.)390 1367 y(If)67 b(creden)m(tial)i (acquisition)g(is)f(time-consuming)g(for)f(a)h(mec)m(hanism,)78 b(the)68 b(mec)m(hanism)390 1476 y(ma)m(y)50 b(c)m(ho)s(ose)h(to)f (dela)m(y)h(the)f(actual)h(acquisition)g(un)m(til)f(the)g(creden)m (tial)h(is)e(required)g(\(e.g.)390 1586 y(b)m(y)78 b(gss)p 687 1586 V 40 w(init)p 863 1586 V 41 w(sec)p 1020 1586 V 40 w(con)m(text)j(or)d(gss)p 1708 1586 V 40 w(accept)p 1999 1586 V 42 w(sec)p 2157 1586 V 40 w(con)m(text\).)187 b(Suc)m(h)77 b(mec)m(hanism-sp)s(eci\014c)390 1696 y(implemen)m(tation) 41 b(decisions)f(should)e(b)s(e)h(in)m(visible)g(to)h(the)g(calling)h (application;)k(th)m(us)39 b(a)h(call)390 1805 y(of)33 b(gss)p 619 1805 V 40 w(inquire)p 935 1805 V 40 w(cred)f(immediately)i (follo)m(wing)h(the)e(call)h(of)f(gss)p 2632 1805 V 40 w(add)p 2819 1805 V 40 w(cred)f(m)m(ust)h(return)f(v)-5 b(alid)390 1915 y(creden)m(tial)56 b(data,)61 b(and)53 b(ma)m(y)i(therefore)f(incur)g(the)g(o)m(v)m(erhead)h(of)g(a)f (deferred)f(creden)m(tial)390 2024 y(acquisition.)390 2175 y(This)25 b(routine)h(can)g(b)s(e)f(used)g(to)i(either)f(comp)s (ose)g(a)g(new)g(creden)m(tial)h(con)m(taining)g(all)g(creden)m(tial-) 390 2284 y(elemen)m(ts)g(of)f(the)g(original)g(in)g(addition)g(to)g (the)g(newly-acquire)g(creden)m(tial-elemen)m(t,)k(or)c(to)h(add)390 2394 y(the)38 b(new)f(creden)m(tial-)j(elemen)m(t)g(to)e(an)g(existing) h(creden)m(tial.)65 b(If)37 b(NULL)h(is)g(sp)s(eci\014ed)f(for)h(the) 390 2503 y(output)p 664 2503 V 40 w(cred)p 871 2503 V 40 w(handle)e(parameter)i(argumen)m(t,)i(the)d(new)g(creden)m (tial-elemen)m(t)j(will)e(b)s(e)f(added)390 2613 y(to)28 b(the)f(creden)m(tial)i(iden)m(ti\014ed)e(b)m(y)g(input)p 1800 2613 V 40 w(cred)p 2007 2613 V 39 w(handle;)i(if)e(a)g(v)-5 b(alid)28 b(p)s(oin)m(ter)f(is)g(sp)s(eci\014ed)g(for)g(the)390 2723 y(output)p 664 2723 V 40 w(cred)p 871 2723 V 40 w(handle)j(parameter,)h(a)f(new)g(creden)m(tial)i(handle)e(will)h(b)s (e)f(created.)390 2873 y(If)22 b(GSS)p 652 2873 V 39 w(C)p 757 2873 V 40 w(NO)p 936 2873 V 40 w(CREDENTIAL)g(is)g(sp)s (eci\014ed)g(as)h(the)g(input)p 2524 2873 V 39 w(cred)p 2730 2873 V 40 w(handle,)h(gss)p 3199 2873 V 40 w(add)p 3386 2873 V 39 w(cred)f(will)390 2983 y(comp)s(ose)31 b(a)h(creden)m(tial)h(\(and)e(set)g(the)h(output)p 2039 2983 V 39 w(cred)p 2245 2983 V 40 w(handle)f(parameter)h(accordingly\)) g(based)390 3092 y(on)i(default)g(b)s(eha)m(vior.)50 b(That)34 b(is,)h(the)f(call)h(will)f(ha)m(v)m(e)h(the)f(same)g (e\013ect)h(as)f(if)g(the)g(application)390 3202 y(had)k(\014rst)g (made)h(a)g(call)h(to)g(gss)p 1524 3202 V 40 w(acquire)p 1849 3202 V 41 w(cred\(\),)i(sp)s(ecifying)c(the)h(same)g(usage)h(and)e (passing)390 3311 y(GSS)p 569 3311 V 39 w(C)p 674 3311 V 40 w(NO)p 853 3311 V 40 w(NAME)f(as)h(the)f(desired)p 1772 3311 V 39 w(name)g(parameter)h(to)g(obtain)f(an)g(explicit)h (creden)m(tial)390 3421 y(handle)31 b(em)m(b)s(o)s(dying)f(default)h(b) s(eha)m(vior,)h(passed)e(this)h(creden)m(tial)i(handle)e(to)g(gss)p 3266 3421 V 41 w(add)p 3454 3421 V 39 w(cred\(\),)390 3531 y(and)f(\014nally)g(called)i(gss)p 1223 3531 V 40 w(release)p 1525 3531 V 41 w(cred\(\))f(on)f(the)h(\014rst)f(creden)m (tial)h(handle.)390 3681 y(If)22 b(GSS)p 652 3681 V 40 w(C)p 758 3681 V 39 w(NO)p 936 3681 V 40 w(CREDENTIAL)g(is)h(sp)s (eci\014ed)f(as)i(the)f(input)p 2526 3681 V 39 w(cred)p 2732 3681 V 40 w(handle)f(parameter,)j(a)e(non-)390 3790 y(NULL)30 b(output)p 944 3790 V 40 w(cred)p 1151 3790 V 40 w(handle)g(m)m(ust)g(b)s(e)g(supplied.)390 3941 y(Return)g(v)-5 b(alue:)390 4091 y Fj(GSS_S_COMPLETE)p Fp(:)37 b(Successful)30 b(completion.)390 4242 y Fj(GSS_S_BAD_MECH)p Fp(:)37 b(Una)m(v)-5 b(ailable)32 b(mec)m(hanism)f(requested.)390 4392 y Fj(GSS_S_BAD_NAMETYPE)p Fp(:)56 b(T)m(yp)s(e)40 b(con)m(tained)h(within)f(desired)p 2579 4392 V 40 w(name)g(parameter)h (is)f(not)h(sup-)390 4502 y(p)s(orted.)390 4652 y Fj(GSS_S_BAD_NAME)p Fp(:)c(V)-8 b(alue)31 b(supplied)e(for)i(desired)p 2160 4652 V 39 w(name)g(parameter)f(is)h(ill-formed.)390 4802 y Fj(GSS_S_DUPLICATE_ELEMENT)p Fp(:)45 b(The)35 b(creden)m(tial)i (already)f(con)m(tains)g(an)g(elemen)m(t)h(for)e(the)h(re-)390 4912 y(quested)30 b(mec)m(hanism)h(with)f(o)m(v)m(erlapping)i(usage)f (and)e(v)-5 b(alidit)m(y)32 b(p)s(erio)s(d.)390 5062 y Fj(GSS_S_CREDENTIALS_EXPIRE)o(D)p Fp(:)k(The)30 b(required)g(creden)m (tials)i(could)f(not)g(b)s(e)f(added)g(b)s(ecause)390 5172 y(they)h(ha)m(v)m(e)g(expired.)390 5322 y Fj(GSS_S_NO_CRED)p Fp(:)37 b(No)31 b(creden)m(tials)h(w)m(ere)f(found)e(for)h(the)g(sp)s (eci\014ed)g(name.)p eop end %%Page: 23 27 TeXDict begin 23 26 bop 150 -116 a Fp(Chapter)30 b(3:)41 b(Standard)29 b(GSS)h(API)2284 b(23)150 299 y Fi(gss)p 316 299 37 5 v 55 w(inquire)p 746 299 V 55 w(cred)3350 505 y Fp([F)-8 b(unction])-3599 b Fh(OM_uint32)55 b(gss_inquire_cred)50 b Fg(\()p Ff(OM)p 1750 505 28 4 v 41 w(uin)m(t32)31 b(*)g Fe(minor_status)p Ff(,)j(const)565 614 y(gss)p 688 614 V 40 w(cred)p 895 614 V 40 w(id)p 1011 614 V 40 w(t)d Fe(cred_handle)p Ff(,)j(gss)p 1865 614 V 40 w(name)p 2117 614 V 40 w(t)c(*)h Fe(name)p Ff(,)h(OM)p 2717 614 V 40 w(uin)m(t32)f(*)g Fe(lifetime)p Ff(,)565 724 y(gss)p 688 724 V 40 w(cred)p 895 724 V 40 w(usage)p 1152 724 V 41 w(t)g(*)f Fe(cred_usage)p Ff(,)k(gss)p 2030 724 V 40 w(OID)p 2243 724 V 40 w(set)d(*)g Fe(mechanisms)p Fg(\))390 833 y Ff(minor)p 629 833 V 40 w(status)t Fp(:)40 b(\(in)m(teger,)33 b(mo)s(dify\))d(Mec)m(hanism)h(sp)s(eci\014c)f (status)h(co)s(de.)390 977 y Ff(cred)p 563 977 V 40 w(handle)5 b Fp(:)37 b(\(gss)p 1085 977 V 41 w(cred)p 1293 977 V 40 w(id)p 1409 977 V 39 w(t,)26 b(read\))e(A)h(handle)e(that)i(refers)f (to)g(the)h(target)g(creden)m(tial.)40 b(Sp)s(ec-)390 1087 y(ify)30 b(GSS)p 700 1087 V 40 w(C)p 806 1087 V 39 w(NO)p 984 1087 V 40 w(CREDENTIAL)g(to)h(inquire)f(ab)s(out)g(the)h (default)f(initiator)i(principal.)390 1230 y Ff(name)5 b Fp(:)37 b(\(gss)p 827 1230 V 41 w(name)p 1080 1230 V 40 w(t,)25 b(mo)s(dify)-8 b(,)24 b(optional\))h(The)d(name)h(whose)g (iden)m(tit)m(y)i(the)e(creden)m(tial)h(asserts.)390 1340 y(Storage)34 b(asso)s(ciated)h(with)d(this)h(name)g(should)f(b)s (e)g(freed)h(b)m(y)g(the)g(application)h(after)g(use)e(with)390 1449 y(a)f(call)g(to)h(gss)p 867 1449 V 40 w(release)p 1169 1449 V 41 w(name\(\).)42 b(Sp)s(ecify)29 b(NULL)i(if)f(not)g (required.)390 1593 y Ff(lifetime)5 b Fp(:)61 b(\(In)m(teger,)44 b(mo)s(dify)-8 b(,)42 b(optional\))f(The)f(n)m(um)m(b)s(er)e(of)i (seconds)g(for)f(whic)m(h)h(the)g(creden-)390 1703 y(tial)50 b(will)f(remain)f(v)-5 b(alid.)95 b(If)48 b(the)h(creden)m(tial)h(has)e (expired,)53 b(this)c(parameter)g(will)g(b)s(e)e(set)390 1812 y(to)e(zero.)84 b(If)44 b(the)g(implemen)m(tation)j(do)s(es)d(not) g(supp)s(ort)f(creden)m(tial)j(expiration,)j(the)44 b(v)-5 b(alue)390 1922 y(GSS)p 569 1922 V 39 w(C)p 674 1922 V 40 w(INDEFINITE)30 b(will)h(b)s(e)f(returned.)39 b(Sp)s(ecify)30 b(NULL)g(if)h(not)f(required.)390 2065 y Ff(cred)p 563 2065 V 40 w(usage)5 b Fp(:)61 b(\(gss)p 1063 2065 V 40 w(cred)p 1270 2065 V 40 w(usage)p 1527 2065 V 41 w(t,)43 b(mo)s(dify)-8 b(,)42 b(optional\))f(Ho)m(w)g(the)f(creden)m(tial)i(ma) m(y)e(b)s(e)f(used.)390 2175 y(One)31 b(of)g(the)h(follo)m(wing:)44 b(GSS)p 1445 2175 V 39 w(C)p 1550 2175 V 40 w(INITIA)-8 b(TE,)30 b(GSS)p 2239 2175 V 40 w(C)p 2345 2175 V 39 w(A)m(CCEPT,)h(GSS)p 3000 2175 V 40 w(C)p 3106 2175 V 39 w(BOTH.)h(Sp)s(ecify)390 2285 y(NULL)e(if)h(not)f(required.)390 2428 y Ff(mec)m(hanisms)t Fp(:)58 b(\(gss)p 1108 2428 V 40 w(OID)p 1321 2428 V 40 w(set,)42 b(mo)s(dify)-8 b(,)41 b(optional\))f(Set)f(of)g(mec)m(hanisms)g(supp)s(orted)e(b)m(y)i (the)390 2538 y(creden)m(tial.)68 b(Storage)40 b(asso)s(ciated)h(with)d (this)h(OID)g(set)h(m)m(ust)f(b)s(e)f(freed)h(b)m(y)f(the)i (application)390 2647 y(after)31 b(use)f(with)g(a)h(call)g(to)h(gss)p 1446 2647 V 40 w(release)p 1748 2647 V 41 w(oid)p 1910 2647 V 40 w(set\(\).)42 b(Sp)s(ecify)30 b(NULL)g(if)h(not)f(required.) 390 2791 y(Obtains)g(information)h(ab)s(out)f(a)g(creden)m(tial.)390 2934 y(Return)g(v)-5 b(alue:)390 3078 y Fj(GSS_S_COMPLETE)p Fp(:)37 b(Successful)30 b(completion.)390 3222 y Fj(GSS_S_NO_CRED)p Fp(:)37 b(The)30 b(referenced)g(creden)m(tials)i(could)e(not)h(b)s(e)f (accessed.)390 3365 y Fj(GSS_S_DEFECTIVE_CREDENTI)o(AL)p Fp(:)35 b(The)29 b(referenced)i(creden)m(tials)h(w)m(ere)e(in)m(v)-5 b(alid.)390 3509 y Fj(GSS_S_CREDENTIALS_EXPIRE)o(D)p Fp(:)47 b(The)36 b(referenced)g(creden)m(tials)i(ha)m(v)m(e)g(expired.) 58 b(If)36 b(the)h(life-)390 3618 y(time)31 b(parameter)g(w)m(as)g(not) f(passed)g(as)h(NULL,)f(it)h(will)g(b)s(e)f(set)h(to)g(0.)150 3827 y Fi(gss)p 316 3827 37 5 v 55 w(inquire)p 746 3827 V 55 w(cred)p 1030 3827 V 53 w(b)m(y)p 1213 3827 V 54 w(mec)m(h)3350 4033 y Fp([F)-8 b(unction])-3599 b Fh(OM_uint32)55 b(gss_inquire_cred_by_me)q(ch)d Fg(\()p Ff(OM)p 2169 4033 28 4 v 40 w(uin)m(t32)31 b(*)565 4142 y Fe(minor_status)p Ff(,)i(const)d(gss)p 1607 4142 V 40 w(cred)p 1814 4142 V 40 w(id)p 1930 4142 V 40 w(t)f Fe(cred_handle)p Ff(,)k(const)d(gss)p 3018 4142 V 40 w(OID)f Fe(mech_type)p Ff(,)565 4252 y(gss)p 688 4252 V 40 w(name)p 940 4252 V 40 w(t)i(*)g Fe(name)p Ff(,)h(OM)p 1541 4252 V 40 w(uin)m(t32)f(*)g Fe(initiator_lifetime)p Ff(,)36 b(OM)p 3088 4252 V 40 w(uin)m(t32)31 b(*)565 4361 y Fe(acceptor_lifetime)p Ff(,)36 b(gss)p 1633 4361 V 40 w(cred)p 1840 4361 V 40 w(usage)p 2097 4361 V 41 w(t)30 b(*)h Fe(cred_usage)p Fg(\))390 4471 y Ff(minor)p 629 4471 V 40 w(status)t Fp(:)40 b(\(In)m(teger,)32 b(mo)s(dify\))e (Mec)m(hanism)h(sp)s(eci\014c)g(status)f(co)s(de.)390 4614 y Ff(cred)p 563 4614 V 40 w(handle)5 b Fp(:)37 b(\(gss)p 1085 4614 V 41 w(cred)p 1293 4614 V 40 w(id)p 1409 4614 V 39 w(t,)26 b(read\))e(A)h(handle)e(that)i(refers)f(to)g(the)h(target) g(creden)m(tial.)40 b(Sp)s(ec-)390 4724 y(ify)30 b(GSS)p 700 4724 V 40 w(C)p 806 4724 V 39 w(NO)p 984 4724 V 40 w(CREDENTIAL)g(to)h(inquire)f(ab)s(out)g(the)h(default)f(initiator)i (principal.)390 4868 y Ff(mec)m(h)p 600 4868 V 41 w(t)m(yp)s(e)5 b Fp(:)67 b(\(gss)p 1064 4868 V 41 w(OID,)44 b(read\))g(The)f(mec)m (hanism)h(for)f(whic)m(h)h(information)g(should)f(b)s(e)g(re-)390 4977 y(turned.)390 5121 y Ff(name)5 b Fp(:)37 b(\(gss)p 827 5121 V 41 w(name)p 1080 5121 V 40 w(t,)25 b(mo)s(dify)-8 b(,)24 b(optional\))h(The)d(name)h(whose)g(iden)m(tit)m(y)i(the)e (creden)m(tial)h(asserts.)390 5230 y(Storage)33 b(asso)s(ciated)g(with) f(this)g(name)g(m)m(ust)f(b)s(e)h(freed)f(b)m(y)h(the)g(application)h (after)f(use)g(with)g(a)390 5340 y(call)g(to)f(gss)p 791 5340 V 40 w(release)p 1093 5340 V 41 w(name\(\).)42 b(Sp)s(ecify)29 b(NULL)i(if)f(not)h(required.)p eop end %%Page: 24 28 TeXDict begin 24 27 bop 150 -116 a Fp(Chapter)30 b(3:)41 b(Standard)29 b(GSS)h(API)2284 b(24)390 299 y Ff(initiator)p 718 299 28 4 v 41 w(lifetime)5 b Fp(:)55 b(\(In)m(teger,)40 b(mo)s(dify)-8 b(,)38 b(optional\))h(The)d(n)m(um)m(b)s(er)f(of)i (seconds)g(for)f(whic)m(h)h(the)390 408 y(creden)m(tial)25 b(will)g(remain)e(capable)i(of)f(initiating)i(securit)m(y)e(con)m (texts)i(under)c(the)i(sp)s(eci\014ed)f(mec)m(h-)390 518 y(anism.)39 b(If)27 b(the)g(creden)m(tial)i(can)e(no)g(longer)h(b)s (e)e(used)h(to)g(initiate)i(con)m(texts,)h(or)d(if)g(the)g(creden)m (tial)390 628 y(usage)42 b(for)f(this)g(mec)m(hanism)g(is)g(GSS)p 1746 628 V 40 w(C)p 1852 628 V 39 w(A)m(CCEPT,)g(this)g(parameter)g (will)h(b)s(e)e(set)i(to)g(zero.)390 737 y(If)33 b(the)g(implemen)m (tation)i(do)s(es)e(not)g(supp)s(ort)f(expiration)i(of)f(initiator)i (creden)m(tials,)g(the)e(v)-5 b(alue)390 847 y(GSS)p 569 847 V 39 w(C)p 674 847 V 40 w(INDEFINITE)30 b(will)h(b)s(e)f (returned.)39 b(Sp)s(ecify)30 b(NULL)g(if)h(not)f(required.)390 980 y Ff(acceptor)p 728 980 V 42 w(lifetime)5 b Fp(:)53 b(\(In)m(teger,)38 b(mo)s(dify)-8 b(,)38 b(optional\))f(The)e(n)m(um)m (b)s(er)g(of)h(seconds)g(for)f(whic)m(h)h(the)390 1090 y(creden)m(tial)24 b(will)g(remain)f(capable)g(of)g(accepting)i (securit)m(y)f(con)m(texts)g(under)e(the)h(sp)s(eci\014ed)f(mec)m(h-) 390 1200 y(anism.)40 b(If)29 b(the)g(creden)m(tial)i(can)f(no)f(longer) g(b)s(e)g(used)g(to)g(accept)i(con)m(texts,)h(or)d(if)g(the)g(creden)m (tial)390 1309 y(usage)39 b(for)f(this)g(mec)m(hanism)h(is)f(GSS)p 1732 1309 V 39 w(C)p 1837 1309 V 40 w(INITIA)-8 b(TE,)38 b(this)g(parameter)h(will)f(b)s(e)g(set)h(to)g(zero.)390 1419 y(If)32 b(the)g(implemen)m(tation)i(do)s(es)e(not)h(supp)s(ort)d (expiration)j(of)g(acceptor)h(creden)m(tials,)g(the)e(v)-5 b(alue)390 1528 y(GSS)p 569 1528 V 39 w(C)p 674 1528 V 40 w(INDEFINITE)30 b(will)h(b)s(e)f(returned.)39 b(Sp)s(ecify)30 b(NULL)g(if)h(not)f(required.)390 1662 y Ff(cred)p 563 1662 V 40 w(usage)5 b Fp(:)37 b(\(gss)p 1039 1662 V 40 w(cred)p 1246 1662 V 40 w(usage)p 1503 1662 V 41 w(t,)24 b(mo)s(dify)-8 b(,)23 b(optional\))g(Ho)m(w)f(the)g(creden)m(tial)h(ma) m(y)f(b)s(e)f(used)f(with)390 1772 y(the)i(sp)s(eci\014ed)e(mec)m (hanism.)38 b(One)21 b(of)h(the)g(follo)m(wing:)37 b(GSS)p 2414 1772 V 40 w(C)p 2520 1772 V 39 w(INITIA)-8 b(TE,)21 b(GSS)p 3199 1772 V 40 w(C)p 3305 1772 V 39 w(A)m(CCEPT,)390 1881 y(GSS)p 569 1881 V 39 w(C)p 674 1881 V 40 w(BOTH.)30 b(Sp)s(ecify)g(NULL)g(if)h(not)f(required.)390 2015 y(Obtains)g(p)s (er-mec)m(hanism)g(information)h(ab)s(out)f(a)g(creden)m(tial.)390 2149 y(Return)g(v)-5 b(alue:)390 2282 y Fj(GSS_S_COMPLETE)p Fp(:)37 b(Successful)30 b(completion.)390 2416 y Fj(GSS_S_NO_CRED)p Fp(:)37 b(The)30 b(referenced)g(creden)m(tials)i(could)e(not)h(b)s(e)f (accessed.)390 2550 y Fj(GSS_S_DEFECTIVE_CREDENTI)o(AL)p Fp(:)35 b(The)29 b(referenced)i(creden)m(tials)h(w)m(ere)e(in)m(v)-5 b(alid.)390 2683 y Fj(GSS_S_CREDENTIALS_EXPIRE)o(D)p Fp(:)47 b(The)36 b(referenced)g(creden)m(tials)i(ha)m(v)m(e)g(expired.) 58 b(If)36 b(the)h(life-)390 2793 y(time)31 b(parameter)g(w)m(as)g(not) f(passed)g(as)h(NULL,)f(it)h(will)g(b)s(e)f(set)h(to)g(0.)150 2990 y Fi(gss)p 316 2990 37 5 v 55 w(release)p 731 2990 V 54 w(cred)3350 3186 y Fp([F)-8 b(unction])-3599 b Fh(OM_uint32)55 b(gss_release_cred)50 b Fg(\()p Ff(OM)p 1750 3186 28 4 v 41 w(uin)m(t32)31 b(*)g Fe(minor_status)p Ff(,)565 3295 y(gss)p 688 3295 V 40 w(cred)p 895 3295 V 40 w(id)p 1011 3295 V 40 w(t)g(*)f Fe(cred_handle)p Fg(\))390 3405 y Ff(minor)p 629 3405 V 40 w(status)t Fp(:)40 b(\(In)m(teger,)32 b(mo)s(dify\))e(Mec)m(hanism)h(sp)s(eci\014c)g(status)f(co)s(de.)390 3538 y Ff(cred)p 563 3538 V 40 w(handle)5 b Fp(:)48 b(\(gss)p 1096 3538 V 41 w(cred)p 1304 3538 V 40 w(id)p 1420 3538 V 40 w(t,)35 b(mo)s(dify)-8 b(,)36 b(optional\))g(Opaque)d(handle)h (iden)m(tifying)h(creden)m(tial)390 3648 y(to)f(b)s(e)f(released.)51 b(If)33 b(GSS)p 1293 3648 V 40 w(C)p 1399 3648 V 39 w(NO)p 1577 3648 V 40 w(CREDENTIAL)g(is)h(supplied,)f(the)h(routine)g(will)f (complete)390 3758 y(successfully)-8 b(,)31 b(but)f(will)g(do)h (nothing.)390 3891 y(Informs)67 b(GSS-API)i(that)g(the)g(sp)s (eci\014ed)f(creden)m(tial)i(handle)e(is)h(no)f(longer)i(required)390 4001 y(b)m(y)56 b(the)f(application,)64 b(and)55 b(frees)h(asso)s (ciated)h(resources.)117 b(The)55 b(cred)p 3033 4001 V 40 w(handle)g(is)h(set)g(to)390 4110 y(GSS)p 569 4110 V 39 w(C)p 674 4110 V 40 w(NO)p 853 4110 V 40 w(CREDENTIAL)30 b(on)g(successful)g(completion)i(of)e(this)g(call.)390 4244 y(Return)g(v)-5 b(alue:)390 4378 y Fj(GSS_S_COMPLETE)p Fp(:)37 b(Successful)30 b(completion.)390 4511 y Fj(GSS_S_NO_CRED)p Fp(:)37 b(Creden)m(tials)31 b(could)g(not)f(b)s(e)g(accessed.)150 4742 y Fo(3.6)68 b(Con)l(text-Lev)l(el)47 b(Routines)293 4902 y Fj(GSS-API)f(Context-Level)e(Routines)293 5121 y(Routine)1191 b(Function)293 5230 y(-------)g(--------)293 5340 y(gss_init_sec_context)567 b(Initiate)46 b(a)h(security)f(context) g(with)p eop end %%Page: 25 29 TeXDict begin 25 28 bop 150 -116 a Fp(Chapter)30 b(3:)41 b(Standard)29 b(GSS)h(API)2284 b(25)1820 299 y Fj(a)48 b(peer)f(application.)293 408 y(gss_accept_sec_context)471 b(Accept)47 b(a)g(security)f(context)1820 518 y(initiated)g(by)h(a)g (peer)g(application.)293 628 y(gss_delete_sec_context)471 b(Discard)46 b(a)i(security)d(context.)293 737 y (gss_process_context_token)327 b(Process)46 b(a)i(token)e(on)h(a)h (security)1820 847 y(context)e(from)h(a)g(peer)g(application.)293 956 y(gss_context_time)759 b(Determine)46 b(for)h(how)g(long)f(a)i (context)1820 1066 y(will)f(remain)f(valid.)293 1176 y(gss_inquire_context)615 b(Obtain)47 b(information)d(about)j(a)1820 1285 y(security)f(context.)293 1395 y(gss_wrap_size_limit)615 b(Determine)46 b(token-size)f(limit)h(for)1820 1504 y(gss_wrap)g(on)h (a)h(context.)293 1614 y(gss_export_sec_context)471 b(Transfer)46 b(a)h(security)f(context)g(to)1820 1724 y(another)g(process.)293 1833 y(gss_import_sec_context)471 b(Import)47 b(a)g(transferred)e (context.)150 2028 y Fi(gss)p 316 2028 37 5 v 55 w(init)p 555 2028 V 54 w(sec)p 768 2028 V 54 w(con)m(text)3350 2221 y Fp([F)-8 b(unction])-3599 b Fh(OM_uint32)55 b (gss_init_sec_context)d Fg(\()p Ff(OM)p 1960 2221 28 4 v 40 w(uin)m(t32)31 b(*)g Fe(minor_status)p Ff(,)565 2331 y(const)g(gss)p 926 2331 V 40 w(cred)p 1133 2331 V 40 w(id)p 1249 2331 V 40 w(t)f Fe(initiator_cred_handl)q(e)p Ff(,)36 b(gss)p 2625 2331 V 41 w(ctx)p 2789 2331 V 40 w(id)p 2905 2331 V 40 w(t)31 b(*)565 2440 y Fe(context_handle)p Ff(,)k(const)c(gss)p 1714 2440 V 40 w(name)p 1966 2440 V 40 w(t)g Fe(target_name)p Ff(,)j(const)d(gss)p 3058 2440 V 40 w(OID)565 2550 y Fe(mech_type)p Ff(,)i(OM)p 1251 2550 V 40 w(uin)m(t32)f Fe(req_flags)p Ff(,)h(OM)p 2252 2550 V 40 w(uin)m(t32)e Fe(time_req)p Ff(,)i(const)565 2659 y(gss)p 688 2659 V 40 w(c)m(hannel)p 1028 2659 V 41 w(bindings)p 1404 2659 V 39 w(t)d Fe(input_chan_bindings)p Ff(,)37 b(const)30 b(gss)p 2912 2659 V 41 w(bu\013er)p 3184 2659 V 39 w(t)565 2769 y Fe(input_token)p Ff(,)k(gss)p 1319 2769 V 40 w(OID)c(*)h Fe(actual_mech_type)p Ff(,)36 b(gss)p 2648 2769 V 40 w(bu\013er)p 2919 2769 V 39 w(t)31 b Fe(output_token)p Ff(,)565 2879 y(OM)p 725 2879 V 40 w(uin)m(t32)g(*)g Fe(ret_flags)p Ff(,)i(OM)p 1801 2879 V 41 w(uin)m(t32)e(*)g Fe(time_rec)p Fg(\))390 2988 y Ff(minor)p 629 2988 V 40 w(status)t Fp(:)40 b(\(in)m(teger,)33 b(mo)s(dify\))d(Mec)m(hanism)h(sp)s(eci\014c)f(status)h(co)s(de.)390 3121 y Ff(initiator)p 718 3121 V 41 w(cred)p 926 3121 V 40 w(handle)5 b Fp(:)41 b(\(gss)p 1452 3121 V 41 w(cred)p 1660 3121 V 40 w(id)p 1776 3121 V 40 w(t,)31 b(read,)g(optional\))h (Handle)f(for)g(creden)m(tials)h(claimed.)390 3230 y(Supply)g(GSS)p 878 3230 V 40 w(C)p 984 3230 V 39 w(NO)p 1162 3230 V 40 w(CREDENTIAL)i(to)g(act)h(as)g(a)f(default)g(initiator)i(principal.) 51 b(If)34 b(no)g(de-)390 3340 y(fault)d(initiator)g(is)g(de\014ned,)e (the)i(function)f(will)h(return)e(GSS)p 2530 3340 V 39 w(S)p 2620 3340 V 40 w(NO)p 2799 3340 V 40 w(CRED.)390 3472 y Ff(con)m(text)p 687 3472 V 42 w(handle)5 b Fp(:)38 b(\(gss)p 1212 3472 V 41 w(ctx)p 1376 3472 V 40 w(id)p 1492 3472 V 40 w(t,)28 b(read/mo)s(dify\))e(Con)m(text)h(handle)e(for)h (new)g(con)m(text.)41 b(Supply)390 3582 y(GSS)p 569 3582 V 39 w(C)p 674 3582 V 40 w(NO)p 853 3582 V 40 w(CONTEXT)g(for)g (\014rst)g(call;)49 b(use)42 b(v)-5 b(alue)42 b(returned)f(b)m(y)h (\014rst)f(call)i(in)e(con)m(tin)m(ua-)390 3691 y(tion)g(calls.)73 b(Resources)41 b(asso)s(ciated)h(with)f(this)f(con)m(text-handle)j(m)m (ust)e(b)s(e)f(released)h(b)m(y)g(the)390 3801 y(application)32 b(after)f(use)f(with)g(a)g(call)i(to)f(gss)p 1915 3801 V 40 w(delete)p 2186 3801 V 42 w(sec)p 2344 3801 V 40 w(con)m(text\(\).)390 3933 y Ff(target)p 632 3933 V 42 w(name)5 b Fp(:)40 b(\(gss)p 1108 3933 V 41 w(name)p 1361 3933 V 40 w(t,)31 b(read\))g(Name)g(of)f(target.)390 4066 y Ff(mec)m(h)p 600 4066 V 41 w(t)m(yp)s(e)5 b Fp(:)100 b(\(OID,)61 b(read,)68 b(optional\))62 b(Ob)5 b(ject)60 b(ID)h(of)f(desired)g(mec)m(hanism.)131 b(Supply)390 4175 y(GSS)p 569 4175 V 39 w(C)p 674 4175 V 40 w(NO)p 853 4175 V 40 w(OID)30 b(to)h(obtain)g(an)f(implemen)m(tation)i(sp)s (eci\014c)f(default.)390 4308 y Ff(req)p 520 4308 V 40 w(\015ags)t Fp(:)38 b(\(bit-mask,)26 b(read\))e(Con)m(tains)h(v)-5 b(arious)24 b(indep)s(enden)m(t)f(\015ags,)j(eac)m(h)f(of)f(whic)m(h)g (requests)390 4418 y(that)34 b(the)f(con)m(text)h(supp)s(ort)e(a)h(sp)s (eci\014c)g(service)h(option.)48 b(Sym)m(b)s(olic)33 b(names)g(are)h(pro)m(vided)e(for)390 4527 y(eac)m(h)46 b(\015ag,)i(and)c(the)h(sym)m(b)s(olic)f(names)h(corresp)s(onding)e(to) i(the)g(required)f(\015ags)g(should)g(b)s(e)390 4637 y(logically-ORed)33 b(together)f(to)f(form)f(the)g(bit-mask)h(v)-5 b(alue.)41 b(See)31 b(b)s(elo)m(w)f(for)h(the)f(\015ags.)390 4769 y Ff(time)p 572 4769 V 41 w(req)r Fp(:)72 b(\(In)m(teger,)52 b(read,)e(optional\))e(Desired)f(n)m(um)m(b)s(er)e(of)h(seconds)g(for)g (whic)m(h)g(con)m(text)390 4879 y(should)29 b(remain)i(v)-5 b(alid.)41 b(Supply)28 b(0)j(to)g(request)g(a)f(default)h(v)-5 b(alidit)m(y)32 b(p)s(erio)s(d.)390 5011 y Ff(input)p 609 5011 V 39 w(c)m(han)p 832 5011 V 40 w(bindings)t Fp(:)51 b(\(c)m(hannel)37 b(bindings,)f(read,)i(optional\))f (Application-sp)s(eci\014ed)g(bind-)390 5121 y(ings.)66 b(Allo)m(ws)40 b(application)g(to)f(securely)g(bind)f(c)m(hannel)h (iden)m(ti\014cation)h(information)f(to)h(the)390 5230 y(securit)m(y)46 b(con)m(text.)86 b(Sp)s(ecify)44 b(GSS)p 1655 5230 V 40 w(C)p 1761 5230 V 39 w(NO)p 1939 5230 V 40 w(CHANNEL)p 2436 5230 V 40 w(BINDINGS)i(if)f(c)m(hannel)g (bindings)390 5340 y(are)31 b(not)f(used.)p eop end %%Page: 26 30 TeXDict begin 26 29 bop 150 -116 a Fp(Chapter)30 b(3:)41 b(Standard)29 b(GSS)h(API)2284 b(26)390 299 y Ff(input)p 609 299 28 4 v 39 w(tok)m(en)p Fp(:)80 b(\(bu\013er,)54 b(opaque,)h(read,)f(optional\))d(T)-8 b(ok)m(en)50 b(receiv)m(ed)h (from)e(p)s(eer)g(applica-)390 408 y(tion.)76 b(Supply)40 b(GSS)p 1143 408 V 39 w(C)p 1248 408 V 40 w(NO)p 1427 408 V 40 w(BUFFER,)j(or)e(a)i(p)s(oin)m(ter)e(to)i(a)f(bu\013er)f(con)m (taining)i(the)f(v)-5 b(alue)390 518 y(GSS)p 569 518 V 39 w(C)p 674 518 V 40 w(EMPTY)p 1055 518 V 40 w(BUFFER)31 b(on)g(initial)g(call.)390 659 y Ff(actual)p 637 659 V 41 w(mec)m(h)p 882 659 V 41 w(t)m(yp)s(e)5 b Fp(:)59 b(\(OID,)40 b(mo)s(dify)-8 b(,)41 b(optional\))g(Actual)f(mec)m(hanism) g(used.)67 b(The)38 b(OID)i(re-)390 769 y(turned)25 b(via)j(this)e (parameter)h(will)g(b)s(e)f(a)i(p)s(oin)m(ter)e(to)i(static)g(storage)g (that)f(should)f(b)s(e)g(treated)i(as)390 878 y(read-only;)j(In)e (particular)i(the)f(application)h(should)f(not)g(attempt)h(to)g(free)f (it.)42 b(Sp)s(ecify)29 b(NULL)390 988 y(if)h(not)h(required.)390 1129 y Ff(output)p 664 1129 V 40 w(tok)m(en)p Fp(:)47 b(\(bu\013er,)34 b(opaque,)g(mo)s(dify\))f(T)-8 b(ok)m(en)34 b(to)g(b)s(e)e(sen)m(t)i(to)g(p)s(eer)e(application.)51 b(If)33 b(the)390 1238 y(length)22 b(\014eld)e(of)i(the)f(returned)f (bu\013er)g(is)i(zero,)i(no)d(tok)m(en)h(need)f(b)s(e)g(sen)m(t)g(to)h (the)g(p)s(eer)e(application.)390 1348 y(Storage)32 b(asso)s(ciated)g (with)e(this)h(bu\013er)e(m)m(ust)i(b)s(e)f(freed)g(b)m(y)g(the)h (application)h(after)f(use)f(with)h(a)390 1457 y(call)h(to)f(gss)p 791 1457 V 40 w(release)p 1093 1457 V 41 w(bu\013er\(\).)390 1598 y Ff(ret)p 507 1598 V 40 w(\015ags)t Fp(:)58 b(\(bit-mask,)43 b(mo)s(dify)-8 b(,)41 b(optional\))f(Con)m(tains)g(v)-5 b(arious)39 b(indep)s(enden)m(t)f(\015ags,)k(eac)m(h)e(of)390 1708 y(whic)m(h)e(indicates)h(that)f(the)h(con)m(text)g(supp)s(orts)e (a)h(sp)s(eci\014c)g(service)h(option.)64 b(Sp)s(ecify)37 b(NULL)390 1817 y(if)32 b(not)h(required.)45 b(Sym)m(b)s(olic)33 b(names)f(are)h(pro)m(vided)e(for)h(eac)m(h)i(\015ag,)f(and)f(the)g (sym)m(b)s(olic)h(names)390 1927 y(corresp)s(onding)22 b(to)i(the)g(required)e(\015ags)h(should)g(b)s(e)f(logically-ANDed)27 b(with)c(the)h(ret)p 3311 1927 V 40 w(\015ags)f(v)-5 b(alue)390 2037 y(to)31 b(test)g(whether)f(a)h(giv)m(en)g(option)g(is)f (supp)s(orted)f(b)m(y)h(the)h(con)m(text.)42 b(See)31 b(b)s(elo)m(w)g(for)f(the)g(\015ags.)390 2178 y Ff(time)p 572 2178 V 41 w(rec)6 b Fp(:)52 b(\(In)m(teger,)39 b(mo)s(dify)-8 b(,)37 b(optional\))g(Num)m(b)s(er)e(of)h(seconds)g(for)g(whic)m(h)g (the)g(con)m(text)i(will)390 2287 y(remain)d(v)-5 b(alid.)55 b(If)34 b(the)h(implemen)m(tation)i(do)s(es)d(not)h(supp)s(ort)f(con)m (text)i(expiration,)h(the)e(v)-5 b(alue)390 2397 y(GSS)p 569 2397 V 39 w(C)p 674 2397 V 40 w(INDEFINITE)30 b(will)h(b)s(e)f (returned.)39 b(Sp)s(ecify)30 b(NULL)g(if)h(not)f(required.)390 2538 y(Initiates)53 b(the)e(establishmen)m(t)h(of)g(a)g(securit)m(y)g (con)m(text)h(b)s(et)m(w)m(een)f(the)g(application)h(and)e(a)390 2647 y(remote)h(p)s(eer.)102 b(Initially)-8 b(,)57 b(the)51 b(input)p 1793 2647 V 40 w(tok)m(en)h(parameter)f(should)f(b)s(e)g(sp)s (eci\014ed)g(either)i(as)390 2757 y(GSS)p 569 2757 V 39 w(C)p 674 2757 V 40 w(NO)p 853 2757 V 40 w(BUFFER,)h(or)e(as)h(a)g (p)s(oin)m(ter)g(to)g(a)h(gss)p 2394 2757 V 40 w(bu\013er)p 2665 2757 V 39 w(desc)f(ob)5 b(ject)52 b(whose)g(length)390 2866 y(\014eld)34 b(con)m(tains)j(the)e(v)-5 b(alue)35 b(zero.)55 b(The)34 b(routine)h(ma)m(y)h(return)d(a)j(output)p 2942 2866 V 39 w(tok)m(en)g(whic)m(h)f(should)390 2976 y(b)s(e)53 b(transferred)g(to)i(the)f(p)s(eer)f(application,)61 b(where)53 b(the)h(p)s(eer)g(application)h(will)f(presen)m(t)390 3086 y(it)49 b(to)g(gss)p 751 3086 V 41 w(accept)p 1043 3086 V 41 w(sec)p 1200 3086 V 41 w(con)m(text.)97 b(If)48 b(no)g(tok)m(en)i(need)e(b)s(e)g(sen)m(t,)54 b(gss)p 2900 3086 V 40 w(init)p 3076 3086 V 41 w(sec)p 3233 3086 V 40 w(con)m(text)d(will)390 3195 y(indicate)39 b(this)g(b)m(y)f (setting)h(the)g(length)f(\014eld)g(of)h(the)f(output)p 2572 3195 V 40 w(tok)m(en)h(argumen)m(t)g(to)g(zero.)65 b(T)-8 b(o)390 3305 y(complete)52 b(the)f(con)m(text)i(establishmen)m (t,)k(one)52 b(or)e(more)i(reply)e(tok)m(ens)i(ma)m(y)f(b)s(e)g (required)390 3414 y(from)35 b(the)g(p)s(eer)f(application;)39 b(if)c(so,)h(gss)p 1830 3414 V 41 w(init)p 2007 3414 V 40 w(sec)p 2163 3414 V 41 w(con)m(text)h(will)e(return)f(a)h(status)g (con)m(taining)390 3524 y(the)57 b(supplemen)m(tary)g(information)g (bit)g(GSS)p 2078 3524 V 40 w(S)p 2169 3524 V 39 w(CONTINUE)p 2710 3524 V 39 w(NEEDED.)h(In)f(this)g(case,)390 3634 y(gss)p 513 3634 V 40 w(init)p 689 3634 V 41 w(sec)p 846 3634 V 40 w(con)m(text)31 b(should)d(b)s(e)g(called)i(again)g(when) e(the)h(reply)f(tok)m(en)i(is)f(receiv)m(ed)h(from)f(the)390 3743 y(p)s(eer)i(application,)i(passing)f(the)g(reply)f(tok)m(en)i(to)f (gss)p 2281 3743 V 40 w(init)p 2457 3743 V 41 w(sec)p 2614 3743 V 40 w(con)m(text)i(via)e(the)g(input)p 3500 3743 V 39 w(tok)m(en)390 3853 y(parameters.)390 3994 y(P)m(ortable)27 b(applications)f(should)f(b)s(e)g(constructed)g(to)h (use)g(the)f(tok)m(en)i(length)e(and)g(return)g(status)390 4103 y(to)k(determine)f(whether)g(a)g(tok)m(en)i(needs)d(to)i(b)s(e)f (sen)m(t)g(or)h(w)m(aited)g(for.)40 b(Th)m(us)27 b(a)h(t)m(ypical)i(p)s (ortable)390 4213 y(caller)i(should)d(alw)m(a)m(ys)j(in)m(v)m(ok)m(e)g (gss)p 1615 4213 V 40 w(init)p 1791 4213 V 41 w(sec)p 1948 4213 V 40 w(con)m(text)h(within)d(a)g(lo)s(op:)630 4354 y Fj(int)47 b(context_established)42 b(=)48 b(0;)630 4463 y(gss_ctx_id_t)c(context_hdl)h(=)j(GSS_C_NO_CONTEXT;)964 4573 y(...)630 4682 y(input_token->length)43 b(=)k(0;)630 4902 y(while)f(\(!context_established\))c({)725 5011 y(maj_stat)k(=)h(gss_init_sec_context\(&min_)o(stat)o(,)2253 5121 y(cred_hdl,)2253 5230 y(&context_hdl,)2253 5340 y(target_name,)p eop end %%Page: 27 31 TeXDict begin 27 30 bop 150 -116 a Fp(Chapter)30 b(3:)41 b(Standard)29 b(GSS)h(API)2284 b(27)2253 299 y Fj(desired_mech,)2253 408 y(desired_services,)2253 518 y(desired_time,)2253 628 y(input_bindings,)2253 737 y(input_token,)2253 847 y(&actual_mech,)2253 956 y(output_token,)2253 1066 y(&actual_services,) 2253 1176 y(&actual_time\);)725 1285 y(if)48 b (\(GSS_ERROR\(maj_stat\)\))42 b({)821 1395 y(report_error\(maj_stat,)g (min_stat\);)725 1504 y(};)725 1724 y(if)48 b(\(output_token->length)42 b(!=)47 b(0\))g({)821 1833 y(send_token_to_peer\(outpu)o(t_to)o(ken)o (\);)821 1943 y(gss_release_buffer\(&min_)o(stat)o(,)42 b(output_token\))725 2052 y(};)725 2162 y(if)48 b (\(GSS_ERROR\(maj_stat\)\))42 b({)821 2381 y(if)47 b(\(context_hdl)e (!=)i(GSS_C_NO_CONTEXT\))916 2491 y(gss_delete_sec_context\(&mi)o(n_s)o (tat,)2014 2600 y(&context_hdl,)2014 2710 y(GSS_C_NO_BUFFER\);)821 2819 y(break;)725 2929 y(};)725 3148 y(if)h(\(maj_stat)d(&)i (GSS_S_CONTINUE_NEEDED\))42 b({)821 3258 y(receive_token_from_peer\()o (inpu)o(t_t)o(oken)o(\);)725 3367 y(})48 b(else)f({)821 3477 y(context_established)42 b(=)48 b(1;)725 3587 y(};)630 3696 y(};)390 3845 y Fp(Whenev)m(er)94 b(the)g(routine)g(returns)e(a)i (ma)5 b(jor)93 b(status)h(that)h(includes)e(the)g(v)-5 b(alue)390 3954 y(GSS)p 569 3954 28 4 v 39 w(S)p 659 3954 V 40 w(CONTINUE)p 1201 3954 V 39 w(NEEDED,)29 b(the)e(con)m(text)j (is)e(not)f(fully)h(established)g(and)f(the)g(follo)m(wing)390 4064 y(restrictions)k(apply)f(to)h(the)g(output)f(parameters:)465 4212 y Fn(\017)60 b Fp(The)37 b(v)-5 b(alue)38 b(returned)e(via)i(the)f (time)p 1883 4212 V 41 w(rec)h(parameter)g(is)f(unde\014ned)e(unless)i (the)g(accom-)570 4322 y(pan)m(ying)28 b(ret)p 1028 4322 V 40 w(\015ags)g(parameter)g(con)m(tains)h(the)f(bit)f(GSS)p 2524 4322 V 40 w(C)p 2630 4322 V 39 w(PR)m(OT)p 2932 4322 V 40 w(READ)m(Y)p 3303 4322 V 41 w(FLA)m(G,)i(in-)570 4431 y(dicating)44 b(that)g(p)s(er-message)g(services)f(ma)m(y)h(b)s(e) f(applied)g(in)g(adv)-5 b(ance)43 b(of)h(a)f(successful)570 4541 y(completion)i(status,)k(the)44 b(v)-5 b(alue)45 b(returned)e(via)i(the)f(actual)p 2742 4541 V 41 w(mec)m(h)p 2987 4541 V 41 w(t)m(yp)s(e)g(parameter)h(is)570 4651 y(unde\014ned)24 b(un)m(til)j(the)g(routine)g(returns)e(a)i(ma)5 b(jor)27 b(status)g(v)-5 b(alue)27 b(of)g(GSS)p 3073 4651 V 39 w(S)p 3163 4651 V 40 w(COMPLETE.)465 4792 y Fn(\017)60 b Fp(The)115 b(v)-5 b(alues)117 b(of)f(the)g(GSS)p 1809 4792 V 39 w(C)p 1914 4792 V 40 w(DELEG)p 2275 4792 V 40 w(FLA)m(G,)h(GSS)p 2882 4792 V 40 w(C)p 2988 4792 V 39 w(MUTUAL)p 3437 4792 V 41 w(FLA)m(G,)570 4902 y(GSS)p 749 4902 V 39 w(C)p 854 4902 V 40 w(REPLA)-8 b(Y)p 1270 4902 V 40 w(FLA)m(G,)63 b(GSS)p 1823 4902 V 39 w(C)p 1928 4902 V 40 w(SEQUENCE)p 2478 4902 V 38 w(FLA)m(G,)g(GSS)p 3029 4902 V 39 w(C)p 3134 4902 V 40 w(CONF)p 3438 4902 V 40 w(FLA)m(G,)570 5011 y(GSS)p 749 5011 V 39 w(C)p 854 5011 V 40 w(INTEG)p 1194 5011 V 40 w(FLA)m(G)85 b(and)f(GSS)p 1975 5011 V 39 w(C)p 2080 5011 V 40 w(ANON)p 2395 5011 V 40 w(FLA)m(G)i(bits)e(returned)f(via)i(the)570 5121 y(ret)p 687 5121 V 40 w(\015ags)37 b(parameter)g(should)e(con)m(tain)j (the)e(v)-5 b(alues)37 b(that)g(the)g(implemen)m(tation)h(exp)s(ects) 570 5230 y(w)m(ould)52 b(b)s(e)g(v)-5 b(alid)53 b(if)g(con)m(text)h (establishmen)m(t)f(w)m(ere)h(to)f(succeed.)107 b(In)52 b(particular,)59 b(if)570 5340 y(the)i(application)h(has)f(requested)g (a)g(service)h(suc)m(h)e(as)h(delegation)i(or)e(anon)m(ymous)p eop end %%Page: 28 32 TeXDict begin 28 31 bop 150 -116 a Fp(Chapter)30 b(3:)41 b(Standard)29 b(GSS)h(API)2284 b(28)570 299 y(authen)m(tication)50 b(via)e(the)g(req)p 1661 299 28 4 v 40 w(\015ags)g(argumen)m(t,)53 b(and)47 b(suc)m(h)g(a)h(service)h(is)f(una)m(v)-5 b(ailable)570 408 y(from)43 b(the)g(underlying)f(mec)m(hanism,)47 b(gss)p 2064 408 V 40 w(init)p 2240 408 V 40 w(sec)p 2396 408 V 41 w(con)m(text)e(should)d(generate)i(a)g(tok)m(en)570 518 y(that)38 b(will)g(not)g(pro)m(vide)g(the)g(service,)j(and)c (indicate)i(via)f(the)g(ret)p 2920 518 V 40 w(\015ags)g(argumen)m(t)g (that)570 628 y(the)44 b(service)g(will)g(not)f(b)s(e)g(supp)s(orted.) 78 b(The)43 b(application)i(ma)m(y)f(c)m(ho)s(ose)g(to)g(ab)s(ort)g (the)570 737 y(con)m(text)34 b(establishmen)m(t)e(b)m(y)g(calling)h (gss)p 2010 737 V 40 w(delete)p 2281 737 V 41 w(sec)p 2438 737 V 41 w(con)m(text)h(\(if)e(it)g(cannot)g(con)m(tin)m(ue)h(in) 570 847 y(the)d(absence)g(of)g(the)g(service\),)h(or)f(it)g(ma)m(y)g(c) m(ho)s(ose)h(to)f(transmit)g(the)g(tok)m(en)h(and)e(con)m(tin)m(ue)570 956 y(con)m(text)j(establishmen)m(t)f(\(if)g(the)g(service)g(w)m(as)g (merely)f(desired)g(but)g(not)h(mandatory\).)465 1094 y Fn(\017)60 b Fp(The)43 b(v)-5 b(alues)44 b(of)g(the)f(GSS)p 1519 1094 V 40 w(C)p 1625 1094 V 39 w(PR)m(OT)p 1927 1094 V 40 w(READ)m(Y)p 2298 1094 V 41 w(FLA)m(G)h(and)f(GSS)p 2998 1094 V 40 w(C)p 3104 1094 V 39 w(TRANS)p 3463 1094 V 40 w(FLA)m(G)570 1204 y(bits)94 b(within)f(ret)p 1274 1204 V 40 w(\015ags)h(should)e(indicate)j(the)f(actual)h(state)g(at)f (the)g(time)570 1313 y(gss)p 693 1313 V 40 w(init)p 869 1313 V 41 w(sec)p 1026 1313 V 40 w(con)m(text)32 b(returns,)e(whether)g (or)g(not)h(the)f(con)m(text)i(is)f(fully)f(established.)465 1451 y Fn(\017)60 b Fp(GSS-API)34 b(implemen)m(tations)h(that)g(supp)s (ort)d(p)s(er-message)j(protection)g(are)f(encouraged)570 1561 y(to)46 b(set)f(the)g(GSS)p 1202 1561 V 39 w(C)p 1307 1561 V 40 w(PR)m(OT)p 1610 1561 V 40 w(READ)m(Y)p 1981 1561 V 41 w(FLA)m(G)h(in)e(the)h(\014nal)g(ret)p 2939 1561 V 40 w(\015ags)g(returned)f(to)i(a)570 1670 y(caller)31 b(\(i.e.)42 b(when)28 b(accompanied)j(b)m(y)e(a)h(GSS)p 2159 1670 V 40 w(S)p 2250 1670 V 39 w(COMPLETE)f(status)h(co)s(de\).)41 b(Ho)m(w)m(ev)m(er,)570 1780 y(applications)32 b(should)e(not)h(rely)g (on)g(this)g(b)s(eha)m(vior)g(as)g(the)g(\015ag)g(w)m(as)h(not)f (de\014ned)e(in)i(V)-8 b(er-)570 1889 y(sion)27 b(1)g(of)g(the)g (GSS-API.)f(Instead,)i(applications)g(should)e(determine)h(what)f(p)s (er-message)570 1999 y(services)39 b(are)f(a)m(v)-5 b(ailable)40 b(after)e(a)g(successful)g(con)m(text)i(establishmen)m(t)e(according)h (to)g(the)570 2109 y(GSS)p 749 2109 V 39 w(C)p 854 2109 V 40 w(INTEG)p 1194 2109 V 40 w(FLA)m(G)31 b(and)f(GSS)p 1867 2109 V 39 w(C)p 1972 2109 V 40 w(CONF)p 2276 2109 V 40 w(FLA)m(G)h(v)-5 b(alues.)465 2246 y Fn(\017)60 b Fp(All)31 b(other)g(bits)f(within)g(the)g(ret)p 1690 2246 V 41 w(\015ags)g(argumen)m(t)h(should)e(b)s(e)h(set)h(to)g(zero.) 390 2416 y(If)e(the)g(initial)i(call)f(of)f(gss)p 1287 2416 V 41 w(init)p 1464 2416 V 40 w(sec)p 1620 2416 V 41 w(con)m(text\(\))i(fails,)g(the)e(implemen)m(tation)i(should)d(not)h (create)390 2525 y(a)k(con)m(text)i(ob)5 b(ject,)35 b(and)e(should)f (lea)m(v)m(e)j(the)e(v)-5 b(alue)34 b(of)f(the)g(con)m(text)p 2755 2525 V 42 w(handle)g(parameter)h(set)f(to)390 2635 y(GSS)p 569 2635 V 39 w(C)p 674 2635 V 40 w(NO)p 853 2635 V 40 w(CONTEXT)21 b(to)i(indicate)g(this.)38 b(In)22 b(the)g(ev)m(en)m(t)i(of)f(a)f(failure)h(on)f(a)h(subsequen)m(t)e (call,)390 2744 y(the)29 b(implemen)m(tation)i(is)e(p)s(ermitted)g(to)g (delete)i(the)e Fj(")p Fp(half-built)p Fj(")f Fp(securit)m(y)i(con)m (text)h(\(in)e(whic)m(h)390 2854 y(case)g(it)f(should)e(set)i(the)g (con)m(text)p 1543 2854 V 42 w(handle)f(parameter)h(to)g(GSS)p 2588 2854 V 39 w(C)p 2693 2854 V 40 w(NO)p 2872 2854 V 40 w(CONTEXT\),)f(but)g(the)390 2963 y(preferred)35 b(b)s(eha)m(vior)h(is)g(to)h(lea)m(v)m(e)i(the)d(securit)m(y)h(con)m (text)h(un)m(touc)m(hed)e(for)g(the)h(application)g(to)390 3073 y(delete)32 b(\(using)e(gss)p 1049 3073 V 40 w(delete)p 1320 3073 V 41 w(sec)p 1477 3073 V 41 w(con)m(text\).)390 3214 y(During)42 b(con)m(text)i(establishmen)m(t,)j(the)c (informational)g(status)g(bits)f(GSS)p 3052 3214 V 39 w(S)p 3142 3214 V 40 w(OLD)p 3379 3214 V 40 w(TOKEN)390 3324 y(and)36 b(GSS)p 752 3324 V 40 w(S)p 843 3324 V 39 w(DUPLICA)-8 b(TE)p 1425 3324 V 40 w(TOKEN)36 b(indicate)i(fatal)g (errors,)g(and)e(GSS-API)h(mec)m(hanisms)390 3433 y(should)d(alw)m(a)m (ys)i(return)d(them)i(in)f(asso)s(ciation)i(with)e(a)h(routine)g(error) f(of)h(GSS)p 3197 3433 V 39 w(S)p 3287 3433 V 40 w(F)-10 b(AILURE.)390 3543 y(This)30 b(requiremen)m(t)h(for)g(pairing)g(did)f (not)h(exist)g(in)g(v)m(ersion)g(1)g(of)g(the)h(GSS-API)e(sp)s (eci\014cation,)390 3652 y(so)41 b(applications)h(that)f(wish)f(to)h (run)e(o)m(v)m(er)j(v)m(ersion)f(1)g(implemen)m(tations)h(m)m(ust)f(sp) s(ecial-case)390 3762 y(these)31 b(co)s(des.)390 3903 y(The)f Fj(req_flags)e Fp(v)-5 b(alues:)870 4072 y Fj(GSS_C_DELEG_FLAG) 945 4210 y Fn(\017)60 b Fp(T)-8 b(rue)30 b(-)h(Delegate)i(creden)m (tials)f(to)f(remote)g(p)s(eer.)945 4348 y Fn(\017)60 b Fp(F)-8 b(alse)32 b(-)f(Don't)g(delegate.)870 4514 y Fj(GSS_C_MUTUAL_FLAG)945 4651 y Fn(\017)60 b Fp(T)-8 b(rue)30 b(-)h(Request)f(that)h(remote)g(p)s(eer)f(authen)m(ticate)j (itself.)945 4789 y Fn(\017)60 b Fp(F)-8 b(alse)32 b(-)f(Authen)m (ticate)h(self)f(to)g(remote)g(p)s(eer)f(only)-8 b(.)870 4955 y Fj(GSS_C_REPLAY_FLAG)945 5093 y Fn(\017)60 b Fp(T)-8 b(rue)26 b(-)g(Enable)g(repla)m(y)h(detection)h(for)e(messages)h (protected)h(with)e(gss)p 3519 5093 V 40 w(wrap)1050 5202 y(or)k(gss)p 1284 5202 V 41 w(get)p 1445 5202 V 41 w(mic.)945 5340 y Fn(\017)60 b Fp(F)-8 b(alse)32 b(-)f(Don't)g (attempt)g(to)h(detect)f(repla)m(y)m(ed)h(messages.)p eop end %%Page: 29 33 TeXDict begin 29 32 bop 150 -116 a Fp(Chapter)30 b(3:)41 b(Standard)29 b(GSS)h(API)2284 b(29)870 299 y Fj(GSS_C_SEQUENCE_FLAG) 945 432 y Fn(\017)60 b Fp(T)-8 b(rue)30 b(-)h(Enable)f(detection)i(of)e (out-of-sequence)i(protected)f(messages.)945 565 y Fn(\017)60 b Fp(F)-8 b(alse)32 b(-)f(Don't)g(attempt)g(to)h(detect)f (out-of-sequence)h(messages.)870 722 y Fj(GSS_C_CONF_FLAG)945 855 y Fn(\017)60 b Fp(T)-8 b(rue)41 b(-)g(Request)g(that)h(con\014den)m (tialit)m(y)h(service)f(b)s(e)e(made)i(a)m(v)-5 b(ailable)43 b(\(via)1050 964 y(gss)p 1173 964 28 4 v 40 w(wrap\).)945 1097 y Fn(\017)60 b Fp(F)-8 b(alse)32 b(-)f(No)g(p)s(er-message)f (con\014den)m(tialit)m(y)j(service)e(is)f(required.)870 1254 y Fj(GSS_C_INTEG_FLAG)945 1387 y Fn(\017)60 b Fp(T)-8 b(rue)24 b(-)g(Request)h(that)g(in)m(tegrit)m(y)h(service)f(b)s(e)f (made)g(a)m(v)-5 b(ailable)26 b(\(via)g(gss)p 3519 1387 V 40 w(wrap)1050 1497 y(or)k(gss)p 1284 1497 V 41 w(get)p 1445 1497 V 41 w(mic\).)945 1630 y Fn(\017)60 b Fp(F)-8 b(alse)32 b(-)f(No)g(p)s(er-message)f(in)m(tegrit)m(y)j(service)e(is)f (required.)870 1786 y Fj(GSS_C_ANON_FLAG)945 1919 y Fn(\017)60 b Fp(T)-8 b(rue)30 b(-)h(Do)g(not)f(rev)m(eal)i(the)f(initiator's)h (iden)m(tit)m(y)g(to)f(the)f(acceptor.)945 2052 y Fn(\017)60 b Fp(F)-8 b(alse)32 b(-)f(Authen)m(ticate)h(normally)-8 b(.)390 2209 y(The)30 b Fj(ret_flags)e Fp(v)-5 b(alues:)870 2365 y Fj(GSS_C_DELEG_FLAG)945 2498 y Fn(\017)60 b Fp(T)-8 b(rue)30 b(-)h(Creden)m(tials)g(w)m(ere)f(delegated)i(to)g(the)e (remote)h(p)s(eer.)945 2632 y Fn(\017)60 b Fp(F)-8 b(alse)32 b(-)f(No)g(creden)m(tials)g(w)m(ere)g(delegated.)870 2788 y Fj(GSS_C_MUTUAL_FLAG)945 2921 y Fn(\017)60 b Fp(T)-8 b(rue)30 b(-)h(The)e(remote)j(p)s(eer)d(has)i(authen)m(ticated)h (itself.)945 3054 y Fn(\017)60 b Fp(F)-8 b(alse)32 b(-)f(Remote)g(p)s (eer)f(has)g(not)h(authen)m(ticated)h(itself.)870 3211 y Fj(GSS_C_REPLAY_FLAG)945 3344 y Fn(\017)60 b Fp(T)-8 b(rue)30 b(-)h(repla)m(y)f(of)h(protected)g(messages)h(will)e(b)s(e)g (detected.)945 3477 y Fn(\017)60 b Fp(F)-8 b(alse)32 b(-)f(repla)m(y)m(ed)g(messages)g(will)g(not)g(b)s(e)e(detected.)870 3634 y Fj(GSS_C_SEQUENCE_FLAG)945 3767 y Fn(\017)60 b Fp(T)-8 b(rue)30 b(-)h(out-of-sequence)g(protected)h(messages)f(will)g (b)s(e)f(detected.)945 3900 y Fn(\017)60 b Fp(F)-8 b(alse)32 b(-)f(out-of-sequence)h(messages)f(will)g(not)f(b)s(e)g(detected.)870 4056 y Fj(GSS_C_CONF_FLAG)945 4189 y Fn(\017)60 b Fp(T)-8 b(rue)40 b(-)g(Con\014den)m(tialit)m(y)i(service)f(ma)m(y)g(b)s(e)f(in) m(v)m(ok)m(ed)i(b)m(y)e(calling)i(gss)p 3519 4189 V 40 w(wrap)1050 4299 y(routine.)945 4432 y Fn(\017)60 b Fp(F)-8 b(alse)33 b(-)e(No)h(con\014den)m(tialit)m(y)i(service)e(\(via)g(gss)p 2686 4432 V 40 w(wrap\))f(a)m(v)-5 b(ailable.)46 b(gss)p 3519 4432 V 40 w(wrap)1050 4542 y(will)38 b(pro)m(vide)f(message)i (encapsulation,)h(data-origin)f(authen)m(tication)h(and)1050 4651 y(in)m(tegrit)m(y)32 b(services)f(only)-8 b(.)870 4808 y Fj(GSS_C_INTEG_FLAG)945 4941 y Fn(\017)60 b Fp(T)-8 b(rue)27 b(-)h(In)m(tegrit)m(y)h(service)f(ma)m(y)g(b)s(e)f(in)m(v)m (ok)m(ed)i(b)m(y)e(calling)i(either)f(gss)p 3413 4941 V 40 w(get)p 3573 4941 V 42 w(mic)1050 5050 y(or)i(gss)p 1284 5050 V 41 w(wrap)f(routines.)945 5183 y Fn(\017)60 b Fp(F)-8 b(alse)32 b(-)f(P)m(er-message)h(in)m(tegrit)m(y)g(service)f (una)m(v)-5 b(ailable.)870 5340 y Fj(GSS_C_ANON_FLAG)p eop end %%Page: 30 34 TeXDict begin 30 33 bop 150 -116 a Fp(Chapter)30 b(3:)41 b(Standard)29 b(GSS)h(API)2284 b(30)945 299 y Fn(\017)60 b Fp(T)-8 b(rue)27 b(-)h(The)f(initiator's)i(iden)m(tit)m(y)g(has)e (not)h(b)s(een)e(rev)m(ealed,)k(and)d(will)h(not)g(b)s(e)1050 408 y(rev)m(ealed)k(if)e(an)m(y)h(emitted)g(tok)m(en)h(is)e(passed)g (to)h(the)g(acceptor.)945 541 y Fn(\017)60 b Fp(F)-8 b(alse)47 b(-)e(The)f(initiator's)j(iden)m(tit)m(y)f(has)f(b)s(een)f (or)h(will)h(b)s(e)e(authen)m(ticated)1050 650 y(normally)-8 b(.)870 806 y Fj(GSS_C_PROT_READY_FLAG)945 938 y Fn(\017)60 b Fp(T)-8 b(rue)66 b(-)h(Protection)h(services)f(\(as)g(sp)s(eci\014ed) f(b)m(y)h(the)f(states)i(of)f(the)1050 1048 y(GSS)p 1229 1048 28 4 v 39 w(C)p 1334 1048 V 40 w(CONF)p 1638 1048 V 40 w(FLA)m(G)h(and)e(GSS)p 2384 1048 V 39 w(C)p 2489 1048 V 40 w(INTEG)p 2829 1048 V 40 w(FLA)m(G\))i(are)g(a)m(v)-5 b(ailable)1050 1157 y(for)51 b(use)g(if)g(the)g(accompan)m(ying)h(ma)5 b(jor)52 b(status)f(return)f(v)-5 b(alue)51 b(is)g(either)1050 1267 y(GSS)p 1229 1267 V 39 w(S)p 1319 1267 V 40 w(COMPLETE)29 b(or)h(GSS)p 2201 1267 V 40 w(S)p 2292 1267 V 39 w(CONTINUE)p 2833 1267 V 39 w(NEEDED.)945 1399 y Fn(\017)60 b Fp(F)-8 b(alse)88 b(-)f(Protection)h(services)f(\(as)g(sp)s(eci\014ed)e(b)m(y)i (the)f(states)i(of)1050 1509 y(the)121 b(GSS)p 1476 1509 V 40 w(C)p 1582 1509 V 39 w(CONF)p 1885 1509 V 40 w(FLA)m(G)h(and)f (GSS)p 2740 1509 V 39 w(C)p 2845 1509 V 40 w(INTEG)p 3185 1509 V 40 w(FLA)m(G\))i(are)1050 1619 y(a)m(v)-5 b(ailable)54 b(only)d(if)g(the)h(accompan)m(ying)g(ma)5 b(jor)52 b(status)f(return)f(v)-5 b(alue)52 b(is)1050 1728 y(GSS)p 1229 1728 V 39 w(S)p 1319 1728 V 40 w(COMPLETE.)870 1883 y Fj(GSS_C_TRANS_FLAG)945 2016 y Fn(\017)60 b Fp(T)-8 b(rue)39 b(-)h(The)f(resultan)m(t)h(securit)m(y)g(con)m(text)h(ma)m(y)f (b)s(e)f(transferred)f(to)j(other)1050 2125 y(pro)s(cesses)30 b(via)h(a)g(call)h(to)f(gss)p 2069 2125 V 40 w(exp)s(ort)p 2367 2125 V 40 w(sec)p 2523 2125 V 40 w(con)m(text\(\).)945 2258 y Fn(\017)60 b Fp(F)-8 b(alse)32 b(-)f(The)f(securit)m(y)h(con)m (text)h(is)e(not)h(transferable.)390 2413 y(All)g(other)g(bits)f (should)f(b)s(e)h(set)h(to)g(zero.)390 2545 y(Return)f(v)-5 b(alue:)390 2678 y Fj(GSS_S_COMPLETE)p Fp(:)37 b(Successful)30 b(completion.)390 2810 y Fj(GSS_S_CONTINUE_NEEDED)p Fp(:)h(Indicates)23 b(that)g(a)g(tok)m(en)h(from)e(the)h(p)s(eer)f(application)i(is)f (required)390 2920 y(to)k(complete)g(the)g(con)m(text,)i(and)c(that)i (gss)p 1862 2920 V 40 w(init)p 2038 2920 V 41 w(sec)p 2195 2920 V 40 w(con)m(text)h(m)m(ust)e(b)s(e)g(called)h(again)g(with)f (that)390 3029 y(tok)m(en.)390 3162 y Fj(GSS_S_DEFECTIVE_TOKEN)p Fp(:)63 b(Indicates)45 b(that)f(consistency)i(c)m(hec)m(ks)f(p)s (erformed)e(on)h(the)h(in-)390 3271 y(put)p 533 3271 V 39 w(tok)m(en)32 b(failed.)390 3404 y Fj(GSS_S_DEFECTIVE_CREDENTI)o (AL)p Fp(:)40 b(Indicates)34 b(that)g(consistency)g(c)m(hec)m(ks)h(p)s (erformed)d(on)h(the)390 3513 y(creden)m(tial)f(failed.)390 3646 y Fj(GSS_S_NO_CRED)p Fp(:)j(The)27 b(supplied)f(creden)m(tials)i (w)m(ere)f(not)h(v)-5 b(alid)27 b(for)g(con)m(text)h(initiation,)i(or)d (the)390 3756 y(creden)m(tial)32 b(handle)e(did)f(not)i(reference)g(an) m(y)g(creden)m(tials.)390 3888 y Fj(GSS_S_CREDENTIALS_EXPIRE)o(D)p Fp(:)k(The)30 b(referenced)g(creden)m(tials)i(ha)m(v)m(e)f(expired.)390 4020 y Fj(GSS_S_BAD_BINDINGS)p Fp(:)40 b(The)32 b(input)p 1727 4020 V 39 w(tok)m(en)i(con)m(tains)g(di\013eren)m(t)f(c)m(hannel)g (bindings)e(to)i(those)390 4130 y(sp)s(eci\014ed)d(via)h(the)f(input)p 1281 4130 V 39 w(c)m(han)p 1504 4130 V 41 w(bindings)f(parameter.)390 4262 y Fj(GSS_S_BAD_SIG)p Fp(:)38 b(The)30 b(input)p 1483 4262 V 39 w(tok)m(en)i(con)m(tains)g(an)e(in)m(v)-5 b(alid)32 b(MIC,)e(or)h(a)g(MIC)g(that)g(could)g(not)390 4372 y(b)s(e)f(v)m(eri\014ed.)390 4504 y Fj(GSS_S_OLD_TOKEN)p Fp(:)36 b(The)28 b(input)p 1575 4504 V 39 w(tok)m(en)i(w)m(as)f(to)s(o) h(old.)40 b(This)28 b(is)h(a)g(fatal)h(error)f(during)e(con)m(text)390 4614 y(establishmen)m(t.)390 4746 y Fj(GSS_S_DUPLICATE_TOKEN)p Fp(:)59 b(The)41 b(input)p 1899 4746 V 39 w(tok)m(en)j(is)e(v)-5 b(alid,)46 b(but)41 b(is)h(a)h(duplicate)g(of)f(a)h(tok)m(en)390 4856 y(already)31 b(pro)s(cessed.)40 b(This)30 b(is)g(a)h(fatal)g (error)f(during)g(con)m(text)i(establishmen)m(t.)390 4988 y Fj(GSS_S_NO_CONTEXT)p Fp(:)58 b(Indicates)42 b(that)g(the)f (supplied)f(con)m(text)j(handle)e(did)f(not)i(refer)f(to)h(a)390 5098 y(v)-5 b(alid)31 b(con)m(text.)390 5230 y Fj(GSS_S_BAD_NAMETYPE)p Fp(:)37 b(The)31 b(pro)m(vided)g(target)p 2121 5230 V 42 w(name)g(parameter)h(con)m(tained)g(an)f(in)m(v)-5 b(alid)32 b(or)390 5340 y(unsupp)s(orted)c(t)m(yp)s(e)i(of)h(name.)p eop end %%Page: 31 35 TeXDict begin 31 34 bop 150 -116 a Fp(Chapter)30 b(3:)41 b(Standard)29 b(GSS)h(API)2284 b(31)390 299 y Fj(GSS_S_BAD_NAME)p Fp(:)37 b(The)30 b(pro)m(vided)g(target)p 1927 299 28 4 v 41 w(name)h(parameter)g(w)m(as)f(ill-formed.)390 444 y Fj(GSS_S_BAD_MECH)p Fp(:)36 b(The)27 b(sp)s(eci\014ed)h(mec)m (hanism)g(is)h(not)f(supp)s(orted)f(b)m(y)h(the)g(pro)m(vided)g (creden-)390 553 y(tial,)k(or)e(is)h(unrecognized)f(b)m(y)h(the)f (implemen)m(tation.)150 763 y Fi(gss)p 316 763 37 5 v 55 w(accept)p 713 763 V 53 w(sec)p 925 763 V 54 w(con)m(text)3350 969 y Fp([F)-8 b(unction])-3599 b Fh(OM_uint32)55 b (gss_accept_sec_context)d Fg(\()p Ff(OM)p 2064 969 28 4 v 41 w(uin)m(t32)31 b(*)g Fe(minor_status)p Ff(,)565 1079 y(gss)p 688 1079 V 40 w(ctx)p 851 1079 V 41 w(id)p 968 1079 V 40 w(t)f(*)h Fe(context_handle)p Ff(,)k(const)c(gss)p 2292 1079 V 40 w(cred)p 2499 1079 V 40 w(id)p 2615 1079 V 40 w(t)565 1189 y Fe(acceptor_cred_handle)p Ff(,)37 b(const)31 b(gss)p 2028 1189 V 40 w(bu\013er)p 2299 1189 V 39 w(t)f Fe(input_token_buffer)p Ff(,)37 b(const)565 1298 y(gss)p 688 1298 V 40 w(c)m(hannel)p 1028 1298 V 41 w(bindings)p 1404 1298 V 39 w(t)30 b Fe(input_chan_bindings)p Ff(,)37 b(gss)p 2675 1298 V 40 w(name)p 2927 1298 V 40 w(t)31 b(*)f Fe(src_name)p Ff(,)565 1408 y(gss)p 688 1408 V 40 w(OID)h(*)f Fe(mech_type)p Ff(,)k(gss)p 1651 1408 V 40 w(bu\013er)p 1922 1408 V 39 w(t)c Fe(output_token)p Ff(,)35 b(OM)p 2864 1408 V 40 w(uin)m(t32)c(*)g Fe(ret_flags)p Ff(,)565 1517 y(OM)p 725 1517 V 40 w(uin)m(t32)g(*)g Fe(time_rec)p Ff(,)i(gss)p 1712 1517 V 40 w(cred)p 1919 1517 V 40 w(id)p 2035 1517 V 40 w(t)e(*)f Fe(delegated_cred_handl)q(e)p Fg(\))390 1627 y Ff(minor)p 629 1627 V 40 w(status)t Fp(:)40 b(\(In)m(teger,)32 b(mo)s(dify\))e(Mec)m(hanism)h(sp)s (eci\014c)g(status)f(co)s(de.)390 1772 y Ff(con)m(text)p 687 1772 V 42 w(handle)5 b Fp(:)38 b(\(gss)p 1212 1772 V 41 w(ctx)p 1376 1772 V 40 w(id)p 1492 1772 V 40 w(t,)28 b(read/mo)s(dify\))e(Con)m(text)h(handle)e(for)h(new)g(con)m(text.)41 b(Supply)390 1881 y(GSS)p 569 1881 V 39 w(C)p 674 1881 V 40 w(NO)p 853 1881 V 40 w(CONTEXT)35 b(for)h(\014rst)g(call;)41 b(use)36 b(v)-5 b(alue)37 b(returned)e(in)h(subsequen)m(t)g(calls.)60 b(Once)390 1991 y(gss)p 513 1991 V 40 w(accept)p 804 1991 V 42 w(sec)p 962 1991 V 40 w(con)m(text\(\))28 b(has)d(returned)e (a)j(v)-5 b(alue)25 b(via)h(this)f(parameter,)h(resources)f(ha)m(v)m(e) i(b)s(een)390 2100 y(assigned)g(to)h(the)f(corresp)s(onding)f(con)m (text,)j(and)d(m)m(ust)h(b)s(e)f(freed)h(b)m(y)g(the)g(application)h (after)f(use)390 2210 y(with)j(a)h(call)g(to)h(gss)p 1074 2210 V 40 w(delete)p 1345 2210 V 41 w(sec)p 1502 2210 V 41 w(con)m(text\(\).)390 2355 y Ff(acceptor)p 728 2355 V 42 w(cred)p 937 2355 V 40 w(handle)5 b Fp(:)38 b(\(gss)p 1460 2355 V 40 w(cred)p 1667 2355 V 40 w(id)p 1783 2355 V 40 w(t,)27 b(read\))g(Creden)m(tial)f(handle)g(claimed)h(b) m(y)f(con)m(text)i(ac-)390 2464 y(ceptor.)48 b(Sp)s(ecify)32 b(GSS)p 1207 2464 V 40 w(C)p 1313 2464 V 39 w(NO)p 1491 2464 V 40 w(CREDENTIAL)g(to)i(accept)g(the)e(con)m(text)j(as)e(a)g (default)g(prin-)390 2574 y(cipal.)41 b(If)28 b(GSS)p 910 2574 V 40 w(C)p 1016 2574 V 39 w(NO)p 1194 2574 V 40 w(CREDENTIAL)h(is)f(sp)s(eci\014ed,)h(but)f(no)h(default)g(acceptor) h(principal)f(is)390 2683 y(de\014ned,)g(GSS)p 907 2683 V 40 w(S)p 998 2683 V 39 w(NO)p 1176 2683 V 40 w(CRED)h(will)h(b)s(e)f (returned.)390 2828 y Ff(input)p 609 2828 V 39 w(tok)m(en)p 864 2828 V 41 w(bu\013er)7 b Fp(:)40 b(\(bu\013er,)29 b(opaque,)i(read\))g(T)-8 b(ok)m(en)31 b(obtained)g(from)f(remote)h (application.)390 2973 y Ff(input)p 609 2973 V 39 w(c)m(han)p 832 2973 V 40 w(bindings)t Fp(:)106 b(\(c)m(hannel)65 b(bindings,)70 b(read,)j(optional\))65 b(Application-)g(sp)s(eci\014ed) 390 3082 y(bindings.)171 b(Allo)m(ws)75 b(application)h(to)f(securely)g (bind)e(c)m(hannel)h(iden)m(ti\014cation)i(infor-)390 3192 y(mation)68 b(to)f(the)g(securit)m(y)h(con)m(text.)152 b(If)66 b(c)m(hannel)i(bindings)d(are)j(not)f(used,)75 b(sp)s(ecify)390 3302 y(GSS)p 569 3302 V 39 w(C)p 674 3302 V 40 w(NO)p 853 3302 V 40 w(CHANNEL)p 1350 3302 V 40 w(BINDINGS.)390 3446 y Ff(src)p 508 3446 V 40 w(name)5 b Fp(:)54 b(\(gss)p 996 3446 V 41 w(name)p 1249 3446 V 40 w(t,)39 b(mo)s(dify)-8 b(,)39 b(optional\))f(Authen)m(ticated)h (name)e(of)g(con)m(text)i(initiator.)390 3556 y(After)27 b(use,)g(this)f(name)h(should)e(b)s(e)h(deallo)s(cated)i(b)m(y)f (passing)f(it)h(to)g(gss)p 2847 3556 V 40 w(release)p 3149 3556 V 42 w(name\(\).)40 b(If)26 b(not)390 3665 y(required,)k(sp)s(ecify)g(NULL.)390 3810 y Ff(mec)m(h)p 600 3810 V 41 w(t)m(yp)s(e)5 b Fp(:)53 b(\(Ob)5 b(ject)37 b(ID,)g(mo)s(dify)-8 b(,)37 b(optional\))h(Securit)m(y)f(mec)m(hanism)g (used.)58 b(The)36 b(returned)390 3920 y(OID)27 b(v)-5 b(alue)28 b(will)g(b)s(e)e(a)i(p)s(oin)m(ter)f(in)m(to)h(static)h (storage,)h(and)d(should)f(b)s(e)h(treated)h(as)f(read-only)h(b)m(y)390 4029 y(the)g(caller)h(\(in)f(particular,)h(it)f(do)s(es)f(not)h(need)g (to)g(b)s(e)g(freed\).)39 b(If)28 b(not)g(required,)f(sp)s(ecify)h (NULL.)390 4174 y Ff(output)p 664 4174 V 40 w(tok)m(en)p Fp(:)55 b(\(bu\013er,)39 b(opaque,)h(mo)s(dify\))d(T)-8 b(ok)m(en)38 b(to)g(b)s(e)f(passed)g(to)h(p)s(eer)e(application.)63 b(If)390 4284 y(the)28 b(length)g(\014eld)f(of)h(the)g(returned)f(tok)m (en)i(bu\013er)e(is)g(0,)i(then)f(no)f(tok)m(en)i(need)f(b)s(e)f (passed)g(to)i(the)390 4393 y(p)s(eer)j(application.)48 b(If)32 b(a)g(non-)h(zero)g(length)f(\014eld)g(is)h(returned,)f(the)g (asso)s(ciated)i(storage)g(m)m(ust)390 4503 y(b)s(e)c(freed)g(after)h (use)f(b)m(y)g(the)h(application)g(with)f(a)h(call)h(to)f(gss)p 2547 4503 V 40 w(release)p 2849 4503 V 41 w(bu\013er\(\).)390 4647 y Ff(ret)p 507 4647 V 40 w(\015ags)t Fp(:)58 b(\(bit-mask,)43 b(mo)s(dify)-8 b(,)41 b(optional\))f(Con)m(tains)g(v)-5 b(arious)39 b(indep)s(enden)m(t)f(\015ags,)k(eac)m(h)e(of)390 4757 y(whic)m(h)e(indicates)i(that)f(the)g(con)m(text)h(supp)s(orts)d (a)i(sp)s(eci\014c)f(service)h(option.)66 b(If)38 b(not)h(needed,)390 4867 y(sp)s(ecify)c(NULL.)g(Sym)m(b)s(olic)g(names)h(are)f(pro)m(vided) g(for)g(eac)m(h)h(\015ag,)h(and)e(the)g(sym)m(b)s(olic)h(names)390 4976 y(corresp)s(onding)22 b(to)i(the)g(required)e(\015ags)h(should)g (b)s(e)f(logically-ANDed)27 b(with)c(the)h(ret)p 3311 4976 V 40 w(\015ags)f(v)-5 b(alue)390 5086 y(to)31 b(test)g(whether)f (a)h(giv)m(en)g(option)g(is)f(supp)s(orted)f(b)m(y)h(the)h(con)m(text.) 42 b(See)31 b(b)s(elo)m(w)g(for)f(the)g(\015ags.)390 5230 y Ff(time)p 572 5230 V 41 w(rec)6 b Fp(:)52 b(\(In)m(teger,)39 b(mo)s(dify)-8 b(,)37 b(optional\))g(Num)m(b)s(er)e(of)h(seconds)g(for) g(whic)m(h)g(the)g(con)m(text)i(will)390 5340 y(remain)30 b(v)-5 b(alid.)41 b(Sp)s(ecify)30 b(NULL)g(if)h(not)f(required.)p eop end %%Page: 32 36 TeXDict begin 32 35 bop 150 -116 a Fp(Chapter)30 b(3:)41 b(Standard)29 b(GSS)h(API)2284 b(32)390 299 y Ff(delegated)p 768 299 28 4 v 42 w(cred)p 977 299 V 40 w(handle)5 b Fp(:)58 b(\(gss)p 1520 299 V 40 w(cred)p 1727 299 V 40 w(id)p 1843 299 V 40 w(t,)42 b(mo)s(dify)-8 b(,)41 b(optional)f(creden) m(tial\))h(Handle)e(for)g(cre-)390 408 y(den)m(tials)d(receiv)m(ed)g (from)e(con)m(text)j(initiator.)56 b(Only)34 b(v)-5 b(alid)35 b(if)g(deleg)p 2782 408 V 41 w(\015ag)g(in)g(ret)p 3221 408 V 40 w(\015ags)g(is)g(true,)390 518 y(in)27 b(whic)m(h)g(case)h(an) f(explicit)h(creden)m(tial)h(handle)e(\(i.e.)40 b(not)28 b(GSS)p 2611 518 V 39 w(C)p 2716 518 V 40 w(NO)p 2895 518 V 40 w(CREDENTIAL\))f(will)390 628 y(b)s(e)42 b(returned;)47 b(if)42 b(deleg)p 1240 628 V 41 w(\015ag)h(is)f(false,)k(gss)p 1930 628 V 40 w(accept)p 2221 628 V 42 w(sec)p 2379 628 V 40 w(con)m(text\(\))f(will)e(set)f(this)g(parameter)390 737 y(to)33 b(GSS)p 682 737 V 39 w(C)p 787 737 V 40 w(NO)p 966 737 V 40 w(CREDENTIAL.)f(If)g(a)h(creden)m(tial)h(handle)e(is)g (returned,)g(the)h(asso)s(ciated)h(re-)390 847 y(sources)26 b(m)m(ust)g(b)s(e)f(released)i(b)m(y)f(the)h(application)g(after)f(use) g(with)g(a)g(call)i(to)f(gss)p 3150 847 V 40 w(release)p 3452 847 V 41 w(cred\(\).)390 956 y(Sp)s(ecify)j(NULL)g(if)g(not)h (required.)390 1103 y(Allo)m(ws)39 b(a)g(remotely)g(initiated)g (securit)m(y)g(con)m(text)h(b)s(et)m(w)m(een)f(the)f(application)i(and) d(a)i(remote)390 1212 y(p)s(eer)53 b(to)h(b)s(e)f(established.)110 b(The)53 b(routine)g(ma)m(y)h(return)f(a)h(output)p 2905 1212 V 39 w(tok)m(en)h(whic)m(h)e(should)390 1322 y(b)s(e)g (transferred)g(to)i(the)f(p)s(eer)f(application,)61 b(where)53 b(the)h(p)s(eer)g(application)h(will)f(presen)m(t)390 1431 y(it)49 b(to)g(gss)p 751 1431 V 41 w(init)p 928 1431 V 40 w(sec)p 1084 1431 V 41 w(con)m(text.)97 b(If)48 b(no)g(tok)m(en)i(need)e(b)s(e)g(sen)m(t,)54 b(gss)p 2784 1431 V 40 w(accept)p 3075 1431 V 42 w(sec)p 3233 1431 V 40 w(con)m(text)d(will)390 1541 y(indicate)39 b(this)g(b)m(y)f(setting)h(the)g(length)f(\014eld)g(of)h(the)f(output)p 2572 1541 V 40 w(tok)m(en)h(argumen)m(t)g(to)g(zero.)65 b(T)-8 b(o)390 1650 y(complete)52 b(the)f(con)m(text)i(establishmen)m (t,)k(one)52 b(or)e(more)i(reply)e(tok)m(ens)i(ma)m(y)f(b)s(e)g (required)390 1760 y(from)65 b(the)h(p)s(eer)f(application;)85 b(if)66 b(so,)75 b(gss)p 2038 1760 V 40 w(accept)p 2329 1760 V 42 w(sec)p 2487 1760 V 40 w(con)m(text)68 b(will)e(return)f(a)h (status)390 1870 y(\015ag)57 b(of)f(GSS)p 896 1870 V 40 w(S)p 987 1870 V 39 w(CONTINUE)p 1528 1870 V 40 w(NEEDED,)h(in)f (whic)m(h)g(case)i(it)f(should)e(b)s(e)h(called)i(again)390 1979 y(when)43 b(the)h(reply)f(tok)m(en)i(is)f(receiv)m(ed)h(from)f (the)g(p)s(eer)f(application,)49 b(passing)43 b(the)h(tok)m(en)h(to)390 2089 y(gss)p 513 2089 V 40 w(accept)p 804 2089 V 42 w(sec)p 962 2089 V 40 w(con)m(text)33 b(via)e(the)f(input)p 1844 2089 V 39 w(tok)m(en)i(parameters.)390 2235 y(P)m(ortable)27 b(applications)f(should)f(b)s(e)g(constructed)g(to)h(use)g(the)f(tok)m (en)i(length)e(and)g(return)g(status)390 2345 y(to)k(determine)f (whether)g(a)g(tok)m(en)i(needs)d(to)i(b)s(e)f(sen)m(t)g(or)h(w)m (aited)g(for.)40 b(Th)m(us)27 b(a)h(t)m(ypical)i(p)s(ortable)390 2454 y(caller)i(should)d(alw)m(a)m(ys)j(in)m(v)m(ok)m(e)g(gss)p 1615 2454 V 40 w(accept)p 1906 2454 V 42 w(sec)p 2064 2454 V 41 w(con)m(text)g(within)e(a)g(lo)s(op:)630 2600 y Fj(gss_ctx_id_t)44 b(context_hdl)h(=)j(GSS_C_NO_CONTEXT;)630 2819 y(do)f({)725 2929 y(receive_token_from_peer\(in)o(put_)o(tok)o (en\);)725 3039 y(maj_stat)f(=)h(gss_accept_sec_context\(&mi)o(n_st)o (at,)2348 3148 y(&context_hdl,)2348 3258 y(cred_hdl,)2348 3367 y(input_token,)2348 3477 y(input_bindings,)2348 3587 y(&client_name,)2348 3696 y(&mech_type,)2348 3806 y(output_token,)2348 3915 y(&ret_flags,)2348 4025 y(&time_rec,)2348 4134 y(&deleg_cred\);)725 4244 y(if)h(\(GSS_ERROR\(maj_stat\)\))42 b({)821 4354 y(report_error\(maj_stat,)g(min_stat\);)725 4463 y(};)725 4573 y(if)48 b(\(output_token->length)42 b(!=)47 b(0\))g({)821 4682 y(send_token_to_peer\(outpu)o(t_to)o(ken)o (\);)821 4902 y(gss_release_buffer\(&min_)o(stat)o(,)42 b(output_token\);)725 5011 y(};)725 5121 y(if)48 b (\(GSS_ERROR\(maj_stat\)\))42 b({)821 5230 y(if)47 b(\(context_hdl)e (!=)i(GSS_C_NO_CONTEXT\))916 5340 y(gss_delete_sec_context\(&mi)o(n_s)o (tat,)p eop end %%Page: 33 37 TeXDict begin 33 36 bop 150 -116 a Fp(Chapter)30 b(3:)41 b(Standard)29 b(GSS)h(API)2284 b(33)2014 299 y Fj(&context_hdl,)2014 408 y(GSS_C_NO_BUFFER\);)821 518 y(break;)725 628 y(};)630 737 y(})47 b(while)g(\(maj_stat)e(&)j(GSS_S_CONTINUE_NEEDED\);)390 871 y Fp(Whenev)m(er)94 b(the)g(routine)g(returns)e(a)i(ma)5 b(jor)93 b(status)h(that)h(includes)e(the)g(v)-5 b(alue)390 981 y(GSS)p 569 981 28 4 v 39 w(S)p 659 981 V 40 w(CONTINUE)p 1201 981 V 39 w(NEEDED,)29 b(the)e(con)m(text)j(is)e(not)f(fully)h (established)g(and)f(the)g(follo)m(wing)390 1090 y(restrictions)k (apply)f(to)h(the)g(output)f(parameters:)390 1224 y(The)c(v)-5 b(alue)27 b(returned)e(via)i(the)g(time)p 1649 1224 V 40 w(rec)g(parameter)g(is)f(unde\014ned)e(Unless)j(the)f(accompan)m (ying)390 1334 y(ret)p 507 1334 V 40 w(\015ags)34 b(parameter)f(con)m (tains)i(the)e(bit)g(GSS)p 2031 1334 V 39 w(C)p 2136 1334 V 40 w(PR)m(OT)p 2439 1334 V 40 w(READ)m(Y)p 2810 1334 V 41 w(FLA)m(G,)h(indicating)g(that)390 1443 y(p)s(er-message)41 b(services)f(ma)m(y)h(b)s(e)f(applied)g(in)f(adv)-5 b(ance)41 b(of)g(a)f(successful)g(completion)h(status,)390 1553 y(the)32 b(v)-5 b(alue)33 b(returned)e(via)i(the)f(mec)m(h)p 1675 1553 V 40 w(t)m(yp)s(e)h(parameter)f(ma)m(y)h(b)s(e)e(unde\014ned) f(un)m(til)j(the)f(routine)390 1663 y(returns)d(a)i(ma)5 b(jor)30 b(status)h(v)-5 b(alue)31 b(of)f(GSS)p 1831 1663 V 40 w(S)p 1922 1663 V 39 w(COMPLETE.)390 1797 y(The)20 b(v)-5 b(alues)20 b(of)h(the)f(GSS)p 1246 1797 V 40 w(C)p 1352 1797 V 39 w(DELEG)p 1712 1797 V 41 w(FLA)m(G,)h(GSS)p 2224 1797 V 40 w(C)p 2330 1797 V 39 w(MUTUAL)p 2779 1797 V 41 w(FLA)m(G,GSS)p 3270 1797 V 40 w(C)p 3376 1797 V 40 w(REPLA)-8 b(Y)p 3792 1797 V 40 w(FLA)m(G,)390 1906 y(GSS)p 569 1906 V 39 w(C)p 674 1906 V 40 w(SEQUENCE)p 1224 1906 V 39 w(FLA)m(G,)130 b(GSS)p 1843 1906 V 39 w(C)p 1948 1906 V 40 w(CONF)p 2252 1906 V 40 w(FLA)m(G,GSS)p 2742 1906 V 40 w(C)p 2848 1906 V 40 w(INTEG)p 3188 1906 V 40 w(FLA)m(G)g(and)390 2016 y(GSS)p 569 2016 V 39 w(C)p 674 2016 V 40 w(ANON)p 989 2016 V 40 w(FLA)m(G)39 b(bits)e(returned)f (via)i(the)f(ret)p 2310 2016 V 41 w(\015ags)g(parameter)h(should)e(con) m(tain)j(the)390 2125 y(v)-5 b(alues)30 b(that)h(the)f(implemen)m (tation)h(exp)s(ects)f(w)m(ould)g(b)s(e)f(v)-5 b(alid)30 b(if)g(con)m(text)i(establishmen)m(t)e(w)m(ere)390 2235 y(to)h(succeed.)390 2369 y(The)42 b(v)-5 b(alues)42 b(of)g(the)g(GSS)p 1333 2369 V 40 w(C)p 1439 2369 V 39 w(PR)m(OT)p 1741 2369 V 40 w(READ)m(Y)p 2112 2369 V 41 w(FLA)m(G)h(and)e(GSS)p 2809 2369 V 40 w(C)p 2915 2369 V 39 w(TRANS)p 3274 2369 V 40 w(FLA)m(G)i(bits)390 2478 y(within)36 b(ret)p 796 2478 V 40 w(\015ags)h(should)e(indicate)j(the)e(actual)i(state)g(at)f (the)g(time)g(gss)p 2974 2478 V 40 w(accept)p 3265 2478 V 41 w(sec)p 3422 2478 V 41 w(con)m(text)390 2588 y(returns,)29 b(whether)h(or)g(not)h(the)g(con)m(text)h(is)e(fully)g(established.)390 2722 y(Although)20 b(this)h(requires)e(that)i(GSS-API)f(implemen)m (tations)i(set)f(the)f(GSS)p 2985 2722 V 39 w(C)p 3090 2722 V 40 w(PR)m(OT)p 3393 2722 V 40 w(READ)m(Y)p 3764 2722 V 41 w(FLA)m(G)390 2832 y(in)73 b(the)g(\014nal)f(ret)p 1099 2832 V 41 w(\015ags)h(returned)f(to)h(a)h(caller)g(\(i.e.)170 b(when)72 b(accompanied)i(b)m(y)f(a)390 2941 y(GSS)p 569 2941 V 39 w(S)p 659 2941 V 40 w(COMPLETE)36 b(status)h(co)s(de\),)j (applications)e(should)e(not)h(rely)h(on)f(this)g(b)s(eha)m(vior)g(as) 390 3051 y(the)g(\015ag)g(w)m(as)g(not)g(de\014ned)f(in)g(V)-8 b(ersion)38 b(1)f(of)g(the)g(GSS-API.)f(Instead,)j(applications)f (should)390 3160 y(b)s(e)45 b(prepared)f(to)j(use)e(p)s(er-message)h (services)g(after)g(a)g(successful)f(con)m(text)j(establishmen)m(t,)390 3270 y(according)31 b(to)g(the)g(GSS)p 1246 3270 V 39 w(C)p 1351 3270 V 40 w(INTEG)p 1691 3270 V 40 w(FLA)m(G)g(and)f(GSS)p 2364 3270 V 39 w(C)p 2469 3270 V 40 w(CONF)p 2773 3270 V 40 w(FLA)m(G)h(v)-5 b(alues.)390 3404 y(All)30 b(other)h(bits)e (within)h(the)g(ret)p 1508 3404 V 40 w(\015ags)g(argumen)m(t)h(should)e (b)s(e)g(set)h(to)h(zero.)41 b(While)31 b(the)f(routine)390 3513 y(returns)40 b(GSS)p 894 3513 V 39 w(S)p 984 3513 V 40 w(CONTINUE)p 1526 3513 V 39 w(NEEDED,)i(the)f(v)-5 b(alues)41 b(returned)f(via)i(the)f(ret)p 3290 3513 V 40 w(\015ags)h(argu-)390 3623 y(men)m(t)33 b(indicate)g(the)f(services) h(that)g(the)f(implemen)m(tation)i(exp)s(ects)f(to)g(b)s(e)e(a)m(v)-5 b(ailable)35 b(from)d(the)390 3733 y(established)f(con)m(text.)390 3867 y(If)43 b(the)i(initial)g(call)g(of)f(gss)p 1361 3867 V 40 w(accept)p 1652 3867 V 42 w(sec)p 1810 3867 V 40 w(con)m(text\(\))j(fails,)h(the)c(implemen)m(tation)i(should)d (not)390 3976 y(create)22 b(a)g(con)m(text)h(ob)5 b(ject,)23 b(and)e(should)f(lea)m(v)m(e)j(the)e(v)-5 b(alue)21 b(of)h(the)f(con)m (text)p 2894 3976 V 42 w(handle)f(parameter)h(set)390 4086 y(to)30 b(GSS)p 679 4086 V 39 w(C)p 784 4086 V 40 w(NO)p 963 4086 V 39 w(CONTEXT)e(to)i(indicate)g(this.)40 b(In)28 b(the)h(ev)m(en)m(t)h(of)f(a)h(failure)f(on)f(a)i(subsequen)m (t)390 4195 y(call,)38 b(the)d(implemen)m(tation)i(is)e(p)s(ermitted)g (to)h(delete)g(the)f Fj(")p Fp(half-built)p Fj(")g Fp(securit)m(y)h (con)m(text)h(\(in)390 4305 y(whic)m(h)d(case)h(it)g(should)e(set)i (the)f(con)m(text)p 1840 4305 V 42 w(handle)g(parameter)h(to)g(GSS)p 2906 4305 V 39 w(C)p 3011 4305 V 40 w(NO)p 3190 4305 V 39 w(CONTEXT\),)390 4415 y(but)g(the)i(preferred)d(b)s(eha)m(vior)i (is)g(to)h(lea)m(v)m(e)i(the)d(securit)m(y)h(con)m(text)g(\(and)f(the)g (con)m(text)p 3451 4415 V 42 w(handle)390 4524 y(parameter\))31 b(un)m(touc)m(hed)g(for)f(the)g(application)i(to)f(delete)h(\(using)e (gss)p 2835 4524 V 40 w(delete)p 3106 4524 V 41 w(sec)p 3263 4524 V 41 w(con)m(text\).)390 4658 y(During)42 b(con)m(text)i (establishmen)m(t,)j(the)c(informational)g(status)g(bits)f(GSS)p 3052 4658 V 39 w(S)p 3142 4658 V 40 w(OLD)p 3379 4658 V 40 w(TOKEN)390 4768 y(and)36 b(GSS)p 752 4768 V 40 w(S)p 843 4768 V 39 w(DUPLICA)-8 b(TE)p 1425 4768 V 40 w(TOKEN)36 b(indicate)i(fatal)g(errors,)g(and)e(GSS-API)h(mec)m (hanisms)390 4877 y(should)d(alw)m(a)m(ys)i(return)d(them)i(in)f(asso)s (ciation)i(with)e(a)h(routine)g(error)f(of)h(GSS)p 3197 4877 V 39 w(S)p 3287 4877 V 40 w(F)-10 b(AILURE.)390 4987 y(This)30 b(requiremen)m(t)h(for)g(pairing)g(did)f(not)h(exist)g (in)g(v)m(ersion)g(1)g(of)g(the)h(GSS-API)e(sp)s(eci\014cation,)390 5096 y(so)41 b(applications)h(that)f(wish)f(to)h(run)e(o)m(v)m(er)j(v)m (ersion)f(1)g(implemen)m(tations)h(m)m(ust)f(sp)s(ecial-case)390 5206 y(these)31 b(co)s(des.)390 5340 y(The)f Fj(ret_flags)e Fp(v)-5 b(alues:)p eop end %%Page: 34 38 TeXDict begin 34 37 bop 150 -116 a Fp(Chapter)30 b(3:)h(Standard)e(GSS) h(API)2294 b(34)870 299 y Fj(GSS_C_DELEG_FLAG)945 435 y Fn(\017)60 b Fp(T)-8 b(rue)96 b(-)h(Delegated)j(creden)m(tials)e(are) f(a)m(v)-5 b(ailable)99 b(via)e(the)g(dele-)1050 545 y(gated)p 1272 545 28 4 v 41 w(cred)p 1480 545 V 40 w(handle)30 b(parameter.)945 681 y Fn(\017)60 b Fp(F)-8 b(alse)32 b(-)f(No)g(creden)m(tials)g(w)m(ere)g(delegated.)870 844 y Fj(GSS_C_MUTUAL_FLAG)945 980 y Fn(\017)60 b Fp(T)-8 b(rue)30 b(-)h(Remote)g(p)s(eer)f(ask)m(ed)h(for)f(m)m(utual)h(authen)m (tication.)945 1116 y Fn(\017)60 b Fp(F)-8 b(alse)32 b(-)f(Remote)g(p)s(eer)f(did)g(not)g(ask)h(for)f(m)m(utual)h(authen)m (tication.)870 1279 y Fj(GSS_C_REPLAY_FLAG)945 1415 y Fn(\017)60 b Fp(T)-8 b(rue)30 b(-)h(repla)m(y)f(of)h(protected)g (messages)h(will)e(b)s(e)g(detected.)945 1551 y Fn(\017)60 b Fp(F)-8 b(alse)32 b(-)f(repla)m(y)m(ed)g(messages)g(will)g(not)g(b)s (e)e(detected.)870 1714 y Fj(GSS_C_SEQUENCE_FLAG)945 1850 y Fn(\017)60 b Fp(T)-8 b(rue)30 b(-)h(out-of-sequence)g(protected) h(messages)f(will)g(b)s(e)f(detected.)945 1986 y Fn(\017)60 b Fp(F)-8 b(alse)32 b(-)f(out-of-sequence)h(messages)f(will)g(not)f(b)s (e)g(detected.)870 2149 y Fj(GSS_C_CONF_FLAG)945 2285 y Fn(\017)60 b Fp(T)-8 b(rue)23 b(-)h(Con\014den)m(tialit)m(y)h (service)g(ma)m(y)f(b)s(e)f(in)m(v)m(ok)m(ed)i(b)m(y)f(calling)h(the)f (gss)p 3519 2285 V 40 w(wrap)1050 2394 y(routine.)945 2531 y Fn(\017)60 b Fp(F)-8 b(alse)33 b(-)e(No)h(con\014den)m(tialit)m (y)i(service)e(\(via)g(gss)p 2686 2531 V 40 w(wrap\))f(a)m(v)-5 b(ailable.)46 b(gss)p 3519 2531 V 40 w(wrap)1050 2640 y(will)38 b(pro)m(vide)f(message)i(encapsulation,)h(data-origin)f (authen)m(tication)h(and)1050 2750 y(in)m(tegrit)m(y)32 b(services)f(only)-8 b(.)870 2912 y Fj(GSS_C_INTEG_FLAG)945 3049 y Fn(\017)60 b Fp(T)-8 b(rue)27 b(-)h(In)m(tegrit)m(y)h(service)f (ma)m(y)g(b)s(e)f(in)m(v)m(ok)m(ed)i(b)m(y)e(calling)i(either)f(gss)p 3413 3049 V 40 w(get)p 3573 3049 V 42 w(mic)1050 3158 y(or)i(gss)p 1284 3158 V 41 w(wrap)f(routines.)945 3294 y Fn(\017)60 b Fp(F)-8 b(alse)32 b(-)f(P)m(er-message)h(in)m(tegrit)m (y)g(service)f(una)m(v)-5 b(ailable.)870 3457 y Fj(GSS_C_ANON_FLAG)945 3593 y Fn(\017)60 b Fp(T)-8 b(rue)26 b(-)g(The)g(initiator)i(do)s(es)d (not)i(wish)e(to)i(b)s(e)f(authen)m(ticated;)k(the)c(src)p 3504 3593 V 40 w(name)1050 3703 y(parameter)31 b(\(if)g(requested\))f (con)m(tains)i(an)e(anon)m(ymous)g(in)m(ternal)h(name.)945 3839 y Fn(\017)60 b Fp(F)-8 b(alse)32 b(-)f(The)f(initiator)h(has)f(b)s (een)g(authen)m(ticated)i(normally)-8 b(.)870 4002 y Fj(GSS_C_PROT_READY_FLAG)945 4138 y Fn(\017)60 b Fp(T)-8 b(rue)66 b(-)h(Protection)h(services)f(\(as)g(sp)s(eci\014ed)f(b)m(y)h (the)f(states)i(of)f(the)1050 4247 y(GSS)p 1229 4247 V 39 w(C)p 1334 4247 V 40 w(CONF)p 1638 4247 V 40 w(FLA)m(G)h(and)e (GSS)p 2384 4247 V 39 w(C)p 2489 4247 V 40 w(INTEG)p 2829 4247 V 40 w(FLA)m(G\))i(are)g(a)m(v)-5 b(ailable)1050 4357 y(if)93 b(the)h(accompan)m(ying)g(ma)5 b(jor)94 b(status)f(return)f(v)-5 b(alue)94 b(is)f(either)1050 4467 y(GSS)p 1229 4467 V 39 w(S)p 1319 4467 V 40 w(COMPLETE)29 b(or)h(GSS)p 2201 4467 V 40 w(S)p 2292 4467 V 39 w(CONTINUE)p 2833 4467 V 39 w(NEEDED.)945 4603 y Fn(\017)60 b Fp(F)-8 b(alse)88 b(-)f(Protection)h(services)f(\(as)g(sp)s(eci\014ed)e(b)m(y)i (the)f(states)i(of)1050 4712 y(the)121 b(GSS)p 1476 4712 V 40 w(C)p 1582 4712 V 39 w(CONF)p 1885 4712 V 40 w(FLA)m(G)h(and)f (GSS)p 2740 4712 V 39 w(C)p 2845 4712 V 40 w(INTEG)p 3185 4712 V 40 w(FLA)m(G\))i(are)1050 4822 y(a)m(v)-5 b(ailable)54 b(only)d(if)g(the)h(accompan)m(ying)g(ma)5 b(jor)52 b(status)f(return)f(v)-5 b(alue)52 b(is)1050 4932 y(GSS)p 1229 4932 V 39 w(S)p 1319 4932 V 40 w(COMPLETE.)870 5094 y Fj(GSS_C_TRANS_FLAG)945 5230 y Fn(\017)60 b Fp(T)-8 b(rue)39 b(-)h(The)f(resultan)m(t)h(securit)m(y)g(con)m(text)h(ma)m(y)f (b)s(e)f(transferred)f(to)j(other)1050 5340 y(pro)s(cesses)30 b(via)h(a)g(call)h(to)f(gss)p 2069 5340 V 40 w(exp)s(ort)p 2367 5340 V 40 w(sec)p 2523 5340 V 40 w(con)m(text\(\).)p eop end %%Page: 35 39 TeXDict begin 35 38 bop 150 -116 a Fp(Chapter)30 b(3:)41 b(Standard)29 b(GSS)h(API)2284 b(35)945 299 y Fn(\017)60 b Fp(F)-8 b(alse)32 b(-)f(The)f(securit)m(y)h(con)m(text)h(is)e(not)h (transferable.)390 453 y(All)g(other)g(bits)f(should)f(b)s(e)h(set)h (to)g(zero.)390 585 y(Return)f(v)-5 b(alue:)390 717 y Fj(GSS_S_CONTINUE_NEEDED)p Fp(:)31 b(Indicates)23 b(that)g(a)g(tok)m (en)h(from)e(the)h(p)s(eer)f(application)i(is)f(required)390 827 y(to)34 b(complete)g(the)g(con)m(text,)i(and)c(that)i(gss)p 1904 827 28 4 v 40 w(accept)p 2195 827 V 42 w(sec)p 2353 827 V 40 w(con)m(text)h(m)m(ust)e(b)s(e)g(called)h(again)g(with)390 936 y(that)d(tok)m(en.)390 1068 y Fj(GSS_S_DEFECTIVE_TOKEN)p Fp(:)63 b(Indicates)45 b(that)f(consistency)i(c)m(hec)m(ks)f(p)s (erformed)e(on)h(the)h(in-)390 1178 y(put)p 533 1178 V 39 w(tok)m(en)32 b(failed.)390 1310 y Fj(GSS_S_DEFECTIVE_CREDENTI)o (AL)p Fp(:)40 b(Indicates)34 b(that)g(consistency)g(c)m(hec)m(ks)h(p)s (erformed)d(on)h(the)390 1420 y(creden)m(tial)f(failed.)390 1552 y Fj(GSS_S_NO_CRED)p Fp(:)47 b(The)35 b(supplied)f(creden)m(tials) j(w)m(ere)e(not)h(v)-5 b(alid)36 b(for)f(con)m(text)i(acceptance,)i(or) 390 1661 y(the)31 b(creden)m(tial)g(handle)f(did)g(not)h(reference)f (an)m(y)h(creden)m(tials.)390 1793 y Fj(GSS_S_CREDENTIALS_EXPIRE)o(D)p Fp(:)k(The)30 b(referenced)g(creden)m(tials)i(ha)m(v)m(e)f(expired.)390 1925 y Fj(GSS_S_BAD_BINDINGS)p Fp(:)40 b(The)32 b(input)p 1727 1925 V 39 w(tok)m(en)i(con)m(tains)g(di\013eren)m(t)f(c)m(hannel)g (bindings)e(to)i(those)390 2035 y(sp)s(eci\014ed)d(via)h(the)f(input)p 1281 2035 V 39 w(c)m(han)p 1504 2035 V 41 w(bindings)f(parameter.)390 2167 y Fj(GSS_S_NO_CONTEXT)p Fp(:)58 b(Indicates)42 b(that)g(the)f (supplied)f(con)m(text)j(handle)e(did)f(not)i(refer)f(to)h(a)390 2276 y(v)-5 b(alid)31 b(con)m(text.)390 2408 y Fj(GSS_S_BAD_SIG)p Fp(:)37 b(The)30 b(input)p 1482 2408 V 39 w(tok)m(en)i(con)m(tains)f (an)f(in)m(v)-5 b(alid)31 b(MIC.)390 2540 y Fj(GSS_S_OLD_TOKEN)p Fp(:)36 b(The)28 b(input)p 1575 2540 V 39 w(tok)m(en)i(w)m(as)f(to)s(o) h(old.)40 b(This)28 b(is)h(a)g(fatal)h(error)f(during)e(con)m(text)390 2650 y(establishmen)m(t.)390 2782 y Fj(GSS_S_DUPLICATE_TOKEN)p Fp(:)59 b(The)41 b(input)p 1899 2782 V 39 w(tok)m(en)j(is)e(v)-5 b(alid,)46 b(but)41 b(is)h(a)h(duplicate)g(of)f(a)h(tok)m(en)390 2892 y(already)31 b(pro)s(cessed.)40 b(This)30 b(is)g(a)h(fatal)g (error)f(during)g(con)m(text)i(establishmen)m(t.)390 3024 y Fj(GSS_S_BAD_MECH)p Fp(:)j(The)26 b(receiv)m(ed)i(tok)m(en)f(sp) s(eci\014ed)f(a)h(mec)m(hanism)g(that)g(is)g(not)f(supp)s(orted)f(b)m (y)390 3133 y(the)31 b(implemen)m(tation)h(or)e(the)g(pro)m(vided)g (creden)m(tial.)150 3328 y Fi(gss)p 316 3328 37 5 v 55 w(delete)p 689 3328 V 54 w(sec)p 902 3328 V 54 w(con)m(text)3350 3519 y Fp([F)-8 b(unction])-3599 b Fh(OM_uint32)55 b (gss_delete_sec_context)d Fg(\()p Ff(OM)p 2064 3519 28 4 v 41 w(uin)m(t32)31 b(*)g Fe(minor_status)p Ff(,)565 3629 y(gss)p 688 3629 V 40 w(ctx)p 851 3629 V 41 w(id)p 968 3629 V 40 w(t)f(*)h Fe(context_handle)p Ff(,)k(gss)p 2054 3629 V 40 w(bu\013er)p 2325 3629 V 39 w(t)c Fe(output_token)p Fg(\))390 3738 y Ff(minor)p 629 3738 V 40 w(status)t Fp(:)40 b(\(In)m(teger,)32 b(mo)s(dify\))e(Mec)m(hanism)h(sp)s (eci\014c)g(status)f(co)s(de.)390 3870 y Ff(con)m(text)p 687 3870 V 42 w(handle)5 b Fp(:)111 b(\(gss)p 1285 3870 V 41 w(ctx)p 1449 3870 V 40 w(id)p 1565 3870 V 40 w(t,)75 b(mo)s(dify\))66 b(Con)m(text)h(handle)e(iden)m(tifying)i(con)m(text)g (to)390 3980 y(delete.)92 b(After)47 b(deleting)h(the)f(con)m(text,)53 b(the)47 b(GSS-API)f(will)i(set)f(this)g(con)m(text)i(handle)d(to)390 4090 y(GSS)p 569 4090 V 39 w(C)p 674 4090 V 40 w(NO)p 853 4090 V 40 w(CONTEXT.)390 4222 y Ff(output)p 664 4222 V 40 w(tok)m(en)p Fp(:)52 b(\(bu\013er,)36 b(opaque,)h(mo)s(dify)-8 b(,)36 b(optional\))h(T)-8 b(ok)m(en)37 b(to)f(b)s(e)e(sen)m(t)i(to)g (remote)h(appli-)390 4331 y(cation)d(to)g(instruct)e(it)i(to)f(also)h (delete)g(the)f(con)m(text.)50 b(It)33 b(is)g(recommended)f(that)i (applications)390 4441 y(sp)s(ecify)d(GSS)p 871 4441 V 40 w(C)p 977 4441 V 39 w(NO)p 1155 4441 V 40 w(BUFFER)i(for)e(this)h (parameter,)h(requesting)f(lo)s(cal)g(deletion)h(only)-8 b(.)45 b(If)32 b(a)390 4550 y(bu\013er)g(parameter)h(is)g(pro)m(vided)f (b)m(y)h(the)g(application,)i(the)e(mec)m(hanism)g(ma)m(y)g(return)f(a) h(tok)m(en)390 4660 y(in)k(it;)42 b(mec)m(hanisms)c(that)g(implemen)m (t)h(only)e(lo)s(cal)i(deletion)g(should)e(set)h(the)g(length)g (\014eld)f(of)390 4770 y(this)g(tok)m(en)h(to)g(zero)g(to)g(indicate)g (to)g(the)g(application)g(that)g(no)f(tok)m(en)h(is)g(to)g(b)s(e)e(sen) m(t)i(to)g(the)390 4879 y(p)s(eer.)390 5011 y(Delete)31 b(a)f(securit)m(y)f(con)m(text.)43 b(gss)p 1564 5011 V 40 w(delete)p 1835 5011 V 41 w(sec)p 1992 5011 V 41 w(con)m(text)31 b(will)e(delete)h(the)g(lo)s(cal)g(data)g(structures) 390 5121 y(asso)s(ciated)41 b(with)e(the)h(sp)s(eci\014ed)f(securit)m (y)i(con)m(text,)j(and)39 b(ma)m(y)h(generate)h(an)f(output)p 3474 5121 V 40 w(tok)m(en,)390 5230 y(whic)m(h)33 b(when)g(passed)f(to) j(the)e(p)s(eer)g(gss)p 1785 5230 V 40 w(pro)s(cess)p 2112 5230 V 40 w(con)m(text)p 2443 5230 V 42 w(tok)m(en)h(will)g (instruct)f(it)h(to)g(do)f(lik)m(e-)390 5340 y(wise.)50 b(If)34 b(no)f(tok)m(en)i(is)e(required)g(b)m(y)h(the)f(mec)m(hanism,)i (the)f(GSS-API)f(should)g(set)h(the)g(length)p eop end %%Page: 36 40 TeXDict begin 36 39 bop 150 -116 a Fp(Chapter)30 b(3:)41 b(Standard)29 b(GSS)h(API)2284 b(36)390 299 y(\014eld)35 b(of)g(the)g(output)p 1135 299 28 4 v 40 w(tok)m(en)h(\(if)f(pro)m (vided\))g(to)h(zero.)55 b(No)36 b(further)d(securit)m(y)j(services)g (ma)m(y)g(b)s(e)390 408 y(obtained)31 b(using)f(the)g(con)m(text)i(sp)s (eci\014ed)e(b)m(y)g(con)m(text)p 2271 408 V 42 w(handle.)390 555 y(In)25 b(addition)h(to)g(deleting)g(established)g(securit)m(y)h (con)m(texts,)h(gss)p 2596 555 V 40 w(delete)p 2867 555 V 42 w(sec)p 3025 555 V 40 w(con)m(text)g(m)m(ust)d(also)390 665 y(b)s(e)h(able)h(to)h(delete)f Fj(")p Fp(half-built)p Fj(")g Fp(securit)m(y)g(con)m(texts)h(resulting)f(from)f(an)h (incomplete)h(sequence)390 775 y(of)j(gss)p 617 775 V 40 w(init)p 793 775 V 40 w(sec)p 949 775 V 41 w(con)m(text\(\)/gss)p 1513 775 V 43 w(accept)p 1807 775 V 42 w(sec)p 1965 775 V 40 w(con)m(text\(\))i(calls.)390 921 y(The)c(output)p 850 921 V 40 w(tok)m(en)h(parameter)g(is)g(retained)f(for)h (compatibilit)m(y)h(with)e(v)m(ersion)h(1)g(of)g(the)f(GSS-)390 1031 y(API.)41 b(It)h(is)f(recommended)g(that)h(b)s(oth)f(p)s(eer)g (applications)i(in)m(v)m(ok)m(e)g(gss)p 2994 1031 V 40 w(delete)p 3265 1031 V 41 w(sec)p 3422 1031 V 41 w(con)m(text)390 1141 y(passing)35 b(the)g(v)-5 b(alue)35 b(GSS)p 1293 1141 V 39 w(C)p 1398 1141 V 40 w(NO)p 1577 1141 V 40 w(BUFFER)h(for)f(the)g(output)p 2605 1141 V 39 w(tok)m(en)h(parameter,) h(indicating)390 1250 y(that)53 b(no)e(tok)m(en)i(is)f(required,)57 b(and)52 b(that)g(gss)p 2087 1250 V 40 w(delete)p 2358 1250 V 42 w(sec)p 2516 1250 V 40 w(con)m(text)i(should)d(simply)h (delete)390 1360 y(lo)s(cal)60 b(con)m(text)h(data)e(structures.)125 b(If)59 b(the)f(application)j(do)s(es)d(pass)g(a)h(v)-5 b(alid)59 b(bu\013er)f(to)390 1469 y(gss)p 513 1469 V 40 w(delete)p 784 1469 V 41 w(sec)p 941 1469 V 41 w(con)m(text,)50 b(mec)m(hanisms)45 b(are)g(encouraged)g(to)h(return)d(a)i(zero-length)i (tok)m(en,)390 1579 y(indicating)34 b(that)g(no)f(p)s(eer)f(action)i (is)f(necessary)-8 b(,)35 b(and)e(that)g(no)g(tok)m(en)h(should)f(b)s (e)f(transferred)390 1688 y(b)m(y)e(the)h(application.)390 1835 y(Return)f(v)-5 b(alue:)390 1982 y Fj(GSS_S_COMPLETE)p Fp(:)37 b(Successful)30 b(completion.)390 2129 y Fj(GSS_S_NO_CONTEXT)p Fp(:)36 b(No)31 b(v)-5 b(alid)31 b(con)m(text)h(w)m(as)f(supplied.)150 2341 y Fi(gss)p 316 2341 37 5 v 55 w(pro)s(cess)p 760 2341 V 56 w(con)m(text)p 1214 2341 V 53 w(tok)m(en)3350 2550 y Fp([F)-8 b(unction])-3599 b Fh(OM_uint32)55 b (gss_process_context_to)q(ken)d Fg(\()p Ff(OM)p 2221 2550 28 4 v 40 w(uin)m(t32)32 b(*)565 2659 y Fe(minor_status)p Ff(,)i(const)d(gss)p 1609 2659 V 40 w(ctx)p 1772 2659 V 41 w(id)p 1889 2659 V 40 w(t)g Fe(context_handle)p Ff(,)j(const)d(gss)p 3137 2659 V 40 w(bu\013er)p 3408 2659 V 39 w(t)565 2769 y Fe(token_buffer)p Fg(\))390 2879 y Ff(minor)p 629 2879 V 40 w(status)t Fp(:)40 b(\(In)m(teger,)32 b(mo)s(dify\))e(Implemen)m(tation)i(sp)s(eci\014c)e(status)h(co)s(de.) 390 3025 y Ff(con)m(text)p 687 3025 V 42 w(handle)5 b Fp(:)43 b(\(gss)p 1217 3025 V 41 w(ctx)p 1381 3025 V 41 w(id)p 1498 3025 V 39 w(t,)33 b(read\))f(Con)m(text)h(handle)f(of)g (con)m(text)i(on)e(whic)m(h)f(tok)m(en)i(is)f(to)390 3135 y(b)s(e)e(pro)s(cessed)390 3282 y Ff(tok)m(en)p 612 3282 V 41 w(bu\013er)7 b Fp(:)39 b(\(bu\013er,)30 b(opaque,)h(read\))g(T)-8 b(ok)m(en)31 b(to)g(pro)s(cess.)390 3429 y(Pro)m(vides)f(a)g(w)m(a)m(y)h(to)g(pass)e(an)h(async)m(hronous)f (tok)m(en)i(to)f(the)g(securit)m(y)h(service.)41 b(Most)31 b(con)m(text-)390 3538 y(lev)m(el)46 b(tok)m(ens)f(are)g(emitted)g(and) e(pro)s(cessed)h(sync)m(hronously)f(b)m(y)h(gss)p 2899 3538 V 40 w(init)p 3075 3538 V 41 w(sec)p 3232 3538 V 41 w(con)m(text)i(and)390 3648 y(gss)p 513 3648 V 40 w(accept)p 804 3648 V 42 w(sec)p 962 3648 V 40 w(con)m(text,)33 b(and)c(the)i(application)g(is)g(informed)e(as)h(to)h(whether)f (further)f(tok)m(ens)390 3758 y(are)35 b(exp)s(ected)f(b)m(y)g(the)h (GSS)p 1398 3758 V 39 w(C)p 1503 3758 V 40 w(CONTINUE)p 2045 3758 V 39 w(NEEDED)g(ma)5 b(jor)34 b(status)g(bit.)52 b(Occasionally)-8 b(,)390 3867 y(a)30 b(mec)m(hanism)g(ma)m(y)g(need)f (to)i(emit)f(a)g(con)m(text-lev)m(el)j(tok)m(en)e(at)f(a)g(p)s(oin)m(t) g(when)e(the)i(p)s(eer)f(en)m(tit)m(y)390 3977 y(is)e(not)g(exp)s (ecting)g(a)h(tok)m(en.)40 b(F)-8 b(or)28 b(example,)g(the)f (initiator's)i(\014nal)d(call)i(to)g(gss)p 3090 3977 V 40 w(init)p 3266 3977 V 40 w(sec)p 3422 3977 V 41 w(con)m(text)390 4086 y(ma)m(y)41 b(emit)h(a)f(tok)m(en)h(and)e(return)g(a)h(status)g (of)g(GSS)p 2293 4086 V 40 w(S)p 2384 4086 V 39 w(COMPLETE,)f(but)g (the)h(acceptor's)390 4196 y(call)48 b(to)g(gss)p 824 4196 V 41 w(accept)p 1116 4196 V 41 w(sec)p 1273 4196 V 41 w(con)m(text)h(ma)m(y)e(fail.)92 b(The)47 b(acceptor's)i(mec)m (hanism)e(ma)m(y)h(wish)e(to)390 4306 y(send)h(a)h(tok)m(en)h(con)m (taining)g(an)e(error)h(indication)g(to)h(the)e(initiator,)54 b(but)47 b(the)h(initiator)h(is)390 4415 y(not)38 b(exp)s(ecting)g(a)g (tok)m(en)h(at)f(this)f(p)s(oin)m(t,)j(b)s(elieving)e(that)g(the)g(con) m(text)i(is)d(fully)g(established.)390 4525 y(Gss)p 539 4525 V 40 w(pro)s(cess)p 866 4525 V 40 w(con)m(text)p 1197 4525 V 42 w(tok)m(en)31 b(pro)m(vides)f(a)g(w)m(a)m(y)i(to)e(pass) g(suc)m(h)g(a)g(tok)m(en)i(to)e(the)h(mec)m(hanism)f(at)390 4634 y(an)m(y)h(time.)390 4781 y(Return)f(v)-5 b(alue:)390 4928 y Fj(GSS_S_COMPLETE)p Fp(:)37 b(Successful)30 b(completion.)390 5075 y Fj(GSS_S_DEFECTIVE_TOKEN)p Fp(:)38 b(Indicates)33 b(that)f(consistency)h(c)m(hec)m(ks)g(p)s(erformed)e(on)h(the)g(tok)m (en)390 5184 y(failed.)390 5331 y Fj(GSS_S_NO_CONTEXT)p Fp(:)k(The)30 b(con)m(text)p 1703 5331 V 42 w(handle)g(did)g(not)g (refer)g(to)h(a)g(v)-5 b(alid)31 b(con)m(text.)p eop end %%Page: 37 41 TeXDict begin 37 40 bop 150 -116 a Fp(Chapter)30 b(3:)41 b(Standard)29 b(GSS)h(API)2284 b(37)150 299 y Fi(gss)p 316 299 37 5 v 55 w(con)m(text)p 769 299 V 53 w(time)3350 500 y Fp([F)-8 b(unction])-3599 b Fh(OM_uint32)55 b(gss_context_time)50 b Fg(\()p Ff(OM)p 1750 500 28 4 v 41 w(uin)m(t32)31 b(*)g Fe(minor_status)p Ff(,)j(const)565 610 y(gss)p 688 610 V 40 w(ctx)p 851 610 V 41 w(id)p 968 610 V 40 w(t)c Fe(context_handle)p Ff(,)35 b(OM)p 2015 610 V 40 w(uin)m(t32)d(*)e Fe(time_rec)p Fg(\))390 719 y Ff(minor)p 629 719 V 40 w(status)t Fp(:)40 b(\(In)m(teger,)32 b(mo)s(dify\))e(Implemen)m(tation)i(sp)s(eci\014c)e (status)h(co)s(de.)390 858 y Ff(con)m(text)p 687 858 V 42 w(handle)5 b Fp(:)40 b(\(gss)p 1214 858 V 41 w(ctx)p 1378 858 V 41 w(id)p 1495 858 V 39 w(t,)31 b(read\))g(Iden)m(ti\014es)f (the)h(con)m(text)h(to)f(b)s(e)f(in)m(terrogated.)390 997 y Ff(time)p 572 997 V 41 w(rec)6 b Fp(:)40 b(\(In)m(teger,)32 b(mo)s(dify\))d(Num)m(b)s(er)g(of)h(seconds)f(that)i(the)f(con)m(text)i (will)e(remain)g(v)-5 b(alid.)40 b(If)390 1106 y(the)31 b(con)m(text)h(has)e(already)h(expired,)f(zero)h(will)g(b)s(e)f (returned.)390 1245 y(Determines)h(the)g(n)m(um)m(b)s(er)e(of)h (seconds)h(for)f(whic)m(h)g(the)h(sp)s(eci\014ed)e(con)m(text)j(will)f (remain)f(v)-5 b(alid.)390 1384 y(Return)30 b(v)-5 b(alue:)390 1523 y Fj(GSS_S_COMPLETE)p Fp(:)37 b(Successful)30 b(completion.)390 1662 y Fj(GSS_S_CONTEXT_EXPIRED)p Fp(:)35 b(The)30 b(con)m(text)i(has)e (already)h(expired.)390 1801 y Fj(GSS_S_NO_CONTEXT)p Fp(:)36 b(The)30 b(con)m(text)p 1703 1801 V 42 w(handle)g(parameter)h (did)e(not)i(iden)m(tify)g(a)g(v)-5 b(alid)30 b(con)m(text)150 2004 y Fi(gss)p 316 2004 37 5 v 55 w(inquire)p 746 2004 V 55 w(con)m(text)3350 2205 y Fp([F)-8 b(unction])-3599 b Fh(OM_uint32)55 b(gss_inquire_context)c Fg(\()p Ff(OM)p 1907 2205 28 4 v 41 w(uin)m(t32)31 b(*)g Fe(minor_status)p Ff(,)j(const)565 2315 y(gss)p 688 2315 V 40 w(ctx)p 851 2315 V 41 w(id)p 968 2315 V 40 w(t)c Fe(context_handle)p Ff(,)35 b(gss)p 1978 2315 V 40 w(name)p 2230 2315 V 41 w(t)30 b(*)h Fe(src_name)p Ff(,)i(gss)p 3003 2315 V 40 w(name)p 3255 2315 V 40 w(t)e(*)565 2425 y Fe(targ_name)p Ff(,)i(OM)p 1251 2425 V 40 w(uin)m(t32)f(*)e Fe(lifetime_rec)p Ff(,)35 b(gss)p 2448 2425 V 40 w(OID)30 b(*)h Fe(mech_type)p Ff(,)i(OM)p 3447 2425 V 40 w(uin)m(t32)565 2534 y(*)e Fe(ctx_flags)p Ff(,)i(in)m(t)e(*)g Fe(locally_initiated)p Ff(,)36 b(in)m(t)30 b(*)h Fe(open)p Fg(\))390 2644 y Ff(minor)p 629 2644 V 40 w(status)t Fp(:)40 b(\(In)m(teger,)32 b(mo)s(dify\))e(Mec)m(hanism)h(sp)s(eci\014c)g(status)f(co)s(de.)390 2783 y Ff(con)m(text)p 687 2783 V 42 w(handle)5 b Fp(:)40 b(\(gss)p 1214 2783 V 41 w(ctx)p 1378 2783 V 41 w(id)p 1495 2783 V 39 w(t,)31 b(read\))g(A)f(handle)g(that)h(refers)f(to)h (the)g(securit)m(y)g(con)m(text.)390 2922 y Ff(src)p 508 2922 V 40 w(name)5 b Fp(:)49 b(\(gss)p 991 2922 V 40 w(name)p 1243 2922 V 40 w(t,)36 b(mo)s(dify)-8 b(,)36 b(optional\))g(The)e(name)g(of)h(the)f(con)m(text)j(initiator.)54 b(If)34 b(the)390 3031 y(con)m(text)25 b(w)m(as)e(established)g(using)f (anon)m(ymous)h(authen)m(tication,)k(and)22 b(if)g(the)h(application)i (in)m(v)m(ok-)390 3141 y(ing)h(gss)p 660 3141 V 40 w(inquire)p 976 3141 V 39 w(con)m(text)i(is)e(the)f(con)m(text)j(acceptor,)g(an)e (anon)m(ymous)f(name)h(will)g(b)s(e)f(returned.)390 3250 y(Storage)33 b(asso)s(ciated)g(with)f(this)g(name)g(m)m(ust)f(b)s(e)h (freed)f(b)m(y)h(the)g(application)h(after)f(use)g(with)g(a)390 3360 y(call)g(to)f(gss)p 791 3360 V 40 w(release)p 1093 3360 V 41 w(name\(\).)42 b(Sp)s(ecify)29 b(NULL)i(if)f(not)h(required.) 390 3499 y Ff(targ)p 557 3499 V 41 w(name)5 b Fp(:)36 b(\(gss)p 1028 3499 V 40 w(name)p 1280 3499 V 40 w(t,)24 b(mo)s(dify)-8 b(,)22 b(optional\))g(The)e(name)h(of)g(the)f(con)m (text)j(acceptor.)39 b(Storage)390 3608 y(asso)s(ciated)e(with)d(this)h (name)h(m)m(ust)f(b)s(e)f(freed)h(b)m(y)g(the)g(application)i(after)f (use)e(with)h(a)h(call)g(to)390 3718 y(gss)p 513 3718 V 40 w(release)p 815 3718 V 42 w(name\(\).)74 b(If)40 b(the)i(con)m(text)h(acceptor)g(did)d(not)h(authen)m(ticate)j(itself,)h (and)c(if)g(the)390 3828 y(initiator)33 b(did)e(not)h(sp)s(ecify)g(a)g (target)i(name)e(in)f(its)h(call)i(to)e(gss)p 2599 3828 V 40 w(init)p 2775 3828 V 41 w(sec)p 2932 3828 V 40 w(con)m(text\(\),)j (the)d(v)-5 b(alue)390 3937 y(GSS)p 569 3937 V 39 w(C)p 674 3937 V 40 w(NO)p 853 3937 V 40 w(NAME)31 b(will)f(b)s(e)g (returned.)40 b(Sp)s(ecify)29 b(NULL)i(if)f(not)h(required.)390 4076 y Ff(lifetime)p 690 4076 V 41 w(rec)6 b Fp(:)39 b(\(In)m(teger,)28 b(mo)s(dify)-8 b(,)27 b(optional\))h(The)d(n)m(um)m (b)s(er)g(of)h(seconds)g(for)g(whic)m(h)g(the)g(con)m(text)390 4186 y(will)h(remain)f(v)-5 b(alid.)40 b(If)26 b(the)h(con)m(text)i (has)d(expired,)h(this)g(parameter)g(will)g(b)s(e)f(set)h(to)g(zero.)41 b(If)26 b(the)390 4295 y(implemen)m(tation)h(do)s(es)f(not)g(supp)s (ort)e(con)m(text)k(expiration,)g(the)e(v)-5 b(alue)26 b(GSS)p 3058 4295 V 39 w(C)p 3163 4295 V 40 w(INDEFINITE)390 4405 y(will)31 b(b)s(e)e(returned.)40 b(Sp)s(ecify)30 b(NULL)g(if)g(not)h(required.)390 4544 y Ff(mec)m(h)p 600 4544 V 41 w(t)m(yp)s(e)5 b Fp(:)44 b(\(gss)p 1041 4544 V 40 w(OID,)32 b(mo)s(dify)-8 b(,)32 b(optional\))i(The)d(securit) m(y)i(mec)m(hanism)f(pro)m(viding)g(the)g(con-)390 4653 y(text.)44 b(The)31 b(returned)f(OID)h(will)h(b)s(e)e(a)i(p)s(oin)m (ter)f(to)h(static)h(storage)g(that)f(should)e(b)s(e)g(treated)j(as)390 4763 y(read-only)c(b)m(y)f(the)g(application;)j(in)c(particular)i(the)f (application)i(should)d(not)i(attempt)g(to)g(free)390 4872 y(it.)41 b(Sp)s(ecify)30 b(NULL)g(if)h(not)f(required.)390 5011 y Ff(ctx)p 519 5011 V 41 w(\015ags)t Fp(:)56 b(\(bit-mask,)40 b(mo)s(dify)-8 b(,)40 b(optional\))f(Con)m(tains)g(v)-5 b(arious)38 b(indep)s(enden)m(t)e(\015ags,)41 b(eac)m(h)e(of)390 5121 y(whic)m(h)34 b(indicates)h(that)g(the)g(con)m(text)h(supp)s(orts) d(\(or)i(is)f(exp)s(ected)h(to)g(supp)s(ort,)f(if)g(ctx)p 3430 5121 V 41 w(op)s(en)g(is)390 5230 y(false\))41 b(a)f(sp)s (eci\014c)g(service)g(option.)70 b(If)39 b(not)h(needed,)i(sp)s(ecify)e (NULL.)g(Sym)m(b)s(olic)g(names)g(are)390 5340 y(pro)m(vided)c(for)g (eac)m(h)h(\015ag,)h(and)e(the)g(sym)m(b)s(olic)h(names)f(corresp)s (onding)f(to)i(the)f(required)g(\015ags)p eop end %%Page: 38 42 TeXDict begin 38 41 bop 150 -116 a Fp(Chapter)30 b(3:)41 b(Standard)29 b(GSS)h(API)2284 b(38)390 299 y(should)30 b(b)s(e)h(logically-ANDed)k(with)c(the)h(ret)p 1971 299 28 4 v 40 w(\015ags)g(v)-5 b(alue)32 b(to)g(test)g(whether)f(a)h(giv)m (en)g(option)g(is)390 408 y(supp)s(orted)d(b)m(y)h(the)g(con)m(text.)43 b(See)31 b(b)s(elo)m(w)f(for)g(the)h(\015ags.)390 550 y Ff(lo)s(cally)p 652 550 V 42 w(initiated)t Fp(:)36 b(\(Bo)s(olean,)25 b(mo)s(dify\))20 b(Non-zero)h(if)g(the)f(in)m(v)m (oking)i(application)g(is)e(the)h(con)m(text)390 660 y(initiator.)42 b(Sp)s(ecify)30 b(NULL)g(if)g(not)h(required.)390 801 y Ff(op)s(en)p Fp(:)37 b(\(Bo)s(olean,)27 b(mo)s(dify\))d(Non-zero) h(if)f(the)h(con)m(text)h(is)e(fully)f(established;)k(Zero)d(if)g(a)h (con)m(text-)390 911 y(establishmen)m(t)45 b(tok)m(en)h(is)e(exp)s (ected)h(from)f(the)g(p)s(eer)g(application.)84 b(Sp)s(ecify)43 b(NULL)h(if)h(not)390 1021 y(required.)390 1162 y(Obtains)26 b(information)h(ab)s(out)f(a)h(securit)m(y)h(con)m(text.)41 b(The)26 b(caller)i(m)m(ust)f(already)g(ha)m(v)m(e)h(obtained)390 1272 y(a)c(handle)f(that)i(refers)e(to)i(the)f(con)m(text,)j(although)d (the)g(con)m(text)h(need)f(not)g(b)s(e)f(fully)g(established.)390 1413 y(The)30 b Fj(ctx_flags)e Fp(v)-5 b(alues:)870 1584 y Fj(GSS_C_DELEG_FLAG)945 1722 y Fn(\017)60 b Fp(T)-8 b(rue)28 b(-)h(Creden)m(tials)g(w)m(ere)g(delegated)h(from)e(the)g (initiator)i(to)g(the)e(acceptor.)945 1860 y Fn(\017)60 b Fp(F)-8 b(alse)32 b(-)f(No)g(creden)m(tials)g(w)m(ere)g(delegated.) 870 2026 y Fj(GSS_C_MUTUAL_FLAG)945 2164 y Fn(\017)60 b Fp(T)-8 b(rue)30 b(-)h(The)e(acceptor)j(w)m(as)f(authen)m(ticated)h (to)f(the)g(initiator.)945 2302 y Fn(\017)60 b Fp(F)-8 b(alse)32 b(-)f(The)f(acceptor)h(did)f(not)h(authen)m(ticate)h(itself.) 870 2469 y Fj(GSS_C_REPLAY_FLAG)945 2607 y Fn(\017)60 b Fp(T)-8 b(rue)30 b(-)h(repla)m(y)f(of)h(protected)g(messages)h(will)e (b)s(e)g(detected.)945 2745 y Fn(\017)60 b Fp(F)-8 b(alse)32 b(-)f(repla)m(y)m(ed)g(messages)g(will)g(not)g(b)s(e)e(detected.)870 2912 y Fj(GSS_C_SEQUENCE_FLAG)945 3050 y Fn(\017)60 b Fp(T)-8 b(rue)30 b(-)h(out-of-sequence)g(protected)h(messages)f(will)g (b)s(e)f(detected.)945 3188 y Fn(\017)60 b Fp(F)-8 b(alse)32 b(-)f(out-of-sequence)h(messages)f(will)g(not)f(b)s(e)g(detected.)870 3354 y Fj(GSS_C_CONF_FLAG)945 3492 y Fn(\017)60 b Fp(T)-8 b(rue)40 b(-)g(Con\014den)m(tialit)m(y)i(service)f(ma)m(y)g(b)s(e)f(in) m(v)m(ok)m(ed)i(b)m(y)e(calling)i(gss)p 3519 3492 V 40 w(wrap)1050 3602 y(routine.)945 3740 y Fn(\017)60 b Fp(F)-8 b(alse)33 b(-)e(No)h(con\014den)m(tialit)m(y)i(service)e(\(via)g(gss)p 2686 3740 V 40 w(wrap\))f(a)m(v)-5 b(ailable.)46 b(gss)p 3519 3740 V 40 w(wrap)1050 3850 y(will)38 b(pro)m(vide)f(message)i (encapsulation,)h(data-origin)f(authen)m(tication)h(and)1050 3959 y(in)m(tegrit)m(y)32 b(services)f(only)-8 b(.)870 4126 y Fj(GSS_C_INTEG_FLAG)945 4264 y Fn(\017)60 b Fp(T)-8 b(rue)27 b(-)h(In)m(tegrit)m(y)h(service)f(ma)m(y)g(b)s(e)f(in)m(v)m (ok)m(ed)i(b)m(y)e(calling)i(either)f(gss)p 3413 4264 V 40 w(get)p 3573 4264 V 42 w(mic)1050 4373 y(or)i(gss)p 1284 4373 V 41 w(wrap)f(routines.)945 4512 y Fn(\017)60 b Fp(F)-8 b(alse)32 b(-)f(P)m(er-message)h(in)m(tegrit)m(y)g(service)f (una)m(v)-5 b(ailable.)870 4678 y Fj(GSS_C_ANON_FLAG)945 4816 y Fn(\017)60 b Fp(T)-8 b(rue)34 b(-)i(The)e(initiator's)i(iden)m (tit)m(y)h(will)e(not)g(b)s(e)f(rev)m(ealed)i(to)g(the)f(acceptor.)1050 4926 y(The)i(src)p 1362 4926 V 40 w(name)h(parameter)g(\(if)g (requested\))g(con)m(tains)h(an)e(anon)m(ymous)h(in-)1050 5035 y(ternal)31 b(name.)945 5173 y Fn(\017)60 b Fp(F)-8 b(alse)32 b(-)f(The)f(initiator)h(has)f(b)s(een)g(authen)m(ticated)i (normally)-8 b(.)870 5340 y Fj(GSS_C_PROT_READY_FLAG)p eop end %%Page: 39 43 TeXDict begin 39 42 bop 150 -116 a Fp(Chapter)30 b(3:)41 b(Standard)29 b(GSS)h(API)2284 b(39)945 299 y Fn(\017)60 b Fp(T)-8 b(rue)66 b(-)h(Protection)h(services)f(\(as)g(sp)s(eci\014ed) f(b)m(y)h(the)f(states)i(of)f(the)1050 408 y(GSS)p 1229 408 28 4 v 39 w(C)p 1334 408 V 40 w(CONF)p 1638 408 V 40 w(FLA)m(G)33 b(and)e(GSS)p 2314 408 V 39 w(C)p 2419 408 V 40 w(INTEG)p 2759 408 V 40 w(FLA)m(G\))i(are)f(a)m(v)-5 b(ailable)34 b(for)1050 518 y(use.)945 649 y Fn(\017)60 b Fp(F)-8 b(alse)67 b(-)e(Protection)i(services)f(\(as)f(sp)s (eci\014ed)g(b)m(y)g(the)g(states)h(of)g(the)1050 759 y(GSS)p 1229 759 V 39 w(C)p 1334 759 V 40 w(CONF)p 1638 759 V 40 w(FLA)m(G)i(and)e(GSS)p 2384 759 V 39 w(C)p 2489 759 V 40 w(INTEG)p 2829 759 V 40 w(FLA)m(G\))i(are)g(a)m(v)-5 b(ailable)1050 868 y(only)32 b(if)h(the)f(con)m(text)i(is)e(fully)g (established)h(\(i.e.)47 b(if)32 b(the)h(op)s(en)e(parameter)i(is)1050 978 y(non-zero\).)870 1130 y Fj(GSS_C_TRANS_FLAG)945 1261 y Fn(\017)60 b Fp(T)-8 b(rue)39 b(-)h(The)f(resultan)m(t)h (securit)m(y)g(con)m(text)h(ma)m(y)f(b)s(e)f(transferred)f(to)j(other) 1050 1371 y(pro)s(cesses)30 b(via)h(a)g(call)h(to)f(gss)p 2069 1371 V 40 w(exp)s(ort)p 2367 1371 V 40 w(sec)p 2523 1371 V 40 w(con)m(text\(\).)945 1502 y Fn(\017)60 b Fp(F)-8 b(alse)32 b(-)f(The)f(securit)m(y)h(con)m(text)h(is)e(not)h (transferable.)390 1654 y(Return)f(v)-5 b(alue:)390 1785 y Fj(GSS_S_COMPLETE)p Fp(:)37 b(Successful)30 b(completion.)390 1916 y Fj(GSS_S_NO_CONTEXT)p Fp(:)36 b(The)30 b(referenced)g(con)m (text)j(could)d(not)h(b)s(e)e(accessed.)150 2108 y Fi(gss)p 316 2108 37 5 v 55 w(wrap)p 638 2108 V 54 w(size)p 885 2108 V 54 w(limit)3350 2298 y Fp([F)-8 b(unction])-3599 b Fh(OM_uint32)55 b(gss_wrap_size_limit)c Fg(\()p Ff(OM)p 1907 2298 28 4 v 41 w(uin)m(t32)31 b(*)g Fe(minor_status)p Ff(,)j(const)565 2408 y(gss)p 688 2408 V 40 w(ctx)p 851 2408 V 41 w(id)p 968 2408 V 40 w(t)c Fe(context_handle)p Ff(,)35 b(in)m(t)c Fe(conf_req_flag)p Ff(,)k(gss)p 2853 2408 V 40 w(qop)p 3037 2408 V 40 w(t)30 b Fe(qop_req)p Ff(,)565 2517 y(OM)p 725 2517 V 40 w(uin)m(t32)h Fe(req_output_size)p Ff(,)36 b(OM)p 2040 2517 V 40 w(uin)m(t32)31 b(*)g Fe(max_input_size)p Fg(\))390 2627 y Ff(minor)p 629 2627 V 40 w(status)t Fp(:)40 b(\(In)m(teger,)32 b(mo)s(dify\))e(Mec)m(hanism)h(sp)s (eci\014c)g(status)f(co)s(de.)390 2758 y Ff(con)m(text)p 687 2758 V 42 w(handle)5 b Fp(:)45 b(\(gss)p 1219 2758 V 40 w(ctx)p 1382 2758 V 41 w(id)p 1499 2758 V 40 w(t,)34 b(read\))e(A)h(handle)f(that)i(refers)e(to)h(the)g(securit)m(y)g(o)m(v) m(er)h(whic)m(h)390 2867 y(the)d(messages)g(will)g(b)s(e)e(sen)m(t.)390 2998 y Ff(conf)p 560 2998 V 40 w(req)p 724 2998 V 40 w(\015ag)8 b Fp(:)38 b(\(Bo)s(olean,)27 b(read\))e(Indicates)g(whether) e(gss)p 2453 2998 V 41 w(wrap)g(will)i(b)s(e)e(ask)m(ed)i(to)g(apply)f (con-)390 3108 y(\014den)m(tialit)m(y)31 b(protection)f(in)f(addition)h (to)g(in)m(tegrit)m(y)h(protection.)42 b(See)29 b(the)h(routine)f (description)390 3218 y(for)h(gss)p 652 3218 V 40 w(wrap)g(for)g(more)h (details.)390 3349 y Ff(qop)p 540 3349 V 40 w(req)r Fp(:)64 b(\(gss)p 947 3349 V 41 w(qop)p 1132 3349 V 40 w(t,)45 b(read\))e(Indicates)f(the)h(lev)m(el)g(of)g(protection)g(that)g(gss)p 3200 3349 V 40 w(wrap)e(will)i(b)s(e)390 3458 y(ask)m(ed)31 b(to)g(pro)m(vide.)41 b(See)31 b(the)f(routine)g(description)h(for)f (gss)p 2467 3458 V 40 w(wrap)g(for)g(more)g(details.)390 3589 y Ff(req)p 520 3589 V 40 w(output)p 828 3589 V 40 w(size)5 b Fp(:)64 b(\(In)m(teger,)45 b(read\))d(The)f(desired)g(maxim) m(um)h(size)g(for)f(tok)m(ens)i(emitted)f(b)m(y)390 3699 y(gss)p 513 3699 V 40 w(wrap.)390 3830 y Ff(max)p 565 3830 V 40 w(input)p 818 3830 V 39 w(size)5 b Fp(:)62 b(\(In)m(teger,)45 b(mo)s(dify\))40 b(The)g(maxim)m(um)g(input)g (message)h(size)g(that)h(ma)m(y)f(b)s(e)390 3939 y(presen)m(ted)27 b(to)i(gss)p 1026 3939 V 40 w(wrap)e(in)g(order)g(to)h(guaran)m(tee)h (that)f(the)g(emitted)h(tok)m(en)f(shall)g(b)s(e)f(no)g(larger)390 4049 y(than)j(req)p 732 4049 V 40 w(output)p 1040 4049 V 40 w(size)h(b)m(ytes.)390 4180 y(Allo)m(ws)k(an)e(application)i(to)f (determine)g(the)g(maxim)m(um)f(message)i(size)f(that,)h(if)f(presen)m (ted)f(to)390 4289 y(gss)p 513 4289 V 40 w(wrap)22 b(with)g(the)h(same) g(conf)p 1505 4289 V 40 w(req)p 1669 4289 V 40 w(\015ag)g(and)f(qop)p 2186 4289 V 40 w(req)g(parameters,)j(will)e(result)g(in)f(an)g(output) 390 4399 y(tok)m(en)31 b(con)m(taining)h(no)f(more)f(than)g(req)p 1775 4399 V 40 w(output)p 2083 4399 V 40 w(size)h(b)m(ytes.)390 4530 y(This)37 b(call)i(is)g(in)m(tended)e(for)h(use)g(b)m(y)g (applications)h(that)g(comm)m(unicate)g(o)m(v)m(er)h(proto)s(cols)e (that)390 4640 y(imp)s(ose)g(a)h(maxim)m(um)f(message)h(size.)66 b(It)38 b(enables)h(the)f(application)i(to)f(fragmen)m(t)g(messages)390 4749 y(prior)30 b(to)h(applying)f(protection.)390 4880 y(GSS-API)e(implemen)m(tations)j(are)e(recommended)g(but)f(not)i (required)e(to)i(detect)g(in)m(v)-5 b(alid)30 b(QOP)390 4990 y(v)-5 b(alues)26 b(when)g(gss)p 1013 4990 V 40 w(wrap)p 1251 4990 V 39 w(size)p 1431 4990 V 41 w(limit\(\))i(is)e (called.)40 b(This)26 b(routine)g(guaran)m(tees)h(only)g(a)f(maxim)m (um)390 5099 y(message)31 b(size,)h(not)f(the)f(a)m(v)-5 b(ailabilit)m(y)34 b(of)c(sp)s(eci\014c)g(QOP)g(v)-5 b(alues)31 b(for)f(message)h(protection.)390 5230 y(Successful)36 b(completion)j(of)e(this)g(call)h(do)s(es)f(not)g(guaran)m(tee)i(that)e (gss)p 2893 5230 V 41 w(wrap)f(will)h(b)s(e)g(able)g(to)390 5340 y(protect)f(a)f(message)g(of)g(length)g(max)p 1706 5340 V 40 w(input)p 1959 5340 V 39 w(size)h(b)m(ytes,)g(since)f(this)g (abilit)m(y)h(ma)m(y)f(dep)s(end)e(on)p eop end %%Page: 40 44 TeXDict begin 40 43 bop 150 -116 a Fp(Chapter)30 b(3:)41 b(Standard)29 b(GSS)h(API)2284 b(40)390 299 y(the)41 b(a)m(v)-5 b(ailabilit)m(y)43 b(of)e(system)g(resources)f(at)h(the)g (time)g(that)g(gss)p 2692 299 28 4 v 40 w(wrap)f(is)g(called.)73 b(Ho)m(w)m(ev)m(er,)390 408 y(if)37 b(the)h(implemen)m(tation)g(itself) g(imp)s(oses)f(an)g(upp)s(er)f(limit)i(on)f(the)g(length)h(of)f (messages)h(that)390 518 y(ma)m(y)k(b)s(e)e(pro)s(cessed)h(b)m(y)g(gss) p 1411 518 V 40 w(wrap,)i(the)f(implemen)m(tation)g(should)f(not)g (return)f(a)i(v)-5 b(alue)41 b(via)390 628 y(max)p 565 628 V 40 w(input)p 818 628 V 39 w(b)m(ytes)31 b(that)g(is)g(greater)g (than)f(this)h(length.)390 761 y(Return)f(v)-5 b(alue:)390 895 y Fj(GSS_S_COMPLETE)p Fp(:)37 b(Successful)30 b(completion.)390 1029 y Fj(GSS_S_NO_CONTEXT)p Fp(:)36 b(The)30 b(referenced)g(con)m (text)j(could)d(not)h(b)s(e)e(accessed.)390 1162 y Fj (GSS_S_CONTEXT_EXPIRED)p Fp(:)35 b(The)30 b(con)m(text)i(has)e (expired.)390 1296 y Fj(GSS_S_BAD_QOP)p Fp(:)37 b(The)30 b(sp)s(eci\014ed)g(QOP)f(is)i(not)f(supp)s(orted)f(b)m(y)h(the)h(mec)m (hanism.)150 1494 y Fi(gss)p 316 1494 37 5 v 55 w(exp)s(ort)p 722 1494 V 55 w(sec)p 936 1494 V 54 w(con)m(text)3350 1689 y Fp([F)-8 b(unction])-3599 b Fh(OM_uint32)55 b (gss_export_sec_context)d Fg(\()p Ff(OM)p 2064 1689 28 4 v 41 w(uin)m(t32)31 b(*)g Fe(minor_status)p Ff(,)565 1798 y(gss)p 688 1798 V 40 w(ctx)p 851 1798 V 41 w(id)p 968 1798 V 40 w(t)f(*)h Fe(context_handle)p Ff(,)k(gss)p 2054 1798 V 40 w(bu\013er)p 2325 1798 V 39 w(t)c Fe(interprocess_token) p Fg(\))390 1908 y Ff(minor)p 629 1908 V 40 w(status)t Fp(:)40 b(\(In)m(teger,)32 b(mo)s(dify\))e(Mec)m(hanism)h(sp)s (eci\014c)g(status)f(co)s(de.)390 2042 y Ff(con)m(text)p 687 2042 V 42 w(handle)5 b Fp(:)70 b(\(gss)p 1244 2042 V 40 w(ctx)p 1407 2042 V 41 w(id)p 1524 2042 V 40 w(t,)49 b(mo)s(dify\))c(Con)m(text)h(handle)e(iden)m(tifying)i(the)f(con)m (text)i(to)390 2151 y(transfer.)390 2285 y Ff(in)m(terpro)s(cess)p 867 2285 V 40 w(tok)m(en)p Fp(:)37 b(\(bu\013er,)22 b(opaque,)h(mo)s (dify\))d(T)-8 b(ok)m(en)21 b(to)g(b)s(e)f(transferred)f(to)i(target)h (pro)s(cess.)390 2394 y(Storage)33 b(asso)s(ciated)g(with)e(this)g(tok) m(en)i(m)m(ust)e(b)s(e)g(freed)g(b)m(y)h(the)f(application)i(after)f (use)f(with)h(a)390 2504 y(call)g(to)f(gss)p 791 2504 V 40 w(release)p 1093 2504 V 41 w(bu\013er\(\).)390 2638 y(Pro)m(vided)24 b(to)h(supp)s(ort)d(the)i(sharing)g(of)g(w)m(ork)g(b)s (et)m(w)m(een)g(m)m(ultiple)h(pro)s(cesses.)38 b(This)24 b(routine)g(will)390 2747 y(t)m(ypically)39 b(b)s(e)d(used)h(b)m(y)g (the)g(con)m(text-acceptor,)43 b(in)36 b(an)h(application)i(where)d(a)i (single)f(pro)s(cess)390 2857 y(receiv)m(es)c(incoming)e(connection)i (requests)e(and)f(accepts)j(securit)m(y)e(con)m(texts)i(o)m(v)m(er)g (them,)e(then)390 2966 y(passes)h(the)g(established)h(con)m(text)g(to)g (one)g(or)f(more)g(other)g(pro)s(cesses)g(for)g(message)h(exc)m(hange.) 390 3076 y(gss)p 513 3076 V 40 w(exp)s(ort)p 811 3076 V 40 w(sec)p 967 3076 V 41 w(con)m(text\(\))i(deactiv)-5 b(ates)35 b(the)e(securit)m(y)g(con)m(text)i(for)d(the)h(calling)h(pro) s(cess)f(and)390 3186 y(creates)22 b(an)e(in)m(terpro)s(cess)g(tok)m (en)i(whic)m(h,)g(when)d(passed)h(to)h(gss)p 2536 3186 V 40 w(imp)s(ort)p 2847 3186 V 40 w(sec)p 3003 3186 V 41 w(con)m(text)h(in)e(another)390 3295 y(pro)s(cess,)27 b(will)f(re-activ)-5 b(ate)30 b(the)c(con)m(text)i(in)e(the)h(second)f (pro)s(cess.)39 b(Only)25 b(a)i(single)g(instan)m(tiation)390 3405 y(of)i(a)f(giv)m(en)i(con)m(text)g(ma)m(y)f(b)s(e)f(activ)m(e)j (at)e(an)m(y)g(one)g(time;)h(a)f(subsequen)m(t)e(attempt)j(b)m(y)e(a)h (con)m(text)390 3514 y(exp)s(orter)h(to)h(access)h(the)f(exp)s(orted)f (securit)m(y)h(con)m(text)h(will)f(fail.)390 3648 y(The)41 b(implemen)m(tation)i(ma)m(y)f(constrain)g(the)g(set)g(of)g(pro)s (cesses)f(b)m(y)h(whic)m(h)f(the)h(in)m(terpro)s(cess)390 3758 y(tok)m(en)d(ma)m(y)f(b)s(e)e(imp)s(orted,)j(either)f(as)g(a)f (function)h(of)f(lo)s(cal)i(securit)m(y)f(p)s(olicy)-8 b(,)40 b(or)e(as)f(a)h(result)390 3867 y(of)28 b(implemen)m(tation)h (decisions.)40 b(F)-8 b(or)28 b(example,)h(some)f(implemen)m(tations)h (ma)m(y)f(constrain)g(con-)390 3977 y(texts)g(to)g(b)s(e)f(passed)g (only)h(b)s(et)m(w)m(een)g(pro)s(cesses)f(that)h(run)e(under)g(the)h (same)h(accoun)m(t,)i(or)d(whic)m(h)390 4086 y(are)k(part)f(of)h(the)f (same)h(pro)s(cess)f(group.)390 4220 y(The)d(in)m(terpro)s(cess)h(tok)m (en)g(ma)m(y)h(con)m(tain)f(securit)m(y-sensitiv)m(e)i(information)e (\(for)g(example)g(cryp-)390 4330 y(tographic)e(k)m(eys\).)40 b(While)26 b(mec)m(hanisms)f(are)g(encouraged)h(to)f(either)h(a)m(v)m (oid)g(placing)g(suc)m(h)f(sensi-)390 4439 y(tiv)m(e)f(information)f (within)f(in)m(terpro)s(cess)g(tok)m(ens,)k(or)c(to)h(encrypt)f(the)h (tok)m(en)h(b)s(efore)e(returning)f(it)390 4549 y(to)31 b(the)f(application,)i(in)d(a)i(t)m(ypical)g(ob)5 b(ject-library)31 b(GSS-API)f(implemen)m(tation)h(this)f(ma)m(y)h(not)390 4658 y(b)s(e)j(p)s(ossible.)54 b(Th)m(us)34 b(the)h(application)h(m)m (ust)f(tak)m(e)h(care)g(to)g(protect)f(the)h(in)m(terpro)s(cess)f(tok)m (en,)390 4768 y(and)30 b(ensure)f(that)i(an)m(y)g(pro)s(cess)f(to)h (whic)m(h)f(the)h(tok)m(en)g(is)g(transferred)e(is)h(trust)m(w)m(orth)m (y)-8 b(.)390 4902 y(If)39 b(creation)i(of)e(the)h(in)m(terpro)s(cess)f (tok)m(en)h(is)g(successful,)h(the)f(implemen)m(tation)h(shall)e (deallo-)390 5011 y(cate)32 b(all)f(pro)s(cess-wide)e(resources)h(asso) s(ciated)i(with)e(the)g(securit)m(y)h(con)m(text,)h(and)d(set)i(the)f (con-)390 5121 y(text)p 554 5121 V 41 w(handle)37 b(to)h(GSS)p 1186 5121 V 39 w(C)p 1291 5121 V 40 w(NO)p 1470 5121 V 40 w(CONTEXT.)e(In)h(the)g(ev)m(en)m(t)i(of)f(an)f(error)g(that)h (mak)m(es)g(it)g(im-)390 5230 y(p)s(ossible)27 b(to)i(complete)g(the)f (exp)s(ort)f(of)h(the)g(securit)m(y)h(con)m(text,)h(the)e(implemen)m (tation)h(m)m(ust)f(not)390 5340 y(return)22 b(an)g(in)m(terpro)s(cess) h(tok)m(en,)j(and)c(should)g(striv)m(e)i(to)f(lea)m(v)m(e)j(the)d (securit)m(y)g(con)m(text)i(referenced)p eop end %%Page: 41 45 TeXDict begin 41 44 bop 150 -116 a Fp(Chapter)30 b(3:)41 b(Standard)29 b(GSS)h(API)2284 b(41)390 299 y(b)m(y)37 b(the)g(con)m(text)p 983 299 28 4 v 42 w(handle)g(parameter)g(un)m (touc)m(hed.)61 b(If)37 b(this)g(is)g(imp)s(ossible,)h(it)g(is)f(p)s (ermissible)390 408 y(for)32 b(the)g(implemen)m(tation)h(to)f(delete)i (the)e(securit)m(y)g(con)m(text,)i(pro)m(viding)e(it)g(also)h(sets)f (the)g(con-)390 518 y(text)p 554 518 V 41 w(handle)e(parameter)h(to)g (GSS)p 1607 518 V 39 w(C)p 1712 518 V 40 w(NO)p 1891 518 V 40 w(CONTEXT.)390 651 y(Return)f(v)-5 b(alue:)390 783 y Fj(GSS_S_COMPLETE)p Fp(:)37 b(Successful)30 b(completion.)390 915 y Fj(GSS_S_CONTEXT_EXPIRED)p Fp(:)35 b(The)30 b(con)m(text)i(has)e (expired.)390 1048 y Fj(GSS_S_NO_CONTEXT)p Fp(:)36 b(The)30 b(con)m(text)i(w)m(as)f(in)m(v)-5 b(alid.)390 1180 y Fj(GSS_S_UNAVAILABLE)p Fp(:)36 b(The)30 b(op)s(eration)h(is)f(not)h (supp)s(orted.)150 1376 y Fi(gss)p 316 1376 37 5 v 55 w(imp)s(ort)p 737 1376 V 55 w(sec)p 951 1376 V 54 w(con)m(text)3350 1568 y Fp([F)-8 b(unction])-3599 b Fh(OM_uint32)55 b (gss_import_sec_context)d Fg(\()p Ff(OM)p 2064 1568 28 4 v 41 w(uin)m(t32)31 b(*)g Fe(minor_status)p Ff(,)565 1678 y(const)g(gss)p 926 1678 V 40 w(bu\013er)p 1197 1678 V 39 w(t)g Fe(interprocess_token)p Ff(,)36 b(gss)p 2416 1678 V 40 w(ctx)p 2579 1678 V 41 w(id)p 2696 1678 V 40 w(t)30 b(*)h Fe(context_handle)p Fg(\))390 1787 y Ff(minor)p 629 1787 V 40 w(status)t Fp(:)40 b(\(In)m(teger,)32 b(mo)s(dify\))e(Mec)m(hanism)h(sp)s(eci\014c)g(status)f(co)s(de.)390 1920 y Ff(in)m(terpro)s(cess)p 867 1920 V 40 w(tok)m(en)p Fp(:)42 b(\(bu\013er,)30 b(opaque,)h(mo)s(dify\))f(T)-8 b(ok)m(en)31 b(receiv)m(ed)h(from)e(exp)s(orting)g(pro)s(cess)390 2052 y Ff(con)m(text)p 687 2052 V 42 w(handle)5 b Fp(:)40 b(\(gss)p 1214 2052 V 41 w(ctx)p 1378 2052 V 41 w(id)p 1495 2052 V 39 w(t,)31 b(mo)s(dify\))f(Con)m(text)h(handle)f(of)h (newly)f(reactiv)-5 b(ated)32 b(con)m(text.)390 2162 y(Resources)39 b(asso)s(ciated)h(with)e(this)g(con)m(text)j(handle)d(m) m(ust)g(b)s(e)g(released)h(b)m(y)g(the)g(application)390 2272 y(after)31 b(use)f(with)g(a)h(call)g(to)h(gss)p 1446 2272 V 40 w(delete)p 1717 2272 V 41 w(sec)p 1874 2272 V 41 w(con)m(text\(\).)390 2404 y(Allo)m(ws)27 b(a)f(pro)s(cess)f (to)h(imp)s(ort)f(a)h(securit)m(y)g(con)m(text)i(established)d(b)m(y)h (another)g(pro)s(cess.)38 b(A)26 b(giv)m(en)390 2514 y(in)m(terpro)s(cess)31 b(tok)m(en)g(ma)m(y)g(b)s(e)f(imp)s(orted)f (only)i(once.)41 b(See)31 b(gss)p 2578 2514 V 40 w(exp)s(ort)p 2876 2514 V 40 w(sec)p 3032 2514 V 41 w(con)m(text.)390 2646 y(Return)f(v)-5 b(alue:)390 2778 y Fj(GSS_S_COMPLETE)p Fp(:)37 b(Successful)30 b(completion.)390 2911 y Fj(GSS_S_NO_CONTEXT)p Fp(:)36 b(The)30 b(tok)m(en)i(did)d(not)i(con)m(tain)h(a)e(v)-5 b(alid)31 b(con)m(text)h(reference.)390 3043 y Fj (GSS_S_DEFECTIVE_TOKEN)p Fp(:)j(The)30 b(tok)m(en)h(w)m(as)g(in)m(v)-5 b(alid.)390 3176 y Fj(GSS_S_UNAVAILABLE)p Fp(:)36 b(The)30 b(op)s(eration)h(is)f(una)m(v)-5 b(ailable.)390 3308 y Fj(GSS_S_UNAUTHORIZED)p Fp(:)32 b(Lo)s(cal)25 b(p)s(olicy)f(prev)m (en)m(ts)g(the)g(imp)s(ort)f(of)h(this)f(con)m(text)j(b)m(y)d(the)h (curren)m(t)390 3418 y(pro)s(cess.)150 3646 y Fo(3.7)68 b(P)l(er-Message)46 b(Routines)293 3806 y Fj(GSS-API)g(Per-message)f (Routines)293 4025 y(Routine)1191 b(Function)293 4134 y(-------)g(--------)293 4244 y(gss_get_mic)999 b(Calculate)46 b(a)h(cryptographic)d(message)1820 4354 y(integrity)i(code)g(\(MIC\))h (for)g(a)1820 4463 y(message;)f(integrity)f(service.)293 4573 y(gss_verify_mic)855 b(Check)47 b(a)g(MIC)g(against)f(a)h (message;)1820 4682 y(verify)g(integrity)e(of)i(a)g(received)1820 4792 y(message.)293 4902 y(gss_wrap)1143 b(Attach)47 b(a)g(MIC)g(to)g(a)h(message,)d(and)1820 5011 y(optionally)g(encrypt)h (the)h(message)1820 5121 y(content.)1820 5230 y(confidentiality)d (service)293 5340 y(gss_unwrap)1047 b(Verify)47 b(a)g(message)f(with)g (attached)p eop end %%Page: 42 46 TeXDict begin 42 45 bop 150 -116 a Fp(Chapter)30 b(3:)41 b(Standard)29 b(GSS)h(API)2284 b(42)1820 299 y Fj(MIC,)47 b(and)g(decrypt)f(message)g(content)1820 408 y(if)i(necessary.)150 610 y Fi(gss)p 316 610 37 5 v 55 w(get)p 536 610 V 54 w(mic)3350 809 y Fp([F)-8 b(unction])-3599 b Fh(OM_uint32)55 b(gss_get_mic)49 b Fg(\()p Ff(OM)p 1489 809 28 4 v 40 w(uin)m(t32)32 b(*)e Fe(minor_status)p Ff(,)k(const)565 918 y(gss)p 688 918 V 40 w(ctx)p 851 918 V 41 w(id)p 968 918 V 40 w(t)c Fe(context_handle)p Ff(,)35 b(gss)p 1978 918 V 40 w(qop)p 2162 918 V 40 w(t)c Fe(qop_req)p Ff(,)i(const)e(gss)p 3045 918 V 40 w(bu\013er)p 3316 918 V 39 w(t)565 1028 y Fe(message_buffer)p Ff(,)k(gss)p 1476 1028 V 40 w(bu\013er)p 1747 1028 V 39 w(t)c Fe(message_token)p Fg(\))390 1137 y Ff(minor)p 629 1137 V 40 w(status)t Fp(:)40 b(\(In)m(teger,)32 b(mo)s(dify\))e(Mec)m(hanism)h(sp)s (eci\014c)g(status)f(co)s(de.)390 1274 y Ff(con)m(text)p 687 1274 V 42 w(handle)5 b Fp(:)40 b(\(gss)p 1214 1274 V 40 w(ctx)p 1377 1274 V 41 w(id)p 1494 1274 V 40 w(t,)30 b(read\))f(Iden)m(ti\014es)h(the)f(con)m(text)i(on)f(whic)m(h)f(the)g (message)i(will)390 1384 y(b)s(e)f(sen)m(t.)390 1520 y Ff(qop)p 540 1520 V 40 w(req)r Fp(:)101 b(\(gss)p 984 1520 V 41 w(qop)p 1169 1520 V 40 w(t,)69 b(read,)f(optional\))62 b(Sp)s(eci\014es)e(requested)h(qualit)m(y)h(of)e(protection.)390 1630 y(Callers)50 b(are)g(encouraged,)55 b(on)50 b(p)s(ortabilit)m(y)g (grounds,)k(to)c(accept)h(the)f(default)g(qualit)m(y)h(of)390 1739 y(protection)37 b(o\013ered)e(b)m(y)h(the)f(c)m(hosen)h(mec)m (hanism,)h(whic)m(h)f(ma)m(y)g(b)s(e)e(requested)i(b)m(y)f(sp)s (ecifying)390 1849 y(GSS)p 569 1849 V 39 w(C)p 674 1849 V 40 w(QOP)p 918 1849 V 39 w(DEF)-10 b(A)m(UL)i(T)36 b(for)f(this)f(parameter.)54 b(If)35 b(an)f(unsupp)s(orted)e (protection)k(strength)390 1959 y(is)30 b(requested,)h(gss)p 1037 1959 V 40 w(get)p 1197 1959 V 41 w(mic)g(will)g(return)e(a)i(ma)5 b(jor)p 2171 1959 V 40 w(status)31 b(of)f(GSS)p 2756 1959 V 40 w(S)p 2847 1959 V 39 w(BAD)p 3087 1959 V 41 w(QOP)-8 b(.)390 2095 y Ff(message)p 714 2095 V 41 w(bu\013er)7 b Fp(:)39 b(\(bu\013er,)30 b(opaque,)h(read\))g(Message)h(to)f(b)s(e)f (protected.)390 2232 y Ff(message)p 714 2232 V 41 w(tok)m(en)p Fp(:)96 b(\(bu\013er,)64 b(opaque,)h(mo)s(dify\))57 b(Bu\013er)h(to)g (receiv)m(e)h(tok)m(en.)124 b(The)57 b(appli-)390 2341 y(cation)62 b(m)m(ust)f(free)f(storage)j(asso)s(ciated)f(with)e(this)h (bu\013er)e(after)i(use)g(with)f(a)h(call)h(to)390 2451 y(gss)p 513 2451 V 40 w(release)p 815 2451 V 42 w(bu\013er\(\).)390 2588 y(Generates)37 b(a)f(cryptographic)h(MIC)e(for)h(the)g(supplied)f (message,)j(and)e(places)g(the)g(MIC)g(in)g(a)390 2697 y(tok)m(en)k(for)e(transfer)h(to)g(the)g(p)s(eer)f(application.)68 b(The)38 b(qop)p 2507 2697 V 40 w(req)h(parameter)g(allo)m(ws)h(a)f(c)m (hoice)390 2807 y(b)s(et)m(w)m(een)31 b(sev)m(eral)h(cryptographic)f (algorithms,)g(if)f(supp)s(orted)f(b)m(y)h(the)h(c)m(hosen)g(mec)m (hanism.)390 2943 y(Since)e(some)g(application-lev)m(el)k(proto)s(cols) d(ma)m(y)f(wish)g(to)g(use)g(tok)m(ens)h(emitted)g(b)m(y)f(gss)p 3448 2943 V 40 w(wrap\(\))390 3053 y(to)h(pro)m(vide)f Fj(")p Fp(secure)f(framing)p Fj(")p Fp(,)h(implemen)m(tations)i(m)m (ust)d(supp)s(ort)f(deriv)-5 b(ation)30 b(of)f(MICs)f(from)390 3162 y(zero-length)k(messages.)390 3299 y(Return)e(v)-5 b(alue:)390 3436 y Fj(GSS_S_COMPLETE)p Fp(:)37 b(Successful)30 b(completion.)390 3572 y Fj(GSS_S_CONTEXT_EXPIRED)p Fp(:)35 b(The)30 b(con)m(text)i(has)e(already)h(expired.)390 3709 y Fj(GSS_S_NO_CONTEXT)p Fp(:)36 b(The)30 b(con)m(text)p 1703 3709 V 42 w(handle)g(parameter)h(did)e(not)i(iden)m(tify)g(a)g(v) -5 b(alid)30 b(con)m(text.)390 3845 y Fj(GSS_S_BAD_QOP)p Fp(:)37 b(The)30 b(sp)s(eci\014ed)g(QOP)f(is)i(not)f(supp)s(orted)f(b)m (y)h(the)h(mec)m(hanism.)150 4047 y Fi(gss)p 316 4047 37 5 v 55 w(v)m(erify)p 675 4047 V 54 w(mic)3350 4246 y Fp([F)-8 b(unction])-3599 b Fh(OM_uint32)55 b(gss_verify_mic)50 b Fg(\()p Ff(OM)p 1646 4246 28 4 v 40 w(uin)m(t32)31 b(*)g Fe(minor_status)p Ff(,)j(const)565 4355 y(gss)p 688 4355 V 40 w(ctx)p 851 4355 V 41 w(id)p 968 4355 V 40 w(t)c Fe(context_handle)p Ff(,)35 b(const)c(gss)p 2216 4355 V 40 w(bu\013er)p 2487 4355 V 39 w(t)g Fe(message_buffer)p Ff(,)k(const)565 4465 y(gss)p 688 4465 V 40 w(bu\013er)p 959 4465 V 39 w(t)c Fe(token_buffer)p Ff(,)j(gss)p 1864 4465 V 40 w(qop)p 2048 4465 V 40 w(t)d(*)g Fe(qop_state)p Fg(\))390 4574 y Ff(minor)p 629 4574 V 40 w(status)t Fp(:)40 b(\(In)m(teger,)32 b(mo)s(dify\))e(Mec)m(hanism)h(sp)s (eci\014c)g(status)f(co)s(de.)390 4711 y Ff(con)m(text)p 687 4711 V 42 w(handle)5 b Fp(:)44 b(\(gss)p 1218 4711 V 40 w(ctx)p 1381 4711 V 41 w(id)p 1498 4711 V 40 w(t,)33 b(read\))f(Iden)m(ti\014es)h(the)f(con)m(text)i(on)e(whic)m(h)g(the)g (message)i(ar-)390 4821 y(riv)m(ed.)390 4957 y Ff(message)p 714 4957 V 41 w(bu\013er)7 b Fp(:)39 b(\(bu\013er,)30 b(opaque,)h(read\))g(Message)h(to)f(b)s(e)f(v)m(eri\014ed.)390 5094 y Ff(tok)m(en)p 612 5094 V 41 w(bu\013er)7 b Fp(:)39 b(\(bu\013er,)30 b(opaque,)h(read\))g(T)-8 b(ok)m(en)31 b(asso)s(ciated)h(with)e(message.)390 5230 y Ff(qop)p 540 5230 V 40 w(state)5 b Fp(:)39 b(\(gss)p 992 5230 V 40 w(qop)p 1176 5230 V 40 w(t,)26 b(mo)s(dify)-8 b(,)24 b(optional\))h(Qualit)m(y)g(of)e(protection)i(gained)f(from)f(MIC)g(Sp) s(ec-)390 5340 y(ify)30 b(NULL)h(if)f(not)h(required.)p eop end %%Page: 43 47 TeXDict begin 43 46 bop 150 -116 a Fp(Chapter)30 b(3:)41 b(Standard)29 b(GSS)h(API)2284 b(43)390 299 y(V)-8 b(eri\014es)39 b(that)f(a)h(cryptographic)f(MIC,)g(con)m(tained)i(in)e(the)g(tok)m(en) h(parameter,)i(\014ts)d(the)g(sup-)390 408 y(plied)30 b(message.)41 b(The)30 b(qop)p 1333 408 28 4 v 40 w(state)h(parameter)f (allo)m(ws)i(a)e(message)h(recipien)m(t)g(to)g(determine)f(the)390 518 y(strength)g(of)h(protection)g(that)g(w)m(as)g(applied)f(to)h(the)g (message.)390 650 y(Since)e(some)g(application-lev)m(el)k(proto)s(cols) d(ma)m(y)f(wish)g(to)g(use)g(tok)m(ens)h(emitted)g(b)m(y)f(gss)p 3448 650 V 40 w(wrap\(\))390 760 y(to)i(pro)m(vide)g Fj(")p Fp(secure)g(framing)p Fj(")p Fp(,)f(implemen)m(tations)j(m)m (ust)d(supp)s(ort)f(the)i(calculation)i(and)d(v)m(er-)390 869 y(i\014cation)h(of)g(MICs)f(o)m(v)m(er)i(zero-length)g(messages.) 390 1001 y(Return)e(v)-5 b(alue:)390 1133 y Fj(GSS_S_COMPLETE)p Fp(:)37 b(Successful)30 b(completion.)390 1265 y Fj (GSS_S_DEFECTIVE_TOKEN)p Fp(:)35 b(The)30 b(tok)m(en)h(failed)g (consistency)g(c)m(hec)m(ks.)390 1397 y Fj(GSS_S_BAD_SIG)p Fp(:)37 b(The)30 b(MIC)g(w)m(as)h(incorrect.)390 1529 y Fj(GSS_S_DUPLICATE_TOKEN)p Fp(:)k(The)29 b(tok)m(en)i(w)m(as)f(v)-5 b(alid,)30 b(and)f(con)m(tained)i(a)f(correct)h(MIC)e(for)h(the)390 1639 y(message,)i(but)d(it)i(had)f(already)h(b)s(een)f(pro)s(cessed.) 390 1771 y Fj(GSS_S_OLD_TOKEN)p Fp(:)i(The)22 b(tok)m(en)h(w)m(as)f(v) -5 b(alid,)24 b(and)e(con)m(tained)h(a)f(correct)h(MIC)f(for)f(the)i (message,)390 1880 y(but)30 b(it)h(is)f(to)s(o)h(old)g(to)g(c)m(hec)m (k)h(for)e(duplication.)390 2012 y Fj(GSS_S_UNSEQ_TOKEN)p Fp(:)66 b(The)45 b(tok)m(en)h(w)m(as)g(v)-5 b(alid,)50 b(and)45 b(con)m(tained)h(a)g(correct)g(MIC)g(for)f(the)390 2122 y(message,)25 b(but)20 b(has)h(b)s(een)g(v)m(eri\014ed)h(out)f(of) h(sequence;)j(a)d(later)g(tok)m(en)g(has)g(already)g(b)s(een)e(receiv)m (ed.)390 2254 y Fj(GSS_S_GAP_TOKEN)p Fp(:)32 b(The)22 b(tok)m(en)h(w)m(as)f(v)-5 b(alid,)24 b(and)e(con)m(tained)h(a)f (correct)h(MIC)f(for)f(the)i(message,)390 2364 y(but)39 b(has)h(b)s(een)g(v)m(eri\014ed)g(out)g(of)g(sequence;)46 b(an)40 b(earlier)h(exp)s(ected)f(tok)m(en)h(has)f(not)g(y)m(et)i(b)s (een)390 2473 y(receiv)m(ed.)390 2605 y Fj(GSS_S_CONTEXT_EXPIRED)p Fp(:)35 b(The)30 b(con)m(text)i(has)e(already)h(expired.)390 2737 y Fj(GSS_S_NO_CONTEXT)p Fp(:)36 b(The)30 b(con)m(text)p 1703 2737 V 42 w(handle)g(parameter)h(did)e(not)i(iden)m(tify)g(a)g(v) -5 b(alid)30 b(con)m(text.)150 2932 y Fi(gss)p 316 2932 37 5 v 55 w(wrap)3350 3123 y Fp([F)-8 b(unction])-3599 b Fh(OM_uint32)55 b(gss_wrap)48 b Fg(\()p Ff(OM)p 1332 3123 28 4 v 40 w(uin)m(t32)32 b(*)e Fe(minor_status)p Ff(,)35 b(const)30 b(gss)p 2766 3123 V 41 w(ctx)p 2930 3123 V 40 w(id)p 3046 3123 V 40 w(t)565 3233 y Fe(context_handle)p Ff(,)k(in)m(t)c Fe(conf_req_flag)p Ff(,)j(gss)p 2347 3233 V 40 w(qop)p 2531 3233 V 40 w(t)d Fe(qop_req)p Ff(,)i(const)d(gss) p 3410 3233 V 41 w(bu\013er)p 3682 3233 V 39 w(t)565 3342 y Fe(input_message_buffer)p Ff(,)37 b(in)m(t)31 b(*)f Fe(conf_state)p Ff(,)k(gss)p 2583 3342 V 40 w(bu\013er)p 2854 3342 V 39 w(t)565 3452 y Fe(output_message_buffer)p Fg(\))390 3562 y Ff(minor)p 629 3562 V 40 w(status)t Fp(:)40 b(\(In)m(teger,)32 b(mo)s(dify\))e(Mec)m(hanism)h(sp)s (eci\014c)g(status)f(co)s(de.)390 3694 y Ff(con)m(text)p 687 3694 V 42 w(handle)5 b Fp(:)40 b(\(gss)p 1214 3694 V 40 w(ctx)p 1377 3694 V 41 w(id)p 1494 3694 V 40 w(t,)30 b(read\))f(Iden)m(ti\014es)h(the)f(con)m(text)i(on)f(whic)m(h)f(the)g (message)i(will)390 3803 y(b)s(e)f(sen)m(t.)390 3935 y Ff(conf)p 560 3935 V 40 w(req)p 724 3935 V 40 w(\015ag)8 b Fp(:)47 b(\(b)s(o)s(olean,)34 b(read\))g(Non-zero)g(-)f(Both)h (con\014den)m(tialit)m(y)h(and)e(in)m(tegrit)m(y)i(services)390 4045 y(are)c(requested.)40 b(Zero)31 b(-)f(Only)g(in)m(tegrit)m(y)j (service)e(is)f(requested.)390 4177 y Ff(qop)p 540 4177 V 40 w(req)r Fp(:)144 b(\(gss)p 1027 4177 V 40 w(qop)p 1211 4177 V 40 w(t,)96 b(read,)f(optional\))83 b(Sp)s(eci\014es)f (required)f(qualit)m(y)i(of)f(protec-)390 4286 y(tion.)136 b(A)62 b(mec)m(hanism-sp)s(eci\014c)g(default)g(ma)m(y)h(b)s(e)e (requested)h(b)m(y)f(setting)i(qop)p 3449 4286 V 40 w(req)f(to)390 4396 y(GSS)p 569 4396 V 39 w(C)p 674 4396 V 40 w(QOP)p 918 4396 V 39 w(DEF)-10 b(A)m(UL)i(T.)72 b(If)e(an)h(unsupp)s(orted)c (protection)72 b(strength)e(is)h(requested,)390 4506 y(gss)p 513 4506 V 40 w(wrap)30 b(will)g(return)g(a)g(ma)5 b(jor)p 1541 4506 V 41 w(status)30 b(of)h(GSS)p 2127 4506 V 39 w(S)p 2217 4506 V 40 w(BAD)p 2458 4506 V 41 w(QOP)-8 b(.)390 4638 y Ff(input)p 609 4638 V 39 w(message)p 966 4638 V 41 w(bu\013er)7 b Fp(:)40 b(\(bu\013er,)30 b(opaque,)g(read\))h(Message)h(to)f(b)s(e)f(protected.)390 4770 y Ff(conf)p 560 4770 V 40 w(state)5 b Fp(:)62 b(\(b)s(o)s(olean,) 44 b(mo)s(dify)-8 b(,)42 b(optional\))g(Non-zero)g(-)e(Con\014den)m (tialit)m(y)-8 b(,)45 b(data)c(origin)g(au-)390 4879 y(then)m(tication)28 b(and)d(in)m(tegrit)m(y)i(services)g(ha)m(v)m(e)g (b)s(een)e(applied.)38 b(Zero)26 b(-)g(In)m(tegrit)m(y)h(and)e(data)h (origin)390 4989 y(services)31 b(only)g(has)f(b)s(een)f(applied.)41 b(Sp)s(ecify)30 b(NULL)g(if)g(not)h(required.)390 5121 y Ff(output)p 664 5121 V 40 w(message)p 1022 5121 V 41 w(bu\013er)7 b Fp(:)36 b(\(bu\013er,)26 b(opaque,)g(mo)s(dify\))f (Bu\013er)f(to)i(receiv)m(e)h(protected)f(message.)390 5230 y(Storage)31 b(asso)s(ciated)g(with)e(this)g(message)i(m)m(ust)f (b)s(e)f(freed)g(b)m(y)g(the)h(application)h(after)f(use)f(with)390 5340 y(a)i(call)g(to)h(gss)p 867 5340 V 40 w(release)p 1169 5340 V 41 w(bu\013er\(\).)p eop end %%Page: 44 48 TeXDict begin 44 47 bop 150 -116 a Fp(Chapter)30 b(3:)h(Standard)e(GSS) h(API)2294 b(44)390 299 y(A)m(ttac)m(hes)36 b(a)d(cryptographic)h(MIC)f (and)g(optionally)i(encrypts)d(the)i(sp)s(eci\014ed)e(input)p 3372 299 28 4 v 40 w(message.)390 408 y(The)23 b(output)p 844 408 V 40 w(message)h(con)m(tains)h(b)s(oth)d(the)i(MIC)f(and)g(the) h(message.)39 b(The)23 b(qop)p 3164 408 V 40 w(req)g(parameter)390 518 y(allo)m(ws)30 b(a)g(c)m(hoice)g(b)s(et)m(w)m(een)g(sev)m(eral)g (cryptographic)g(algorithms,)g(if)f(supp)s(orted)e(b)m(y)i(the)g(c)m (hosen)390 628 y(mec)m(hanism.)390 759 y(Since)g(some)g (application-lev)m(el)k(proto)s(cols)d(ma)m(y)f(wish)g(to)g(use)g(tok)m (ens)h(emitted)g(b)m(y)f(gss)p 3448 759 V 40 w(wrap\(\))390 868 y(to)41 b(pro)m(vide)e Fj(")p Fp(secure)h(framing)p Fj(")p Fp(,)i(implemen)m(tations)f(m)m(ust)f(supp)s(ort)e(the)i (wrapping)f(of)h(zero-)390 978 y(length)31 b(messages.)390 1109 y(Return)f(v)-5 b(alue:)390 1240 y Fj(GSS_S_COMPLETE)p Fp(:)37 b(Successful)30 b(completion.)390 1371 y Fj (GSS_S_CONTEXT_EXPIRED)p Fp(:)35 b(The)30 b(con)m(text)i(has)e(already) h(expired.)390 1502 y Fj(GSS_S_NO_CONTEXT)p Fp(:)36 b(The)30 b(con)m(text)p 1703 1502 V 42 w(handle)g(parameter)h(did)e(not)i(iden)m (tify)g(a)g(v)-5 b(alid)30 b(con)m(text.)390 1633 y Fj(GSS_S_BAD_QOP)p Fp(:)37 b(The)30 b(sp)s(eci\014ed)g(QOP)f(is)i(not)f(supp)s(orted)f(b)m (y)h(the)h(mec)m(hanism.)150 1825 y Fi(gss)p 316 1825 37 5 v 55 w(un)m(wrap)3350 2015 y Fp([F)-8 b(unction])-3599 b Fh(OM_uint32)55 b(gss_unwrap)49 b Fg(\()p Ff(OM)p 1437 2015 28 4 v 40 w(uin)m(t32)31 b(*)g Fe(minor_status)p Ff(,)j(const)565 2124 y(gss)p 688 2124 V 40 w(ctx)p 851 2124 V 41 w(id)p 968 2124 V 40 w(t)c Fe(context_handle)p Ff(,)35 b(const)c(gss)p 2216 2124 V 40 w(bu\013er)p 2487 2124 V 39 w(t)g Fe(input_message_buffer)p Ff(,)565 2234 y(gss)p 688 2234 V 40 w(bu\013er)p 959 2234 V 39 w(t)g Fe(output_message_buffer)p Ff(,)37 b(in)m(t)31 b(*)g Fe(conf_state)p Ff(,)i(gss)p 3128 2234 V 40 w(qop)p 3312 2234 V 40 w(t)e(*)565 2343 y Fe(qop_state)p Fg(\))390 2453 y Ff(minor)p 629 2453 V 40 w(status)t Fp(:)40 b(\(In)m(teger,)32 b(mo)s(dify\))e(Mec)m(hanism)h(sp)s(eci\014c)g(status)f(co)s(de.)390 2584 y Ff(con)m(text)p 687 2584 V 42 w(handle)5 b Fp(:)44 b(\(gss)p 1218 2584 V 40 w(ctx)p 1381 2584 V 41 w(id)p 1498 2584 V 40 w(t,)33 b(read\))f(Iden)m(ti\014es)h(the)f(con)m(text)i (on)e(whic)m(h)g(the)g(message)i(ar-)390 2694 y(riv)m(ed.)390 2825 y Ff(input)p 609 2825 V 39 w(message)p 966 2825 V 41 w(bu\013er)7 b Fp(:)40 b(\(bu\013er,)30 b(opaque,)g(read\))h (Protected)h(message.)390 2956 y Ff(output)p 664 2956 V 40 w(message)p 1022 2956 V 41 w(bu\013er)7 b Fp(:)51 b(\(bu\013er,)38 b(opaque,)g(mo)s(dify\))e(Bu\013er)g(to)h(receiv)m(e)i (un)m(wrapp)s(ed)34 b(mes-)390 3065 y(sage.)52 b(Storage)35 b(asso)s(ciated)h(with)d(this)h(bu\013er)f(m)m(ust)h(b)s(e)f(freed)h(b) m(y)f(the)i(application)g(after)f(use)390 3175 y(use)c(with)g(a)h(call) h(to)f(gss)p 1231 3175 V 40 w(release)p 1533 3175 V 41 w(bu\013er\(\).)390 3306 y Ff(conf)p 560 3306 V 40 w(state)5 b Fp(:)44 b(\(b)s(o)s(olean,)33 b(mo)s(dify)-8 b(,)31 b(optional\))i(Non-zero)g(-)e(Con\014den)m(tialit)m(y)i(and)e(in)m (tegrit)m(y)i(pro-)390 3415 y(tection)46 b(w)m(ere)f(used.)82 b(Zero)44 b(-)h(In)m(tegrit)m(y)h(service)f(only)g(w)m(as)f(used.)82 b(Sp)s(ecify)44 b(NULL)g(if)h(not)390 3525 y(required.)390 3656 y Ff(qop)p 540 3656 V 40 w(state)5 b Fp(:)72 b(\(gss)p 1025 3656 V 41 w(qop)p 1210 3656 V 40 w(t,)49 b(mo)s(dify)-8 b(,)49 b(optional\))e(Qualit)m(y)f(of)g(protection)g(pro)m(vided.)86 b(Sp)s(ecify)390 3766 y(NULL)30 b(if)h(not)f(required.)390 3897 y(Con)m(v)m(erts)c(a)g(message)g(previously)f(protected)i(b)m(y)e (gss)p 2256 3897 V 40 w(wrap)g(bac)m(k)h(to)g(a)g(usable)f(form,)h(v)m (erifying)390 4006 y(the)42 b(em)m(b)s(edded)e(MIC.)h(The)g(conf)p 1614 4006 V 40 w(state)i(parameter)f(indicates)g(whether)f(the)g (message)i(w)m(as)390 4116 y(encrypted;)50 b(the)44 b(qop)p 1177 4116 V 40 w(state)h(parameter)f(indicates)h(the)f(strength)f(of)h (protection)h(that)g(w)m(as)390 4225 y(used)30 b(to)h(pro)m(vide)f(the) h(con\014den)m(tialit)m(y)h(and)e(in)m(tegrit)m(y)i(services.)390 4356 y(Since)d(some)g(application-lev)m(el)k(proto)s(cols)d(ma)m(y)f (wish)g(to)g(use)g(tok)m(ens)h(emitted)g(b)m(y)f(gss)p 3448 4356 V 40 w(wrap\(\))390 4466 y(to)39 b(pro)m(vide)g Fj(")p Fp(secure)g(framing)p Fj(")p Fp(,)h(implemen)m(tations)g(m)m (ust)f(supp)s(ort)d(the)j(wrapping)f(and)g(un-)390 4575 y(wrapping)29 b(of)i(zero-length)h(messages.)390 4706 y(Return)e(v)-5 b(alue:)390 4837 y Fj(GSS_S_COMPLETE)p Fp(:)37 b(Successful)30 b(completion.)390 4968 y Fj (GSS_S_DEFECTIVE_TOKEN)p Fp(:)35 b(The)30 b(tok)m(en)h(failed)g (consistency)g(c)m(hec)m(ks.)390 5099 y Fj(GSS_S_BAD_SIG)p Fp(:)37 b(The)30 b(MIC)g(w)m(as)h(incorrect.)390 5230 y Fj(GSS_S_DUPLICATE_TOKEN)p Fp(:)k(The)29 b(tok)m(en)i(w)m(as)f(v)-5 b(alid,)30 b(and)f(con)m(tained)i(a)f(correct)h(MIC)e(for)h(the)390 5340 y(message,)i(but)d(it)i(had)f(already)h(b)s(een)f(pro)s(cessed.)p eop end %%Page: 45 49 TeXDict begin 45 48 bop 150 -116 a Fp(Chapter)30 b(3:)41 b(Standard)29 b(GSS)h(API)2284 b(45)390 299 y Fj(GSS_S_OLD_TOKEN)p Fp(:)32 b(The)22 b(tok)m(en)h(w)m(as)f(v)-5 b(alid,)24 b(and)e(con)m(tained)h(a)f(correct)h(MIC)f(for)f(the)i(message,)390 408 y(but)30 b(it)h(is)f(to)s(o)h(old)g(to)g(c)m(hec)m(k)h(for)e (duplication.)390 556 y Fj(GSS_S_UNSEQ_TOKEN)p Fp(:)66 b(The)45 b(tok)m(en)h(w)m(as)g(v)-5 b(alid,)50 b(and)45 b(con)m(tained)h(a)g(correct)g(MIC)g(for)f(the)390 665 y(message,)25 b(but)20 b(has)h(b)s(een)g(v)m(eri\014ed)h(out)f(of)h (sequence;)j(a)d(later)g(tok)m(en)g(has)g(already)g(b)s(een)e(receiv)m (ed.)390 813 y Fj(GSS_S_GAP_TOKEN)p Fp(:)32 b(The)22 b(tok)m(en)h(w)m(as)f(v)-5 b(alid,)24 b(and)e(con)m(tained)h(a)f (correct)h(MIC)f(for)f(the)i(message,)390 922 y(but)39 b(has)h(b)s(een)g(v)m(eri\014ed)g(out)g(of)g(sequence;)46 b(an)40 b(earlier)h(exp)s(ected)f(tok)m(en)h(has)f(not)g(y)m(et)i(b)s (een)390 1032 y(receiv)m(ed.)390 1179 y Fj(GSS_S_CONTEXT_EXPIRED)p Fp(:)35 b(The)30 b(con)m(text)i(has)e(already)h(expired.)390 1326 y Fj(GSS_S_NO_CONTEXT)p Fp(:)36 b(The)30 b(con)m(text)p 1703 1326 28 4 v 42 w(handle)g(parameter)h(did)e(not)i(iden)m(tify)g(a) g(v)-5 b(alid)30 b(con)m(text.)150 1578 y Fo(3.8)68 b(Name)46 b(Manipulation)293 1737 y Fj(GSS-API)g(Name)h(manipulation)d(Routines) 293 1956 y(Routine)1191 b(Function)293 2066 y(-------)g(--------)293 2175 y(gss_import_name)807 b(Convert)46 b(a)i(contiguous)d(string)h (name)1820 2285 y(to)i(internal-form.)293 2395 y(gss_display_name)759 b(Convert)46 b(internal-form)e(name)j(to)1820 2504 y(text.)293 2614 y(gss_compare_name)759 b(Compare)46 b(two)h(internal-form)d (names.)293 2723 y(gss_release_name)759 b(Discard)46 b(an)h(internal-form)e(name.)293 2833 y(gss_inquire_names_for_mec)o(h) 280 b(List)47 b(the)g(name-types)e(supported)g(by.)1820 2943 y(the)i(specified)f(mechanism.)293 3052 y (gss_inquire_mechs_for_nam)o(e)280 b(List)47 b(mechanisms)e(that)i (support)f(the)1820 3162 y(specified)g(name-type.)293 3271 y(gss_canonicalize_name)519 b(Convert)46 b(an)h(internal)f(name)h (to)g(an)g(MN.)293 3381 y(gss_export_name)807 b(Convert)46 b(an)h(MN)h(to)f(export)f(form.)293 3491 y(gss_duplicate_name)663 b(Create)47 b(a)g(copy)g(of)g(an)g(internal)f(name.)150 3703 y Fi(gss)p 316 3703 37 5 v 55 w(imp)s(ort)p 737 3703 V 55 w(name)3350 3912 y Fp([F)-8 b(unction])-3599 b Fh(OM_uint32)55 b(gss_import_name)50 b Fg(\()p Ff(OM)p 1698 3912 28 4 v 40 w(uin)m(t32)32 b(*)e Fe(minor_status)p Ff(,)35 b(const)565 4022 y(gss)p 688 4022 V 40 w(bu\013er)p 959 4022 V 39 w(t)c Fe(input_name_buffer)p Ff(,)36 b(const)31 b(gss)p 2364 4022 V 40 w(OID)f Fe(input_name_type)p Ff(,)565 4131 y(gss)p 688 4131 V 40 w(name)p 940 4131 V 40 w(t)h(*)g Fe(output_name)p Fg(\))390 4241 y Ff(minor)p 629 4241 V 40 w(status)t Fp(:)40 b(\(In)m(teger,)32 b(mo)s(dify\))e(Mec)m (hanism)h(sp)s(eci\014c)g(status)f(co)s(de.)390 4388 y Ff(input)p 609 4388 V 39 w(name)p 860 4388 V 40 w(bu\013er)7 b Fp(:)59 b(\(bu\013er,)43 b(o)s(ctet-string,)i(read\))40 b(Bu\013er)h(con)m(taining)g(con)m(tiguous)h(string)390 4498 y(name)30 b(to)i(con)m(v)m(ert.)390 4645 y Ff(input)p 609 4645 V 39 w(name)p 860 4645 V 40 w(t)m(yp)s(e)5 b Fp(:)40 b(\(Ob)5 b(ject)29 b(ID,)g(read,)g(optional\))h(Ob)5 b(ject)28 b(ID)h(sp)s(ecifying)f(t)m(yp)s(e)g(of)h(prin)m(table)390 4754 y(name.)41 b(Applications)31 b(ma)m(y)g(sp)s(ecify)f(either)h(GSS) p 2131 4754 V 40 w(C)p 2237 4754 V 39 w(NO)p 2415 4754 V 40 w(OID)f(to)i(use)e(a)g(mec)m(hanism-sp)s(eci\014c)390 4864 y(default)36 b(prin)m(table)f(syn)m(tax,)j(or)d(an)h(OID)f (recognized)i(b)m(y)e(the)h(GSS-API)f(implemen)m(tation)i(to)390 4974 y(name)30 b(a)h(sp)s(eci\014c)f(namespace.)390 5121 y Ff(output)p 664 5121 V 40 w(name)5 b Fp(:)60 b(\(gss)p 1158 5121 V 40 w(name)p 1410 5121 V 40 w(t,)43 b(mo)s(dify\))d (Returned)f(name)h(in)g(in)m(ternal)g(form.)69 b(Storage)41 b(as-)390 5230 y(so)s(ciated)h(with)e(this)g(name)h(m)m(ust)g(b)s(e)e (freed)i(b)m(y)f(the)h(application)h(after)f(use)f(with)g(a)h(call)h (to)390 5340 y(gss)p 513 5340 V 40 w(release)p 815 5340 V 42 w(name\(\).)p eop end %%Page: 46 50 TeXDict begin 46 49 bop 150 -116 a Fp(Chapter)30 b(3:)41 b(Standard)29 b(GSS)h(API)2284 b(46)390 299 y(Con)m(v)m(ert)40 b(a)g(con)m(tiguous)h(string)e(name)h(to)g(in)m(ternal)g(form.)68 b(In)39 b(general,)k(the)d(in)m(ternal)g(name)390 408 y(returned)g(\(via)h(the)g(@output)p 1476 408 28 4 v 40 w(name)f(parameter\))i(will)f(not)g(b)s(e)f(an)h(MN;)g(the)g (exception)h(to)390 518 y(this)29 b(is)f(if)h(the)g(@input)p 1182 518 V 38 w(name)p 1432 518 V 41 w(t)m(yp)s(e)f(indicates)i(that)f (the)g(con)m(tiguous)h(string)e(pro)m(vided)g(via)i(the)390 628 y(@input)p 680 628 V 39 w(name)p 931 628 V 40 w(bu\013er)43 b(parameter)i(is)g(of)f(t)m(yp)s(e)h(GSS)p 2309 628 V 39 w(C)p 2414 628 V 40 w(NT)p 2588 628 V 39 w(EXPOR)-8 b(T)p 3015 628 V 40 w(NAME,)45 b(in)f(whic)m(h)390 737 y(case)31 b(the)f(returned)f(in)m(ternal)i(name)f(will)g(b)s(e)f(an)h (MN)g(for)g(the)g(mec)m(hanism)h(that)f(exp)s(orted)g(the)390 847 y(name.)390 1002 y(Return)g(v)-5 b(alue:)390 1158 y Fj(GSS_S_COMPLETE)p Fp(:)37 b(Successful)30 b(completion.)390 1313 y Fj(GSS_S_BAD_NAMETYPE)p Fp(:)36 b(The)30 b(input)p 1721 1313 V 39 w(name)p 1972 1313 V 40 w(t)m(yp)s(e)g(w)m(as)h (unrecognized.)390 1468 y Fj(GSS_S_BAD_NAME)p Fp(:)39 b(The)31 b(input)p 1533 1468 V 39 w(name)g(parameter)h(could)f(not)h(b) s(e)e(in)m(terpreted)i(as)g(a)f(name)h(of)390 1578 y(the)f(sp)s (eci\014ed)e(t)m(yp)s(e.)390 1733 y Fj(GSS_S_BAD_MECH)p Fp(:)43 b(The)33 b(input)g(name-t)m(yp)s(e)h(w)m(as)g(GSS)p 2373 1733 V 39 w(C)p 2478 1733 V 40 w(NT)p 2652 1733 V 40 w(EXPOR)-8 b(T)p 3080 1733 V 40 w(NAME,)34 b(but)f(the)390 1843 y(mec)m(hanism)e(con)m(tained)g(within)f(the)h(input-name)f(is)g (not)h(supp)s(orted.)150 2063 y Fi(gss)p 316 2063 37 5 v 55 w(displa)m(y)p 745 2063 V 54 w(name)3350 2280 y Fp([F)-8 b(unction])-3599 b Fh(OM_uint32)55 b(gss_display_name)50 b Fg(\()p Ff(OM)p 1750 2280 28 4 v 41 w(uin)m(t32)31 b(*)g Fe(minor_status)p Ff(,)j(const)565 2390 y(gss)p 688 2390 V 40 w(name)p 940 2390 V 40 w(t)d Fe(input_name)p Ff(,)j(gss)p 1742 2390 V 40 w(bu\013er)p 2013 2390 V 39 w(t)d Fe(output_name_buffer)p Ff(,)36 b(gss)p 3232 2390 V 40 w(OID)30 b(*)565 2500 y Fe(output_name_type)p Fg(\))390 2609 y Ff(minor)p 629 2609 V 40 w(status)t Fp(:)40 b(\(In)m(teger,)32 b(mo)s(dify\))e(Mec)m(hanism)h(sp)s (eci\014c)g(status)f(co)s(de.)390 2765 y Ff(input)p 609 2765 V 39 w(name)5 b Fp(:)41 b(\(gss)p 1083 2765 V 41 w(name)p 1336 2765 V 40 w(t,)31 b(read\))f(Name)h(to)g(b)s(e)f(displa)m (y)m(ed.)390 2920 y Ff(output)p 664 2920 V 40 w(name)p 916 2920 V 40 w(bu\013er)7 b Fp(:)35 b(\(bu\013er,)25 b(c)m(haracter-string,)i(mo)s(dify\))22 b(Bu\013er)h(to)h(receiv)m(e)h (textual)g(name)390 3029 y(string.)43 b(The)31 b(application)h(m)m(ust) f(free)h(storage)g(asso)s(ciated)h(with)e(this)g(name)g(after)h(use)f (with)g(a)390 3139 y(call)h(to)f(gss)p 791 3139 V 40 w(release)p 1093 3139 V 41 w(bu\013er\(\).)390 3294 y Ff(output)p 664 3294 V 40 w(name)p 916 3294 V 40 w(t)m(yp)s(e)5 b Fp(:)57 b(\(Ob)5 b(ject)39 b(ID,)g(mo)s(dify)-8 b(,)40 b(optional\))g(The)e(t)m(yp)s(e)h(of)g(the)f(returned)g(name.)390 3404 y(The)30 b(returned)g(gss)p 1070 3404 V 40 w(OID)g(will)h(b)s(e)f (a)h(p)s(oin)m(ter)g(in)m(to)h(static)g(storage,)g(and)e(should)g(b)s (e)g(treated)i(as)390 3514 y(read-only)g(b)m(y)f(the)h(caller)h(\(in)e (particular,)i(the)e(application)i(should)e(not)g(attempt)i(to)f(free)g (it\).)390 3623 y(Sp)s(ecify)e(NULL)g(if)g(not)h(required.)390 3778 y(Allo)m(ws)k(an)e(application)i(to)f(obtain)g(a)g(textual)h (represen)m(tation)f(of)g(an)g(opaque)f(in)m(ternal-form)390 3888 y(name)24 b(for)g(displa)m(y)h(purp)s(oses.)37 b(The)23 b(syn)m(tax)i(of)f(a)h(prin)m(table)f(name)h(is)f(de\014ned)f(b)m(y)h (the)g(GSS-API)390 3998 y(implemen)m(tation.)390 4153 y(If)41 b(input)p 711 4153 V 39 w(name)g(denotes)g(an)g(anon)m(ymous)g (principal,)i(the)e(implemen)m(tation)i(should)d(return)390 4263 y(the)31 b(gss)p 670 4263 V 40 w(OID)g(v)-5 b(alue)32 b(GSS)p 1323 4263 V 39 w(C)p 1428 4263 V 40 w(NT)p 1602 4263 V 39 w(ANONYMOUS)g(as)f(the)g(output)p 2826 4263 V 40 w(name)p 3078 4263 V 40 w(t)m(yp)s(e,)g(and)g(a)g(tex-)390 4372 y(tual)36 b(name)f(that)g(is)g(syn)m(tactically)j(distinct)e(from) e(all)i(v)-5 b(alid)36 b(supp)s(orted)d(prin)m(table)i(names)g(in)390 4482 y(output)p 664 4482 V 40 w(name)p 916 4482 V 40 w(bu\013er.)390 4637 y(If)27 b(input)p 697 4637 V 39 w(name)h(w)m(as)g(created)h(b)m(y)f(a)g(call)h(to)f(gss)p 2050 4637 V 41 w(imp)s(ort)p 2362 4637 V 39 w(name,)h(sp)s(ecifying)e (GSS)p 3259 4637 V 39 w(C)p 3364 4637 V 40 w(NO)p 3543 4637 V 40 w(OID)390 4747 y(as)i(the)h(name-t)m(yp)s(e,)g(implemen)m (tations)h(that)f(emplo)m(y)g(lazy)g(con)m(v)m(ersion)h(b)s(et)m(w)m (een)f(name)f(t)m(yp)s(es)390 4856 y(ma)m(y)i(return)e(GSS)p 1044 4856 V 40 w(C)p 1150 4856 V 39 w(NO)p 1328 4856 V 40 w(OID)h(via)h(the)g(output)p 2145 4856 V 40 w(name)p 2397 4856 V 40 w(t)m(yp)s(e)f(parameter.)390 5012 y(Return)g(v)-5 b(alue:)390 5167 y Fj(GSS_S_COMPLETE)p Fp(:)37 b(Successful)30 b(completion.)390 5322 y Fj(GSS_S_BAD_NAME)p Fp(:)37 b(@input)p 1414 5322 V 39 w(name)30 b(w)m(as)h(ill-formed.)p eop end %%Page: 47 51 TeXDict begin 47 50 bop 150 -116 a Fp(Chapter)30 b(3:)41 b(Standard)29 b(GSS)h(API)2284 b(47)150 299 y Fi(gss)p 316 299 37 5 v 55 w(compare)p 823 299 V 54 w(name)3350 498 y Fp([F)-8 b(unction])-3599 b Fh(OM_uint32)55 b(gss_compare_name)50 b Fg(\()p Ff(OM)p 1750 498 28 4 v 41 w(uin)m(t32)31 b(*)g Fe(minor_status)p Ff(,)j(const)565 608 y(gss)p 688 608 V 40 w(name)p 940 608 V 40 w(t)d Fe(name1)p Ff(,)h(const)f(gss)p 1718 608 V 40 w(name)p 1970 608 V 40 w(t)g Fe(name2)p Ff(,)h(in)m(t)f(*)g Fe(name_equal)p Fg(\))390 717 y Ff(minor)p 629 717 V 40 w(status)t Fp(:)40 b(\(In)m(teger,)32 b(mo)s(dify\))e(Mec) m(hanism)h(sp)s(eci\014c)g(status)f(co)s(de.)390 854 y Ff(name1)7 b Fp(:)41 b(\(gss)p 878 854 V 41 w(name)p 1131 854 V 40 w(t,)31 b(read\))g(In)m(ternal-form)f(name.)390 991 y Ff(name2)7 b Fp(:)41 b(\(gss)p 878 991 V 41 w(name)p 1131 991 V 40 w(t,)31 b(read\))g(In)m(ternal-form)f(name.)390 1127 y Ff(name)p 608 1127 V 40 w(equal)t Fp(:)42 b(\(b)s(o)s(olean,)32 b(mo)s(dify\))f(Non-zero)h(-)g(names)f(refer)f(to)i(same)g(en)m(tit)m (y)-8 b(.)45 b(Zero)31 b(-)g(names)390 1237 y(refer)43 b(to)g(di\013eren)m(t)g(en)m(tities)i(\(strictly)-8 b(,)48 b(the)43 b(names)f(are)i(not)f(kno)m(wn)f(to)i(refer)e(to)i(the)f(same) 390 1347 y(iden)m(tit)m(y\).)390 1483 y(Allo)m(ws)26 b(an)e(application)i(to)f(compare)g(t)m(w)m(o)h(in)m(ternal-form)f (names)g(to)g(determine)g(whether)f(they)390 1593 y(refer)30 b(to)h(the)g(same)g(en)m(tit)m(y)-8 b(.)390 1730 y(If)32 b(either)g(name)g(presen)m(ted)g(to)h(gss)p 1631 1730 V 40 w(compare)p 2004 1730 V 40 w(name)f(denotes)h(an)f(anon)m(ymous)f (principal,)i(the)390 1839 y(routines)d(should)g(indicate)h(that)g(the) g(t)m(w)m(o)g(names)g(do)f(not)g(refer)h(to)g(the)f(same)h(iden)m(tit)m (y)-8 b(.)390 1976 y(Return)30 b(v)-5 b(alue:)390 2113 y Fj(GSS_S_COMPLETE)p Fp(:)37 b(Successful)30 b(completion.)390 2250 y Fj(GSS_S_BAD_NAMETYPE)p Fp(:)36 b(The)30 b(t)m(w)m(o)h(names)g (w)m(ere)f(of)h(incomparable)g(t)m(yp)s(es.)390 2386 y Fj(GSS_S_BAD_NAME)p Fp(:)37 b(One)30 b(or)g(b)s(oth)g(of)g(name1)h (or)g(name2)f(w)m(as)h(ill-formed.)150 2588 y Fi(gss)p 316 2588 37 5 v 55 w(release)p 731 2588 V 54 w(name)3350 2787 y Fp([F)-8 b(unction])-3599 b Fh(OM_uint32)55 b(gss_release_name) 50 b Fg(\()p Ff(OM)p 1750 2787 28 4 v 41 w(uin)m(t32)31 b(*)g Fe(minor_status)p Ff(,)565 2897 y(gss)p 688 2897 V 40 w(name)p 940 2897 V 40 w(t)g(*)g Fe(name)p Fg(\))390 3006 y Ff(minor)p 629 3006 V 40 w(status)t Fp(:)40 b(\(In)m(teger,)32 b(mo)s(dify\))e(Mec)m(hanism)h(sp)s(eci\014c)g(status)f(co)s(de.)390 3143 y Ff(name)5 b Fp(:)41 b(\(gss)p 831 3143 V 40 w(name)p 1083 3143 V 41 w(t,)30 b(mo)s(dify\))g(The)g(name)h(to)g(b)s(e)e (deleted.)390 3280 y(F)-8 b(ree)32 b(GSSAPI-allo)s(cated)h(storage)g (asso)s(ciated)g(with)d(an)i(in)m(ternal-form)f(name.)44 b(The)31 b(name)g(is)390 3389 y(set)g(to)g(GSS)p 822 3389 V 39 w(C)p 927 3389 V 40 w(NO)p 1106 3389 V 40 w(NAME)g(on)f (successful)g(completion)i(of)e(this)h(call.)390 3526 y(Return)f(v)-5 b(alue:)390 3663 y Fj(GSS_S_COMPLETE)p Fp(:)37 b(Successful)30 b(completion.)390 3800 y Fj(GSS_S_BAD_NAME)p Fp(:)37 b(The)30 b(name)g(parameter)h(did)f(not)g(con)m(tain)i(a)f(v)-5 b(alid)30 b(name.)150 4001 y Fi(gss)p 316 4001 37 5 v 55 w(inquire)p 746 4001 V 55 w(names)p 1135 4001 V 54 w(for)p 1337 4001 V 55 w(mec)m(h)3350 4200 y Fp([F)-8 b(unction])-3599 b Fh(OM_uint32)55 b(gss_inquire_names_for_)q(mec)q(h)c Fg(\()p Ff(OM)p 2273 4200 28 4 v 41 w(uin)m(t32)31 b(*)565 4310 y Fe(minor_status)p Ff(,)j(const)d(gss)p 1609 4310 V 40 w(OID)g Fe(mechanism)p Ff(,)i(gss)p 2496 4310 V 40 w(OID)p 2709 4310 V 40 w(set)e(*)g Fe(name_types)p Fg(\))390 4419 y Ff(minor)p 629 4419 V 40 w(status)t Fp(:)40 b(\(In)m(teger,)32 b(mo)s(dify\))e(Mec)m(hanism)h(sp)s (eci\014c)g(status)f(co)s(de.)390 4556 y Ff(mec)m(hanism)p Fp(:)41 b(\(gss)p 1051 4556 V 41 w(OID,)30 b(read\))h(The)f(mec)m (hanism)g(to)h(b)s(e)f(in)m(terrogated.)390 4693 y Ff(name)p 608 4693 V 40 w(t)m(yp)s(es)t Fp(:)65 b(\(gss)p 1104 4693 V 41 w(OID)p 1318 4693 V 40 w(set,)46 b(mo)s(dify\))c(Set)h(of)g (name-t)m(yp)s(es)g(supp)s(orted)d(b)m(y)j(the)g(sp)s(eci\014ed)390 4802 y(mec)m(hanism.)f(The)30 b(returned)g(OID)g(set)h(m)m(ust)g(b)s(e) f(freed)g(b)m(y)h(the)g(application)h(after)f(use)f(with)h(a)390 4912 y(call)h(to)f(gss)p 791 4912 V 40 w(release)p 1093 4912 V 41 w(oid)p 1255 4912 V 41 w(set\(\).)390 5049 y(Returns)e(the)i(set)g(of)f(namet)m(yp)s(es)h(supp)s(orted)e(b)m(y)h (the)g(sp)s(eci\014ed)g(mec)m(hanism.)390 5186 y(Return)g(v)-5 b(alue:)390 5322 y Fj(GSS_S_COMPLETE)p Fp(:)37 b(Successful)30 b(completion.)p eop end %%Page: 48 52 TeXDict begin 48 51 bop 150 -116 a Fp(Chapter)30 b(3:)41 b(Standard)29 b(GSS)h(API)2284 b(48)150 299 y Fi(gss)p 316 299 37 5 v 55 w(inquire)p 746 299 V 55 w(mec)m(hs)p 1127 299 V 54 w(for)p 1329 299 V 55 w(name)3350 494 y Fp([F)-8 b(unction])-3599 b Fh(OM_uint32)55 b(gss_inquire_mechs_for_)q (nam)q(e)c Fg(\()p Ff(OM)p 2273 494 28 4 v 41 w(uin)m(t32)31 b(*)565 604 y Fe(minor_status)p Ff(,)j(const)d(gss)p 1609 604 V 40 w(name)p 1861 604 V 40 w(t)g Fe(input_name)p Ff(,)j(gss)p 2663 604 V 40 w(OID)p 2876 604 V 40 w(set)d(*)g Fe(mech_types)p Fg(\))390 713 y Ff(minor)p 629 713 V 40 w(status)t Fp(:)40 b(\(In)m(teger,)32 b(mo)s(dify\))e(Mec)m(hanism)h (sp)s(eci\014c)g(status)f(co)s(de.)390 847 y Ff(input)p 609 847 V 39 w(name)5 b Fp(:)41 b(\(gss)p 1083 847 V 41 w(name)p 1336 847 V 40 w(t,)31 b(read\))f(The)g(name)g(to)i(whic)m (h)e(the)g(inquiry)g(relates.)390 980 y Ff(mec)m(h)p 600 980 V 41 w(t)m(yp)s(es)t Fp(:)37 b(\(gss)p 1069 980 V 40 w(OID)p 1282 980 V 40 w(set,)26 b(mo)s(dify\))d(Set)g(of)h(mec)m (hanisms)f(that)h(ma)m(y)g(supp)s(ort)e(the)i(sp)s(eci\014ed)390 1090 y(name.)71 b(The)39 b(returned)h(OID)g(set)h(m)m(ust)f(b)s(e)g (freed)g(b)m(y)g(the)g(caller)i(after)f(use)f(with)g(a)h(call)g(to)390 1200 y(gss)p 513 1200 V 40 w(release)p 815 1200 V 42 w(oid)p 978 1200 V 40 w(set\(\).)390 1333 y(Returns)29 b(the)g(set)h(of)g(mec)m(hanisms)g(supp)s(orted)d(b)m(y)j(the)f (GSS-API)g(implemen)m(tation)i(that)f(ma)m(y)390 1443 y(b)s(e)g(able)h(to)g(pro)s(cess)f(the)g(sp)s(eci\014ed)g(name.)390 1577 y(Eac)m(h)j(mec)m(hanism)f(returned)g(will)g(recognize)i(at)f (least)h(one)e(elemen)m(t)i(within)e(the)g(name.)47 b(It)32 b(is)390 1686 y(p)s(ermissible)23 b(for)i(this)f(routine)g(to)h(b)s(e)f (implemen)m(ted)h(within)f(a)h(mec)m(hanism-indep)s(enden)m(t)e(GSS-) 390 1796 y(API)f(la)m(y)m(er,)k(using)21 b(the)i(t)m(yp)s(e)f (information)g(con)m(tained)i(within)d(the)i(presen)m(ted)f(name,)i (and)d(based)390 1905 y(on)k(registration)i(information)f(pro)m(vided)f (b)m(y)g(individual)g(mec)m(hanism)g(implemen)m(tations.)41 b(This)390 2015 y(means)36 b(that)h(the)f(returned)f(mec)m(h)p 1624 2015 V 40 w(t)m(yp)s(es)h(set)h(ma)m(y)f(indicate)h(that)g(a)f (particular)h(mec)m(hanism)390 2125 y(will)27 b(understand)f(the)h (name)g(when)f(in)h(fact)g(it)h(w)m(ould)f(refuse)f(to)i(accept)h(the)e (name)g(as)g(input)f(to)390 2234 y(gss)p 513 2234 V 40 w(canonicalize)p 1025 2234 V 43 w(name,)f(gss)p 1447 2234 V 40 w(init)p 1623 2234 V 41 w(sec)p 1780 2234 V 40 w(con)m(text,)i(gss)p 2280 2234 V 40 w(acquire)p 2605 2234 V 41 w(cred)c(or)h(gss)p 3058 2234 V 40 w(add)p 3245 2234 V 40 w(cred)f(\(due)g(to)390 2344 y(some)29 b(prop)s(ert)m(y)f(of)h(the)g(sp)s(eci\014c)f(name,)h(as)g(opp)s(osed)f (to)i(the)e(name)h(t)m(yp)s(e\).)41 b(Th)m(us)27 b(this)i(routine)390 2453 y(should)21 b(b)s(e)g(used)h(only)g(as)g(a)h(pre\014lter)e(for)h (a)g(call)i(to)e(a)h(subsequen)m(t)e(mec)m(hanism-sp)s(eci\014c)i (routine.)390 2587 y(Return)30 b(v)-5 b(alue:)390 2721 y Fj(GSS_S_COMPLETE)p Fp(:)37 b(Successful)30 b(completion.)390 2854 y Fj(GSS_S_BAD_NAME)p Fp(:)37 b(The)30 b(input)p 1530 2854 V 39 w(name)g(parameter)h(w)m(as)g(ill-formed.)390 2988 y Fj(GSS_S_BAD_NAMETYPE)p Fp(:)60 b(The)42 b(input)p 1757 2988 V 39 w(name)g(parameter)h(con)m(tained)h(an)e(in)m(v)-5 b(alid)43 b(or)g(unsup-)390 3098 y(p)s(orted)30 b(t)m(yp)s(e)g(of)h (name.)150 3295 y Fi(gss)p 316 3295 37 5 v 55 w(canonicalize)p 1011 3295 V 53 w(name)3350 3490 y Fp([F)-8 b(unction])-3599 b Fh(OM_uint32)55 b(gss_canonicalize_name)d Fg(\()p Ff(OM)p 2012 3490 28 4 v 40 w(uin)m(t32)32 b(*)e Fe(minor_status)p Ff(,)565 3600 y(const)h(gss)p 926 3600 V 40 w(name)p 1178 3600 V 40 w(t)g Fe(input_name)p Ff(,)j(const)c(gss)p 2217 3600 V 41 w(OID)g Fe(mech_type)p Ff(,)j(gss)p 3104 3600 V 40 w(name)p 3356 3600 V 40 w(t)e(*)565 3709 y Fe(output_name)p Fg(\))390 3819 y Ff(minor)p 629 3819 V 40 w(status)t Fp(:)40 b(\(In)m(teger,)32 b(mo)s(dify\))e(Mec)m (hanism)h(sp)s(eci\014c)g(status)f(co)s(de.)390 3953 y Ff(input)p 609 3953 V 39 w(name)5 b Fp(:)41 b(\(gss)p 1083 3953 V 41 w(name)p 1336 3953 V 40 w(t,)31 b(read\))f(The)g(name)g (for)h(whic)m(h)f(a)g(canonical)i(form)e(is)h(desired.)390 4086 y Ff(mec)m(h)p 600 4086 V 41 w(t)m(yp)s(e)5 b Fp(:)38 b(\(Ob)5 b(ject)27 b(ID,)f(read\))g(The)f(authen)m(tication)j(mec)m (hanism)e(for)g(whic)m(h)f(the)h(canonical)390 4196 y(form)31 b(of)g(the)g(name)h(is)f(desired.)43 b(The)30 b(desired)h(mec)m(hanism) g(m)m(ust)h(b)s(e)e(sp)s(eci\014ed)h(explicitly;)i(no)390 4306 y(default)e(is)f(pro)m(vided.)390 4439 y Ff(output)p 664 4439 V 40 w(name)5 b Fp(:)63 b(\(gss)p 1161 4439 V 40 w(name)p 1413 4439 V 41 w(t,)44 b(mo)s(dify\))e(The)f(resultan)m (t)h(canonical)h(name.)74 b(Storage)43 b(asso-)390 4549 y(ciated)k(with)f(this)g(name)h(m)m(ust)f(b)s(e)f(freed)h(b)m(y)g(the)g (application)i(after)e(use)g(with)g(a)h(call)g(to)390 4658 y(gss)p 513 4658 V 40 w(release)p 815 4658 V 42 w(name\(\).)390 4792 y(Generate)34 b(a)g(canonical)g(mec)m(hanism)g (name)f(\(MN\))h(from)e(an)h(arbitrary)g(in)m(ternal)h(name.)48 b(The)390 4902 y(mec)m(hanism)34 b(name)g(is)g(the)g(name)f(that)i(w)m (ould)e(b)s(e)g(returned)g(to)h(a)g(con)m(text)i(acceptor)f(on)f(suc-) 390 5011 y(cessful)c(authen)m(tication)i(of)f(a)f(con)m(text)i(where)e (the)g(initiator)i(used)d(the)h(input)p 3136 5011 V 39 w(name)h(in)e(a)i(suc-)390 5121 y(cessful)i(call)h(to)f(gss)p 1084 5121 V 41 w(acquire)p 1410 5121 V 40 w(cred,)h(sp)s(ecifying)e(an) h(OID)g(set)g(con)m(taining)h(@mec)m(h)p 3298 5121 V 41 w(t)m(yp)s(e)f(as)g(its)390 5230 y(only)g(mem)m(b)s(er,)f(follo)m(w) m(ed)j(b)m(y)d(a)h(call)h(to)f(gss)p 1933 5230 V 40 w(init)p 2109 5230 V 41 w(sec)p 2266 5230 V 40 w(con)m(text\(\),)j(sp)s (ecifying)d(@mec)m(h)p 3428 5230 V 40 w(t)m(yp)s(e)g(as)390 5340 y(the)e(authen)m(tication)h(mec)m(hanism.)p eop end %%Page: 49 53 TeXDict begin 49 52 bop 150 -116 a Fp(Chapter)30 b(3:)41 b(Standard)29 b(GSS)h(API)2284 b(49)390 299 y(Return)30 b(v)-5 b(alue:)390 463 y Fj(GSS_S_COMPLETE)p Fp(:)37 b(Successful)30 b(completion.)150 693 y Fi(gss)p 316 693 37 5 v 55 w(exp)s(ort)p 722 693 V 55 w(name)3350 919 y Fp([F)-8 b(unction])-3599 b Fh(OM_uint32)55 b(gss_export_name)50 b Fg(\()p Ff(OM)p 1698 919 28 4 v 40 w(uin)m(t32)32 b(*)e Fe(minor_status)p Ff(,)35 b(const)565 1029 y(gss)p 688 1029 V 40 w(name)p 940 1029 V 40 w(t)c Fe(input_name)p Ff(,)j(gss)p 1742 1029 V 40 w(bu\013er)p 2013 1029 V 39 w(t)d Fe(exported_name)p Fg(\))390 1139 y Ff(minor)p 629 1139 V 40 w(status)t Fp(:)40 b(\(In)m(teger,)32 b(mo)s(dify\))e (Mec)m(hanism)h(sp)s(eci\014c)g(status)f(co)s(de.)390 1303 y Ff(input)p 609 1303 V 39 w(name)5 b Fp(:)41 b(\(gss)p 1083 1303 V 41 w(name)p 1336 1303 V 40 w(t,)31 b(read\))f(The)g(MN)h (to)g(b)s(e)f(exp)s(orted.)390 1468 y Ff(exp)s(orted)p 745 1468 V 40 w(name)5 b Fp(:)44 b(\(gss)p 1223 1468 V 40 w(bu\013er)p 1494 1468 V 40 w(t,)33 b(o)s(ctet-string,)h(mo)s (dify\))e(The)f(canonical)j(con)m(tiguous)f(string)390 1577 y(form)c(of)h(@input)p 997 1577 V 39 w(name.)40 b(Storage)31 b(asso)s(ciated)g(with)e(this)h(string)f(m)m(ust)g(freed)h (b)m(y)f(the)h(applica-)390 1687 y(tion)h(after)g(use)f(with)g(gss)p 1279 1687 V 40 w(release)p 1581 1687 V 41 w(bu\013er\(\).)390 1851 y(T)-8 b(o)27 b(pro)s(duce)f(a)i(canonical)g(con)m(tiguous)h (string)d(represen)m(tation)j(of)e(a)g(mec)m(hanism)g(name)h(\(MN\),) 390 1961 y(suitable)h(for)e(direct)i(comparison)f(\(e.g.)41 b(with)28 b(memcmp\))g(for)g(use)f(in)h(authorization)h(functions)390 2070 y(\(e.g.)53 b(matc)m(hing)35 b(en)m(tries)f(in)g(an)f(access-con)m (trol)k(list\).)53 b(The)33 b(@input)p 2838 2070 V 39 w(name)h(parameter)g(m)m(ust)390 2180 y(sp)s(ecify)h(a)g(v)-5 b(alid)36 b(MN)g(\(i.e.)56 b(an)35 b(in)m(ternal)h(name)f(generated)i (b)m(y)e(gss)p 2787 2180 V 40 w(accept)p 3078 2180 V 41 w(sec)p 3235 2180 V 41 w(con)m(text\(\))j(or)390 2290 y(b)m(y)30 b(gss)p 639 2290 V 40 w(canonicalize)p 1151 2290 V 43 w(name\(\)\).)390 2454 y(Return)g(v)-5 b(alue:)390 2619 y Fj(GSS_S_COMPLETE)p Fp(:)37 b(Successful)30 b(completion.)390 2783 y Fj(GSS_S_NAME_NOT_MN)p Fp(:)36 b(The)30 b(pro)m(vided)g(in)m (ternal)h(name)f(w)m(as)h(not)g(a)g(mec)m(hanism)f(name.)390 2948 y Fj(GSS_S_BAD_NAME)p Fp(:)37 b(The)30 b(pro)m(vided)g(in)m (ternal)h(name)f(w)m(as)h(ill-formed.)390 3112 y Fj(GSS_S_BAD_NAMETYPE) p Fp(:)41 b(The)33 b(in)m(ternal)h(name)f(w)m(as)h(of)f(a)h(t)m(yp)s(e) f(not)h(supp)s(orted)d(b)m(y)i(the)g(GSS-)390 3222 y(API)d(implemen)m (tation.)150 3451 y Fi(gss)p 316 3451 37 5 v 55 w(duplicate)p 862 3451 V 54 w(name)3350 3678 y Fp([F)-8 b(unction])-3599 b Fh(OM_uint32)55 b(gss_duplicate_name)c Fg(\()p Ff(OM)p 1855 3678 28 4 v 40 w(uin)m(t32)32 b(*)e Fe(minor_status)p Ff(,)35 b(const)565 3787 y(gss)p 688 3787 V 40 w(name)p 940 3787 V 40 w(t)c Fe(src_name)p Ff(,)i(gss)p 1637 3787 V 40 w(name)p 1889 3787 V 40 w(t)e(*)g Fe(dest_name)p Fg(\))390 3897 y Ff(minor)p 629 3897 V 40 w(status)t Fp(:)40 b(\(In)m(teger,)32 b(mo)s(dify\))e(Mec)m(hanism)h(sp)s (eci\014c)g(status)f(co)s(de.)390 4061 y Ff(src)p 508 4061 V 40 w(name)5 b Fp(:)41 b(\(gss)p 983 4061 V 40 w(name)p 1235 4061 V 40 w(t,)31 b(read\))g(In)m(ternal)g(name)f(to)h(b) s(e)f(duplicated.)390 4226 y Ff(dest)p 558 4226 V 40 w(name)5 b Fp(:)69 b(\(gss)p 1061 4226 V 41 w(name)p 1314 4226 V 40 w(t,)49 b(mo)s(dify\))44 b(The)g(resultan)m(t)h(cop)m(y) g(of)g(@src)p 2942 4226 V 39 w(name.)84 b(Storage)45 b(as-)390 4336 y(so)s(ciated)d(with)e(this)g(name)h(m)m(ust)g(b)s(e)e (freed)i(b)m(y)f(the)h(application)h(after)f(use)f(with)g(a)h(call)h (to)390 4445 y(gss)p 513 4445 V 40 w(release)p 815 4445 V 42 w(name\(\).)390 4610 y(Create)53 b(an)g(exact)h(duplicate)f(of)g (the)f(existing)i(in)m(ternal)f(name)g(@src)p 3007 4610 V 39 w(name.)107 b(The)52 b(new)390 4719 y(@dest)p 629 4719 V 40 w(name)29 b(will)h(b)s(e)f(indep)s(enden)m(t)g(of)g(src)p 1933 4719 V 40 w(name)h(\(i.e.)41 b(@src)p 2589 4719 V 40 w(name)30 b(and)f(@dest)p 3280 4719 V 39 w(name)h(m)m(ust)390 4829 y(b)s(oth)g(b)s(e)f(released,)j(and)e(the)g(release)i(of)e(one)h (shall)g(not)f(a\013ect)i(the)f(v)-5 b(alidit)m(y)32 b(of)e(the)h(other\).)390 4993 y(Return)f(v)-5 b(alue:)390 5158 y Fj(GSS_S_COMPLETE)p Fp(:)37 b(Successful)30 b(completion.)390 5322 y Fj(GSS_S_BAD_NAME)p Fp(:)37 b(The)30 b(src)p 1429 5322 V 40 w(name)g(parameter)h(w)m(as)g(ill-formed.)p eop end %%Page: 50 54 TeXDict begin 50 53 bop 150 -116 a Fp(Chapter)30 b(3:)41 b(Standard)29 b(GSS)h(API)2284 b(50)150 299 y Fo(3.9)68 b(Miscellaneous)46 b(Routines)293 458 y Fj(GSS-API)g(Miscellaneous)e (Routines)293 677 y(Routine)1144 b(Function)293 787 y(-------)g (--------)293 897 y(gss_add_oid_set_member)424 b(Add)47 b(an)g(object)f(identifier)f(to)1773 1006 y(a)i(set.)293 1116 y(gss_display_status)616 b(Convert)46 b(a)h(GSS-API)f(status)g (code)1773 1225 y(to)h(text.)293 1335 y(gss_indicate_mechs)616 b(Determine)45 b(available)g(underlying)1773 1445 y(authentication)f (mechanisms.)293 1554 y(gss_release_buffer)616 b(Discard)46 b(a)h(buffer.)293 1664 y(gss_release_oid_set)568 b(Discard)46 b(a)h(set)g(of)g(object)1773 1773 y(identifiers.)293 1883 y(gss_create_empty_oid_set)328 b(Create)46 b(a)h(set)g(containing) e(no)1773 1993 y(object)h(identifiers.)293 2102 y (gss_test_oid_set_member)376 b(Determines)45 b(whether)h(an)h(object) 1773 2212 y(identifier)e(is)i(a)g(member)f(of)i(a)f(set.)293 2321 y(gss_encapsulate_token)472 b(Encapsulate)44 b(a)k(context)e (token.)293 2431 y(gss_decapsulate_token)472 b(Decapsulate)44 b(a)k(context)e(token.)293 2540 y(gss_oid_equal)856 b(Compare)46 b(two)g(OIDs)h(for)g(equality.)150 2812 y Fi(gss)p 316 2812 37 5 v 55 w(add)p 567 2812 V 54 w(oid)p 784 2812 V 55 w(set)p 991 2812 V 54 w(mem)m(b)s(er)3350 3082 y Fp([F)-8 b(unction])-3599 b Fh(OM_uint32)55 b(gss_add_oid_set_member)d Fg(\()p Ff(OM)p 2064 3082 28 4 v 41 w(uin)m(t32)31 b(*)g Fe(minor_status)p Ff(,)565 3191 y(const)g(gss)p 926 3191 V 40 w(OID)f Fe(member_oid)p Ff(,)k(gss)p 1865 3191 V 40 w(OID)p 2078 3191 V 40 w(set)d(*)g Fe(oid_set)p Fg(\))390 3301 y Ff(minor)p 629 3301 V 40 w(status)t Fp(:)40 b(\(in)m(teger,)33 b(mo)s(dify\))d(Mec)m(hanism)h(sp)s(eci\014c)f(status)h(co)s(de.)390 3508 y Ff(mem)m(b)s(er)p 715 3508 V 39 w(oid)t Fp(:)41 b(\(Ob)5 b(ject)31 b(ID,)g(read\))f(The)g(ob)5 b(ject)31 b(iden)m(ti\014er)g(to)g(copied)g(in)m(to)g(the)g(set.)390 3715 y Ff(oid)p 517 3715 V 40 w(set)r Fp(:)46 b(\(Set)33 b(of)g(Ob)5 b(ject)33 b(ID,)g(mo)s(dify\))f(The)h(set)g(in)f(whic)m(h)h (the)f(ob)5 b(ject)34 b(iden)m(ti\014er)f(should)f(b)s(e)390 3824 y(inserted.)390 4031 y(Add)d(an)g(Ob)5 b(ject)30 b(Iden)m(ti\014er)g(to)g(an)g(Ob)5 b(ject)29 b(Iden)m(ti\014er)h(set.) 41 b(This)29 b(routine)h(is)f(in)m(tended)h(for)f(use)390 4141 y(in)i(conjunction)h(with)g(gss)p 1323 4141 V 40 w(create)p 1599 4141 V 41 w(empt)m(y)p 1887 4141 V 41 w(oid)p 2049 4141 V 40 w(set)g(when)f(constructing)h(a)g(set)h(of)f (mec)m(hanism)390 4251 y(OIDs)38 b(for)g(input)g(to)h(gss)p 1277 4251 V 40 w(acquire)p 1602 4251 V 41 w(cred.)64 b(The)38 b(oid)p 2215 4251 V 40 w(set)h(parameter)g(m)m(ust)f(refer)g (to)h(an)g(OID-)390 4360 y(set)26 b(that)h(w)m(as)f(created)h(b)m(y)f (GSS-API)g(\(e.g.)40 b(a)27 b(set)f(returned)f(b)m(y)h(gss)p 2747 4360 V 40 w(create)p 3023 4360 V 41 w(empt)m(y)p 3311 4360 V 41 w(oid)p 3473 4360 V 40 w(set\(\)\).)390 4470 y(GSS-API)e(creates)j(a)e(cop)m(y)g(of)g(the)g(mem)m(b)s(er)p 1929 4470 V 40 w(oid)g(and)f(inserts)h(this)f(cop)m(y)i(in)m(to)g(the)f (set,)h(expand-)390 4579 y(ing)21 b(the)h(storage)h(allo)s(cated)g(to)f (the)f(OID-set's)h(elemen)m(ts)h(arra)m(y)f(if)f(necessary)-8 b(.)38 b(The)21 b(routine)g(ma)m(y)390 4689 y(add)28 b(the)i(new)e(mem)m(b)s(er)h(OID)g(an)m(ywhere)f(within)h(the)g(elemen) m(ts)i(arra)m(y)-8 b(,)30 b(and)e(implemen)m(tations)390 4799 y(should)i(v)m(erify)h(that)g(the)f(new)g(mem)m(b)s(er)p 1797 4799 V 40 w(oid)h(is)f(not)h(already)g(con)m(tained)h(within)e (the)h(elemen)m(ts)390 4908 y(arra)m(y;)g(if)f(the)h(mem)m(b)s(er)p 1218 4908 V 39 w(oid)g(is)f(already)h(presen)m(t,)g(the)g(oid)p 2441 4908 V 40 w(set)g(should)e(remain)h(unc)m(hanged.)390 5115 y(Return)g(v)-5 b(alue:)390 5322 y Fj(GSS_S_COMPLETE)p Fp(:)37 b(Successful)30 b(completion.)p eop end %%Page: 51 55 TeXDict begin 51 54 bop 150 -116 a Fp(Chapter)30 b(3:)41 b(Standard)29 b(GSS)h(API)2284 b(51)150 299 y Fi(gss)p 316 299 37 5 v 55 w(displa)m(y)p 745 299 V 54 w(status)3350 500 y Fp([F)-8 b(unction])-3599 b Fh(OM_uint32)55 b(gss_display_status) c Fg(\()p Ff(OM)p 1855 500 28 4 v 40 w(uin)m(t32)32 b(*)e Fe(minor_status)p Ff(,)565 610 y(OM)p 725 610 V 40 w(uin)m(t32)h Fe(status_value)p Ff(,)k(in)m(t)c Fe(status_type)p Ff(,)i(const)e(gss)p 2853 610 V 40 w(OID)g Fe(mech_type)p Ff(,)565 720 y(OM)p 725 720 V 40 w(uin)m(t32)g(*)g Fe(message_context)p Ff(,)k(gss)p 2078 720 V 40 w(bu\013er)p 2349 720 V 40 w(t)30 b Fe(status_string)p Fg(\))390 829 y Ff(minor)p 629 829 V 40 w(status)t Fp(:)40 b(\(in)m(teger,)33 b(mo)s(dify\))d(Mec)m(hanism)h(sp)s(eci\014c)f (status)h(co)s(de.)390 968 y Ff(status)p 634 968 V 40 w(v)-5 b(alue)5 b Fp(:)42 b(\(In)m(teger,)32 b(read\))e(Status)h(v)-5 b(alue)30 b(to)i(b)s(e)d(con)m(v)m(erted.)390 1108 y Ff(status)p 634 1108 V 40 w(t)m(yp)s(e)5 b Fp(:)41 b(\(In)m(teger,)30 b(read\))f(GSS)p 1695 1108 V 40 w(C)p 1801 1108 V 39 w(GSS)p 2013 1108 V 40 w(CODE)f(-)h(status)p 2646 1108 V 40 w(v)-5 b(alue)29 b(is)g(a)g(GSS)f(status)h(co)s(de.)390 1217 y(GSS)p 569 1217 V 39 w(C)p 674 1217 V 40 w(MECH)p 993 1217 V 40 w(CODE)h(-)h(status)p 1630 1217 V 40 w(v)-5 b(alue)31 b(is)f(a)h(mec)m(hanism)g(status)f(co)s(de.)390 1356 y Ff(mec)m(h)p 600 1356 V 41 w(t)m(yp)s(e)5 b Fp(:)49 b(\(Ob)5 b(ject)35 b(ID,)g(read,)g(optional\))h(Underlying)f(mec)m (hanism)f(\(used)g(to)i(in)m(terpret)f(a)390 1466 y(minor)30 b(status)h(v)-5 b(alue\).)41 b(Supply)29 b(GSS)p 1712 1466 V 39 w(C)p 1817 1466 V 40 w(NO)p 1996 1466 V 40 w(OID)h(to)h(obtain)g(the)f(system)h(default.)390 1605 y Ff(message)p 714 1605 V 41 w(con)m(text)r Fp(:)52 b(\(In)m(teger,)38 b(read/mo)s(dify\))d(Should)f(b)s(e)h(initialized)i(to)e(zero)h(b)m(y)f (the)h(appli-)390 1715 y(cation)41 b(prior)e(to)h(the)g(\014rst)f (call.)69 b(On)39 b(return)f(from)h(gss)p 2411 1715 V 41 w(displa)m(y)p 2730 1715 V 40 w(status\(\),)k(a)d(non-zero)g(sta-) 390 1824 y(tus)p 518 1824 V 40 w(v)-5 b(alue)38 b(parameter)g (indicates)h(that)f(additional)h(messages)g(ma)m(y)f(b)s(e)f(extracted) i(from)f(the)390 1934 y(status)21 b(co)s(de)f(via)h(subsequen)m(t)f (calls)h(to)g(gss)p 1859 1934 V 40 w(displa)m(y)p 2177 1934 V 41 w(status\(\),)i(passing)e(the)f(same)h(status)p 3486 1934 V 40 w(v)-5 b(alue,)390 2043 y(status)p 634 2043 V 40 w(t)m(yp)s(e,)31 b(mec)m(h)p 1108 2043 V 41 w(t)m(yp)s(e,)g(and)e(message)p 1873 2043 V 41 w(con)m(text)k (parameters.)390 2183 y Ff(status)p 634 2183 V 40 w(string)8 b Fp(:)63 b(\(bu\013er,)45 b(c)m(haracter)e(string,)h(mo)s(dify\))e(T) -8 b(extual)42 b(in)m(terpretation)h(of)f(the)g(sta-)390 2292 y(tus)p 518 2292 V 40 w(v)-5 b(alue.)53 b(Storage)35 b(asso)s(ciated)h(with)e(this)g(parameter)h(m)m(ust)f(b)s(e)g(freed)g (b)m(y)g(the)h(application)390 2402 y(after)c(use)f(with)g(a)h(call)g (to)h(gss)p 1446 2402 V 40 w(release)p 1748 2402 V 41 w(bu\013er\(\).)390 2541 y(Allo)m(ws)j(an)g(application)g(to)g(obtain)g (a)g(textual)g(represen)m(tation)h(of)e(a)h(GSS-API)f(status)g(co)s (de,)390 2651 y(for)27 b(displa)m(y)h(to)g(the)g(user)e(or)i(for)f (logging)i(purp)s(oses.)38 b(Since)27 b(some)h(status)g(v)-5 b(alues)28 b(ma)m(y)g(indicate)390 2760 y(m)m(ultiple)k(conditions,)h (applications)g(ma)m(y)g(need)e(to)i(call)g(gss)p 2532 2760 V 40 w(displa)m(y)p 2850 2760 V 40 w(status)g(m)m(ultiple)f (times,)390 2870 y(eac)m(h)i(call)g(generating)g(a)f(single)h(text)f (string.)48 b(The)32 b(message)p 2552 2870 V 42 w(con)m(text)i (parameter)f(is)g(used)f(b)m(y)390 2979 y(gss)p 513 2979 V 40 w(displa)m(y)p 831 2979 V 40 w(status)25 b(to)g(store)g(state)g (information)f(ab)s(out)g(whic)m(h)g(error)g(messages)h(ha)m(v)m(e)g (already)390 3089 y(b)s(een)36 b(extracted)i(from)e(a)g(giv)m(en)i (status)p 1809 3089 V 40 w(v)-5 b(alue;)40 b(message)p 2436 3089 V 42 w(con)m(text)e(m)m(ust)e(b)s(e)g(initialized)i(to)g(0) 390 3199 y(b)m(y)27 b(the)f(application)i(prior)e(to)i(the)f(\014rst)e (call,)k(and)d(gss)p 2279 3199 V 41 w(displa)m(y)p 2598 3199 V 40 w(status)h(will)g(return)e(a)i(non-zero)390 3308 y(v)-5 b(alue)31 b(in)f(this)g(parameter)h(if)f(there)h(are)g (further)e(messages)i(to)g(extract.)390 3447 y(The)81 b(message)p 952 3447 V 41 w(con)m(text)i(parameter)e(con)m(tains)h(all) g(state)h(information)e(required)f(b)m(y)390 3557 y(gss)p 513 3557 V 40 w(displa)m(y)p 831 3557 V 40 w(status)62 b(in)f(order)g(to)h(extract)h(further)d(messages)i(from)f(the)h(status) p 3486 3557 V 40 w(v)-5 b(alue;)390 3667 y(ev)m(en)45 b(when)e(a)i(non-zero)f(v)-5 b(alue)45 b(is)f(returned)f(in)h(this)g (parameter,)49 b(the)44 b(application)h(is)g(not)390 3776 y(required)j(to)h(call)h(gss)p 1202 3776 V 40 w(displa)m(y)p 1520 3776 V 40 w(status)f(again)h(unless)e(subsequen)m(t)g(messages)h (are)g(desired.)390 3886 y(The)36 b(follo)m(wing)h(co)s(de)g(extracts)g (all)g(messages)g(from)f(a)h(giv)m(en)g(status)f(co)s(de)h(and)e(prin)m (ts)h(them)390 3995 y(to)31 b(stderr:)630 4134 y Fj(OM_uint32)45 b(message_context;)630 4244 y(OM_uint32)g(status_code;)630 4354 y(OM_uint32)g(maj_status;)630 4463 y(OM_uint32)g(min_status;)630 4573 y(gss_buffer_desc)f(status_string;)964 4792 y(...)630 5011 y(message_context)g(=)j(0;)630 5230 y(do)g({)725 5340 y(maj_status)e(=)j(gss_display_status)43 b(\()p eop end %%Page: 52 56 TeXDict begin 52 55 bop 150 -116 a Fp(Chapter)30 b(3:)41 b(Standard)29 b(GSS)h(API)2284 b(52)1489 299 y Fj(&min_status,)1489 408 y(status_code,)1489 518 y(GSS_C_GSS_CODE,)1489 628 y(GSS_C_NO_OID,)1489 737 y(&message_context,)1489 847 y(&status_string\))725 1066 y(fprintf\(stderr,)1107 1176 y("\045.*s\\n",)1060 1285 y(\(int\)status_string.leng)o(th,)1060 1504 y(\(char)46 b(*\)status_string.value\);)725 1724 y(gss_release_buffer\(&min_st)o(atus)o(,)c(&status_string\);)630 1943 y(})47 b(while)g(\(message_context)c(!=)k(0\);)390 2081 y Fp(Return)30 b(v)-5 b(alue:)390 2220 y Fj(GSS_S_COMPLETE)p Fp(:)37 b(Successful)30 b(completion.)390 2358 y Fj(GSS_S_BAD_MECH)p Fp(:)i(Indicates)21 b(that)f(translation)i(in)e(accordance)i(with)e(an) g(unsupp)s(orted)d(mec)m(h-)390 2468 y(anism)30 b(t)m(yp)s(e)h(w)m(as)f (requested.)390 2606 y Fj(GSS_S_BAD_STATUS)p Fp(:)61 b(The)41 b(status)i(v)-5 b(alue)43 b(w)m(as)g(not)g(recognized,)k(or)42 b(the)h(status)g(t)m(yp)s(e)g(w)m(as)390 2716 y(neither)30 b(GSS)p 877 2716 28 4 v 40 w(C)p 983 2716 V 39 w(GSS)p 1195 2716 V 40 w(CODE)g(nor)g(GSS)p 1868 2716 V 39 w(C)p 1973 2716 V 40 w(MECH)p 2292 2716 V 40 w(CODE.)150 2919 y Fi(gss)p 316 2919 37 5 v 55 w(indicate)p 794 2919 V 54 w(mec)m(hs)3350 3119 y Fp([F)-8 b(unction])-3599 b Fh(OM_uint32)55 b(gss_indicate_mechs)c Fg(\()p Ff(OM)p 1855 3119 28 4 v 40 w(uin)m(t32)32 b(*)e Fe(minor_status)p Ff(,)565 3229 y(gss)p 688 3229 V 40 w(OID)p 901 3229 V 40 w(set)h(*)g Fe(mech_set)p Fg(\))390 3339 y Ff(minor)p 629 3339 V 40 w(status)t Fp(:)40 b(\(in)m(teger,)33 b(mo)s(dify\))d (Mec)m(hanism)h(sp)s(eci\014c)f(status)h(co)s(de.)390 3477 y Ff(mec)m(h)p 600 3477 V 41 w(set)r Fp(:)40 b(\(set)29 b(of)g(Ob)5 b(ject)29 b(IDs,)g(mo)s(dify\))f(Set)h(of)g(implemen)m (tation-supp)s(orted)g(mec)m(hanisms.)390 3587 y(The)e(returned)e(gss)p 1062 3587 V 41 w(OID)p 1276 3587 V 40 w(set)i(v)-5 b(alue)28 b(will)f(b)s(e)f(a)i(dynamically-allo)s(cated)i(OID)d(set,)h(that)g (should)390 3696 y(b)s(e)i(released)h(b)m(y)f(the)h(caller)g(after)g (use)f(with)g(a)h(call)h(to)f(gss)p 2439 3696 V 40 w(release)p 2741 3696 V 42 w(oid)p 2904 3696 V 40 w(set\(\).)390 3835 y(Allo)m(ws)i(an)f(application)h(to)g(determine)f(whic)m(h)g (underlying)f(securit)m(y)h(mec)m(hanisms)h(are)f(a)m(v)-5 b(ail-)390 3944 y(able.)390 4083 y(Return)30 b(v)-5 b(alue:)390 4221 y Fj(GSS_S_COMPLETE)p Fp(:)37 b(Successful)30 b(completion.)150 4424 y Fi(gss)p 316 4424 37 5 v 55 w(release)p 731 4424 V 54 w(bu\013er)3350 4625 y Fp([F)-8 b(unction])-3599 b Fh(OM_uint32)55 b(gss_release_buffer)c Fg(\()p Ff(OM)p 1855 4625 28 4 v 40 w(uin)m(t32)32 b(*)e Fe(minor_status)p Ff(,)565 4734 y(gss)p 688 4734 V 40 w(bu\013er)p 959 4734 V 39 w(t)h Fe(buffer)p Fg(\))390 4844 y Ff(minor)p 629 4844 V 40 w(status)t Fp(:)40 b(\(in)m(teger,)33 b(mo)s(dify\))d (Mec)m(hanism)h(sp)s(eci\014c)f(status)h(co)s(de.)390 4982 y Ff(bu\013er)7 b Fp(:)44 b(\(bu\013er,)33 b(mo)s(dify\))g(The)f (storage)i(asso)s(ciated)h(with)d(the)h(bu\013er)f(will)h(b)s(e)g (deleted.)48 b(The)390 5092 y(gss)p 513 5092 V 40 w(bu\013er)p 784 5092 V 39 w(desc)31 b(ob)5 b(ject)31 b(will)g(not)f(b)s(e)g(freed,) g(but)g(its)h(length)f(\014eld)g(will)h(b)s(e)f(zero)s(ed.)390 5230 y(F)-8 b(ree)40 b(storage)g(asso)s(ciated)h(with)d(a)i(bu\013er.) 65 b(The)38 b(storage)j(m)m(ust)e(ha)m(v)m(e)h(b)s(een)e(allo)s(cated)j (b)m(y)e(a)390 5340 y(GSS-API)30 b(routine.)42 b(In)30 b(addition)h(to)g(freeing)g(the)g(asso)s(ciated)h(storage,)h(the)d (routine)h(will)g(zero)p eop end %%Page: 53 57 TeXDict begin 53 56 bop 150 -116 a Fp(Chapter)30 b(3:)41 b(Standard)29 b(GSS)h(API)2284 b(53)390 299 y(the)27 b(length)g(\014eld)g(in)g(the)g(descriptor)f(to)i(whic)m(h)f(the)g (bu\013er)f(parameter)h(refers,)h(and)e(implemen-)390 408 y(tations)g(are)g(encouraged)g(to)g(additionally)g(set)g(the)f(p)s (oin)m(ter)h(\014eld)e(in)h(the)h(descriptor)f(to)h(NULL.)390 518 y(An)m(y)f(bu\013er)f(ob)5 b(ject)27 b(returned)d(b)m(y)h(a)g (GSS-API)g(routine)g(ma)m(y)h(b)s(e)f(passed)f(to)i(gss)p 3182 518 28 4 v 41 w(release)p 3485 518 V 41 w(bu\013er)390 628 y(\(ev)m(en)31 b(if)g(there)f(is)h(no)f(storage)i(asso)s(ciated)g (with)e(the)g(bu\013er\).)390 763 y(Return)g(v)-5 b(alue:)390 899 y Fj(GSS_S_COMPLETE)p Fp(:)37 b(Successful)30 b(completion.)150 1099 y Fi(gss)p 316 1099 37 5 v 55 w(release)p 731 1099 V 54 w(oid)p 948 1099 V 55 w(set)3350 1297 y Fp([F)-8 b(unction])-3599 b Fh(OM_uint32)55 b(gss_release_oid_set)c Fg(\()p Ff(OM)p 1907 1297 28 4 v 41 w(uin)m(t32)31 b(*)g Fe(minor_status)p Ff(,)565 1407 y(gss)p 688 1407 V 40 w(OID)p 901 1407 V 40 w(set)g(*)g Fe(set)p Fg(\))390 1517 y Ff(minor)p 629 1517 V 40 w(status)t Fp(:)40 b(\(in)m(teger,)33 b(mo)s(dify\))d(Mec)m(hanism)h(sp)s(eci\014c)f(status)h(co)s(de.)390 1652 y Ff(set)r Fp(:)40 b(\(Set)29 b(of)g(Ob)5 b(ject)28 b(IDs,)h(mo)s(dify\))f(The)g(storage)i(asso)s(ciated)g(with)e(the)h (gss)p 3100 1652 V 40 w(OID)p 3313 1652 V 40 w(set)g(will)g(b)s(e)390 1762 y(deleted.)390 1897 y(F)-8 b(ree)52 b(storage)h(asso)s(ciated)g (with)e(a)h(GSSAPI-generated)g(gss)p 2647 1897 V 40 w(OID)p 2860 1897 V 40 w(set)g(ob)5 b(ject.)105 b(The)50 b(set)390 2007 y(parameter)45 b(m)m(ust)g(refer)f(to)h(an)g(OID-set)h(that)f(w)m (as)g(returned)e(from)i(a)g(GSS-API)f(routine.)390 2117 y(gss)p 513 2117 V 40 w(release)p 815 2117 V 42 w(oid)p 978 2117 V 40 w(set\(\))h(will)f(free)f(the)h(storage)h(asso)s(ciated)g (with)f(eac)m(h)h(individual)e(mem)m(b)s(er)390 2226 y(OID,)31 b(the)f(OID)g(set's)h(elemen)m(ts)h(arra)m(y)-8 b(,)32 b(and)d(the)i(gss)p 2265 2226 V 40 w(OID)p 2478 2226 V 40 w(set)p 2629 2226 V 41 w(desc.)390 2362 y(The)e(gss)p 699 2362 V 40 w(OID)p 912 2362 V 40 w(set)h(parameter)f(is)h(set)f(to)h (GSS)p 2040 2362 V 40 w(C)p 2146 2362 V 39 w(NO)p 2324 2362 V 40 w(OID)p 2537 2362 V 40 w(SET)f(on)g(successful)g(completion) 390 2472 y(of)i(this)f(routine.)390 2607 y(Return)g(v)-5 b(alue:)390 2743 y Fj(GSS_S_COMPLETE)p Fp(:)37 b(Successful)30 b(completion.)150 2943 y Fi(gss)p 316 2943 37 5 v 55 w(create)p 696 2943 V 53 w(empt)m(y)p 1085 2943 V 54 w(oid)p 1302 2943 V 54 w(set)3350 3141 y Fp([F)-8 b(unction])-3599 b Fh(OM_uint32)55 b(gss_create_empty_oid_s)q(et)d Fg(\()p Ff(OM)p 2169 3141 28 4 v 40 w(uin)m(t32)31 b(*)565 3251 y Fe(minor_status)p Ff(,)j(gss)p 1371 3251 V 40 w(OID)p 1584 3251 V 40 w(set)d(*)g Fe(oid_set)p Fg(\))390 3360 y Ff(minor)p 629 3360 V 40 w(status)t Fp(:)40 b(\(in)m(teger,)33 b(mo)s(dify\))d(Mec)m(hanism)h(sp)s(eci\014c)f(status)h(co)s(de.)390 3496 y Ff(oid)p 517 3496 V 40 w(set)r Fp(:)39 b(\(Set)27 b(of)f(Ob)5 b(ject)26 b(IDs,)h(mo)s(dify\))f(The)f(empt)m(y)h(ob)5 b(ject)27 b(iden)m(ti\014er)f(set.)40 b(The)26 b(routine)g(will)390 3606 y(allo)s(cate)34 b(the)e(gss)p 1008 3606 V 40 w(OID)p 1221 3606 V 40 w(set)p 1372 3606 V 41 w(desc)f(ob)5 b(ject,)33 b(whic)m(h)e(the)h(application)h(m)m(ust)e(free)h(after)g(use)f(with) 390 3715 y(a)g(call)g(to)h(gss)p 867 3715 V 40 w(release)p 1169 3715 V 41 w(oid)p 1331 3715 V 40 w(set\(\).)390 3851 y(Create)25 b(an)f(ob)5 b(ject-iden)m(ti\014er)26 b(set)e(con)m(taining)i(no)e(ob)5 b(ject)25 b(iden)m(ti\014ers,)h(to)f (whic)m(h)f(mem)m(b)s(ers)f(ma)m(y)390 3961 y(b)s(e)33 b(subsequen)m(tly)f(added)h(using)g(the)g(gss)p 1852 3961 V 40 w(add)p 2039 3961 V 40 w(oid)p 2200 3961 V 40 w(set)p 2351 3961 V 40 w(mem)m(b)s(er\(\))h(routine.)49 b(These)33 b(routines)390 4070 y(are)27 b(in)m(tended)g(to)h(b)s(e)f (used)f(to)i(construct)f(sets)h(of)f(mec)m(hanism)g(ob)5 b(ject)28 b(iden)m(ti\014ers,)g(for)f(input)f(to)390 4180 y(gss)p 513 4180 V 40 w(acquire)p 838 4180 V 41 w(cred.)390 4315 y(Return)k(v)-5 b(alue:)390 4451 y Fj(GSS_S_COMPLETE)p Fp(:)37 b(Successful)30 b(completion.)150 4652 y Fi(gss)p 316 4652 37 5 v 55 w(test)p 571 4652 V 54 w(oid)p 788 4652 V 55 w(set)p 995 4652 V 54 w(mem)m(b)s(er)3350 4849 y Fp([F)-8 b(unction])-3599 b Fh(OM_uint32)55 b(gss_test_oid_set_membe) q(r)c Fg(\()p Ff(OM)p 2116 4849 28 4 v 41 w(uin)m(t32)31 b(*)g Fe(minor_status)p Ff(,)565 4959 y(const)g(gss)p 926 4959 V 40 w(OID)f Fe(member)p Ff(,)j(const)e(gss)p 1894 4959 V 40 w(OID)p 2107 4959 V 40 w(set)g Fe(set)p Ff(,)g(in)m(t)g(*)g Fe(present)p Fg(\))390 5069 y Ff(minor)p 629 5069 V 40 w(status)t Fp(:)40 b(\(in)m(teger,)33 b(mo)s(dify\))d (Mec)m(hanism)h(sp)s(eci\014c)f(status)h(co)s(de.)390 5204 y Ff(mem)m(b)s(er)7 b Fp(:)40 b(\(Ob)5 b(ject)30 b(ID,)h(read\))g(The)f(ob)5 b(ject)31 b(iden)m(ti\014er)g(whose)f (presence)g(is)h(to)g(b)s(e)e(tested.)390 5340 y Ff(set)r Fp(:)41 b(\(Set)31 b(of)g(Ob)5 b(ject)30 b(ID,)h(read\))g(The)f(Ob)5 b(ject)30 b(Iden)m(ti\014er)g(set.)p eop end %%Page: 54 58 TeXDict begin 54 57 bop 150 -116 a Fp(Chapter)30 b(3:)41 b(Standard)29 b(GSS)h(API)2284 b(54)390 299 y Ff(presen)m(t)r Fp(:)39 b(\(Bo)s(olean,)29 b(mo)s(dify\))e(Non-zero)h(if)f(the)g(sp)s (eci\014ed)f(OID)h(is)f(a)i(mem)m(b)s(er)e(of)h(the)g(set,)h(zero)390 408 y(if)i(not.)390 540 y(In)m(terrogate)41 b(an)f(Ob)5 b(ject)39 b(Iden)m(ti\014er)h(set)g(to)g(determine)f(whether)g(a)h(sp)s (eci\014ed)f(Ob)5 b(ject)39 b(Iden-)390 650 y(ti\014er)e(is)g(a)g(mem)m (b)s(er.)60 b(This)36 b(routine)h(is)g(in)m(tended)g(to)h(b)s(e)e(used) g(with)h(OID)g(sets)g(returned)f(b)m(y)390 759 y(gss)p 513 759 28 4 v 40 w(indicate)p 865 759 V 41 w(mec)m(hs\(\),)k(gss)p 1398 759 V 40 w(acquire)p 1723 759 V 41 w(cred\(\),)g(and)c(gss)p 2366 759 V 40 w(inquire)p 2682 759 V 40 w(cred\(\),)j(but)d(will)i (also)g(w)m(ork)390 869 y(with)30 b(user-generated)h(sets.)390 1000 y(Return)f(v)-5 b(alue:)390 1132 y Fj(GSS_S_COMPLETE)p Fp(:)37 b(Successful)30 b(completion.)150 1325 y Fi(gss)p 316 1325 37 5 v 55 w(encapsulate)p 992 1325 V 54 w(tok)m(en)3350 1516 y Fp([F)-8 b(unction])-3599 b Fh(extern)54 b(OM_uint32)h (gss_encapsulate_token)d Fg(\()p Ff(gss)p 2341 1516 28 4 v 41 w(const)p 2589 1516 V 40 w(bu\013er)p 2860 1516 V 39 w(t)565 1625 y Fe(input_token)p Ff(,)34 b(gss)p 1319 1625 V 40 w(const)p 1566 1625 V 41 w(OID)c Fe(token_oid)p Ff(,)j(gss)p 2453 1625 V 40 w(bu\013er)p 2724 1625 V 40 w(t)d Fe(output_token)p Fg(\))390 1735 y Ff(input)p 609 1735 V 39 w(tok)m(en)p Fp(:)42 b(\(bu\013er,)30 b(opaque,)h(read\)) f(Bu\013er)h(with)f(GSS-API)g(con)m(text)i(tok)m(en)f(data.)390 1866 y Ff(tok)m(en)p 612 1866 V 41 w(oid)t Fp(:)41 b(\(Ob)5 b(ject)30 b(ID,)h(read\))g(Ob)5 b(ject)30 b(iden)m(ti\014er)h(of)g(tok) m(en.)390 1998 y Ff(output)p 664 1998 V 40 w(tok)m(en)p Fp(:)41 b(\(bu\013er,)30 b(opaque,)h(mo)s(dify\))f(Encapsulated)g(tok)m (en)h(data;)g(caller)h(m)m(ust)e(release)390 2107 y(with)g(gss)p 720 2107 V 40 w(release)p 1022 2107 V 42 w(bu\013er\(\).)390 2239 y(Add)e(the)g(mec)m(hanism-indep)s(enden)m(t)g(tok)m(en)i(header)e (to)i(GSS-API)e(con)m(text)i(tok)m(en)g(data.)41 b(This)390 2348 y(is)33 b(used)g(for)g(the)h(initial)g(tok)m(en)h(of)e(a)h (GSS-API)f(con)m(text)i(establishmen)m(t)f(sequence.)50 b(It)33 b(incor-)390 2458 y(p)s(orates)f(an)f(iden)m(ti\014er)h(of)g (the)g(mec)m(hanism)g(t)m(yp)s(e)g(to)g(b)s(e)g(used)e(on)i(that)g(con) m(text,)j(and)c(enables)390 2567 y(tok)m(ens)e(to)h(b)s(e)e(in)m (terpreted)g(unam)m(biguously)g(at)h(GSS-API)f(p)s(eers.)40 b(See)28 b(further)g(section)h(3.1)h(of)390 2677 y(RF)m(C)h(2743.)42 b(This)30 b(function)g(is)g(standardized)g(in)g(RF)m(C)h(6339.)390 2808 y(Returns:)390 2940 y Fj(GSS_S_COMPLETE)p Fp(:)36 b(Indicates)29 b(successful)f(completion,)j(and)c(that)i(output)g (parameters)f(holds)390 3050 y(correct)k(information.)390 3181 y Fj(GSS_S_FAILURE)p Fp(:)59 b(Indicates)42 b(that)g (encapsulation)g(failed)g(for)f(reasons)h(unsp)s(eci\014ed)e(at)i(the) 390 3291 y(GSS-API)30 b(lev)m(el.)150 3484 y Fi(gss)p 316 3484 37 5 v 55 w(decapsulate)p 992 3484 V 54 w(tok)m(en)3350 3674 y Fp([F)-8 b(unction])-3599 b Fh(OM_uint32)55 b (gss_decapsulate_token)d Fg(\()p Ff(gss)p 1975 3674 28 4 v 40 w(const)p 2222 3674 V 41 w(bu\013er)p 2494 3674 V 39 w(t)31 b Fe(input_token)p Ff(,)565 3784 y(gss)p 688 3784 V 40 w(const)p 935 3784 V 41 w(OID)f Fe(token_oid)p Ff(,)j(gss)p 1822 3784 V 41 w(bu\013er)p 2094 3784 V 39 w(t)d Fe(output_token)p Fg(\))390 3894 y Ff(input)p 609 3894 V 39 w(tok)m(en)p Fp(:)42 b(\(bu\013er,)30 b(opaque,)h(read\)) f(Bu\013er)h(with)f(GSS-API)g(con)m(text)i(tok)m(en.)390 4025 y Ff(tok)m(en)p 612 4025 V 41 w(oid)t Fp(:)41 b(\(Ob)5 b(ject)30 b(ID,)h(read\))g(Exp)s(ected)f(ob)5 b(ject)31 b(iden)m(ti\014er)g(of)g(tok)m(en.)390 4157 y Ff(output)p 664 4157 V 40 w(tok)m(en)p Fp(:)42 b(\(bu\013er,)30 b(opaque,)h(mo)s (dify\))f(Decapsulated)i(tok)m(en)f(data;)h(caller)f(m)m(ust)g(release) 390 4266 y(with)f(gss)p 720 4266 V 40 w(release)p 1022 4266 V 42 w(bu\013er\(\).)390 4398 y(Remo)m(v)m(e)37 b(the)f(mec)m(hanism-indep)s(enden)m(t)f(tok)m(en)h(header)f(from)g(an) h(initial)g(GSS-API)f(con)m(text)390 4507 y(tok)m(en.)71 b(Un)m(wrap)40 b(a)h(bu\013er)e(in)h(the)g(mec)m(hanism-indep)s(enden)m (t)g(tok)m(en)h(format.)71 b(This)39 b(is)i(the)390 4617 y(rev)m(erse)34 b(of)g(gss)p 927 4617 V 40 w(encapsulate)p 1426 4617 V 41 w(tok)m(en\(\).)52 b(The)33 b(translation)h(is)g (loss-less,)h(all)g(data)f(is)f(preserv)m(ed)390 4726 y(as)e(is.)40 b(This)30 b(function)g(is)g(standardized)h(in)f(RF)m(C)g (6339.)390 4858 y(Return)g(v)-5 b(alue:)390 4989 y Fj(GSS_S_COMPLETE)p Fp(:)36 b(Indicates)29 b(successful)f(completion,)j(and)c(that)i (output)g(parameters)f(holds)390 5099 y(correct)k(information.)390 5230 y Fj(GSS_S_DEFECTIVE_TOKEN)p Fp(:)j(Means)c(that)g(the)g(tok)m(en) g(failed)g(consistency)h(c)m(hec)m(ks)g(\(e.g.,)g(OID)390 5340 y(mismatc)m(h)f(or)f(ASN.1)h(DER)g(length)g(errors\).)p eop end %%Page: 55 59 TeXDict begin 55 58 bop 150 -116 a Fp(Chapter)30 b(3:)41 b(Standard)29 b(GSS)h(API)2284 b(55)390 299 y Fj(GSS_S_FAILURE)p Fp(:)59 b(Indicates)42 b(that)g(decapsulation)g(failed)g(for)f(reasons) h(unsp)s(eci\014ed)e(at)i(the)390 408 y(GSS-API)30 b(lev)m(el.)150 600 y Fi(gss)p 316 600 37 5 v 55 w(oid)p 534 600 V 55 w(equal)3350 788 y Fp([F)-8 b(unction])-3599 b Fh(int)53 b(gss_oid_equal)d Fg(\()p Ff(gss)p 1243 788 28 4 v 40 w(const)p 1490 788 V 41 w(OID)30 b Fe(first_oid)p Ff(,)j(gss)p 2377 788 V 40 w(const)p 2624 788 V 41 w(OID)565 898 y Fe(second_oid)p Fg(\))390 1008 y Ff(\014rst)p 554 1008 V 39 w(oid)t Fp(:)41 b(\(Ob)5 b(ject)31 b(ID,)f(read\))h(First)g(Ob)5 b(ject)30 b(iden)m(ti\014er.)390 1138 y Ff(second)p 659 1138 V 40 w(oid)t Fp(:)41 b(\(Ob)5 b(ject)30 b(ID,)h(read\))g(First)g (Ob)5 b(ject)30 b(iden)m(ti\014er.)390 1269 y(Compare)43 b(t)m(w)m(o)h(OIDs)f(for)g(equalit)m(y)-8 b(.)80 b(The)43 b(comparison)g(is)g Fj(")p Fp(deep)p Fj(")p Fp(,)i(i.e.,)j(the)43 b(actual)h(b)m(yte)390 1378 y(sequences)23 b(of)g(the)g(OIDs)g(are)g (compared)g(instead)g(of)h(just)e(the)h(p)s(oin)m(ter)g(equalit)m(y)-8 b(.)40 b(This)22 b(function)390 1488 y(is)30 b(standardized)h(in)f(RF)m (C)g(6339.)390 1618 y(Return)35 b(v)-5 b(alue:)52 b(Returns)35 b(b)s(o)s(olean)h(v)-5 b(alue)37 b(true)e(when)g(the)h(t)m(w)m(o)i (OIDs)d(are)h(equal,)j(otherwise)390 1728 y(false.)150 1952 y Fo(3.10)68 b(SASL)44 b(GS2)g(Routines)150 2172 y Fi(gss)p 316 2172 37 5 v 55 w(inquire)p 746 2172 V 55 w(mec)m(h)p 1079 2172 V 53 w(for)p 1280 2172 V 55 w(saslname)3350 2361 y Fp([F)-8 b(unction])-3599 b Fh(OM_uint32)55 b(gss_inquire_mech_for_s)q(asl)q(nam)q(e)c Fg(\()p Ff(OM)p 2430 2361 28 4 v 41 w(uin)m(t32)31 b(*)565 2471 y Fe(minor_status)p Ff(,)j(const)d(gss)p 1609 2471 V 40 w(bu\013er)p 1880 2471 V 39 w(t)g Fe(sasl_mech_name)p Ff(,)k(gss)p 2890 2471 V 40 w(OID)30 b(*)h Fe(mech_type)p Fg(\))390 2580 y Ff(minor)p 629 2580 V 40 w(status)t Fp(:)40 b(\(In)m(teger,)32 b(mo)s(dify\))e(Mec)m(hanism)h(sp)s(eci\014c)g(status)f(co)s(de.)390 2711 y Ff(sasl)p 538 2711 V 40 w(mec)m(h)p 782 2711 V 41 w(name)5 b Fp(:)39 b(\(bu\013er,)26 b(c)m(haracter-string,)j(read\)) d(Bu\013er)g(with)g(SASL)e(mec)m(hanism)j(name.)390 2841 y Ff(mec)m(h)p 600 2841 V 41 w(t)m(yp)s(e)5 b Fp(:)42 b(\(OID,)32 b(mo)s(dify)-8 b(,)31 b(optional\))i(Actual)f(mec)m(hanism) f(used.)43 b(The)30 b(OID)h(returned)f(via)390 2951 y(this)d(parameter) h(will)g(b)s(e)f(a)h(p)s(oin)m(ter)f(to)i(static)g(storage)g(that)f (should)e(b)s(e)h(treated)i(as)e(read-only;)390 3060 y(In)42 b(particular)g(the)h(application)g(should)f(not)g(attempt)i(to) f(free)f(it.)78 b(Sp)s(ecify)41 b(NULL)h(if)h(not)390 3170 y(required.)390 3300 y(Output)98 b(GSS-API)h(mec)m(hanism)h(OID)f (of)g(mec)m(hanism)h(asso)s(ciated)h(with)e(giv)m(en)390 3410 y(@sasl)p 609 3410 V 40 w(mec)m(h)p 853 3410 V 41 w(name.)390 3541 y(Returns:)390 3671 y Fj(GSS_S_COMPLETE)p Fp(:)37 b(Successful)30 b(completion.)390 3801 y Fj(GSS_S_BAD_MECH)p Fp(:)37 b(There)30 b(is)g(no)g(GSS-API)g(mec)m(hanism)h(kno)m(wn)f(as)g (@sasl)p 3086 3801 V 41 w(mec)m(h)p 3331 3801 V 40 w(name.)150 3993 y Fi(gss)p 316 3993 37 5 v 55 w(inquire)p 746 3993 V 55 w(saslname)p 1277 3993 V 54 w(for)p 1479 3993 V 55 w(mec)m(h)3350 4181 y Fp([F)-8 b(unction])-3599 b Fh(OM_uint32)55 b(gss_inquire_saslname_f)q(or_)q(mec)q(h)c Fg(\()p Ff(OM)p 2430 4181 28 4 v 41 w(uin)m(t32)31 b(*)565 4291 y Fe(minor_status)p Ff(,)j(const)d(gss)p 1609 4291 V 40 w(OID)g Fe(desired_mech)p Ff(,)j(gss)p 2653 4291 V 40 w(bu\013er)p 2924 4291 V 39 w(t)565 4401 y Fe(sasl_mech_name)p Ff(,)h(gss)p 1476 4401 V 40 w(bu\013er)p 1747 4401 V 39 w(t)c Fe(mech_name)p Ff(,)i(gss)p 2495 4401 V 40 w(bu\013er)p 2766 4401 V 39 w(t)e Fe(mech_description)p Fg(\))390 4510 y Ff(minor)p 629 4510 V 40 w(status)t Fp(:)40 b(\(In)m(teger,)32 b(mo)s(dify\))e(Mec)m(hanism)h(sp)s(eci\014c)g(status)f(co)s(de.)390 4641 y Ff(desired)p 675 4641 V 40 w(mec)m(h)p Fp(:)41 b(\(OID,)31 b(read\))f(Iden)m(ti\014es)h(the)f(GSS-API)g(mec)m(hanism)h (to)g(query)-8 b(.)390 4771 y Ff(sasl)p 538 4771 V 40 w(mec)m(h)p 782 4771 V 41 w(name)5 b Fp(:)46 b(\(bu\013er,)34 b(c)m(haracter-string,)i(mo)s(dify)-8 b(,)33 b(optional\))i(Bu\013er)e (to)h(receiv)m(e)h(SASL)390 4881 y(mec)m(hanism)c(name.)40 b(The)30 b(application)i(m)m(ust)e(free)h(storage)h(asso)s(ciated)g (with)e(this)g(name)g(after)390 4990 y(use)g(with)g(a)h(call)h(to)f (gss)p 1231 4990 V 40 w(release)p 1533 4990 V 41 w(bu\013er\(\).)390 5121 y Ff(mec)m(h)p 600 5121 V 41 w(name)5 b Fp(:)36 b(\(bu\013er,)23 b(c)m(haracter-string,)j(mo)s(dify)-8 b(,)23 b(optional\))h(Bu\013er)d(to)i(receiv)m(e)h(h)m(uman)d(read-)390 5230 y(able)33 b(mec)m(hanism)f(name.)46 b(The)32 b(application)h(m)m (ust)f(free)h(storage)g(asso)s(ciated)h(with)e(this)g(name)390 5340 y(after)f(use)f(with)g(a)h(call)g(to)h(gss)p 1446 5340 V 40 w(release)p 1748 5340 V 41 w(bu\013er\(\).)p eop end %%Page: 56 60 TeXDict begin 56 59 bop 150 -116 a Fp(Chapter)30 b(3:)41 b(Standard)29 b(GSS)h(API)2284 b(56)390 299 y Ff(mec)m(h)p 600 299 28 4 v 41 w(description)p Fp(:)60 b(\(bu\013er,)42 b(c)m(haracter-string,)j(mo)s(dify)-8 b(,)43 b(optional\))f(Bu\013er)e (to)h(receiv)m(e)h(de-)390 408 y(scription)29 b(of)f(mec)m(hanism.)40 b(The)28 b(application)i(m)m(ust)e(free)h(storage)h(asso)s(ciated)g (with)e(this)g(name)390 518 y(after)j(use)f(with)g(a)h(call)g(to)h(gss) p 1446 518 V 40 w(release)p 1748 518 V 41 w(bu\013er\(\).)390 653 y(Output)25 b(the)i(SASL)f(mec)m(hanism)g(name)h(of)g(a)g(GSS-API)f (mec)m(hanism.)39 b(It)27 b(also)h(returns)d(a)i(name)390 762 y(and)j(description)g(of)h(the)f(mec)m(hanism)h(in)f(a)h(user)e (friendly)h(form.)390 897 y(Returns:)390 1031 y Fj(GSS_S_COMPLETE)p Fp(:)37 b(Successful)30 b(completion.)390 1166 y Fj(GSS_S_BAD_MECH)p Fp(:)37 b(The)30 b(@desired)p 1667 1166 V 39 w(mec)m(h)h(OID)f(is)g (unsupp)s(orted.)p eop end %%Page: 57 61 TeXDict begin 57 60 bop 150 -116 a Fp(Chapter)30 b(4:)41 b(Extended)30 b(GSS)f(API)2271 b(57)150 299 y Fm(4)80 b(Extended)52 b(GSS)h(API)150 533 y Fp(None)38 b(of)g(the)h(follo)m (wing)g(functions)e(are)i(standard)e(GSS)g(API)h(functions.)63 b(As)38 b(suc)m(h,)h(they)f(are)h(not)150 643 y(declared)45 b(in)g Fj(gss/api.h)p Fp(,)h(but)f(rather)f(in)h Fj(gss/ext.h)e Fp(\(whic)m(h)i(is)g(included)f(from)g Fj(gss.h)p Fp(\).)84 b(See)150 752 y(Section)31 b(2.1)h([Header],)f(page)g(7.)150 951 y Fi(gss)p 316 951 37 5 v 55 w(c)m(hec)m(k)p 664 951 V 52 w(v)m(ersion)3350 1148 y Fp([F)-8 b(unction])-3599 b Fh(const)54 b(char)f(*)g(gss_check_version)e Fg(\()p Ff(const)31 b(c)m(har)g(*)f Fe(req_version)p Fg(\))390 1258 y Ff(req)p 520 1258 28 4 v 40 w(v)m(ersion)p Fp(:)41 b(v)m(ersion)31 b(string)f(to)h(compare)g(with,)g(or)f(NULL)390 1392 y(Chec)m(k)42 b(that)g(the)g(v)m(ersion)g(of)f(the)h(library)f(is) g(at)i(minim)m(um)d(the)i(one)g(giv)m(en)g(as)g(a)g(string)f(in)390 1502 y(@req)p 591 1502 V 40 w(v)m(ersion.)390 1636 y(Return)32 b(v)-5 b(alue:)45 b(The)31 b(actual)j(v)m(ersion)f(string)f(of)h(the)f (library;)h(NULL)g(if)f(the)g(condition)h(is)g(not)390 1746 y(met.)41 b(If)30 b(NULL)g(is)g(passed)g(to)h(this)f(function)g (no)g(c)m(hec)m(k)i(is)e(done)g(and)g(only)g(the)g(v)m(ersion)h(string) 390 1856 y(is)f(returned.)150 2055 y Fi(gss)p 316 2055 37 5 v 55 w(userok)3350 2252 y Fp([F)-8 b(unction])-3599 b Fh(int)53 b(gss_userok)c Fg(\()p Ff(const)31 b(gss)p 1324 2252 28 4 v 40 w(name)p 1576 2252 V 40 w(t)g Fe(name)p Ff(,)h(const)f(c)m(har)f(*)h Fe(username)p Fg(\))390 2361 y Ff(name)5 b Fp(:)41 b(\(gss)p 831 2361 V 40 w(name)p 1083 2361 V 41 w(t,)30 b(read\))h(Name)g(to)g(b)s(e)f(compared.)390 2496 y Ff(username)5 b Fp(:)40 b(Zero)31 b(terminated)f(string)h(with)f (username.)390 2630 y(Compare)56 b(the)g(username)g(against)h(the)f (output)g(from)g(gss)p 2627 2630 V 40 w(exp)s(ort)p 2925 2630 V 40 w(name\(\))h(in)m(v)m(ok)m(ed)g(on)390 2740 y(@name,)50 b(after)d(remo)m(ving)f(the)h(leading)f(OID.)h(This)e(answ) m(ers)h(the)g(question)g(whether)g(the)390 2849 y(particular)31 b(mec)m(hanism)f(w)m(ould)h(authen)m(ticate)h(them)f(as)f(the)h(same)g (principal)390 2984 y(Return)f(v)-5 b(alue:)41 b(Returns)29 b(0)i(if)f(the)h(names)f(matc)m(h,)i(non-0)e(otherwise.)p eop end %%Page: 58 62 TeXDict begin 58 61 bop 150 -116 a Fp(Chapter)30 b(5:)41 b(In)m(v)m(oking)31 b(gss)2556 b(58)150 299 y Fm(5)80 b(In)l(v)l(oking)52 b(gss)150 838 y(Name)150 1145 y Fp(GNU)31 b(GSS)f(\(gss\))h({)g(Command)e(line)i(in)m(terface)h(to)f(the)f(GSS)g (Library)-8 b(.)150 1533 y Fm(Description)150 1839 y Fj(gss)29 b Fp(is)i(the)f(main)h(program)f(of)g(GNU)h(GSS.)275 1998 y(Mandatory)25 b(or)g(optional)h(argumen)m(ts)f(to)h(long)f (options)h(are)f(also)h(mandatory)f(or)g(optional)h(for)f(an)m(y)150 2108 y(corresp)s(onding)k(short)h(options.)150 2490 y Fm(Commands)150 2797 y Fj(gss)f Fp(recognizes)k(these)d(commands:)245 2955 y Fj(-l,)47 b(--list-mechanisms)1105 3065 y(List)f(information)f (about)h(supported)g(mechanisms)1105 3175 y(in)h(a)g(human)g(readable)e (format.)245 3284 y(-m,)i(--major=LONG)93 b(Describe)45 b(a)j(`major)e(status')f(error)i(code)f(value.)245 3394 y(-a,)h(--accept-sec-context)1105 3503 y(Accept)f(a)h(security)f (context)f(as)j(server.)245 3613 y(-i,)f(--init-sec-context=MECH)1105 3722 y(Initialize)e(a)i(security)f(context)f(as)j(client.)1105 3832 y(MECH)e(is)h(the)g(SASL)g(name)g(of)g(mechanism,)e(use)i(-l)1105 3942 y(to)g(list)f(supported)g(mechanisms.)245 4051 y(-n,)h (--server-name=SERVICE@HOST)o(NAM)o(E)1105 4161 y(For)f(-i,)h(set)g (the)g(name)g(of)g(the)g(remote)f(host.)1105 4270 y(For)g(example,)g ("imap@mail.example.com".)150 4655 y Fm(Other)53 b(Options)150 4962 y Fp(These)30 b(are)h(some)g(standard)e(parameters.)245 5121 y Fj(-h,)47 b(--help)381 b(Print)46 b(help)h(and)f(exit)245 5230 y(-V,)h(--version)237 b(Print)46 b(version)g(and)h(exit)245 5340 y(-q,)g(--quiet)333 b(Silent)46 b(operation)93 b(\(default=off\))p eop end %%Page: 59 63 TeXDict begin 59 62 bop 150 -116 a Fp(Chapter)30 b(5:)41 b(In)m(v)m(oking)31 b(gss)2556 b(59)150 299 y Fm(Examples)150 533 y Fp(T)-8 b(o)31 b(list)g(the)f(supp)s(orted)f(mec)m(hanisms,)i (use)f Fj(gss)f(-l)h Fp(lik)m(e)i(this:)150 667 y Fj($)47 b(src/gss)f(-l)150 777 y(Found)g(1)i(supported)d(mechanisms.)150 996 y(Mechanism)g(0:)532 1106 y(Mechanism)g(name:)h(Kerberos)g(V5)532 1215 y(Mechanism)f(description:)g(Kerberos)g(V5)i(GSS-API)f(mechanism) 532 1325 y(SASL)g(Mechanism)g(name:)g(GS2-KRB5)150 1435 y($)275 1569 y Fp(T)-8 b(o)35 b(initialize)i(a)e(Kerb)s(eros)f(V5)h (securit)m(y)h(con)m(text,)i(use)c(the)h Fj(--init-sec-context)30 b Fp(parameter.)150 1679 y(Kerb)s(eros)k(V5)i(needs)f(to)h(kno)m(w)f (the)g(name)g(of)h(the)f(remote)h(en)m(tit)m(y)-8 b(,)39 b(so)c(y)m(ou)h(need)f(to)g(supply)f(the)i Fj(--)150 1788 y(server-name)c Fp(parameter)k(as)g(w)m(ell.)56 b(That)35 b(will)h(pro)m(vide)f(the)h(name)f(of)h(the)f(serv)m(er.)56 b(F)-8 b(or)36 b(example,)150 1898 y(use)29 b Fj(imap@mail.example.com) 24 b Fp(to)30 b(setup)f(a)g(securit)m(y)i(con)m(text)g(with)e(the)h Fj(imap)e Fp(service)i(on)f(the)h(host)150 2007 y Fj(mail.example.com)p Fp(.)73 b(The)41 b(Kerb)s(eros)h(V5)h(clien)m(t)h(will)f(use)f(y)m(our) g(tic)m(k)m(et-gran)m(ting)47 b(tic)m(k)m(et)e(\(whic)m(h)150 2117 y(needs)38 b(to)i(b)s(e)e(a)m(v)-5 b(ailable\))42 b(and)c(acquire)h(a)g(serv)m(er)g(tic)m(k)m(et)j(for)d(the)g(service.) 66 b(The)39 b(KDC)f(m)m(ust)h(kno)m(w)150 2227 y(ab)s(out)33 b(the)g(serv)m(er)g(for)g(this)g(to)g(w)m(ork.)49 b(The)33 b(to)s(ol)h(will)f(prin)m(t)f(the)i(GSS-API)e(con)m(text)j(tok)m(ens)f (base64)150 2336 y(enco)s(ded)c(on)g(standard)g(output.)150 2471 y Fj($)47 b(gss)g(-i)h(GS2-KRB5)d(-n)i(host@interop.josefsson.or)o (g)150 2580 y(Context)f(token)g(\(protection)f(is)i(available\):)150 2690 y(YIICIQYJKoZIhvcSAQICAQBu)o(ggIQ)o(MIIC)o(DKA)o(DAgE)o(FoQM)o (CAQ)o(6iBw)o(MFAC)o(AAA)o(ACjg)o(gEYY)o(YIB)o(FDCC)o(ARCg)o(AwI)o (BBaE)o(XGxV)o(pbn)o(Rlcm)o(9wL)o(mpvc)o(2Vmc)o(3Nv)o(bi5v)o(cmei)o (KDA)o(moAM)o(CAQG)o(hHz)o(AdGw)o(Rob3)o(N0G)o(xVpb)o(nRlc)o(m9w)o (Lmpv)o(c2Vm)o(c3N)o(vbi5)o(vcme)o(jgc)o(Uwgc)o(KgAw)o(IBE)o(qKBu)o (gSBt)o(0zq)o(Th6t)o(BBKV)o(2Bw)o(DjQg)o(6H4a)o(bEa)o(PshP)o(a0o3)o (tT/)o(TH9U)o(7BaS)o(w/M)o(9ugY)o(YqpH)o(AhO)o(itVj)o(cQid)o(hG2)o (FdSl)o(1n3)o(FOgD)o(BufH)o(HO+)o(gHOW)o(0Y1X)o(Hc2)o(QtEd)o(kg1x)o (YF2)o(J4iR)o(1vNQ)o(B14)o(kXDM)o(78po)o(gCs)o(fvfL)o(njsE)o(ESK)o (WoeK)o(RGOY)o(WPR)o(x0ks)o(LJDn)o(l/e)o(5tXe)o(cZTj)o(hJ3)o(hLrF)o (NBEW)o(Rmp)o(IOak)o(TAPn)o(L+X)o(zz6x)o(cnLH)o(MLL)o(nhZ5)o(VcHq)o (tIM)o(m5p9)o(IDWs)o(P0j)o(uInc)o(J6tO)o(8hj)o(MA2q)o(SB2)o(jCB1)o (6ADA)o(gES)o(ooHP)o(BIHM)o(WSe)o(RBgV)o(80gh)o(/6h)o(NNMr)o(00jT)o (VwC)o(s5TE)o(AIkl)o(jvj)o(OfyP)o(mNBz)o(IFW)o(oG+W)o(j5ZK)o(OBd)o (izdi)o(7vYb)o(J2s)o(8b1i)o(Ssq/)o(9YE)o(ZSqa)o(Txul)o(+5a)o(Nrcl)o (KoJ7)o(J/I)o(W4kT)o(uMkl)o(HcQ)o(f/A1)o(6TeZ)o(Fsm)o(9Tdf)o(E+x8)o (+Pj)o(bOBF)o(tKYX)o(T8O)o(DT8L)o(LicN)o(NiD)o(bWW0)o(meY)o(7lsk)o (tXAV)o(pZi)o(Uds4)o(wTZ1)o(W5b)o(OSEG)o(Y7+m)o(xAW)o(rAlT)o(nNwN)o (At1)o(J2MH)o(ZnfG)o(JFJ)o(DLJZ)o(ldXo)o(yG8)o(OwHy)o(p4h1)o(nBh)o (gzC5)o(BfAm)o(L85)o(QJVx)o(xgVf)o(iHh)o(M5oT)o(9mE1)o(O)150 2800 y(Input)f(context)g(token:)275 3044 y Fp(The)34 b(to)s(ol)i(is)f(w)m(aiting)h(for)e(the)h(\014nal)g(Kerb)s(eros)f(V5)h (con)m(text)i(tok)m(en)f(from)e(the)h(serv)m(er.)55 b(Note)36 b(the)150 3153 y(status)31 b(text)g(informing)f(y)m(ou)h(that)g (message)g(protection)h(is)e(a)m(v)-5 b(ailable.)275 3288 y(T)d(o)34 b(accept)h(a)g(Kerb)s(eros)d(V5)j(con)m(text,)i(the)d (pro)s(cess)f(is)h(similar.)52 b(The)33 b(serv)m(er)h(needs)g(to)h(kno) m(w)f(its)150 3397 y(name,)h(so)e(that)h(it)g(can)g(\014nd)e(the)i (host)f(k)m(ey)h(from)f(\(t)m(ypically\))j Fj(/etc/shishi/shishi.keys)p Fp(.)44 b(Once)150 3507 y(started)e(it)f(will)h(w)m(ait)g(for)f(a)h (con)m(text)h(tok)m(en)f(from)f(the)h(clien)m(t.)74 b(Belo)m(w)43 b(w)m(e'll)g(paste)e(in)g(the)h(tok)m(en)150 3616 y(prin)m(ted)30 b(ab)s(o)m(v)m(e.)150 3751 y Fj($)47 b(gss)g(-a)h(-n)f (host@interop.josefsson.)o(org)150 3861 y(Importing)e(name)i ("host@interop.josefsson.)o(org")o(...)150 3970 y(Acquiring)e (credentials...)150 4080 y(Input)h(context)g(token:)150 4189 y(YIICIQYJKoZIhvcSAQICAQBu)o(ggIQ)o(MIIC)o(DKA)o(DAgE)o(FoQM)o (CAQ)o(6iBw)o(MFAC)o(AAA)o(ACjg)o(gEYY)o(YIB)o(FDCC)o(ARCg)o(AwI)o (BBaE)o(XGxV)o(pbn)o(Rlcm)o(9wL)o(mpvc)o(2Vmc)o(3Nv)o(bi5v)o(cmei)o (KDA)o(moAM)o(CAQG)o(hHz)o(AdGw)o(Rob3)o(N0G)o(xVpb)o(nRlc)o(m9w)o (Lmpv)o(c2Vm)o(c3N)o(vbi5)o(vcme)o(jgc)o(Uwgc)o(KgAw)o(IBE)o(qKBu)o (gSBt)o(0zq)o(Th6t)o(BBKV)o(2Bw)o(DjQg)o(6H4a)o(bEa)o(PshP)o(a0o3)o (tT/)o(TH9U)o(7BaS)o(w/M)o(9ugY)o(YqpH)o(AhO)o(itVj)o(cQid)o(hG2)o (FdSl)o(1n3)o(FOgD)o(BufH)o(HO+)o(gHOW)o(0Y1X)o(Hc2)o(QtEd)o(kg1x)o (YF2)o(J4iR)o(1vNQ)o(B14)o(kXDM)o(78po)o(gCs)o(fvfL)o(njsE)o(ESK)o (WoeK)o(RGOY)o(WPR)o(x0ks)o(LJDn)o(l/e)o(5tXe)o(cZTj)o(hJ3)o(hLrF)o (NBEW)o(Rmp)o(IOak)o(TAPn)o(L+X)o(zz6x)o(cnLH)o(MLL)o(nhZ5)o(VcHq)o (tIM)o(m5p9)o(IDWs)o(P0j)o(uInc)o(J6tO)o(8hj)o(MA2q)o(SB2)o(jCB1)o (6ADA)o(gES)o(ooHP)o(BIHM)o(WSe)o(RBgV)o(80gh)o(/6h)o(NNMr)o(00jT)o (VwC)o(s5TE)o(AIkl)o(jvj)o(OfyP)o(mNBz)o(IFW)o(oG+W)o(j5ZK)o(OBd)o (izdi)o(7vYb)o(J2s)o(8b1i)o(Ssq/)o(9YE)o(ZSqa)o(Txul)o(+5a)o(Nrcl)o (KoJ7)o(J/I)o(W4kT)o(uMkl)o(HcQ)o(f/A1)o(6TeZ)o(Fsm)o(9Tdf)o(E+x8)o (+Pj)o(bOBF)o(tKYX)o(T8O)o(DT8L)o(LicN)o(NiD)o(bWW0)o(meY)o(7lsk)o (tXAV)o(pZi)o(Uds4)o(wTZ1)o(W5b)o(OSEG)o(Y7+m)o(xAW)o(rAlT)o(nNwN)o (At1)o(J2MH)o(ZnfG)o(JFJ)o(DLJZ)o(ldXo)o(yG8)o(OwHy)o(p4h1)o(nBh)o (gzC5)o(BfAm)o(L85)o(QJVx)o(xgVf)o(iHh)o(M5oT)o(9mE1)o(O)150 4299 y(Context)g(has)h(been)f(accepted.)93 b(Final)47 b(context)f(token:)150 4408 y(YHEGCSqGSIb3EgECAgIAb2Iw)o(YKAD)o(AgEF)o (oQM)o(CAQ+)o(iVDB)o(SoA)o(MCAR)o(KhAw)o(IBA)o(KJGB)o(ESy1)o(Zoy)o (9DrG)o(+DuV)o(/6a)o(WmAp)o(79s9)o(d+o)o(fGXC)o(/WK)o(OzRu)o(xAqo)o (98v)o(MRWb)o(sbIL)o(W8z)o(9aF1)o(th4G)o(Zz0)o(kjFz)o(/hZA)o(mnW)o (yomZ)o(9JiP)o(3yQ)o(vg==)150 4518 y($)275 4653 y Fp(Returning)34 b(to)i(the)g(clien)m(t,)i(y)m(ou)e(ma)m(y)g(no)m(w)f(cut'n'paste)i(the) e(\014nal)g(con)m(text)i(tok)m(en)g(as)e(sho)m(wn)g(b)m(y)150 4762 y(the)27 b(serv)m(er.)39 b(The)26 b(clien)m(t)j(has)d(then)g (authen)m(ticated)j(the)d(serv)m(er)h(as)g(w)m(ell.)40 b(The)26 b(output)h(from)f(the)g(clien)m(t)150 4872 y(is)k(sho)m(wn)g (b)s(elo)m(w.)150 5006 y Fj(YHEGCSqGSIb3EgECAgIAb2Iw)o(YKAD)o(AgEF)o (oQM)o(CAQ+)o(iVDB)o(SoA)o(MCAR)o(KhAw)o(IBA)o(KJGB)o(ESy1)o(Zoy)o (9DrG)o(+DuV)o(/6a)o(WmAp)o(79s9)o(d+o)o(fGXC)o(/WK)o(OzRu)o(xAqo)o (98v)o(MRWb)o(sbIL)o(W8z)o(9aF1)o(th4G)o(Zz0)o(kjFz)o(/hZA)o(mnW)o (yomZ)o(9JiP)o(3yQ)o(vg==)150 5116 y(Context)46 b(has)h(been)f (initialized.)150 5225 y($)p eop end %%Page: 60 64 TeXDict begin 60 63 bop 150 -116 a Fp(Chapter)30 b(6:)41 b(Ac)m(kno)m(wledgemen)m(ts)2296 b(60)150 299 y Fm(6)80 b(Ac)l(kno)l(wledgemen)l(ts)150 533 y Fp(This)29 b(man)m(ual)h(b)s (orro)m(ws)f(text)i(from)e(RF)m(C)h(2743)i(and)d(RF)m(C)h(2744)i(that)e (describ)s(e)f(GSS)g(API)h(formally)-8 b(.)p eop end %%Page: 61 65 TeXDict begin 61 64 bop 150 -116 a Fp(App)s(endix)29 b(A:)h(Criticism)h(of)g(GSS)2297 b(61)150 299 y Fm(App)t(endix)52 b(A)81 b(Criticism)52 b(of)i(GSS)150 551 y Fp(The)31 b(author)g(has)h(doubts)e(whether)h(GSS)g(is)g(the)h(b)s(est)f (solution)h(for)g(free)f(soft)m(w)m(are)i(pro)5 b(jects)32 b(lo)s(oking)150 661 y(for)c(a)g(implemen)m(tation)i(agnostic)g (securit)m(y)e(framew)m(ork.)40 b(W)-8 b(e)30 b(express)d(these)i (doubts)e(in)h(this)g(section,)150 770 y(so)42 b(that)g(the)g(reader)f (can)h(judge)g(for)f(herself)g(if)h(an)m(y)g(of)g(the)f(p)s(oten)m (tial)i(problems)e(discussed)g(here)150 880 y(are)34 b(relev)-5 b(an)m(t)36 b(for)d(their)h(pro)5 b(ject,)36 b(or)e(if)g(the)g(b)s(ene\014t)f(out)m(w)m(eigh)j(the)e(problems.)50 b(W)-8 b(e)36 b(are)e(a)m(w)m(are)h(that)150 990 y(some)29 b(of)g(the)g(opinions)g(are)g(highly)f(sub)5 b(jectiv)m(e,)31 b(but)d(w)m(e)h(o\013er)g(them)g(in)f(the)h(hop)s(e)f(they)h(can)g (serv)m(e)h(as)150 1099 y(anecdotal)i(evidence.)275 1240 y(GSS)d(can)i(b)s(e)f(criticized)i(on)e(sev)m(eral)i(lev)m(els.)42 b(W)-8 b(e)32 b(start)f(with)f(the)g(actual)i(implemen)m(tation.)275 1380 y(GSS)j(do)s(es)g(not)h(app)s(ear)f(to)i(b)s(e)e(designed)g(b)m(y) h(exp)s(erienced)g(C)f(programmers.)56 b(While)37 b(generally)150 1490 y(this)c(ma)m(y)i(b)s(e)e(a)h(go)s(o)s(d)f(thing)h(\(C)f(is)h(not) g(the)f(b)s(est)h(language\),)i(but)d(since)h(they)g(de\014ned)e(the)i (API)f(in)150 1600 y(C,)k(it)h(is)f(unfortunate.)61 b(The)37 b(primary)f(evidence)i(of)g(this)f(is)g(the)h(ma)5 b(jor)p 2746 1600 28 4 v 40 w(status)37 b(and)g(minor)p 3478 1600 V 40 w(status)150 1709 y(error)c(co)s(de)h(solution.)50 b(It)34 b(is)f(a)h(complicated)h(w)m(a)m(y)g(to)f(describ)s(e)f(error)g (conditions,)i(but)e(what)g(mak)m(es)150 1819 y(matters)27 b(w)m(orse,)h(the)f(error)f(condition)h(is)f(separated;)j(half)d(of)h (the)g(error)f(condition)h(is)f(in)h(the)f(function)150 1928 y(return)32 b(v)-5 b(alue)34 b(and)f(the)g(other)h(half)f(is)h(in) f(the)g(\014rst)g(argumen)m(t)h(to)g(the)f(function,)h(whic)m(h)f(is)h (alw)m(a)m(ys)h(a)150 2038 y(p)s(oin)m(ter)25 b(to)h(an)e(in)m(teger.) 41 b(\(The)24 b(p)s(oin)m(ter)h(is)g(not)g(ev)m(en)h(allo)m(w)m(ed)h (to)f(b)s(e)e Fj(NULL)p Fp(,)h(if)g(the)g(application)h(do)s(esn't)150 2148 y(care)32 b(ab)s(out)g(the)f(minor)g(error)h(co)s(de.\))44 b(This)31 b(mak)m(es)h(the)g(API)g(unreadable,)f(and)g(di\016cult)h(to) g(use.)44 b(A)150 2257 y(b)s(etter)26 b(solutions)g(w)m(ould)f(b)s(e)g (to)i(return)d(a)i(struct)g(con)m(taining)h(the)f(en)m(tire)h(error)e (condition,)i(whic)m(h)f(can)150 2367 y(b)s(e)32 b(accessed)h(using)f (macros,)i(although)f(w)m(e)g(ac)m(kno)m(wledge)h(that)f(the)g(C)f (language)i(used)d(at)j(the)e(time)150 2476 y(GSS)f(w)m(as)h(designed)f (ma)m(y)h(not)g(ha)m(v)m(e)h(allo)m(w)m(ed)g(this)e(\(this)h(ma)m(y)g (in)f(fact)i(b)s(e)e(the)g(reason)h(the)g(a)m(wkw)m(ard)150 2586 y(solution)26 b(w)m(as)g(c)m(hosen\).)40 b(Instead,)27 b(the)f(return)f(v)-5 b(alue)26 b(could)g(ha)m(v)m(e)g(b)s(een)f (passed)h(bac)m(k)g(to)h(callers)f(using)150 2695 y(a)35 b(p)s(oin)m(ter)f(to)g(a)h(struct,)g(accessible)h(using)e(v)-5 b(arious)34 b(macros,)i(and)d(the)i(function)e(could)h(ha)m(v)m(e)i(a)e (v)m(oid)150 2805 y(protot)m(yp)s(e.)66 b(The)39 b(fact)g(that)h(minor) p 1455 2805 V 39 w(status)f(is)g(placed)g(\014rst)f(in)h(the)g (parameter)g(list)g(increases)h(the)150 2915 y(pain)32 b(it)h(is)f(to)i(use)e(the)g(API.)h(Imp)s(ortan)m(t)f(parameters)h (should)e(b)s(e)h(placed)h(\014rst.)46 b(A)32 b(b)s(etter)h(place)g (for)150 3024 y(minor)p 389 3024 V 40 w(status)d(\(if)h(it)g(m)m(ust)f (b)s(e)g(presen)m(t)g(at)h(all\))h(w)m(ould)e(ha)m(v)m(e)i(b)s(een)d (last)j(in)e(the)g(protot)m(yp)s(es.)275 3165 y(Another)j(evidence)h (of)g(the)g(C)f(inexp)s(erience)h(are)g(the)g(memory)f(managemen)m(t)i (issues;)g(GSS)e(pro-)150 3274 y(vides)23 b(functions)g(to)g(deallo)s (cate)j(data)e(stored)f(within,)h(e.g.,)i Fj(gss_buffer_t)20 b Fp(but)i(the)h(caller)i(is)e(resp)s(on-)150 3384 y(sible)32 b(of)h(deallo)s(cating)h(the)e(structure)g(p)s(oin)m(ted)g(at)h(b)m(y)f (the)g Fj(gss_buffer_t)d Fp(\(i.e.,)34 b(the)e Fj(gss_buffer_)150 3494 y(desc)p Fp(\))g(itself.)50 b(Memory)33 b(managemen)m(t)h(issues)f (are)h(error)e(prone,)h(and)g(this)g(division)g(easily)h(leads)f(to)150 3603 y(memory)e(leaks)i(\(or)f(w)m(orse\).)45 b(Instead,)32 b(the)g(API)f(should)g(b)s(e)g(the)h(sole)g(o)m(wner)g(of)g(all)g Fj(gss_ctx_id_t)p Fp(,)150 3713 y Fj(gss_cred_id_t)p Fp(,)22 b(and)i Fj(gss_buffer_t)c Fp(structures:)37 b(they)25 b(should)e(b)s(e)g(allo)s(cated)j(b)m(y)f(the)f(library)-8 b(,)26 b(and)150 3822 y(deallo)s(cated)32 b(\(using)f(the)f(utilit)m(y) i(functions)e(de\014ned)f(for)h(this)g(purp)s(ose\))f(b)m(y)i(the)f (library)-8 b(.)275 3963 y(TBA:)31 b(sp)s(eci\014cation)g(is)g(unclear) g(ho)m(w)g(memory)f(for)h(OIDs)g(are)g(managed.)42 b(F)-8 b(or)32 b(example,)g(who)e(is)150 4073 y(resp)s(onsible)36 b(for)g(deallo)s(cate)j(p)s(oten)m(tially)g(newly)d(allo)s(cated)j (OIDs)d(returned)g(as)h Fj(actual_mechs)c Fp(in)150 4182 y Fj(gss_acquire_cred)p Fp(?)47 b(F)-8 b(urther,)35 b(are)g(OIDs)f (deeply)g(copied)h(in)m(to)g(OID)f(sets?)52 b(In)34 b(other)g(w)m (ords,)h(if)f(I)150 4292 y(add)29 b(an)g(OID)h(in)m(to)g(an)g(OID)f (set,)i(and)d(mo)s(dify)h(the)h(original)h(OID,)e(will)h(the)g(OID)f (in)g(the)h(OID)g(set)g(b)s(e)150 4401 y(mo)s(di\014ed)f(to)s(o?)275 4542 y(Another)40 b(illustrating)h(example)g(is)f(the)h(sample)f(GSS)g (header)g(\014le)h(giv)m(en)g(in)f(the)g(RF)m(C,)h(whic)m(h)150 4651 y(con)m(tains:)390 4792 y Fj(/*)438 4902 y(*)47 b(We)g(have)g(included)f(the)g(xom.h)h(header)f(file.)94 b(Verify)46 b(that)h(OM_uint32)438 5011 y(*)g(is)g(defined)f (correctly.)438 5121 y(*/)390 5230 y(#if)h(sizeof\(gss_uint32\))c(!=)k (sizeof\(OM_uint32\))390 5340 y(#error)f(Incompatible)f(definition)g (of)i(OM_uint32)e(from)i(xom.h)p eop end %%Page: 62 66 TeXDict begin 62 65 bop 150 -116 a Fp(App)s(endix)29 b(A:)h(Criticism)h(of)g(GSS)2297 b(62)390 299 y Fj(#endif)275 433 y Fp(The)36 b(C)h(pre-pro)s(cessor)g(do)s(es)g(not)g(kno)m(w)g(ab)s (out)g(the)h Fj(sizeof)d Fp(function,)k(so)e(it)h(is)f(treated)i(as)e (an)150 543 y(iden)m(ti\014er,)28 b(whic)m(h)f(maps)f(to)i(0.)40 b(Th)m(us,)27 b(the)g(expression)g(do)s(es)f(not)h(c)m(hec)m(k)i(that)e (the)h(size)f(of)g Fj(OM_uint32)150 653 y Fp(is)j(correct.)42 b(It)31 b(c)m(hec)m(ks)h(whether)d(the)i(expression)f Fj(0)g(!=)g(0)g Fp(holds.)275 787 y(TBA:)g(thread)g(issues)275 922 y(TBA:)g(m)m(ultiple)h(mec)m(hanisms)g(in)f(a)h(GSS)e(library)275 1056 y(TBA:)h(high-lev)m(el)i(design)f(criticism.)275 1191 y(TBA:)f(no)h(creden)m(tial)h(forw)m(arding.)275 1325 y(TBA:)e(in)m(ternationalization)275 1460 y(TBA:)60 b(dynamically)g(generated)h(OIDs)f(and)f(memory)h(deallo)s(cation)i (issue.)129 b(I.e.,)68 b(should)150 1569 y(gss)p 273 1569 28 4 v 40 w(imp)s(ort)p 584 1569 V 40 w(name)36 b(or)g(gss)p 1106 1569 V 40 w(duplicate)p 1509 1569 V 41 w(name)g(allo)s(cate)j(memory)d(and)f(cop)m(y)i(the)f(OID)g(pro)m (vided,)i(or)150 1679 y(simply)32 b(cop)m(y)h(the)f(p)s(oin)m(ter?)47 b(If)31 b(the)i(former,)f(who)g(w)m(ould)g(deallo)s(cate)j(that)e (memory?)46 b(If)32 b(the)g(latter,)150 1788 y(the)f(application)g(ma)m (y)g(deallo)s(cate)i(or)d(mo)s(dify)g(the)g(OID,)h(whic)m(h)f(seem)h (un)m(w)m(an)m(ted.)275 1923 y(TBA:)f(krb5:)41 b(no)30 b(w)m(a)m(y)h(to)g(access)h(authorization-data)275 2057 y(TBA:)e(krb5:)41 b(\014rew)m(all/pre-IP:)31 b(iak)m(erb)g(status?)275 2192 y(TBA:)f(krb5:)41 b(single-DES)31 b(only)275 2326 y(TBA:)36 b(the)f(API)h(ma)m(y)g(blo)s(c)m(k,)i(un)m(usable)d(in)g (select\(\))j(based)d(serv)m(ers.)57 b(Esp)s(ecially)36 b(if)g(the)g(serv)m(ers)150 2436 y(con)m(tacted)d(is)d(decided)g(b)m(y) h(the,)f(y)m(et)i(unauthen)m(ticated,)f(remote)h(clien)m(t.)275 2570 y(TBA:)48 b(krb5:)75 b(no)48 b(supp)s(ort)e(for)i(GSS)p 1660 2570 V 39 w(C)p 1765 2570 V 40 w(PR)m(OT)p 2068 2570 V 40 w(READ)m(Y)p 2439 2570 V 41 w(FLA)m(G.)h(W)-8 b(e)49 b(supp)s(ort)d(it)j(an)m(yw)m(a)m(y)-8 b(,)150 2680 y(though.)275 2814 y(TBA:)33 b(krb5:)45 b(gssapi-cfx)34 b(di\013er)f(from)f(rfc)h(1964)i(in)e(the)g(reply)f(tok)m(en)i(in)f (that)h(the)f(latter)h(require)150 2924 y(presence)c(of)h(sequence)g(n) m(um)m(b)s(ers)e(whereas)h(the)g(former)g(do)s(esn't.)275 3059 y(Finally)38 b(w)m(e)h(note)f(that)g(few)g(free)g(securit)m(y)g (applications)h(uses)f(GSS,)f(p)s(erhaps)f(the)i(only)g(ma)5 b(jor)150 3168 y(exception)33 b(to)f(this)f(are)h(Kerb)s(eros)e(5)i (implemen)m(tations.)46 b(While)32 b(not)g(substan)m(tial)g(evidence,)h (this)e(do)150 3278 y(suggest)i(that)f(the)h(GSS)e(ma)m(y)h(not)h(b)s (e)e(the)h(simplest)g(solution)h(a)m(v)-5 b(ailable)34 b(to)f(solv)m(e)g(actual)g(problems,)150 3387 y(since)g(otherwise)g (more)f(pro)5 b(jects)33 b(w)m(ould)f(ha)m(v)m(e)i(c)m(hosen)f(to)g (tak)m(e)h(adv)-5 b(an)m(tage)34 b(of)f(the)g(w)m(ork)f(that)h(w)m(en)m (t)150 3497 y(in)m(to)e(GSS)f(instead)h(of)f(using)g(another)h(framew)m (ork)f(\(or)h(designing)f(their)h(o)m(wn)f(solution\).)275 3631 y(Our)i(conclusion)i(is)g(that)g(free)g(soft)m(w)m(are)i(pro)5 b(jects)34 b(that)g(are)g(lo)s(oking)h(for)e(a)h(securit)m(y)h(framew)m (ork)150 3741 y(should)42 b(ev)-5 b(aluate)44 b(carefully)f(whether)f (GSS)f(actually)k(is)d(the)h(b)s(est)f(solution)h(b)s(efore)f(using)g (it.)78 b(In)150 3851 y(particular)27 b(it)g(is)g(recommended)f(to)i (compare)f(GSS)f(with)h(the)f(Simple)h(Authen)m(tication)h(and)f (Securit)m(y)150 3960 y(La)m(y)m(er)g(\(SASL\))e(framew)m(ork,)i(whic)m (h)f(in)f(sev)m(eral)i(situations)g(pro)m(vide)f(the)g(same)g(feature)g (as)g(GSS)f(do)s(es.)150 4070 y(The)43 b(most)g(comp)s(elling)h (argumen)m(t)g(for)e(SASL)h(o)m(v)m(er)h(GSS)e(is,)47 b(as)c(its)h(acron)m(ym)g(suggest,)j(Simple,)150 4179 y(whereas)30 b(GSS)g(is)g(far)g(from)g(it.)275 4314 y(Ho)m(w)m(ev)m (er,)35 b(that)f(said,)f(for)g(free)g(soft)m(w)m(are)h(pro)5 b(jects)33 b(that)h(w)m(an)m(ts)f(to)h(supp)s(ort)d(Kerb)s(eros)h(5,)i (w)m(e)f(do)150 4423 y(ac)m(kno)m(wledge)e(that)e(no)f(other)h(framew)m (ork)f(pro)m(vides)h(a)g(more)f(p)s(ortable)g(and)g(in)m(terop)s (erable)h(in)m(terface)150 4533 y(in)m(to)41 b(the)f(Kerb)s(eros)f(5)h (system.)69 b(If)39 b(y)m(our)h(pro)5 b(ject)41 b(needs)e(to)i(use)e (Kerb)s(eros)g(5)h(sp)s(eci\014cally)-8 b(,)44 b(w)m(e)c(do)150 4643 y(recommend)30 b(y)m(ou)h(to)g(use)f(GSS)g(instead)g(of)h(the)f (Kerb)s(eros)g(5)h(implemen)m(tation)h(sp)s(eci\014c)e(APIs.)p eop end %%Page: 63 67 TeXDict begin 63 66 bop 150 -116 a Fp(App)s(endix)29 b(B:)i(Cop)m(ying)f(Information)2144 b(63)150 299 y Fm(App)t(endix)52 b(B)81 b(Cop)l(ying)52 b(Information)150 608 y Fo(B.1)67 b(GNU)46 b(F)-11 b(ree)44 b(Do)t(cumen)l(tation)j(License)1359 767 y Fp(V)-8 b(ersion)31 b(1.3,)g(3)g(No)m(v)m(em)m(b)s(er)h(2008)390 898 y(Cop)m(yrigh)m(t)842 895 y(c)817 898 y Fn(\015)e Fp(2000,)j(2001,)f(2002,)g(2007,)h(2008)f(F)-8 b(ree)31 b(Soft)m(w)m(are)h(F)-8 b(oundation,)31 b(Inc.)390 1007 y Fj(http://fsf.org/)390 1227 y Fp(Ev)m(ery)m(one)g(is)g(p)s(ermitted)f (to)h(cop)m(y)g(and)f(distribute)g(v)m(erbatim)h(copies)390 1336 y(of)g(this)f(license)h(do)s(cumen)m(t,)g(but)e(c)m(hanging)j(it)f (is)f(not)h(allo)m(w)m(ed.)199 1467 y(0.)61 b(PREAMBLE)330 1597 y(The)37 b(purp)s(ose)e(of)i(this)g(License)h(is)f(to)h(mak)m(e)g (a)g(man)m(ual,)h(textb)s(o)s(ok,)h(or)d(other)g(functional)h(and)330 1707 y(useful)29 b(do)s(cumen)m(t)h Ff(free)36 b Fp(in)29 b(the)i(sense)f(of)g(freedom:)41 b(to)31 b(assure)e(ev)m(ery)m(one)j (the)e(e\013ectiv)m(e)j(freedom)330 1817 y(to)f(cop)m(y)g(and)f (redistribute)g(it,)h(with)g(or)f(without)g(mo)s(difying)g(it,)i (either)f(commercially)h(or)e(non-)330 1926 y(commercially)-8 b(.)56 b(Secondarily)-8 b(,)36 b(this)f(License)g(preserv)m(es)g(for)f (the)h(author)f(and)g(publisher)f(a)i(w)m(a)m(y)330 2036 y(to)i(get)g(credit)g(for)f(their)g(w)m(ork,)i(while)e(not)g(b)s(eing)g (considered)g(resp)s(onsible)f(for)h(mo)s(di\014cations)330 2145 y(made)30 b(b)m(y)h(others.)330 2276 y(This)22 b(License)i(is)f(a) h(kind)e(of)i(\\cop)m(yleft",)j(whic)m(h)c(means)g(that)h(deriv)-5 b(ativ)m(e)24 b(w)m(orks)f(of)h(the)f(do)s(cumen)m(t)330 2385 y(m)m(ust)34 b(themselv)m(es)h(b)s(e)e(free)h(in)g(the)g(same)g (sense.)51 b(It)34 b(complemen)m(ts)h(the)f(GNU)g(General)h(Public)330 2495 y(License,)c(whic)m(h)f(is)h(a)f(cop)m(yleft)i(license)g(designed) e(for)g(free)h(soft)m(w)m(are.)330 2626 y(W)-8 b(e)31 b(ha)m(v)m(e)f(designed)g(this)f(License)h(in)f(order)g(to)i(use)e(it)h (for)f(man)m(uals)h(for)f(free)h(soft)m(w)m(are,)h(b)s(ecause)330 2735 y(free)42 b(soft)m(w)m(are)i(needs)e(free)g(do)s(cumen)m(tation:) 65 b(a)42 b(free)h(program)f(should)f(come)i(with)f(man)m(uals)330 2845 y(pro)m(viding)29 b(the)g(same)g(freedoms)f(that)i(the)f(soft)m(w) m(are)h(do)s(es.)40 b(But)29 b(this)f(License)i(is)f(not)g(limited)g (to)330 2954 y(soft)m(w)m(are)j(man)m(uals;)f(it)g(can)g(b)s(e)f(used)g (for)g(an)m(y)h(textual)h(w)m(ork,)f(regardless)g(of)g(sub)5 b(ject)30 b(matter)i(or)330 3064 y(whether)f(it)h(is)f(published)f(as)i (a)f(prin)m(ted)g(b)s(o)s(ok.)44 b(W)-8 b(e)32 b(recommend)f(this)h (License)g(principally)f(for)330 3174 y(w)m(orks)f(whose)h(purp)s(ose)d (is)j(instruction)f(or)g(reference.)199 3304 y(1.)61 b(APPLICABILITY)29 b(AND)j(DEFINITIONS)330 3435 y(This)39 b(License)i(applies)f(to)g(an)m(y)h(man)m(ual)f(or)g(other)g(w)m(ork,)i (in)e(an)m(y)g(medium,)i(that)e(con)m(tains)i(a)330 3544 y(notice)h(placed)f(b)m(y)f(the)h(cop)m(yrigh)m(t)h(holder)e(sa)m(ying) h(it)g(can)g(b)s(e)f(distributed)f(under)g(the)i(terms)330 3654 y(of)c(this)f(License.)62 b(Suc)m(h)37 b(a)h(notice)h(gran)m(ts)f (a)g(w)m(orld-wide,)h(ro)m(y)m(alt)m(y-free)i(license,)f(unlimited)d (in)330 3764 y(duration,)49 b(to)d(use)f(that)g(w)m(ork)h(under)d(the)j (conditions)f(stated)h(herein.)85 b(The)45 b(\\Do)s(cumen)m(t",)330 3873 y(b)s(elo)m(w,)29 b(refers)f(to)h(an)m(y)g(suc)m(h)f(man)m(ual)h (or)f(w)m(ork.)40 b(An)m(y)29 b(mem)m(b)s(er)e(of)i(the)f(public)g(is)g (a)h(licensee,)i(and)330 3983 y(is)25 b(addressed)f(as)h(\\y)m(ou".)40 b(Y)-8 b(ou)26 b(accept)g(the)f(license)h(if)f(y)m(ou)h(cop)m(y)-8 b(,)27 b(mo)s(dify)d(or)h(distribute)g(the)g(w)m(ork)330 4092 y(in)30 b(a)h(w)m(a)m(y)g(requiring)f(p)s(ermission)f(under)g(cop) m(yrigh)m(t)j(la)m(w.)330 4223 y(A)i(\\Mo)s(di\014ed)f(V)-8 b(ersion")35 b(of)f(the)g(Do)s(cumen)m(t)g(means)g(an)m(y)g(w)m(ork)f (con)m(taining)j(the)e(Do)s(cumen)m(t)g(or)330 4333 y(a)k(p)s(ortion)f (of)h(it,)i(either)e(copied)g(v)m(erbatim,)i(or)d(with)h(mo)s (di\014cations)f(and/or)h(translated)g(in)m(to)330 4442 y(another)31 b(language.)330 4573 y(A)26 b(\\Secondary)g(Section")h(is) f(a)h(named)e(app)s(endix)f(or)i(a)h(fron)m(t-matter)g(section)g(of)f (the)g(Do)s(cumen)m(t)330 4682 y(that)c(deals)g(exclusiv)m(ely)h(with)e (the)g(relationship)h(of)f(the)h(publishers)d(or)i(authors)g(of)h(the)f (Do)s(cumen)m(t)330 4792 y(to)38 b(the)f(Do)s(cumen)m(t's)i(o)m(v)m (erall)g(sub)5 b(ject)37 b(\(or)h(to)g(related)g(matters\))g(and)f(con) m(tains)h(nothing)f(that)330 4902 y(could)j(fall)h(directly)g(within)f (that)h(o)m(v)m(erall)i(sub)5 b(ject.)70 b(\(Th)m(us,)42 b(if)e(the)h(Do)s(cumen)m(t)g(is)f(in)g(part)h(a)330 5011 y(textb)s(o)s(ok)24 b(of)g(mathematics,)j(a)d(Secondary)f(Section) h(ma)m(y)g(not)g(explain)g(an)m(y)g(mathematics.\))40 b(The)330 5121 y(relationship)28 b(could)f(b)s(e)g(a)g(matter)i(of)e (historical)i(connection)f(with)f(the)h(sub)5 b(ject)27 b(or)g(with)g(related)330 5230 y(matters,)38 b(or)d(of)h(legal,)i (commercial,)h(philosophical,)f(ethical)f(or)e(p)s(olitical)i(p)s (osition)f(regarding)330 5340 y(them.)p eop end %%Page: 64 68 TeXDict begin 64 67 bop 150 -116 a Fp(App)s(endix)29 b(B:)i(Cop)m(ying)f(Information)2144 b(64)330 299 y(The)25 b(\\In)m(v)-5 b(arian)m(t)27 b(Sections")g(are)f(certain)g(Secondary)g (Sections)g(whose)f(titles)i(are)f(designated,)i(as)330 408 y(b)s(eing)e(those)h(of)g(In)m(v)-5 b(arian)m(t)27 b(Sections,)i(in)d(the)h(notice)h(that)f(sa)m(ys)g(that)g(the)g(Do)s (cumen)m(t)g(is)g(released)330 518 y(under)f(this)i(License.)40 b(If)27 b(a)h(section)h(do)s(es)f(not)f(\014t)h(the)g(ab)s(o)m(v)m(e)h (de\014nition)e(of)h(Secondary)f(then)h(it)g(is)330 628 y(not)k(allo)m(w)m(ed)i(to)e(b)s(e)g(designated)g(as)g(In)m(v)-5 b(arian)m(t.)46 b(The)31 b(Do)s(cumen)m(t)i(ma)m(y)f(con)m(tain)i(zero) e(In)m(v)-5 b(arian)m(t)330 737 y(Sections.)39 b(If)25 b(the)f(Do)s(cumen)m(t)i(do)s(es)e(not)h(iden)m(tify)g(an)m(y)g(In)m(v) -5 b(arian)m(t)25 b(Sections)h(then)e(there)h(are)g(none.)330 878 y(The)36 b(\\Co)m(v)m(er)i(T)-8 b(exts")38 b(are)f(certain)g(short) g(passages)g(of)g(text)g(that)h(are)f(listed,)i(as)d(F)-8 b(ron)m(t-Co)m(v)m(er)330 988 y(T)g(exts)26 b(or)f(Bac)m(k-Co)m(v)m(er) j(T)-8 b(exts,)27 b(in)d(the)h(notice)i(that)e(sa)m(ys)h(that)g(the)f (Do)s(cumen)m(t)h(is)f(released)g(under)330 1097 y(this)h(License.)40 b(A)25 b(F)-8 b(ron)m(t-Co)m(v)m(er)29 b(T)-8 b(ext)26 b(ma)m(y)h(b)s(e)e(at)i(most)f(5)g(w)m(ords,)g(and)g(a)g(Bac)m(k-Co)m (v)m(er)j(T)-8 b(ext)26 b(ma)m(y)330 1207 y(b)s(e)k(at)h(most)g(25)g(w) m(ords.)330 1348 y(A)36 b(\\T)-8 b(ransparen)m(t")36 b(cop)m(y)g(of)g(the)f(Do)s(cumen)m(t)h(means)g(a)g(mac)m (hine-readable)h(cop)m(y)-8 b(,)38 b(represen)m(ted)330 1457 y(in)d(a)h(format)g(whose)g(sp)s(eci\014cation)g(is)g(a)m(v)-5 b(ailable)38 b(to)f(the)f(general)g(public,)h(that)f(is)g(suitable)g (for)330 1567 y(revising)c(the)g(do)s(cumen)m(t)f(straigh)m(tforw)m (ardly)i(with)e(generic)i(text)g(editors)f(or)f(\(for)h(images)h(com-) 330 1677 y(p)s(osed)23 b(of)h(pixels\))g(generic)h(pain)m(t)f(programs) g(or)f(\(for)h(dra)m(wings\))g(some)g(widely)g(a)m(v)-5 b(ailable)26 b(dra)m(wing)330 1786 y(editor,)k(and)f(that)g(is)g (suitable)h(for)f(input)f(to)i(text)g(formatters)f(or)g(for)g (automatic)i(translation)f(to)330 1896 y(a)d(v)-5 b(ariet)m(y)28 b(of)f(formats)g(suitable)h(for)e(input)g(to)i(text)g(formatters.)40 b(A)27 b(cop)m(y)g(made)g(in)g(an)g(otherwise)330 2005 y(T)-8 b(ransparen)m(t)37 b(\014le)h(format)g(whose)f(markup,)i(or)e (absence)h(of)g(markup,)g(has)g(b)s(een)f(arranged)g(to)330 2115 y(th)m(w)m(art)27 b(or)g(discourage)g(subsequen)m(t)f(mo)s (di\014cation)h(b)m(y)g(readers)f(is)g(not)h(T)-8 b(ransparen)m(t.)39 b(An)27 b(image)330 2225 y(format)35 b(is)f(not)h(T)-8 b(ransparen)m(t)34 b(if)g(used)g(for)g(an)m(y)g(substan)m(tial)h(amoun) m(t)g(of)g(text.)53 b(A)35 b(cop)m(y)g(that)g(is)330 2334 y(not)c(\\T)-8 b(ransparen)m(t")31 b(is)f(called)i(\\Opaque".)330 2475 y(Examples)49 b(of)f(suitable)i(formats)f(for)f(T)-8 b(ransparen)m(t)48 b(copies)i(include)e(plain)h(ASCI)s(I)e(without)330 2585 y(markup,)33 b(T)-8 b(exinfo)33 b(input)f(format,)i(LaT)1745 2604 y(E)1795 2585 y(X)f(input)f(format,)j(SGML)d(or)h(XML)h(using)e(a) h(publicly)330 2694 y(a)m(v)-5 b(ailable)36 b(DTD,)e(and)f (standard-conforming)h(simple)f(HTML,)h(P)m(ostScript)g(or)g(PDF)g (designed)330 2804 y(for)h(h)m(uman)g(mo)s(di\014cation.)57 b(Examples)35 b(of)h(transparen)m(t)f(image)i(formats)f(include)f(PNG,) h(X)m(CF)330 2913 y(and)h(JPG.)62 b(Opaque)36 b(formats)i(include)f (proprietary)g(formats)h(that)g(can)g(b)s(e)e(read)i(and)f(edited)330 3023 y(only)c(b)m(y)g(proprietary)f(w)m(ord)h(pro)s(cessors,)g(SGML)g (or)g(XML)g(for)g(whic)m(h)g(the)g(DTD)g(and/or)g(pro-)330 3133 y(cessing)26 b(to)s(ols)g(are)g(not)f(generally)i(a)m(v)-5 b(ailable,)29 b(and)24 b(the)i(mac)m(hine-generated)h(HTML,)e(P)m (ostScript)330 3242 y(or)30 b(PDF)h(pro)s(duced)e(b)m(y)h(some)h(w)m (ord)f(pro)s(cessors)g(for)g(output)g(purp)s(oses)f(only)-8 b(.)330 3383 y(The)34 b(\\Title)h(P)m(age")i(means,)e(for)f(a)h(prin)m (ted)f(b)s(o)s(ok,)h(the)f(title)i(page)f(itself,)h(plus)e(suc)m(h)f (follo)m(wing)330 3493 y(pages)28 b(as)g(are)g(needed)g(to)g(hold,)g (legibly)-8 b(,)30 b(the)e(material)h(this)e(License)i(requires)e(to)h (app)s(ear)f(in)h(the)330 3602 y(title)g(page.)40 b(F)-8 b(or)28 b(w)m(orks)e(in)g(formats)h(whic)m(h)g(do)f(not)h(ha)m(v)m(e)h (an)m(y)e(title)j(page)e(as)g(suc)m(h,)g(\\Title)h(P)m(age")330 3712 y(means)j(the)f(text)i(near)e(the)h(most)g(prominen)m(t)g(app)s (earance)f(of)h(the)g(w)m(ork's)g(title,)h(preceding)f(the)330 3821 y(b)s(eginning)f(of)g(the)h(b)s(o)s(dy)e(of)h(the)h(text.)330 3962 y(The)j(\\publisher")g(means)h(an)m(y)f(p)s(erson)g(or)h(en)m(tit) m(y)h(that)f(distributes)f(copies)i(of)e(the)h(Do)s(cumen)m(t)330 4072 y(to)c(the)g(public.)330 4213 y(A)f(section)h(\\En)m(titled)g (XYZ")f(means)f(a)h(named)g(subunit)e(of)h(the)h(Do)s(cumen)m(t)h (whose)e(title)i(either)330 4322 y(is)d(precisely)g(XYZ)g(or)f(con)m (tains)i(XYZ)f(in)f(paren)m(theses)i(follo)m(wing)g(text)g(that)f (translates)h(XYZ)e(in)330 4432 y(another)e(language.)40 b(\(Here)26 b(XYZ)f(stands)f(for)h(a)g(sp)s(eci\014c)g(section)h(name)f (men)m(tioned)h(b)s(elo)m(w,)g(suc)m(h)330 4542 y(as)i(\\Ac)m(kno)m (wledgemen)m(ts",)33 b(\\Dedications",)e(\\Endorsemen)m(ts",)e(or)f (\\History".\))42 b(T)-8 b(o)29 b(\\Preserv)m(e)330 4651 y(the)34 b(Title")h(of)e(suc)m(h)h(a)g(section)g(when)f(y)m(ou)h(mo)s (dify)e(the)i(Do)s(cumen)m(t)h(means)e(that)h(it)g(remains)g(a)330 4761 y(section)e(\\En)m(titled)f(XYZ")g(according)g(to)g(this)g (de\014nition.)330 4902 y(The)c(Do)s(cumen)m(t)i(ma)m(y)f(include)f(W) -8 b(arran)m(t)m(y)30 b(Disclaimers)f(next)f(to)g(the)g(notice)h(whic)m (h)e(states)i(that)330 5011 y(this)34 b(License)g(applies)g(to)h(the)f (Do)s(cumen)m(t.)52 b(These)33 b(W)-8 b(arran)m(t)m(y)36 b(Disclaimers)f(are)g(considered)e(to)330 5121 y(b)s(e)k(included)g(b)m (y)g(reference)h(in)g(this)f(License,)j(but)d(only)h(as)g(regards)f (disclaiming)i(w)m(arran)m(ties:)330 5230 y(an)m(y)e(other)g (implication)i(that)e(these)g(W)-8 b(arran)m(t)m(y)39 b(Disclaimers)f(ma)m(y)g(ha)m(v)m(e)g(is)f(v)m(oid)g(and)f(has)h(no)330 5340 y(e\013ect)32 b(on)e(the)h(meaning)f(of)h(this)f(License.)p eop end %%Page: 65 69 TeXDict begin 65 68 bop 150 -116 a Fp(App)s(endix)29 b(B:)i(Cop)m(ying)f(Information)2144 b(65)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: 66 70 TeXDict begin 66 69 bop 150 -116 a Fp(App)s(endix)29 b(B:)i(Cop)m(ying)f(Information)2144 b(66)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: 67 71 TeXDict begin 67 70 bop 150 -116 a Fp(App)s(endix)29 b(B:)i(Cop)m(ying)f(Information)2144 b(67)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: 68 72 TeXDict begin 68 71 bop 150 -116 a Fp(App)s(endix)29 b(B:)i(Cop)m(ying)f(Information)2144 b(68)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: 69 73 TeXDict begin 69 72 bop 150 -116 a Fp(App)s(endix)29 b(B:)i(Cop)m(ying)f(Information)2144 b(69)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 Fj(http://www.gnu.org/copy)o(left)o(/)p Fp(.)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: 70 74 TeXDict begin 70 73 bop 150 -116 a Fp(App)s(endix)29 b(B:)i(Cop)m(ying)f(Information)2144 b(70)150 299 y Fo(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 Fp(T)-8 b(o)35 b(use)f(this)h(License)g(in)f(a)h(do)s(cumen)m (t)g(y)m(ou)f(ha)m(v)m(e)i(written,)g(include)f(a)f(cop)m(y)i(of)f(the) f(License)h(in)g(the)150 568 y(do)s(cumen)m(t)30 b(and)g(put)g(the)g (follo)m(wing)i(cop)m(yrigh)m(t)g(and)e(license)h(notices)g(just)f (after)h(the)g(title)h(page:)468 680 y Fd(Copyright)42 b(\(C\))79 b Fc(year)g(your)40 b(name)p Fd(.)468 767 y(Permission)i(is)e(granted)g(to)g(copy,)h(distribute)g(and/or)g (modify)f(this)g(document)468 854 y(under)h(the)f(terms)g(of)g(the)g (GNU)g(Free)g(Documentation)i(License,)f(Version)g(1.3)468 941 y(or)f(any)g(later)g(version)h(published)h(by)d(the)h(Free)g (Software)h(Foundation;)468 1029 y(with)g(no)e(Invariant)j(Sections,)f (no)f(Front-Cover)h(Texts,)g(and)f(no)f(Back-Cover)468 1116 y(Texts.)80 b(A)40 b(copy)g(of)g(the)f(license)i(is)f(included)h (in)f(the)g(section)g(entitled)h(``GNU)468 1203 y(Free)g(Documentation) h(License''.)275 1337 y Fp(If)d(y)m(ou)h(ha)m(v)m(e)h(In)m(v)-5 b(arian)m(t)41 b(Sections,)i(F)-8 b(ron)m(t-Co)m(v)m(er)42 b(T)-8 b(exts)41 b(and)e(Bac)m(k-Co)m(v)m(er)k(T)-8 b(exts,)43 b(replace)e(the)150 1447 y(\\with)6 b(.)22 b(.)g(.)12 b(T)-8 b(exts.")31 b(line)g(with)f(this:)547 1559 y Fd(with)40 b(the)g(Invariant)h(Sections)g(being)g Fc(list)f(their)g(titles)p Fd(,)h(with)547 1646 y(the)f(Front-Cover)i(Texts)e(being)g Fc(list)p Fd(,)h(and)f(with)g(the)g(Back-Cover)h(Texts)547 1733 y(being)f Fc(list)p Fd(.)275 1868 y Fp(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: 71 75 TeXDict begin 71 74 bop 150 -116 a Fp(Concept)31 b(Index)2927 b(71)150 299 y Fm(Concept)52 b(Index)150 638 y Fo(A)150 754 y Fb(AIX)14 b Fa(:)e(:)h(:)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(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)41 b Fb(3)150 987 y Fo(C)150 1103 y Fb(command)26 b(line)20 b Fa(:)13 b(:)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(:)46 b Fb(58)150 1190 y(Compiling)27 b(y)n(our)e(application)c Fa(:)13 b(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)g(:)g(:)g(:)h(:)46 b Fb(8)150 1278 y(Con)n(tributing)23 b Fa(:)13 b(:)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(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) g(:)50 b Fb(5)150 1527 y Fo(D)150 1643 y Fb(Debian)9 b Fa(:)k(:)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(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)g(:)g(:)37 b Fb(2,)26 b(3)150 1730 y(Do)n(wnload)c Fa(:)13 b(:)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(:) h(:)f(:)g(:)g(:)48 b Fb(4)150 1963 y Fo(F)150 2079 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(63)150 2167 y(F)-6 b(reeBSD)22 b Fa(:)13 b(:)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(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)49 b Fb(4)150 2254 y(F)-6 b(uture)25 b(goals)14 b Fa(:)h(:)e(:)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(:)g(:)h(:)41 b Fb(6)150 2503 y Fo(H)150 2619 y Fb(Hac)n(king)18 b Fa(:)c(:)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(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)45 b Fb(5)150 2707 y(Header)26 b(\014les)10 b Fa(:)j(:)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(:)37 b Fb(7)150 2794 y(HP-UX)12 b Fa(:)f(:)j(:)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(:)g(:)g(:)g(:)g(:)39 b Fb(3)150 3027 y Fo(I)150 3143 y Fb(Installation)14 b Fa(:)g(:)g(:)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(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)41 b Fb(4)150 3230 y(in)n(v)n(oking)25 b Fd(gss)8 b Fa(:)14 b(:)f(:)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(:)g(:)h(:)f(:)g(:) g(:)34 b Fb(58)150 3317 y(IRIX)18 b Fa(:)12 b(:)h(:)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(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)45 b Fb(3)150 3550 y Fo(M)150 3666 y Fb(Mandrak)n(e)21 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(:)g(:)h(:)f(:)g(:)g(:) g(:)g(:)g(:)h(:)47 b Fb(3)150 3753 y(mec)n(hanism)26 b(status)g(co)r(des)e Fa(:)13 b(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)49 b Fb(15)150 3841 y(Memory)26 b(allo)r(cation)i(failure)11 b Fa(:)j(:)g(:)f(:)g(:)g (:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) 38 b Fb(8)2025 638 y(Motorola)28 b(Cold\014re)10 b Fa(:)j(:)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(:)37 b Fb(4)2025 874 y Fo(N)2025 991 y Fb(NetBSD)15 b Fa(:)e(:)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(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)42 b Fb(3)2025 1226 y Fo(O)2025 1343 y Fb(Op)r(enBSD)18 b Fa(:)c(:)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(:)g(:)h(:)f(:)g (:)g(:)g(:)g(:)47 b Fb(3)2025 1431 y(Out)25 b(of)h(Memory)g(handling)8 b Fa(:)13 b(:)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(8)2025 1683 y Fo(R)2025 1800 y Fb(RedHat)7 b Fa(:)12 b(:)i(:)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(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)34 b Fb(3)2025 1888 y(RedHat)25 b(Adv)l(anced)f(Serv)n(er)19 b Fa(:)13 b(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g (:)g(:)g(:)h(:)f(:)g(:)g(:)47 b Fb(3)2025 1975 y(Rep)r(orting)26 b(Bugs)10 b Fa(:)j(:)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(:)37 b Fb(5)2025 2228 y Fo(S)2025 2345 y Fb(Solaris)9 b Fa(:)14 b(:)f(:)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(:)g(:)g(:)36 b Fb(3)2025 2432 y(status)26 b(co)r(des)16 b Fa(:)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(:) g(:)g(:)h(:)f(:)42 b Fb(15)2025 2520 y(SuSE)13 b Fa(:)f(:)h(:)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(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)g(:)40 b Fb(3)2025 2608 y(SuSE)25 b(Lin)n(ux)c Fa(:)14 b(:)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(:)g(:)g(:)h(:)f(:)g(:) g(:)g(:)50 b Fb(3)2025 2843 y Fo(T)2025 2960 y Fb(T)-6 b(o)r(do)26 b(list)c Fa(:)13 b(:)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(:)49 b Fb(6)2025 3048 y(T)-6 b(ru64)21 b Fa(:)13 b(:)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(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)48 b Fb(3)2025 3283 y Fo(U)2025 3400 y Fb(uClib)r(c)10 b Fa(:)k(:)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(:)g(:)h(:)f(:)g(:)37 b Fb(4)2025 3488 y(uClin)n(ux)21 b Fa(:)13 b(:)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(:) g(:)h(:)f(:)g(:)g(:)g(:)49 b Fb(4)2025 3724 y Fo(W)2025 3841 y Fb(Windo)n(ws)17 b Fa(:)d(:)f(:)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(:)g(:)h(:)44 b Fb(3)p eop end %%Page: 72 76 TeXDict begin 72 75 bop 150 -116 a Fp(API)30 b(Index)3093 b(72)150 299 y Fm(API)54 b(Index)150 610 y Fd(gss)8 b Fa(:)14 b(:)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(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)34 b Fb(58)150 698 y Fd(gss_accept_sec_context)10 b Fa(:)19 b(:)13 b(:)g(:)g(:)g(:)g (:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)37 b Fb(31)150 785 y Fd(gss_acquire_cred)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(19)150 873 y Fd(gss_add_cred)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(20)150 960 y Fd(gss_add_oid_set_member)10 b Fa(:)19 b(:)13 b(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)g(:)37 b Fb(50)150 1047 y Fd(GSS_CALLING_ERROR)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(17)150 1135 y Fd(gss_canonicalize_name)13 b Fa(:)18 b(:)13 b(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)39 b Fb(48)150 1222 y Fd(gss_check_version)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(57)150 1310 y Fd(gss_compare_name)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(47)150 1397 y Fd(gss_context_time)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(37)150 1485 y Fd (gss_create_empty_oid_set)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(53)150 1572 y Fd(gss_decapsulate_token)13 b Fa(:)18 b(:)13 b(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)39 b Fb(54)150 1660 y Fd(gss_delete_sec_context)10 b Fa(:)19 b(:)13 b(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)g(:)37 b Fb(35)150 1747 y Fd(gss_display_name)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(46)150 1834 y Fd(gss_display_status)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(51)150 1922 y Fd(gss_duplicate_name)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(49)150 2009 y Fd(gss_encapsulate_token)13 b Fa(:)18 b(:)13 b(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:) g(:)g(:)g(:)h(:)f(:)39 b Fb(54)150 2097 y Fd(GSS_ERROR)9 b Fa(:)16 b(:)d(:)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(:)36 b Fb(17)150 2184 y Fd(gss_export_name)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(49)150 2272 y Fd(gss_export_sec_context)10 b Fa(:)19 b(:)13 b(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:) g(:)g(:)g(:)g(:)37 b Fb(40)150 2359 y Fd(gss_get_mic)24 b Fa(:)13 b(:)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(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:) 48 b Fb(42)150 2447 y Fd(gss_import_name)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(45)150 2534 y Fd(gss_import_sec_context)10 b Fa(:)19 b(:)13 b(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)g(:)37 b Fb(41)150 2621 y Fd(gss_indicate_mechs)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(52)2025 610 y Fd(gss_init_sec_context)16 b Fa(:)h(:)c(:)g(:)g(:)h(:)f(:)g(:)g (:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)42 b Fb(25)2025 702 y Fd(gss_inquire_context)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(37)2025 793 y Fd(gss_inquire_cred)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(23)2025 884 y Fd(gss_inquire_cred_by_mech)28 b Fa(:)13 b(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)49 b Fb(23)2025 976 y Fd(gss_inquire_mech_for_saslname)10 b Fa(:)19 b(:)13 b(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)36 b Fb(55)2025 1067 y Fd(gss_inquire_mechs_for_name)17 b Fa(:)i(:)13 b(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)44 b Fb(48)2025 1159 y Fd(gss_inquire_names_for_mech)17 b Fa(:)i(:)13 b(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g (:)44 b Fb(47)2025 1250 y Fd(gss_inquire_saslname_for_mech)10 b Fa(:)19 b(:)13 b(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)36 b Fb(55)2025 1342 y Fd(gss_oid_equal)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(55)2025 1433 y Fd(gss_process_context_token)25 b Fa(:)13 b(:)h(:)f(:)g(:)g(:)g(:)g(:)g (:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)46 b Fb(36)2025 1524 y Fd(gss_release_buffer)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(52)2025 1616 y Fd(gss_release_cred)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(24)2025 1707 y Fd(gss_release_name)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(47)2025 1799 y Fd(gss_release_oid_set)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(53)2025 1890 y Fd(GSS_ROUTINE_ERROR)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)2025 1981 y Fd(GSS_S_...)9 b Fa(:)15 b(:)f(:)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(:)g(:)h(:)f(:)g(:)g(:)36 b Fb(16)2025 2073 y Fd(GSS_SUPPLEMENTARY_INFO)10 b Fa(:)18 b(:)c(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h (:)f(:)g(:)g(:)37 b Fb(17)2025 2164 y Fd(gss_test_oid_set_member)8 b Fa(:)18 b(:)13 b(:)g(:)g(:)h(:)f(:)g(:)g(:)g(:)g(:)g(:)g(:)h(:)f(:)g (:)g(:)g(:)g(:)g(:)h(:)34 b Fb(53)2025 2256 y Fd(gss_unwrap)7 b Fa(:)15 b(:)e(:)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(:)33 b Fb(44)2025 2347 y Fd(gss_userok)7 b Fa(:)15 b(:)e(:)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(:) 33 b Fb(57)2025 2439 y Fd(gss_verify_mic)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(42)2025 2530 y Fd(gss_wrap)12 b Fa(:)j(:)e(:)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(:)39 b Fb(43)2025 2621 y Fd (gss_wrap_size_limit)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(39)p eop end %%Trailer userdict /end-hook known{end-hook}if %%EOF gss-1.0.3/doc/gss.html0000644000000000000000000077351212415507742011453 00000000000000 GNU Generic Security Service Library

GNU Generic Security Service Library

Table of Contents

Next: , Up: (dir)   [Contents][Index]

GNU Generic Security Service Library

This manual is last updated 9 October 2014 for version 1.0.3 of GNU GSS.

Copyright © 2003-2014 Simon Josefsson.

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”.


Next: , Previous: , Up: Top   [Contents][Index]

1 Introduction

GSS is an implementation of the Generic Security Service Application Program Interface (GSS-API). GSS-API is used by network servers to provide security services, e.g., to authenticate SMTP/IMAP clients against SMTP/IMAP servers. GSS consists of a library and a manual.

GSS is developed for the GNU/Linux system, but runs on over 20 platforms including most major Unix platforms and Windows, and many kind of devices including iPAQ handhelds and S/390 mainframes.

GSS is a GNU project, and is licensed under the GNU General Public License version 3 or later.


Next: , Up: Introduction   [Contents][Index]

1.1 Getting Started

This manual documents the GSS programming interface. All functions and data types provided by the library are explained.

The reader is assumed to possess basic familiarity with GSS-API and network programming in C or C++. For general GSS-API information, and some programming examples, there is a guide available online at http://docs.sun.com/db/doc/816-1331.

This manual can be used in several ways. If read from the beginning to the end, it gives a good introduction into the library and how it can be used in an application. Forward references are included where necessary. Later on, the manual can be used as a reference manual to get just the information needed about any particular interface of the library. Experienced programmers might want to start looking at the examples at the end of the manual, and then only read up those parts of the interface which are unclear.


1.2 Features

GSS might have a couple of advantages over other libraries doing a similar job.

It’s Free Software

Anybody can use, modify, and redistribute it under the terms of the GNU General Public License version 3 or later.

It’s thread-safe

No global variables are used and multiple library handles and session handles may be used in parallell.

It’s internationalized

It handles non-ASCII names and user visible strings used in the library (e.g., error messages) can be translated into the users’ language.

It’s portable

It should work on all Unix like operating systems, including Windows.


1.3 GSS-API Overview

This section describes GSS-API from a protocol point of view.

The Generic Security Service Application Programming Interface provides security services to calling applications. It allows a communicating application to authenticate the user associated with another application, to delegate rights to another application, and to apply security services such as confidentiality and integrity on a per-message basis.

There are four stages to using the GSS-API:

  1. The application acquires a set of credentials with which it may prove its identity to other processes. The application’s credentials vouch for its global identity, which may or may not be related to any local username under which it may be running.
  2. A pair of communicating applications establish a joint security context using their credentials. The security context is a pair of GSS-API data structures that contain shared state information, which is required in order that per-message security services may be provided. Examples of state that might be shared between applications as part of a security context are cryptographic keys, and message sequence numbers. As part of the establishment of a security context, the context initiator is authenticated to the responder, and may require that the responder is authenticated in turn. The initiator may optionally give the responder the right to initiate further security contexts, acting as an agent or delegate of the initiator. This transfer of rights is termed delegation, and is achieved by creating a set of credentials, similar to those used by the initiating application, but which may be used by the responder.

    To establish and maintain the shared information that makes up the security context, certain GSS-API calls will return a token data structure, which is an opaque data type that may contain cryptographically protected data. The caller of such a GSS-API routine is responsible for transferring the token to the peer application, encapsulated if necessary in an application- application protocol. On receipt of such a token, the peer application should pass it to a corresponding GSS-API routine which will decode the token and extract the information, updating the security context state information accordingly.

  3. Per-message services are invoked to apply either: integrity and data origin authentication, or confidentiality, integrity and data origin authentication to application data, which are treated by GSS-API as arbitrary octet-strings. An application transmitting a message that it wishes to protect will call the appropriate GSS-API routine (gss_get_mic or gss_wrap) to apply protection, specifying the appropriate security context, and send the resulting token to the receiving application. The receiver will pass the received token (and, in the case of data protected by gss_get_mic, the accompanying message-data) to the corresponding decoding routine (gss_verify_mic or gss_unwrap) to remove the protection and validate the data.
  4. At the completion of a communications session (which may extend across several transport connections), each application calls a GSS-API routine to delete the security context. Multiple contexts may also be used (either successively or simultaneously) within a single communications association, at the option of the applications.

1.4 Supported Platforms

GSS has at some point in time been tested on the following platforms.

  1. Debian GNU/Linux 3.0 (Woody)

    GCC 2.95.4 and GNU Make. This is the main development platform. alphaev67-unknown-linux-gnu, alphaev6-unknown-linux-gnu, arm-unknown-linux-gnu, hppa-unknown-linux-gnu, hppa64-unknown-linux-gnu, i686-pc-linux-gnu, ia64-unknown-linux-gnu, m68k-unknown-linux-gnu, mips-unknown-linux-gnu, mipsel-unknown-linux-gnu, powerpc-unknown-linux-gnu, s390-ibm-linux-gnu, sparc-unknown-linux-gnu.

  2. Debian GNU/Linux 2.1

    GCC 2.95.1 and GNU Make. armv4l-unknown-linux-gnu.

  3. Tru64 UNIX

    Tru64 UNIX C compiler and Tru64 Make. alphaev67-dec-osf5.1, alphaev68-dec-osf5.1.

  4. SuSE Linux 7.1

    GCC 2.96 and GNU Make. alphaev6-unknown-linux-gnu, alphaev67-unknown-linux-gnu.

  5. SuSE Linux 7.2a

    GCC 3.0 and GNU Make. ia64-unknown-linux-gnu.

  6. RedHat Linux 7.2

    GCC 2.96 and GNU Make. alphaev6-unknown-linux-gnu, alphaev67-unknown-linux-gnu, ia64-unknown-linux-gnu.

  7. RedHat Linux 8.0

    GCC 3.2 and GNU Make. i686-pc-linux-gnu.

  8. RedHat Advanced Server 2.1

    GCC 2.96 and GNU Make. i686-pc-linux-gnu.

  9. Slackware Linux 8.0.01

    GCC 2.95.3 and GNU Make. i686-pc-linux-gnu.

  10. Mandrake Linux 9.0

    GCC 3.2 and GNU Make. i686-pc-linux-gnu.

  11. IRIX 6.5

    MIPS C compiler, IRIX Make. mips-sgi-irix6.5.

  12. AIX 4.3.2

    IBM C for AIX compiler, AIX Make. rs6000-ibm-aix4.3.2.0.

  13. Microsoft Windows 2000 (Cygwin)

    GCC 3.2, GNU make. i686-pc-cygwin.

  14. HP-UX 11

    HP-UX C compiler and HP Make. ia64-hp-hpux11.22, hppa2.0w-hp-hpux11.11.

  15. SUN Solaris 2.8

    Sun WorkShop Compiler C 6.0 and SUN Make. sparc-sun-solaris2.8.

  16. NetBSD 1.6

    GCC 2.95.3 and GNU Make. alpha-unknown-netbsd1.6, i386-unknown-netbsdelf1.6.

  17. OpenBSD 3.1 and 3.2

    GCC 2.95.3 and GNU Make. alpha-unknown-openbsd3.1, i386-unknown-openbsd3.1.

  18. FreeBSD 4.7

    GCC 2.95.4 and GNU Make. alpha-unknown-freebsd4.7, i386-unknown-freebsd4.7.

  19. Cross compiled to uClinux/uClibc on Motorola Coldfire.

    GCC 3.4 and GNU Make m68k-uclinux-elf.

If you use GSS on, or port GSS to, a new platform please report it to the author.


1.5 Commercial Support

Commercial support is available for users of GNU GSS. The kind of support that can be purchased may include:

  • Implement new features. Such as a new GSS-API mechanism.
  • Port GSS to new platforms. This could include porting to an embedded platforms that may need memory or size optimization.
  • Integrating GSS as a security environment in your existing project.
  • System design of components related to GSS-API.

If you are interested, please write to:

Simon Josefsson Datakonsult AB
Hagagatan 24
113 47 Stockholm
Sweden

E-mail: simon@josefsson.org

If your company provides support related to GNU GSS and would like to be mentioned here, contact the author (see Bug Reports).


1.6 Downloading and Installing

The package can be downloaded from several places, including:

ftp://ftp.gnu.org/gnu/gss/

The latest version is stored in a file, e.g., ‘gss-1.0.3.tar.gz’ where the ‘1.0.3’ indicate the highest version number.

The package is then extracted, configured and built like many other packages that use Autoconf. For detailed information on configuring and building it, refer to the INSTALL file that is part of the distribution archive.

Here is an example terminal session that downloads, configures, builds and installs the package. You will need a few basic tools, such as ‘sh’, ‘make’ and ‘cc’.

$ wget -q ftp://ftp.gnu.org/gnu/gss/gss-1.0.3.tar.gz
$ tar xfz gss-1.0.3.tar.gz
$ cd gss-1.0.3/
$ ./configure
...
$ make
...
$ make install
...

After that GSS should be properly installed and ready for use.


1.7 Bug Reports

If you think you have found a bug in GSS, please investigate it and report it.

  • Please make sure that the bug is really in GSS, and preferably also check that it hasn’t already been fixed in the latest version.
  • You have to send us a test case that makes it possible for us to reproduce the bug.
  • You also have to explain what is wrong; if you get a crash, or if the results printed are not good and in that case, in what way. Make sure that the bug report includes all information you would need to fix this kind of bug for someone else.

Please make an effort to produce a self-contained report, with something definite that can be tested or debugged. Vague queries or piecemeal messages are difficult to act on and don’t help the development effort.

If your bug report is good, we will do our best to help you to get a corrected version of the software; if the bug report is poor, we won’t do anything about it (apart from asking you to send better bug reports).

If you think something in this manual is unclear, or downright incorrect, or if the language needs to be improved, please also send a note.

Send your bug report to:

bug-gss@gnu.org

1.8 Contributing

If you want to submit a patch for inclusion – from solve a typo you discovered, up to adding support for a new feature – you should submit it as a bug report (see Bug Reports). There are some things that you can do to increase the chances for it to be included in the official package.

Unless your patch is very small (say, under 10 lines) we require that you assign the copyright of your work to the Free Software Foundation. This is to protect the freedom of the project. If you have not already signed papers, we will send you the necessary information when you submit your contribution.

For contributions that doesn’t consist of actual programming code, the only guidelines are common sense. Use it.

For code contributions, a number of style guides will help you:

  • Coding Style. Follow the GNU Standards document (see (standards)GNU Coding Standards).

    If you normally code using another coding standard, there is no problem, but you should use ‘indent’ to reformat the code (see (indent)GNU Indent) before submitting your work.

  • Use the unified diff format ‘diff -u’.
  • Return errors. No reason whatsoever should abort the execution of the library. Even memory allocation errors, e.g. when malloc return NULL, should work although result in an error code.
  • Design with thread safety in mind. Don’t use global variables. Don’t even write to per-handle global variables unless the documented behaviour of the function you write is to write to the per-handle global variable.
  • Avoid using the C math library. It causes problems for embedded implementations, and in most situations it is very easy to avoid using it.
  • Document your functions. Use comments before each function headers, that, if properly formatted, are extracted into Texinfo manuals and GTK-DOC web pages.
  • Supply a ChangeLog and NEWS entries, where appropriate.

Previous: , Up: Introduction   [Contents][Index]

1.9 Planned Features

This is also known as the “todo list”. If you like to start working on anything, please let me know so work duplication can be avoided.

  • Support non-blocking mode. This would be an API extension. It could work by forking a process and interface to it, or by using a user-specific daemon. E.g., h = START(accept_sec_context(...)), FINISHED(h), ret = FINISH(h), ABORT(h).
  • Support loadable modules via dlopen, a’la Solaris GSS.
  • Port to Cyclone? CCured?

Next: , Previous: , Up: Top   [Contents][Index]

2 Preparation

To use GSS, you have to perform some changes to your sources and the build system. The necessary changes are small and explained in the following sections. At the end of this chapter, it is described how the library is initialized, and how the requirements of the library are verified.

A faster way to find out how to adapt your application for use with GSS may be to look at the examples at the end of this manual.


2.1 Header

All standard interfaces (data types and functions) of the official GSS API are defined in the header file gss/api.h. The file is taken verbatim from the RFC (after correcting a few typos) where it is known as gssapi.h. However, to be able to co-exist gracefully with other GSS-API implementation, the name gssapi.h was changed.

The header file gss.h includes gss/api.h, and declares a few non-standard extensions (by including gss/ext.h), takes care of including header files related to all supported mechanisms (e.g., gss/krb5.h) and finally adds C++ namespace protection of all definitions. Therefore, including gss.h in your project is recommended over gss/api.h. If using gss.h instead of gss/api.h causes problems, it should be regarded a bug.

You must include either file in all programs using the library, either directly or through some other header file, like this:

#include <gss.h>

The name space of GSS is gss_* for function names, gss_* for data types and GSS_* for other symbols. In addition the same name prefixes with one prepended underscore are reserved for internal use and should never be used by an application.

Each supported GSS mechanism may want to expose mechanism specific functionality, and can do so through one or more header files under the gss/ directory. The Kerberos 5 mechanism uses the file gss/krb5.h, but again, it is included (with C++ namespace fixes) from gss.h.


Next: , Previous: , Up: Preparation   [Contents][Index]

2.2 Initialization

GSS does not need to be initialized before it can be used.

In order to take advantage of the internationalisation features in GSS, e.g. translated error messages, the application must set the current locale using setlocale() before calling, e.g., gss_display_status(). This is typically done in main() as in the following example.

#include <gss.h>
#include <locale.h>
...
  setlocale (LC_ALL, "");

2.3 Version Check

It is often desirable to check that the version of GSS used is indeed one which fits all requirements. Even with binary compatibility new features may have been introduced but due to problem with the dynamic linker an old version is actually used. So you may want to check that the version is okay right after program startup. The function is called gss_check_version() and is described formally in See Extended GSS API.

The normal way to use the function is to put something similar to the following early in your main():

#include <gss.h>
...
  if (!gss_check_version (GSS_VERSION))
    {
      printf ("gss_check_version() failed:\n"
              "Header file incompatible with shared library.\n");
      exit(EXIT_FAILURE);
    }

2.4 Building the source

If you want to compile a source file that includes the gss.h header file, you must make sure that the compiler can find it in the directory hierarchy. This is accomplished by adding the path to the directory in which the header file is located to the compilers include file search path (via the -I option).

However, the path to the include file is determined at the time the source is configured. To solve this problem, GSS uses the external package pkg-config that knows the path to the include file and other configuration options. The options that need to be added to the compiler invocation at compile time are output by the --cflags option to pkg-config gss. The following example shows how it can be used at the command line:

gcc -c foo.c `pkg-config gss --cflags`

Adding the output of ‘pkg-config gss --cflags’ to the compilers command line will ensure that the compiler can find the gss.h header file.

A similar problem occurs when linking the program with the library. Again, the compiler has to find the library files. For this to work, the path to the library files has to be added to the library search path (via the -L option). For this, the option --libs to pkg-config gss can be used. For convenience, this option also outputs all other options that are required to link the program with the GSS libarary (for instance, the ‘-lshishi’ option). The example shows how to link foo.o with GSS into a program foo.

gcc -o foo foo.o `pkg-config gss --libs`

Of course you can also combine both examples to a single command by specifying both options to pkg-config:

gcc -o foo foo.c `pkg-config gss --cflags --libs`

2.5 Out of Memory handling

The GSS API does not have a standard error code for the out of memory error condition. This library will return GSS_S_FAILURE and set minor_status to ENOMEM.


Next: , Previous: , Up: Top   [Contents][Index]

3 Standard GSS API


3.1 Simple Data Types

The following conventions are used by the GSS-API C-language bindings:

3.1.1 Integer types

GSS-API uses the following integer data type:

   OM_uint32    32-bit unsigned integer

3.1.2 String and similar data

Many of the GSS-API routines take arguments and return values that describe contiguous octet-strings. All such data is passed between the GSS-API and the caller using the gss_buffer_t data type. This data type is a pointer to a buffer descriptor, which consists of a length field that contains the total number of bytes in the datum, and a value field which contains a pointer to the actual datum:

   typedef struct gss_buffer_desc_struct {
      size_t    length;
      void      *value;
   } gss_buffer_desc, *gss_buffer_t;

Storage for data returned to the application by a GSS-API routine using the gss_buffer_t conventions is allocated by the GSS-API routine. The application may free this storage by invoking the gss_release_buffer routine. Allocation of the gss_buffer_desc object is always the responsibility of the application; unused gss_buffer_desc objects may be initialized to the value GSS_C_EMPTY_BUFFER.

3.1.2.1 Opaque data types

Certain multiple-word data items are considered opaque data types at the GSS-API, because their internal structure has no significance either to the GSS-API or to the caller. Examples of such opaque data types are the input_token parameter to gss_init_sec_context (which is opaque to the caller), and the input_message parameter to gss_wrap (which is opaque to the GSS-API). Opaque data is passed between the GSS-API and the application using the gss_buffer_t datatype.

3.1.2.2 Character strings

Certain multiple-word data items may be regarded as simple ISO Latin-1 character strings. Examples are the printable strings passed to gss_import_name via the input_name_buffer parameter. Some GSS-API routines also return character strings. All such character strings are passed between the application and the GSS-API implementation using the gss_buffer_t datatype, which is a pointer to a gss_buffer_desc object.

When a gss_buffer_desc object describes a printable string, the length field of the gss_buffer_desc should only count printable characters within the string. In particular, a trailing NUL character should NOT be included in the length count, nor should either the GSS-API implementation or the application assume the presence of an uncounted trailing NUL.

3.1.3 Object Identifiers

Certain GSS-API procedures take parameters of the type gss_OID, or Object identifier. This is a type containing ISO-defined tree- structured values, and is used by the GSS-API caller to select an underlying security mechanism and to specify namespaces. A value of type gss_OID has the following structure:

   typedef struct gss_OID_desc_struct {
      OM_uint32   length;
      void        *elements;
   } gss_OID_desc, *gss_OID;

The elements field of this structure points to the first byte of an octet string containing the ASN.1 BER encoding of the value portion of the normal BER TLV encoding of the gss_OID. The length field contains the number of bytes in this value. For example, the gss_OID value corresponding to iso(1) identified-organization(3) icd-ecma(12) member-company(2) dec(1011) cryptoAlgorithms(7) DASS(5), meaning the DASS X.509 authentication mechanism, has a length field of 7 and an elements field pointing to seven octets containing the following octal values: 53,14,2,207,163,7,5. GSS-API implementations should provide constant gss_OID values to allow applications to request any supported mechanism, although applications are encouraged on portability grounds to accept the default mechanism. gss_OID values should also be provided to allow applications to specify particular name types (see section 3.10). Applications should treat gss_OID_desc values returned by GSS-API routines as read-only. In particular, the application should not attempt to deallocate them with free().

3.1.4 Object Identifier Sets

Certain GSS-API procedures take parameters of the type gss_OID_set. This type represents one or more object identifiers (see Object Identifiers). A gss_OID_set object has the following structure:

   typedef struct gss_OID_set_desc_struct {
      size_t    count;
      gss_OID   elements;
   } gss_OID_set_desc, *gss_OID_set;

The count field contains the number of OIDs within the set. The elements field is a pointer to an array of gss_OID_desc objects, each of which describes a single OID. gss_OID_set values are used to name the available mechanisms supported by the GSS-API, to request the use of specific mechanisms, and to indicate which mechanisms a given credential supports.

All OID sets returned to the application by GSS-API are dynamic objects (the gss_OID_set_desc, the "elements" array of the set, and the "elements" array of each member OID are all dynamically allocated), and this storage must be deallocated by the application using the gss_release_oid_set routine.


3.2 Complex Data Types

3.2.1 Credentials

A credential handle is a caller-opaque atomic datum that identifies a GSS-API credential data structure. It is represented by the caller- opaque type gss_cred_id_t.

GSS-API credentials can contain mechanism-specific principal authentication data for multiple mechanisms. A GSS-API credential is composed of a set of credential-elements, each of which is applicable to a single mechanism. A credential may contain at most one credential-element for each supported mechanism. A credential-element identifies the data needed by a single mechanism to authenticate a single principal, and conceptually contains two credential-references that describe the actual mechanism-specific authentication data, one to be used by GSS-API for initiating contexts, and one to be used for accepting contexts. For mechanisms that do not distinguish between acceptor and initiator credentials, both references would point to the same underlying mechanism-specific authentication data.

Credentials describe a set of mechanism-specific principals, and give their holder the ability to act as any of those principals. All principal identities asserted by a single GSS-API credential should belong to the same entity, although enforcement of this property is an implementation-specific matter. The GSS-API does not make the actual credentials available to applications; instead a credential handle is used to identify a particular credential, held internally by GSS-API. The combination of GSS-API credential handle and mechanism identifies the principal whose identity will be asserted by the credential when used with that mechanism.

The gss_init_sec_context and gss_accept_sec_context routines allow the value GSS_C_NO_CREDENTIAL to be specified as their credential handle parameter. This special credential-handle indicates a desire by the application to act as a default principal.

3.2.2 Contexts

The gss_ctx_id_t data type contains a caller-opaque atomic value that identifies one end of a GSS-API security context.

The security context holds state information about each end of a peer communication, including cryptographic state information.

3.2.3 Authentication tokens

A token is a caller-opaque type that GSS-API uses to maintain synchronization between the context data structures at each end of a GSS-API security context. The token is a cryptographically protected octet-string, generated by the underlying mechanism at one end of a GSS-API security context for use by the peer mechanism at the other end. Encapsulation (if required) and transfer of the token are the responsibility of the peer applications. A token is passed between the GSS-API and the application using the gss_buffer_t conventions.

3.2.4 Interprocess tokens

Certain GSS-API routines are intended to transfer data between processes in multi-process programs. These routines use a caller-opaque octet-string, generated by the GSS-API in one process for use by the GSS-API in another process. The calling application is responsible for transferring such tokens between processes in an OS-specific manner. Note that, while GSS-API implementors are encouraged to avoid placing sensitive information within interprocess tokens, or to cryptographically protect them, many implementations will be unable to avoid placing key material or other sensitive data within them. It is the application’s responsibility to ensure that interprocess tokens are protected in transit, and transferred only to processes that are trustworthy. An interprocess token is passed between the GSS-API and the application using the gss_buffer_t conventions.

3.2.5 Names

A name is used to identify a person or entity. GSS-API authenticates the relationship between a name and the entity claiming the name.

Since different authentication mechanisms may employ different namespaces for identifying their principals, GSSAPI’s naming support is necessarily complex in multi-mechanism environments (or even in some single-mechanism environments where the underlying mechanism supports multiple namespaces).

Two distinct representations are defined for names:

  • An internal form. This is the GSS-API "native" format for names, represented by the implementation-specific gss_name_t type. It is opaque to GSS-API callers. A single gss_name_t object may contain multiple names from different namespaces, but all names should refer to the same entity. An example of such an internal name would be the name returned from a call to the gss_inquire_cred routine, when applied to a credential containing credential elements for multiple authentication mechanisms employing different namespaces. This gss_name_t object will contain a distinct name for the entity for each authentication mechanism.

    For GSS-API implementations supporting multiple namespaces, objects of type gss_name_t must contain sufficient information to determine the namespace to which each primitive name belongs.

  • Mechanism-specific contiguous octet-string forms. A format capable of containing a single name (from a single namespace). Contiguous string names are always accompanied by an object identifier specifying the namespace to which the name belongs, and their format is dependent on the authentication mechanism that employs the name. Many, but not all, contiguous string names will be printable, and may therefore be used by GSS-API applications for communication with their users.

Routines (gss_import_name and gss_display_name) are provided to convert names between contiguous string representations and the internal gss_name_t type. gss_import_name may support multiple syntaxes for each supported namespace, allowing users the freedom to choose a preferred name representation. gss_display_name should use an implementation-chosen printable syntax for each supported name-type.

If an application calls gss_display_name, passing the internal name resulting from a call to gss_import_name, there is no guarantee the resulting contiguous string name will be the same as the original imported string name. Nor do name-space identifiers necessarily survive unchanged after a journey through the internal name-form. An example of this might be a mechanism that authenticates X.500 names, but provides an algorithmic mapping of Internet DNS names into X.500. That mechanism’s implementation of gss_import_name might, when presented with a DNS name, generate an internal name that contained both the original DNS name and the equivalent X.500 name. Alternatively, it might only store the X.500 name. In the latter case, gss_display_name would most likely generate a printable X.500 name, rather than the original DNS name.

The process of authentication delivers to the context acceptor an internal name. Since this name has been authenticated by a single mechanism, it contains only a single name (even if the internal name presented by the context initiator to gss_init_sec_context had multiple components). Such names are termed internal mechanism names, or "MN"s and the names emitted by gss_accept_sec_context are always of this type. Since some applications may require MNs without wanting to incur the overhead of an authentication operation, a second function, gss_canonicalize_name, is provided to convert a general internal name into an MN.

Comparison of internal-form names may be accomplished via the gss_compare_name routine, which returns true if the two names being compared refer to the same entity. This removes the need for the application program to understand the syntaxes of the various printable names that a given GSS-API implementation may support. Since GSS-API assumes that all primitive names contained within a given internal name refer to the same entity, gss_compare_name can return true if the two names have at least one primitive name in common. If the implementation embodies knowledge of equivalence relationships between names taken from different namespaces, this knowledge may also allow successful comparison of internal names containing no overlapping primitive elements.

When used in large access control lists, the overhead of invoking gss_import_name and gss_compare_name on each name from the ACL may be prohibitive. As an alternative way of supporting this case, GSS-API defines a special form of the contiguous string name which may be compared directly (e.g. with memcmp()). Contiguous names suitable for comparison are generated by the gss_export_name routine, which requires an MN as input. Exported names may be re- imported by the gss_import_name routine, and the resulting internal name will also be an MN. The gss_OID constant GSS_C_NT_EXPORT_NAME indentifies the "export name" type, and the value of this constant is given in Appendix A. Structurally, an exported name object consists of a header containing an OID identifying the mechanism that authenticated the name, and a trailer containing the name itself, where the syntax of the trailer is defined by the individual mechanism specification. The precise format of an export name is defined in the language-independent GSS-API specification [GSSAPI].

Note that the results obtained by using gss_compare_name will in general be different from those obtained by invoking gss_canonicalize_name and gss_export_name, and then comparing the exported names. The first series of operation determines whether two (unauthenticated) names identify the same principal; the second whether a particular mechanism would authenticate them as the same principal. These two operations will in general give the same results only for MNs.

The gss_name_t datatype should be implemented as a pointer type. To allow the compiler to aid the application programmer by performing type-checking, the use of (void *) is discouraged. A pointer to an implementation-defined type is the preferred choice.

Storage is allocated by routines that return gss_name_t values. A procedure, gss_release_name, is provided to free storage associated with an internal-form name.

3.2.6 Channel Bindings

GSS-API supports the use of user-specified tags to identify a given context to the peer application. These tags are intended to be used to identify the particular communications channel that carries the context. Channel bindings are communicated to the GSS-API using the following structure:

   typedef struct gss_channel_bindings_struct {
      OM_uint32       initiator_addrtype;
      gss_buffer_desc initiator_address;
      OM_uint32       acceptor_addrtype;
      gss_buffer_desc acceptor_address;
      gss_buffer_desc application_data;
   } *gss_channel_bindings_t;

The initiator_addrtype and acceptor_addrtype fields denote the type of addresses contained in the initiator_address and acceptor_address buffers. The address type should be one of the following:

   GSS_C_AF_UNSPEC     Unspecified address type
   GSS_C_AF_LOCAL      Host-local address type
   GSS_C_AF_INET       Internet address type (e.g. IP)
   GSS_C_AF_IMPLINK    ARPAnet IMP address type
   GSS_C_AF_PUP        pup protocols (eg BSP) address type
   GSS_C_AF_CHAOS      MIT CHAOS protocol address type
   GSS_C_AF_NS         XEROX NS address type
   GSS_C_AF_NBS        nbs address type
   GSS_C_AF_ECMA       ECMA address type
   GSS_C_AF_DATAKIT    datakit protocols address type
   GSS_C_AF_CCITT      CCITT protocols
   GSS_C_AF_SNA        IBM SNA address type
   GSS_C_AF_DECnet     DECnet address type
   GSS_C_AF_DLI        Direct data link interface address type
   GSS_C_AF_LAT        LAT address type
   GSS_C_AF_HYLINK     NSC Hyperchannel address type
   GSS_C_AF_APPLETALK  AppleTalk address type
   GSS_C_AF_BSC        BISYNC 2780/3780 address type
   GSS_C_AF_DSS        Distributed system services address type
   GSS_C_AF_OSI        OSI TP4 address type
   GSS_C_AF_X25        X.25
   GSS_C_AF_NULLADDR   No address specified

Note that these symbols name address families rather than specific addressing formats. For address families that contain several alternative address forms, the initiator_address and acceptor_address fields must contain sufficient information to determine which address form is used. When not otherwise specified, addresses should be specified in network byte-order (that is, native byte-ordering for the address family).

Conceptually, the GSS-API concatenates the initiator_addrtype, initiator_address, acceptor_addrtype, acceptor_address and application_data to form an octet string. The mechanism calculates a MIC over this octet string, and binds the MIC to the context establishment token emitted by gss_init_sec_context. The same bindings are presented by the context acceptor to gss_accept_sec_context, and a MIC is calculated in the same way. The calculated MIC is compared with that found in the token, and if the MICs differ, gss_accept_sec_context will return a GSS_S_BAD_BINDINGS error, and the context will not be established. Some mechanisms may include the actual channel binding data in the token (rather than just a MIC); applications should therefore not use confidential data as channel-binding components.

Individual mechanisms may impose additional constraints on addresses and address types that may appear in channel bindings. For example, a mechanism may verify that the initiator_address field of the channel bindings presented to gss_init_sec_context contains the correct network address of the host system. Portable applications should therefore ensure that they either provide correct information for the address fields, or omit addressing information, specifying GSS_C_AF_NULLADDR as the address-types.


3.3 Optional Parameters

Various parameters are described as optional. This means that they follow a convention whereby a default value may be requested. The following conventions are used for omitted parameters. These conventions apply only to those parameters that are explicitly documented as optional.

  • gss_buffer_t types. Specify GSS_C_NO_BUFFER as a value. For an input parameter this signifies that default behavior is requested, while for an output parameter it indicates that the information that would be returned via the parameter is not required by the application.
  • Integer types (input). Individual parameter documentation lists values to be used to indicate default actions.
  • Integer types (output). Specify NULL as the value for the pointer.
  • Pointer types. Specify NULL as the value.
  • Object IDs. Specify GSS_C_NO_OID as the value.
  • Object ID Sets. Specify GSS_C_NO_OID_SET as the value.
  • Channel Bindings. Specify GSS_C_NO_CHANNEL_BINDINGS to indicate that channel bindings are not to be used.

3.4 Error Handling

Every GSS-API routine returns two distinct values to report status information to the caller: GSS status codes and Mechanism status codes.

3.4.1 GSS status codes

GSS-API routines return GSS status codes as their OM_uint32 function value. These codes indicate errors that are independent of the underlying mechanism(s) used to provide the security service. The errors that can be indicated via a GSS status code are either generic API routine errors (errors that are defined in the GSS-API specification) or calling errors (errors that are specific to these language bindings).

A GSS status code can indicate a single fatal generic API error from the routine and a single calling error. In addition, supplementary status information may be indicated via the setting of bits in the supplementary info field of a GSS status code.

These errors are encoded into the 32-bit GSS status code as follows:

      MSB                                                        LSB
      |------------------------------------------------------------|
      |  Calling Error | Routine Error  |    Supplementary Info    |
      |------------------------------------------------------------|
   Bit 31            24 23            16 15                       0

Hence if a GSS-API routine returns a GSS status code whose upper 16 bits contain a non-zero value, the call failed. If the calling error field is non-zero, the invoking application’s call of the routine was erroneous. Calling errors are defined in table 3-1. If the routine error field is non-zero, the routine failed for one of the routine- specific reasons listed below in table 3-2. Whether or not the upper 16 bits indicate a failure or a success, the routine may indicate additional information by setting bits in the supplementary info field of the status code. The meaning of individual bits is listed below in table 3-3.

   Table 3-1  Calling Errors

   Name                   Value in field           Meaning
   ----                   --------------           -------
   GSS_S_CALL_INACCESSIBLE_READ  1       A required input parameter
                                         could not be read
   GSS_S_CALL_INACCESSIBLE_WRITE 2       A required output parameter
                                          could not be written.
   GSS_S_CALL_BAD_STRUCTURE      3       A parameter was malformed
   Table 3-2  Routine Errors

   Name                   Value in field           Meaning
   ----                   --------------           -------
   GSS_S_BAD_MECH                1       An unsupported mechanism
                                         was requested
   GSS_S_BAD_NAME                2       An invalid name was
                                         supplied
   GSS_S_BAD_NAMETYPE            3       A supplied name was of an
                                         unsupported type
   GSS_S_BAD_BINDINGS            4       Incorrect channel bindings
                                         were supplied
   GSS_S_BAD_STATUS              5       An invalid status code was
                                         supplied
   GSS_S_BAD_MIC GSS_S_BAD_SIG   6       A token had an invalid MIC
   GSS_S_NO_CRED                 7       No credentials were
                                         supplied, or the
                                         credentials were
                                         unavailable or
                                         inaccessible.
   GSS_S_NO_CONTEXT              8       No context has been
                                         established
   GSS_S_DEFECTIVE_TOKEN         9       A token was invalid
   GSS_S_DEFECTIVE_CREDENTIAL   10       A credential was invalid
   GSS_S_CREDENTIALS_EXPIRED    11       The referenced credentials
                                         have expired
   GSS_S_CONTEXT_EXPIRED        12       The context has expired
   GSS_S_FAILURE                13       Miscellaneous failure (see
                                         text)
   GSS_S_BAD_QOP                14       The quality-of-protection
                                         requested could not be
                                         provided
   GSS_S_UNAUTHORIZED           15       The operation is forbidden
                                         by local security policy
   GSS_S_UNAVAILABLE            16       The operation or option is
                                         unavailable
   GSS_S_DUPLICATE_ELEMENT      17       The requested credential
                                         element already exists
   GSS_S_NAME_NOT_MN            18       The provided name was not a
                                         mechanism name
   Table 3-3  Supplementary Status Bits

   Name                   Bit Number           Meaning
   ----                   ----------           -------
   GSS_S_CONTINUE_NEEDED   0 (LSB)   Returned only by
                                     gss_init_sec_context or
                                     gss_accept_sec_context. The
                                     routine must be called again
                                     to complete its function.
                                     See routine documentation for
                                     detailed description
   GSS_S_DUPLICATE_TOKEN   1         The token was a duplicate of
                                     an earlier token
   GSS_S_OLD_TOKEN         2         The token's validity period
                                     has expired
   GSS_S_UNSEQ_TOKEN       3         A later token has already been
                                     processed
   GSS_S_GAP_TOKEN         4         An expected per-message token
                                     was not received

The routine documentation also uses the name GSS_S_COMPLETE, which is a zero value, to indicate an absence of any API errors or supplementary information bits.

All GSS_S_xxx symbols equate to complete OM_uint32 status codes, rather than to bitfield values. For example, the actual value of the symbol GSS_S_BAD_NAMETYPE (value 3 in the routine error field) is 3<<16. The macros GSS_CALLING_ERROR, GSS_ROUTINE_ERROR and GSS_SUPPLEMENTARY_INFO are provided, each of which takes a GSS status code and removes all but the relevant field. For example, the value obtained by applying GSS_ROUTINE_ERROR to a status code removes the calling errors and supplementary info fields, leaving only the routine errors field. The values delivered by these macros may be directly compared with a GSS_S_xxx symbol of the appropriate type. The macro GSS_ERROR is also provided, which when applied to a GSS status code returns a non-zero value if the status code indicated a calling or routine error, and a zero value otherwise. All macros defined by GSS-API evaluate their argument(s) exactly once.

A GSS-API implementation may choose to signal calling errors in a platform-specific manner instead of, or in addition to the routine value; routine errors and supplementary info should be returned via major status values only.

The GSS major status code GSS_S_FAILURE is used to indicate that the underlying mechanism detected an error for which no specific GSS status code is defined. The mechanism-specific status code will provide more details about the error.

In addition to the explicit major status codes for each API function, the code GSS_S_FAILURE may be returned by any routine, indicating an implementation-specific or mechanism-specific error condition, further details of which are reported via the minor_status parameter.

3.4.2 Mechanism-specific status codes

GSS-API routines return a minor_status parameter, which is used to indicate specialized errors from the underlying security mechanism. This parameter may contain a single mechanism-specific error, indicated by a OM_uint32 value.

The minor_status parameter will always be set by a GSS-API routine, even if it returns a calling error or one of the generic API errors indicated above as fatal, although most other output parameters may remain unset in such cases. However, output parameters that are expected to return pointers to storage allocated by a routine must always be set by the routine, even in the event of an error, although in such cases the GSS-API routine may elect to set the returned parameter value to NULL to indicate that no storage was actually allocated. Any length field associated with such pointers (as in a gss_buffer_desc structure) should also be set to zero in such cases.


3.5 Credential Management

   GSS-API Credential-management Routines

   Routine                         Function
   -------                         --------
   gss_acquire_cred                Assume a global identity; Obtain
                                   a GSS-API credential handle for
                                   pre-existing credentials.
   gss_add_cred                    Construct credentials
                                   incrementally.
   gss_inquire_cred                Obtain information about a
                                   credential.
   gss_inquire_cred_by_mech        Obtain per-mechanism information
                                   about a credential.
   gss_release_cred                Discard a credential handle.

gss_acquire_cred

Function: OM_uint32 gss_acquire_cred (OM_uint32 * minor_status, const gss_name_t desired_name, OM_uint32 time_req, const gss_OID_set desired_mechs, gss_cred_usage_t cred_usage, gss_cred_id_t * output_cred_handle, gss_OID_set * actual_mechs, OM_uint32 * time_rec)

minor_status: (integer, modify) Mechanism specific status code.

desired_name: (gss_name_t, read) Name of principal whose credential should be acquired.

time_req: (Integer, read, optional) Number of seconds that credentials should remain valid. Specify GSS_C_INDEFINITE to request that the credentials have the maximum permitted lifetime.

desired_mechs: (Set of Object IDs, read, optional) Set of underlying security mechanisms that may be used. GSS_C_NO_OID_SET may be used to obtain an implementation-specific default.

cred_usage: (gss_cred_usage_t, read) GSS_C_BOTH - Credentials may be used either to initiate or accept security contexts. GSS_C_INITIATE - Credentials will only be used to initiate security contexts. GSS_C_ACCEPT - Credentials will only be used to accept security contexts.

output_cred_handle: (gss_cred_id_t, modify) The returned credential handle. Resources associated with this credential handle must be released by the application after use with a call to gss_release_cred().

actual_mechs: (Set of Object IDs, modify, optional) The set of mechanisms for which the credential is valid. Storage associated with the returned OID-set must be released by the application after use with a call to gss_release_oid_set(). Specify NULL if not required.

time_rec: (Integer, modify, optional) Actual number of seconds for which the returned credentials will remain valid. If the implementation does not support expiration of credentials, the value GSS_C_INDEFINITE will be returned. Specify NULL if not required.

Allows an application to acquire a handle for a pre-existing credential by name. GSS-API implementations must impose a local access-control policy on callers of this routine to prevent unauthorized callers from acquiring credentials to which they are not entitled. This routine is not intended to provide a "login to the network" function, as such a function would involve the creation of new credentials rather than merely acquiring a handle to existing credentials. Such functions, if required, should be defined in implementation-specific extensions to the API.

If desired_name is GSS_C_NO_NAME, the call is interpreted as a request for a credential handle that will invoke default behavior when passed to gss_init_sec_context() (if cred_usage is GSS_C_INITIATE or GSS_C_BOTH) or gss_accept_sec_context() (if cred_usage is GSS_C_ACCEPT or GSS_C_BOTH).

Mechanisms should honor the desired_mechs parameter, and return a credential that is suitable to use only with the requested mechanisms. An exception to this is the case where one underlying credential element can be shared by multiple mechanisms; in this case it is permissible for an implementation to indicate all mechanisms with which the credential element may be used. If desired_mechs is an empty set, behavior is undefined.

This routine is expected to be used primarily by context acceptors, since implementations are likely to provide mechanism-specific ways of obtaining GSS-API initiator credentials from the system login process. Some implementations may therefore not support the acquisition of GSS_C_INITIATE or GSS_C_BOTH credentials via gss_acquire_cred for any name other than GSS_C_NO_NAME, or a name produced by applying either gss_inquire_cred to a valid credential, or gss_inquire_context to an active context.

If credential acquisition is time-consuming for a mechanism, the mechanism may choose to delay the actual acquisition until the credential is required (e.g. by gss_init_sec_context or gss_accept_sec_context). Such mechanism-specific implementation decisions should be invisible to the calling application; thus a call of gss_inquire_cred immediately following the call of gss_acquire_cred must return valid credential data, and may therefore incur the overhead of a deferred credential acquisition.

Return value:

GSS_S_COMPLETE: Successful completion.

GSS_S_BAD_MECH: Unavailable mechanism requested.

GSS_S_BAD_NAMETYPE: Type contained within desired_name parameter is not supported.

GSS_S_BAD_NAME: Value supplied for desired_name parameter is ill formed.

GSS_S_CREDENTIALS_EXPIRED: The credentials could not be acquired Because they have expired.

GSS_S_NO_CRED: No credentials were found for the specified name.

gss_add_cred

Function: OM_uint32 gss_add_cred (OM_uint32 * minor_status, const gss_cred_id_t input_cred_handle, const gss_name_t desired_name, const gss_OID desired_mech, gss_cred_usage_t cred_usage, OM_uint32 initiator_time_req, OM_uint32 acceptor_time_req, gss_cred_id_t * output_cred_handle, gss_OID_set * actual_mechs, OM_uint32 * initiator_time_rec, OM_uint32 * acceptor_time_rec)

minor_status: (integer, modify) Mechanism specific status code.

input_cred_handle: (gss_cred_id_t, read, optional) The credential to which a credential-element will be added. If GSS_C_NO_CREDENTIAL is specified, the routine will compose the new credential based on default behavior (see text). Note that, while the credential-handle is not modified by gss_add_cred(), the underlying credential will be modified if output_credential_handle is NULL.

desired_name: (gss_name_t, read.) Name of principal whose credential should be acquired.

desired_mech: (Object ID, read) Underlying security mechanism with which the credential may be used.

cred_usage: (gss_cred_usage_t, read) GSS_C_BOTH - Credential may be used either to initiate or accept security contexts. GSS_C_INITIATE - Credential will only be used to initiate security contexts. GSS_C_ACCEPT - Credential will only be used to accept security contexts.

initiator_time_req: (Integer, read, optional) number of seconds that the credential should remain valid for initiating security contexts. This argument is ignored if the composed credentials are of type GSS_C_ACCEPT. Specify GSS_C_INDEFINITE to request that the credentials have the maximum permitted initiator lifetime.

acceptor_time_req: (Integer, read, optional) number of seconds that the credential should remain valid for accepting security contexts. This argument is ignored if the composed credentials are of type GSS_C_INITIATE. Specify GSS_C_INDEFINITE to request that the credentials have the maximum permitted initiator lifetime.

output_cred_handle: (gss_cred_id_t, modify, optional) The returned credential handle, containing the new credential-element and all the credential-elements from input_cred_handle. If a valid pointer to a gss_cred_id_t is supplied for this parameter, gss_add_cred creates a new credential handle containing all credential-elements from the input_cred_handle and the newly acquired credential-element; if NULL is specified for this parameter, the newly acquired credential-element will be added to the credential identified by input_cred_handle. The resources associated with any credential handle returned via this parameter must be released by the application after use with a call to gss_release_cred().

actual_mechs: (Set of Object IDs, modify, optional) The complete set of mechanisms for which the new credential is valid. Storage for the returned OID-set must be freed by the application after use with a call to gss_release_oid_set(). Specify NULL if not required.

initiator_time_rec: (Integer, modify, optional) Actual number of seconds for which the returned credentials will remain valid for initiating contexts using the specified mechanism. If the implementation or mechanism does not support expiration of credentials, the value GSS_C_INDEFINITE will be returned. Specify NULL if not required

acceptor_time_rec: (Integer, modify, optional) Actual number of seconds for which the returned credentials will remain valid for accepting security contexts using the specified mechanism. If the implementation or mechanism does not support expiration of credentials, the value GSS_C_INDEFINITE will be returned. Specify NULL if not required

Adds a credential-element to a credential. The credential-element is identified by the name of the principal to which it refers. GSS-API implementations must impose a local access-control policy on callers of this routine to prevent unauthorized callers from acquiring credential-elements to which they are not entitled. This routine is not intended to provide a "login to the network" function, as such a function would involve the creation of new mechanism-specific authentication data, rather than merely acquiring a GSS-API handle to existing data. Such functions, if required, should be defined in implementation-specific extensions to the API.

If desired_name is GSS_C_NO_NAME, the call is interpreted as a request to add a credential element that will invoke default behavior when passed to gss_init_sec_context() (if cred_usage is GSS_C_INITIATE or GSS_C_BOTH) or gss_accept_sec_context() (if cred_usage is GSS_C_ACCEPT or GSS_C_BOTH).

This routine is expected to be used primarily by context acceptors, since implementations are likely to provide mechanism-specific ways of obtaining GSS-API initiator credentials from the system login process. Some implementations may therefore not support the acquisition of GSS_C_INITIATE or GSS_C_BOTH credentials via gss_acquire_cred for any name other than GSS_C_NO_NAME, or a name produced by applying either gss_inquire_cred to a valid credential, or gss_inquire_context to an active context.

If credential acquisition is time-consuming for a mechanism, the mechanism may choose to delay the actual acquisition until the credential is required (e.g. by gss_init_sec_context or gss_accept_sec_context). Such mechanism-specific implementation decisions should be invisible to the calling application; thus a call of gss_inquire_cred immediately following the call of gss_add_cred must return valid credential data, and may therefore incur the overhead of a deferred credential acquisition.

This routine can be used to either compose a new credential containing all credential-elements of the original in addition to the newly-acquire credential-element, or to add the new credential- element to an existing credential. If NULL is specified for the output_cred_handle parameter argument, the new credential-element will be added to the credential identified by input_cred_handle; if a valid pointer is specified for the output_cred_handle parameter, a new credential handle will be created.

If GSS_C_NO_CREDENTIAL is specified as the input_cred_handle, gss_add_cred will compose a credential (and set the output_cred_handle parameter accordingly) based on default behavior. That is, the call will have the same effect as if the application had first made a call to gss_acquire_cred(), specifying the same usage and passing GSS_C_NO_NAME as the desired_name parameter to obtain an explicit credential handle embodying default behavior, passed this credential handle to gss_add_cred(), and finally called gss_release_cred() on the first credential handle.

If GSS_C_NO_CREDENTIAL is specified as the input_cred_handle parameter, a non-NULL output_cred_handle must be supplied.

Return value:

GSS_S_COMPLETE: Successful completion.

GSS_S_BAD_MECH: Unavailable mechanism requested.

GSS_S_BAD_NAMETYPE: Type contained within desired_name parameter is not supported.

GSS_S_BAD_NAME: Value supplied for desired_name parameter is ill-formed.

GSS_S_DUPLICATE_ELEMENT: The credential already contains an element for the requested mechanism with overlapping usage and validity period.

GSS_S_CREDENTIALS_EXPIRED: The required credentials could not be added because they have expired.

GSS_S_NO_CRED: No credentials were found for the specified name.

gss_inquire_cred

Function: OM_uint32 gss_inquire_cred (OM_uint32 * minor_status, const gss_cred_id_t cred_handle, gss_name_t * name, OM_uint32 * lifetime, gss_cred_usage_t * cred_usage, gss_OID_set * mechanisms)

minor_status: (integer, modify) Mechanism specific status code.

cred_handle: (gss_cred_id_t, read) A handle that refers to the target credential. Specify GSS_C_NO_CREDENTIAL to inquire about the default initiator principal.

name: (gss_name_t, modify, optional) The name whose identity the credential asserts. Storage associated with this name should be freed by the application after use with a call to gss_release_name(). Specify NULL if not required.

lifetime: (Integer, modify, optional) The number of seconds for which the credential will remain valid. If the credential has expired, this parameter will be set to zero. If the implementation does not support credential expiration, the value GSS_C_INDEFINITE will be returned. Specify NULL if not required.

cred_usage: (gss_cred_usage_t, modify, optional) How the credential may be used. One of the following: GSS_C_INITIATE, GSS_C_ACCEPT, GSS_C_BOTH. Specify NULL if not required.

mechanisms: (gss_OID_set, modify, optional) Set of mechanisms supported by the credential. Storage associated with this OID set must be freed by the application after use with a call to gss_release_oid_set(). Specify NULL if not required.

Obtains information about a credential.

Return value:

GSS_S_COMPLETE: Successful completion.

GSS_S_NO_CRED: The referenced credentials could not be accessed.

GSS_S_DEFECTIVE_CREDENTIAL: The referenced credentials were invalid.

GSS_S_CREDENTIALS_EXPIRED: The referenced credentials have expired. If the lifetime parameter was not passed as NULL, it will be set to 0.

gss_inquire_cred_by_mech

Function: OM_uint32 gss_inquire_cred_by_mech (OM_uint32 * minor_status, const gss_cred_id_t cred_handle, const gss_OID mech_type, gss_name_t * name, OM_uint32 * initiator_lifetime, OM_uint32 * acceptor_lifetime, gss_cred_usage_t * cred_usage)

minor_status: (Integer, modify) Mechanism specific status code.

cred_handle: (gss_cred_id_t, read) A handle that refers to the target credential. Specify GSS_C_NO_CREDENTIAL to inquire about the default initiator principal.

mech_type: (gss_OID, read) The mechanism for which information should be returned.

name: (gss_name_t, modify, optional) The name whose identity the credential asserts. Storage associated with this name must be freed by the application after use with a call to gss_release_name(). Specify NULL if not required.

initiator_lifetime: (Integer, modify, optional) The number of seconds for which the credential will remain capable of initiating security contexts under the specified mechanism. If the credential can no longer be used to initiate contexts, or if the credential usage for this mechanism is GSS_C_ACCEPT, this parameter will be set to zero. If the implementation does not support expiration of initiator credentials, the value GSS_C_INDEFINITE will be returned. Specify NULL if not required.

acceptor_lifetime: (Integer, modify, optional) The number of seconds for which the credential will remain capable of accepting security contexts under the specified mechanism. If the credential can no longer be used to accept contexts, or if the credential usage for this mechanism is GSS_C_INITIATE, this parameter will be set to zero. If the implementation does not support expiration of acceptor credentials, the value GSS_C_INDEFINITE will be returned. Specify NULL if not required.

cred_usage: (gss_cred_usage_t, modify, optional) How the credential may be used with the specified mechanism. One of the following: GSS_C_INITIATE, GSS_C_ACCEPT, GSS_C_BOTH. Specify NULL if not required.

Obtains per-mechanism information about a credential.

Return value:

GSS_S_COMPLETE: Successful completion.

GSS_S_NO_CRED: The referenced credentials could not be accessed.

GSS_S_DEFECTIVE_CREDENTIAL: The referenced credentials were invalid.

GSS_S_CREDENTIALS_EXPIRED: The referenced credentials have expired. If the lifetime parameter was not passed as NULL, it will be set to 0.

gss_release_cred

Function: OM_uint32 gss_release_cred (OM_uint32 * minor_status, gss_cred_id_t * cred_handle)

minor_status: (Integer, modify) Mechanism specific status code.

cred_handle: (gss_cred_id_t, modify, optional) Opaque handle identifying credential to be released. If GSS_C_NO_CREDENTIAL is supplied, the routine will complete successfully, but will do nothing.

Informs GSS-API that the specified credential handle is no longer required by the application, and frees associated resources. The cred_handle is set to GSS_C_NO_CREDENTIAL on successful completion of this call.

Return value:

GSS_S_COMPLETE: Successful completion.

GSS_S_NO_CRED: Credentials could not be accessed.


3.6 Context-Level Routines

   GSS-API Context-Level Routines

   Routine                         Function
   -------                         --------
   gss_init_sec_context            Initiate a security context with
                                   a peer application.
   gss_accept_sec_context          Accept a security context
                                   initiated by a peer application.
   gss_delete_sec_context          Discard a security context.
   gss_process_context_token       Process a token on a security
                                   context from a peer application.
   gss_context_time                Determine for how long a context
                                   will remain valid.
   gss_inquire_context             Obtain information about a
                                   security context.
   gss_wrap_size_limit             Determine token-size limit for
                                   gss_wrap on a context.
   gss_export_sec_context          Transfer a security context to
                                   another process.
   gss_import_sec_context          Import a transferred context.

gss_init_sec_context

Function: OM_uint32 gss_init_sec_context (OM_uint32 * minor_status, const gss_cred_id_t initiator_cred_handle, gss_ctx_id_t * context_handle, const gss_name_t target_name, const gss_OID mech_type, OM_uint32 req_flags, OM_uint32 time_req, const gss_channel_bindings_t input_chan_bindings, const gss_buffer_t input_token, gss_OID * actual_mech_type, gss_buffer_t output_token, OM_uint32 * ret_flags, OM_uint32 * time_rec)

minor_status: (integer, modify) Mechanism specific status code.

initiator_cred_handle: (gss_cred_id_t, read, optional) Handle for credentials claimed. Supply GSS_C_NO_CREDENTIAL to act as a default initiator principal. If no default initiator is defined, the function will return GSS_S_NO_CRED.

context_handle: (gss_ctx_id_t, read/modify) Context handle for new context. Supply GSS_C_NO_CONTEXT for first call; use value returned by first call in continuation calls. Resources associated with this context-handle must be released by the application after use with a call to gss_delete_sec_context().

target_name: (gss_name_t, read) Name of target.

mech_type: (OID, read, optional) Object ID of desired mechanism. Supply GSS_C_NO_OID to obtain an implementation specific default.

req_flags: (bit-mask, read) Contains various independent flags, each of which requests that the context support a specific service option. Symbolic names are provided for each flag, and the symbolic names corresponding to the required flags should be logically-ORed together to form the bit-mask value. See below for the flags.

time_req: (Integer, read, optional) Desired number of seconds for which context should remain valid. Supply 0 to request a default validity period.

input_chan_bindings: (channel bindings, read, optional) Application-specified bindings. Allows application to securely bind channel identification information to the security context. Specify GSS_C_NO_CHANNEL_BINDINGS if channel bindings are not used.

input_token: (buffer, opaque, read, optional) Token received from peer application. Supply GSS_C_NO_BUFFER, or a pointer to a buffer containing the value GSS_C_EMPTY_BUFFER on initial call.

actual_mech_type: (OID, modify, optional) Actual mechanism used. The OID returned via this parameter will be a pointer to static storage that should be treated as read-only; In particular the application should not attempt to free it. Specify NULL if not required.

output_token: (buffer, opaque, modify) Token to be sent to peer application. If the length field of the returned buffer is zero, no token need be sent to the peer application. Storage associated with this buffer must be freed by the application after use with a call to gss_release_buffer().

ret_flags: (bit-mask, modify, optional) Contains various independent flags, each of which indicates that the context supports a specific service option. Specify NULL if not required. Symbolic names are provided for each flag, and the symbolic names corresponding to the required flags should be logically-ANDed with the ret_flags value to test whether a given option is supported by the context. See below for the flags.

time_rec: (Integer, modify, optional) Number of seconds for which the context will remain valid. If the implementation does not support context expiration, the value GSS_C_INDEFINITE will be returned. Specify NULL if not required.

Initiates the establishment of a security context between the application and a remote peer. Initially, the input_token parameter should be specified either as GSS_C_NO_BUFFER, or as a pointer to a gss_buffer_desc object whose length field contains the value zero. The routine may return a output_token which should be transferred to the peer application, where the peer application will present it to gss_accept_sec_context. If no token need be sent, gss_init_sec_context will indicate this by setting the length field of the output_token argument to zero. To complete the context establishment, one or more reply tokens may be required from the peer application; if so, gss_init_sec_context will return a status containing the supplementary information bit GSS_S_CONTINUE_NEEDED. In this case, gss_init_sec_context should be called again when the reply token is received from the peer application, passing the reply token to gss_init_sec_context via the input_token parameters.

Portable applications should be constructed to use the token length and return status to determine whether a token needs to be sent or waited for. Thus a typical portable caller should always invoke gss_init_sec_context within a loop:

int context_established = 0;
gss_ctx_id_t context_hdl = GSS_C_NO_CONTEXT;
       ...
input_token->length = 0;

while (!context_established) {
  maj_stat = gss_init_sec_context(&min_stat,
                                  cred_hdl,
                                  &context_hdl,
                                  target_name,
                                  desired_mech,
                                  desired_services,
                                  desired_time,
                                  input_bindings,
                                  input_token,
                                  &actual_mech,
                                  output_token,
                                  &actual_services,
                                  &actual_time);
  if (GSS_ERROR(maj_stat)) {
    report_error(maj_stat, min_stat);
  };

  if (output_token->length != 0) {
    send_token_to_peer(output_token);
    gss_release_buffer(&min_stat, output_token)
  };
  if (GSS_ERROR(maj_stat)) {

    if (context_hdl != GSS_C_NO_CONTEXT)
      gss_delete_sec_context(&min_stat,
                             &context_hdl,
                             GSS_C_NO_BUFFER);
    break;
  };

  if (maj_stat & GSS_S_CONTINUE_NEEDED) {
    receive_token_from_peer(input_token);
  } else {
    context_established = 1;
  };
};

Whenever the routine returns a major status that includes the value GSS_S_CONTINUE_NEEDED, the context is not fully established and the following restrictions apply to the output parameters:

  • The value returned via the time_rec parameter is undefined unless the accompanying ret_flags parameter contains the bit GSS_C_PROT_READY_FLAG, indicating that per-message services may be applied in advance of a successful completion status, the value returned via the actual_mech_type parameter is undefined until the routine returns a major status value of GSS_S_COMPLETE.
  • The values of the GSS_C_DELEG_FLAG, GSS_C_MUTUAL_FLAG, GSS_C_REPLAY_FLAG, GSS_C_SEQUENCE_FLAG, GSS_C_CONF_FLAG, GSS_C_INTEG_FLAG and GSS_C_ANON_FLAG bits returned via the ret_flags parameter should contain the values that the implementation expects would be valid if context establishment were to succeed. In particular, if the application has requested a service such as delegation or anonymous authentication via the req_flags argument, and such a service is unavailable from the underlying mechanism, gss_init_sec_context should generate a token that will not provide the service, and indicate via the ret_flags argument that the service will not be supported. The application may choose to abort the context establishment by calling gss_delete_sec_context (if it cannot continue in the absence of the service), or it may choose to transmit the token and continue context establishment (if the service was merely desired but not mandatory).
  • The values of the GSS_C_PROT_READY_FLAG and GSS_C_TRANS_FLAG bits within ret_flags should indicate the actual state at the time gss_init_sec_context returns, whether or not the context is fully established.
  • GSS-API implementations that support per-message protection are encouraged to set the GSS_C_PROT_READY_FLAG in the final ret_flags returned to a caller (i.e. when accompanied by a GSS_S_COMPLETE status code). However, applications should not rely on this behavior as the flag was not defined in Version 1 of the GSS-API. Instead, applications should determine what per-message services are available after a successful context establishment according to the GSS_C_INTEG_FLAG and GSS_C_CONF_FLAG values.
  • All other bits within the ret_flags argument should be set to zero.

If the initial call of gss_init_sec_context() fails, the implementation should not create a context object, and should leave the value of the context_handle parameter set to GSS_C_NO_CONTEXT to indicate this. In the event of a failure on a subsequent call, the implementation is permitted to delete the "half-built" security context (in which case it should set the context_handle parameter to GSS_C_NO_CONTEXT), but the preferred behavior is to leave the security context untouched for the application to delete (using gss_delete_sec_context).

During context establishment, the informational status bits GSS_S_OLD_TOKEN and GSS_S_DUPLICATE_TOKEN indicate fatal errors, and GSS-API mechanisms should always return them in association with a routine error of GSS_S_FAILURE. This requirement for pairing did not exist in version 1 of the GSS-API specification, so applications that wish to run over version 1 implementations must special-case these codes.

The req_flags values:

GSS_C_DELEG_FLAG

  • True - Delegate credentials to remote peer.
  • False - Don’t delegate.

GSS_C_MUTUAL_FLAG

  • True - Request that remote peer authenticate itself.
  • False - Authenticate self to remote peer only.

GSS_C_REPLAY_FLAG

  • True - Enable replay detection for messages protected with gss_wrap or gss_get_mic.
  • False - Don’t attempt to detect replayed messages.

GSS_C_SEQUENCE_FLAG

  • True - Enable detection of out-of-sequence protected messages.
  • False - Don’t attempt to detect out-of-sequence messages.

GSS_C_CONF_FLAG

  • True - Request that confidentiality service be made available (via gss_wrap).
  • False - No per-message confidentiality service is required.

GSS_C_INTEG_FLAG

  • True - Request that integrity service be made available (via gss_wrap or gss_get_mic).
  • False - No per-message integrity service is required.

GSS_C_ANON_FLAG

  • True - Do not reveal the initiator’s identity to the acceptor.
  • False - Authenticate normally.

The ret_flags values:

GSS_C_DELEG_FLAG

  • True - Credentials were delegated to the remote peer.
  • False - No credentials were delegated.

GSS_C_MUTUAL_FLAG

  • True - The remote peer has authenticated itself.
  • False - Remote peer has not authenticated itself.

GSS_C_REPLAY_FLAG

  • True - replay of protected messages will be detected.
  • False - replayed messages will not be detected.

GSS_C_SEQUENCE_FLAG

  • True - out-of-sequence protected messages will be detected.
  • False - out-of-sequence messages will not be detected.

GSS_C_CONF_FLAG

  • True - Confidentiality service may be invoked by calling gss_wrap routine.
  • False - No confidentiality service (via gss_wrap) available. gss_wrap will provide message encapsulation, data-origin authentication and integrity services only.

GSS_C_INTEG_FLAG

  • True - Integrity service may be invoked by calling either gss_get_mic or gss_wrap routines.
  • False - Per-message integrity service unavailable.

GSS_C_ANON_FLAG

  • True - The initiator’s identity has not been revealed, and will not be revealed if any emitted token is passed to the acceptor.
  • False - The initiator’s identity has been or will be authenticated normally.

GSS_C_PROT_READY_FLAG

  • True - Protection services (as specified by the states of the GSS_C_CONF_FLAG and GSS_C_INTEG_FLAG) are available for use if the accompanying major status return value is either GSS_S_COMPLETE or GSS_S_CONTINUE_NEEDED.
  • False - Protection services (as specified by the states of the GSS_C_CONF_FLAG and GSS_C_INTEG_FLAG) are available only if the accompanying major status return value is GSS_S_COMPLETE.

GSS_C_TRANS_FLAG

  • True - The resultant security context may be transferred to other processes via a call to gss_export_sec_context().
  • False - The security context is not transferable.

All other bits should be set to zero.

Return value:

GSS_S_COMPLETE: Successful completion.

GSS_S_CONTINUE_NEEDED: Indicates that a token from the peer application is required to complete the context, and that gss_init_sec_context must be called again with that token.

GSS_S_DEFECTIVE_TOKEN: Indicates that consistency checks performed on the input_token failed.

GSS_S_DEFECTIVE_CREDENTIAL: Indicates that consistency checks performed on the credential failed.

GSS_S_NO_CRED: The supplied credentials were not valid for context initiation, or the credential handle did not reference any credentials.

GSS_S_CREDENTIALS_EXPIRED: The referenced credentials have expired.

GSS_S_BAD_BINDINGS: The input_token contains different channel bindings to those specified via the input_chan_bindings parameter.

GSS_S_BAD_SIG: The input_token contains an invalid MIC, or a MIC that could not be verified.

GSS_S_OLD_TOKEN: The input_token was too old. This is a fatal error during context establishment.

GSS_S_DUPLICATE_TOKEN: The input_token is valid, but is a duplicate of a token already processed. This is a fatal error during context establishment.

GSS_S_NO_CONTEXT: Indicates that the supplied context handle did not refer to a valid context.

GSS_S_BAD_NAMETYPE: The provided target_name parameter contained an invalid or unsupported type of name.

GSS_S_BAD_NAME: The provided target_name parameter was ill-formed.

GSS_S_BAD_MECH: The specified mechanism is not supported by the provided credential, or is unrecognized by the implementation.

gss_accept_sec_context

Function: OM_uint32 gss_accept_sec_context (OM_uint32 * minor_status, gss_ctx_id_t * context_handle, const gss_cred_id_t acceptor_cred_handle, const gss_buffer_t input_token_buffer, const gss_channel_bindings_t input_chan_bindings, gss_name_t * src_name, gss_OID * mech_type, gss_buffer_t output_token, OM_uint32 * ret_flags, OM_uint32 * time_rec, gss_cred_id_t * delegated_cred_handle)

minor_status: (Integer, modify) Mechanism specific status code.

context_handle: (gss_ctx_id_t, read/modify) Context handle for new context. Supply GSS_C_NO_CONTEXT for first call; use value returned in subsequent calls. Once gss_accept_sec_context() has returned a value via this parameter, resources have been assigned to the corresponding context, and must be freed by the application after use with a call to gss_delete_sec_context().

acceptor_cred_handle: (gss_cred_id_t, read) Credential handle claimed by context acceptor. Specify GSS_C_NO_CREDENTIAL to accept the context as a default principal. If GSS_C_NO_CREDENTIAL is specified, but no default acceptor principal is defined, GSS_S_NO_CRED will be returned.

input_token_buffer: (buffer, opaque, read) Token obtained from remote application.

input_chan_bindings: (channel bindings, read, optional) Application- specified bindings. Allows application to securely bind channel identification information to the security context. If channel bindings are not used, specify GSS_C_NO_CHANNEL_BINDINGS.

src_name: (gss_name_t, modify, optional) Authenticated name of context initiator. After use, this name should be deallocated by passing it to gss_release_name(). If not required, specify NULL.

mech_type: (Object ID, modify, optional) Security mechanism used. The returned OID value will be a pointer into static storage, and should be treated as read-only by the caller (in particular, it does not need to be freed). If not required, specify NULL.

output_token: (buffer, opaque, modify) Token to be passed to peer application. If the length field of the returned token buffer is 0, then no token need be passed to the peer application. If a non- zero length field is returned, the associated storage must be freed after use by the application with a call to gss_release_buffer().

ret_flags: (bit-mask, modify, optional) Contains various independent flags, each of which indicates that the context supports a specific service option. If not needed, specify NULL. Symbolic names are provided for each flag, and the symbolic names corresponding to the required flags should be logically-ANDed with the ret_flags value to test whether a given option is supported by the context. See below for the flags.

time_rec: (Integer, modify, optional) Number of seconds for which the context will remain valid. Specify NULL if not required.

delegated_cred_handle: (gss_cred_id_t, modify, optional credential) Handle for credentials received from context initiator. Only valid if deleg_flag in ret_flags is true, in which case an explicit credential handle (i.e. not GSS_C_NO_CREDENTIAL) will be returned; if deleg_flag is false, gss_accept_sec_context() will set this parameter to GSS_C_NO_CREDENTIAL. If a credential handle is returned, the associated resources must be released by the application after use with a call to gss_release_cred(). Specify NULL if not required.

Allows a remotely initiated security context between the application and a remote peer to be established. The routine may return a output_token which should be transferred to the peer application, where the peer application will present it to gss_init_sec_context. If no token need be sent, gss_accept_sec_context will indicate this by setting the length field of the output_token argument to zero. To complete the context establishment, one or more reply tokens may be required from the peer application; if so, gss_accept_sec_context will return a status flag of GSS_S_CONTINUE_NEEDED, in which case it should be called again when the reply token is received from the peer application, passing the token to gss_accept_sec_context via the input_token parameters.

Portable applications should be constructed to use the token length and return status to determine whether a token needs to be sent or waited for. Thus a typical portable caller should always invoke gss_accept_sec_context within a loop:

gss_ctx_id_t context_hdl = GSS_C_NO_CONTEXT;

do {
  receive_token_from_peer(input_token);
  maj_stat = gss_accept_sec_context(&min_stat,
                                    &context_hdl,
                                    cred_hdl,
                                    input_token,
                                    input_bindings,
                                    &client_name,
                                    &mech_type,
                                    output_token,
                                    &ret_flags,
                                    &time_rec,
                                    &deleg_cred);
  if (GSS_ERROR(maj_stat)) {
    report_error(maj_stat, min_stat);
  };
  if (output_token->length != 0) {
    send_token_to_peer(output_token);

    gss_release_buffer(&min_stat, output_token);
  };
  if (GSS_ERROR(maj_stat)) {
    if (context_hdl != GSS_C_NO_CONTEXT)
      gss_delete_sec_context(&min_stat,
                             &context_hdl,
                             GSS_C_NO_BUFFER);
    break;
  };
} while (maj_stat & GSS_S_CONTINUE_NEEDED);

Whenever the routine returns a major status that includes the value GSS_S_CONTINUE_NEEDED, the context is not fully established and the following restrictions apply to the output parameters:

The value returned via the time_rec parameter is undefined Unless the accompanying ret_flags parameter contains the bit GSS_C_PROT_READY_FLAG, indicating that per-message services may be applied in advance of a successful completion status, the value returned via the mech_type parameter may be undefined until the routine returns a major status value of GSS_S_COMPLETE.

The values of the GSS_C_DELEG_FLAG, GSS_C_MUTUAL_FLAG,GSS_C_REPLAY_FLAG, GSS_C_SEQUENCE_FLAG, GSS_C_CONF_FLAG,GSS_C_INTEG_FLAG and GSS_C_ANON_FLAG bits returned via the ret_flags parameter should contain the values that the implementation expects would be valid if context establishment were to succeed.

The values of the GSS_C_PROT_READY_FLAG and GSS_C_TRANS_FLAG bits within ret_flags should indicate the actual state at the time gss_accept_sec_context returns, whether or not the context is fully established.

Although this requires that GSS-API implementations set the GSS_C_PROT_READY_FLAG in the final ret_flags returned to a caller (i.e. when accompanied by a GSS_S_COMPLETE status code), applications should not rely on this behavior as the flag was not defined in Version 1 of the GSS-API. Instead, applications should be prepared to use per-message services after a successful context establishment, according to the GSS_C_INTEG_FLAG and GSS_C_CONF_FLAG values.

All other bits within the ret_flags argument should be set to zero. While the routine returns GSS_S_CONTINUE_NEEDED, the values returned via the ret_flags argument indicate the services that the implementation expects to be available from the established context.

If the initial call of gss_accept_sec_context() fails, the implementation should not create a context object, and should leave the value of the context_handle parameter set to GSS_C_NO_CONTEXT to indicate this. In the event of a failure on a subsequent call, the implementation is permitted to delete the "half-built" security context (in which case it should set the context_handle parameter to GSS_C_NO_CONTEXT), but the preferred behavior is to leave the security context (and the context_handle parameter) untouched for the application to delete (using gss_delete_sec_context).

During context establishment, the informational status bits GSS_S_OLD_TOKEN and GSS_S_DUPLICATE_TOKEN indicate fatal errors, and GSS-API mechanisms should always return them in association with a routine error of GSS_S_FAILURE. This requirement for pairing did not exist in version 1 of the GSS-API specification, so applications that wish to run over version 1 implementations must special-case these codes.

The ret_flags values:

GSS_C_DELEG_FLAG

  • True - Delegated credentials are available via the delegated_cred_handle parameter.
  • False - No credentials were delegated.

GSS_C_MUTUAL_FLAG

  • True - Remote peer asked for mutual authentication.
  • False - Remote peer did not ask for mutual authentication.

GSS_C_REPLAY_FLAG

  • True - replay of protected messages will be detected.
  • False - replayed messages will not be detected.

GSS_C_SEQUENCE_FLAG

  • True - out-of-sequence protected messages will be detected.
  • False - out-of-sequence messages will not be detected.

GSS_C_CONF_FLAG

  • True - Confidentiality service may be invoked by calling the gss_wrap routine.
  • False - No confidentiality service (via gss_wrap) available. gss_wrap will provide message encapsulation, data-origin authentication and integrity services only.

GSS_C_INTEG_FLAG

  • True - Integrity service may be invoked by calling either gss_get_mic or gss_wrap routines.
  • False - Per-message integrity service unavailable.

GSS_C_ANON_FLAG

  • True - The initiator does not wish to be authenticated; the src_name parameter (if requested) contains an anonymous internal name.
  • False - The initiator has been authenticated normally.

GSS_C_PROT_READY_FLAG

  • True - Protection services (as specified by the states of the GSS_C_CONF_FLAG and GSS_C_INTEG_FLAG) are available if the accompanying major status return value is either GSS_S_COMPLETE or GSS_S_CONTINUE_NEEDED.
  • False - Protection services (as specified by the states of the GSS_C_CONF_FLAG and GSS_C_INTEG_FLAG) are available only if the accompanying major status return value is GSS_S_COMPLETE.

GSS_C_TRANS_FLAG

  • True - The resultant security context may be transferred to other processes via a call to gss_export_sec_context().
  • False - The security context is not transferable.

All other bits should be set to zero.

Return value:

GSS_S_CONTINUE_NEEDED: Indicates that a token from the peer application is required to complete the context, and that gss_accept_sec_context must be called again with that token.

GSS_S_DEFECTIVE_TOKEN: Indicates that consistency checks performed on the input_token failed.

GSS_S_DEFECTIVE_CREDENTIAL: Indicates that consistency checks performed on the credential failed.

GSS_S_NO_CRED: The supplied credentials were not valid for context acceptance, or the credential handle did not reference any credentials.

GSS_S_CREDENTIALS_EXPIRED: The referenced credentials have expired.

GSS_S_BAD_BINDINGS: The input_token contains different channel bindings to those specified via the input_chan_bindings parameter.

GSS_S_NO_CONTEXT: Indicates that the supplied context handle did not refer to a valid context.

GSS_S_BAD_SIG: The input_token contains an invalid MIC.

GSS_S_OLD_TOKEN: The input_token was too old. This is a fatal error during context establishment.

GSS_S_DUPLICATE_TOKEN: The input_token is valid, but is a duplicate of a token already processed. This is a fatal error during context establishment.

GSS_S_BAD_MECH: The received token specified a mechanism that is not supported by the implementation or the provided credential.

gss_delete_sec_context

Function: OM_uint32 gss_delete_sec_context (OM_uint32 * minor_status, gss_ctx_id_t * context_handle, gss_buffer_t output_token)

minor_status: (Integer, modify) Mechanism specific status code.

context_handle: (gss_ctx_id_t, modify) Context handle identifying context to delete. After deleting the context, the GSS-API will set this context handle to GSS_C_NO_CONTEXT.

output_token: (buffer, opaque, modify, optional) Token to be sent to remote application to instruct it to also delete the context. It is recommended that applications specify GSS_C_NO_BUFFER for this parameter, requesting local deletion only. If a buffer parameter is provided by the application, the mechanism may return a token in it; mechanisms that implement only local deletion should set the length field of this token to zero to indicate to the application that no token is to be sent to the peer.

Delete a security context. gss_delete_sec_context will delete the local data structures associated with the specified security context, and may generate an output_token, which when passed to the peer gss_process_context_token will instruct it to do likewise. If no token is required by the mechanism, the GSS-API should set the length field of the output_token (if provided) to zero. No further security services may be obtained using the context specified by context_handle.

In addition to deleting established security contexts, gss_delete_sec_context must also be able to delete "half-built" security contexts resulting from an incomplete sequence of gss_init_sec_context()/gss_accept_sec_context() calls.

The output_token parameter is retained for compatibility with version 1 of the GSS-API. It is recommended that both peer applications invoke gss_delete_sec_context passing the value GSS_C_NO_BUFFER for the output_token parameter, indicating that no token is required, and that gss_delete_sec_context should simply delete local context data structures. If the application does pass a valid buffer to gss_delete_sec_context, mechanisms are encouraged to return a zero-length token, indicating that no peer action is necessary, and that no token should be transferred by the application.

Return value:

GSS_S_COMPLETE: Successful completion.

GSS_S_NO_CONTEXT: No valid context was supplied.

gss_process_context_token

Function: OM_uint32 gss_process_context_token (OM_uint32 * minor_status, const gss_ctx_id_t context_handle, const gss_buffer_t token_buffer)

minor_status: (Integer, modify) Implementation specific status code.

context_handle: (gss_ctx_id_t, read) Context handle of context on which token is to be processed

token_buffer: (buffer, opaque, read) Token to process.

Provides a way to pass an asynchronous token to the security service. Most context-level tokens are emitted and processed synchronously by gss_init_sec_context and gss_accept_sec_context, and the application is informed as to whether further tokens are expected by the GSS_C_CONTINUE_NEEDED major status bit. Occasionally, a mechanism may need to emit a context-level token at a point when the peer entity is not expecting a token. For example, the initiator’s final call to gss_init_sec_context may emit a token and return a status of GSS_S_COMPLETE, but the acceptor’s call to gss_accept_sec_context may fail. The acceptor’s mechanism may wish to send a token containing an error indication to the initiator, but the initiator is not expecting a token at this point, believing that the context is fully established. Gss_process_context_token provides a way to pass such a token to the mechanism at any time.

Return value:

GSS_S_COMPLETE: Successful completion.

GSS_S_DEFECTIVE_TOKEN: Indicates that consistency checks performed on the token failed.

GSS_S_NO_CONTEXT: The context_handle did not refer to a valid context.

gss_context_time

Function: OM_uint32 gss_context_time (OM_uint32 * minor_status, const gss_ctx_id_t context_handle, OM_uint32 * time_rec)

minor_status: (Integer, modify) Implementation specific status code.

context_handle: (gss_ctx_id_t, read) Identifies the context to be interrogated.

time_rec: (Integer, modify) Number of seconds that the context will remain valid. If the context has already expired, zero will be returned.

Determines the number of seconds for which the specified context will remain valid.

Return value:

GSS_S_COMPLETE: Successful completion.

GSS_S_CONTEXT_EXPIRED: The context has already expired.

GSS_S_NO_CONTEXT: The context_handle parameter did not identify a valid context

gss_inquire_context

Function: OM_uint32 gss_inquire_context (OM_uint32 * minor_status, const gss_ctx_id_t context_handle, gss_name_t * src_name, gss_name_t * targ_name, OM_uint32 * lifetime_rec, gss_OID * mech_type, OM_uint32 * ctx_flags, int * locally_initiated, int * open)

minor_status: (Integer, modify) Mechanism specific status code.

context_handle: (gss_ctx_id_t, read) A handle that refers to the security context.

src_name: (gss_name_t, modify, optional) The name of the context initiator. If the context was established using anonymous authentication, and if the application invoking gss_inquire_context is the context acceptor, an anonymous name will be returned. Storage associated with this name must be freed by the application after use with a call to gss_release_name(). Specify NULL if not required.

targ_name: (gss_name_t, modify, optional) The name of the context acceptor. Storage associated with this name must be freed by the application after use with a call to gss_release_name(). If the context acceptor did not authenticate itself, and if the initiator did not specify a target name in its call to gss_init_sec_context(), the value GSS_C_NO_NAME will be returned. Specify NULL if not required.

lifetime_rec: (Integer, modify, optional) The number of seconds for which the context will remain valid. If the context has expired, this parameter will be set to zero. If the implementation does not support context expiration, the value GSS_C_INDEFINITE will be returned. Specify NULL if not required.

mech_type: (gss_OID, modify, optional) The security mechanism providing the context. The returned OID will be a pointer to static storage that should be treated as read-only by the application; in particular the application should not attempt to free it. Specify NULL if not required.

ctx_flags: (bit-mask, modify, optional) Contains various independent flags, each of which indicates that the context supports (or is expected to support, if ctx_open is false) a specific service option. If not needed, specify NULL. Symbolic names are provided for each flag, and the symbolic names corresponding to the required flags should be logically-ANDed with the ret_flags value to test whether a given option is supported by the context. See below for the flags.

locally_initiated: (Boolean, modify) Non-zero if the invoking application is the context initiator. Specify NULL if not required.

open: (Boolean, modify) Non-zero if the context is fully established; Zero if a context-establishment token is expected from the peer application. Specify NULL if not required.

Obtains information about a security context. The caller must already have obtained a handle that refers to the context, although the context need not be fully established.

The ctx_flags values:

GSS_C_DELEG_FLAG

  • True - Credentials were delegated from the initiator to the acceptor.
  • False - No credentials were delegated.

GSS_C_MUTUAL_FLAG

  • True - The acceptor was authenticated to the initiator.
  • False - The acceptor did not authenticate itself.

GSS_C_REPLAY_FLAG

  • True - replay of protected messages will be detected.
  • False - replayed messages will not be detected.

GSS_C_SEQUENCE_FLAG

  • True - out-of-sequence protected messages will be detected.
  • False - out-of-sequence messages will not be detected.

GSS_C_CONF_FLAG

  • True - Confidentiality service may be invoked by calling gss_wrap routine.
  • False - No confidentiality service (via gss_wrap) available. gss_wrap will provide message encapsulation, data-origin authentication and integrity services only.

GSS_C_INTEG_FLAG

  • True - Integrity service may be invoked by calling either gss_get_mic or gss_wrap routines.
  • False - Per-message integrity service unavailable.

GSS_C_ANON_FLAG

  • True - The initiator’s identity will not be revealed to the acceptor. The src_name parameter (if requested) contains an anonymous internal name.
  • False - The initiator has been authenticated normally.

GSS_C_PROT_READY_FLAG

  • True - Protection services (as specified by the states of the GSS_C_CONF_FLAG and GSS_C_INTEG_FLAG) are available for use.
  • False - Protection services (as specified by the states of the GSS_C_CONF_FLAG and GSS_C_INTEG_FLAG) are available only if the context is fully established (i.e. if the open parameter is non-zero).

GSS_C_TRANS_FLAG

  • True - The resultant security context may be transferred to other processes via a call to gss_export_sec_context().
  • False - The security context is not transferable.

Return value:

GSS_S_COMPLETE: Successful completion.

GSS_S_NO_CONTEXT: The referenced context could not be accessed.

gss_wrap_size_limit

Function: OM_uint32 gss_wrap_size_limit (OM_uint32 * minor_status, const gss_ctx_id_t context_handle, int conf_req_flag, gss_qop_t qop_req, OM_uint32 req_output_size, OM_uint32 * max_input_size)

minor_status: (Integer, modify) Mechanism specific status code.

context_handle: (gss_ctx_id_t, read) A handle that refers to the security over which the messages will be sent.

conf_req_flag: (Boolean, read) Indicates whether gss_wrap will be asked to apply confidentiality protection in addition to integrity protection. See the routine description for gss_wrap for more details.

qop_req: (gss_qop_t, read) Indicates the level of protection that gss_wrap will be asked to provide. See the routine description for gss_wrap for more details.

req_output_size: (Integer, read) The desired maximum size for tokens emitted by gss_wrap.

max_input_size: (Integer, modify) The maximum input message size that may be presented to gss_wrap in order to guarantee that the emitted token shall be no larger than req_output_size bytes.

Allows an application to determine the maximum message size that, if presented to gss_wrap with the same conf_req_flag and qop_req parameters, will result in an output token containing no more than req_output_size bytes.

This call is intended for use by applications that communicate over protocols that impose a maximum message size. It enables the application to fragment messages prior to applying protection.

GSS-API implementations are recommended but not required to detect invalid QOP values when gss_wrap_size_limit() is called. This routine guarantees only a maximum message size, not the availability of specific QOP values for message protection.

Successful completion of this call does not guarantee that gss_wrap will be able to protect a message of length max_input_size bytes, since this ability may depend on the availability of system resources at the time that gss_wrap is called. However, if the implementation itself imposes an upper limit on the length of messages that may be processed by gss_wrap, the implementation should not return a value via max_input_bytes that is greater than this length.

Return value:

GSS_S_COMPLETE: Successful completion.

GSS_S_NO_CONTEXT: The referenced context could not be accessed.

GSS_S_CONTEXT_EXPIRED: The context has expired.

GSS_S_BAD_QOP: The specified QOP is not supported by the mechanism.

gss_export_sec_context

Function: OM_uint32 gss_export_sec_context (OM_uint32 * minor_status, gss_ctx_id_t * context_handle, gss_buffer_t interprocess_token)

minor_status: (Integer, modify) Mechanism specific status code.

context_handle: (gss_ctx_id_t, modify) Context handle identifying the context to transfer.

interprocess_token: (buffer, opaque, modify) Token to be transferred to target process. Storage associated with this token must be freed by the application after use with a call to gss_release_buffer().

Provided to support the sharing of work between multiple processes. This routine will typically be used by the context-acceptor, in an application where a single process receives incoming connection requests and accepts security contexts over them, then passes the established context to one or more other processes for message exchange. gss_export_sec_context() deactivates the security context for the calling process and creates an interprocess token which, when passed to gss_import_sec_context in another process, will re-activate the context in the second process. Only a single instantiation of a given context may be active at any one time; a subsequent attempt by a context exporter to access the exported security context will fail.

The implementation may constrain the set of processes by which the interprocess token may be imported, either as a function of local security policy, or as a result of implementation decisions. For example, some implementations may constrain contexts to be passed only between processes that run under the same account, or which are part of the same process group.

The interprocess token may contain security-sensitive information (for example cryptographic keys). While mechanisms are encouraged to either avoid placing such sensitive information within interprocess tokens, or to encrypt the token before returning it to the application, in a typical object-library GSS-API implementation this may not be possible. Thus the application must take care to protect the interprocess token, and ensure that any process to which the token is transferred is trustworthy.

If creation of the interprocess token is successful, the implementation shall deallocate all process-wide resources associated with the security context, and set the context_handle to GSS_C_NO_CONTEXT. In the event of an error that makes it impossible to complete the export of the security context, the implementation must not return an interprocess token, and should strive to leave the security context referenced by the context_handle parameter untouched. If this is impossible, it is permissible for the implementation to delete the security context, providing it also sets the context_handle parameter to GSS_C_NO_CONTEXT.

Return value:

GSS_S_COMPLETE: Successful completion.

GSS_S_CONTEXT_EXPIRED: The context has expired.

GSS_S_NO_CONTEXT: The context was invalid.

GSS_S_UNAVAILABLE: The operation is not supported.

gss_import_sec_context

Function: OM_uint32 gss_import_sec_context (OM_uint32 * minor_status, const gss_buffer_t interprocess_token, gss_ctx_id_t * context_handle)

minor_status: (Integer, modify) Mechanism specific status code.

interprocess_token: (buffer, opaque, modify) Token received from exporting process

context_handle: (gss_ctx_id_t, modify) Context handle of newly reactivated context. Resources associated with this context handle must be released by the application after use with a call to gss_delete_sec_context().

Allows a process to import a security context established by another process. A given interprocess token may be imported only once. See gss_export_sec_context.

Return value:

GSS_S_COMPLETE: Successful completion.

GSS_S_NO_CONTEXT: The token did not contain a valid context reference.

GSS_S_DEFECTIVE_TOKEN: The token was invalid.

GSS_S_UNAVAILABLE: The operation is unavailable.

GSS_S_UNAUTHORIZED: Local policy prevents the import of this context by the current process.


3.7 Per-Message Routines

   GSS-API Per-message Routines

   Routine                         Function
   -------                         --------
   gss_get_mic                     Calculate a cryptographic message
                                   integrity code (MIC) for a
                                   message; integrity service.
   gss_verify_mic                  Check a MIC against a message;
                                   verify integrity of a received
                                   message.
   gss_wrap                        Attach a MIC to a message, and
                                   optionally encrypt the message
                                   content.
                                   confidentiality service
   gss_unwrap                      Verify a message with attached
                                   MIC, and decrypt message content
                                   if necessary.

gss_get_mic

Function: OM_uint32 gss_get_mic (OM_uint32 * minor_status, const gss_ctx_id_t context_handle, gss_qop_t qop_req, const gss_buffer_t message_buffer, gss_buffer_t message_token)

minor_status: (Integer, modify) Mechanism specific status code.

context_handle: (gss_ctx_id_t, read) Identifies the context on which the message will be sent.

qop_req: (gss_qop_t, read, optional) Specifies requested quality of protection. Callers are encouraged, on portability grounds, to accept the default quality of protection offered by the chosen mechanism, which may be requested by specifying GSS_C_QOP_DEFAULT for this parameter. If an unsupported protection strength is requested, gss_get_mic will return a major_status of GSS_S_BAD_QOP.

message_buffer: (buffer, opaque, read) Message to be protected.

message_token: (buffer, opaque, modify) Buffer to receive token. The application must free storage associated with this buffer after use with a call to gss_release_buffer().

Generates a cryptographic MIC for the supplied message, and places the MIC in a token for transfer to the peer application. The qop_req parameter allows a choice between several cryptographic algorithms, if supported by the chosen mechanism.

Since some application-level protocols may wish to use tokens emitted by gss_wrap() to provide "secure framing", implementations must support derivation of MICs from zero-length messages.

Return value:

GSS_S_COMPLETE: Successful completion.

GSS_S_CONTEXT_EXPIRED: The context has already expired.

GSS_S_NO_CONTEXT: The context_handle parameter did not identify a valid context.

GSS_S_BAD_QOP: The specified QOP is not supported by the mechanism.

gss_verify_mic

Function: OM_uint32 gss_verify_mic (OM_uint32 * minor_status, const gss_ctx_id_t context_handle, const gss_buffer_t message_buffer, const gss_buffer_t token_buffer, gss_qop_t * qop_state)

minor_status: (Integer, modify) Mechanism specific status code.

context_handle: (gss_ctx_id_t, read) Identifies the context on which the message arrived.

message_buffer: (buffer, opaque, read) Message to be verified.

token_buffer: (buffer, opaque, read) Token associated with message.

qop_state: (gss_qop_t, modify, optional) Quality of protection gained from MIC Specify NULL if not required.

Verifies that a cryptographic MIC, contained in the token parameter, fits the supplied message. The qop_state parameter allows a message recipient to determine the strength of protection that was applied to the message.

Since some application-level protocols may wish to use tokens emitted by gss_wrap() to provide "secure framing", implementations must support the calculation and verification of MICs over zero-length messages.

Return value:

GSS_S_COMPLETE: Successful completion.

GSS_S_DEFECTIVE_TOKEN: The token failed consistency checks.

GSS_S_BAD_SIG: The MIC was incorrect.

GSS_S_DUPLICATE_TOKEN: The token was valid, and contained a correct MIC for the message, but it had already been processed.

GSS_S_OLD_TOKEN: The token was valid, and contained a correct MIC for the message, but it is too old to check for duplication.

GSS_S_UNSEQ_TOKEN: The token was valid, and contained a correct MIC for the message, but has been verified out of sequence; a later token has already been received.

GSS_S_GAP_TOKEN: The token was valid, and contained a correct MIC for the message, but has been verified out of sequence; an earlier expected token has not yet been received.

GSS_S_CONTEXT_EXPIRED: The context has already expired.

GSS_S_NO_CONTEXT: The context_handle parameter did not identify a valid context.

gss_wrap

Function: OM_uint32 gss_wrap (OM_uint32 * minor_status, const gss_ctx_id_t context_handle, int conf_req_flag, gss_qop_t qop_req, const gss_buffer_t input_message_buffer, int * conf_state, gss_buffer_t output_message_buffer)

minor_status: (Integer, modify) Mechanism specific status code.

context_handle: (gss_ctx_id_t, read) Identifies the context on which the message will be sent.

conf_req_flag: (boolean, read) Non-zero - Both confidentiality and integrity services are requested. Zero - Only integrity service is requested.

qop_req: (gss_qop_t, read, optional) Specifies required quality of protection. A mechanism-specific default may be requested by setting qop_req to GSS_C_QOP_DEFAULT. If an unsupported protection strength is requested, gss_wrap will return a major_status of GSS_S_BAD_QOP.

input_message_buffer: (buffer, opaque, read) Message to be protected.

conf_state: (boolean, modify, optional) Non-zero - Confidentiality, data origin authentication and integrity services have been applied. Zero - Integrity and data origin services only has been applied. Specify NULL if not required.

output_message_buffer: (buffer, opaque, modify) Buffer to receive protected message. Storage associated with this message must be freed by the application after use with a call to gss_release_buffer().

Attaches a cryptographic MIC and optionally encrypts the specified input_message. The output_message contains both the MIC and the message. The qop_req parameter allows a choice between several cryptographic algorithms, if supported by the chosen mechanism.

Since some application-level protocols may wish to use tokens emitted by gss_wrap() to provide "secure framing", implementations must support the wrapping of zero-length messages.

Return value:

GSS_S_COMPLETE: Successful completion.

GSS_S_CONTEXT_EXPIRED: The context has already expired.

GSS_S_NO_CONTEXT: The context_handle parameter did not identify a valid context.

GSS_S_BAD_QOP: The specified QOP is not supported by the mechanism.

gss_unwrap

Function: OM_uint32 gss_unwrap (OM_uint32 * minor_status, const gss_ctx_id_t context_handle, const gss_buffer_t input_message_buffer, gss_buffer_t output_message_buffer, int * conf_state, gss_qop_t * qop_state)

minor_status: (Integer, modify) Mechanism specific status code.

context_handle: (gss_ctx_id_t, read) Identifies the context on which the message arrived.

input_message_buffer: (buffer, opaque, read) Protected message.

output_message_buffer: (buffer, opaque, modify) Buffer to receive unwrapped message. Storage associated with this buffer must be freed by the application after use use with a call to gss_release_buffer().

conf_state: (boolean, modify, optional) Non-zero - Confidentiality and integrity protection were used. Zero - Integrity service only was used. Specify NULL if not required.

qop_state: (gss_qop_t, modify, optional) Quality of protection provided. Specify NULL if not required.

Converts a message previously protected by gss_wrap back to a usable form, verifying the embedded MIC. The conf_state parameter indicates whether the message was encrypted; the qop_state parameter indicates the strength of protection that was used to provide the confidentiality and integrity services.

Since some application-level protocols may wish to use tokens emitted by gss_wrap() to provide "secure framing", implementations must support the wrapping and unwrapping of zero-length messages.

Return value:

GSS_S_COMPLETE: Successful completion.

GSS_S_DEFECTIVE_TOKEN: The token failed consistency checks.

GSS_S_BAD_SIG: The MIC was incorrect.

GSS_S_DUPLICATE_TOKEN: The token was valid, and contained a correct MIC for the message, but it had already been processed.

GSS_S_OLD_TOKEN: The token was valid, and contained a correct MIC for the message, but it is too old to check for duplication.

GSS_S_UNSEQ_TOKEN: The token was valid, and contained a correct MIC for the message, but has been verified out of sequence; a later token has already been received.

GSS_S_GAP_TOKEN: The token was valid, and contained a correct MIC for the message, but has been verified out of sequence; an earlier expected token has not yet been received.

GSS_S_CONTEXT_EXPIRED: The context has already expired.

GSS_S_NO_CONTEXT: The context_handle parameter did not identify a valid context.


3.8 Name Manipulation

   GSS-API Name manipulation Routines

   Routine                         Function
   -------                         --------
   gss_import_name                 Convert a contiguous string name
                                   to internal-form.
   gss_display_name                Convert internal-form name to
                                   text.
   gss_compare_name                Compare two internal-form names.
   gss_release_name                Discard an internal-form name.
   gss_inquire_names_for_mech      List the name-types supported by.
                                   the specified mechanism.
   gss_inquire_mechs_for_name      List mechanisms that support the
                                   specified name-type.
   gss_canonicalize_name           Convert an internal name to an MN.
   gss_export_name                 Convert an MN to export form.
   gss_duplicate_name              Create a copy of an internal name.

gss_import_name

Function: OM_uint32 gss_import_name (OM_uint32 * minor_status, const gss_buffer_t input_name_buffer, const gss_OID input_name_type, gss_name_t * output_name)

minor_status: (Integer, modify) Mechanism specific status code.

input_name_buffer: (buffer, octet-string, read) Buffer containing contiguous string name to convert.

input_name_type: (Object ID, read, optional) Object ID specifying type of printable name. Applications may specify either GSS_C_NO_OID to use a mechanism-specific default printable syntax, or an OID recognized by the GSS-API implementation to name a specific namespace.

output_name: (gss_name_t, modify) Returned name in internal form. Storage associated with this name must be freed by the application after use with a call to gss_release_name().

Convert a contiguous string name to internal form. In general, the internal name returned (via the @output_name parameter) will not be an MN; the exception to this is if the @input_name_type indicates that the contiguous string provided via the @input_name_buffer parameter is of type GSS_C_NT_EXPORT_NAME, in which case the returned internal name will be an MN for the mechanism that exported the name.

Return value:

GSS_S_COMPLETE: Successful completion.

GSS_S_BAD_NAMETYPE: The input_name_type was unrecognized.

GSS_S_BAD_NAME: The input_name parameter could not be interpreted as a name of the specified type.

GSS_S_BAD_MECH: The input name-type was GSS_C_NT_EXPORT_NAME, but the mechanism contained within the input-name is not supported.

gss_display_name

Function: OM_uint32 gss_display_name (OM_uint32 * minor_status, const gss_name_t input_name, gss_buffer_t output_name_buffer, gss_OID * output_name_type)

minor_status: (Integer, modify) Mechanism specific status code.

input_name: (gss_name_t, read) Name to be displayed.

output_name_buffer: (buffer, character-string, modify) Buffer to receive textual name string. The application must free storage associated with this name after use with a call to gss_release_buffer().

output_name_type: (Object ID, modify, optional) The type of the returned name. The returned gss_OID will be a pointer into static storage, and should be treated as read-only by the caller (in particular, the application should not attempt to free it). Specify NULL if not required.

Allows an application to obtain a textual representation of an opaque internal-form name for display purposes. The syntax of a printable name is defined by the GSS-API implementation.

If input_name denotes an anonymous principal, the implementation should return the gss_OID value GSS_C_NT_ANONYMOUS as the output_name_type, and a textual name that is syntactically distinct from all valid supported printable names in output_name_buffer.

If input_name was created by a call to gss_import_name, specifying GSS_C_NO_OID as the name-type, implementations that employ lazy conversion between name types may return GSS_C_NO_OID via the output_name_type parameter.

Return value:

GSS_S_COMPLETE: Successful completion.

GSS_S_BAD_NAME: @input_name was ill-formed.

gss_compare_name

Function: OM_uint32 gss_compare_name (OM_uint32 * minor_status, const gss_name_t name1, const gss_name_t name2, int * name_equal)

minor_status: (Integer, modify) Mechanism specific status code.

name1: (gss_name_t, read) Internal-form name.

name2: (gss_name_t, read) Internal-form name.

name_equal: (boolean, modify) Non-zero - names refer to same entity. Zero - names refer to different entities (strictly, the names are not known to refer to the same identity).

Allows an application to compare two internal-form names to determine whether they refer to the same entity.

If either name presented to gss_compare_name denotes an anonymous principal, the routines should indicate that the two names do not refer to the same identity.

Return value:

GSS_S_COMPLETE: Successful completion.

GSS_S_BAD_NAMETYPE: The two names were of incomparable types.

GSS_S_BAD_NAME: One or both of name1 or name2 was ill-formed.

gss_release_name

Function: OM_uint32 gss_release_name (OM_uint32 * minor_status, gss_name_t * name)

minor_status: (Integer, modify) Mechanism specific status code.

name: (gss_name_t, modify) The name to be deleted.

Free GSSAPI-allocated storage associated with an internal-form name. The name is set to GSS_C_NO_NAME on successful completion of this call.

Return value:

GSS_S_COMPLETE: Successful completion.

GSS_S_BAD_NAME: The name parameter did not contain a valid name.

gss_inquire_names_for_mech

Function: OM_uint32 gss_inquire_names_for_mech (OM_uint32 * minor_status, const gss_OID mechanism, gss_OID_set * name_types)

minor_status: (Integer, modify) Mechanism specific status code.

mechanism: (gss_OID, read) The mechanism to be interrogated.

name_types: (gss_OID_set, modify) Set of name-types supported by the specified mechanism. The returned OID set must be freed by the application after use with a call to gss_release_oid_set().

Returns the set of nametypes supported by the specified mechanism.

Return value:

GSS_S_COMPLETE: Successful completion.

gss_inquire_mechs_for_name

Function: OM_uint32 gss_inquire_mechs_for_name (OM_uint32 * minor_status, const gss_name_t input_name, gss_OID_set * mech_types)

minor_status: (Integer, modify) Mechanism specific status code.

input_name: (gss_name_t, read) The name to which the inquiry relates.

mech_types: (gss_OID_set, modify) Set of mechanisms that may support the specified name. The returned OID set must be freed by the caller after use with a call to gss_release_oid_set().

Returns the set of mechanisms supported by the GSS-API implementation that may be able to process the specified name.

Each mechanism returned will recognize at least one element within the name. It is permissible for this routine to be implemented within a mechanism-independent GSS-API layer, using the type information contained within the presented name, and based on registration information provided by individual mechanism implementations. This means that the returned mech_types set may indicate that a particular mechanism will understand the name when in fact it would refuse to accept the name as input to gss_canonicalize_name, gss_init_sec_context, gss_acquire_cred or gss_add_cred (due to some property of the specific name, as opposed to the name type). Thus this routine should be used only as a prefilter for a call to a subsequent mechanism-specific routine.

Return value:

GSS_S_COMPLETE: Successful completion.

GSS_S_BAD_NAME: The input_name parameter was ill-formed.

GSS_S_BAD_NAMETYPE: The input_name parameter contained an invalid or unsupported type of name.

gss_canonicalize_name

Function: OM_uint32 gss_canonicalize_name (OM_uint32 * minor_status, const gss_name_t input_name, const gss_OID mech_type, gss_name_t * output_name)

minor_status: (Integer, modify) Mechanism specific status code.

input_name: (gss_name_t, read) The name for which a canonical form is desired.

mech_type: (Object ID, read) The authentication mechanism for which the canonical form of the name is desired. The desired mechanism must be specified explicitly; no default is provided.

output_name: (gss_name_t, modify) The resultant canonical name. Storage associated with this name must be freed by the application after use with a call to gss_release_name().

Generate a canonical mechanism name (MN) from an arbitrary internal name. The mechanism name is the name that would be returned to a context acceptor on successful authentication of a context where the initiator used the input_name in a successful call to gss_acquire_cred, specifying an OID set containing @mech_type as its only member, followed by a call to gss_init_sec_context(), specifying @mech_type as the authentication mechanism.

Return value:

GSS_S_COMPLETE: Successful completion.

gss_export_name

Function: OM_uint32 gss_export_name (OM_uint32 * minor_status, const gss_name_t input_name, gss_buffer_t exported_name)

minor_status: (Integer, modify) Mechanism specific status code.

input_name: (gss_name_t, read) The MN to be exported.

exported_name: (gss_buffer_t, octet-string, modify) The canonical contiguous string form of @input_name. Storage associated with this string must freed by the application after use with gss_release_buffer().

To produce a canonical contiguous string representation of a mechanism name (MN), suitable for direct comparison (e.g. with memcmp) for use in authorization functions (e.g. matching entries in an access-control list). The @input_name parameter must specify a valid MN (i.e. an internal name generated by gss_accept_sec_context() or by gss_canonicalize_name()).

Return value:

GSS_S_COMPLETE: Successful completion.

GSS_S_NAME_NOT_MN: The provided internal name was not a mechanism name.

GSS_S_BAD_NAME: The provided internal name was ill-formed.

GSS_S_BAD_NAMETYPE: The internal name was of a type not supported by the GSS-API implementation.

gss_duplicate_name

Function: OM_uint32 gss_duplicate_name (OM_uint32 * minor_status, const gss_name_t src_name, gss_name_t * dest_name)

minor_status: (Integer, modify) Mechanism specific status code.

src_name: (gss_name_t, read) Internal name to be duplicated.

dest_name: (gss_name_t, modify) The resultant copy of @src_name. Storage associated with this name must be freed by the application after use with a call to gss_release_name().

Create an exact duplicate of the existing internal name @src_name. The new @dest_name will be independent of src_name (i.e. @src_name and @dest_name must both be released, and the release of one shall not affect the validity of the other).

Return value:

GSS_S_COMPLETE: Successful completion.

GSS_S_BAD_NAME: The src_name parameter was ill-formed.


3.9 Miscellaneous Routines

   GSS-API Miscellaneous Routines

   Routine                        Function
   -------                        --------
   gss_add_oid_set_member         Add an object identifier to
                                  a set.
   gss_display_status             Convert a GSS-API status code
                                  to text.
   gss_indicate_mechs             Determine available underlying
                                  authentication mechanisms.
   gss_release_buffer             Discard a buffer.
   gss_release_oid_set            Discard a set of object
                                  identifiers.
   gss_create_empty_oid_set       Create a set containing no
                                  object identifiers.
   gss_test_oid_set_member        Determines whether an object
                                  identifier is a member of a set.
   gss_encapsulate_token          Encapsulate a context token.
   gss_decapsulate_token          Decapsulate a context token.
   gss_oid_equal                  Compare two OIDs for equality.

gss_add_oid_set_member

Function: OM_uint32 gss_add_oid_set_member (OM_uint32 * minor_status, const gss_OID member_oid, gss_OID_set * oid_set)

minor_status: (integer, modify) Mechanism specific status code.

member_oid: (Object ID, read) The object identifier to copied into the set.

oid_set: (Set of Object ID, modify) The set in which the object identifier should be inserted.

Add an Object Identifier to an Object Identifier set. This routine is intended for use in conjunction with gss_create_empty_oid_set when constructing a set of mechanism OIDs for input to gss_acquire_cred. The oid_set parameter must refer to an OID-set that was created by GSS-API (e.g. a set returned by gss_create_empty_oid_set()). GSS-API creates a copy of the member_oid and inserts this copy into the set, expanding the storage allocated to the OID-set’s elements array if necessary. The routine may add the new member OID anywhere within the elements array, and implementations should verify that the new member_oid is not already contained within the elements array; if the member_oid is already present, the oid_set should remain unchanged.

Return value:

GSS_S_COMPLETE: Successful completion.

gss_display_status

Function: OM_uint32 gss_display_status (OM_uint32 * minor_status, OM_uint32 status_value, int status_type, const gss_OID mech_type, OM_uint32 * message_context, gss_buffer_t status_string)

minor_status: (integer, modify) Mechanism specific status code.

status_value: (Integer, read) Status value to be converted.

status_type: (Integer, read) GSS_C_GSS_CODE - status_value is a GSS status code. GSS_C_MECH_CODE - status_value is a mechanism status code.

mech_type: (Object ID, read, optional) Underlying mechanism (used to interpret a minor status value). Supply GSS_C_NO_OID to obtain the system default.

message_context: (Integer, read/modify) Should be initialized to zero by the application prior to the first call. On return from gss_display_status(), a non-zero status_value parameter indicates that additional messages may be extracted from the status code via subsequent calls to gss_display_status(), passing the same status_value, status_type, mech_type, and message_context parameters.

status_string: (buffer, character string, modify) Textual interpretation of the status_value. Storage associated with this parameter must be freed by the application after use with a call to gss_release_buffer().

Allows an application to obtain a textual representation of a GSS-API status code, for display to the user or for logging purposes. Since some status values may indicate multiple conditions, applications may need to call gss_display_status multiple times, each call generating a single text string. The message_context parameter is used by gss_display_status to store state information about which error messages have already been extracted from a given status_value; message_context must be initialized to 0 by the application prior to the first call, and gss_display_status will return a non-zero value in this parameter if there are further messages to extract.

The message_context parameter contains all state information required by gss_display_status in order to extract further messages from the status_value; even when a non-zero value is returned in this parameter, the application is not required to call gss_display_status again unless subsequent messages are desired. The following code extracts all messages from a given status code and prints them to stderr:

OM_uint32 message_context;
OM_uint32 status_code;
OM_uint32 maj_status;
OM_uint32 min_status;
gss_buffer_desc status_string;

       ...

message_context = 0;

do {
  maj_status = gss_display_status (
                  &min_status,
                  status_code,
                  GSS_C_GSS_CODE,
                  GSS_C_NO_OID,
                  &message_context,
                  &status_string)

  fprintf(stderr,
          "%.*s\n",
         (int)status_string.length,

         (char *)status_string.value);

  gss_release_buffer(&min_status, &status_string);

} while (message_context != 0);

Return value:

GSS_S_COMPLETE: Successful completion.

GSS_S_BAD_MECH: Indicates that translation in accordance with an unsupported mechanism type was requested.

GSS_S_BAD_STATUS: The status value was not recognized, or the status type was neither GSS_C_GSS_CODE nor GSS_C_MECH_CODE.

gss_indicate_mechs

Function: OM_uint32 gss_indicate_mechs (OM_uint32 * minor_status, gss_OID_set * mech_set)

minor_status: (integer, modify) Mechanism specific status code.

mech_set: (set of Object IDs, modify) Set of implementation-supported mechanisms. The returned gss_OID_set value will be a dynamically-allocated OID set, that should be released by the caller after use with a call to gss_release_oid_set().

Allows an application to determine which underlying security mechanisms are available.

Return value:

GSS_S_COMPLETE: Successful completion.

gss_release_buffer

Function: OM_uint32 gss_release_buffer (OM_uint32 * minor_status, gss_buffer_t buffer)

minor_status: (integer, modify) Mechanism specific status code.

buffer: (buffer, modify) The storage associated with the buffer will be deleted. The gss_buffer_desc object will not be freed, but its length field will be zeroed.

Free storage associated with a buffer. The storage must have been allocated by a GSS-API routine. In addition to freeing the associated storage, the routine will zero the length field in the descriptor to which the buffer parameter refers, and implementations are encouraged to additionally set the pointer field in the descriptor to NULL. Any buffer object returned by a GSS-API routine may be passed to gss_release_buffer (even if there is no storage associated with the buffer).

Return value:

GSS_S_COMPLETE: Successful completion.

gss_release_oid_set

Function: OM_uint32 gss_release_oid_set (OM_uint32 * minor_status, gss_OID_set * set)

minor_status: (integer, modify) Mechanism specific status code.

set: (Set of Object IDs, modify) The storage associated with the gss_OID_set will be deleted.

Free storage associated with a GSSAPI-generated gss_OID_set object. The set parameter must refer to an OID-set that was returned from a GSS-API routine. gss_release_oid_set() will free the storage associated with each individual member OID, the OID set’s elements array, and the gss_OID_set_desc.

The gss_OID_set parameter is set to GSS_C_NO_OID_SET on successful completion of this routine.

Return value:

GSS_S_COMPLETE: Successful completion.

gss_create_empty_oid_set

Function: OM_uint32 gss_create_empty_oid_set (OM_uint32 * minor_status, gss_OID_set * oid_set)

minor_status: (integer, modify) Mechanism specific status code.

oid_set: (Set of Object IDs, modify) The empty object identifier set. The routine will allocate the gss_OID_set_desc object, which the application must free after use with a call to gss_release_oid_set().

Create an object-identifier set containing no object identifiers, to which members may be subsequently added using the gss_add_oid_set_member() routine. These routines are intended to be used to construct sets of mechanism object identifiers, for input to gss_acquire_cred.

Return value:

GSS_S_COMPLETE: Successful completion.

gss_test_oid_set_member

Function: OM_uint32 gss_test_oid_set_member (OM_uint32 * minor_status, const gss_OID member, const gss_OID_set set, int * present)

minor_status: (integer, modify) Mechanism specific status code.

member: (Object ID, read) The object identifier whose presence is to be tested.

set: (Set of Object ID, read) The Object Identifier set.

present: (Boolean, modify) Non-zero if the specified OID is a member of the set, zero if not.

Interrogate an Object Identifier set to determine whether a specified Object Identifier is a member. This routine is intended to be used with OID sets returned by gss_indicate_mechs(), gss_acquire_cred(), and gss_inquire_cred(), but will also work with user-generated sets.

Return value:

GSS_S_COMPLETE: Successful completion.

gss_encapsulate_token

Function: extern OM_uint32 gss_encapsulate_token (gss_const_buffer_t input_token, gss_const_OID token_oid, gss_buffer_t output_token)

input_token: (buffer, opaque, read) Buffer with GSS-API context token data.

token_oid: (Object ID, read) Object identifier of token.

output_token: (buffer, opaque, modify) Encapsulated token data; caller must release with gss_release_buffer().

Add the mechanism-independent token header to GSS-API context token data. This is used for the initial token of a GSS-API context establishment sequence. It incorporates an identifier of the mechanism type to be used on that context, and enables tokens to be interpreted unambiguously at GSS-API peers. See further section 3.1 of RFC 2743. This function is standardized in RFC 6339.

Returns:

GSS_S_COMPLETE: Indicates successful completion, and that output parameters holds correct information.

GSS_S_FAILURE: Indicates that encapsulation failed for reasons unspecified at the GSS-API level.

gss_decapsulate_token

Function: OM_uint32 gss_decapsulate_token (gss_const_buffer_t input_token, gss_const_OID token_oid, gss_buffer_t output_token)

input_token: (buffer, opaque, read) Buffer with GSS-API context token.

token_oid: (Object ID, read) Expected object identifier of token.

output_token: (buffer, opaque, modify) Decapsulated token data; caller must release with gss_release_buffer().

Remove the mechanism-independent token header from an initial GSS-API context token. Unwrap a buffer in the mechanism-independent token format. This is the reverse of gss_encapsulate_token(). The translation is loss-less, all data is preserved as is. This function is standardized in RFC 6339.

Return value:

GSS_S_COMPLETE: Indicates successful completion, and that output parameters holds correct information.

GSS_S_DEFECTIVE_TOKEN: Means that the token failed consistency checks (e.g., OID mismatch or ASN.1 DER length errors).

GSS_S_FAILURE: Indicates that decapsulation failed for reasons unspecified at the GSS-API level.

gss_oid_equal

Function: int gss_oid_equal (gss_const_OID first_oid, gss_const_OID second_oid)

first_oid: (Object ID, read) First Object identifier.

second_oid: (Object ID, read) First Object identifier.

Compare two OIDs for equality. The comparison is "deep", i.e., the actual byte sequences of the OIDs are compared instead of just the pointer equality. This function is standardized in RFC 6339.

Return value: Returns boolean value true when the two OIDs are equal, otherwise false.


3.10 SASL GS2 Routines

gss_inquire_mech_for_saslname

Function: OM_uint32 gss_inquire_mech_for_saslname (OM_uint32 * minor_status, const gss_buffer_t sasl_mech_name, gss_OID * mech_type)

minor_status: (Integer, modify) Mechanism specific status code.

sasl_mech_name: (buffer, character-string, read) Buffer with SASL mechanism name.

mech_type: (OID, modify, optional) Actual mechanism used. The OID returned via this parameter will be a pointer to static storage that should be treated as read-only; In particular the application should not attempt to free it. Specify NULL if not required.

Output GSS-API mechanism OID of mechanism associated with given @sasl_mech_name.

Returns:

GSS_S_COMPLETE: Successful completion.

GSS_S_BAD_MECH: There is no GSS-API mechanism known as @sasl_mech_name.

gss_inquire_saslname_for_mech

Function: OM_uint32 gss_inquire_saslname_for_mech (OM_uint32 * minor_status, const gss_OID desired_mech, gss_buffer_t sasl_mech_name, gss_buffer_t mech_name, gss_buffer_t mech_description)

minor_status: (Integer, modify) Mechanism specific status code.

desired_mech: (OID, read) Identifies the GSS-API mechanism to query.

sasl_mech_name: (buffer, character-string, modify, optional) Buffer to receive SASL mechanism name. The application must free storage associated with this name after use with a call to gss_release_buffer().

mech_name: (buffer, character-string, modify, optional) Buffer to receive human readable mechanism name. The application must free storage associated with this name after use with a call to gss_release_buffer().

mech_description: (buffer, character-string, modify, optional) Buffer to receive description of mechanism. The application must free storage associated with this name after use with a call to gss_release_buffer().

Output the SASL mechanism name of a GSS-API mechanism. It also returns a name and description of the mechanism in a user friendly form.

Returns:

GSS_S_COMPLETE: Successful completion.

GSS_S_BAD_MECH: The @desired_mech OID is unsupported.


Next: , Previous: , Up: Top   [Contents][Index]

4 Extended GSS API

None of the following functions are standard GSS API functions. As such, they are not declared in gss/api.h, but rather in gss/ext.h (which is included from gss.h). See Header.

gss_check_version

Function: const char * gss_check_version (const char * req_version)

req_version: version string to compare with, or NULL

Check that the version of the library is at minimum the one given as a string in @req_version.

Return value: The actual version string of the library; NULL if the condition is not met. If NULL is passed to this function no check is done and only the version string is returned.

gss_userok

Function: int gss_userok (const gss_name_t name, const char * username)

name: (gss_name_t, read) Name to be compared.

username: Zero terminated string with username.

Compare the username against the output from gss_export_name() invoked on @name, after removing the leading OID. This answers the question whether the particular mechanism would authenticate them as the same principal

Return value: Returns 0 if the names match, non-0 otherwise.


Next: , Previous: , Up: Top   [Contents][Index]

5 Invoking gss

Name

GNU GSS (gss) – Command line interface to the GSS Library.

Description

gss is the main program of GNU GSS.

Mandatory or optional arguments to long options are also mandatory or optional for any corresponding short options.

Commands

gss recognizes these commands:

  -l, --list-mechanisms
                    List information about supported mechanisms
                    in a human readable format.
  -m, --major=LONG  Describe a `major status' error code value.
  -a, --accept-sec-context
                    Accept a security context as server.
  -i, --init-sec-context=MECH
                    Initialize a security context as client.
                    MECH is the SASL name of mechanism, use -l
                    to list supported mechanisms.
  -n, --server-name=SERVICE@HOSTNAME
                    For -i, set the name of the remote host.
                    For example, "imap@mail.example.com".

Other Options

These are some standard parameters.

  -h, --help        Print help and exit
  -V, --version     Print version and exit
  -q, --quiet       Silent operation  (default=off)

Examples

To list the supported mechanisms, use gss -l like this:

$ src/gss -l
Found 1 supported mechanisms.

Mechanism 0:
        Mechanism name: Kerberos V5
        Mechanism description: Kerberos V5 GSS-API mechanism
        SASL Mechanism name: GS2-KRB5
$

To initialize a Kerberos V5 security context, use the --init-sec-context parameter. Kerberos V5 needs to know the name of the remote entity, so you need to supply the --server-name parameter as well. That will provide the name of the server. For example, use imap@mail.example.com to setup a security context with the imap service on the host mail.example.com. The Kerberos V5 client will use your ticket-granting ticket (which needs to be available) and acquire a server ticket for the service. The KDC must know about the server for this to work. The tool will print the GSS-API context tokens base64 encoded on standard output.

$ gss -i GS2-KRB5 -n host@interop.josefsson.org
Context token (protection is available):
YIICIQYJKoZIhvcSAQICAQBuggIQMIICDKADAgEFoQMCAQ6iBwMFACAAAACjggEYYYIBFDCCARCgAwIBBaEXGxVpbnRlcm9wLmpvc2Vmc3Nvbi5vcmeiKDAmoAMCAQGhHzAdGwRob3N0GxVpbnRlcm9wLmpvc2Vmc3Nvbi5vcmejgcUwgcKgAwIBEqKBugSBt0zqTh6tBBKV2BwDjQg6H4abEaPshPa0o3tT/TH9U7BaSw/M9ugYYqpHAhOitVjcQidhG2FdSl1n3FOgDBufHHO+gHOW0Y1XHc2QtEdkg1xYF2J4iR1vNQB14kXDM78pogCsfvfLnjsEESKWoeKRGOYWPRx0ksLJDnl/e5tXecZTjhJ3hLrFNBEWRmpIOakTAPnL+Xzz6xcnLHMLLnhZ5VcHqtIMm5p9IDWsP0juIncJ6tO8hjMA2qSB2jCB16ADAgESooHPBIHMWSeRBgV80gh/6hNNMr00jTVwCs5TEAIkljvjOfyPmNBzIFWoG+Wj5ZKOBdizdi7vYbJ2s8b1iSsq/9YEZSqaTxul+5aNrclKoJ7J/IW4kTuMklHcQf/A16TeZFsm9TdfE+x8+PjbOBFtKYXT8ODT8LLicNNiDbWW0meY7lsktXAVpZiUds4wTZ1W5bOSEGY7+mxAWrAlTnNwNAt1J2MHZnfGJFJDLJZldXoyG8OwHyp4h1nBhgzC5BfAmL85QJVxxgVfiHhM5oT9mE1O
Input context token:

The tool is waiting for the final Kerberos V5 context token from the server. Note the status text informing you that message protection is available.

To accept a Kerberos V5 context, the process is similar. The server needs to know its name, so that it can find the host key from (typically) /etc/shishi/shishi.keys. Once started it will wait for a context token from the client. Below we’ll paste in the token printed above.

$ gss -a -n host@interop.josefsson.org
Importing name "host@interop.josefsson.org"...
Acquiring credentials...
Input context token:
YIICIQYJKoZIhvcSAQICAQBuggIQMIICDKADAgEFoQMCAQ6iBwMFACAAAACjggEYYYIBFDCCARCgAwIBBaEXGxVpbnRlcm9wLmpvc2Vmc3Nvbi5vcmeiKDAmoAMCAQGhHzAdGwRob3N0GxVpbnRlcm9wLmpvc2Vmc3Nvbi5vcmejgcUwgcKgAwIBEqKBugSBt0zqTh6tBBKV2BwDjQg6H4abEaPshPa0o3tT/TH9U7BaSw/M9ugYYqpHAhOitVjcQidhG2FdSl1n3FOgDBufHHO+gHOW0Y1XHc2QtEdkg1xYF2J4iR1vNQB14kXDM78pogCsfvfLnjsEESKWoeKRGOYWPRx0ksLJDnl/e5tXecZTjhJ3hLrFNBEWRmpIOakTAPnL+Xzz6xcnLHMLLnhZ5VcHqtIMm5p9IDWsP0juIncJ6tO8hjMA2qSB2jCB16ADAgESooHPBIHMWSeRBgV80gh/6hNNMr00jTVwCs5TEAIkljvjOfyPmNBzIFWoG+Wj5ZKOBdizdi7vYbJ2s8b1iSsq/9YEZSqaTxul+5aNrclKoJ7J/IW4kTuMklHcQf/A16TeZFsm9TdfE+x8+PjbOBFtKYXT8ODT8LLicNNiDbWW0meY7lsktXAVpZiUds4wTZ1W5bOSEGY7+mxAWrAlTnNwNAt1J2MHZnfGJFJDLJZldXoyG8OwHyp4h1nBhgzC5BfAmL85QJVxxgVfiHhM5oT9mE1O
Context has been accepted.  Final context token:
YHEGCSqGSIb3EgECAgIAb2IwYKADAgEFoQMCAQ+iVDBSoAMCARKhAwIBAKJGBESy1Zoy9DrG+DuV/6aWmAp79s9d+ofGXC/WKOzRuxAqo98vMRWbsbILW8z9aF1th4GZz0kjFz/hZAmnWyomZ9JiP3yQvg==
$

Returning to the client, you may now cut’n’paste the final context token as shown by the server. The client has then authenticated the server as well. The output from the client is shown below.

YHEGCSqGSIb3EgECAgIAb2IwYKADAgEFoQMCAQ+iVDBSoAMCARKhAwIBAKJGBESy1Zoy9DrG+DuV/6aWmAp79s9d+ofGXC/WKOzRuxAqo98vMRWbsbILW8z9aF1th4GZz0kjFz/hZAmnWyomZ9JiP3yQvg==
Context has been initialized.
$

Next: , Previous: , Up: Top   [Contents][Index]

6 Acknowledgements

This manual borrows text from RFC 2743 and RFC 2744 that describe GSS API formally.


Next: , Previous: , Up: Top   [Contents][Index]

Appendix A Criticism of GSS

The author has doubts whether GSS is the best solution for free software projects looking for a implementation agnostic security framework. We express these doubts in this section, so that the reader can judge for herself if any of the potential problems discussed here are relevant for their project, or if the benefit outweigh the problems. We are aware that some of the opinions are highly subjective, but we offer them in the hope they can serve as anecdotal evidence.

GSS can be criticized on several levels. We start with the actual implementation.

GSS does not appear to be designed by experienced C programmers. While generally this may be a good thing (C is not the best language), but since they defined the API in C, it is unfortunate. The primary evidence of this is the major_status and minor_status error code solution. It is a complicated way to describe error conditions, but what makes matters worse, the error condition is separated; half of the error condition is in the function return value and the other half is in the first argument to the function, which is always a pointer to an integer. (The pointer is not even allowed to be NULL, if the application doesn’t care about the minor error code.) This makes the API unreadable, and difficult to use. A better solutions would be to return a struct containing the entire error condition, which can be accessed using macros, although we acknowledge that the C language used at the time GSS was designed may not have allowed this (this may in fact be the reason the awkward solution was chosen). Instead, the return value could have been passed back to callers using a pointer to a struct, accessible using various macros, and the function could have a void prototype. The fact that minor_status is placed first in the parameter list increases the pain it is to use the API. Important parameters should be placed first. A better place for minor_status (if it must be present at all) would have been last in the prototypes.

Another evidence of the C inexperience are the memory management issues; GSS provides functions to deallocate data stored within, e.g., gss_buffer_t but the caller is responsible of deallocating the structure pointed at by the gss_buffer_t (i.e., the gss_buffer_desc) itself. Memory management issues are error prone, and this division easily leads to memory leaks (or worse). Instead, the API should be the sole owner of all gss_ctx_id_t, gss_cred_id_t, and gss_buffer_t structures: they should be allocated by the library, and deallocated (using the utility functions defined for this purpose) by the library.

TBA: specification is unclear how memory for OIDs are managed. For example, who is responsible for deallocate potentially newly allocated OIDs returned as actual_mechs in gss_acquire_cred? Further, are OIDs deeply copied into OID sets? In other words, if I add an OID into an OID set, and modify the original OID, will the OID in the OID set be modified too?

Another illustrating example is the sample GSS header file given in the RFC, which contains:

/*
 * We have included the xom.h header file.  Verify that OM_uint32
 * is defined correctly.
 */
#if sizeof(gss_uint32) != sizeof(OM_uint32)
#error Incompatible definition of OM_uint32 from xom.h
#endif

The C pre-processor does not know about the sizeof function, so it is treated as an identifier, which maps to 0. Thus, the expression does not check that the size of OM_uint32 is correct. It checks whether the expression 0 != 0 holds.

TBA: thread issues

TBA: multiple mechanisms in a GSS library

TBA: high-level design criticism.

TBA: no credential forwarding.

TBA: internationalization

TBA: dynamically generated OIDs and memory deallocation issue. I.e., should gss_import_name or gss_duplicate_name allocate memory and copy the OID provided, or simply copy the pointer? If the former, who would deallocate that memory? If the latter, the application may deallocate or modify the OID, which seem unwanted.

TBA: krb5: no way to access authorization-data

TBA: krb5: firewall/pre-IP: iakerb status?

TBA: krb5: single-DES only

TBA: the API may block, unusable in select() based servers. Especially if the servers contacted is decided by the, yet unauthenticated, remote client.

TBA: krb5: no support for GSS_C_PROT_READY_FLAG. We support it anyway, though.

TBA: krb5: gssapi-cfx differ from rfc 1964 in the reply token in that the latter require presence of sequence numbers whereas the former doesn’t.

Finally we note that few free security applications uses GSS, perhaps the only major exception to this are Kerberos 5 implementations. While not substantial evidence, this do suggest that the GSS may not be the simplest solution available to solve actual problems, since otherwise more projects would have chosen to take advantage of the work that went into GSS instead of using another framework (or designing their own solution).

Our conclusion is that free software projects that are looking for a security framework should evaluate carefully whether GSS actually is the best solution before using it. In particular it is recommended to compare GSS with the Simple Authentication and Security Layer (SASL) framework, which in several situations provide the same feature as GSS does. The most compelling argument for SASL over GSS is, as its acronym suggest, Simple, whereas GSS is far from it.

However, that said, for free software projects that wants to support Kerberos 5, we do acknowledge that no other framework provides a more portable and interoperable interface into the Kerberos 5 system. If your project needs to use Kerberos 5 specifically, we do recommend you to use GSS instead of the Kerberos 5 implementation specific APIs.


Next: , Previous: , Up: Top   [Contents][Index]

Appendix B Copying Information


B.1 GNU Free Documentation License

Version 1.3, 3 November 2008
Copyright © 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.
  1. 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.

  2. 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.

  3. 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.

  4. 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.

  5. 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:

    1. 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.
    2. 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.
    3. State on the Title page the name of the publisher of the Modified Version, as the publisher.
    4. Preserve all the copyright notices of the Document.
    5. Add an appropriate copyright notice for your modifications adjacent to the other copyright notices.
    6. 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.
    7. Preserve in that license notice the full lists of Invariant Sections and required Cover Texts given in the Document’s license notice.
    8. Include an unaltered copy of this License.
    9. 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.
    10. 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.
    11. 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.
    12. 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.
    13. Delete any section Entitled “Endorsements”. Such a section may not be included in the Modified Version.
    14. Do not retitle any existing section to be Entitled “Endorsements” or to conflict in title with any Invariant Section.
    15. 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.

  6. 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.”

  7. 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.

  8. 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.

  9. 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.

  10. 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.

  11. 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.

  12. 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.


Next: , Previous: , Up: Top   [Contents][Index]

Concept Index

Jump to:   A   C   D   F   H   I   M   N   O   R   S   T   U   W  
Index Entry  Section

A
AIX: Supported Platforms

C
command line: Invoking gss
Compiling your application: Building the source
Contributing: Contributing

D
Debian: Supported Platforms
Debian: Supported Platforms
Download: Downloading and Installing

F
FDL, GNU Free Documentation License: GNU Free Documentation License
FreeBSD: Supported Platforms
Future goals: Planned Features

H
Hacking: Contributing
Header files: Header
HP-UX: Supported Platforms

I
Installation: Downloading and Installing
invoking gss: Invoking gss
IRIX: Supported Platforms

M
Mandrake: Supported Platforms
mechanism status codes: Error Handling
Memory allocation failure: Out of Memory handling
Motorola Coldfire: Supported Platforms

N
NetBSD: Supported Platforms

O
OpenBSD: Supported Platforms
Out of Memory handling: Out of Memory handling

R
RedHat: Supported Platforms
RedHat: Supported Platforms
RedHat: Supported Platforms
RedHat Advanced Server: Supported Platforms
Reporting Bugs: Bug Reports

S
Solaris: Supported Platforms
status codes: Error Handling
SuSE: Supported Platforms
SuSE Linux: Supported Platforms

T
Todo list: Planned Features
Tru64: Supported Platforms

U
uClibc: Supported Platforms
uClinux: Supported Platforms

W
Windows: Supported Platforms

Jump to:   A   C   D   F   H   I   M   N   O   R   S   T   U   W  

Previous: , Up: Top   [Contents][Index]

API Index

Jump to:   G  
Index Entry  Section

G
gss: Invoking gss
gss_accept_sec_context: Context-Level Routines
gss_acquire_cred: Credential Management
gss_add_cred: Credential Management
gss_add_oid_set_member: Miscellaneous Routines
GSS_CALLING_ERROR: Error Handling
gss_canonicalize_name: Name Manipulation
gss_check_version: Extended GSS API
gss_compare_name: Name Manipulation
gss_context_time: Context-Level Routines
gss_create_empty_oid_set: Miscellaneous Routines
gss_decapsulate_token: Miscellaneous Routines
gss_delete_sec_context: Context-Level Routines
gss_display_name: Name Manipulation
gss_display_status: Miscellaneous Routines
gss_duplicate_name: Name Manipulation
gss_encapsulate_token: Miscellaneous Routines
GSS_ERROR: Error Handling
gss_export_name: Name Manipulation
gss_export_sec_context: Context-Level Routines
gss_get_mic: Per-Message Routines
gss_import_name: Name Manipulation
gss_import_sec_context: Context-Level Routines
gss_indicate_mechs: Miscellaneous Routines
gss_init_sec_context: Context-Level Routines
gss_inquire_context: Context-Level Routines
gss_inquire_cred: Credential Management
gss_inquire_cred_by_mech: Credential Management
gss_inquire_mechs_for_name: Name Manipulation
gss_inquire_mech_for_saslname: SASL GS2 Routines
gss_inquire_names_for_mech: Name Manipulation
gss_inquire_saslname_for_mech: SASL GS2 Routines
gss_oid_equal: Miscellaneous Routines
gss_process_context_token: Context-Level Routines
gss_release_buffer: Miscellaneous Routines
gss_release_cred: Credential Management
gss_release_name: Name Manipulation
gss_release_oid_set: Miscellaneous Routines
GSS_ROUTINE_ERROR: Error Handling
GSS_SUPPLEMENTARY_INFO: Error Handling
GSS_S_...: Error Handling
gss_test_oid_set_member: Miscellaneous Routines
gss_unwrap: Per-Message Routines
gss_userok: Extended GSS API
gss_verify_mic: Per-Message Routines
gss_wrap: Per-Message Routines
gss_wrap_size_limit: Context-Level Routines

Jump to:   G  

gss-1.0.3/doc/fdl-1.3.texi0000644000000000000000000005561012415470476011723 00000000000000@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 ASCII without markup, Texinfo input format, La@TeX{} 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. @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: gss-1.0.3/doc/texinfo.css0000664000000000000000000000134612012453517012137 00000000000000body { 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; } gss-1.0.3/doc/asciidoc0000775000000000000000000037457412415506237011502 00000000000000#!/usr/bin/env python ''' asciidoc - converts an AsciiDoc text file to DocBook, HTML or LinuxDoc SYNOPSIS asciidoc -b backend [ -d doctype ] [ -g glossary-entry ] [ -e ] [-n] [ -s ] [ -f configfile ] [ -o outfile ] [ --help | -h ] [ --version ] [ -v ] [ -c ] infile DESCRIPTION The asciidoc(1) command translates the AsciiDoc text file 'infile' to the 'backend' formatted file 'outfile'. If 'infile' is '-' then the standard input is used. OPTIONS --help, -h Print this documentation. -b Backend output file format: 'docbook', 'linuxdoc', 'html', 'css' or 'css-embedded'. -c Dump configuration to stdout. -d Document type: 'article', 'manpage' or 'book'. The 'book' document type is only supported by the 'docbook' backend and the 'manpage' document type is not supported by the 'linuxdoc' backend. -e Exclude implicitly loaded configuration files except for those named like the input file ('infile.conf' and 'infile-backend.conf'). -f Use configuration file 'configfile'. -g Define glossary entry where 'glossary-entry' is formatted like 'name=value'. Alternate acceptable forms are 'name' (the 'value' defaults to an empty string) and '^name' (undefine the 'name' glossary entry). Use the '-g section-numbers' command-line option to auto-number HTML article section titles. -n Synonym for '-g section-numbers'. -o Write output to file 'outfile'. Defaults to the base name of input file with 'backend' extension. If the input is stdin then the outfile defaults to stdout. If 'outfile' is '-' then the standard output is used. -s Suppress document header and footer output. -v Verbosely print processing information to stderr. --version Print program version number. BUGS - Keyboard EOF (Ctrl+D) ignored when reading source from console. - Reported line numbers in diagnostic messages are sometimes wrong. - Diagnostic messages are often not that illuminating. - Block filters only work in a UNIX environment. - Embedding open brace characters { in argument values can cause incorrect argument substitution. - Section numbering is incorrect when outputting HTML against a book type document with level 0 sections titles. This is not a biggy since multi-part books are generally processed to DocBook. AUTHOR Written by Stuart Rackham, RESOURCES SourceForge: http://sourceforge.net/projects/asciidoc/ Main website: http://www.methods.co.nz/asciidoc/ COPYING Copyright (C) 2002,2004 Stuart Rackham. Free use of this software is granted under the terms of the GNU General Public License (GPL). ''' import sys, os, re, string, time, traceback, tempfile, popen2 from types import * VERSION = '5.0.5' # See CHANGLOG file for version history. #--------------------------------------------------------------------------- # Utility functions and classes. #--------------------------------------------------------------------------- # Allowed substitution options for subs List options and presubs and postsubs # Paragraph options. SUBS_OPTIONS = ('specialcharacters','quotes','specialwords','replacements', 'glossary','macros','none','default') # Default value for unspecified subs and presubs configuration file entries. SUBS_DEFAULT = ('specialcharacters','quotes','specialwords','replacements', 'glossary','macros') class EAsciiDoc(Exception): pass class staticmethod: '''Python 2.1 and earlier does not have the builtin staticmethod() function.''' def __init__(self,anycallable): self.__call__ = anycallable from UserDict import UserDict class OrderedDict(UserDict): '''Python Cookbook: Ordered Dictionary, Submitter: David Benjamin''' def __init__(self, dict = None): self._keys = [] UserDict.__init__(self, dict) def __delitem__(self, key): UserDict.__delitem__(self, key) self._keys.remove(key) def __setitem__(self, key, item): UserDict.__setitem__(self, key, item) if key not in self._keys: self._keys.append(key) def clear(self): UserDict.clear(self) self._keys = [] def copy(self): dict = UserDict.copy(self) dict._keys = self._keys[:] return dict def items(self): # zip() not available in Python 1.5.2 #return zip(self._keys, self.values()) result = [] for k in self._keys: result.append((k,UserDict.__getitem__(self,k))) return result def keys(self): return self._keys def popitem(self): try: key = self._keys[-1] except IndexError: raise KeyError('dictionary is empty') val = self[key] del self[key] return (key, val) def setdefault(self, key, failobj = None): UserDict.setdefault(self, key, failobj) if key not in self._keys: self._keys.append(key) def update(self, dict): UserDict.update(self, dict) for key in dict.keys(): if key not in self._keys: self._keys.append(key) def values(self): return map(self.get, self._keys) def print_stderr(line): sys.stderr.write(line+os.linesep) def verbose(msg,linenos=1): '''-v option messages.''' if config.verbose: console(msg,linenos=linenos) def warning(msg,linenos=1): console(msg,'WARNING: ',linenos) def console(msg, prefix='',linenos=1): '''Print warning message to stdout. 'offset' is added to reported line number for warnings emitted when reading ahead.''' s = prefix if linenos and reader.cursor: s = s + "%s: line %d: " \ % (os.path.basename(reader.cursor[0]),reader.cursor[1]) s = s + msg print_stderr(s) def realpath(fname): '''Return the absolute pathname of the file fname. Follow symbolic links. os.realpath() not available in Python prior to 2.2 and not portable.''' # Follow symlinks to the actual executable. wd = os.getcwd() try: while os.path.islink(fname): linkdir = os.path.dirname(fname) fname = os.readlink(fname) if linkdir: os.chdir(linkdir) # Symlinks can be relative. fname = os.path.abspath(fname) finally: os.chdir(wd) return fname def assign(dst,src): '''Assign all attributes from 'src' object to 'dst' object.''' for a,v in src.__dict__.items(): setattr(dst,a,v) def strip_quotes(s): '''Trim white space and, if necessary, quote characters from s.''' s = string.strip(s) # Strip quotation mark characters from quoted strings. if len(s) >= 3 and s[0] == '"' and s[-1] == '"': s = s[1:-1] return s def is_regexp(s): '''Return 1 if s is a valid regular expression else return 0.''' try: re.compile(s) except: return 0 else: return 1 def join_regexp(relist): '''Join list of regular expressions re1,re2,... to single regular expression (re1)|(re2)|...''' if len(relist) == 0: return '' result = [] # Delete named groups to avoid ambiguity. for s in relist: result.append(re.sub(r'\?P<\S+?>','',s)) result = string.join(result,')|(') result = '('+result+')' return result def validate(value,rule,errmsg): '''Validate value against rule expression. Throw EAsciiDoc exception with errmsg if validation fails.''' try: if not eval(string.replace(rule,'$',str(value))): raise EAsciiDoc,errmsg except: raise EAsciiDoc,errmsg return value def join_lines(lines): '''Return a list in which lines terminated with the backslash line continuation character are joined.''' result = [] s = '' continuation = 0 for line in lines: if line and line[-1] == '\\': s = s + line[:-1] continuation = 1 continue if continuation: result.append(s+line) s = '' continuation = 0 else: result.append(line) if continuation: result.append(s) return result def parse_args(args,dict,default_arg=None): '''Update a dictionary with name/value arguments from the args string. The args string is a comma separated list of values and keyword name=value pairs. Values must preceed keywords and are named '1','2'... The entire args list is named '0'. If keywords are specified string values must be quoted. Examples: args: '' dict: {} args: 'hello,world' dict: {'2': 'world', '0': 'hello,world', '1': 'hello'} args: 'hello,,world' default_arg: 'caption' dict: {'3': 'world', 'caption': 'hello', '0': 'hello,,world', '1': 'hello'} args: '"hello",planet="earth"' dict: {'planet': 'earth', '0': '"hello",planet="earth"', '1': 'hello'} ''' def f(*args,**keywords): # Name and add aguments '1','2'... to keywords. for i in range(len(args)): if not keywords.has_key(str(i+1)): keywords[str(i+1)] = args[i] return keywords if not args: return dict['0'] = args s = args try: d = eval('f('+s+')') dict.update(d) except: # Try quoting the args. s = string.replace(s,'"',r'\"') # Escape double-quotes. s = string.split(s,',') s = map(lambda x: '"'+string.strip(x)+'"',s) s = string.join(s,',') try: d = eval('f('+s+')') except: return # If there's a syntax error leave with {0}=args. for k in d.keys(): # Drop any arguments that were missing. if d[k] == '': del d[k] dict.update(d) assert len(d) > 0 if default_arg is not None and not d.has_key(default_arg) \ and d.has_key('1'): dict[default_arg] = dict['1'] def parse_list(s): '''Parse comma separated string of Python literals. Return a tuple of of parsed values.''' try: result = eval('tuple(['+s+'])') except: raise EAsciiDoc,'malformed list: '+s return result def parse_options(options,allowed,errmsg): '''Parse comma separated string of unquoted option names and return as a tuple of valid options. 'allowed' is a list of allowed option values. 'errmsg' isan error message prefix if an illegal option error is thrown.''' result = [] if options: for s in string.split(options,','): s = string.strip(s) if s not in allowed: raise EAsciiDoc,'%s "%s"' % (errmsg,s) result.append(s) return tuple(result) def is_name(s): '''Return 1 if s is valid glossary, macro or tag name.''' mo = re.match(r'\w[-\w]*',s) if mo is not None and s[-1] != '-': return 1 else: return 0 def subs_quotes(text): '''Quoted text is marked up and the resulting text is returned.''' quotes = config.quotes.keys() # The quotes are iterated in reverse sort order to avoid ambiguity, # for example, '' is processed before '. quotes.sort() quotes.reverse() for quote in quotes: i = string.find(quote,'|') if i != -1 and quote != '|' and quote != '||': lq = quote[:i] rq = quote[i+1:] else: lq = rq = quote reo = re.compile(r'(^|\W)(?:' + re.escape(lq) \ + r')(.*?[^\\])(?:'+re.escape(rq)+r')(?=\W|$)') pos = 0 while 1: mo = reo.search(text,pos) if not mo: break if text[mo.start()] == '\\': pos = mo.end() else: stag,etag = config.tag(config.quotes[quote]) if stag == etag == None: s = '' else: s = mo.group(1) + stag + mo.group(2) + etag text = text[:mo.start()] + s + text[mo.end():] pos = mo.start() + len(s) text = string.replace(text,'\\'+lq, lq) # Unescape escaped quotes. return text def subs_tag(tag,dict={}): '''Perform glossary substitution and split tag string returning start, end tag tuple (c.f. Config.tag()).''' s = subs_glossary((tag,),dict)[0] result = string.split(s,'|') if len(result) == 1: return result+[None] elif len(result) == 2: return result else: raise EAsciiDoc,'malformed tag "%s"' % (tag,) def parse_entry(entry,dict=None,unquote=0): '''Parse name=value entry to dictionary 'dict'. Return tuple (name,value) or None if illegal entry. If value is omitted (name=) then it is set to ''. If only the name is present the value is set to None). Leading and trailing white space is striped from 'name' and 'value'. If 'unquote' is True leading and trailing double-quotes are stripped from 'name' and 'value'. 'name' can contain any printable characters. If 'name includes the equals '=' character it must be escaped with a backslash.''' mo=re.search(r'[^\\](=)',entry) if mo: # name=value entry. name = entry[:mo.start(1)] value = entry[mo.end(1):] else: # name entry. name = entry value = None if unquote: name = strip_quotes(name) if value is not None: value = strip_quotes(value) else: name = string.strip(name) if value is not None: value = string.strip(value) if not name: return None if dict is not None: dict[name] = value return name,value def parse_entries(entries,dict,unquote=0): '''Parse name=value entries from from lines of text in 'entries' into dictionary 'dict'. Blank lines are skipped.''' for entry in entries: if entry and not parse_entry(entry,dict,unquote): raise EAsciiDoc,'malformed section entry "%s"' % (entry,) def undefine_entries(entries): '''All dictionary entries with None values are deleted.''' for k,v in entries.items(): if v is None: del entries[k] def dump_section(name,dict,f=sys.stdout): '''Write parameters in 'dict' as in configuration file section format with section 'name'.''' f.write('[%s]%s' % (name,writer.newline)) for k,v in dict.items(): k = str(k) # Quote if necessary. if len(k) != len(string.strip(k)): k = '"'+k+'"' if v and len(v) != len(string.strip(v)): v = '"'+v+'"' if v is None: # Don't dump undefined entries. continue else: s = k+'='+v f.write('%s%s' % (s,writer.newline)) f.write(writer.newline) def update_glossary(glossary,dict): '''Update 'glossary' dictionary with entries from parsed glossary section dictionary 'dict'.''' for k,v in dict.items(): if not is_name(k): raise EAsciiDoc,'illegal "%s" glossary entry name' % (k,) glossary[k] = v def readlines(fname): '''Read lines from file named 'fname' and strip trailing white space.''' # Read include file. f = open(fname) try: lines = f.readlines() finally: f.close() # Strip newlines. for i in range(len(lines)): lines[i] = string.rstrip(lines[i]) return lines def filter_lines(filter,lines,dict={}): '''Run 'lines' through the 'filter' shell command and return the result. The 'dict' dictionary contains additional filter glossary entry parameters.''' if not filter: return lines if os.name != 'posix': warning('filters do not work in a non-posix environment') return lines # Perform glossary substitution on the filter command. f = subs_glossary((filter,),dict) if not f: raise EAsciiDoc,'filter "%s" has undefined parameter' % (filter,) filter = f[0] # Check in the 'filters' directory in both the asciidoc user and application # directories for the filter command. cmd = string.split(filter)[0] found = 0 if not os.path.dirname(cmd): if USER_DIR: cmd2 = os.path.join(USER_DIR,'filters',cmd) if os.path.isfile(cmd2): found = 1 if not found: cmd2 = os.path.join(APP_DIR,'filters',cmd) if os.path.isfile(cmd2): found = 1 if found: filter = string.split(filter) filter[0] = cmd2 filter = string.join(filter) verbose('filtering: '+filter, linenos=0) try: import select result = [] r,w = popen2.popen2(filter) # Polled I/O loop to alleviate full buffer deadlocks. i = 0 while i < len(lines): line = lines[i] if select.select([],[w.fileno()],[],0)[1]: w.write(line+os.linesep) # Use platform line terminator. i = i+1 if select.select([r.fileno()],[],[],0)[0]: s = r.readline() if not s: break # Exit if filter output closes. result.append(string.rstrip(s)) w.close() for s in r.readlines(): result.append(string.rstrip(s)) r.close() except: raise EAsciiDoc,'filter "%s" error' % (filter,) # There's no easy way to guage whether popen2() found and executed the # filter, so guess that if it produced no output there is probably a # problem. if lines and not result: warning('no output from filter "%s"' % (filter,)) return result def glossary_action(action, expr): '''Return the result of a glossary {action:expr} reference.''' verbose('evaluating: '+expr) if action == 'eval': result = None try: result = eval(expr) if result is not None: result = str(result) except: warning('{%s} "%s" expression evaluation error' % (action,expr)) elif action in ('sys','sys2'): result = '' tmp = tempfile.mktemp() try: cmd = expr cmd = cmd + (' > %s' % tmp) if action == 'sys2': cmd = cmd + ' 2>&1' if os.system(cmd): warning('{%s} "%s" command non-zero exit status' % (action,expr)) try: if os.path.isfile(tmp): lines = readlines(tmp) else: lines = [] except: raise EAsciiDoc,'{%s} temp file read error' % (action,) result = string.join(lines, writer.newline) finally: if os.path.isfile(tmp): os.remove(tmp) else: warning('Illegal {%s:} glossary action' % (action,)) return result def subs_glossary(lines,dict={}): '''Substitute 'lines' of text with glossary entries from the global document.glossary dictionary and from the 'dict' dictionary ('dict' entries take precedence). Return a tuple of the substituted lines. 'lines' containing non-matching substitution parameters are deleted. None glossary values are not substituted but '' glossary values are.''' def end_brace(text,start): '''Return index following end brace that matches brace at start in text.''' assert text[start] == '{' n = 0 result = start for c in text[start:]: # Skip braces that are followed by a backslash. if result == len(text)-1 or text[result+1] != '\\': if c == '{': n = n + 1 elif c == '}': n = n - 1 result = result + 1 if n == 0: break return result lines = list(lines) # Merge glossary and macro arguments (macro args take precedence). gloss = document.glossary.copy() gloss.update(dict) # Substitute all occurences of all dictionary parameters in all lines. for i in range(len(lines)-1,-1,-1): # Reverse iterate lines. text = lines[i] # Make it easier for regular expressions. text = string.replace(text,'\\{','{\\') text = string.replace(text,'\\}','}\\') # Expand literal glossary references of form {name}. # Nested glossary entries not allowed. reo = re.compile(r'\{(?P[^\\\W][-\w]*?)\}(?!\\)', re.DOTALL) pos = 0 while 1: mo = reo.search(text,pos) if not mo: break s = gloss.get(mo.group('name')) if s is None: pos = mo.end() else: s = str(s) text = text[:mo.start()] + s + text[mo.end():] pos = mo.start() + len(s) # Expand conditional glossary references of form {name=value}, # {name?value}, {name!value} and {name#value}. reo = re.compile(r'\{(?P[^\\\W][-\w]*?)(?P\=|\?|!|#|%)' \ r'(?P.*?)\}(?!\\)',re.DOTALL) pos = 0 while 1: mo = reo.search(text,pos) if not mo: break name = mo.group('name') lval = gloss.get(name) op = mo.group('op') # mo.end() is not good enough because '{x={y}}' matches '{x={y}'. end = end_brace(text,mo.start()) rval = text[mo.start('value'):end-1] if lval is None: # name glossary entry is undefined. if op == '=': s = rval elif op == '?': s = '' elif op == '!': s = rval elif op == '#': s = '{'+name+'}' # So the line is deleted. elif op == '%': s = rval else: assert 1,'illegal glossary operator' else: # name glossary entry is defined. if op == '=': s = lval elif op == '?': s = rval elif op == '!': s = '' elif op == '#': s = rval elif op == '%': s = '{zzzzz}' # So the line is deleted. else: assert 1,'illegal glossary operator' s = str(s) text = text[:mo.start()] + s + text[end:] pos = mo.start() + len(s) # Drop line if it contains unsubstituted {name} references. skipped = re.search(r'\{[^\\\W][-\w]*?\}(?!\\)', text, re.DOTALL) if skipped: del lines[i] continue; # Expand calculated glossary references of form {name:expression}. reo = re.compile(r'\{(?P[^\\\W][-\w]*?):(?P.*?)\}(?!\\)', re.DOTALL) skipped = 0 pos = 0 while 1: mo = reo.search(text,pos) if not mo: break expr = mo.group('expr') expr = string.replace(expr,'{\\','{') expr = string.replace(expr,'}\\','}') s = glossary_action(mo.group('action'),expr) if s is None: skipped = 1 break text = text[:mo.start()] + s + text[mo.end():] pos = mo.start() + len(s) # Drop line if the action returns None. if skipped: del lines[i] continue; # Remove backslash from escaped entries. text = string.replace(text,'{\\','{') text = string.replace(text,'}\\','}') lines[i] = text return tuple(lines) class Lex: '''Lexical analysis routines. Static methods and attributes only.''' prev_element = None prev_cursor = None def __init__(self): raise AssertionError,'no class instances allowed' def next(): '''Returns class of next element on the input (None if EOF). The reader is assumed to be at the first line following a previous element, end of file or line one. Exits with the reader pointing to the first line of the next element or EOF (leading blank lines are skipped).''' reader.skip_blank_lines() if reader.eof(): return None # Optimization: If we've already checked for an element at this # position return the element. if Lex.prev_element and Lex.prev_cursor == reader.cursor: return Lex.prev_element result = None # Check for BlockTitle. if not result and BlockTitle.isnext(): result = BlockTitle # Check for Title. if not result and Title.isnext(): result = Title # Check for SectionClose. # Dont' process -- there is no good reason for explicit section closure. #if not result and SectionClose.isnext(): # result = SectionClose # Check for Block Macro. if not result and macros.isnext(): result = macros.current # Check for List. if not result and lists.isnext(): result = lists.current # Check for DelimitedBlock. if not result and blocks.isnext(): # Skip comment blocks. if 'skip' in blocks.current.options: blocks.current.translate() return Lex.next() else: result = blocks.current # Check for Table. if not result and tables.isnext(): result = tables.current # If it's none of the above then it must be an Paragraph. if not result: if not paragraphs.isnext(): raise EAsciiDoc,'paragraph expected' result = paragraphs.current # Cache answer. Lex.prev_cursor = reader.cursor Lex.prev_element = result return result next = staticmethod(next) def title_parse(lines): '''Check for valid title at start of tuple lines. Return (title,level) tuple or None if invalid title.''' if len(lines) < 2: return None title,ul = lines[:2] # Title can't be blank. if len(title) == 0: return None if len(ul) < 2: return None # Fast check. if ul[:2] not in Title.underlines: return None # Length of underline must be within +-3 of title. if not (len(ul)-3 < len(title) < len(ul)+3): return None # Underline must be have valid repetition of underline character pairs. s = ul[:2]*((len(ul)+1)/2) if ul != s[:len(ul)]: return None return title,list(Title.underlines).index(ul[:2]) title_parse = staticmethod(title_parse) def subs_1(s,options): '''Perform substitution specified in 'options' (in 'options' order) on a single line 's' of text. Returns the substituted string.''' if not s: return s result = s for o in options: if o == 'specialcharacters': result = config.subs_specialchars(result) # Quoted text. elif o == 'quotes': result = subs_quotes(result) # Special words. elif o == 'specialwords': result = config.subs_specialwords(result) # Replacements. elif o == 'replacements': result = config.subs_replacements(result) # Inline macros. elif o == 'macros': result = macros.subs(result) else: raise EAsciiDoc,'illegal "%s" substitution option' % (o,) return result subs_1 = staticmethod(subs_1) def subs(lines,options): '''Perform inline processing specified by 'options' (in 'options' order) on sequence of 'lines'.''' if len(options) == 1: if options[0] == 'none': options = () elif options[0] == 'default': options = SUBS_DEFAULT if not lines or not options: return lines for o in options: if o == 'glossary': lines = subs_glossary(lines) else: tmp = [] for s in lines: s = Lex.subs_1(s,(o,)) tmp.append(s) lines = tmp return lines subs = staticmethod(subs) def set_margin(lines, margin=0): '''Utility routine that sets the left margin to 'margin' space in a block of non-blank lines.''' # Calculate width of block margin. lines = list(lines) width = len(lines[0]) for s in lines: i = re.search(r'\S',s).start() if i < width: width = i # Strip margin width from all lines. for i in range(len(lines)): lines[i] = ' '*margin + lines[i][width:] return lines set_margin = staticmethod(set_margin) #--------------------------------------------------------------------------- # Document element classes parse AsciiDoc reader input and write DocBook writer # output. #--------------------------------------------------------------------------- class Document: def __init__(self): self.doctype = None # 'article','manpage' or 'book'. self.backend = None # -b option argument. self.glossary = {} # Combined glossary entries. self.level = 0 # 0 => front matter. 1,2,3 => sect1,2,3. def init_glossary(self): # Set derived glossary enties. d = time.localtime(time.time()) self.glossary['localdate'] = time.strftime('%d-%b-%Y',d) s = time.strftime('%H:%M:%S',d) if time.daylight: self.glossary['localtime'] = s + ' ' + time.tzname[1] else: self.glossary['localtime'] = s + ' ' + time.tzname[0] self.glossary['asciidoc-version'] = VERSION self.glossary['backend'] = document.backend self.glossary['doctype'] = document.doctype self.glossary['backend-'+document.backend] = '' self.glossary['doctype-'+document.doctype] = '' self.glossary[document.backend+'-'+document.doctype] = '' self.glossary['asciidoc-dir'] = APP_DIR self.glossary['user-dir'] = USER_DIR if reader.fname: self.glossary['infile'] = reader.fname if writer.fname: self.glossary['outfile'] = writer.fname s = os.path.splitext(writer.fname)[1][1:] # Output file extension. self.glossary['filetype'] = s self.glossary['filetype-'+s] = '' # Update with conf file entries. self.glossary.update(config.conf_gloss) # Update with command-line entries. self.glossary.update(config.cmd_gloss) # Set configuration glossary entries. config.load_miscellaneous(config.conf_gloss) config.load_miscellaneous(config.cmd_gloss) self.glossary['newline'] = config.newline # Use raw (unescaped) value. def translate(self): assert self.doctype in ('article','manpage','book'), \ 'illegal document type' assert self.level == 0 # Process document header. has_header = Lex.next() is Title and Title.level == 0 if self.doctype == 'manpage' and not has_header: raise EAsciiDoc,'manpage document title is mandatory' if has_header: Header.parse() if not config.suppress_headers: hdr = config.subs_section('header',{}) writer.write(hdr) if self.doctype in ('article','book'): # Translate 'preamble' (untitled elements between header # and first section title). if Lex.next() is not Title: if self.doctype == 'book': warning('Preamble not allowed in docbook books') stag,etag = config.section2tags('preamble') writer.write(stag) Section.translate_body() writer.write(etag) else: # Translate manpage SYNOPSIS. if Lex.next() is not Title: raise EAsciiDoc,'second section must be SYNOPSIS' Title.parse() if string.upper(Title.title) <> 'SYNOPSIS': raise EAsciiDoc,'second section must be SYNOPSIS' if Title.level != 1: raise EAsciiDoc,'SYNOPSIS section title must be level 1' stag,etag = config.section2tags('sect-synopsis') writer.write(stag) Section.translate_body() writer.write(etag) else: if not config.suppress_headers: hdr = config.subs_section('header',{}) writer.write(hdr) if Lex.next() is not Title: Section.translate_body() # Process remaining sections. while not reader.eof(): if Lex.next() is not Title: raise EAsciiDoc,'section title expected' Section.translate() Section.setlevel(0) # Write remaining unwritten section close tags. # Substitute document parameters and write document footer. if not config.suppress_headers: ftr = config.subs_section('footer',{}) writer.write(ftr) class Header: '''Static methods and attributes only.''' def __init__(self): raise AssertionError,'no class instances allowed' def parse(): assert Lex.next() is Title Title.parse() if Title.level not in (0,1): raise EAsciiDoc,'document title level must be 0 or 1' gloss = document.glossary # Alias for readability. gloss['doctitle'] = Title.title if document.doctype == 'manpage': # manpage title formatted like mantitle(manvolnum). mo = re.match(r'^(?P.*)\((?P.*)\)$', Title.title) if not mo: raise EAsciiDoc,'malformed manpage title' gloss['mantitle'] = string.strip(string.lower(mo.group('mantitle'))) gloss['manvolnum'] = string.strip(mo.group('manvolnum')) s = reader.read_next() if s: # Parse author line. s = reader.read() s = subs_glossary([s])[0] s = string.strip(s) mo = re.match(r'^(?P[^<>\s]+)' '(\s+(?P[^<>\s]+))?' '(\s+(?P[^<>\s]+))?' '(\s+<(?P\S+)>)?$',s) if not mo: raise EAsciiDoc,'malformed author line' firstname = mo.group('name1') if mo.group('name3'): middlename = mo.group('name2') lastname = mo.group('name3') else: middlename = None lastname = mo.group('name2') email = mo.group('email') gloss['firstname'] = firstname gloss['middlename'] = middlename gloss['lastname'] = lastname gloss['email'] = email author = firstname initials = firstname[0] if middlename: author += ' '+middlename initials += middlename[0] if lastname: author += ' '+lastname initials += lastname[0] gloss['author'] = author initials = string.upper(initials) gloss['authorinitials'] = initials if reader.read_next(): # Parse revision line. s = reader.read() s = subs_glossary([s])[0] # Match RCS/CVS $Id$ marker format. mo = re.match(r'^\$Id: \S+ (?P\S+)' ' (?P\S+) \S+ \S+ \S+ \$$',s) if not mo: # Match AsciiDoc revision,date format. mo = re.match(r'^\D*(?P.*?),(?P.+)$',s) if mo: revision = string.strip(mo.group('revision')) date = string.strip(mo.group('date')) else: revision = None date = string.strip(s) if revision: gloss['revision'] = revision if date: gloss['date'] = date if document.backend == 'linuxdoc' and not gloss.has_key('author'): warning('linuxdoc requires author name') if document.doctype == 'manpage': # Translate mandatory NAME section. if Lex.next() is not Title: raise EAsciiDoc,'manpage must start with a NAME section' Title.parse() if Title.level != 1: raise EAsciiDoc,'manpage NAME section title must be level 1' if string.upper(Title.title) <> 'NAME': raise EAsciiDoc,'manpage must start with a NAME section' if not isinstance(Lex.next(),Paragraph): raise EAsciiDoc,'malformed manpage NAME section body' lines = reader.read_until(r'^$') s = string.join(lines) mo = re.match(r'^(?P.*?)-(?P.*)$',s) if not mo: raise EAsciiDoc,'malformed manpage NAME section body' gloss['manname'] = string.strip(mo.group('manname')) gloss['manpurpose'] = string.strip(mo.group('manpurpose')) parse = staticmethod(parse) class BlockTitle: '''Static methods and attributes only.''' title = None pattern = None def __init__(self): raise AssertionError,'no class instances allowed' def isnext(): result = 0 # Assume failure. line = reader.read_next() if line: mo = re.match(BlockTitle.pattern,line) if mo: BlockTitle.title = mo.group('title') result = 1 return result isnext = staticmethod(isnext) def translate(): assert Lex.next() is BlockTitle reader.read() # Discard title from reader. # Perform title substitutions. s = Lex.subs((BlockTitle.title,), Title.subs) s = string.join(s,writer.newline) if not s: warning('blank block title') BlockTitle.title = s translate = staticmethod(translate) def gettitle(dict): '''If there is a title add it to dict then reset title.''' if BlockTitle.title: dict['title'] = BlockTitle.title BlockTitle.title = None gettitle = staticmethod(gettitle) class Title: '''Processes Header and Section titles. Static methods and attributes only.''' # Configuration entries defaults. titles = ('==','--','~~','^^','++') # Levels 0,1,2,3,4. subs = ('specialcharacters','quotes','replacements','glossary','macros') # Class variables title = None level = 0 sectname = None section_numbers = [0]*5 dump_dict = {} def __init__(self): raise AssertionError,'no class instances allowed' def parse(): '''Parse the Title.title and Title.level from the reader. The real work has already been done by isnext().''' assert Lex.next() is Title reader.read(); reader.read() # Discard title from reader. Title.setsectname() # Perform title substitutions. s = Lex.subs((Title.title,), Title.subs) s = string.join(s,writer.newline) if not s: warning('blank section title') Title.title = s parse = staticmethod(parse) def isnext(): result = 0 # Assume failure. lines = reader.read_ahead(2) if len(lines) == 2: title = Lex.title_parse(lines) if title is not None: Title.title, Title.level = title result = 1 return result isnext = staticmethod(isnext) def load(dict): '''Load and validate [titles] section entries from dict.''' if dict.has_key('underlines'): errmsg = 'malformed [titles] underlines entry' try: underlines = parse_list(dict['underlines']) except: raise EAsciiDoc,errmsg if len(underlines) != 5: raise EAsciiDoc,errmsg for s in underlines: if len(s) !=2: raise EAsciiDoc,errmsg Title.underlines = tuple(underlines) Title.dump_dict['underlines'] = dict['underlines'] if dict.has_key('subs'): Title.subs = parse_options(dict['subs'], SUBS_OPTIONS, 'illegal [titles] subs entry') Title.dump_dict['subs'] = dict['subs'] if dict.has_key('blocktitle'): pat = dict['blocktitle'] if not pat or not is_regexp(pat): raise EAsciiDoc,'malformed [titles] blocktitle entry' BlockTitle.pattern = pat Title.dump_dict['blocktitle'] = pat load = staticmethod(load) def dump(): dump_section('titles',Title.dump_dict) dump = staticmethod(dump) def setsectname(): '''Set Title section name. First search for section title in [specialsections], if not found use default 'sect' name.''' for pat,sect in config.specialsections.items(): mo = re.match(pat,Title.title) if mo: title = mo.groupdict().get('title') if title is not None: Title.title = string.strip(title) else: Title.title = string.strip(mo.group()) Title.sectname = sect break else: Title.sectname = 'sect%d' % (Title.level,) setsectname = staticmethod(setsectname) def getnumber(level): '''Return next section number at section 'level' formatted like 1.2.3.4.''' number = '' for l in range(len(Title.section_numbers)): n = Title.section_numbers[l] if l == 0: continue elif l < level: number = '%s%d.' % (number, n) elif l == level: number = '%s%d.' % (number, n + 1) Title.section_numbers[l] = n + 1 elif l > level: # Reset unprocessed section levels. Title.section_numbers[l] = 0 return number getnumber = staticmethod(getnumber) class Section: '''Static methods and attributes only.''' endtags = [] # Stack of currently open section (level,endtag) tuples. def __init__(self): raise AssertionError,'no class instances allowed' def savetag(level,etag): '''Save section end.''' if Section.endtags: # Previous open section is up one level. # Check deprecated to allow out of sequence titles. #assert level == Section.endtags[-1][0] + 1 pass else: # Top open section is level 1. # Check deprecated to allow level 0 (specifically book part) titles. #assert level == 1 pass Section.endtags.append((level,etag)) savetag = staticmethod(savetag) def setlevel(level): '''Set document level and write open section close tags up to level.''' while Section.endtags and Section.endtags[-1][0] >= level: writer.write(Section.endtags.pop()[1]) document.level = level setlevel = staticmethod(setlevel) def translate(): assert Lex.next() is Title Title.parse() if Title.level == 0 and document.doctype != 'book': raise EAsciiDoc,'only book doctypes can contain level 0 sections' if Title.level > document.level+1: warning('section title out of sequence: ' \ 'expected level %d, got level %d' \ % (document.level+1, Title.level)) Section.setlevel(Title.level) dict = {} dict['title'] = Title.title dict['sectnum'] = Title.getnumber(document.level) stag,etag = config.section2tags(Title.sectname,dict) Section.savetag(Title.level,etag) writer.write(stag) Section.translate_body() translate = staticmethod(translate) def translate_body(terminator=Title): isempty = 1 next = Lex.next() while next and next is not terminator: if next is Title and isinstance(terminator,DelimitedBlock): raise EAsciiDoc,'title not permitted in sidebar body' if next is SectionClose and isinstance(terminator,DelimitedBlock): raise EAsciiDoc,'section closure not permitted in sidebar body' if document.backend == 'linuxdoc' \ and document.level == 0 \ and not isinstance(next,Paragraph): warning('only paragraphs are permitted in linuxdoc synopsis') next.translate() next = Lex.next() isempty = 0 # The section is not empty if contains a subsection. if next and isempty and Title.level > document.level: isempty = 0 if isempty: warning('empty section') translate_body = staticmethod(translate_body) class SectionClose: def __init__(self): raise AssertionError,'no class instances allowed' def isnext(): line = reader.read_next() return line and line in Title.titles isnext = staticmethod(isnext) def translate(): assert Lex.next() is SectionClose line = reader.read() i = list(Title.titles).index(line) if i == 0: raise EAsciiDoc,'level 0 document closure not permitted' elif i > document.level: warning('unable to close section: level %d is not open' % (i,)) else: Section.setlevel(i) translate = staticmethod(translate) class Paragraphs: '''List of paragraph definitions.''' def __init__(self): self.current=None self.paragraphs = [] # List of Paragraph objects. self.default = None # The default [paradef-default] paragraph. def load(self,sections): '''Update paragraphs defined in 'sections' dictionary.''' for k in sections.keys(): if re.match(r'^paradef.+$',k): dict = {} parse_entries(sections.get(k,()),dict) for p in self.paragraphs: if p.name == k: break else: p = Paragraph() self.paragraphs.append(p) try: p.load(k,dict) except EAsciiDoc,e: raise EAsciiDoc,'[%s] %s' % (k,str(e)) def dump(self): for p in self.paragraphs: p.dump() def isnext(self): for p in self.paragraphs: if p.isnext(): self.current = p return 1; return 0 def check(self): # Check all paragraphs have valid delimiter. for p in self.paragraphs: if not p.delimiter or not is_regexp(p.delimiter): raise EAsciiDoc,'[%s] missing or illegal delimiter' % (p.name,) # Check all paragraph sections exist. for p in self.paragraphs: if not p.section: warning('[%s] missing section entry' % (p.name,)) if not config.sections.has_key(p.section): warning('[%s] missing paragraph section' % (p.section,)) # Check we have a default paragraph definition, put it last in list. for i in range(len(self.paragraphs)): if self.paragraphs[i].name == 'paradef-default': p = self.paragraphs[i] del self.paragraphs[i] self.paragraphs.append(p) self.default = p break else: raise EAsciiDoc,'missing [paradef-default] section' class Paragraph: OPTIONS = ('listelement',) def __init__(self): self.name=None # Configuration file section name. self.delimiter=None # Regular expression matching paragraph delimiter. self.section=None # Name of section defining paragraph start/end tags. self.options=() # List of paragraph option names. self.presubs=SUBS_DEFAULT # List of pre-filter substitution option names. self.postsubs=() # List of post-filter substitution option names. self.filter=None # Executable paragraph filter command. def load(self,name,dict): '''Update paragraph definition from section entries in 'dict'.''' self.name = name for k,v in dict.items(): if k == 'delimiter': if v and is_regexp(v): self.delimiter = v else: raise EAsciiDoc,'malformed paragraph delimiter "%s"' % (v,) elif k == 'section': if is_name(v): self.section = v else: raise EAsciiDoc,'malformed paragraph section name "%s"' \ % (v,) elif k == 'options': self.options = parse_options(v,Paragraph.OPTIONS, 'illegal Paragraph %s option' % (k,)) elif k == 'presubs': self.presubs = parse_options(v,SUBS_OPTIONS, 'illegal Paragraph %s option' % (k,)) elif k == 'postsubs': self.postsubs = parse_options(v,SUBS_OPTIONS, 'illegal Paragraph %s option' % (k,)) elif k == 'filter': self.filter = v else: raise EAsciiDoc,'illegal paragraph parameter name "%s"' % (k,) def dump(self): write = lambda s: sys.stdout.write('%s%s' % (s,writer.newline)) write('['+self.name+']') write('delimiter='+self.delimiter) if self.section: write('section='+self.section) if self.options: write('options='+string.join(self.options,',')) if self.presubs: write('presubs='+string.join(self.presubs,',')) if self.postsubs: write('postsubs='+string.join(self.postsubs,',')) if self.filter: write('filter='+self.filter) write('') def isnext(self): reader.skip_blank_lines() if reader.read_next(): return re.match(self.delimiter,reader.read_next()) else: return 0 def parse_delimiter_text(self): '''Return the text in the paragraph delimiter line.''' delimiter = reader.read() mo = re.match(self.delimiter,delimiter) assert mo result = mo.groupdict().get('text') if result is None: raise EAsciiDoc,'no text group in [%s] delimiter' % (self.name,) return result def write_body(self,body): dict = {} BlockTitle.gettitle(dict) stag,etag = config.section2tags(self.section,dict) # Writes blank line if the tag is empty (to separate LinuxDoc # paragraphs). if not stag: stag = [''] if not etag: etag = [''] writer.write(list(stag)+list(body)+list(etag)) def translate(self): line1 = self.parse_delimiter_text() # The next line introduces the requirement that a List cannot # immediately follow a preceding Paragraph (introduced in v3.2.2). body = reader.read_until(r'^$|'+blocks.delimiter+r'|'+tables.delimiter) body = [line1] + list(body) body = join_lines(body) body = Lex.set_margin(body) # Move body to left margin. body = Lex.subs(body,self.presubs) if self.filter: body = filter_lines(self.filter,body) body = Lex.subs(body,self.postsubs) self.write_body(body) class Lists: '''List of List objects.''' def __init__(self): self.current=None self.lists = [] # List objects. self.delimiter = '' # Combined blocks delimiter regular expression. self.open = [] # A stack of the current an parent lists. def load(self,sections): '''Update lists defined in 'sections' dictionary.''' for k in sections.keys(): if re.match(r'^listdef.+$',k): dict = {} parse_entries(sections.get(k,()),dict) for l in self.lists: if l.name == k: break else: l = List() # Create a new list if it doesn't exist. self.lists.append(l) try: l.load(k,dict) except EAsciiDoc,e: raise EAsciiDoc,'[%s] %s' % (k,str(e)) def dump(self): for l in self.lists: l.dump() def isnext(self): for l in self.lists: if l.isnext(): self.current = l return 1; return 0 def check(self): for l in self.lists: # Check list has valid type . if not l.type in l.TYPES: raise EAsciiDoc,'[%s] illegal type' % (l.name,) # Check list has valid delimiter. if not l.delimiter or not is_regexp(l.delimiter): raise EAsciiDoc,'[%s] missing or illegal delimiter' % (l.name,) # Check all list tags. if not l.listtag or not config.tags.has_key(l.listtag): warning('[%s] missing listtag' % (l.name,)) if not l.itemtag or not config.tags.has_key(l.itemtag): warning('[%s] missing tag itemtag' % (l.name,)) if not l.texttag or not config.tags.has_key(l.texttag): warning('[%s] missing tag texttag' % (l.name,)) if l.type == 'variable': if not l.entrytag or not config.tags.has_key(l.entrytag): warning('[%s] missing entrytag' % (l.name,)) if not l.termtag or not config.tags.has_key(l.termtag): warning('[%s] missing termtag' % (l.name,)) # Build combined lists delimiter pattern. delimiters = [] for l in self.lists: delimiters.append(l.delimiter) self.delimiter = join_regexp(delimiters) class List: TAGS = ('listtag','itemtag','texttag','entrytag','termtag') TYPES = ('simple','variable') def __init__(self): self.name=None # List definition configuration file section name. self.type=None # 'simple' or 'variable' self.delimiter=None # Regular expression matching list item delimiter. self.subs=SUBS_DEFAULT # List of substitution option names. self.listtag=None self.itemtag=None self.texttag=None # Tag for list item text. self.termtag=None # Variable lists only. self.entrytag=None # Variable lists only. def load(self,name,dict): '''Update block definition from section entries in 'dict'.''' self.name = name for k,v in dict.items(): if k == 'type': if v in self.TYPES: self.type = v else: raise EAsciiDoc,'illegal list type "%s"' % (v,) elif k == 'delimiter': if v and is_regexp(v): self.delimiter = v else: raise EAsciiDoc,'malformed list delimiter "%s"' % (v,) elif k == 'subs': self.subs = parse_options(v,SUBS_OPTIONS, 'illegal List %s option' % (k,)) elif k in self.TAGS: if is_name(v): setattr(self,k,v) else: raise EAsciiDoc,'illegal list %s name "%s"' % (k,v) else: raise EAsciiDoc,'illegal list parameter name "%s"' % (k,) def dump(self): write = lambda s: sys.stdout.write('%s%s' % (s,writer.newline)) write('['+self.name+']') write('type='+self.type) write('delimiter='+self.delimiter) if self.subs: write('subs='+string.join(self.subs,',')) write('listtag='+self.listtag) write('itemtag='+self.itemtag) write('texttag='+self.texttag) if self.type == 'variable': write('entrytag='+self.entrytag) write('termtag='+self.termtag) write('') def isnext(self): reader.skip_blank_lines() if reader.read_next(): return re.match(self.delimiter,reader.read_next()) else: return 0 def parse_delimiter_text(self): '''Return the text in the list delimiter line.''' delimiter = reader.read() mo = re.match(self.delimiter,delimiter) assert mo result = mo.groupdict().get('text') if result is None: raise EAsciiDoc,'no text group in [%s] delimiter' % (self.name,) return result def translate_entry(self): assert self.type == 'variable' stag,etag = config.tag(self.entrytag) if stag: writer.write(stag) # Write terms. while Lex.next() is self: term = self.parse_delimiter_text() writer.write_tag(self.termtag,[term],self.subs) # Write definition. self.translate_item() if etag: writer.write(etag) def translate_item(self,first_line=None): stag,etag = config.tag(self.itemtag) if stag: writer.write(stag) # Write ItemText. text = reader.read_until(lists.delimiter+'|^$|'+blocks.delimiter \ +r'|'+tables.delimiter) if first_line is not None: text = [first_line] + list(text) text = join_lines(text) writer.write_tag(self.texttag,text,self.subs) # Process nested ListParagraphs and Lists. while 1: next = Lex.next() if next in lists.open: break elif isinstance(next,List): next.translate() elif isinstance(next,Paragraph) and 'listelement' in next.options: next.translate() else: break if etag: writer.write(etag) def translate(self): lists.open.append(self) stag,etag = config.tag(self.listtag) if stag: dict = {} BlockTitle.gettitle(dict) stag = subs_glossary([stag],dict)[0] writer.write(stag) while Lex.next() is self: if self.type == 'simple': first_line = self.parse_delimiter_text() self.translate_item(first_line) elif self.type == 'variable': self.translate_entry() else: raise AssertionError,'illegal [%s] list type"' % (self.name,) if etag: writer.write(etag) lists.open.pop() class DelimitedBlocks: '''List of delimited blocks.''' def __init__(self): self.current=None self.blocks = [] # List of DelimitedBlock objects. self.delimiter = '' # Combined blocks delimiter regular expression. def load(self,sections): '''Update blocks defined in 'sections' dictionary.''' for k in sections.keys(): if re.match(r'^blockdef.+$',k): dict = {} parse_entries(sections.get(k,()),dict) for b in self.blocks: if b.name == k: break else: b = DelimitedBlock() self.blocks.append(b) try: b.load(k,dict) except EAsciiDoc,e: raise EAsciiDoc,'[%s] %s' % (k,str(e)) def dump(self): for b in self.blocks: b.dump() def isnext(self): for b in self.blocks: if b.isnext(): self.current = b return 1; return 0 def check(self): # Check all blocks have valid delimiter. for b in self.blocks: if not b.delimiter or not is_regexp(b.delimiter): raise EAsciiDoc,'[%s] missing or illegal delimiter' % (b.name,) # Check all block sections exist. for b in self.blocks: if 'skip' not in b.options: if not b.section: warning('[%s] missing section entry' % (b.name,)) if not config.sections.has_key(b.section): warning('[%s] missing block section' % (b.section,)) # Build combined block delimiter pattern. delimiters = [] for b in self.blocks: delimiters.append(b.delimiter) self.delimiter = join_regexp(delimiters) class DelimitedBlock: OPTIONS = ('section','skip','argsline') def __init__(self): self.name=None # Block definition configuration file section name. self.delimiter=None # Regular expression matching block delimiter. self.section=None # Name of section defining block header/footer. self.options=() # List of block option names. self.presubs=() # List of pre-filter substitution option names. self.postsubs=() # List of post-filter substitution option names. self.filter=None # Executable block filter command. def load(self,name,dict): '''Update block definition from section entries in 'dict'.''' self.name = name for k,v in dict.items(): if k == 'delimiter': if v and is_regexp(v): self.delimiter = v else: raise EAsciiDoc,'malformed block delimiter "%s"' % (v,) elif k == 'section': if is_name(v): self.section = v else: raise EAsciiDoc,'malformed block section name "%s"' % (v,) elif k == 'options': self.options = parse_options(v,DelimitedBlock.OPTIONS, 'illegal DelimitedBlock %s option' % (k,)) elif k == 'presubs': self.presubs = parse_options(v,SUBS_OPTIONS, 'illegal DelimitedBlock %s option' % (k,)) elif k == 'postsubs': self.postsubs = parse_options(v,SUBS_OPTIONS, 'illegal DelimitedBlock %s option' % (k,)) elif k == 'filter': self.filter = v else: raise EAsciiDoc,'illegal block parameter name "%s"' % (k,) def dump(self): write = lambda s: sys.stdout.write('%s%s' % (s,writer.newline)) write('['+self.name+']') write('delimiter='+self.delimiter) if self.section: write('section='+self.section) if self.options: write('options='+string.join(self.options,',')) if self.presubs: write('presubs='+string.join(self.presubs,',')) if self.postsubs: write('postsubs='+string.join(self.postsubs,',')) if self.filter: write('filter='+self.filter) write('') def isnext(self): reader.skip_blank_lines() if reader.read_next(): return re.match(self.delimiter,reader.read_next()) else: return 0 def translate(self): dict = {} BlockTitle.gettitle(dict) delimiter = reader.read() mo = re.match(self.delimiter,delimiter) assert mo dict.update(mo.groupdict()) for k,v in dict.items(): if v is None: del dict[k] if dict.has_key('args'): # Extract embedded arguments from leading delimiter line. parse_args(dict['args'],dict) elif 'argsline' in self.options: # Parse block arguments line. reader.parse_arguments(dict) # Process block contents. if 'skip' in self.options: # Discard block body. reader.read_until(self.delimiter,same_file=1) elif 'section' in self.options: stag,etag = config.section2tags(self.section,dict) # The body is treated like a SimpleSection. writer.write(stag) Section.translate_body(self) writer.write(etag) else: stag,etag = config.section2tags(self.section,dict) body = reader.read_until(self.delimiter,same_file=1) body = Lex.subs(body,self.presubs) if self.filter: body = filter_lines(self.filter,body,dict) body = Lex.subs(body,self.postsubs) # Write start tag, content, end tag. writer.write(list(stag)+list(body)+list(etag)) if reader.eof(): raise EAsciiDoc,'closing [%s] delimiter expected' % (self.name,) delimiter = reader.read() # Discard delimiter line. assert re.match(self.delimiter,delimiter) class Tables: '''List of tables.''' def __init__(self): self.current=None self.tables = [] # List of Table objects. self.delimiter = '' # Combined tables delimiter regular expression. def load(self,sections): '''Update tables defined in 'sections' dictionary.''' for k in sections.keys(): if re.match(r'^tabledef.+$',k): dict = {} parse_entries(sections.get(k,()),dict) for t in self.tables: if t.name == k: break else: t = Table() self.tables.append(t) try: t.load(k,dict) except EAsciiDoc,e: raise EAsciiDoc,'[%s] %s' % (k,str(e)) def dump(self): for t in self.tables: t.dump() def isnext(self): for t in self.tables: if t.isnext(): self.current = t return 1; return 0 def check(self): # Check we have a default table definition, for i in range(len(self.tables)): if self.tables[i].name == 'tabledef-default': default = self.tables[i] break else: raise EAsciiDoc,'missing [table-default] section' # Set default table defaults. if default.subs is None: default.subs = SUBS_DEFAULT if default.format is None: default.subs = 'fixed' # Propagate defaults to unspecified table parameters. for t in self.tables: if t is not default: if t.fillchar is None: t.fillchar = default.fillchar if t.subs is None: t.subs = default.subs if t.format is None: t.format = default.format if t.section is None: t.section = default.section if t.colspec is None: t.colspec = default.colspec if t.headrow is None: t.headrow = default.headrow if t.footrow is None: t.footrow = default.footrow if t.bodyrow is None: t.bodyrow = default.bodyrow if t.headdata is None: t.headdata = default.headdata if t.footdata is None: t.footdata = default.footdata if t.bodydata is None: t.bodydata = default.bodydata # Check all tables have valid fill character. for t in self.tables: if not t.fillchar or len(t.fillchar) != 1: raise EAsciiDoc,'[%s] missing or illegal fillchar' % (t.name,) # Build combined tables delimiter patterns and assign defaults. delimiters = [] for t in self.tables: # Ruler is: # (ColStop,(ColWidth,FillChar+)?)+, FillChar+, TableWidth? t.delimiter = r'^(' + Table.COL_STOP \ + r'(\d*|' + re.escape(t.fillchar) + r'*)' \ + r')+' \ + re.escape(t.fillchar) + r'+' \ + '([\d\.]*)$' delimiters.append(t.delimiter) if not t.headrow: t.headrow = t.bodyrow if not t.footrow: t.footrow = t.bodyrow if not t.headdata: t.headdata = t.bodydata if not t.footdata: t.footdata = t.bodydata self.delimiter = join_regexp(delimiters) # Check table definitions are valid. for t in self.tables: t.check() if t.check_msg: warning('[%s] table definition: %s' % (t.name,t.check_msg)) class Column: '''Table column.''' def __init__(self): self.colalign = None # 'left','right','center' self.rulerwidth = None self.colwidth = None # Output width in page units. class Table: COL_STOP = r"(`|'|\.)" # RE. ALIGNMENTS = {'`':'left', "'":'right', '.':'center'} FORMATS = ('fixed','csv','dsv') def __init__(self): # Configuration parameters. self.name=None # Table definition configuration file section name. self.fillchar=None self.subs=None self.format=None # 'fixed','csv','dsv' self.section=None self.colspec=None self.headrow=None self.footrow=None self.bodyrow=None self.headdata=None self.footdata=None self.bodydata=None # Calculated parameters. self.delimiter=None # RE matching any table ruler. self.underline=None # RE matching current table underline. self.isnumeric=0 # True if numeric ruler, false if character ruler. self.tablewidth=None # Optional table width scale factor. self.columns=[] # List of Columns. self.dict={} # Substitutions dictionary. # Other. self.check_msg='' # Message set by previous self.check() call. def load(self,name,dict): '''Update table definition from section entries in 'dict'.''' self.name = name for k,v in dict.items(): if k == 'fillchar': if v and len(v) == 1: self.fillchar = v else: raise EAsciiDoc,'malformed table fillchar "%s"' % (v,) elif k == 'section': if is_name(v): self.section = v else: raise EAsciiDoc,'malformed table section name "%s"' % (v,) elif k == 'subs': self.subs = parse_options(v,SUBS_OPTIONS, 'illegal Table %s option' % (k,)) elif k == 'format': if v in Table.FORMATS: self.format = v else: raise EAsciiDoc,'illegal table format "%s"' % (v,) elif k == 'colspec': self.colspec = v elif k == 'headrow': self.headrow = v elif k == 'footrow': self.footrow = v elif k == 'bodyrow': self.bodyrow = v elif k == 'headdata': self.headdata = v elif k == 'footdata': self.footdata = v elif k == 'bodydata': self.bodydata = v else: raise EAsciiDoc,'illegal table parameter name "%s"' % (k,) def dump(self): write = lambda s: sys.stdout.write('%s%s' % (s,writer.newline)) write('['+self.name+']') write('fillchar='+self.fillchar) write('subs='+string.join(self.subs,',')) write('format='+self.format) write('section='+self.section) if self.colspec: write('colspec='+self.colspec) if self.headrow: write('headrow='+self.headrow) if self.footrow: write('footrow='+self.footrow) write('bodyrow='+self.bodyrow) if self.headdata: write('headdata='+self.headdata) if self.footdata: write('footdata='+self.footdata) write('bodydata='+self.bodydata) write('') def check(self): '''Check table definition and set self.check_msg if invalid else set self.check_msg to blank string.''' # Check global table parameters. if config.textwidth is None: self.check_msg = 'missing [miscellaneous] textwidth entry' elif config.pagewidth is None: self.check_msg = 'missing [miscellaneous] pagewidth entry' elif config.pageunits is None: self.check_msg = 'missing [miscellaneous] pageunits entry' elif not self.section: self.check_msg = 'missing section entry' elif not config.sections.has_key(self.section): self.check_msg = 'missing section %s' % (self.section,) elif self.headrow is None: self.check_msg = 'missing headrow entry' elif self.footrow is None: self.check_msg = 'missing footrow entry' elif self.bodyrow is None: self.check_msg = 'missing bodyrow entry' elif self.headdata is None: self.check_msg = 'missing headdata entry' elif self.footdata is None: self.check_msg = 'missing footdata entry' elif self.bodydata is None: self.check_msg = 'missing bodydata entry' else: # No errors. self.check_msg = '' def isnext(self): reader.skip_blank_lines() if reader.read_next(): return re.match(self.delimiter,reader.read_next()) else: return 0 def parse_ruler(self,ruler): '''Parse ruler calculating underline and ruler column widths.''' fc = re.escape(self.fillchar) # Strip and save optional tablewidth from end of ruler. mo = re.match(r'^(.*'+fc+r'+)([\d\.]+)$',ruler) if mo: ruler = mo.group(1) self.tablewidth = float(mo.group(2)) self.dict['tablewidth'] = str(float(self.tablewidth)) else: self.tablewidth = None self.dict['tablewidth'] = '100.0' # Guess whether column widths are specified numerically or not. if ruler[1] != self.fillchar: # If the first column does not start with a fillchar then numeric. self.isnumeric = 1 elif ruler[1:] == self.fillchar*len(ruler[1:]): # The case of one column followed by fillchars is numeric. self.isnumeric = 1 else: self.isnumeric = 0 # Underlines must be 3 or more fillchars. self.underline = r'^' + fc + r'{3,}$' splits = re.split(self.COL_STOP,ruler)[1:] # Build self.columns. for i in range(0,len(splits),2): c = Column() c.colalign = self.ALIGNMENTS[splits[i]] s = splits[i+1] if self.isnumeric: # Strip trailing fillchars. s = re.sub(fc+r'+$','',s) if s == '': c.rulerwidth = None else: c.rulerwidth = int(validate(s,'int($)>0', 'malformed ruler: bad width')) else: # Calculate column width from inter-fillchar intervals. if not re.match(r'^'+fc+r'+$',s): raise EAsciiDoc,'malformed ruler: illegal fillchars' c.rulerwidth = len(s)+1 self.columns.append(c) # Fill in unspecified ruler widths. if self.isnumeric: if self.columns[0].rulerwidth is None: prevwidth = 1 for c in self.columns: if c.rulerwidth is None: c.rulerwidth = prevwidth prevwidth = c.rulerwidth def build_colspecs(self): '''Generate colwidths and colspecs. This can only be done after the table arguments have been parsed since we use the table format.''' self.dict['cols'] = len(self.columns) # Calculate total ruler width. totalwidth = 0 for c in self.columns: totalwidth = totalwidth + c.rulerwidth if totalwidth <= 0: raise EAsciiDoc,'zero width table' # Calculate marked up colwidths from rulerwidths. for c in self.columns: # Convert ruler width to output page width. width = float(c.rulerwidth) if self.format == 'fixed': if self.tablewidth is None: # Size proportional to ruler width. colfraction = width/config.textwidth else: # Size proportional to page width. colfraction = width/totalwidth else: # Size proportional to page width. colfraction = width/totalwidth c.colwidth = colfraction * config.pagewidth # To page units. if self.tablewidth is not None: c.colwidth = c.colwidth * self.tablewidth # Scale factor. if self.tablewidth > 1: c.colwidth = c.colwidth/100 # tablewidth is in percent. # Build colspecs. if self.colspec: s = [] for c in self.columns: self.dict['colalign'] = c.colalign self.dict['colwidth'] = str(int(c.colwidth)) s.append(subs_glossary((self.colspec,),self.dict)[0]) self.dict['colspecs'] = string.join(s,writer.newline) def parse_arguments(self): '''Parse table arguments string.''' d = {} reader.parse_arguments(d) # Update table with overridable parameters. if d.has_key('subs'): self.subs = parse_options(d['subs'],SUBS_OPTIONS, 'illegal table subs %s option' % ('subs',)) if d.has_key('format'): self.format = d['format'] if d.has_key('tablewidth'): self.tablewidth = float(d['tablewidth']) # Add arguments to markup substitutions. self.dict.update(d) def split_rows(self,rows): '''Return a list of lines up to but not including the next underline. Continued lines are joined.''' reo = re.compile(self.underline) i = 0 while not reo.match(rows[i]): i = i+1 if i == 0: raise EAsciiDoc,'missing [%s] table rows' % (self.name,) if i >= len(rows): raise EAsciiDoc,'closing [%s] underline expected' % (self.name,) return (join_lines(rows[:i]), rows[i+1:]) def parse_rows(self, rows, rtag, dtag): '''Parse rows list using the row and data tags. Returns a substituted list of output lines.''' result = [] # Source rows are parsed as single block, rather than line by line, to # allow the CSV reader to handle multi-line rows. if self.format == 'fixed': rows = self.parse_fixed(rows) elif self.format == 'csv': rows = self.parse_csv(rows) elif self.format == 'dsv': rows = self.parse_dsv(rows) else: assert 1,'illegal table format' # Substitute and indent all data in all rows. stag,etag = subs_tag(rtag,self.dict) for row in rows: result.append(' '+stag) for data in self.subs_row(row,dtag): result.append(' '+data) result.append(' '+etag) return result def subs_row(self, data, dtag): '''Substitute the list of source row data elements using the data tag. Returns a substituted list of output table data items.''' result = [] if len(data) < len(self.columns): warning('fewer row data items then table columns') if len(data) > len(self.columns): warning('more row data items than table columns') for i in range(len(self.columns)): if i > len(data) - 1: d = '' # Fill missing column data with blanks. else: d = data[i] c = self.columns[i] self.dict['colalign'] = c.colalign self.dict['colwidth'] = str(int(c.colwidth)) + config.pageunits stag,etag = subs_tag(dtag,self.dict) # Insert AsciiDoc line break (' +') where row data has newlines # ('\n'). This is really only useful when the table format is csv # and the output markup is HTML. It's also a bit dubious in that it # assumes the user has not modified the shipped line break pattern. if 'replacements' in self.subs: # Insert line breaks in cell data. d = re.sub(r'(?m)\n',r' +\n',d) d = string.split(d,'\n') # So writer.newline is written. else: d = [d] result = result + [stag] + Lex.subs(d,self.subs) + [etag] return result def parse_fixed(self,rows): '''Parse the list of source table rows. Each row item in the returned list contains a list of cell data elements.''' result = [] for row in rows: data = [] start = 0 for c in self.columns: end = start + c.rulerwidth if c is self.columns[-1]: # Text in last column can continue forever. data.append(string.strip(row[start:])) else: data.append(string.strip(row[start:end])) start = end result.append(data) return result def parse_csv(self,rows): '''Parse the list of source table rows. Each row item in the returned list contains a list of cell data elements.''' import StringIO try: import csv except: raise EAsciiDoc,'python 2.3 or better required to parse csv tables' result = [] rdr = csv.reader(StringIO.StringIO(string.join(rows,'\n'))) try: for row in rdr: result.append(row) except: raise EAsciiDoc,'csv parse error "%s"' % (row,) return result def parse_dsv(self,rows): '''Parse the list of source table rows. Each row item in the returned list contains a list of cell data elements.''' separator = self.dict.get('separator',':') separator = eval('"'+separator+'"') if len(separator) != 1: raise EAsciiDoc,'malformed dsv separator: %s' % (separator,) # TODO If separator is preceeded by and odd number of backslashes then # it is escaped and should not delimit. result = [] for row in rows: # Unescape escaped characters. row = eval('"'+string.replace(row,'"','\\"')+'"') data = string.split(row,separator) result.append(data) return result def translate(self): # Reset instance specific properties. self.underline = None self.columns = [] self.dict = {} BlockTitle.gettitle(self.dict) # Add relevant globals to table substitutions. self.dict['pagewidth'] = str(config.pagewidth) self.dict['pageunits'] = config.pageunits # Save overridable table parameters. save_subs = self.subs save_format = self.format # Parse table ruler. ruler = reader.read() assert re.match(self.delimiter,ruler) self.parse_ruler(ruler) # Parse table arguments. self.parse_arguments() # Read the entire table. table = reader.read_until(r'^$') # Tables terminated by blank line. if len(table) < 1 or not re.match(self.underline,table[-1]): raise EAsciiDoc,'closing [%s] underline expected' % (self.name,) if self.check_msg: warning('skipping %s table: %s' % (self.name,self.check_msg)) return # Generate colwidths and colspecs. self.build_colspecs() # Generate headrows, footrows, bodyrows. headrows = footrows = [] bodyrows,table = self.split_rows(table) if table: headrows = bodyrows bodyrows,table = self.split_rows(table) if table: footrows,table = self.split_rows(table) if headrows: headrows = self.parse_rows(headrows, self.headrow, self.headdata) self.dict['headrows'] = string.join(headrows,writer.newline) if footrows: footrows = self.parse_rows(footrows, self.footrow, self.footdata) self.dict['footrows'] = string.join(footrows,writer.newline) bodyrows = self.parse_rows(bodyrows, self.bodyrow, self.bodydata) self.dict['bodyrows'] = string.join(bodyrows,writer.newline) table = subs_glossary(config.sections[self.section],self.dict) writer.write(table) # Restore overridable table parameters. self.subs = save_subs self.format = save_format class Macros: def __init__(self): self.macros = [] # List of Macros. self.current = None # The last matched block macro. def load(self,entries): for entry in entries: m = Macro() m.load(entry) if m.name is None: # Delete undefined macro. for i in range(len(self.macros)-1,-1,-1): if self.macros[i].pattern == m.pattern: del self.macros[i] else: # Check for duplicates. for m2 in self.macros: if m.equals(m2): warning('duplicate macro: '+entry) break else: self.macros.append(m) def dump(self): write = lambda s: sys.stdout.write('%s%s' % (s,writer.newline)) write('[macros]') for m in self.macros: write('%s=%s%s' % (m.pattern,m.prefix,m.name)) write('') def check(self): # Check all named sections exist. for m in self.macros: if m.name and m.prefix != '+' \ and not config.sections.has_key(m.name): warning('missing macro section: [%s]' % (m.name,)) def subs(self,text,prefix=''): result = text for m in self.macros: if m.prefix == prefix: result = m.subs(result) return result def isnext(self): '''Return matching macro if block macro is next on reader.''' reader.skip_blank_lines() line = reader.read_next() if line: for m in self.macros: if m.prefix == '#': if m.reo.match(line): self.current = m return m return 0 def match(self,prefix,name,text): '''Return re match object matching 'text' with macro type 'prefix', macro name 'name'.''' for m in self.macros: if m.prefix == prefix: mo = m.reo.match(text) if mo: if m.name == name: return mo if re.match(name,mo.group('name')): return mo return None # Macro set just prior to calling _subs_macro(). Ugly but there's no way # to pass optional arguments with _subs_macro(). _macro = None def _subs_macro(mo): '''Function called to perform inline macro substitution. Uses matched macro regular expression object and returns string containing the substituted macro body. Called by Macros().subs().''' # Check if macro reference is escaped. if mo.group()[0] == '\\': return mo.group()[1:] # Strip leading backslash. dict = mo.groupdict() # Delete groups that didn't participate in match. for k,v in dict.items(): if v is None: del dict[k] if _macro.name: name = _macro.name else: if not dict.has_key('name'): warning('missing macro name group: %s' % (mo.re.pattern,)) return '' name = dict['name'] # If we're dealing with a block macro get optional block title. if _macro.prefix == '#': BlockTitle.gettitle(dict) # Parse macro caption to macro arguments. assert dict.has_key('caption') and dict['caption'] is not None if dict['caption'] == '': del dict['caption'] else: parse_args(dict['caption'],dict) body = config.subs_section(name,dict) if len(body) == 0: result = '' elif len(body) == 1: result = body[0] else: result = string.join(body,writer.newline) return result class Macro: def __init__(self): self.pattern = None # Matching regular expression. self.name = '' # Conf file section name (None if implicit). self.prefix = '' # '' if inline, '+' if builtin, '#' if block. self.reo = None # Compiled pattern re object. def equals(self,m): if self.pattern != m.pattern: return 0 if self.name != m.name: return 0 if self.prefix != m.prefix: return 0 return 1 def load(self,entry): e = parse_entry(entry) if not e: raise EAsciiDoc,'malformed macro entry "%s"' % (entry,) self.pattern, self.name = e if not is_regexp(self.pattern): raise EAsciiDoc,'illegal regular expression in macro entry "%s"' \ % (entry,) self.reo = re.compile(self.pattern) if self.name: if self.name[0] in ('+','#'): self.prefix, self.name = self.name[0], self.name[1:] if self.name and not is_name(self.name): raise EAsciiDoc,'illegal section name in macro entry "%s"' % \ (entry,) def subs(self,text): global _macro _macro = self # Pass the macro to _subs_macro(). return self.reo.sub(_subs_macro,text) def translate(self): '''Translate block macro at reader.''' assert self.prefix == '#' line = reader.read() writer.write(self.subs(line)) #--------------------------------------------------------------------------- # Input stream Reader and output stream writer classes. #--------------------------------------------------------------------------- class Reader1: '''Line oriented AsciiDoc input file reader. Processes non lexical entities: transparently handles included files. Tabs are expanded and lines are right trimmed.''' # This class is not used directly, use Reader class instead. READ_BUFFER_MIN = 10 # Read buffer low level. def __init__(self): self.f = None # Input file object. self.fname = None # Input file name. self.next = [] # Read ahead buffer containing # (filename,linenumber,linetext) tuples. self.cursor = None # Last read() (filename,linenumber,linetext). self.tabsize = 8 # Tab expansion number of spaces. self.parent = None # Included reader's parent reader. self._lineno = 0 # The last line read from file object f. self.include_enabled = 1 # Enables/disables file inclusion. self.include_depth = 0 # Current include depth. self.include_max = 5 # Maxiumum allowed include depth. def open(self,fname): self.fname = fname verbose('reading: '+fname) if fname == '': self.f = sys.stdin else: self.f = open(fname,"rb") self._lineno = 0 # The last line read from file object f. self.next = [] # Prefill buffer by reading the first line and then pushing it back. if Reader1.read(self): self.unread(self.cursor) self.cursor = None def closefile(self): '''Used by class methods to close nested include files.''' self.f.close() self.next = [] def close(self): self.closefile() self.__init__() def read(self): '''Read next line. Return None if EOF. Expand tabs. Strip trailing white space. Maintain self.next read ahead buffer.''' # Top up buffer. if len(self.next) <= self.READ_BUFFER_MIN: s = self.f.readline() if s: self._lineno = self._lineno + 1 while s: if self.tabsize != 0: s = string.expandtabs(s,self.tabsize) s = string.rstrip(s) self.next.append((self.fname,self._lineno,s)) if len(self.next) > self.READ_BUFFER_MIN: break s = self.f.readline() if s: self._lineno = self._lineno + 1 # Return first (oldest) buffer entry. if len(self.next) > 0: self.cursor = self.next[0] del self.next[0] result = self.cursor[2] # Check for include macro. mo = macros.match('+',r'include.?',result) if mo and self.include_enabled: # Perform glossary substitution on inlcude macro. a = subs_glossary([mo.group('target')]) # If undefined glossary entry then skip to next line of input. if not a: return Reader1.read(self) fname = a[0] if self.include_depth >= self.include_max: raise EAsciiDoc,'maxiumum inlude depth exceeded' if not os.path.isabs(fname) and self.fname != '': # Include files are relative to parent document directory. fname = os.path.join(os.path.dirname(self.fname),fname) if self.fname != '' and not os.path.isfile(fname): raise EAsciiDoc,'include file "%s" not found' % (fname,) # Parse include macro arguments. args = {} parse_args(mo.group('caption'),args) # Clone self and set as parent (self assumes the role of child). parent = Reader1() assign(parent,self) self.parent = parent if args.has_key('tabsize'): self.tabsize = int(validate(args['tabsize'],'int($)>=0', \ 'illegal include macro tabsize argument')) # The include1 variant does not allow nested includes. if mo.group('name') == 'include1': self.include_enabled = 0 self.open(fname) self.include_depth = self.include_depth + 1 result = Reader1.read(self) else: if not Reader1.eof(self): result = Reader1.read(self) else: result = None return result def eof(self): '''Returns True if all lines have been read.''' if len(self.next) == 0: # End of current file. if self.parent: self.closefile() assign(self,self.parent) # Restore parent reader. return Reader1.eof(self) else: return 1 else: return 0 def read_next(self): '''Like read() but does not advance file pointer.''' if Reader1.eof(self): return None else: return self.next[0][2] def unread(self,cursor): '''Push the line (filename,linenumber,linetext) tuple back into the read buffer. Note that it's up to the caller to restore the previous cursor.''' assert cursor self.next.insert(0,cursor) class Reader(Reader1): ''' Wraps (well, sought of) Reader1 class and implements conditional text inclusion.''' def __init__(self): Reader1.__init__(self) self.depth = 0 # if nesting depth. self.skip = 0 # true if we're skipping ifdef...endif. self.skipname = '' # Name of current endif macro target. self.skipto = -1 # The depth at which skipping is reenabled. def read_super(self): result = Reader1.read(self) if result is None and self.skip: raise EAsciiDoc,'missing endif::%s[]' %(self.skipname,) return result def read(self): result = self.read_super() if result is None: return None while self.skip: mo = macros.match('+',r'ifdef|ifndef|endif',result) if mo: name = mo.group('name') target = mo.group('target') if name == 'endif': self.depth = self.depth-1 if self.depth < 0: raise EAsciiDoc,'"%s" is mismatched' % (result,) if self.depth == self.skipto: self.skip = 0 if target and self.skipname != target: raise EAsciiDoc,'"%s" is mismatched' % (result,) else: # ifdef or ifndef. if not target: raise EAsciiDoc,'"%s" missing macro target' % (result,) self.depth = self.depth+1 result = self.read_super() if result is None: return None mo = macros.match('+',r'ifdef|ifndef|endif',result) if mo: name = mo.group('name') target = mo.group('target') if name == 'endif': self.depth = self.depth-1 else: # ifdef or ifndef. if not target: raise EAsciiDoc,'"%s" missing macro target' % (result,) defined = document.glossary.get(target) is not None if name == 'ifdef': self.skip = not defined else: # ifndef. self.skip = defined if self.skip: self.skipto = self.depth self.skipname = target self.depth = self.depth+1 result = self.read() return result def eof(self): return self.read_next() is None def read_next(self): save_cursor = self.cursor result = self.read() if result is not None: self.unread(self.cursor) self.cursor = save_cursor return result def read_all(self,fname): '''Read all lines from file fname and return as list. Use like class method: Reader().read_all(fname)''' result = [] self.open(fname) try: while not self.eof(): result.append(self.read()) finally: self.close() return result def read_lines(self,count=1): '''Return tuple containing count lines.''' result = [] i = 0 while i < count and not self.eof(): result.append(self.read()) return tuple(result) def read_ahead(self,count=1): '''Same as read_lines() but does not advance the file pointer.''' result = [] putback = [] save_cursor = self.cursor try: i = 0 while i < count and not self.eof(): result.append(self.read()) putback.append(self.cursor) i = i+1 while putback: self.unread(putback.pop()) finally: self.cursor = save_cursor return tuple(result) def skip_blank_lines(self): reader.read_until(r'\s*\S+') def read_until(self,pattern,same_file=0): '''Like read() but reads lines up to (but not including) the first line that matches the pattern regular expression. If same_file is True then the terminating pattern must occur in the file the was being read when the routine was called.''' if same_file: fname = self.cursor[0] result = [] reo = re.compile(pattern) while not self.eof(): save_cursor = self.cursor s = self.read() if (not same_file or fname == self.cursor[0]) and reo.match(s): self.unread(self.cursor) self.cursor = save_cursor break result.append(s) return tuple(result) def read_continuation(self): '''Like read() but treats trailing backslash as line continuation character.''' s = self.read() if s is None: return None result = '' while s is not None and len(s) > 0 and s[-1] == '\\': result = result + s[:-1] s = self.read() if s is not None: result = result + s return result def parse_arguments(self,dict,default_arg=None): '''If an arguments line is in the reader parse it to dict.''' s = self.read_next() if s is not None: if s[:2] == '\\[': # Unescape next line. save_cursor = self.cursor self.read() self.cursor = self.cursor[0:2] + (s[1:],) self.unread(self.cursor) self.cursor = save_cursor elif re.match(r'^\[.*[\\\]]$',s): s = self.read_continuation() if not re.match(r'^\[.*\]$',s): warning('malformed arguments line') else: parse_args(s[1:-1],dict,default_arg) class Writer: '''Writes lines to output file.''' newline = '\r\n' # End of line terminator. f = None # Output file object. fname= None # Output file name. lines_out = 0 # Number of lines written. def open(self,fname): self.fname = fname verbose('writing: '+fname) if fname == '': self.f = sys.stdout else: self.f = open(fname,"wb+") self.lines_out = 0 def close(self,): if self.fname != '': self.f.close() def write(self,*args): '''Iterates arguments, writes tuple and list arguments one line per element, else writes argument as single line. If no arguments writes blank line. self.newline is appended to each line.''' if len(args) == 0: self.f.write(self.newline) self.lines_out = self.lines_out + 1 else: for arg in args: if type(arg) in (TupleType,ListType): for s in arg: self.f.write(s+self.newline) self.lines_out = self.lines_out + len(arg) else: self.f.write(arg+self.newline) self.lines_out = self.lines_out + 1 def write_tag(self,tagname,content,subs=SUBS_DEFAULT): '''Write content enveloped by configuration file tag tagname. Substitutions specified in the 'subs' list are perform on the 'content'.''' stag,etag = config.tag(tagname) self.write(stag,Lex.subs(content,subs),etag) #--------------------------------------------------------------------------- # Configuration file processing. #--------------------------------------------------------------------------- def _subs_specialwords(mo): '''Special word substitution function called by Config.subs_specialwords().''' word = mo.re.pattern # The special word. macro = config.specialwords[word] # The corresponding inline macro. if not config.sections.has_key(macro): raise EAsciiDoc,'missing special word macro [%s]' % (macro,) args = {} args['words'] = mo.group() # The full match string is argument 'words'. args.update(mo.groupdict()) # Add named match groups to the arguments. # Delete groups that didn't participate in match. for k,v in args.items(): if v is None: del args[k] lines = subs_glossary(config.sections[macro],args) if len(lines) == 0: result = '' elif len(lines) == 1: result = lines[0] else: result = string.join(lines,writer.newline) return result class Config: '''Methods to process configuration files.''' # Predefined section name re's. SPECIAL_SECTIONS= ('tags','miscellaneous','glossary','specialcharacters', 'specialwords','macros','replacements','quotes','titles', r'paradef.+',r'listdef.+',r'blockdef.+',r'tabledef.*') def __init__(self): self.sections = OrderedDict() # Keyed by section name containing # lists of section lines. # Command-line options. self.verbose = 0 self.suppress_headers = 0 # -s option. # [miscellaneous] section. self.tabsize = 8 self.textwidth = 70 self.newline = '\r\n' self.pagewidth = None self.pageunits = None self.outfilesuffix = '' self.tags = {} # Values contain (stag,etag) tuples. self.specialchars = {} # Values of special character substitutions. self.specialwords = {} # Name is special word pattern, value is macro. self.replacements = {} # Key is find pattern, value is replace pattern. self.specialsections = {} # Name is special section name pattern, value # is corresponding section name. self.quotes = {} # Values contain corresponding tag name. self.fname = '' # Most recently loaded configuration file name. self.conf_gloss = {} # Glossary entries from conf files. self.cmd_gloss = {} # From command-line -g option glossary entries. self.loaded = [] # Loaded conf files. def load(self,fname,dir=None): '''Loads sections dictionary with section from file fname. Existing sections are overlaid. Silently skips missing configuration files.''' if dir: fname = os.path.join(dir, fname) # Sliently skip missing configuration file. if not os.path.isfile(fname): return # Don't load conf files twice (local and application conf files are the # same if the source file is in the application directory). if realpath(fname) in self.loaded: return rdr = Reader() # Use instead of file so we can use include:[] macro. rdr.open(fname) self.fname = fname reo = re.compile(r'^\s*\[\s*(?P
\S+)\s*\]\s*$') sections = OrderedDict() section,contents = '',[] while not rdr.eof(): s = rdr.read() if s and s[0] == '#': # Skip comment lines. continue s = string.rstrip(s) found = reo.findall(s) if found: if section: # Store previous section. if sections.has_key(section) \ and self.is_special_section(section): # Merge line oriented special sections. contents = sections[section] + contents sections[section] = contents section = string.lower(found[0]) contents = [] else: contents.append(s) if section and contents: # Store last section. if sections.has_key(section) \ and self.is_special_section(section): # Merge line oriented special sections. contents = sections[section] + contents sections[section] = contents rdr.close() # Delete blank lines from sections. for k in sections.keys(): for i in range(len(sections[k])-1,-1,-1): if not sections[k][i]: del sections[k][i] elif not self.is_special_section(k): break # Only trailing blanks from non-special sections. # Merge new sections. self.sections.update(sections) self.parse_tags() # Internally [miscellaneous] section entries are just glossary entries. dict = {} parse_entries(sections.get('miscellaneous',()),dict,unquote=1) update_glossary(self.conf_gloss,dict) dict = {} parse_entries(sections.get('glossary',()),dict,unquote=1) update_glossary(self.conf_gloss,dict) # Update document glossary so entries are available immediately. document.init_glossary() dict = {} parse_entries(sections.get('titles',()),dict) Title.load(dict) parse_entries(sections.get('specialcharacters',()),self.specialchars) undefine_entries(self.specialchars) parse_entries(sections.get('quotes',()),self.quotes) undefine_entries(self.quotes) self.parse_specialwords() self.parse_replacements() self.parse_specialsections() paragraphs.load(sections) lists.load(sections) blocks.load(sections) tables.load(sections) macros.load(sections.get('macros',())) self.loaded.append(realpath(fname)) def load_all(self,dir): '''Load the standard configuration files from directory 'dir'.''' self.load('asciidoc.conf',dir) conf = document.backend + '.conf' self.load(conf,dir) conf = document.backend + '-' + document.doctype + '.conf' self.load(conf,dir) # Load ./filters/*.conf files if they exist. filters = os.path.join(dir,'filters') if os.path.isdir(filters): for file in os.listdir(filters): if re.match(r'^.+\.conf$',file): self.load(file,filters) def load_miscellaneous(self,dict): '''Set miscellaneous configuration entries from dictionary values.''' def set_misc(name,rule='1',intval=0): if dict.has_key(name): errmsg = 'illegal [miscellaneous] %s entry' % name if intval: setattr(self, name, int(validate(dict[name],rule,errmsg))) else: setattr(self, name, validate(dict[name],rule,errmsg)) set_misc('tabsize','int($)>0',intval=1) set_misc('textwidth','int($)>0',intval=1) set_misc('pagewidth','int($)>0',intval=1) set_misc('pageunits') set_misc('outfilesuffix') if dict.has_key('newline'): # Convert escape sequences to their character values. self.newline = eval('"'+dict['newline']+'"') def check(self): '''Check the configuration for internal consistancy. Called after all configuration files have been loaded.''' # Heuristic check that at least one configuration file was loaded. if not self.specialchars or not self.tags or not lists: raise EAsciiDoc,'incomplete or no configuration files' # Check special characters are only one character long. for k in self.specialchars.keys(): if len(k) != 1: raise EAsciiDoc,'[specialcharacters] "%s" ' \ 'must be a single character' % (k,) # Check all special words have a corresponding inline macro body. for macro in self.specialwords.values(): if not is_name(macro): raise EAsciiDoc,'illegal "%s" special word name' % (macro,) if not self.sections.has_key(macro): warning('missing special word macro [%s]' % (macro,)) # Check all text quotes have a corresponding tag. for q in self.quotes.keys(): tag = self.quotes[q] if not self.tags.has_key(tag): warning('[quotes] %s missing "%s" tag definition' % (q,tag)) # Check all specialsections section names exist. for k,v in self.specialsections.items(): if not self.sections.has_key(v): warning('[%s] missing specialsections section' % (v,)) paragraphs.check() lists.check() blocks.check() tables.check() macros.check() def is_special_section(self,section_name): for name in self.SPECIAL_SECTIONS: if re.match(name,section_name): return 1 return 0 def dump(self): '''Dump configuration to stdout.''' # Header. hdr = '' hdr = hdr + '#' + writer.newline hdr = hdr + '# Generated by AsciiDoc %s for %s %s.%s' % \ (VERSION,document.backend,document.doctype,writer.newline) t = time.asctime(time.localtime(time.time())) hdr = hdr + '# %s%s' % (t,writer.newline) hdr = hdr + '#' + writer.newline sys.stdout.write(hdr) # Dump special sections. # Dump only the configuration file and command-line glossary entries. # [miscellanous] entries are dumped as part of the [glossary]. dict = {} dict.update(self.conf_gloss) dict.update(self.cmd_gloss) dump_section('glossary',dict) Title.dump() dump_section('quotes',self.quotes) dump_section('specialcharacters',self.specialchars) dict = {} for k,v in self.specialwords.items(): if dict.has_key(v): dict[v] = '%s "%s"' % (dict[v],k) # Append word list. else: dict[v] = '"%s"' % (k,) dump_section('specialwords',dict) dump_section('replacements',self.replacements) dump_section('specialsections',self.specialsections) dict = {} for k,v in self.tags.items(): dict[k] = '%s|%s' % v dump_section('tags',dict) paragraphs.dump() lists.dump() blocks.dump() tables.dump() macros.dump() # Dump remaining sections. for k in self.sections.keys(): if not self.is_special_section(k): sys.stdout.write('[%s]%s' % (k,writer.newline)) for line in self.sections[k]: sys.stdout.write('%s%s' % (line,writer.newline)) sys.stdout.write(writer.newline) def subs_section(self,section,dict): '''Section glossary substitution from the document.glossary and 'dict'. the document.glossary. Lines containing undefinded glossary entries are deleted.''' if self.sections.has_key(section): return subs_glossary(self.sections[section],dict) else: warning('missing [%s] section' % (section,)) return () def parse_tags(self): '''Parse [tags] section entries into self.tags dictionary.''' dict = {} parse_entries(self.sections.get('tags',()),dict) for k,v in dict.items(): if not is_name(k): raise EAsciiDoc,'[tag] %s malformed' % (k,) if v is None: if self.tags.has_key(k): del self.tags[k] elif v == 'none': self.tags[k] = (None,None) else: mo = re.match(r'(?P.*)\|(?P.*)',v) if mo: self.tags[k] = (mo.group('stag'), mo.group('etag')) else: raise EAsciiDoc,'[tag] %s value malformed' % (k,) def tag(self,name): '''Returns (starttag,endtag) tuple named name from configuration file [tags] section. Raise error if not found''' if not self.tags.has_key(name): raise EAsciiDoc, 'missing tag "%s"' % (name,) return self.tags[name] def parse_specialsections(self): '''Parse specialsections section to self.specialsections dictionary.''' # TODO: This is virtually the same as parse_replacements() and should # be factored to single routine. dict = {} parse_entries(self.sections.get('specialsections',()),dict,1) for pat,sectname in dict.items(): pat = strip_quotes(pat) if not is_regexp(pat): raise EAsciiDoc,'[specialsections] entry "%s" ' \ 'is not a valid regular expression' % (pat,) if sectname is None: if self.specialsections.has_key(pat): del self.specialsections[pat] else: self.specialsections[pat] = sectname def parse_replacements(self): '''Parse replacements section into self.replacements dictionary.''' dict = {} #TODO: Deprecated if self.sections.has_key('substitutions'): parse_entries(self.sections.get('substitutions',()),dict,1) warning('[substitutions] deprecated, rename [replacements]') else: parse_entries(self.sections.get('replacements',()),dict,1) for pat,rep in dict.items(): # The search pattern and the replacement are regular expressions so # check them both. pat = strip_quotes(pat) if not is_regexp(pat): raise EAsciiDoc,'"%s" ([replacements] entry in %s) ' \ 'is not a valid regular expression' % (pat,self.fname) if rep is None: if self.replacements.has_key(pat): del self.replacements[pat] else: rep = strip_quotes(rep) if not is_regexp(pat): raise EAsciiDoc,'[replacements] entry "%s=%s" in %s ' \ 'is an invalid find regular expression combination' \ % (pat,rep,self.fname) self.replacements[pat] = rep def subs_replacements(self,s): '''Substitute patterns from self.replacements in 's'.''' result = s for pat,rep in self.replacements.items(): result = re.sub(pat, rep, result) return result def parse_specialwords(self): '''Parse special words section into self.specialwords dictionary.''' reo = re.compile(r'(?:\s|^)(".+?"|[^"\s]+)(?=\s|$)') for line in self.sections.get('specialwords',()): e = parse_entry(line) if not e: raise EAsciiDoc,'[specialwords] entry "%s" in %s is malformed' \ % (line,self.fname) name,wordlist = e if not is_name(name): raise EAsciiDoc,'[specialwords] name "%s" in %s is illegal' \ % (name,self.fname) if wordlist == '': warning('[specialwords] entry "%s" in %s is blank' % (name,self.fname)) if wordlist is None: # Undefine all words associated with 'name'. for k,v in self.specialwords.items(): if v == name: del self.specialwords[k] else: words = reo.findall(wordlist) for word in words: word = strip_quotes(word) if not is_regexp(word): raise EAsciiDoc,'"%s" (%s [specialwords] entry in %s)' \ 'is not a valid regular expression' \ % (word,name,self.fname) self.specialwords[word] = name def subs_specialchars(self,s): '''Perform special character substitution on string 's'.''' '''It may seem like a good idea to escape special characters with a '\' character, the reason we don't is because the escape character itself then has to be escaped and this makes including code listings problematic. Use the predefined {amp},{lt},{gt} glossary entries instead.''' result = '' for ch in s: result = result + self.specialchars.get(ch,ch) return result def subs_specialwords(self,s): '''Search for word patterns from self.specialwords in 's' and substitute using corresponding macro.''' result = s for word in self.specialwords.keys(): result = re.sub(word, _subs_specialwords, result) return result def section2tags(self,section,dict={}): '''Perform glossary substitution on 'section' using document glossary plus 'dict' glossary. Return tuple (stag,etag) containing pre and post | placeholder tags.''' if self.sections.has_key(section): body = self.sections[section] else: warning('missing [%s] section' % (section,)) body = () # Split macro body into start and end tag lists. stag = [] etag = [] in_stag = 1 for s in body: if in_stag: mo = re.match(r'(?P.*)\|(?P.*)',s) if mo: if mo.group('stag'): stag.append(mo.group('stag')) if mo.group('etag'): etag.append(mo.group('etag')) in_stag = 0 else: stag.append(s) else: etag.append(s) # Do glossary substitution last so {brkbar} can be used to escape |. stag = subs_glossary(stag,dict) etag = subs_glossary(etag,dict) return (stag,etag) #--------------------------------------------------------------------------- # Application code. #--------------------------------------------------------------------------- # Constants # --------- APP_DIR = None # This file's directory. USER_DIR = None # ~/.asciidoc # Globals # ------- document = Document() # The document being processed. config = Config() # Configuration file reader. reader = Reader() # Input stream line reader. writer = Writer() # Output stream line writer. paragraphs = Paragraphs() # Paragraph definitions. lists = Lists() # List definitions. blocks = DelimitedBlocks() # DelimitedBlock definitions. tables = Tables() # Table definitions. macros = Macros() # Macro definitions. def asciidoc(backend, doctype, confiles, infile, outfile, options): '''Convert AsciiDoc document to DocBook document of type doctype The AsciiDoc document is read from file object src the translated DocBook file written to file object dst.''' try: if doctype not in ('article','manpage','book'): raise EAsciiDoc,'illegal document type' if backend == 'linuxdoc' and doctype != 'article': raise EAsciiDoc,'%s %s documents are not supported' \ % (backend,doctype) document.backend = backend document.doctype = doctype document.init_glossary() # Set processing options. for o in options: if o == '-s': config.suppress_headers = 1 if o == '-v': config.verbose = 1 # Check the infile exists. if infile != '' and not os.path.isfile(infile): raise EAsciiDoc,'input file %s missing' % (infile,) if '-e' not in options: # Load global configuration files from asciidoc directory. config.load_all(APP_DIR) # Load configuration files from ~/.asciidoc if it exists. if USER_DIR is not None: config.load_all(USER_DIR) # Load configuration files from document directory. config.load_all(os.path.dirname(infile)) if infile != '': # Load implicit document specific configuration files if they exist. config.load(os.path.splitext(infile)[0] + '.conf') config.load(os.path.splitext(infile)[0] + '-' + backend + '.conf') # If user specified configuration file(s) overlay the defaults. if confiles: for conf in confiles: # First look in current working directory. if os.path.isfile(conf): config.load(conf) else: raise EAsciiDoc,'configuration file %s missing' % (conf,) document.init_glossary() # Add conf file. # Check configuration for consistency. config.check() # Build outfile name now all conf files have been read. if outfile is None: outfile = os.path.splitext(infile)[0] + '.' + backend if config.outfilesuffix: # Change file extension. outfile = os.path.splitext(outfile)[0] + config.outfilesuffix if '-c' in options: config.dump() else: reader.tabsize = config.tabsize reader.open(infile) try: writer.newline = config.newline writer.open(outfile) try: document.init_glossary() # Add file name related entries. document.translate() finally: writer.close() finally: reader.closefile() # Keep reader state for postmortem. except (KeyboardInterrupt, SystemExit): print except Exception,e: # Cleanup. if outfile and outfile != '' and os.path.isfile(outfile): os.unlink(outfile) # Build and print error description. msg = 'FAILED: ' if reader.cursor: msg = msg + "%s: line %d: " % (reader.cursor[0],reader.cursor[1]) if isinstance(e,EAsciiDoc): print_stderr(msg+str(e)) else: print_stderr(msg+'unexpected error:') print_stderr('-'*60) traceback.print_exc(file=sys.stderr) print_stderr('-'*60) sys.exit(1) def usage(msg=''): if msg: print_stderr(msg) print_stderr('Usage: asciidoc -b backend [-d doctype] [-g glossary-entry]') print_stderr(' [-e] [-n] [-s] [-f configfile] [-o outfile]') print_stderr(' [--help | -h] [--version] [-v] [ -c ]') print_stderr(' infile') def main(): # Locate the executable and configuration files directory. global APP_DIR,USER_DIR APP_DIR = os.path.dirname(realpath(sys.argv[0])) USER_DIR = os.environ.get('HOME') if USER_DIR is not None: USER_DIR = os.path.join(USER_DIR,'.asciidoc') if not os.path.isdir(USER_DIR): USER_DIR = None # Process command line options. import getopt opts,args = getopt.getopt(sys.argv[1:], 'b:cd:ef:g:hno:svw:', ['help','profile','version']) if len(args) > 1: usage() sys.exit(1) backend = None doctype = 'article' confiles = [] outfile = None options = [] prof = 0 for o,v in opts: if o in ('--help','-h'): print __doc__ sys.exit(0) if o == '--profile': prof = 1 if o == '--version': print_stderr('asciidoc version %s' % (VERSION,)) sys.exit(0) if o == '-b': backend = v if o == '-c': options.append('-c') if o == '-d': doctype = v if o == '-e': options.append('-e') if o == '-f': confiles.append(v) if o == '-n': o = '-g' v = 'section-numbers' if o == '-g': e = parse_entry(v) if not e: usage('Illegal -g %s option' % (v,)) sys.exit(1) k,v = e if v is None: if k[0] == '^': k = k[1:] else: v = '' config.cmd_gloss[k] = v if o == '-o': if v == '-': outfile = '' else: outfile = v if o == '-n': outfile = v if o == '-s': options.append('-s') if o == '-v': options.append('-v') if len(args) == 0 and len(opts) == 0: usage() sys.exit(1) if len(args) == 0: usage('No source file specified') sys.exit(1) if not backend: usage('No backend (-b) option specified') sys.exit(1) if args[0] == '-': infile = '' else: infile = args[0] if infile == '' and not outfile: outfile = '' # Convert in and out files to absolute paths. if infile != '': infile = os.path.abspath(infile) if outfile and outfile != '': outfile = os.path.abspath(outfile) # Do the work. if prof: import profile profile.run("asciidoc('%s','%s',(),'%s',None,())" % (backend,doctype,infile)) else: asciidoc(backend, doctype, confiles, infile, outfile, options) if __name__ == "__main__": try: main() except (KeyboardInterrupt, SystemExit): pass except: print_stderr("%s: unexpected exit status: %s" % (os.path.basename(sys.argv[0]), sys.exc_info()[1])) # Exit with previous sys.exit() status or zero if no sys.exit(). sys.exit(sys.exc_info()[1]) gss-1.0.3/doc/cyclo/0000755000000000000000000000000012415510376011140 500000000000000gss-1.0.3/doc/cyclo/cyclo-gss.html0000644000000000000000000023351212415507744013664 00000000000000 Cyclomatic Complexity report for GNU Generic Security Service 1.0.3 Back to GNU Generic Security Service 1.0.3 Homepage

GNU Generic Security Service 1.0.3 Cyclomatic Complexity Report

Report generated at: Thu Oct 9 15:38:44 CEST 2014

Summary
Total number of functions 82
Number of low risk functions 70
Number of moderate risk functions 8
Number of high risk functions 4
Number of untestable functions 0

Details for all functions
  Cyclomatic Complexity Risk Evaluation
  0 - 10 Simple module, without much risk
  11 - 20 More complex module, moderate risk
  21 - 50 Complex module, high risk
  greater than 50 Untestable module, very high risk

Function Name Modified Cyclo Number of
Statements
Number of
Lines
Source File
gss_krb5_unwrap 41 131 227 krb5/msg.c
gss_krb5_accept_sec_context 30 100 190 krb5/context.c
gss_display_status 23 67 157 error.c
gss_krb5_wrap 22 112 213 krb5/msg.c
gss_krb5_init_sec_context 17 40 112 krb5/context.c
gss_init_sec_context 16 38 88 context.c
gss_krb5_canonicalize_name 14 40 83 krb5/name.c
gss_add_oid_set_member 13 29 56 misc.c
acquire_cred1 12 35 69 krb5/cred.c
_gss_krb5_checksum_parse 11 39 72 krb5/checksum.c
_gss_decapsulate_token 11 35 53 asn1.c
gss_inquire_saslname_for_mech 11 24 47 saslname.c
  init_request 10 38 81 krb5/context.c
  hash_cb 10 36 61 krb5/checksum.c
  gss_acquire_cred 10 27 63 cred.c
  gss_duplicate_name 10 26 42 name.c
  inquire_cred 10 21 40 krb5/cred.c
  gss_accept_sec_context 9 26 67 context.c
  gss_krb5_acquire_cred 9 25 53 krb5/cred.c
  gss_krb5_display_status 9 24 68 krb5/error.c
  gss_delete_sec_context 8 22 43 context.c
  gss_import_name 8 21 37 name.c
  gss_release_cred 8 21 36 cred.c
  gss_inquire_cred_by_mech 8 20 51 cred.c
  gss_display_name 8 17 30 name.c
  gss_compare_name 7 9 20 name.c
  _gss_find_mech_by_saslname 7 9 17 meta.c
  init_reply 7 24 58 krb5/context.c
  gss_decapsulate_token 7 21 36 asn1.c
  _gss_asn1_get_length_der 7 20 43 asn1.c
  _gss_copy_oid 7 14 25 misc.c
  _gss_krb5_checksum_pack 6 25 124 krb5/checksum.c
  _gss_inquire_mechs_for_name3 6 17 30 name.c
  gss_export_name 6 16 33 name.c
  gss_inquire_cred 6 16 36 cred.c
  gss_inquire_mechs_for_name 6 15 30 name.c
  _gss_asn1_length_der 6 15 32 asn1.c
  gss_test_oid_set_member 6 14 28 misc.c
  gss_inquire_mech_for_saslname 6 13 27 saslname.c
  gss_inquire_names_for_mech 5 17 29 name.c
  gss_release_oid_set 5 14 20 misc.c
  gss_context_time 5 11 23 context.c
  gss_get_mic 5 11 26 msg.c
  gss_krb5_delete_sec_context 5 11 21 krb5/context.c
  gss_unwrap 5 11 27 msg.c
  dup_data 5 11 21 saslname.c
  gss_wrap 5 11 28 msg.c
  gss_encapsulate_token 5 11 26 asn1.c
  gss_verify_mic 5 11 26 msg.c
  gss_krb5_context_time 5 10 23 krb5/context.c
  gss_release_name 5 10 20 name.c
  _gss_encapsulate_token_prefix 4 25 39 asn1.c
  gss_krb5_export_name 4 20 32 krb5/name.c
  _gss_inquire_mechs_for_name1 4 12 22 name.c
  _gss_inquire_mechs_for_name2 4 11 22 name.c
  gss_indicate_mechs 4 11 20 misc.c
  _gss_indicate_mechs1 4 11 18 meta.c
  gss_create_empty_oid_set 4 10 18 misc.c
  gss_oid_equal 4 1 8 oid.c
  gss_krb5_release_cred 3 9 16 krb5/cred.c
  gss_krb5_tktlifetime 3 8 16 krb5/utils.c
  _gss_find_mech_no_default 3 7 11 meta.c
  gss_canonicalize_name 3 7 18 name.c
  gss_release_buffer 3 7 15 misc.c
  _gss_find_mech 3 4 12 meta.c
  gss_check_version 3 3 8 version.c
  gss_krb5_inquire_cred_by_mech 2 5 19 krb5/cred.c
  gss_userok 2 1 7 ext.c
  pack_uint32 1 4 8 krb5/checksum.c
  gss_process_context_token 1 1 7 context.c
  gss_unseal 1 1 11 obsolete.c
  gss_seal 1 1 12 obsolete.c
  gss_krb5_verify_mic 1 1 8 krb5/msg.c
  gss_verify 1 1 9 obsolete.c
  gss_krb5_get_mic 1 1 9 krb5/msg.c
  gss_add_cred 1 1 14 cred.c
  gss_sign 1 1 9 obsolete.c
  gss_krb5_inquire_cred 1 1 11 krb5/cred.c
  gss_import_sec_context 1 1 7 context.c
  gss_export_sec_context 1 1 7 context.c
  gss_wrap_size_limit 1 1 9 context.c
  gss_inquire_context 1 1 11 context.c

Copyright (c) 2007, 2008 Free Software Foundation, Inc. gss-1.0.3/doc/cyclo/Makefile.am0000664000000000000000000000253312415506237013122 00000000000000## Process this file with automake to produce Makefile.in # Copyright (C) 2008-2014 Simon Josefsson # # This file is part of the Generic Security Service (GSS). # # GSS 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. # # GSS 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 GSS; if not, see http://www.gnu.org/licenses or write to # the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, # Boston, MA 02110-1301, USA. EXTRA_DIST = cyclo-$(PACKAGE).html vcurl = "http://git.savannah.gnu.org/gitweb/?p=$(PACKAGE).git;a=blob;f=lib/%FILENAME%;hb=HEAD" cyclo-$(PACKAGE).html: (cd ${top_srcdir}/lib && \ $(PMCCABE) *.[ch] krb5/*.[ch] \ | sort -nr \ | LANG=C $(AWK) -f ${abs_top_srcdir}/build-aux/pmccabe2html \ -v lang=html -v name="$(PACKAGE_STRING)" \ -v vcurl=$(vcurl) \ -v url="http://www.gnu.org/software/$(PACKAGE)/" \ -v css=${abs_top_srcdir}/build-aux/pmccabe.css) \ > tmp mv tmp $@ gss-1.0.3/doc/cyclo/Makefile.in0000644000000000000000000007032612415507621013134 00000000000000# Makefile.in generated by automake 1.14.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 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) 2008-2014 Simon Josefsson # # This file is part of the Generic Security Service (GSS). # # GSS 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. # # GSS 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 GSS; if not, see http://www.gnu.org/licenses or write to # the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, # Boston, MA 02110-1301, USA. VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = doc/cyclo DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/src/gl/m4/base64.m4 \ $(top_srcdir)/src/gl/m4/errno_h.m4 \ $(top_srcdir)/src/gl/m4/error.m4 \ $(top_srcdir)/src/gl/m4/getopt.m4 \ $(top_srcdir)/src/gl/m4/gnulib-comp.m4 \ $(top_srcdir)/src/gl/m4/memchr.m4 \ $(top_srcdir)/src/gl/m4/mmap-anon.m4 \ $(top_srcdir)/src/gl/m4/msvc-inval.m4 \ $(top_srcdir)/src/gl/m4/msvc-nothrow.m4 \ $(top_srcdir)/src/gl/m4/nocrash.m4 \ $(top_srcdir)/src/gl/m4/off_t.m4 \ $(top_srcdir)/src/gl/m4/ssize_t.m4 \ $(top_srcdir)/src/gl/m4/stdarg.m4 \ $(top_srcdir)/src/gl/m4/stdbool.m4 \ $(top_srcdir)/src/gl/m4/stdio_h.m4 \ $(top_srcdir)/src/gl/m4/strerror.m4 \ $(top_srcdir)/src/gl/m4/sys_socket_h.m4 \ $(top_srcdir)/src/gl/m4/sys_types_h.m4 \ $(top_srcdir)/src/gl/m4/unistd_h.m4 \ $(top_srcdir)/src/gl/m4/version-etc.m4 \ $(top_srcdir)/lib/gl/m4/absolute-header.m4 \ $(top_srcdir)/lib/gl/m4/extensions.m4 \ $(top_srcdir)/lib/gl/m4/gnulib-comp.m4 \ $(top_srcdir)/lib/gl/m4/include_next.m4 \ $(top_srcdir)/lib/gl/m4/ld-output-def.m4 \ $(top_srcdir)/lib/gl/m4/stddef_h.m4 \ $(top_srcdir)/lib/gl/m4/string_h.m4 \ $(top_srcdir)/lib/gl/m4/strverscmp.m4 \ $(top_srcdir)/lib/gl/m4/warn-on-use.m4 \ $(top_srcdir)/gl/m4/00gnulib.m4 \ $(top_srcdir)/gl/m4/autobuild.m4 \ $(top_srcdir)/gl/m4/gnulib-common.m4 \ $(top_srcdir)/gl/m4/gnulib-comp.m4 \ $(top_srcdir)/gl/m4/ld-version-script.m4 \ $(top_srcdir)/gl/m4/manywarnings.m4 \ $(top_srcdir)/gl/m4/valgrind-tests.m4 \ $(top_srcdir)/gl/m4/warnings.m4 \ $(top_srcdir)/m4/extern-inline.m4 $(top_srcdir)/m4/gettext.m4 \ $(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \ $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.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/nls.m4 \ $(top_srcdir)/m4/pkg.m4 $(top_srcdir)/m4/po-suffix.m4 \ $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \ $(top_srcdir)/m4/wchar_t.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_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ ARFLAGS = @ARFLAGS@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CONFIG_INCLUDE = @CONFIG_INCLUDE@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DLL_VERSION = @DLL_VERSION@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EMULTIHOP_HIDDEN = @EMULTIHOP_HIDDEN@ EMULTIHOP_VALUE = @EMULTIHOP_VALUE@ ENOLINK_HIDDEN = @ENOLINK_HIDDEN@ ENOLINK_VALUE = @ENOLINK_VALUE@ EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@ EOVERFLOW_VALUE = @EOVERFLOW_VALUE@ ERRNO_H = @ERRNO_H@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GETOPT_H = @GETOPT_H@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GNULIB_CHDIR = @GNULIB_CHDIR@ GNULIB_CHOWN = @GNULIB_CHOWN@ GNULIB_CLOSE = @GNULIB_CLOSE@ GNULIB_DPRINTF = @GNULIB_DPRINTF@ GNULIB_DUP = @GNULIB_DUP@ GNULIB_DUP2 = @GNULIB_DUP2@ GNULIB_DUP3 = @GNULIB_DUP3@ GNULIB_ENVIRON = @GNULIB_ENVIRON@ GNULIB_EUIDACCESS = @GNULIB_EUIDACCESS@ GNULIB_FACCESSAT = @GNULIB_FACCESSAT@ GNULIB_FCHDIR = @GNULIB_FCHDIR@ GNULIB_FCHOWNAT = @GNULIB_FCHOWNAT@ GNULIB_FCLOSE = @GNULIB_FCLOSE@ GNULIB_FDATASYNC = @GNULIB_FDATASYNC@ GNULIB_FDOPEN = @GNULIB_FDOPEN@ GNULIB_FFLUSH = @GNULIB_FFLUSH@ GNULIB_FFSL = @GNULIB_FFSL@ GNULIB_FFSLL = @GNULIB_FFSLL@ GNULIB_FGETC = @GNULIB_FGETC@ GNULIB_FGETS = @GNULIB_FGETS@ GNULIB_FOPEN = @GNULIB_FOPEN@ GNULIB_FPRINTF = @GNULIB_FPRINTF@ GNULIB_FPRINTF_POSIX = @GNULIB_FPRINTF_POSIX@ GNULIB_FPURGE = @GNULIB_FPURGE@ GNULIB_FPUTC = @GNULIB_FPUTC@ GNULIB_FPUTS = @GNULIB_FPUTS@ GNULIB_FREAD = @GNULIB_FREAD@ GNULIB_FREOPEN = @GNULIB_FREOPEN@ GNULIB_FSCANF = @GNULIB_FSCANF@ GNULIB_FSEEK = @GNULIB_FSEEK@ GNULIB_FSEEKO = @GNULIB_FSEEKO@ GNULIB_FSYNC = @GNULIB_FSYNC@ GNULIB_FTELL = @GNULIB_FTELL@ GNULIB_FTELLO = @GNULIB_FTELLO@ GNULIB_FTRUNCATE = @GNULIB_FTRUNCATE@ GNULIB_FWRITE = @GNULIB_FWRITE@ GNULIB_GETC = @GNULIB_GETC@ GNULIB_GETCHAR = @GNULIB_GETCHAR@ GNULIB_GETCWD = @GNULIB_GETCWD@ GNULIB_GETDELIM = @GNULIB_GETDELIM@ GNULIB_GETDOMAINNAME = @GNULIB_GETDOMAINNAME@ GNULIB_GETDTABLESIZE = @GNULIB_GETDTABLESIZE@ GNULIB_GETGROUPS = @GNULIB_GETGROUPS@ GNULIB_GETHOSTNAME = @GNULIB_GETHOSTNAME@ GNULIB_GETLINE = @GNULIB_GETLINE@ GNULIB_GETLOGIN = @GNULIB_GETLOGIN@ GNULIB_GETLOGIN_R = @GNULIB_GETLOGIN_R@ GNULIB_GETPAGESIZE = @GNULIB_GETPAGESIZE@ GNULIB_GETUSERSHELL = @GNULIB_GETUSERSHELL@ GNULIB_GL_SRCGL_UNISTD_H_GETOPT = @GNULIB_GL_SRCGL_UNISTD_H_GETOPT@ GNULIB_GROUP_MEMBER = @GNULIB_GROUP_MEMBER@ GNULIB_ISATTY = @GNULIB_ISATTY@ GNULIB_LCHOWN = @GNULIB_LCHOWN@ GNULIB_LINK = @GNULIB_LINK@ GNULIB_LINKAT = @GNULIB_LINKAT@ GNULIB_LSEEK = @GNULIB_LSEEK@ GNULIB_MBSCASECMP = @GNULIB_MBSCASECMP@ GNULIB_MBSCASESTR = @GNULIB_MBSCASESTR@ GNULIB_MBSCHR = @GNULIB_MBSCHR@ GNULIB_MBSCSPN = @GNULIB_MBSCSPN@ GNULIB_MBSLEN = @GNULIB_MBSLEN@ GNULIB_MBSNCASECMP = @GNULIB_MBSNCASECMP@ GNULIB_MBSNLEN = @GNULIB_MBSNLEN@ GNULIB_MBSPBRK = @GNULIB_MBSPBRK@ GNULIB_MBSPCASECMP = @GNULIB_MBSPCASECMP@ GNULIB_MBSRCHR = @GNULIB_MBSRCHR@ GNULIB_MBSSEP = @GNULIB_MBSSEP@ GNULIB_MBSSPN = @GNULIB_MBSSPN@ GNULIB_MBSSTR = @GNULIB_MBSSTR@ GNULIB_MBSTOK_R = @GNULIB_MBSTOK_R@ GNULIB_MEMCHR = @GNULIB_MEMCHR@ GNULIB_MEMMEM = @GNULIB_MEMMEM@ GNULIB_MEMPCPY = @GNULIB_MEMPCPY@ GNULIB_MEMRCHR = @GNULIB_MEMRCHR@ GNULIB_OBSTACK_PRINTF = @GNULIB_OBSTACK_PRINTF@ GNULIB_OBSTACK_PRINTF_POSIX = @GNULIB_OBSTACK_PRINTF_POSIX@ GNULIB_PCLOSE = @GNULIB_PCLOSE@ GNULIB_PERROR = @GNULIB_PERROR@ GNULIB_PIPE = @GNULIB_PIPE@ GNULIB_PIPE2 = @GNULIB_PIPE2@ GNULIB_POPEN = @GNULIB_POPEN@ GNULIB_PREAD = @GNULIB_PREAD@ GNULIB_PRINTF = @GNULIB_PRINTF@ GNULIB_PRINTF_POSIX = @GNULIB_PRINTF_POSIX@ GNULIB_PUTC = @GNULIB_PUTC@ GNULIB_PUTCHAR = @GNULIB_PUTCHAR@ GNULIB_PUTS = @GNULIB_PUTS@ GNULIB_PWRITE = @GNULIB_PWRITE@ GNULIB_RAWMEMCHR = @GNULIB_RAWMEMCHR@ GNULIB_READ = @GNULIB_READ@ GNULIB_READLINK = @GNULIB_READLINK@ GNULIB_READLINKAT = @GNULIB_READLINKAT@ GNULIB_REMOVE = @GNULIB_REMOVE@ GNULIB_RENAME = @GNULIB_RENAME@ GNULIB_RENAMEAT = @GNULIB_RENAMEAT@ GNULIB_RMDIR = @GNULIB_RMDIR@ GNULIB_SCANF = @GNULIB_SCANF@ GNULIB_SETHOSTNAME = @GNULIB_SETHOSTNAME@ GNULIB_SLEEP = @GNULIB_SLEEP@ GNULIB_SNPRINTF = @GNULIB_SNPRINTF@ GNULIB_SPRINTF_POSIX = @GNULIB_SPRINTF_POSIX@ GNULIB_STDIO_H_NONBLOCKING = @GNULIB_STDIO_H_NONBLOCKING@ GNULIB_STDIO_H_SIGPIPE = @GNULIB_STDIO_H_SIGPIPE@ GNULIB_STPCPY = @GNULIB_STPCPY@ GNULIB_STPNCPY = @GNULIB_STPNCPY@ GNULIB_STRCASESTR = @GNULIB_STRCASESTR@ GNULIB_STRCHRNUL = @GNULIB_STRCHRNUL@ GNULIB_STRDUP = @GNULIB_STRDUP@ GNULIB_STRERROR = @GNULIB_STRERROR@ GNULIB_STRERROR_R = @GNULIB_STRERROR_R@ GNULIB_STRNCAT = @GNULIB_STRNCAT@ GNULIB_STRNDUP = @GNULIB_STRNDUP@ GNULIB_STRNLEN = @GNULIB_STRNLEN@ GNULIB_STRPBRK = @GNULIB_STRPBRK@ GNULIB_STRSEP = @GNULIB_STRSEP@ GNULIB_STRSIGNAL = @GNULIB_STRSIGNAL@ GNULIB_STRSTR = @GNULIB_STRSTR@ GNULIB_STRTOK_R = @GNULIB_STRTOK_R@ GNULIB_STRVERSCMP = @GNULIB_STRVERSCMP@ GNULIB_SYMLINK = @GNULIB_SYMLINK@ GNULIB_SYMLINKAT = @GNULIB_SYMLINKAT@ GNULIB_TMPFILE = @GNULIB_TMPFILE@ GNULIB_TTYNAME_R = @GNULIB_TTYNAME_R@ GNULIB_UNISTD_H_NONBLOCKING = @GNULIB_UNISTD_H_NONBLOCKING@ GNULIB_UNISTD_H_SIGPIPE = @GNULIB_UNISTD_H_SIGPIPE@ GNULIB_UNLINK = @GNULIB_UNLINK@ GNULIB_UNLINKAT = @GNULIB_UNLINKAT@ GNULIB_USLEEP = @GNULIB_USLEEP@ GNULIB_VASPRINTF = @GNULIB_VASPRINTF@ GNULIB_VDPRINTF = @GNULIB_VDPRINTF@ GNULIB_VFPRINTF = @GNULIB_VFPRINTF@ GNULIB_VFPRINTF_POSIX = @GNULIB_VFPRINTF_POSIX@ GNULIB_VFSCANF = @GNULIB_VFSCANF@ GNULIB_VPRINTF = @GNULIB_VPRINTF@ GNULIB_VPRINTF_POSIX = @GNULIB_VPRINTF_POSIX@ GNULIB_VSCANF = @GNULIB_VSCANF@ GNULIB_VSNPRINTF = @GNULIB_VSNPRINTF@ GNULIB_VSPRINTF_POSIX = @GNULIB_VSPRINTF_POSIX@ GNULIB_WRITE = @GNULIB_WRITE@ GREP = @GREP@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ HAVE_CHOWN = @HAVE_CHOWN@ HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@ HAVE_DECL_FCHDIR = @HAVE_DECL_FCHDIR@ HAVE_DECL_FDATASYNC = @HAVE_DECL_FDATASYNC@ HAVE_DECL_FPURGE = @HAVE_DECL_FPURGE@ HAVE_DECL_FSEEKO = @HAVE_DECL_FSEEKO@ HAVE_DECL_FTELLO = @HAVE_DECL_FTELLO@ HAVE_DECL_GETDELIM = @HAVE_DECL_GETDELIM@ HAVE_DECL_GETDOMAINNAME = @HAVE_DECL_GETDOMAINNAME@ HAVE_DECL_GETLINE = @HAVE_DECL_GETLINE@ HAVE_DECL_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_OBSTACK_PRINTF = @HAVE_DECL_OBSTACK_PRINTF@ HAVE_DECL_SETHOSTNAME = @HAVE_DECL_SETHOSTNAME@ HAVE_DECL_SNPRINTF = @HAVE_DECL_SNPRINTF@ HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@ HAVE_DECL_STRERROR_R = @HAVE_DECL_STRERROR_R@ HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@ HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@ HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@ HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@ HAVE_DECL_TTYNAME_R = @HAVE_DECL_TTYNAME_R@ HAVE_DECL_VSNPRINTF = @HAVE_DECL_VSNPRINTF@ HAVE_DPRINTF = @HAVE_DPRINTF@ HAVE_DUP2 = @HAVE_DUP2@ HAVE_DUP3 = @HAVE_DUP3@ HAVE_EUIDACCESS = @HAVE_EUIDACCESS@ HAVE_FACCESSAT = @HAVE_FACCESSAT@ HAVE_FCHDIR = @HAVE_FCHDIR@ HAVE_FCHOWNAT = @HAVE_FCHOWNAT@ HAVE_FDATASYNC = @HAVE_FDATASYNC@ HAVE_FFSL = @HAVE_FFSL@ HAVE_FFSLL = @HAVE_FFSLL@ HAVE_FSEEKO = @HAVE_FSEEKO@ HAVE_FSYNC = @HAVE_FSYNC@ HAVE_FTELLO = @HAVE_FTELLO@ HAVE_FTRUNCATE = @HAVE_FTRUNCATE@ 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_GROUP_MEMBER = @HAVE_GROUP_MEMBER@ HAVE_LCHOWN = @HAVE_LCHOWN@ HAVE_LIBSHISHI = @HAVE_LIBSHISHI@ HAVE_LINK = @HAVE_LINK@ HAVE_LINKAT = @HAVE_LINKAT@ HAVE_MBSLEN = @HAVE_MBSLEN@ HAVE_MEMCHR = @HAVE_MEMCHR@ HAVE_MEMPCPY = @HAVE_MEMPCPY@ HAVE_MSVC_INVALID_PARAMETER_HANDLER = @HAVE_MSVC_INVALID_PARAMETER_HANDLER@ HAVE_OS_H = @HAVE_OS_H@ HAVE_PCLOSE = @HAVE_PCLOSE@ HAVE_PIPE = @HAVE_PIPE@ HAVE_PIPE2 = @HAVE_PIPE2@ HAVE_POPEN = @HAVE_POPEN@ HAVE_PREAD = @HAVE_PREAD@ HAVE_PWRITE = @HAVE_PWRITE@ HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@ HAVE_READLINK = @HAVE_READLINK@ HAVE_READLINKAT = @HAVE_READLINKAT@ HAVE_RENAMEAT = @HAVE_RENAMEAT@ HAVE_SETHOSTNAME = @HAVE_SETHOSTNAME@ HAVE_SLEEP = @HAVE_SLEEP@ 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_STRVERSCMP = @HAVE_STRVERSCMP@ HAVE_SYMLINK = @HAVE_SYMLINK@ HAVE_SYMLINKAT = @HAVE_SYMLINKAT@ HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@ HAVE_UNISTD_H = @HAVE_UNISTD_H@ HAVE_UNLINKAT = @HAVE_UNLINKAT@ HAVE_USLEEP = @HAVE_USLEEP@ HAVE_VASPRINTF = @HAVE_VASPRINTF@ HAVE_VDPRINTF = @HAVE_VDPRINTF@ HAVE_WCHAR_T = @HAVE_WCHAR_T@ HAVE_WINSOCK2_H = @HAVE_WINSOCK2_H@ HAVE__BOOL = @HAVE__BOOL@ HELP2MAN = @HELP2MAN@ HTML_DIR = @HTML_DIR@ INCLUDE_GSS_KRB5 = @INCLUDE_GSS_KRB5@ INCLUDE_GSS_KRB5_EXT = @INCLUDE_GSS_KRB5_EXT@ 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@ INTLLIBS = @INTLLIBS@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBSHISHI = @LIBSHISHI@ LIBSHISHI_PREFIX = @LIBSHISHI_PREFIX@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBOBJS = @LTLIBOBJS@ LTLIBSHISHI = @LTLIBSHISHI@ LT_AGE = @LT_AGE@ LT_CURRENT = @LT_CURRENT@ LT_REVISION = @LT_REVISION@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = @NEXT_AS_FIRST_DIRECTIVE_ERRNO_H@ NEXT_AS_FIRST_DIRECTIVE_GETOPT_H = @NEXT_AS_FIRST_DIRECTIVE_GETOPT_H@ NEXT_AS_FIRST_DIRECTIVE_STDARG_H = @NEXT_AS_FIRST_DIRECTIVE_STDARG_H@ NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@ NEXT_AS_FIRST_DIRECTIVE_STDIO_H = @NEXT_AS_FIRST_DIRECTIVE_STDIO_H@ NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H@ NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@ NEXT_ERRNO_H = @NEXT_ERRNO_H@ NEXT_GETOPT_H = @NEXT_GETOPT_H@ NEXT_STDARG_H = @NEXT_STDARG_H@ NEXT_STDDEF_H = @NEXT_STDDEF_H@ NEXT_STDIO_H = @NEXT_STDIO_H@ NEXT_STRING_H = @NEXT_STRING_H@ NEXT_SYS_TYPES_H = @NEXT_SYS_TYPES_H@ NEXT_UNISTD_H = @NEXT_UNISTD_H@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ PKG_CONFIG = @PKG_CONFIG@ PMCCABE = @PMCCABE@ POSUB = @POSUB@ PO_SUFFIX = @PO_SUFFIX@ PRAGMA_COLUMNS = @PRAGMA_COLUMNS@ PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@ RANLIB = @RANLIB@ REPLACE_CHOWN = @REPLACE_CHOWN@ REPLACE_CLOSE = @REPLACE_CLOSE@ REPLACE_DPRINTF = @REPLACE_DPRINTF@ REPLACE_DUP = @REPLACE_DUP@ REPLACE_DUP2 = @REPLACE_DUP2@ REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@ REPLACE_FCLOSE = @REPLACE_FCLOSE@ REPLACE_FDOPEN = @REPLACE_FDOPEN@ REPLACE_FFLUSH = @REPLACE_FFLUSH@ REPLACE_FOPEN = @REPLACE_FOPEN@ REPLACE_FPRINTF = @REPLACE_FPRINTF@ REPLACE_FPURGE = @REPLACE_FPURGE@ REPLACE_FREOPEN = @REPLACE_FREOPEN@ REPLACE_FSEEK = @REPLACE_FSEEK@ REPLACE_FSEEKO = @REPLACE_FSEEKO@ REPLACE_FTELL = @REPLACE_FTELL@ REPLACE_FTELLO = @REPLACE_FTELLO@ REPLACE_FTRUNCATE = @REPLACE_FTRUNCATE@ REPLACE_GETCWD = @REPLACE_GETCWD@ REPLACE_GETDELIM = @REPLACE_GETDELIM@ REPLACE_GETDOMAINNAME = @REPLACE_GETDOMAINNAME@ REPLACE_GETDTABLESIZE = @REPLACE_GETDTABLESIZE@ REPLACE_GETGROUPS = @REPLACE_GETGROUPS@ REPLACE_GETLINE = @REPLACE_GETLINE@ REPLACE_GETLOGIN_R = @REPLACE_GETLOGIN_R@ REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@ REPLACE_ISATTY = @REPLACE_ISATTY@ REPLACE_LCHOWN = @REPLACE_LCHOWN@ REPLACE_LINK = @REPLACE_LINK@ REPLACE_LINKAT = @REPLACE_LINKAT@ REPLACE_LSEEK = @REPLACE_LSEEK@ REPLACE_MEMCHR = @REPLACE_MEMCHR@ REPLACE_MEMMEM = @REPLACE_MEMMEM@ REPLACE_NULL = @REPLACE_NULL@ REPLACE_OBSTACK_PRINTF = @REPLACE_OBSTACK_PRINTF@ REPLACE_PERROR = @REPLACE_PERROR@ REPLACE_POPEN = @REPLACE_POPEN@ REPLACE_PREAD = @REPLACE_PREAD@ REPLACE_PRINTF = @REPLACE_PRINTF@ REPLACE_PWRITE = @REPLACE_PWRITE@ REPLACE_READ = @REPLACE_READ@ REPLACE_READLINK = @REPLACE_READLINK@ REPLACE_REMOVE = @REPLACE_REMOVE@ REPLACE_RENAME = @REPLACE_RENAME@ REPLACE_RENAMEAT = @REPLACE_RENAMEAT@ REPLACE_RMDIR = @REPLACE_RMDIR@ REPLACE_SLEEP = @REPLACE_SLEEP@ REPLACE_SNPRINTF = @REPLACE_SNPRINTF@ REPLACE_SPRINTF = @REPLACE_SPRINTF@ REPLACE_STDIO_READ_FUNCS = @REPLACE_STDIO_READ_FUNCS@ REPLACE_STDIO_WRITE_FUNCS = @REPLACE_STDIO_WRITE_FUNCS@ REPLACE_STPNCPY = @REPLACE_STPNCPY@ REPLACE_STRCASESTR = @REPLACE_STRCASESTR@ REPLACE_STRCHRNUL = @REPLACE_STRCHRNUL@ REPLACE_STRDUP = @REPLACE_STRDUP@ REPLACE_STRERROR = @REPLACE_STRERROR@ REPLACE_STRERROR_R = @REPLACE_STRERROR_R@ REPLACE_STRNCAT = @REPLACE_STRNCAT@ REPLACE_STRNDUP = @REPLACE_STRNDUP@ REPLACE_STRNLEN = @REPLACE_STRNLEN@ REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@ REPLACE_STRSTR = @REPLACE_STRSTR@ REPLACE_STRTOK_R = @REPLACE_STRTOK_R@ REPLACE_SYMLINK = @REPLACE_SYMLINK@ REPLACE_TMPFILE = @REPLACE_TMPFILE@ REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@ REPLACE_UNLINK = @REPLACE_UNLINK@ REPLACE_UNLINKAT = @REPLACE_UNLINKAT@ REPLACE_USLEEP = @REPLACE_USLEEP@ REPLACE_VASPRINTF = @REPLACE_VASPRINTF@ REPLACE_VDPRINTF = @REPLACE_VDPRINTF@ REPLACE_VFPRINTF = @REPLACE_VFPRINTF@ REPLACE_VPRINTF = @REPLACE_VPRINTF@ REPLACE_VSNPRINTF = @REPLACE_VSNPRINTF@ REPLACE_VSPRINTF = @REPLACE_VSPRINTF@ REPLACE_WRITE = @REPLACE_WRITE@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STDARG_H = @STDARG_H@ STDBOOL_H = @STDBOOL_H@ STDDEF_H = @STDDEF_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@ USE_NLS = @USE_NLS@ VALGRIND = @VALGRIND@ VERSION = @VERSION@ VERSION_MAJOR = @VERSION_MAJOR@ VERSION_MINOR = @VERSION_MINOR@ VERSION_NUMBER = @VERSION_NUMBER@ VERSION_PATCH = @VERSION_PATCH@ WARN_CFLAGS = @WARN_CFLAGS@ WERROR_CFLAGS = @WERROR_CFLAGS@ WINDOWS_64_BIT_OFF_T = @WINDOWS_64_BIT_OFF_T@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gl_LIBOBJS = @gl_LIBOBJS@ gl_LTLIBOBJS = @gl_LTLIBOBJS@ gltests_LIBOBJS = @gltests_LIBOBJS@ gltests_LTLIBOBJS = @gltests_LTLIBOBJS@ gltests_WITNESS = @gltests_WITNESS@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ libgl_LIBOBJS = @libgl_LIBOBJS@ libgl_LTLIBOBJS = @libgl_LTLIBOBJS@ libgltests_LIBOBJS = @libgltests_LIBOBJS@ libgltests_LTLIBOBJS = @libgltests_LTLIBOBJS@ libgltests_WITNESS = @libgltests_WITNESS@ localedir = @localedir@ localstatedir = @localstatedir@ 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@ srcgl_LIBOBJS = @srcgl_LIBOBJS@ srcgl_LTLIBOBJS = @srcgl_LTLIBOBJS@ srcgltests_LIBOBJS = @srcgltests_LIBOBJS@ srcgltests_LTLIBOBJS = @srcgltests_LTLIBOBJS@ srcgltests_WITNESS = @srcgltests_WITNESS@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ EXTRA_DIST = cyclo-$(PACKAGE).html vcurl = "http://git.savannah.gnu.org/gitweb/?p=$(PACKAGE).git;a=blob;f=lib/%FILENAME%;hb=HEAD" all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu doc/cyclo/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu doc/cyclo/Makefile .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: ctags CTAGS: cscope cscopelist: distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ cscopelist-am ctags-am distclean distclean-generic \ distclean-libtool distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-pdf install-pdf-am install-ps install-ps-am \ install-strip installcheck installcheck-am installdirs \ maintainer-clean maintainer-clean-generic mostlyclean \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags-am uninstall uninstall-am cyclo-$(PACKAGE).html: (cd ${top_srcdir}/lib && \ $(PMCCABE) *.[ch] krb5/*.[ch] \ | sort -nr \ | LANG=C $(AWK) -f ${abs_top_srcdir}/build-aux/pmccabe2html \ -v lang=html -v name="$(PACKAGE_STRING)" \ -v vcurl=$(vcurl) \ -v url="http://www.gnu.org/software/$(PACKAGE)/" \ -v css=${abs_top_srcdir}/build-aux/pmccabe.css) \ > tmp mv tmp $@ # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gss-1.0.3/doc/gss.info0000644000000000000000000062450112415507731011431 00000000000000This is gss.info, produced by makeinfo version 5.2 from gss.texi. This manual is last updated 9 October 2014 for version 1.0.3 of GNU GSS. Copyright (C) 2003-2014 Simon Josefsson. 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 GNU Libraries START-INFO-DIR-ENTRY * gss: (gss). Generic Security Service API Library END-INFO-DIR-ENTRY  File: gss.info, Node: Top, Next: Introduction, Up: (dir) GNU Generic Security Service Library ************************************ This manual is last updated 9 October 2014 for version 1.0.3 of GNU GSS. Copyright (C) 2003-2014 Simon Josefsson. 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:: How to use this manual. * Preparation:: What you should do before using the library. * Standard GSS API:: Reference documentation for the Standard API. * Extended GSS API:: Non-standard functions. * Invoking gss:: Command line interface to the library. * Acknowledgements:: Whom to blame. Appendices * Criticism of GSS:: Why you maybe shouldn't use GSS. * Copying Information:: How you can copy and share GSS. Indices * Concept Index:: Index of concepts and programs. * API Index:: Index of functions, variables and data types.  File: gss.info, Node: Introduction, Next: Preparation, Prev: Top, Up: Top 1 Introduction ************** GSS is an implementation of the Generic Security Service Application Program Interface (GSS-API). GSS-API is used by network servers to provide security services, e.g., to authenticate SMTP/IMAP clients against SMTP/IMAP servers. GSS consists of a library and a manual. GSS is developed for the GNU/Linux system, but runs on over 20 platforms including most major Unix platforms and Windows, and many kind of devices including iPAQ handhelds and S/390 mainframes. GSS is a GNU project, and is licensed under the GNU General Public License version 3 or later. * Menu: * Getting Started:: * Features:: * GSS-API Overview:: * Supported Platforms:: * Commercial Support:: * Downloading and Installing:: * Bug Reports:: * Contributing:: * Planned Features::  File: gss.info, Node: Getting Started, Next: Features, Up: Introduction 1.1 Getting Started =================== This manual documents the GSS programming interface. All functions and data types provided by the library are explained. The reader is assumed to possess basic familiarity with GSS-API and network programming in C or C++. For general GSS-API information, and some programming examples, there is a guide available online at . This manual can be used in several ways. If read from the beginning to the end, it gives a good introduction into the library and how it can be used in an application. Forward references are included where necessary. Later on, the manual can be used as a reference manual to get just the information needed about any particular interface of the library. Experienced programmers might want to start looking at the examples at the end of the manual, and then only read up those parts of the interface which are unclear.  File: gss.info, Node: Features, Next: GSS-API Overview, Prev: Getting Started, Up: Introduction 1.2 Features ============ GSS might have a couple of advantages over other libraries doing a similar job. It's Free Software Anybody can use, modify, and redistribute it under the terms of the GNU General Public License version 3 or later. It's thread-safe No global variables are used and multiple library handles and session handles may be used in parallell. It's internationalized It handles non-ASCII names and user visible strings used in the library (e.g., error messages) can be translated into the users' language. It's portable It should work on all Unix like operating systems, including Windows.  File: gss.info, Node: GSS-API Overview, Next: Supported Platforms, Prev: Features, Up: Introduction 1.3 GSS-API Overview ==================== This section describes GSS-API from a protocol point of view. The Generic Security Service Application Programming Interface provides security services to calling applications. It allows a communicating application to authenticate the user associated with another application, to delegate rights to another application, and to apply security services such as confidentiality and integrity on a per-message basis. There are four stages to using the GSS-API: 1. The application acquires a set of credentials with which it may prove its identity to other processes. The application's credentials vouch for its global identity, which may or may not be related to any local username under which it may be running. 2. A pair of communicating applications establish a joint security context using their credentials. The security context is a pair of GSS-API data structures that contain shared state information, which is required in order that per-message security services may be provided. Examples of state that might be shared between applications as part of a security context are cryptographic keys, and message sequence numbers. As part of the establishment of a security context, the context initiator is authenticated to the responder, and may require that the responder is authenticated in turn. The initiator may optionally give the responder the right to initiate further security contexts, acting as an agent or delegate of the initiator. This transfer of rights is termed delegation, and is achieved by creating a set of credentials, similar to those used by the initiating application, but which may be used by the responder. To establish and maintain the shared information that makes up the security context, certain GSS-API calls will return a token data structure, which is an opaque data type that may contain cryptographically protected data. The caller of such a GSS-API routine is responsible for transferring the token to the peer application, encapsulated if necessary in an application- application protocol. On receipt of such a token, the peer application should pass it to a corresponding GSS-API routine which will decode the token and extract the information, updating the security context state information accordingly. 3. Per-message services are invoked to apply either: integrity and data origin authentication, or confidentiality, integrity and data origin authentication to application data, which are treated by GSS-API as arbitrary octet-strings. An application transmitting a message that it wishes to protect will call the appropriate GSS-API routine (gss_get_mic or gss_wrap) to apply protection, specifying the appropriate security context, and send the resulting token to the receiving application. The receiver will pass the received token (and, in the case of data protected by gss_get_mic, the accompanying message-data) to the corresponding decoding routine (gss_verify_mic or gss_unwrap) to remove the protection and validate the data. 4. At the completion of a communications session (which may extend across several transport connections), each application calls a GSS-API routine to delete the security context. Multiple contexts may also be used (either successively or simultaneously) within a single communications association, at the option of the applications.  File: gss.info, Node: Supported Platforms, Next: Commercial Support, Prev: GSS-API Overview, Up: Introduction 1.4 Supported Platforms ======================= GSS has at some point in time been tested on the following platforms. 1. Debian GNU/Linux 3.0 (Woody) GCC 2.95.4 and GNU Make. This is the main development platform. 'alphaev67-unknown-linux-gnu', 'alphaev6-unknown-linux-gnu', 'arm-unknown-linux-gnu', 'hppa-unknown-linux-gnu', 'hppa64-unknown-linux-gnu', 'i686-pc-linux-gnu', 'ia64-unknown-linux-gnu', 'm68k-unknown-linux-gnu', 'mips-unknown-linux-gnu', 'mipsel-unknown-linux-gnu', 'powerpc-unknown-linux-gnu', 's390-ibm-linux-gnu', 'sparc-unknown-linux-gnu'. 2. Debian GNU/Linux 2.1 GCC 2.95.1 and GNU Make. 'armv4l-unknown-linux-gnu'. 3. Tru64 UNIX Tru64 UNIX C compiler and Tru64 Make. 'alphaev67-dec-osf5.1', 'alphaev68-dec-osf5.1'. 4. SuSE Linux 7.1 GCC 2.96 and GNU Make. 'alphaev6-unknown-linux-gnu', 'alphaev67-unknown-linux-gnu'. 5. SuSE Linux 7.2a GCC 3.0 and GNU Make. 'ia64-unknown-linux-gnu'. 6. RedHat Linux 7.2 GCC 2.96 and GNU Make. 'alphaev6-unknown-linux-gnu', 'alphaev67-unknown-linux-gnu', 'ia64-unknown-linux-gnu'. 7. RedHat Linux 8.0 GCC 3.2 and GNU Make. 'i686-pc-linux-gnu'. 8. RedHat Advanced Server 2.1 GCC 2.96 and GNU Make. 'i686-pc-linux-gnu'. 9. Slackware Linux 8.0.01 GCC 2.95.3 and GNU Make. 'i686-pc-linux-gnu'. 10. Mandrake Linux 9.0 GCC 3.2 and GNU Make. 'i686-pc-linux-gnu'. 11. IRIX 6.5 MIPS C compiler, IRIX Make. 'mips-sgi-irix6.5'. 12. AIX 4.3.2 IBM C for AIX compiler, AIX Make. 'rs6000-ibm-aix4.3.2.0'. 13. Microsoft Windows 2000 (Cygwin) GCC 3.2, GNU make. 'i686-pc-cygwin'. 14. HP-UX 11 HP-UX C compiler and HP Make. 'ia64-hp-hpux11.22', 'hppa2.0w-hp-hpux11.11'. 15. SUN Solaris 2.8 Sun WorkShop Compiler C 6.0 and SUN Make. 'sparc-sun-solaris2.8'. 16. NetBSD 1.6 GCC 2.95.3 and GNU Make. 'alpha-unknown-netbsd1.6', 'i386-unknown-netbsdelf1.6'. 17. OpenBSD 3.1 and 3.2 GCC 2.95.3 and GNU Make. 'alpha-unknown-openbsd3.1', 'i386-unknown-openbsd3.1'. 18. FreeBSD 4.7 GCC 2.95.4 and GNU Make. 'alpha-unknown-freebsd4.7', 'i386-unknown-freebsd4.7'. 19. Cross compiled to uClinux/uClibc on Motorola Coldfire. GCC 3.4 and GNU Make 'm68k-uclinux-elf'. If you use GSS on, or port GSS to, a new platform please report it to the author.  File: gss.info, Node: Commercial Support, Next: Downloading and Installing, Prev: Supported Platforms, Up: Introduction 1.5 Commercial Support ====================== Commercial support is available for users of GNU GSS. The kind of support that can be purchased may include: * Implement new features. Such as a new GSS-API mechanism. * Port GSS to new platforms. This could include porting to an embedded platforms that may need memory or size optimization. * Integrating GSS as a security environment in your existing project. * System design of components related to GSS-API. If you are interested, please write to: Simon Josefsson Datakonsult AB Hagagatan 24 113 47 Stockholm Sweden E-mail: simon@josefsson.org If your company provides support related to GNU GSS and would like to be mentioned here, contact the author (*note Bug Reports::).  File: gss.info, Node: Downloading and Installing, Next: Bug Reports, Prev: Commercial Support, Up: Introduction 1.6 Downloading and Installing ============================== The package can be downloaded from several places, including: The latest version is stored in a file, e.g., 'gss-1.0.3.tar.gz' where the '1.0.3' indicate the highest version number. The package is then extracted, configured and built like many other packages that use Autoconf. For detailed information on configuring and building it, refer to the 'INSTALL' file that is part of the distribution archive. Here is an example terminal session that downloads, configures, builds and installs the package. You will need a few basic tools, such as 'sh', 'make' and 'cc'. $ wget -q ftp://ftp.gnu.org/gnu/gss/gss-1.0.3.tar.gz $ tar xfz gss-1.0.3.tar.gz $ cd gss-1.0.3/ $ ./configure ... $ make ... $ make install ... After that GSS should be properly installed and ready for use.  File: gss.info, Node: Bug Reports, Next: Contributing, Prev: Downloading and Installing, Up: Introduction 1.7 Bug Reports =============== If you think you have found a bug in GSS, please investigate it and report it. * Please make sure that the bug is really in GSS, and preferably also check that it hasn't already been fixed in the latest version. * You have to send us a test case that makes it possible for us to reproduce the bug. * You also have to explain what is wrong; if you get a crash, or if the results printed are not good and in that case, in what way. Make sure that the bug report includes all information you would need to fix this kind of bug for someone else. Please make an effort to produce a self-contained report, with something definite that can be tested or debugged. Vague queries or piecemeal messages are difficult to act on and don't help the development effort. If your bug report is good, we will do our best to help you to get a corrected version of the software; if the bug report is poor, we won't do anything about it (apart from asking you to send better bug reports). If you think something in this manual is unclear, or downright incorrect, or if the language needs to be improved, please also send a note. Send your bug report to: 'bug-gss@gnu.org'  File: gss.info, Node: Contributing, Next: Planned Features, Prev: Bug Reports, Up: Introduction 1.8 Contributing ================ If you want to submit a patch for inclusion - from solve a typo you discovered, up to adding support for a new feature - you should submit it as a bug report (*note Bug Reports::). There are some things that you can do to increase the chances for it to be included in the official package. Unless your patch is very small (say, under 10 lines) we require that you assign the copyright of your work to the Free Software Foundation. This is to protect the freedom of the project. If you have not already signed papers, we will send you the necessary information when you submit your contribution. For contributions that doesn't consist of actual programming code, the only guidelines are common sense. Use it. For code contributions, a number of style guides will help you: * Coding Style. Follow the GNU Standards document (*note GNU Coding Standards: (standards)top.). If you normally code using another coding standard, there is no problem, but you should use 'indent' to reformat the code (*note GNU Indent: (indent)top.) before submitting your work. * Use the unified diff format 'diff -u'. * Return errors. No reason whatsoever should abort the execution of the library. Even memory allocation errors, e.g. when malloc return NULL, should work although result in an error code. * Design with thread safety in mind. Don't use global variables. Don't even write to per-handle global variables unless the documented behaviour of the function you write is to write to the per-handle global variable. * Avoid using the C math library. It causes problems for embedded implementations, and in most situations it is very easy to avoid using it. * Document your functions. Use comments before each function headers, that, if properly formatted, are extracted into Texinfo manuals and GTK-DOC web pages. * Supply a ChangeLog and NEWS entries, where appropriate.  File: gss.info, Node: Planned Features, Prev: Contributing, Up: Introduction 1.9 Planned Features ==================== This is also known as the "todo list". If you like to start working on anything, please let me know so work duplication can be avoided. * Support non-blocking mode. This would be an API extension. It could work by forking a process and interface to it, or by using a user-specific daemon. E.g., h = START(accept_sec_context(...)), FINISHED(h), ret = FINISH(h), ABORT(h). * Support loadable modules via dlopen, a'la Solaris GSS. * Port to Cyclone? CCured?  File: gss.info, Node: Preparation, Next: Standard GSS API, Prev: Introduction, Up: Top 2 Preparation ************* To use GSS, you have to perform some changes to your sources and the build system. The necessary changes are small and explained in the following sections. At the end of this chapter, it is described how the library is initialized, and how the requirements of the library are verified. A faster way to find out how to adapt your application for use with GSS may be to look at the examples at the end of this manual. * Menu: * Header:: * Initialization:: * Version Check:: * Building the source:: * Out of Memory handling::  File: gss.info, Node: Header, Next: Initialization, Up: Preparation 2.1 Header ========== All standard interfaces (data types and functions) of the official GSS API are defined in the header file 'gss/api.h'. The file is taken verbatim from the RFC (after correcting a few typos) where it is known as 'gssapi.h'. However, to be able to co-exist gracefully with other GSS-API implementation, the name 'gssapi.h' was changed. The header file 'gss.h' includes 'gss/api.h', and declares a few non-standard extensions (by including 'gss/ext.h'), takes care of including header files related to all supported mechanisms (e.g., 'gss/krb5.h') and finally adds C++ namespace protection of all definitions. Therefore, including 'gss.h' in your project is recommended over 'gss/api.h'. If using 'gss.h' instead of 'gss/api.h' causes problems, it should be regarded a bug. You must include either file in all programs using the library, either directly or through some other header file, like this: #include The name space of GSS is 'gss_*' for function names, 'gss_*' for data types and 'GSS_*' for other symbols. In addition the same name prefixes with one prepended underscore are reserved for internal use and should never be used by an application. Each supported GSS mechanism may want to expose mechanism specific functionality, and can do so through one or more header files under the 'gss/' directory. The Kerberos 5 mechanism uses the file 'gss/krb5.h', but again, it is included (with C++ namespace fixes) from 'gss.h'.  File: gss.info, Node: Initialization, Next: Version Check, Prev: Header, Up: Preparation 2.2 Initialization ================== GSS does not need to be initialized before it can be used. In order to take advantage of the internationalisation features in GSS, e.g. translated error messages, the application must set the current locale using 'setlocale()' before calling, e.g., 'gss_display_status()'. This is typically done in 'main()' as in the following example. #include #include ... setlocale (LC_ALL, "");  File: gss.info, Node: Version Check, Next: Building the source, Prev: Initialization, Up: Preparation 2.3 Version Check ================= It is often desirable to check that the version of GSS used is indeed one which fits all requirements. Even with binary compatibility new features may have been introduced but due to problem with the dynamic linker an old version is actually used. So you may want to check that the version is okay right after program startup. The function is called 'gss_check_version()' and is described formally in *Note Extended GSS API::. The normal way to use the function is to put something similar to the following early in your 'main()': #include ... if (!gss_check_version (GSS_VERSION)) { printf ("gss_check_version() failed:\n" "Header file incompatible with shared library.\n"); exit(EXIT_FAILURE); }  File: gss.info, Node: Building the source, Next: Out of Memory handling, Prev: Version Check, Up: Preparation 2.4 Building the source ======================= If you want to compile a source file that includes the 'gss.h' header file, you must make sure that the compiler can find it in the directory hierarchy. This is accomplished by adding the path to the directory in which the header file is located to the compilers include file search path (via the '-I' option). However, the path to the include file is determined at the time the source is configured. To solve this problem, GSS uses the external package 'pkg-config' that knows the path to the include file and other configuration options. The options that need to be added to the compiler invocation at compile time are output by the '--cflags' option to 'pkg-config gss'. The following example shows how it can be used at the command line: gcc -c foo.c `pkg-config gss --cflags` Adding the output of 'pkg-config gss --cflags' to the compilers command line will ensure that the compiler can find the 'gss.h' header file. A similar problem occurs when linking the program with the library. Again, the compiler has to find the library files. For this to work, the path to the library files has to be added to the library search path (via the '-L' option). For this, the option '--libs' to 'pkg-config gss' can be used. For convenience, this option also outputs all other options that are required to link the program with the GSS libarary (for instance, the '-lshishi' option). The example shows how to link 'foo.o' with GSS into a program 'foo'. gcc -o foo foo.o `pkg-config gss --libs` Of course you can also combine both examples to a single command by specifying both options to 'pkg-config': gcc -o foo foo.c `pkg-config gss --cflags --libs`  File: gss.info, Node: Out of Memory handling, Prev: Building the source, Up: Preparation 2.5 Out of Memory handling ========================== The GSS API does not have a standard error code for the out of memory error condition. This library will return 'GSS_S_FAILURE' and set 'minor_status' to ENOMEM.  File: gss.info, Node: Standard GSS API, Next: Extended GSS API, Prev: Preparation, Up: Top 3 Standard GSS API ****************** * Menu: * Simple Data Types:: About integers, strings, OIDs, and OID sets. * Complex Data Types:: About credentials, contexts, names, etc. * Optional Parameters:: What value to use when you don't want one. * Error Handling:: How errors in GSS are reported and handled. * Credential Management:: Standard GSS credential functions. * Context-Level Routines:: Standard GSS context functions. * Per-Message Routines:: Standard GSS per-message functions. * Name Manipulation:: Standard GSS name manipulation functions. * Miscellaneous Routines:: Standard miscellaneous functions. * SASL GS2 Routines:: Standard SASL GS2 related functions.  File: gss.info, Node: Simple Data Types, Next: Complex Data Types, Up: Standard GSS API 3.1 Simple Data Types ===================== The following conventions are used by the GSS-API C-language bindings: 3.1.1 Integer types ------------------- GSS-API uses the following integer data type: OM_uint32 32-bit unsigned integer 3.1.2 String and similar data ----------------------------- Many of the GSS-API routines take arguments and return values that describe contiguous octet-strings. All such data is passed between the GSS-API and the caller using the 'gss_buffer_t' data type. This data type is a pointer to a buffer descriptor, which consists of a length field that contains the total number of bytes in the datum, and a value field which contains a pointer to the actual datum: typedef struct gss_buffer_desc_struct { size_t length; void *value; } gss_buffer_desc, *gss_buffer_t; Storage for data returned to the application by a GSS-API routine using the 'gss_buffer_t' conventions is allocated by the GSS-API routine. The application may free this storage by invoking the 'gss_release_buffer' routine. Allocation of the 'gss_buffer_desc' object is always the responsibility of the application; unused 'gss_buffer_desc' objects may be initialized to the value 'GSS_C_EMPTY_BUFFER'. 3.1.2.1 Opaque data types ......................... Certain multiple-word data items are considered opaque data types at the GSS-API, because their internal structure has no significance either to the GSS-API or to the caller. Examples of such opaque data types are the input_token parameter to 'gss_init_sec_context' (which is opaque to the caller), and the input_message parameter to 'gss_wrap' (which is opaque to the GSS-API). Opaque data is passed between the GSS-API and the application using the 'gss_buffer_t' datatype. 3.1.2.2 Character strings ......................... Certain multiple-word data items may be regarded as simple ISO Latin-1 character strings. Examples are the printable strings passed to 'gss_import_name' via the input_name_buffer parameter. Some GSS-API routines also return character strings. All such character strings are passed between the application and the GSS-API implementation using the 'gss_buffer_t' datatype, which is a pointer to a 'gss_buffer_desc' object. When a 'gss_buffer_desc' object describes a printable string, the length field of the 'gss_buffer_desc' should only count printable characters within the string. In particular, a trailing NUL character should NOT be included in the length count, nor should either the GSS-API implementation or the application assume the presence of an uncounted trailing NUL. 3.1.3 Object Identifiers ------------------------ Certain GSS-API procedures take parameters of the type 'gss_OID', or Object identifier. This is a type containing ISO-defined tree- structured values, and is used by the GSS-API caller to select an underlying security mechanism and to specify namespaces. A value of type 'gss_OID' has the following structure: typedef struct gss_OID_desc_struct { OM_uint32 length; void *elements; } gss_OID_desc, *gss_OID; The elements field of this structure points to the first byte of an octet string containing the ASN.1 BER encoding of the value portion of the normal BER TLV encoding of the 'gss_OID'. The length field contains the number of bytes in this value. For example, the 'gss_OID' value corresponding to 'iso(1) identified-organization(3) icd-ecma(12) member-company(2) dec(1011) cryptoAlgorithms(7) DASS(5)', meaning the DASS X.509 authentication mechanism, has a length field of 7 and an elements field pointing to seven octets containing the following octal values: 53,14,2,207,163,7,5. GSS-API implementations should provide constant 'gss_OID' values to allow applications to request any supported mechanism, although applications are encouraged on portability grounds to accept the default mechanism. 'gss_OID' values should also be provided to allow applications to specify particular name types (see section 3.10). Applications should treat 'gss_OID_desc' values returned by GSS-API routines as read-only. In particular, the application should not attempt to deallocate them with free(). 3.1.4 Object Identifier Sets ---------------------------- Certain GSS-API procedures take parameters of the type 'gss_OID_set'. This type represents one or more object identifiers (*note Object Identifiers::). A 'gss_OID_set' object has the following structure: typedef struct gss_OID_set_desc_struct { size_t count; gss_OID elements; } gss_OID_set_desc, *gss_OID_set; The count field contains the number of OIDs within the set. The elements field is a pointer to an array of 'gss_OID_desc' objects, each of which describes a single OID. 'gss_OID_set' values are used to name the available mechanisms supported by the GSS-API, to request the use of specific mechanisms, and to indicate which mechanisms a given credential supports. All OID sets returned to the application by GSS-API are dynamic objects (the 'gss_OID_set_desc', the "elements" array of the set, and the "elements" array of each member OID are all dynamically allocated), and this storage must be deallocated by the application using the 'gss_release_oid_set' routine.  File: gss.info, Node: Complex Data Types, Next: Optional Parameters, Prev: Simple Data Types, Up: Standard GSS API 3.2 Complex Data Types ====================== 3.2.1 Credentials ----------------- A credential handle is a caller-opaque atomic datum that identifies a GSS-API credential data structure. It is represented by the caller- opaque type 'gss_cred_id_t'. GSS-API credentials can contain mechanism-specific principal authentication data for multiple mechanisms. A GSS-API credential is composed of a set of credential-elements, each of which is applicable to a single mechanism. A credential may contain at most one credential-element for each supported mechanism. A credential-element identifies the data needed by a single mechanism to authenticate a single principal, and conceptually contains two credential-references that describe the actual mechanism-specific authentication data, one to be used by GSS-API for initiating contexts, and one to be used for accepting contexts. For mechanisms that do not distinguish between acceptor and initiator credentials, both references would point to the same underlying mechanism-specific authentication data. Credentials describe a set of mechanism-specific principals, and give their holder the ability to act as any of those principals. All principal identities asserted by a single GSS-API credential should belong to the same entity, although enforcement of this property is an implementation-specific matter. The GSS-API does not make the actual credentials available to applications; instead a credential handle is used to identify a particular credential, held internally by GSS-API. The combination of GSS-API credential handle and mechanism identifies the principal whose identity will be asserted by the credential when used with that mechanism. The 'gss_init_sec_context' and 'gss_accept_sec_context' routines allow the value 'GSS_C_NO_CREDENTIAL' to be specified as their credential handle parameter. This special credential-handle indicates a desire by the application to act as a default principal. 3.2.2 Contexts -------------- The 'gss_ctx_id_t' data type contains a caller-opaque atomic value that identifies one end of a GSS-API security context. The security context holds state information about each end of a peer communication, including cryptographic state information. 3.2.3 Authentication tokens --------------------------- A token is a caller-opaque type that GSS-API uses to maintain synchronization between the context data structures at each end of a GSS-API security context. The token is a cryptographically protected octet-string, generated by the underlying mechanism at one end of a GSS-API security context for use by the peer mechanism at the other end. Encapsulation (if required) and transfer of the token are the responsibility of the peer applications. A token is passed between the GSS-API and the application using the 'gss_buffer_t' conventions. 3.2.4 Interprocess tokens ------------------------- Certain GSS-API routines are intended to transfer data between processes in multi-process programs. These routines use a caller-opaque octet-string, generated by the GSS-API in one process for use by the GSS-API in another process. The calling application is responsible for transferring such tokens between processes in an OS-specific manner. Note that, while GSS-API implementors are encouraged to avoid placing sensitive information within interprocess tokens, or to cryptographically protect them, many implementations will be unable to avoid placing key material or other sensitive data within them. It is the application's responsibility to ensure that interprocess tokens are protected in transit, and transferred only to processes that are trustworthy. An interprocess token is passed between the GSS-API and the application using the 'gss_buffer_t' conventions. 3.2.5 Names ----------- A name is used to identify a person or entity. GSS-API authenticates the relationship between a name and the entity claiming the name. Since different authentication mechanisms may employ different namespaces for identifying their principals, GSSAPI's naming support is necessarily complex in multi-mechanism environments (or even in some single-mechanism environments where the underlying mechanism supports multiple namespaces). Two distinct representations are defined for names: * An internal form. This is the GSS-API "native" format for names, represented by the implementation-specific 'gss_name_t' type. It is opaque to GSS-API callers. A single 'gss_name_t' object may contain multiple names from different namespaces, but all names should refer to the same entity. An example of such an internal name would be the name returned from a call to the 'gss_inquire_cred' routine, when applied to a credential containing credential elements for multiple authentication mechanisms employing different namespaces. This 'gss_name_t' object will contain a distinct name for the entity for each authentication mechanism. For GSS-API implementations supporting multiple namespaces, objects of type 'gss_name_t' must contain sufficient information to determine the namespace to which each primitive name belongs. * Mechanism-specific contiguous octet-string forms. A format capable of containing a single name (from a single namespace). Contiguous string names are always accompanied by an object identifier specifying the namespace to which the name belongs, and their format is dependent on the authentication mechanism that employs the name. Many, but not all, contiguous string names will be printable, and may therefore be used by GSS-API applications for communication with their users. Routines ('gss_import_name' and 'gss_display_name') are provided to convert names between contiguous string representations and the internal 'gss_name_t' type. 'gss_import_name' may support multiple syntaxes for each supported namespace, allowing users the freedom to choose a preferred name representation. 'gss_display_name' should use an implementation-chosen printable syntax for each supported name-type. If an application calls 'gss_display_name', passing the internal name resulting from a call to 'gss_import_name', there is no guarantee the resulting contiguous string name will be the same as the original imported string name. Nor do name-space identifiers necessarily survive unchanged after a journey through the internal name-form. An example of this might be a mechanism that authenticates X.500 names, but provides an algorithmic mapping of Internet DNS names into X.500. That mechanism's implementation of 'gss_import_name' might, when presented with a DNS name, generate an internal name that contained both the original DNS name and the equivalent X.500 name. Alternatively, it might only store the X.500 name. In the latter case, 'gss_display_name' would most likely generate a printable X.500 name, rather than the original DNS name. The process of authentication delivers to the context acceptor an internal name. Since this name has been authenticated by a single mechanism, it contains only a single name (even if the internal name presented by the context initiator to 'gss_init_sec_context' had multiple components). Such names are termed internal mechanism names, or "MN"s and the names emitted by 'gss_accept_sec_context' are always of this type. Since some applications may require MNs without wanting to incur the overhead of an authentication operation, a second function, 'gss_canonicalize_name', is provided to convert a general internal name into an MN. Comparison of internal-form names may be accomplished via the 'gss_compare_name' routine, which returns true if the two names being compared refer to the same entity. This removes the need for the application program to understand the syntaxes of the various printable names that a given GSS-API implementation may support. Since GSS-API assumes that all primitive names contained within a given internal name refer to the same entity, 'gss_compare_name' can return true if the two names have at least one primitive name in common. If the implementation embodies knowledge of equivalence relationships between names taken from different namespaces, this knowledge may also allow successful comparison of internal names containing no overlapping primitive elements. When used in large access control lists, the overhead of invoking 'gss_import_name' and 'gss_compare_name' on each name from the ACL may be prohibitive. As an alternative way of supporting this case, GSS-API defines a special form of the contiguous string name which may be compared directly (e.g. with memcmp()). Contiguous names suitable for comparison are generated by the 'gss_export_name' routine, which requires an MN as input. Exported names may be re- imported by the 'gss_import_name' routine, and the resulting internal name will also be an MN. The 'gss_OID' constant 'GSS_C_NT_EXPORT_NAME' indentifies the "export name" type, and the value of this constant is given in Appendix A. Structurally, an exported name object consists of a header containing an OID identifying the mechanism that authenticated the name, and a trailer containing the name itself, where the syntax of the trailer is defined by the individual mechanism specification. The precise format of an export name is defined in the language-independent GSS-API specification [GSSAPI]. Note that the results obtained by using 'gss_compare_name' will in general be different from those obtained by invoking 'gss_canonicalize_name' and 'gss_export_name', and then comparing the exported names. The first series of operation determines whether two (unauthenticated) names identify the same principal; the second whether a particular mechanism would authenticate them as the same principal. These two operations will in general give the same results only for MNs. The 'gss_name_t' datatype should be implemented as a pointer type. To allow the compiler to aid the application programmer by performing type-checking, the use of (void *) is discouraged. A pointer to an implementation-defined type is the preferred choice. Storage is allocated by routines that return 'gss_name_t' values. A procedure, 'gss_release_name', is provided to free storage associated with an internal-form name. 3.2.6 Channel Bindings ---------------------- GSS-API supports the use of user-specified tags to identify a given context to the peer application. These tags are intended to be used to identify the particular communications channel that carries the context. Channel bindings are communicated to the GSS-API using the following structure: typedef struct gss_channel_bindings_struct { OM_uint32 initiator_addrtype; gss_buffer_desc initiator_address; OM_uint32 acceptor_addrtype; gss_buffer_desc acceptor_address; gss_buffer_desc application_data; } *gss_channel_bindings_t; The initiator_addrtype and acceptor_addrtype fields denote the type of addresses contained in the initiator_address and acceptor_address buffers. The address type should be one of the following: GSS_C_AF_UNSPEC Unspecified address type GSS_C_AF_LOCAL Host-local address type GSS_C_AF_INET Internet address type (e.g. IP) GSS_C_AF_IMPLINK ARPAnet IMP address type GSS_C_AF_PUP pup protocols (eg BSP) address type GSS_C_AF_CHAOS MIT CHAOS protocol address type GSS_C_AF_NS XEROX NS address type GSS_C_AF_NBS nbs address type GSS_C_AF_ECMA ECMA address type GSS_C_AF_DATAKIT datakit protocols address type GSS_C_AF_CCITT CCITT protocols GSS_C_AF_SNA IBM SNA address type GSS_C_AF_DECnet DECnet address type GSS_C_AF_DLI Direct data link interface address type GSS_C_AF_LAT LAT address type GSS_C_AF_HYLINK NSC Hyperchannel address type GSS_C_AF_APPLETALK AppleTalk address type GSS_C_AF_BSC BISYNC 2780/3780 address type GSS_C_AF_DSS Distributed system services address type GSS_C_AF_OSI OSI TP4 address type GSS_C_AF_X25 X.25 GSS_C_AF_NULLADDR No address specified Note that these symbols name address families rather than specific addressing formats. For address families that contain several alternative address forms, the initiator_address and acceptor_address fields must contain sufficient information to determine which address form is used. When not otherwise specified, addresses should be specified in network byte-order (that is, native byte-ordering for the address family). Conceptually, the GSS-API concatenates the initiator_addrtype, initiator_address, acceptor_addrtype, acceptor_address and application_data to form an octet string. The mechanism calculates a MIC over this octet string, and binds the MIC to the context establishment token emitted by 'gss_init_sec_context'. The same bindings are presented by the context acceptor to 'gss_accept_sec_context', and a MIC is calculated in the same way. The calculated MIC is compared with that found in the token, and if the MICs differ, 'gss_accept_sec_context' will return a 'GSS_S_BAD_BINDINGS' error, and the context will not be established. Some mechanisms may include the actual channel binding data in the token (rather than just a MIC); applications should therefore not use confidential data as channel-binding components. Individual mechanisms may impose additional constraints on addresses and address types that may appear in channel bindings. For example, a mechanism may verify that the initiator_address field of the channel bindings presented to 'gss_init_sec_context' contains the correct network address of the host system. Portable applications should therefore ensure that they either provide correct information for the address fields, or omit addressing information, specifying 'GSS_C_AF_NULLADDR' as the address-types.  File: gss.info, Node: Optional Parameters, Next: Error Handling, Prev: Complex Data Types, Up: Standard GSS API 3.3 Optional Parameters ======================= Various parameters are described as optional. This means that they follow a convention whereby a default value may be requested. The following conventions are used for omitted parameters. These conventions apply only to those parameters that are explicitly documented as optional. * gss_buffer_t types. Specify GSS_C_NO_BUFFER as a value. For an input parameter this signifies that default behavior is requested, while for an output parameter it indicates that the information that would be returned via the parameter is not required by the application. * Integer types (input). Individual parameter documentation lists values to be used to indicate default actions. * Integer types (output). Specify NULL as the value for the pointer. * Pointer types. Specify NULL as the value. * Object IDs. Specify GSS_C_NO_OID as the value. * Object ID Sets. Specify GSS_C_NO_OID_SET as the value. * Channel Bindings. Specify GSS_C_NO_CHANNEL_BINDINGS to indicate that channel bindings are not to be used.  File: gss.info, Node: Error Handling, Next: Credential Management, Prev: Optional Parameters, Up: Standard GSS API 3.4 Error Handling ================== Every GSS-API routine returns two distinct values to report status information to the caller: GSS status codes and Mechanism status codes. 3.4.1 GSS status codes ---------------------- GSS-API routines return GSS status codes as their 'OM_uint32' function value. These codes indicate errors that are independent of the underlying mechanism(s) used to provide the security service. The errors that can be indicated via a GSS status code are either generic API routine errors (errors that are defined in the GSS-API specification) or calling errors (errors that are specific to these language bindings). A GSS status code can indicate a single fatal generic API error from the routine and a single calling error. In addition, supplementary status information may be indicated via the setting of bits in the supplementary info field of a GSS status code. These errors are encoded into the 32-bit GSS status code as follows: MSB LSB |------------------------------------------------------------| | Calling Error | Routine Error | Supplementary Info | |------------------------------------------------------------| Bit 31 24 23 16 15 0 Hence if a GSS-API routine returns a GSS status code whose upper 16 bits contain a non-zero value, the call failed. If the calling error field is non-zero, the invoking application's call of the routine was erroneous. Calling errors are defined in table 3-1. If the routine error field is non-zero, the routine failed for one of the routine- specific reasons listed below in table 3-2. Whether or not the upper 16 bits indicate a failure or a success, the routine may indicate additional information by setting bits in the supplementary info field of the status code. The meaning of individual bits is listed below in table 3-3. Table 3-1 Calling Errors Name Value in field Meaning ---- -------------- ------- GSS_S_CALL_INACCESSIBLE_READ 1 A required input parameter could not be read GSS_S_CALL_INACCESSIBLE_WRITE 2 A required output parameter could not be written. GSS_S_CALL_BAD_STRUCTURE 3 A parameter was malformed Table 3-2 Routine Errors Name Value in field Meaning ---- -------------- ------- GSS_S_BAD_MECH 1 An unsupported mechanism was requested GSS_S_BAD_NAME 2 An invalid name was supplied GSS_S_BAD_NAMETYPE 3 A supplied name was of an unsupported type GSS_S_BAD_BINDINGS 4 Incorrect channel bindings were supplied GSS_S_BAD_STATUS 5 An invalid status code was supplied GSS_S_BAD_MIC GSS_S_BAD_SIG 6 A token had an invalid MIC GSS_S_NO_CRED 7 No credentials were supplied, or the credentials were unavailable or inaccessible. GSS_S_NO_CONTEXT 8 No context has been established GSS_S_DEFECTIVE_TOKEN 9 A token was invalid GSS_S_DEFECTIVE_CREDENTIAL 10 A credential was invalid GSS_S_CREDENTIALS_EXPIRED 11 The referenced credentials have expired GSS_S_CONTEXT_EXPIRED 12 The context has expired GSS_S_FAILURE 13 Miscellaneous failure (see text) GSS_S_BAD_QOP 14 The quality-of-protection requested could not be provided GSS_S_UNAUTHORIZED 15 The operation is forbidden by local security policy GSS_S_UNAVAILABLE 16 The operation or option is unavailable GSS_S_DUPLICATE_ELEMENT 17 The requested credential element already exists GSS_S_NAME_NOT_MN 18 The provided name was not a mechanism name Table 3-3 Supplementary Status Bits Name Bit Number Meaning ---- ---------- ------- GSS_S_CONTINUE_NEEDED 0 (LSB) Returned only by gss_init_sec_context or gss_accept_sec_context. The routine must be called again to complete its function. See routine documentation for detailed description GSS_S_DUPLICATE_TOKEN 1 The token was a duplicate of an earlier token GSS_S_OLD_TOKEN 2 The token's validity period has expired GSS_S_UNSEQ_TOKEN 3 A later token has already been processed GSS_S_GAP_TOKEN 4 An expected per-message token was not received The routine documentation also uses the name GSS_S_COMPLETE, which is a zero value, to indicate an absence of any API errors or supplementary information bits. All GSS_S_xxx symbols equate to complete 'OM_uint32' status codes, rather than to bitfield values. For example, the actual value of the symbol 'GSS_S_BAD_NAMETYPE' (value 3 in the routine error field) is 3<<16. The macros 'GSS_CALLING_ERROR', 'GSS_ROUTINE_ERROR' and 'GSS_SUPPLEMENTARY_INFO' are provided, each of which takes a GSS status code and removes all but the relevant field. For example, the value obtained by applying 'GSS_ROUTINE_ERROR' to a status code removes the calling errors and supplementary info fields, leaving only the routine errors field. The values delivered by these macros may be directly compared with a 'GSS_S_xxx' symbol of the appropriate type. The macro 'GSS_ERROR' is also provided, which when applied to a GSS status code returns a non-zero value if the status code indicated a calling or routine error, and a zero value otherwise. All macros defined by GSS-API evaluate their argument(s) exactly once. A GSS-API implementation may choose to signal calling errors in a platform-specific manner instead of, or in addition to the routine value; routine errors and supplementary info should be returned via major status values only. The GSS major status code 'GSS_S_FAILURE' is used to indicate that the underlying mechanism detected an error for which no specific GSS status code is defined. The mechanism-specific status code will provide more details about the error. In addition to the explicit major status codes for each API function, the code 'GSS_S_FAILURE' may be returned by any routine, indicating an implementation-specific or mechanism-specific error condition, further details of which are reported via the 'minor_status' parameter. 3.4.2 Mechanism-specific status codes ------------------------------------- GSS-API routines return a minor_status parameter, which is used to indicate specialized errors from the underlying security mechanism. This parameter may contain a single mechanism-specific error, indicated by a 'OM_uint32' value. The minor_status parameter will always be set by a GSS-API routine, even if it returns a calling error or one of the generic API errors indicated above as fatal, although most other output parameters may remain unset in such cases. However, output parameters that are expected to return pointers to storage allocated by a routine must always be set by the routine, even in the event of an error, although in such cases the GSS-API routine may elect to set the returned parameter value to NULL to indicate that no storage was actually allocated. Any length field associated with such pointers (as in a 'gss_buffer_desc' structure) should also be set to zero in such cases.  File: gss.info, Node: Credential Management, Next: Context-Level Routines, Prev: Error Handling, Up: Standard GSS API 3.5 Credential Management ========================= GSS-API Credential-management Routines Routine Function ------- -------- gss_acquire_cred Assume a global identity; Obtain a GSS-API credential handle for pre-existing credentials. gss_add_cred Construct credentials incrementally. gss_inquire_cred Obtain information about a credential. gss_inquire_cred_by_mech Obtain per-mechanism information about a credential. gss_release_cred Discard a credential handle. gss_acquire_cred ---------------- -- Function: OM_uint32 gss_acquire_cred (OM_uint32 * MINOR_STATUS, const gss_name_t DESIRED_NAME, OM_uint32 TIME_REQ, const gss_OID_set DESIRED_MECHS, gss_cred_usage_t CRED_USAGE, gss_cred_id_t * OUTPUT_CRED_HANDLE, gss_OID_set * ACTUAL_MECHS, OM_uint32 * TIME_REC) MINOR_STATUS: (integer, modify) Mechanism specific status code. DESIRED_NAME: (gss_name_t, read) Name of principal whose credential should be acquired. TIME_REQ: (Integer, read, optional) Number of seconds that credentials should remain valid. Specify GSS_C_INDEFINITE to request that the credentials have the maximum permitted lifetime. DESIRED_MECHS: (Set of Object IDs, read, optional) Set of underlying security mechanisms that may be used. GSS_C_NO_OID_SET may be used to obtain an implementation-specific default. CRED_USAGE: (gss_cred_usage_t, read) GSS_C_BOTH - Credentials may be used either to initiate or accept security contexts. GSS_C_INITIATE - Credentials will only be used to initiate security contexts. GSS_C_ACCEPT - Credentials will only be used to accept security contexts. OUTPUT_CRED_HANDLE: (gss_cred_id_t, modify) The returned credential handle. Resources associated with this credential handle must be released by the application after use with a call to gss_release_cred(). ACTUAL_MECHS: (Set of Object IDs, modify, optional) The set of mechanisms for which the credential is valid. Storage associated with the returned OID-set must be released by the application after use with a call to gss_release_oid_set(). Specify NULL if not required. TIME_REC: (Integer, modify, optional) Actual number of seconds for which the returned credentials will remain valid. If the implementation does not support expiration of credentials, the value GSS_C_INDEFINITE will be returned. Specify NULL if not required. Allows an application to acquire a handle for a pre-existing credential by name. GSS-API implementations must impose a local access-control policy on callers of this routine to prevent unauthorized callers from acquiring credentials to which they are not entitled. This routine is not intended to provide a "login to the network" function, as such a function would involve the creation of new credentials rather than merely acquiring a handle to existing credentials. Such functions, if required, should be defined in implementation-specific extensions to the API. If desired_name is GSS_C_NO_NAME, the call is interpreted as a request for a credential handle that will invoke default behavior when passed to gss_init_sec_context() (if cred_usage is GSS_C_INITIATE or GSS_C_BOTH) or gss_accept_sec_context() (if cred_usage is GSS_C_ACCEPT or GSS_C_BOTH). Mechanisms should honor the desired_mechs parameter, and return a credential that is suitable to use only with the requested mechanisms. An exception to this is the case where one underlying credential element can be shared by multiple mechanisms; in this case it is permissible for an implementation to indicate all mechanisms with which the credential element may be used. If desired_mechs is an empty set, behavior is undefined. This routine is expected to be used primarily by context acceptors, since implementations are likely to provide mechanism-specific ways of obtaining GSS-API initiator credentials from the system login process. Some implementations may therefore not support the acquisition of GSS_C_INITIATE or GSS_C_BOTH credentials via gss_acquire_cred for any name other than GSS_C_NO_NAME, or a name produced by applying either gss_inquire_cred to a valid credential, or gss_inquire_context to an active context. If credential acquisition is time-consuming for a mechanism, the mechanism may choose to delay the actual acquisition until the credential is required (e.g. by gss_init_sec_context or gss_accept_sec_context). Such mechanism-specific implementation decisions should be invisible to the calling application; thus a call of gss_inquire_cred immediately following the call of gss_acquire_cred must return valid credential data, and may therefore incur the overhead of a deferred credential acquisition. Return value: 'GSS_S_COMPLETE': Successful completion. 'GSS_S_BAD_MECH': Unavailable mechanism requested. 'GSS_S_BAD_NAMETYPE': Type contained within desired_name parameter is not supported. 'GSS_S_BAD_NAME': Value supplied for desired_name parameter is ill formed. 'GSS_S_CREDENTIALS_EXPIRED': The credentials could not be acquired Because they have expired. 'GSS_S_NO_CRED': No credentials were found for the specified name. gss_add_cred ------------ -- Function: OM_uint32 gss_add_cred (OM_uint32 * MINOR_STATUS, const gss_cred_id_t INPUT_CRED_HANDLE, const gss_name_t DESIRED_NAME, const gss_OID DESIRED_MECH, gss_cred_usage_t CRED_USAGE, OM_uint32 INITIATOR_TIME_REQ, OM_uint32 ACCEPTOR_TIME_REQ, gss_cred_id_t * OUTPUT_CRED_HANDLE, gss_OID_set * ACTUAL_MECHS, OM_uint32 * INITIATOR_TIME_REC, OM_uint32 * ACCEPTOR_TIME_REC) MINOR_STATUS: (integer, modify) Mechanism specific status code. INPUT_CRED_HANDLE: (gss_cred_id_t, read, optional) The credential to which a credential-element will be added. If GSS_C_NO_CREDENTIAL is specified, the routine will compose the new credential based on default behavior (see text). Note that, while the credential-handle is not modified by gss_add_cred(), the underlying credential will be modified if output_credential_handle is NULL. DESIRED_NAME: (gss_name_t, read.) Name of principal whose credential should be acquired. DESIRED_MECH: (Object ID, read) Underlying security mechanism with which the credential may be used. CRED_USAGE: (gss_cred_usage_t, read) GSS_C_BOTH - Credential may be used either to initiate or accept security contexts. GSS_C_INITIATE - Credential will only be used to initiate security contexts. GSS_C_ACCEPT - Credential will only be used to accept security contexts. INITIATOR_TIME_REQ: (Integer, read, optional) number of seconds that the credential should remain valid for initiating security contexts. This argument is ignored if the composed credentials are of type GSS_C_ACCEPT. Specify GSS_C_INDEFINITE to request that the credentials have the maximum permitted initiator lifetime. ACCEPTOR_TIME_REQ: (Integer, read, optional) number of seconds that the credential should remain valid for accepting security contexts. This argument is ignored if the composed credentials are of type GSS_C_INITIATE. Specify GSS_C_INDEFINITE to request that the credentials have the maximum permitted initiator lifetime. OUTPUT_CRED_HANDLE: (gss_cred_id_t, modify, optional) The returned credential handle, containing the new credential-element and all the credential-elements from input_cred_handle. If a valid pointer to a gss_cred_id_t is supplied for this parameter, gss_add_cred creates a new credential handle containing all credential-elements from the input_cred_handle and the newly acquired credential-element; if NULL is specified for this parameter, the newly acquired credential-element will be added to the credential identified by input_cred_handle. The resources associated with any credential handle returned via this parameter must be released by the application after use with a call to gss_release_cred(). ACTUAL_MECHS: (Set of Object IDs, modify, optional) The complete set of mechanisms for which the new credential is valid. Storage for the returned OID-set must be freed by the application after use with a call to gss_release_oid_set(). Specify NULL if not required. INITIATOR_TIME_REC: (Integer, modify, optional) Actual number of seconds for which the returned credentials will remain valid for initiating contexts using the specified mechanism. If the implementation or mechanism does not support expiration of credentials, the value GSS_C_INDEFINITE will be returned. Specify NULL if not required ACCEPTOR_TIME_REC: (Integer, modify, optional) Actual number of seconds for which the returned credentials will remain valid for accepting security contexts using the specified mechanism. If the implementation or mechanism does not support expiration of credentials, the value GSS_C_INDEFINITE will be returned. Specify NULL if not required Adds a credential-element to a credential. The credential-element is identified by the name of the principal to which it refers. GSS-API implementations must impose a local access-control policy on callers of this routine to prevent unauthorized callers from acquiring credential-elements to which they are not entitled. This routine is not intended to provide a "login to the network" function, as such a function would involve the creation of new mechanism-specific authentication data, rather than merely acquiring a GSS-API handle to existing data. Such functions, if required, should be defined in implementation-specific extensions to the API. If desired_name is GSS_C_NO_NAME, the call is interpreted as a request to add a credential element that will invoke default behavior when passed to gss_init_sec_context() (if cred_usage is GSS_C_INITIATE or GSS_C_BOTH) or gss_accept_sec_context() (if cred_usage is GSS_C_ACCEPT or GSS_C_BOTH). This routine is expected to be used primarily by context acceptors, since implementations are likely to provide mechanism-specific ways of obtaining GSS-API initiator credentials from the system login process. Some implementations may therefore not support the acquisition of GSS_C_INITIATE or GSS_C_BOTH credentials via gss_acquire_cred for any name other than GSS_C_NO_NAME, or a name produced by applying either gss_inquire_cred to a valid credential, or gss_inquire_context to an active context. If credential acquisition is time-consuming for a mechanism, the mechanism may choose to delay the actual acquisition until the credential is required (e.g. by gss_init_sec_context or gss_accept_sec_context). Such mechanism-specific implementation decisions should be invisible to the calling application; thus a call of gss_inquire_cred immediately following the call of gss_add_cred must return valid credential data, and may therefore incur the overhead of a deferred credential acquisition. This routine can be used to either compose a new credential containing all credential-elements of the original in addition to the newly-acquire credential-element, or to add the new credential- element to an existing credential. If NULL is specified for the output_cred_handle parameter argument, the new credential-element will be added to the credential identified by input_cred_handle; if a valid pointer is specified for the output_cred_handle parameter, a new credential handle will be created. If GSS_C_NO_CREDENTIAL is specified as the input_cred_handle, gss_add_cred will compose a credential (and set the output_cred_handle parameter accordingly) based on default behavior. That is, the call will have the same effect as if the application had first made a call to gss_acquire_cred(), specifying the same usage and passing GSS_C_NO_NAME as the desired_name parameter to obtain an explicit credential handle embodying default behavior, passed this credential handle to gss_add_cred(), and finally called gss_release_cred() on the first credential handle. If GSS_C_NO_CREDENTIAL is specified as the input_cred_handle parameter, a non-NULL output_cred_handle must be supplied. Return value: 'GSS_S_COMPLETE': Successful completion. 'GSS_S_BAD_MECH': Unavailable mechanism requested. 'GSS_S_BAD_NAMETYPE': Type contained within desired_name parameter is not supported. 'GSS_S_BAD_NAME': Value supplied for desired_name parameter is ill-formed. 'GSS_S_DUPLICATE_ELEMENT': The credential already contains an element for the requested mechanism with overlapping usage and validity period. 'GSS_S_CREDENTIALS_EXPIRED': The required credentials could not be added because they have expired. 'GSS_S_NO_CRED': No credentials were found for the specified name. gss_inquire_cred ---------------- -- Function: OM_uint32 gss_inquire_cred (OM_uint32 * MINOR_STATUS, const gss_cred_id_t CRED_HANDLE, gss_name_t * NAME, OM_uint32 * LIFETIME, gss_cred_usage_t * CRED_USAGE, gss_OID_set * MECHANISMS) MINOR_STATUS: (integer, modify) Mechanism specific status code. CRED_HANDLE: (gss_cred_id_t, read) A handle that refers to the target credential. Specify GSS_C_NO_CREDENTIAL to inquire about the default initiator principal. NAME: (gss_name_t, modify, optional) The name whose identity the credential asserts. Storage associated with this name should be freed by the application after use with a call to gss_release_name(). Specify NULL if not required. LIFETIME: (Integer, modify, optional) The number of seconds for which the credential will remain valid. If the credential has expired, this parameter will be set to zero. If the implementation does not support credential expiration, the value GSS_C_INDEFINITE will be returned. Specify NULL if not required. CRED_USAGE: (gss_cred_usage_t, modify, optional) How the credential may be used. One of the following: GSS_C_INITIATE, GSS_C_ACCEPT, GSS_C_BOTH. Specify NULL if not required. MECHANISMS: (gss_OID_set, modify, optional) Set of mechanisms supported by the credential. Storage associated with this OID set must be freed by the application after use with a call to gss_release_oid_set(). Specify NULL if not required. Obtains information about a credential. Return value: 'GSS_S_COMPLETE': Successful completion. 'GSS_S_NO_CRED': The referenced credentials could not be accessed. 'GSS_S_DEFECTIVE_CREDENTIAL': The referenced credentials were invalid. 'GSS_S_CREDENTIALS_EXPIRED': The referenced credentials have expired. If the lifetime parameter was not passed as NULL, it will be set to 0. gss_inquire_cred_by_mech ------------------------ -- Function: OM_uint32 gss_inquire_cred_by_mech (OM_uint32 * MINOR_STATUS, const gss_cred_id_t CRED_HANDLE, const gss_OID MECH_TYPE, gss_name_t * NAME, OM_uint32 * INITIATOR_LIFETIME, OM_uint32 * ACCEPTOR_LIFETIME, gss_cred_usage_t * CRED_USAGE) MINOR_STATUS: (Integer, modify) Mechanism specific status code. CRED_HANDLE: (gss_cred_id_t, read) A handle that refers to the target credential. Specify GSS_C_NO_CREDENTIAL to inquire about the default initiator principal. MECH_TYPE: (gss_OID, read) The mechanism for which information should be returned. NAME: (gss_name_t, modify, optional) The name whose identity the credential asserts. Storage associated with this name must be freed by the application after use with a call to gss_release_name(). Specify NULL if not required. INITIATOR_LIFETIME: (Integer, modify, optional) The number of seconds for which the credential will remain capable of initiating security contexts under the specified mechanism. If the credential can no longer be used to initiate contexts, or if the credential usage for this mechanism is GSS_C_ACCEPT, this parameter will be set to zero. If the implementation does not support expiration of initiator credentials, the value GSS_C_INDEFINITE will be returned. Specify NULL if not required. ACCEPTOR_LIFETIME: (Integer, modify, optional) The number of seconds for which the credential will remain capable of accepting security contexts under the specified mechanism. If the credential can no longer be used to accept contexts, or if the credential usage for this mechanism is GSS_C_INITIATE, this parameter will be set to zero. If the implementation does not support expiration of acceptor credentials, the value GSS_C_INDEFINITE will be returned. Specify NULL if not required. CRED_USAGE: (gss_cred_usage_t, modify, optional) How the credential may be used with the specified mechanism. One of the following: GSS_C_INITIATE, GSS_C_ACCEPT, GSS_C_BOTH. Specify NULL if not required. Obtains per-mechanism information about a credential. Return value: 'GSS_S_COMPLETE': Successful completion. 'GSS_S_NO_CRED': The referenced credentials could not be accessed. 'GSS_S_DEFECTIVE_CREDENTIAL': The referenced credentials were invalid. 'GSS_S_CREDENTIALS_EXPIRED': The referenced credentials have expired. If the lifetime parameter was not passed as NULL, it will be set to 0. gss_release_cred ---------------- -- Function: OM_uint32 gss_release_cred (OM_uint32 * MINOR_STATUS, gss_cred_id_t * CRED_HANDLE) MINOR_STATUS: (Integer, modify) Mechanism specific status code. CRED_HANDLE: (gss_cred_id_t, modify, optional) Opaque handle identifying credential to be released. If GSS_C_NO_CREDENTIAL is supplied, the routine will complete successfully, but will do nothing. Informs GSS-API that the specified credential handle is no longer required by the application, and frees associated resources. The cred_handle is set to GSS_C_NO_CREDENTIAL on successful completion of this call. Return value: 'GSS_S_COMPLETE': Successful completion. 'GSS_S_NO_CRED': Credentials could not be accessed.  File: gss.info, Node: Context-Level Routines, Next: Per-Message Routines, Prev: Credential Management, Up: Standard GSS API 3.6 Context-Level Routines ========================== GSS-API Context-Level Routines Routine Function ------- -------- gss_init_sec_context Initiate a security context with a peer application. gss_accept_sec_context Accept a security context initiated by a peer application. gss_delete_sec_context Discard a security context. gss_process_context_token Process a token on a security context from a peer application. gss_context_time Determine for how long a context will remain valid. gss_inquire_context Obtain information about a security context. gss_wrap_size_limit Determine token-size limit for gss_wrap on a context. gss_export_sec_context Transfer a security context to another process. gss_import_sec_context Import a transferred context. gss_init_sec_context -------------------- -- Function: OM_uint32 gss_init_sec_context (OM_uint32 * MINOR_STATUS, const gss_cred_id_t INITIATOR_CRED_HANDLE, gss_ctx_id_t * CONTEXT_HANDLE, const gss_name_t TARGET_NAME, const gss_OID MECH_TYPE, OM_uint32 REQ_FLAGS, OM_uint32 TIME_REQ, const gss_channel_bindings_t INPUT_CHAN_BINDINGS, const gss_buffer_t INPUT_TOKEN, gss_OID * ACTUAL_MECH_TYPE, gss_buffer_t OUTPUT_TOKEN, OM_uint32 * RET_FLAGS, OM_uint32 * TIME_REC) MINOR_STATUS: (integer, modify) Mechanism specific status code. INITIATOR_CRED_HANDLE: (gss_cred_id_t, read, optional) Handle for credentials claimed. Supply GSS_C_NO_CREDENTIAL to act as a default initiator principal. If no default initiator is defined, the function will return GSS_S_NO_CRED. CONTEXT_HANDLE: (gss_ctx_id_t, read/modify) Context handle for new context. Supply GSS_C_NO_CONTEXT for first call; use value returned by first call in continuation calls. Resources associated with this context-handle must be released by the application after use with a call to gss_delete_sec_context(). TARGET_NAME: (gss_name_t, read) Name of target. MECH_TYPE: (OID, read, optional) Object ID of desired mechanism. Supply GSS_C_NO_OID to obtain an implementation specific default. REQ_FLAGS: (bit-mask, read) Contains various independent flags, each of which requests that the context support a specific service option. Symbolic names are provided for each flag, and the symbolic names corresponding to the required flags should be logically-ORed together to form the bit-mask value. See below for the flags. TIME_REQ: (Integer, read, optional) Desired number of seconds for which context should remain valid. Supply 0 to request a default validity period. INPUT_CHAN_BINDINGS: (channel bindings, read, optional) Application-specified bindings. Allows application to securely bind channel identification information to the security context. Specify GSS_C_NO_CHANNEL_BINDINGS if channel bindings are not used. INPUT_TOKEN: (buffer, opaque, read, optional) Token received from peer application. Supply GSS_C_NO_BUFFER, or a pointer to a buffer containing the value GSS_C_EMPTY_BUFFER on initial call. ACTUAL_MECH_TYPE: (OID, modify, optional) Actual mechanism used. The OID returned via this parameter will be a pointer to static storage that should be treated as read-only; In particular the application should not attempt to free it. Specify NULL if not required. OUTPUT_TOKEN: (buffer, opaque, modify) Token to be sent to peer application. If the length field of the returned buffer is zero, no token need be sent to the peer application. Storage associated with this buffer must be freed by the application after use with a call to gss_release_buffer(). RET_FLAGS: (bit-mask, modify, optional) Contains various independent flags, each of which indicates that the context supports a specific service option. Specify NULL if not required. Symbolic names are provided for each flag, and the symbolic names corresponding to the required flags should be logically-ANDed with the ret_flags value to test whether a given option is supported by the context. See below for the flags. TIME_REC: (Integer, modify, optional) Number of seconds for which the context will remain valid. If the implementation does not support context expiration, the value GSS_C_INDEFINITE will be returned. Specify NULL if not required. Initiates the establishment of a security context between the application and a remote peer. Initially, the input_token parameter should be specified either as GSS_C_NO_BUFFER, or as a pointer to a gss_buffer_desc object whose length field contains the value zero. The routine may return a output_token which should be transferred to the peer application, where the peer application will present it to gss_accept_sec_context. If no token need be sent, gss_init_sec_context will indicate this by setting the length field of the output_token argument to zero. To complete the context establishment, one or more reply tokens may be required from the peer application; if so, gss_init_sec_context will return a status containing the supplementary information bit GSS_S_CONTINUE_NEEDED. In this case, gss_init_sec_context should be called again when the reply token is received from the peer application, passing the reply token to gss_init_sec_context via the input_token parameters. Portable applications should be constructed to use the token length and return status to determine whether a token needs to be sent or waited for. Thus a typical portable caller should always invoke gss_init_sec_context within a loop: int context_established = 0; gss_ctx_id_t context_hdl = GSS_C_NO_CONTEXT; ... input_token->length = 0; while (!context_established) { maj_stat = gss_init_sec_context(&min_stat, cred_hdl, &context_hdl, target_name, desired_mech, desired_services, desired_time, input_bindings, input_token, &actual_mech, output_token, &actual_services, &actual_time); if (GSS_ERROR(maj_stat)) { report_error(maj_stat, min_stat); }; if (output_token->length != 0) { send_token_to_peer(output_token); gss_release_buffer(&min_stat, output_token) }; if (GSS_ERROR(maj_stat)) { if (context_hdl != GSS_C_NO_CONTEXT) gss_delete_sec_context(&min_stat, &context_hdl, GSS_C_NO_BUFFER); break; }; if (maj_stat & GSS_S_CONTINUE_NEEDED) { receive_token_from_peer(input_token); } else { context_established = 1; }; }; Whenever the routine returns a major status that includes the value GSS_S_CONTINUE_NEEDED, the context is not fully established and the following restrictions apply to the output parameters: * The value returned via the time_rec parameter is undefined unless the accompanying ret_flags parameter contains the bit GSS_C_PROT_READY_FLAG, indicating that per-message services may be applied in advance of a successful completion status, the value returned via the actual_mech_type parameter is undefined until the routine returns a major status value of GSS_S_COMPLETE. * The values of the GSS_C_DELEG_FLAG, GSS_C_MUTUAL_FLAG, GSS_C_REPLAY_FLAG, GSS_C_SEQUENCE_FLAG, GSS_C_CONF_FLAG, GSS_C_INTEG_FLAG and GSS_C_ANON_FLAG bits returned via the ret_flags parameter should contain the values that the implementation expects would be valid if context establishment were to succeed. In particular, if the application has requested a service such as delegation or anonymous authentication via the req_flags argument, and such a service is unavailable from the underlying mechanism, gss_init_sec_context should generate a token that will not provide the service, and indicate via the ret_flags argument that the service will not be supported. The application may choose to abort the context establishment by calling gss_delete_sec_context (if it cannot continue in the absence of the service), or it may choose to transmit the token and continue context establishment (if the service was merely desired but not mandatory). * The values of the GSS_C_PROT_READY_FLAG and GSS_C_TRANS_FLAG bits within ret_flags should indicate the actual state at the time gss_init_sec_context returns, whether or not the context is fully established. * GSS-API implementations that support per-message protection are encouraged to set the GSS_C_PROT_READY_FLAG in the final ret_flags returned to a caller (i.e. when accompanied by a GSS_S_COMPLETE status code). However, applications should not rely on this behavior as the flag was not defined in Version 1 of the GSS-API. Instead, applications should determine what per-message services are available after a successful context establishment according to the GSS_C_INTEG_FLAG and GSS_C_CONF_FLAG values. * All other bits within the ret_flags argument should be set to zero. If the initial call of gss_init_sec_context() fails, the implementation should not create a context object, and should leave the value of the context_handle parameter set to GSS_C_NO_CONTEXT to indicate this. In the event of a failure on a subsequent call, the implementation is permitted to delete the "half-built" security context (in which case it should set the context_handle parameter to GSS_C_NO_CONTEXT), but the preferred behavior is to leave the security context untouched for the application to delete (using gss_delete_sec_context). During context establishment, the informational status bits GSS_S_OLD_TOKEN and GSS_S_DUPLICATE_TOKEN indicate fatal errors, and GSS-API mechanisms should always return them in association with a routine error of GSS_S_FAILURE. This requirement for pairing did not exist in version 1 of the GSS-API specification, so applications that wish to run over version 1 implementations must special-case these codes. The 'req_flags' values: 'GSS_C_DELEG_FLAG' * True - Delegate credentials to remote peer. * False - Don't delegate. 'GSS_C_MUTUAL_FLAG' * True - Request that remote peer authenticate itself. * False - Authenticate self to remote peer only. 'GSS_C_REPLAY_FLAG' * True - Enable replay detection for messages protected with gss_wrap or gss_get_mic. * False - Don't attempt to detect replayed messages. 'GSS_C_SEQUENCE_FLAG' * True - Enable detection of out-of-sequence protected messages. * False - Don't attempt to detect out-of-sequence messages. 'GSS_C_CONF_FLAG' * True - Request that confidentiality service be made available (via gss_wrap). * False - No per-message confidentiality service is required. 'GSS_C_INTEG_FLAG' * True - Request that integrity service be made available (via gss_wrap or gss_get_mic). * False - No per-message integrity service is required. 'GSS_C_ANON_FLAG' * True - Do not reveal the initiator's identity to the acceptor. * False - Authenticate normally. The 'ret_flags' values: 'GSS_C_DELEG_FLAG' * True - Credentials were delegated to the remote peer. * False - No credentials were delegated. 'GSS_C_MUTUAL_FLAG' * True - The remote peer has authenticated itself. * False - Remote peer has not authenticated itself. 'GSS_C_REPLAY_FLAG' * True - replay of protected messages will be detected. * False - replayed messages will not be detected. 'GSS_C_SEQUENCE_FLAG' * True - out-of-sequence protected messages will be detected. * False - out-of-sequence messages will not be detected. 'GSS_C_CONF_FLAG' * True - Confidentiality service may be invoked by calling gss_wrap routine. * False - No confidentiality service (via gss_wrap) available. gss_wrap will provide message encapsulation, data-origin authentication and integrity services only. 'GSS_C_INTEG_FLAG' * True - Integrity service may be invoked by calling either gss_get_mic or gss_wrap routines. * False - Per-message integrity service unavailable. 'GSS_C_ANON_FLAG' * True - The initiator's identity has not been revealed, and will not be revealed if any emitted token is passed to the acceptor. * False - The initiator's identity has been or will be authenticated normally. 'GSS_C_PROT_READY_FLAG' * True - Protection services (as specified by the states of the GSS_C_CONF_FLAG and GSS_C_INTEG_FLAG) are available for use if the accompanying major status return value is either GSS_S_COMPLETE or GSS_S_CONTINUE_NEEDED. * False - Protection services (as specified by the states of the GSS_C_CONF_FLAG and GSS_C_INTEG_FLAG) are available only if the accompanying major status return value is GSS_S_COMPLETE. 'GSS_C_TRANS_FLAG' * True - The resultant security context may be transferred to other processes via a call to gss_export_sec_context(). * False - The security context is not transferable. All other bits should be set to zero. Return value: 'GSS_S_COMPLETE': Successful completion. 'GSS_S_CONTINUE_NEEDED': Indicates that a token from the peer application is required to complete the context, and that gss_init_sec_context must be called again with that token. 'GSS_S_DEFECTIVE_TOKEN': Indicates that consistency checks performed on the input_token failed. 'GSS_S_DEFECTIVE_CREDENTIAL': Indicates that consistency checks performed on the credential failed. 'GSS_S_NO_CRED': The supplied credentials were not valid for context initiation, or the credential handle did not reference any credentials. 'GSS_S_CREDENTIALS_EXPIRED': The referenced credentials have expired. 'GSS_S_BAD_BINDINGS': The input_token contains different channel bindings to those specified via the input_chan_bindings parameter. 'GSS_S_BAD_SIG': The input_token contains an invalid MIC, or a MIC that could not be verified. 'GSS_S_OLD_TOKEN': The input_token was too old. This is a fatal error during context establishment. 'GSS_S_DUPLICATE_TOKEN': The input_token is valid, but is a duplicate of a token already processed. This is a fatal error during context establishment. 'GSS_S_NO_CONTEXT': Indicates that the supplied context handle did not refer to a valid context. 'GSS_S_BAD_NAMETYPE': The provided target_name parameter contained an invalid or unsupported type of name. 'GSS_S_BAD_NAME': The provided target_name parameter was ill-formed. 'GSS_S_BAD_MECH': The specified mechanism is not supported by the provided credential, or is unrecognized by the implementation. gss_accept_sec_context ---------------------- -- Function: OM_uint32 gss_accept_sec_context (OM_uint32 * MINOR_STATUS, gss_ctx_id_t * CONTEXT_HANDLE, const gss_cred_id_t ACCEPTOR_CRED_HANDLE, const gss_buffer_t INPUT_TOKEN_BUFFER, const gss_channel_bindings_t INPUT_CHAN_BINDINGS, gss_name_t * SRC_NAME, gss_OID * MECH_TYPE, gss_buffer_t OUTPUT_TOKEN, OM_uint32 * RET_FLAGS, OM_uint32 * TIME_REC, gss_cred_id_t * DELEGATED_CRED_HANDLE) MINOR_STATUS: (Integer, modify) Mechanism specific status code. CONTEXT_HANDLE: (gss_ctx_id_t, read/modify) Context handle for new context. Supply GSS_C_NO_CONTEXT for first call; use value returned in subsequent calls. Once gss_accept_sec_context() has returned a value via this parameter, resources have been assigned to the corresponding context, and must be freed by the application after use with a call to gss_delete_sec_context(). ACCEPTOR_CRED_HANDLE: (gss_cred_id_t, read) Credential handle claimed by context acceptor. Specify GSS_C_NO_CREDENTIAL to accept the context as a default principal. If GSS_C_NO_CREDENTIAL is specified, but no default acceptor principal is defined, GSS_S_NO_CRED will be returned. INPUT_TOKEN_BUFFER: (buffer, opaque, read) Token obtained from remote application. INPUT_CHAN_BINDINGS: (channel bindings, read, optional) Application- specified bindings. Allows application to securely bind channel identification information to the security context. If channel bindings are not used, specify GSS_C_NO_CHANNEL_BINDINGS. SRC_NAME: (gss_name_t, modify, optional) Authenticated name of context initiator. After use, this name should be deallocated by passing it to gss_release_name(). If not required, specify NULL. MECH_TYPE: (Object ID, modify, optional) Security mechanism used. The returned OID value will be a pointer into static storage, and should be treated as read-only by the caller (in particular, it does not need to be freed). If not required, specify NULL. OUTPUT_TOKEN: (buffer, opaque, modify) Token to be passed to peer application. If the length field of the returned token buffer is 0, then no token need be passed to the peer application. If a non- zero length field is returned, the associated storage must be freed after use by the application with a call to gss_release_buffer(). RET_FLAGS: (bit-mask, modify, optional) Contains various independent flags, each of which indicates that the context supports a specific service option. If not needed, specify NULL. Symbolic names are provided for each flag, and the symbolic names corresponding to the required flags should be logically-ANDed with the ret_flags value to test whether a given option is supported by the context. See below for the flags. TIME_REC: (Integer, modify, optional) Number of seconds for which the context will remain valid. Specify NULL if not required. DELEGATED_CRED_HANDLE: (gss_cred_id_t, modify, optional credential) Handle for credentials received from context initiator. Only valid if deleg_flag in ret_flags is true, in which case an explicit credential handle (i.e. not GSS_C_NO_CREDENTIAL) will be returned; if deleg_flag is false, gss_accept_sec_context() will set this parameter to GSS_C_NO_CREDENTIAL. If a credential handle is returned, the associated resources must be released by the application after use with a call to gss_release_cred(). Specify NULL if not required. Allows a remotely initiated security context between the application and a remote peer to be established. The routine may return a output_token which should be transferred to the peer application, where the peer application will present it to gss_init_sec_context. If no token need be sent, gss_accept_sec_context will indicate this by setting the length field of the output_token argument to zero. To complete the context establishment, one or more reply tokens may be required from the peer application; if so, gss_accept_sec_context will return a status flag of GSS_S_CONTINUE_NEEDED, in which case it should be called again when the reply token is received from the peer application, passing the token to gss_accept_sec_context via the input_token parameters. Portable applications should be constructed to use the token length and return status to determine whether a token needs to be sent or waited for. Thus a typical portable caller should always invoke gss_accept_sec_context within a loop: gss_ctx_id_t context_hdl = GSS_C_NO_CONTEXT; do { receive_token_from_peer(input_token); maj_stat = gss_accept_sec_context(&min_stat, &context_hdl, cred_hdl, input_token, input_bindings, &client_name, &mech_type, output_token, &ret_flags, &time_rec, &deleg_cred); if (GSS_ERROR(maj_stat)) { report_error(maj_stat, min_stat); }; if (output_token->length != 0) { send_token_to_peer(output_token); gss_release_buffer(&min_stat, output_token); }; if (GSS_ERROR(maj_stat)) { if (context_hdl != GSS_C_NO_CONTEXT) gss_delete_sec_context(&min_stat, &context_hdl, GSS_C_NO_BUFFER); break; }; } while (maj_stat & GSS_S_CONTINUE_NEEDED); Whenever the routine returns a major status that includes the value GSS_S_CONTINUE_NEEDED, the context is not fully established and the following restrictions apply to the output parameters: The value returned via the time_rec parameter is undefined Unless the accompanying ret_flags parameter contains the bit GSS_C_PROT_READY_FLAG, indicating that per-message services may be applied in advance of a successful completion status, the value returned via the mech_type parameter may be undefined until the routine returns a major status value of GSS_S_COMPLETE. The values of the GSS_C_DELEG_FLAG, GSS_C_MUTUAL_FLAG,GSS_C_REPLAY_FLAG, GSS_C_SEQUENCE_FLAG, GSS_C_CONF_FLAG,GSS_C_INTEG_FLAG and GSS_C_ANON_FLAG bits returned via the ret_flags parameter should contain the values that the implementation expects would be valid if context establishment were to succeed. The values of the GSS_C_PROT_READY_FLAG and GSS_C_TRANS_FLAG bits within ret_flags should indicate the actual state at the time gss_accept_sec_context returns, whether or not the context is fully established. Although this requires that GSS-API implementations set the GSS_C_PROT_READY_FLAG in the final ret_flags returned to a caller (i.e. when accompanied by a GSS_S_COMPLETE status code), applications should not rely on this behavior as the flag was not defined in Version 1 of the GSS-API. Instead, applications should be prepared to use per-message services after a successful context establishment, according to the GSS_C_INTEG_FLAG and GSS_C_CONF_FLAG values. All other bits within the ret_flags argument should be set to zero. While the routine returns GSS_S_CONTINUE_NEEDED, the values returned via the ret_flags argument indicate the services that the implementation expects to be available from the established context. If the initial call of gss_accept_sec_context() fails, the implementation should not create a context object, and should leave the value of the context_handle parameter set to GSS_C_NO_CONTEXT to indicate this. In the event of a failure on a subsequent call, the implementation is permitted to delete the "half-built" security context (in which case it should set the context_handle parameter to GSS_C_NO_CONTEXT), but the preferred behavior is to leave the security context (and the context_handle parameter) untouched for the application to delete (using gss_delete_sec_context). During context establishment, the informational status bits GSS_S_OLD_TOKEN and GSS_S_DUPLICATE_TOKEN indicate fatal errors, and GSS-API mechanisms should always return them in association with a routine error of GSS_S_FAILURE. This requirement for pairing did not exist in version 1 of the GSS-API specification, so applications that wish to run over version 1 implementations must special-case these codes. The 'ret_flags' values: 'GSS_C_DELEG_FLAG' * True - Delegated credentials are available via the delegated_cred_handle parameter. * False - No credentials were delegated. 'GSS_C_MUTUAL_FLAG' * True - Remote peer asked for mutual authentication. * False - Remote peer did not ask for mutual authentication. 'GSS_C_REPLAY_FLAG' * True - replay of protected messages will be detected. * False - replayed messages will not be detected. 'GSS_C_SEQUENCE_FLAG' * True - out-of-sequence protected messages will be detected. * False - out-of-sequence messages will not be detected. 'GSS_C_CONF_FLAG' * True - Confidentiality service may be invoked by calling the gss_wrap routine. * False - No confidentiality service (via gss_wrap) available. gss_wrap will provide message encapsulation, data-origin authentication and integrity services only. 'GSS_C_INTEG_FLAG' * True - Integrity service may be invoked by calling either gss_get_mic or gss_wrap routines. * False - Per-message integrity service unavailable. 'GSS_C_ANON_FLAG' * True - The initiator does not wish to be authenticated; the src_name parameter (if requested) contains an anonymous internal name. * False - The initiator has been authenticated normally. 'GSS_C_PROT_READY_FLAG' * True - Protection services (as specified by the states of the GSS_C_CONF_FLAG and GSS_C_INTEG_FLAG) are available if the accompanying major status return value is either GSS_S_COMPLETE or GSS_S_CONTINUE_NEEDED. * False - Protection services (as specified by the states of the GSS_C_CONF_FLAG and GSS_C_INTEG_FLAG) are available only if the accompanying major status return value is GSS_S_COMPLETE. 'GSS_C_TRANS_FLAG' * True - The resultant security context may be transferred to other processes via a call to gss_export_sec_context(). * False - The security context is not transferable. All other bits should be set to zero. Return value: 'GSS_S_CONTINUE_NEEDED': Indicates that a token from the peer application is required to complete the context, and that gss_accept_sec_context must be called again with that token. 'GSS_S_DEFECTIVE_TOKEN': Indicates that consistency checks performed on the input_token failed. 'GSS_S_DEFECTIVE_CREDENTIAL': Indicates that consistency checks performed on the credential failed. 'GSS_S_NO_CRED': The supplied credentials were not valid for context acceptance, or the credential handle did not reference any credentials. 'GSS_S_CREDENTIALS_EXPIRED': The referenced credentials have expired. 'GSS_S_BAD_BINDINGS': The input_token contains different channel bindings to those specified via the input_chan_bindings parameter. 'GSS_S_NO_CONTEXT': Indicates that the supplied context handle did not refer to a valid context. 'GSS_S_BAD_SIG': The input_token contains an invalid MIC. 'GSS_S_OLD_TOKEN': The input_token was too old. This is a fatal error during context establishment. 'GSS_S_DUPLICATE_TOKEN': The input_token is valid, but is a duplicate of a token already processed. This is a fatal error during context establishment. 'GSS_S_BAD_MECH': The received token specified a mechanism that is not supported by the implementation or the provided credential. gss_delete_sec_context ---------------------- -- Function: OM_uint32 gss_delete_sec_context (OM_uint32 * MINOR_STATUS, gss_ctx_id_t * CONTEXT_HANDLE, gss_buffer_t OUTPUT_TOKEN) MINOR_STATUS: (Integer, modify) Mechanism specific status code. CONTEXT_HANDLE: (gss_ctx_id_t, modify) Context handle identifying context to delete. After deleting the context, the GSS-API will set this context handle to GSS_C_NO_CONTEXT. OUTPUT_TOKEN: (buffer, opaque, modify, optional) Token to be sent to remote application to instruct it to also delete the context. It is recommended that applications specify GSS_C_NO_BUFFER for this parameter, requesting local deletion only. If a buffer parameter is provided by the application, the mechanism may return a token in it; mechanisms that implement only local deletion should set the length field of this token to zero to indicate to the application that no token is to be sent to the peer. Delete a security context. gss_delete_sec_context will delete the local data structures associated with the specified security context, and may generate an output_token, which when passed to the peer gss_process_context_token will instruct it to do likewise. If no token is required by the mechanism, the GSS-API should set the length field of the output_token (if provided) to zero. No further security services may be obtained using the context specified by context_handle. In addition to deleting established security contexts, gss_delete_sec_context must also be able to delete "half-built" security contexts resulting from an incomplete sequence of gss_init_sec_context()/gss_accept_sec_context() calls. The output_token parameter is retained for compatibility with version 1 of the GSS-API. It is recommended that both peer applications invoke gss_delete_sec_context passing the value GSS_C_NO_BUFFER for the output_token parameter, indicating that no token is required, and that gss_delete_sec_context should simply delete local context data structures. If the application does pass a valid buffer to gss_delete_sec_context, mechanisms are encouraged to return a zero-length token, indicating that no peer action is necessary, and that no token should be transferred by the application. Return value: 'GSS_S_COMPLETE': Successful completion. 'GSS_S_NO_CONTEXT': No valid context was supplied. gss_process_context_token ------------------------- -- Function: OM_uint32 gss_process_context_token (OM_uint32 * MINOR_STATUS, const gss_ctx_id_t CONTEXT_HANDLE, const gss_buffer_t TOKEN_BUFFER) MINOR_STATUS: (Integer, modify) Implementation specific status code. CONTEXT_HANDLE: (gss_ctx_id_t, read) Context handle of context on which token is to be processed TOKEN_BUFFER: (buffer, opaque, read) Token to process. Provides a way to pass an asynchronous token to the security service. Most context-level tokens are emitted and processed synchronously by gss_init_sec_context and gss_accept_sec_context, and the application is informed as to whether further tokens are expected by the GSS_C_CONTINUE_NEEDED major status bit. Occasionally, a mechanism may need to emit a context-level token at a point when the peer entity is not expecting a token. For example, the initiator's final call to gss_init_sec_context may emit a token and return a status of GSS_S_COMPLETE, but the acceptor's call to gss_accept_sec_context may fail. The acceptor's mechanism may wish to send a token containing an error indication to the initiator, but the initiator is not expecting a token at this point, believing that the context is fully established. Gss_process_context_token provides a way to pass such a token to the mechanism at any time. Return value: 'GSS_S_COMPLETE': Successful completion. 'GSS_S_DEFECTIVE_TOKEN': Indicates that consistency checks performed on the token failed. 'GSS_S_NO_CONTEXT': The context_handle did not refer to a valid context. gss_context_time ---------------- -- Function: OM_uint32 gss_context_time (OM_uint32 * MINOR_STATUS, const gss_ctx_id_t CONTEXT_HANDLE, OM_uint32 * TIME_REC) MINOR_STATUS: (Integer, modify) Implementation specific status code. CONTEXT_HANDLE: (gss_ctx_id_t, read) Identifies the context to be interrogated. TIME_REC: (Integer, modify) Number of seconds that the context will remain valid. If the context has already expired, zero will be returned. Determines the number of seconds for which the specified context will remain valid. Return value: 'GSS_S_COMPLETE': Successful completion. 'GSS_S_CONTEXT_EXPIRED': The context has already expired. 'GSS_S_NO_CONTEXT': The context_handle parameter did not identify a valid context gss_inquire_context ------------------- -- Function: OM_uint32 gss_inquire_context (OM_uint32 * MINOR_STATUS, const gss_ctx_id_t CONTEXT_HANDLE, gss_name_t * SRC_NAME, gss_name_t * TARG_NAME, OM_uint32 * LIFETIME_REC, gss_OID * MECH_TYPE, OM_uint32 * CTX_FLAGS, int * LOCALLY_INITIATED, int * OPEN) MINOR_STATUS: (Integer, modify) Mechanism specific status code. CONTEXT_HANDLE: (gss_ctx_id_t, read) A handle that refers to the security context. SRC_NAME: (gss_name_t, modify, optional) The name of the context initiator. If the context was established using anonymous authentication, and if the application invoking gss_inquire_context is the context acceptor, an anonymous name will be returned. Storage associated with this name must be freed by the application after use with a call to gss_release_name(). Specify NULL if not required. TARG_NAME: (gss_name_t, modify, optional) The name of the context acceptor. Storage associated with this name must be freed by the application after use with a call to gss_release_name(). If the context acceptor did not authenticate itself, and if the initiator did not specify a target name in its call to gss_init_sec_context(), the value GSS_C_NO_NAME will be returned. Specify NULL if not required. LIFETIME_REC: (Integer, modify, optional) The number of seconds for which the context will remain valid. If the context has expired, this parameter will be set to zero. If the implementation does not support context expiration, the value GSS_C_INDEFINITE will be returned. Specify NULL if not required. MECH_TYPE: (gss_OID, modify, optional) The security mechanism providing the context. The returned OID will be a pointer to static storage that should be treated as read-only by the application; in particular the application should not attempt to free it. Specify NULL if not required. CTX_FLAGS: (bit-mask, modify, optional) Contains various independent flags, each of which indicates that the context supports (or is expected to support, if ctx_open is false) a specific service option. If not needed, specify NULL. Symbolic names are provided for each flag, and the symbolic names corresponding to the required flags should be logically-ANDed with the ret_flags value to test whether a given option is supported by the context. See below for the flags. LOCALLY_INITIATED: (Boolean, modify) Non-zero if the invoking application is the context initiator. Specify NULL if not required. OPEN: (Boolean, modify) Non-zero if the context is fully established; Zero if a context-establishment token is expected from the peer application. Specify NULL if not required. Obtains information about a security context. The caller must already have obtained a handle that refers to the context, although the context need not be fully established. The 'ctx_flags' values: 'GSS_C_DELEG_FLAG' * True - Credentials were delegated from the initiator to the acceptor. * False - No credentials were delegated. 'GSS_C_MUTUAL_FLAG' * True - The acceptor was authenticated to the initiator. * False - The acceptor did not authenticate itself. 'GSS_C_REPLAY_FLAG' * True - replay of protected messages will be detected. * False - replayed messages will not be detected. 'GSS_C_SEQUENCE_FLAG' * True - out-of-sequence protected messages will be detected. * False - out-of-sequence messages will not be detected. 'GSS_C_CONF_FLAG' * True - Confidentiality service may be invoked by calling gss_wrap routine. * False - No confidentiality service (via gss_wrap) available. gss_wrap will provide message encapsulation, data-origin authentication and integrity services only. 'GSS_C_INTEG_FLAG' * True - Integrity service may be invoked by calling either gss_get_mic or gss_wrap routines. * False - Per-message integrity service unavailable. 'GSS_C_ANON_FLAG' * True - The initiator's identity will not be revealed to the acceptor. The src_name parameter (if requested) contains an anonymous internal name. * False - The initiator has been authenticated normally. 'GSS_C_PROT_READY_FLAG' * True - Protection services (as specified by the states of the GSS_C_CONF_FLAG and GSS_C_INTEG_FLAG) are available for use. * False - Protection services (as specified by the states of the GSS_C_CONF_FLAG and GSS_C_INTEG_FLAG) are available only if the context is fully established (i.e. if the open parameter is non-zero). 'GSS_C_TRANS_FLAG' * True - The resultant security context may be transferred to other processes via a call to gss_export_sec_context(). * False - The security context is not transferable. Return value: 'GSS_S_COMPLETE': Successful completion. 'GSS_S_NO_CONTEXT': The referenced context could not be accessed. gss_wrap_size_limit ------------------- -- Function: OM_uint32 gss_wrap_size_limit (OM_uint32 * MINOR_STATUS, const gss_ctx_id_t CONTEXT_HANDLE, int CONF_REQ_FLAG, gss_qop_t QOP_REQ, OM_uint32 REQ_OUTPUT_SIZE, OM_uint32 * MAX_INPUT_SIZE) MINOR_STATUS: (Integer, modify) Mechanism specific status code. CONTEXT_HANDLE: (gss_ctx_id_t, read) A handle that refers to the security over which the messages will be sent. CONF_REQ_FLAG: (Boolean, read) Indicates whether gss_wrap will be asked to apply confidentiality protection in addition to integrity protection. See the routine description for gss_wrap for more details. QOP_REQ: (gss_qop_t, read) Indicates the level of protection that gss_wrap will be asked to provide. See the routine description for gss_wrap for more details. REQ_OUTPUT_SIZE: (Integer, read) The desired maximum size for tokens emitted by gss_wrap. MAX_INPUT_SIZE: (Integer, modify) The maximum input message size that may be presented to gss_wrap in order to guarantee that the emitted token shall be no larger than req_output_size bytes. Allows an application to determine the maximum message size that, if presented to gss_wrap with the same conf_req_flag and qop_req parameters, will result in an output token containing no more than req_output_size bytes. This call is intended for use by applications that communicate over protocols that impose a maximum message size. It enables the application to fragment messages prior to applying protection. GSS-API implementations are recommended but not required to detect invalid QOP values when gss_wrap_size_limit() is called. This routine guarantees only a maximum message size, not the availability of specific QOP values for message protection. Successful completion of this call does not guarantee that gss_wrap will be able to protect a message of length max_input_size bytes, since this ability may depend on the availability of system resources at the time that gss_wrap is called. However, if the implementation itself imposes an upper limit on the length of messages that may be processed by gss_wrap, the implementation should not return a value via max_input_bytes that is greater than this length. Return value: 'GSS_S_COMPLETE': Successful completion. 'GSS_S_NO_CONTEXT': The referenced context could not be accessed. 'GSS_S_CONTEXT_EXPIRED': The context has expired. 'GSS_S_BAD_QOP': The specified QOP is not supported by the mechanism. gss_export_sec_context ---------------------- -- Function: OM_uint32 gss_export_sec_context (OM_uint32 * MINOR_STATUS, gss_ctx_id_t * CONTEXT_HANDLE, gss_buffer_t INTERPROCESS_TOKEN) MINOR_STATUS: (Integer, modify) Mechanism specific status code. CONTEXT_HANDLE: (gss_ctx_id_t, modify) Context handle identifying the context to transfer. INTERPROCESS_TOKEN: (buffer, opaque, modify) Token to be transferred to target process. Storage associated with this token must be freed by the application after use with a call to gss_release_buffer(). Provided to support the sharing of work between multiple processes. This routine will typically be used by the context-acceptor, in an application where a single process receives incoming connection requests and accepts security contexts over them, then passes the established context to one or more other processes for message exchange. gss_export_sec_context() deactivates the security context for the calling process and creates an interprocess token which, when passed to gss_import_sec_context in another process, will re-activate the context in the second process. Only a single instantiation of a given context may be active at any one time; a subsequent attempt by a context exporter to access the exported security context will fail. The implementation may constrain the set of processes by which the interprocess token may be imported, either as a function of local security policy, or as a result of implementation decisions. For example, some implementations may constrain contexts to be passed only between processes that run under the same account, or which are part of the same process group. The interprocess token may contain security-sensitive information (for example cryptographic keys). While mechanisms are encouraged to either avoid placing such sensitive information within interprocess tokens, or to encrypt the token before returning it to the application, in a typical object-library GSS-API implementation this may not be possible. Thus the application must take care to protect the interprocess token, and ensure that any process to which the token is transferred is trustworthy. If creation of the interprocess token is successful, the implementation shall deallocate all process-wide resources associated with the security context, and set the context_handle to GSS_C_NO_CONTEXT. In the event of an error that makes it impossible to complete the export of the security context, the implementation must not return an interprocess token, and should strive to leave the security context referenced by the context_handle parameter untouched. If this is impossible, it is permissible for the implementation to delete the security context, providing it also sets the context_handle parameter to GSS_C_NO_CONTEXT. Return value: 'GSS_S_COMPLETE': Successful completion. 'GSS_S_CONTEXT_EXPIRED': The context has expired. 'GSS_S_NO_CONTEXT': The context was invalid. 'GSS_S_UNAVAILABLE': The operation is not supported. gss_import_sec_context ---------------------- -- Function: OM_uint32 gss_import_sec_context (OM_uint32 * MINOR_STATUS, const gss_buffer_t INTERPROCESS_TOKEN, gss_ctx_id_t * CONTEXT_HANDLE) MINOR_STATUS: (Integer, modify) Mechanism specific status code. INTERPROCESS_TOKEN: (buffer, opaque, modify) Token received from exporting process CONTEXT_HANDLE: (gss_ctx_id_t, modify) Context handle of newly reactivated context. Resources associated with this context handle must be released by the application after use with a call to gss_delete_sec_context(). Allows a process to import a security context established by another process. A given interprocess token may be imported only once. See gss_export_sec_context. Return value: 'GSS_S_COMPLETE': Successful completion. 'GSS_S_NO_CONTEXT': The token did not contain a valid context reference. 'GSS_S_DEFECTIVE_TOKEN': The token was invalid. 'GSS_S_UNAVAILABLE': The operation is unavailable. 'GSS_S_UNAUTHORIZED': Local policy prevents the import of this context by the current process.  File: gss.info, Node: Per-Message Routines, Next: Name Manipulation, Prev: Context-Level Routines, Up: Standard GSS API 3.7 Per-Message Routines ======================== GSS-API Per-message Routines Routine Function ------- -------- gss_get_mic Calculate a cryptographic message integrity code (MIC) for a message; integrity service. gss_verify_mic Check a MIC against a message; verify integrity of a received message. gss_wrap Attach a MIC to a message, and optionally encrypt the message content. confidentiality service gss_unwrap Verify a message with attached MIC, and decrypt message content if necessary. gss_get_mic ----------- -- Function: OM_uint32 gss_get_mic (OM_uint32 * MINOR_STATUS, const gss_ctx_id_t CONTEXT_HANDLE, gss_qop_t QOP_REQ, const gss_buffer_t MESSAGE_BUFFER, gss_buffer_t MESSAGE_TOKEN) MINOR_STATUS: (Integer, modify) Mechanism specific status code. CONTEXT_HANDLE: (gss_ctx_id_t, read) Identifies the context on which the message will be sent. QOP_REQ: (gss_qop_t, read, optional) Specifies requested quality of protection. Callers are encouraged, on portability grounds, to accept the default quality of protection offered by the chosen mechanism, which may be requested by specifying GSS_C_QOP_DEFAULT for this parameter. If an unsupported protection strength is requested, gss_get_mic will return a major_status of GSS_S_BAD_QOP. MESSAGE_BUFFER: (buffer, opaque, read) Message to be protected. MESSAGE_TOKEN: (buffer, opaque, modify) Buffer to receive token. The application must free storage associated with this buffer after use with a call to gss_release_buffer(). Generates a cryptographic MIC for the supplied message, and places the MIC in a token for transfer to the peer application. The qop_req parameter allows a choice between several cryptographic algorithms, if supported by the chosen mechanism. Since some application-level protocols may wish to use tokens emitted by gss_wrap() to provide "secure framing", implementations must support derivation of MICs from zero-length messages. Return value: 'GSS_S_COMPLETE': Successful completion. 'GSS_S_CONTEXT_EXPIRED': The context has already expired. 'GSS_S_NO_CONTEXT': The context_handle parameter did not identify a valid context. 'GSS_S_BAD_QOP': The specified QOP is not supported by the mechanism. gss_verify_mic -------------- -- Function: OM_uint32 gss_verify_mic (OM_uint32 * MINOR_STATUS, const gss_ctx_id_t CONTEXT_HANDLE, const gss_buffer_t MESSAGE_BUFFER, const gss_buffer_t TOKEN_BUFFER, gss_qop_t * QOP_STATE) MINOR_STATUS: (Integer, modify) Mechanism specific status code. CONTEXT_HANDLE: (gss_ctx_id_t, read) Identifies the context on which the message arrived. MESSAGE_BUFFER: (buffer, opaque, read) Message to be verified. TOKEN_BUFFER: (buffer, opaque, read) Token associated with message. QOP_STATE: (gss_qop_t, modify, optional) Quality of protection gained from MIC Specify NULL if not required. Verifies that a cryptographic MIC, contained in the token parameter, fits the supplied message. The qop_state parameter allows a message recipient to determine the strength of protection that was applied to the message. Since some application-level protocols may wish to use tokens emitted by gss_wrap() to provide "secure framing", implementations must support the calculation and verification of MICs over zero-length messages. Return value: 'GSS_S_COMPLETE': Successful completion. 'GSS_S_DEFECTIVE_TOKEN': The token failed consistency checks. 'GSS_S_BAD_SIG': The MIC was incorrect. 'GSS_S_DUPLICATE_TOKEN': The token was valid, and contained a correct MIC for the message, but it had already been processed. 'GSS_S_OLD_TOKEN': The token was valid, and contained a correct MIC for the message, but it is too old to check for duplication. 'GSS_S_UNSEQ_TOKEN': The token was valid, and contained a correct MIC for the message, but has been verified out of sequence; a later token has already been received. 'GSS_S_GAP_TOKEN': The token was valid, and contained a correct MIC for the message, but has been verified out of sequence; an earlier expected token has not yet been received. 'GSS_S_CONTEXT_EXPIRED': The context has already expired. 'GSS_S_NO_CONTEXT': The context_handle parameter did not identify a valid context. gss_wrap -------- -- Function: OM_uint32 gss_wrap (OM_uint32 * MINOR_STATUS, const gss_ctx_id_t CONTEXT_HANDLE, int CONF_REQ_FLAG, gss_qop_t QOP_REQ, const gss_buffer_t INPUT_MESSAGE_BUFFER, int * CONF_STATE, gss_buffer_t OUTPUT_MESSAGE_BUFFER) MINOR_STATUS: (Integer, modify) Mechanism specific status code. CONTEXT_HANDLE: (gss_ctx_id_t, read) Identifies the context on which the message will be sent. CONF_REQ_FLAG: (boolean, read) Non-zero - Both confidentiality and integrity services are requested. Zero - Only integrity service is requested. QOP_REQ: (gss_qop_t, read, optional) Specifies required quality of protection. A mechanism-specific default may be requested by setting qop_req to GSS_C_QOP_DEFAULT. If an unsupported protection strength is requested, gss_wrap will return a major_status of GSS_S_BAD_QOP. INPUT_MESSAGE_BUFFER: (buffer, opaque, read) Message to be protected. CONF_STATE: (boolean, modify, optional) Non-zero - Confidentiality, data origin authentication and integrity services have been applied. Zero - Integrity and data origin services only has been applied. Specify NULL if not required. OUTPUT_MESSAGE_BUFFER: (buffer, opaque, modify) Buffer to receive protected message. Storage associated with this message must be freed by the application after use with a call to gss_release_buffer(). Attaches a cryptographic MIC and optionally encrypts the specified input_message. The output_message contains both the MIC and the message. The qop_req parameter allows a choice between several cryptographic algorithms, if supported by the chosen mechanism. Since some application-level protocols may wish to use tokens emitted by gss_wrap() to provide "secure framing", implementations must support the wrapping of zero-length messages. Return value: 'GSS_S_COMPLETE': Successful completion. 'GSS_S_CONTEXT_EXPIRED': The context has already expired. 'GSS_S_NO_CONTEXT': The context_handle parameter did not identify a valid context. 'GSS_S_BAD_QOP': The specified QOP is not supported by the mechanism. gss_unwrap ---------- -- Function: OM_uint32 gss_unwrap (OM_uint32 * MINOR_STATUS, const gss_ctx_id_t CONTEXT_HANDLE, const gss_buffer_t INPUT_MESSAGE_BUFFER, gss_buffer_t OUTPUT_MESSAGE_BUFFER, int * CONF_STATE, gss_qop_t * QOP_STATE) MINOR_STATUS: (Integer, modify) Mechanism specific status code. CONTEXT_HANDLE: (gss_ctx_id_t, read) Identifies the context on which the message arrived. INPUT_MESSAGE_BUFFER: (buffer, opaque, read) Protected message. OUTPUT_MESSAGE_BUFFER: (buffer, opaque, modify) Buffer to receive unwrapped message. Storage associated with this buffer must be freed by the application after use use with a call to gss_release_buffer(). CONF_STATE: (boolean, modify, optional) Non-zero - Confidentiality and integrity protection were used. Zero - Integrity service only was used. Specify NULL if not required. QOP_STATE: (gss_qop_t, modify, optional) Quality of protection provided. Specify NULL if not required. Converts a message previously protected by gss_wrap back to a usable form, verifying the embedded MIC. The conf_state parameter indicates whether the message was encrypted; the qop_state parameter indicates the strength of protection that was used to provide the confidentiality and integrity services. Since some application-level protocols may wish to use tokens emitted by gss_wrap() to provide "secure framing", implementations must support the wrapping and unwrapping of zero-length messages. Return value: 'GSS_S_COMPLETE': Successful completion. 'GSS_S_DEFECTIVE_TOKEN': The token failed consistency checks. 'GSS_S_BAD_SIG': The MIC was incorrect. 'GSS_S_DUPLICATE_TOKEN': The token was valid, and contained a correct MIC for the message, but it had already been processed. 'GSS_S_OLD_TOKEN': The token was valid, and contained a correct MIC for the message, but it is too old to check for duplication. 'GSS_S_UNSEQ_TOKEN': The token was valid, and contained a correct MIC for the message, but has been verified out of sequence; a later token has already been received. 'GSS_S_GAP_TOKEN': The token was valid, and contained a correct MIC for the message, but has been verified out of sequence; an earlier expected token has not yet been received. 'GSS_S_CONTEXT_EXPIRED': The context has already expired. 'GSS_S_NO_CONTEXT': The context_handle parameter did not identify a valid context.  File: gss.info, Node: Name Manipulation, Next: Miscellaneous Routines, Prev: Per-Message Routines, Up: Standard GSS API 3.8 Name Manipulation ===================== GSS-API Name manipulation Routines Routine Function ------- -------- gss_import_name Convert a contiguous string name to internal-form. gss_display_name Convert internal-form name to text. gss_compare_name Compare two internal-form names. gss_release_name Discard an internal-form name. gss_inquire_names_for_mech List the name-types supported by. the specified mechanism. gss_inquire_mechs_for_name List mechanisms that support the specified name-type. gss_canonicalize_name Convert an internal name to an MN. gss_export_name Convert an MN to export form. gss_duplicate_name Create a copy of an internal name. gss_import_name --------------- -- Function: OM_uint32 gss_import_name (OM_uint32 * MINOR_STATUS, const gss_buffer_t INPUT_NAME_BUFFER, const gss_OID INPUT_NAME_TYPE, gss_name_t * OUTPUT_NAME) MINOR_STATUS: (Integer, modify) Mechanism specific status code. INPUT_NAME_BUFFER: (buffer, octet-string, read) Buffer containing contiguous string name to convert. INPUT_NAME_TYPE: (Object ID, read, optional) Object ID specifying type of printable name. Applications may specify either GSS_C_NO_OID to use a mechanism-specific default printable syntax, or an OID recognized by the GSS-API implementation to name a specific namespace. OUTPUT_NAME: (gss_name_t, modify) Returned name in internal form. Storage associated with this name must be freed by the application after use with a call to gss_release_name(). Convert a contiguous string name to internal form. In general, the internal name returned (via the @output_name parameter) will not be an MN; the exception to this is if the @input_name_type indicates that the contiguous string provided via the @input_name_buffer parameter is of type GSS_C_NT_EXPORT_NAME, in which case the returned internal name will be an MN for the mechanism that exported the name. Return value: 'GSS_S_COMPLETE': Successful completion. 'GSS_S_BAD_NAMETYPE': The input_name_type was unrecognized. 'GSS_S_BAD_NAME': The input_name parameter could not be interpreted as a name of the specified type. 'GSS_S_BAD_MECH': The input name-type was GSS_C_NT_EXPORT_NAME, but the mechanism contained within the input-name is not supported. gss_display_name ---------------- -- Function: OM_uint32 gss_display_name (OM_uint32 * MINOR_STATUS, const gss_name_t INPUT_NAME, gss_buffer_t OUTPUT_NAME_BUFFER, gss_OID * OUTPUT_NAME_TYPE) MINOR_STATUS: (Integer, modify) Mechanism specific status code. INPUT_NAME: (gss_name_t, read) Name to be displayed. OUTPUT_NAME_BUFFER: (buffer, character-string, modify) Buffer to receive textual name string. The application must free storage associated with this name after use with a call to gss_release_buffer(). OUTPUT_NAME_TYPE: (Object ID, modify, optional) The type of the returned name. The returned gss_OID will be a pointer into static storage, and should be treated as read-only by the caller (in particular, the application should not attempt to free it). Specify NULL if not required. Allows an application to obtain a textual representation of an opaque internal-form name for display purposes. The syntax of a printable name is defined by the GSS-API implementation. If input_name denotes an anonymous principal, the implementation should return the gss_OID value GSS_C_NT_ANONYMOUS as the output_name_type, and a textual name that is syntactically distinct from all valid supported printable names in output_name_buffer. If input_name was created by a call to gss_import_name, specifying GSS_C_NO_OID as the name-type, implementations that employ lazy conversion between name types may return GSS_C_NO_OID via the output_name_type parameter. Return value: 'GSS_S_COMPLETE': Successful completion. 'GSS_S_BAD_NAME': @input_name was ill-formed. gss_compare_name ---------------- -- Function: OM_uint32 gss_compare_name (OM_uint32 * MINOR_STATUS, const gss_name_t NAME1, const gss_name_t NAME2, int * NAME_EQUAL) MINOR_STATUS: (Integer, modify) Mechanism specific status code. NAME1: (gss_name_t, read) Internal-form name. NAME2: (gss_name_t, read) Internal-form name. NAME_EQUAL: (boolean, modify) Non-zero - names refer to same entity. Zero - names refer to different entities (strictly, the names are not known to refer to the same identity). Allows an application to compare two internal-form names to determine whether they refer to the same entity. If either name presented to gss_compare_name denotes an anonymous principal, the routines should indicate that the two names do not refer to the same identity. Return value: 'GSS_S_COMPLETE': Successful completion. 'GSS_S_BAD_NAMETYPE': The two names were of incomparable types. 'GSS_S_BAD_NAME': One or both of name1 or name2 was ill-formed. gss_release_name ---------------- -- Function: OM_uint32 gss_release_name (OM_uint32 * MINOR_STATUS, gss_name_t * NAME) MINOR_STATUS: (Integer, modify) Mechanism specific status code. NAME: (gss_name_t, modify) The name to be deleted. Free GSSAPI-allocated storage associated with an internal-form name. The name is set to GSS_C_NO_NAME on successful completion of this call. Return value: 'GSS_S_COMPLETE': Successful completion. 'GSS_S_BAD_NAME': The name parameter did not contain a valid name. gss_inquire_names_for_mech -------------------------- -- Function: OM_uint32 gss_inquire_names_for_mech (OM_uint32 * MINOR_STATUS, const gss_OID MECHANISM, gss_OID_set * NAME_TYPES) MINOR_STATUS: (Integer, modify) Mechanism specific status code. MECHANISM: (gss_OID, read) The mechanism to be interrogated. NAME_TYPES: (gss_OID_set, modify) Set of name-types supported by the specified mechanism. The returned OID set must be freed by the application after use with a call to gss_release_oid_set(). Returns the set of nametypes supported by the specified mechanism. Return value: 'GSS_S_COMPLETE': Successful completion. gss_inquire_mechs_for_name -------------------------- -- Function: OM_uint32 gss_inquire_mechs_for_name (OM_uint32 * MINOR_STATUS, const gss_name_t INPUT_NAME, gss_OID_set * MECH_TYPES) MINOR_STATUS: (Integer, modify) Mechanism specific status code. INPUT_NAME: (gss_name_t, read) The name to which the inquiry relates. MECH_TYPES: (gss_OID_set, modify) Set of mechanisms that may support the specified name. The returned OID set must be freed by the caller after use with a call to gss_release_oid_set(). Returns the set of mechanisms supported by the GSS-API implementation that may be able to process the specified name. Each mechanism returned will recognize at least one element within the name. It is permissible for this routine to be implemented within a mechanism-independent GSS-API layer, using the type information contained within the presented name, and based on registration information provided by individual mechanism implementations. This means that the returned mech_types set may indicate that a particular mechanism will understand the name when in fact it would refuse to accept the name as input to gss_canonicalize_name, gss_init_sec_context, gss_acquire_cred or gss_add_cred (due to some property of the specific name, as opposed to the name type). Thus this routine should be used only as a prefilter for a call to a subsequent mechanism-specific routine. Return value: 'GSS_S_COMPLETE': Successful completion. 'GSS_S_BAD_NAME': The input_name parameter was ill-formed. 'GSS_S_BAD_NAMETYPE': The input_name parameter contained an invalid or unsupported type of name. gss_canonicalize_name --------------------- -- Function: OM_uint32 gss_canonicalize_name (OM_uint32 * MINOR_STATUS, const gss_name_t INPUT_NAME, const gss_OID MECH_TYPE, gss_name_t * OUTPUT_NAME) MINOR_STATUS: (Integer, modify) Mechanism specific status code. INPUT_NAME: (gss_name_t, read) The name for which a canonical form is desired. MECH_TYPE: (Object ID, read) The authentication mechanism for which the canonical form of the name is desired. The desired mechanism must be specified explicitly; no default is provided. OUTPUT_NAME: (gss_name_t, modify) The resultant canonical name. Storage associated with this name must be freed by the application after use with a call to gss_release_name(). Generate a canonical mechanism name (MN) from an arbitrary internal name. The mechanism name is the name that would be returned to a context acceptor on successful authentication of a context where the initiator used the input_name in a successful call to gss_acquire_cred, specifying an OID set containing @mech_type as its only member, followed by a call to gss_init_sec_context(), specifying @mech_type as the authentication mechanism. Return value: 'GSS_S_COMPLETE': Successful completion. gss_export_name --------------- -- Function: OM_uint32 gss_export_name (OM_uint32 * MINOR_STATUS, const gss_name_t INPUT_NAME, gss_buffer_t EXPORTED_NAME) MINOR_STATUS: (Integer, modify) Mechanism specific status code. INPUT_NAME: (gss_name_t, read) The MN to be exported. EXPORTED_NAME: (gss_buffer_t, octet-string, modify) The canonical contiguous string form of @input_name. Storage associated with this string must freed by the application after use with gss_release_buffer(). To produce a canonical contiguous string representation of a mechanism name (MN), suitable for direct comparison (e.g. with memcmp) for use in authorization functions (e.g. matching entries in an access-control list). The @input_name parameter must specify a valid MN (i.e. an internal name generated by gss_accept_sec_context() or by gss_canonicalize_name()). Return value: 'GSS_S_COMPLETE': Successful completion. 'GSS_S_NAME_NOT_MN': The provided internal name was not a mechanism name. 'GSS_S_BAD_NAME': The provided internal name was ill-formed. 'GSS_S_BAD_NAMETYPE': The internal name was of a type not supported by the GSS-API implementation. gss_duplicate_name ------------------ -- Function: OM_uint32 gss_duplicate_name (OM_uint32 * MINOR_STATUS, const gss_name_t SRC_NAME, gss_name_t * DEST_NAME) MINOR_STATUS: (Integer, modify) Mechanism specific status code. SRC_NAME: (gss_name_t, read) Internal name to be duplicated. DEST_NAME: (gss_name_t, modify) The resultant copy of @src_name. Storage associated with this name must be freed by the application after use with a call to gss_release_name(). Create an exact duplicate of the existing internal name @src_name. The new @dest_name will be independent of src_name (i.e. @src_name and @dest_name must both be released, and the release of one shall not affect the validity of the other). Return value: 'GSS_S_COMPLETE': Successful completion. 'GSS_S_BAD_NAME': The src_name parameter was ill-formed.  File: gss.info, Node: Miscellaneous Routines, Next: SASL GS2 Routines, Prev: Name Manipulation, Up: Standard GSS API 3.9 Miscellaneous Routines ========================== GSS-API Miscellaneous Routines Routine Function ------- -------- gss_add_oid_set_member Add an object identifier to a set. gss_display_status Convert a GSS-API status code to text. gss_indicate_mechs Determine available underlying authentication mechanisms. gss_release_buffer Discard a buffer. gss_release_oid_set Discard a set of object identifiers. gss_create_empty_oid_set Create a set containing no object identifiers. gss_test_oid_set_member Determines whether an object identifier is a member of a set. gss_encapsulate_token Encapsulate a context token. gss_decapsulate_token Decapsulate a context token. gss_oid_equal Compare two OIDs for equality. gss_add_oid_set_member ---------------------- -- Function: OM_uint32 gss_add_oid_set_member (OM_uint32 * MINOR_STATUS, const gss_OID MEMBER_OID, gss_OID_set * OID_SET) MINOR_STATUS: (integer, modify) Mechanism specific status code. MEMBER_OID: (Object ID, read) The object identifier to copied into the set. OID_SET: (Set of Object ID, modify) The set in which the object identifier should be inserted. Add an Object Identifier to an Object Identifier set. This routine is intended for use in conjunction with gss_create_empty_oid_set when constructing a set of mechanism OIDs for input to gss_acquire_cred. The oid_set parameter must refer to an OID-set that was created by GSS-API (e.g. a set returned by gss_create_empty_oid_set()). GSS-API creates a copy of the member_oid and inserts this copy into the set, expanding the storage allocated to the OID-set's elements array if necessary. The routine may add the new member OID anywhere within the elements array, and implementations should verify that the new member_oid is not already contained within the elements array; if the member_oid is already present, the oid_set should remain unchanged. Return value: 'GSS_S_COMPLETE': Successful completion. gss_display_status ------------------ -- Function: OM_uint32 gss_display_status (OM_uint32 * MINOR_STATUS, OM_uint32 STATUS_VALUE, int STATUS_TYPE, const gss_OID MECH_TYPE, OM_uint32 * MESSAGE_CONTEXT, gss_buffer_t STATUS_STRING) MINOR_STATUS: (integer, modify) Mechanism specific status code. STATUS_VALUE: (Integer, read) Status value to be converted. STATUS_TYPE: (Integer, read) GSS_C_GSS_CODE - status_value is a GSS status code. GSS_C_MECH_CODE - status_value is a mechanism status code. MECH_TYPE: (Object ID, read, optional) Underlying mechanism (used to interpret a minor status value). Supply GSS_C_NO_OID to obtain the system default. MESSAGE_CONTEXT: (Integer, read/modify) Should be initialized to zero by the application prior to the first call. On return from gss_display_status(), a non-zero status_value parameter indicates that additional messages may be extracted from the status code via subsequent calls to gss_display_status(), passing the same status_value, status_type, mech_type, and message_context parameters. STATUS_STRING: (buffer, character string, modify) Textual interpretation of the status_value. Storage associated with this parameter must be freed by the application after use with a call to gss_release_buffer(). Allows an application to obtain a textual representation of a GSS-API status code, for display to the user or for logging purposes. Since some status values may indicate multiple conditions, applications may need to call gss_display_status multiple times, each call generating a single text string. The message_context parameter is used by gss_display_status to store state information about which error messages have already been extracted from a given status_value; message_context must be initialized to 0 by the application prior to the first call, and gss_display_status will return a non-zero value in this parameter if there are further messages to extract. The message_context parameter contains all state information required by gss_display_status in order to extract further messages from the status_value; even when a non-zero value is returned in this parameter, the application is not required to call gss_display_status again unless subsequent messages are desired. The following code extracts all messages from a given status code and prints them to stderr: OM_uint32 message_context; OM_uint32 status_code; OM_uint32 maj_status; OM_uint32 min_status; gss_buffer_desc status_string; ... message_context = 0; do { maj_status = gss_display_status ( &min_status, status_code, GSS_C_GSS_CODE, GSS_C_NO_OID, &message_context, &status_string) fprintf(stderr, "%.*s\n", (int)status_string.length, (char *)status_string.value); gss_release_buffer(&min_status, &status_string); } while (message_context != 0); Return value: 'GSS_S_COMPLETE': Successful completion. 'GSS_S_BAD_MECH': Indicates that translation in accordance with an unsupported mechanism type was requested. 'GSS_S_BAD_STATUS': The status value was not recognized, or the status type was neither GSS_C_GSS_CODE nor GSS_C_MECH_CODE. gss_indicate_mechs ------------------ -- Function: OM_uint32 gss_indicate_mechs (OM_uint32 * MINOR_STATUS, gss_OID_set * MECH_SET) MINOR_STATUS: (integer, modify) Mechanism specific status code. MECH_SET: (set of Object IDs, modify) Set of implementation-supported mechanisms. The returned gss_OID_set value will be a dynamically-allocated OID set, that should be released by the caller after use with a call to gss_release_oid_set(). Allows an application to determine which underlying security mechanisms are available. Return value: 'GSS_S_COMPLETE': Successful completion. gss_release_buffer ------------------ -- Function: OM_uint32 gss_release_buffer (OM_uint32 * MINOR_STATUS, gss_buffer_t BUFFER) MINOR_STATUS: (integer, modify) Mechanism specific status code. BUFFER: (buffer, modify) The storage associated with the buffer will be deleted. The gss_buffer_desc object will not be freed, but its length field will be zeroed. Free storage associated with a buffer. The storage must have been allocated by a GSS-API routine. In addition to freeing the associated storage, the routine will zero the length field in the descriptor to which the buffer parameter refers, and implementations are encouraged to additionally set the pointer field in the descriptor to NULL. Any buffer object returned by a GSS-API routine may be passed to gss_release_buffer (even if there is no storage associated with the buffer). Return value: 'GSS_S_COMPLETE': Successful completion. gss_release_oid_set ------------------- -- Function: OM_uint32 gss_release_oid_set (OM_uint32 * MINOR_STATUS, gss_OID_set * SET) MINOR_STATUS: (integer, modify) Mechanism specific status code. SET: (Set of Object IDs, modify) The storage associated with the gss_OID_set will be deleted. Free storage associated with a GSSAPI-generated gss_OID_set object. The set parameter must refer to an OID-set that was returned from a GSS-API routine. gss_release_oid_set() will free the storage associated with each individual member OID, the OID set's elements array, and the gss_OID_set_desc. The gss_OID_set parameter is set to GSS_C_NO_OID_SET on successful completion of this routine. Return value: 'GSS_S_COMPLETE': Successful completion. gss_create_empty_oid_set ------------------------ -- Function: OM_uint32 gss_create_empty_oid_set (OM_uint32 * MINOR_STATUS, gss_OID_set * OID_SET) MINOR_STATUS: (integer, modify) Mechanism specific status code. OID_SET: (Set of Object IDs, modify) The empty object identifier set. The routine will allocate the gss_OID_set_desc object, which the application must free after use with a call to gss_release_oid_set(). Create an object-identifier set containing no object identifiers, to which members may be subsequently added using the gss_add_oid_set_member() routine. These routines are intended to be used to construct sets of mechanism object identifiers, for input to gss_acquire_cred. Return value: 'GSS_S_COMPLETE': Successful completion. gss_test_oid_set_member ----------------------- -- Function: OM_uint32 gss_test_oid_set_member (OM_uint32 * MINOR_STATUS, const gss_OID MEMBER, const gss_OID_set SET, int * PRESENT) MINOR_STATUS: (integer, modify) Mechanism specific status code. MEMBER: (Object ID, read) The object identifier whose presence is to be tested. SET: (Set of Object ID, read) The Object Identifier set. PRESENT: (Boolean, modify) Non-zero if the specified OID is a member of the set, zero if not. Interrogate an Object Identifier set to determine whether a specified Object Identifier is a member. This routine is intended to be used with OID sets returned by gss_indicate_mechs(), gss_acquire_cred(), and gss_inquire_cred(), but will also work with user-generated sets. Return value: 'GSS_S_COMPLETE': Successful completion. gss_encapsulate_token --------------------- -- Function: extern OM_uint32 gss_encapsulate_token (gss_const_buffer_t INPUT_TOKEN, gss_const_OID TOKEN_OID, gss_buffer_t OUTPUT_TOKEN) INPUT_TOKEN: (buffer, opaque, read) Buffer with GSS-API context token data. TOKEN_OID: (Object ID, read) Object identifier of token. OUTPUT_TOKEN: (buffer, opaque, modify) Encapsulated token data; caller must release with gss_release_buffer(). Add the mechanism-independent token header to GSS-API context token data. This is used for the initial token of a GSS-API context establishment sequence. It incorporates an identifier of the mechanism type to be used on that context, and enables tokens to be interpreted unambiguously at GSS-API peers. See further section 3.1 of RFC 2743. This function is standardized in RFC 6339. Returns: 'GSS_S_COMPLETE': Indicates successful completion, and that output parameters holds correct information. 'GSS_S_FAILURE': Indicates that encapsulation failed for reasons unspecified at the GSS-API level. gss_decapsulate_token --------------------- -- Function: OM_uint32 gss_decapsulate_token (gss_const_buffer_t INPUT_TOKEN, gss_const_OID TOKEN_OID, gss_buffer_t OUTPUT_TOKEN) INPUT_TOKEN: (buffer, opaque, read) Buffer with GSS-API context token. TOKEN_OID: (Object ID, read) Expected object identifier of token. OUTPUT_TOKEN: (buffer, opaque, modify) Decapsulated token data; caller must release with gss_release_buffer(). Remove the mechanism-independent token header from an initial GSS-API context token. Unwrap a buffer in the mechanism-independent token format. This is the reverse of gss_encapsulate_token(). The translation is loss-less, all data is preserved as is. This function is standardized in RFC 6339. Return value: 'GSS_S_COMPLETE': Indicates successful completion, and that output parameters holds correct information. 'GSS_S_DEFECTIVE_TOKEN': Means that the token failed consistency checks (e.g., OID mismatch or ASN.1 DER length errors). 'GSS_S_FAILURE': Indicates that decapsulation failed for reasons unspecified at the GSS-API level. gss_oid_equal ------------- -- Function: int gss_oid_equal (gss_const_OID FIRST_OID, gss_const_OID SECOND_OID) FIRST_OID: (Object ID, read) First Object identifier. SECOND_OID: (Object ID, read) First Object identifier. Compare two OIDs for equality. The comparison is "deep", i.e., the actual byte sequences of the OIDs are compared instead of just the pointer equality. This function is standardized in RFC 6339. Return value: Returns boolean value true when the two OIDs are equal, otherwise false.  File: gss.info, Node: SASL GS2 Routines, Prev: Miscellaneous Routines, Up: Standard GSS API 3.10 SASL GS2 Routines ====================== gss_inquire_mech_for_saslname ----------------------------- -- Function: OM_uint32 gss_inquire_mech_for_saslname (OM_uint32 * MINOR_STATUS, const gss_buffer_t SASL_MECH_NAME, gss_OID * MECH_TYPE) MINOR_STATUS: (Integer, modify) Mechanism specific status code. SASL_MECH_NAME: (buffer, character-string, read) Buffer with SASL mechanism name. MECH_TYPE: (OID, modify, optional) Actual mechanism used. The OID returned via this parameter will be a pointer to static storage that should be treated as read-only; In particular the application should not attempt to free it. Specify NULL if not required. Output GSS-API mechanism OID of mechanism associated with given @sasl_mech_name. Returns: 'GSS_S_COMPLETE': Successful completion. 'GSS_S_BAD_MECH': There is no GSS-API mechanism known as @sasl_mech_name. gss_inquire_saslname_for_mech ----------------------------- -- Function: OM_uint32 gss_inquire_saslname_for_mech (OM_uint32 * MINOR_STATUS, const gss_OID DESIRED_MECH, gss_buffer_t SASL_MECH_NAME, gss_buffer_t MECH_NAME, gss_buffer_t MECH_DESCRIPTION) MINOR_STATUS: (Integer, modify) Mechanism specific status code. DESIRED_MECH: (OID, read) Identifies the GSS-API mechanism to query. SASL_MECH_NAME: (buffer, character-string, modify, optional) Buffer to receive SASL mechanism name. The application must free storage associated with this name after use with a call to gss_release_buffer(). MECH_NAME: (buffer, character-string, modify, optional) Buffer to receive human readable mechanism name. The application must free storage associated with this name after use with a call to gss_release_buffer(). MECH_DESCRIPTION: (buffer, character-string, modify, optional) Buffer to receive description of mechanism. The application must free storage associated with this name after use with a call to gss_release_buffer(). Output the SASL mechanism name of a GSS-API mechanism. It also returns a name and description of the mechanism in a user friendly form. Returns: 'GSS_S_COMPLETE': Successful completion. 'GSS_S_BAD_MECH': The @desired_mech OID is unsupported.  File: gss.info, Node: Extended GSS API, Next: Invoking gss, Prev: Standard GSS API, Up: Top 4 Extended GSS API ****************** None of the following functions are standard GSS API functions. As such, they are not declared in 'gss/api.h', but rather in 'gss/ext.h' (which is included from 'gss.h'). *Note Header::. gss_check_version ----------------- -- Function: const char * gss_check_version (const char * REQ_VERSION) REQ_VERSION: version string to compare with, or NULL Check that the version of the library is at minimum the one given as a string in @req_version. Return value: The actual version string of the library; NULL if the condition is not met. If NULL is passed to this function no check is done and only the version string is returned. gss_userok ---------- -- Function: int gss_userok (const gss_name_t NAME, const char * USERNAME) NAME: (gss_name_t, read) Name to be compared. USERNAME: Zero terminated string with username. Compare the username against the output from gss_export_name() invoked on @name, after removing the leading OID. This answers the question whether the particular mechanism would authenticate them as the same principal Return value: Returns 0 if the names match, non-0 otherwise.  File: gss.info, Node: Invoking gss, Next: Acknowledgements, Prev: Extended GSS API, Up: Top 5 Invoking gss ************** Name **** GNU GSS (gss) - Command line interface to the GSS Library. Description *********** 'gss' is the main program of GNU GSS. Mandatory or optional arguments to long options are also mandatory or optional for any corresponding short options. Commands ******** 'gss' recognizes these commands: -l, --list-mechanisms List information about supported mechanisms in a human readable format. -m, --major=LONG Describe a `major status' error code value. -a, --accept-sec-context Accept a security context as server. -i, --init-sec-context=MECH Initialize a security context as client. MECH is the SASL name of mechanism, use -l to list supported mechanisms. -n, --server-name=SERVICE@HOSTNAME For -i, set the name of the remote host. For example, "imap@mail.example.com". Other Options ************* These are some standard parameters. -h, --help Print help and exit -V, --version Print version and exit -q, --quiet Silent operation (default=off) Examples ******** To list the supported mechanisms, use 'gss -l' like this: $ src/gss -l Found 1 supported mechanisms. Mechanism 0: Mechanism name: Kerberos V5 Mechanism description: Kerberos V5 GSS-API mechanism SASL Mechanism name: GS2-KRB5 $ To initialize a Kerberos V5 security context, use the '--init-sec-context' parameter. Kerberos V5 needs to know the name of the remote entity, so you need to supply the '--server-name' parameter as well. That will provide the name of the server. For example, use 'imap@mail.example.com' to setup a security context with the 'imap' service on the host 'mail.example.com'. The Kerberos V5 client will use your ticket-granting ticket (which needs to be available) and acquire a server ticket for the service. The KDC must know about the server for this to work. The tool will print the GSS-API context tokens base64 encoded on standard output. $ gss -i GS2-KRB5 -n host@interop.josefsson.org Context token (protection is available): YIICIQYJKoZIhvcSAQICAQBuggIQMIICDKADAgEFoQMCAQ6iBwMFACAAAACjggEYYYIBFDCCARCgAwIBBaEXGxVpbnRlcm9wLmpvc2Vmc3Nvbi5vcmeiKDAmoAMCAQGhHzAdGwRob3N0GxVpbnRlcm9wLmpvc2Vmc3Nvbi5vcmejgcUwgcKgAwIBEqKBugSBt0zqTh6tBBKV2BwDjQg6H4abEaPshPa0o3tT/TH9U7BaSw/M9ugYYqpHAhOitVjcQidhG2FdSl1n3FOgDBufHHO+gHOW0Y1XHc2QtEdkg1xYF2J4iR1vNQB14kXDM78pogCsfvfLnjsEESKWoeKRGOYWPRx0ksLJDnl/e5tXecZTjhJ3hLrFNBEWRmpIOakTAPnL+Xzz6xcnLHMLLnhZ5VcHqtIMm5p9IDWsP0juIncJ6tO8hjMA2qSB2jCB16ADAgESooHPBIHMWSeRBgV80gh/6hNNMr00jTVwCs5TEAIkljvjOfyPmNBzIFWoG+Wj5ZKOBdizdi7vYbJ2s8b1iSsq/9YEZSqaTxul+5aNrclKoJ7J/IW4kTuMklHcQf/A16TeZFsm9TdfE+x8+PjbOBFtKYXT8ODT8LLicNNiDbWW0meY7lsktXAVpZiUds4wTZ1W5bOSEGY7+mxAWrAlTnNwNAt1J2MHZnfGJFJDLJZldXoyG8OwHyp4h1nBhgzC5BfAmL85QJVxxgVfiHhM5oT9mE1O Input context token: The tool is waiting for the final Kerberos V5 context token from the server. Note the status text informing you that message protection is available. To accept a Kerberos V5 context, the process is similar. The server needs to know its name, so that it can find the host key from (typically) '/etc/shishi/shishi.keys'. Once started it will wait for a context token from the client. Below we'll paste in the token printed above. $ gss -a -n host@interop.josefsson.org Importing name "host@interop.josefsson.org"... Acquiring credentials... Input context token: YIICIQYJKoZIhvcSAQICAQBuggIQMIICDKADAgEFoQMCAQ6iBwMFACAAAACjggEYYYIBFDCCARCgAwIBBaEXGxVpbnRlcm9wLmpvc2Vmc3Nvbi5vcmeiKDAmoAMCAQGhHzAdGwRob3N0GxVpbnRlcm9wLmpvc2Vmc3Nvbi5vcmejgcUwgcKgAwIBEqKBugSBt0zqTh6tBBKV2BwDjQg6H4abEaPshPa0o3tT/TH9U7BaSw/M9ugYYqpHAhOitVjcQidhG2FdSl1n3FOgDBufHHO+gHOW0Y1XHc2QtEdkg1xYF2J4iR1vNQB14kXDM78pogCsfvfLnjsEESKWoeKRGOYWPRx0ksLJDnl/e5tXecZTjhJ3hLrFNBEWRmpIOakTAPnL+Xzz6xcnLHMLLnhZ5VcHqtIMm5p9IDWsP0juIncJ6tO8hjMA2qSB2jCB16ADAgESooHPBIHMWSeRBgV80gh/6hNNMr00jTVwCs5TEAIkljvjOfyPmNBzIFWoG+Wj5ZKOBdizdi7vYbJ2s8b1iSsq/9YEZSqaTxul+5aNrclKoJ7J/IW4kTuMklHcQf/A16TeZFsm9TdfE+x8+PjbOBFtKYXT8ODT8LLicNNiDbWW0meY7lsktXAVpZiUds4wTZ1W5bOSEGY7+mxAWrAlTnNwNAt1J2MHZnfGJFJDLJZldXoyG8OwHyp4h1nBhgzC5BfAmL85QJVxxgVfiHhM5oT9mE1O Context has been accepted. Final context token: YHEGCSqGSIb3EgECAgIAb2IwYKADAgEFoQMCAQ+iVDBSoAMCARKhAwIBAKJGBESy1Zoy9DrG+DuV/6aWmAp79s9d+ofGXC/WKOzRuxAqo98vMRWbsbILW8z9aF1th4GZz0kjFz/hZAmnWyomZ9JiP3yQvg== $ Returning to the client, you may now cut'n'paste the final context token as shown by the server. The client has then authenticated the server as well. The output from the client is shown below. YHEGCSqGSIb3EgECAgIAb2IwYKADAgEFoQMCAQ+iVDBSoAMCARKhAwIBAKJGBESy1Zoy9DrG+DuV/6aWmAp79s9d+ofGXC/WKOzRuxAqo98vMRWbsbILW8z9aF1th4GZz0kjFz/hZAmnWyomZ9JiP3yQvg== Context has been initialized. $  File: gss.info, Node: Acknowledgements, Next: Criticism of GSS, Prev: Invoking gss, Up: Top 6 Acknowledgements ****************** This manual borrows text from RFC 2743 and RFC 2744 that describe GSS API formally.  File: gss.info, Node: Criticism of GSS, Next: Copying Information, Prev: Acknowledgements, Up: Top Appendix A Criticism of GSS *************************** The author has doubts whether GSS is the best solution for free software projects looking for a implementation agnostic security framework. We express these doubts in this section, so that the reader can judge for herself if any of the potential problems discussed here are relevant for their project, or if the benefit outweigh the problems. We are aware that some of the opinions are highly subjective, but we offer them in the hope they can serve as anecdotal evidence. GSS can be criticized on several levels. We start with the actual implementation. GSS does not appear to be designed by experienced C programmers. While generally this may be a good thing (C is not the best language), but since they defined the API in C, it is unfortunate. The primary evidence of this is the major_status and minor_status error code solution. It is a complicated way to describe error conditions, but what makes matters worse, the error condition is separated; half of the error condition is in the function return value and the other half is in the first argument to the function, which is always a pointer to an integer. (The pointer is not even allowed to be 'NULL', if the application doesn't care about the minor error code.) This makes the API unreadable, and difficult to use. A better solutions would be to return a struct containing the entire error condition, which can be accessed using macros, although we acknowledge that the C language used at the time GSS was designed may not have allowed this (this may in fact be the reason the awkward solution was chosen). Instead, the return value could have been passed back to callers using a pointer to a struct, accessible using various macros, and the function could have a void prototype. The fact that minor_status is placed first in the parameter list increases the pain it is to use the API. Important parameters should be placed first. A better place for minor_status (if it must be present at all) would have been last in the prototypes. Another evidence of the C inexperience are the memory management issues; GSS provides functions to deallocate data stored within, e.g., 'gss_buffer_t' but the caller is responsible of deallocating the structure pointed at by the 'gss_buffer_t' (i.e., the 'gss_buffer_desc') itself. Memory management issues are error prone, and this division easily leads to memory leaks (or worse). Instead, the API should be the sole owner of all 'gss_ctx_id_t', 'gss_cred_id_t', and 'gss_buffer_t' structures: they should be allocated by the library, and deallocated (using the utility functions defined for this purpose) by the library. TBA: specification is unclear how memory for OIDs are managed. For example, who is responsible for deallocate potentially newly allocated OIDs returned as 'actual_mechs' in 'gss_acquire_cred'? Further, are OIDs deeply copied into OID sets? In other words, if I add an OID into an OID set, and modify the original OID, will the OID in the OID set be modified too? Another illustrating example is the sample GSS header file given in the RFC, which contains: /* * We have included the xom.h header file. Verify that OM_uint32 * is defined correctly. */ #if sizeof(gss_uint32) != sizeof(OM_uint32) #error Incompatible definition of OM_uint32 from xom.h #endif The C pre-processor does not know about the 'sizeof' function, so it is treated as an identifier, which maps to 0. Thus, the expression does not check that the size of 'OM_uint32' is correct. It checks whether the expression '0 != 0' holds. TBA: thread issues TBA: multiple mechanisms in a GSS library TBA: high-level design criticism. TBA: no credential forwarding. TBA: internationalization TBA: dynamically generated OIDs and memory deallocation issue. I.e., should gss_import_name or gss_duplicate_name allocate memory and copy the OID provided, or simply copy the pointer? If the former, who would deallocate that memory? If the latter, the application may deallocate or modify the OID, which seem unwanted. TBA: krb5: no way to access authorization-data TBA: krb5: firewall/pre-IP: iakerb status? TBA: krb5: single-DES only TBA: the API may block, unusable in select() based servers. Especially if the servers contacted is decided by the, yet unauthenticated, remote client. TBA: krb5: no support for GSS_C_PROT_READY_FLAG. We support it anyway, though. TBA: krb5: gssapi-cfx differ from rfc 1964 in the reply token in that the latter require presence of sequence numbers whereas the former doesn't. Finally we note that few free security applications uses GSS, perhaps the only major exception to this are Kerberos 5 implementations. While not substantial evidence, this do suggest that the GSS may not be the simplest solution available to solve actual problems, since otherwise more projects would have chosen to take advantage of the work that went into GSS instead of using another framework (or designing their own solution). Our conclusion is that free software projects that are looking for a security framework should evaluate carefully whether GSS actually is the best solution before using it. In particular it is recommended to compare GSS with the Simple Authentication and Security Layer (SASL) framework, which in several situations provide the same feature as GSS does. The most compelling argument for SASL over GSS is, as its acronym suggest, Simple, whereas GSS is far from it. However, that said, for free software projects that wants to support Kerberos 5, we do acknowledge that no other framework provides a more portable and interoperable interface into the Kerberos 5 system. If your project needs to use Kerberos 5 specifically, we do recommend you to use GSS instead of the Kerberos 5 implementation specific APIs.  File: gss.info, Node: Copying Information, Next: Concept Index, Prev: Criticism of GSS, Up: Top Appendix B Copying Information ****************************** * Menu: * GNU Free Documentation License:: License for copying this manual.  File: gss.info, Node: GNU Free Documentation License, Up: Copying Information B.1 GNU Free Documentation License ================================== Version 1.3, 3 November 2008 Copyright (C) 2000, 2001, 2002, 2007, 2008 Free Software Foundation, Inc. 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 . Each version of the License is given a distinguishing version number. If the Document specifies that a particular numbered version of this License "or any later version" applies to it, you have the option of following the terms and conditions either of that specified version or of any later version that has been published (not as a draft) by the Free Software Foundation. If the Document does not specify a version number of this License, you may choose any version ever published (not as a draft) by the Free Software Foundation. If the Document specifies that a proxy can decide which future versions of this License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Document. 11. RELICENSING "Massive Multiauthor Collaboration Site" (or "MMC Site") means any World Wide Web server that publishes copyrightable works and also provides prominent facilities for anybody to edit those works. A public wiki that anybody can edit is an example of such a server. A "Massive Multiauthor Collaboration" (or "MMC") contained in the site means any set of copyrightable works thus published on the MMC site. "CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0 license published by Creative Commons Corporation, a not-for-profit corporation with a principal place of business in San Francisco, California, as well as future copyleft versions of that license published by that same organization. "Incorporate" means to publish or republish a Document, in whole or in part, as part of another Document. An MMC is "eligible for relicensing" if it is licensed under this License, and if all works that were first published under this License somewhere other than this MMC, and subsequently incorporated in whole or in part into the MMC, (1) had no cover texts or invariant sections, and (2) were thus incorporated prior to November 1, 2008. The operator of an MMC Site may republish an MMC contained in the site under CC-BY-SA on the same site at any time before August 1, 2009, provided the MMC is eligible for relicensing. ADDENDUM: How to use this License for your documents ==================================================== To use this License in a document you have written, include a copy of the License in the document and put the following copyright and license notices just after the title page: Copyright (C) YEAR YOUR NAME. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled ``GNU Free Documentation License''. If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, replace the "with...Texts." line with this: with the Invariant Sections being LIST THEIR TITLES, with the Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST. If you have Invariant Sections without Cover Texts, or some other combination of the three, merge those two alternatives to suit the situation. If your document contains nontrivial examples of program code, we recommend releasing these examples in parallel under your choice of free software license, such as the GNU General Public License, to permit their use in free software.  File: gss.info, Node: Concept Index, Next: API Index, Prev: Copying Information, Up: Top Concept Index ************* [index] * Menu: * AIX: Supported Platforms. (line 62) * command line: Invoking gss. (line 6) * Compiling your application: Building the source. (line 6) * Contributing: Contributing. (line 6) * Debian: Supported Platforms. (line 8) * Debian <1>: Supported Platforms. (line 19) * Download: Downloading and Installing. (line 6) * FDL, GNU Free Documentation License: GNU Free Documentation License. (line 6) * FreeBSD: Supported Platforms. (line 89) * Future goals: Planned Features. (line 6) * Hacking: Contributing. (line 6) * Header files: Header. (line 6) * HP-UX: Supported Platforms. (line 70) * Installation: Downloading and Installing. (line 6) * invoking 'gss': Invoking gss. (line 6) * IRIX: Supported Platforms. (line 58) * Mandrake: Supported Platforms. (line 54) * mechanism status codes: Error Handling. (line 6) * Memory allocation failure: Out of Memory handling. (line 6) * Motorola Coldfire: Supported Platforms. (line 94) * NetBSD: Supported Platforms. (line 79) * OpenBSD: Supported Platforms. (line 84) * Out of Memory handling: Out of Memory handling. (line 6) * RedHat: Supported Platforms. (line 37) * RedHat <1>: Supported Platforms. (line 42) * RedHat <2>: Supported Platforms. (line 50) * RedHat Advanced Server: Supported Platforms. (line 46) * Reporting Bugs: Bug Reports. (line 6) * Solaris: Supported Platforms. (line 75) * status codes: Error Handling. (line 6) * SuSE: Supported Platforms. (line 28) * SuSE Linux: Supported Platforms. (line 33) * Todo list: Planned Features. (line 6) * Tru64: Supported Platforms. (line 23) * uClibc: Supported Platforms. (line 94) * uClinux: Supported Platforms. (line 94) * Windows: Supported Platforms. (line 66)  File: gss.info, Node: API Index, Prev: Concept Index, Up: Top API Index ********* [index] * Menu: * gss: Invoking gss. (line 6) * gss_accept_sec_context: Context-Level Routines. (line 404) * gss_acquire_cred: Credential Management. (line 24) * gss_add_cred: Credential Management. (line 127) * gss_add_oid_set_member: Miscellaneous Routines. (line 30) * GSS_CALLING_ERROR: Error Handling. (line 119) * gss_canonicalize_name: Name Manipulation. (line 219) * gss_check_version: Extended GSS API. (line 13) * gss_compare_name: Name Manipulation. (line 109) * gss_context_time: Context-Level Routines. (line 785) * gss_create_empty_oid_set: Miscellaneous Routines. (line 217) * gss_decapsulate_token: Miscellaneous Routines. (line 294) * gss_delete_sec_context: Context-Level Routines. (line 693) * gss_display_name: Name Manipulation. (line 68) * gss_display_status: Miscellaneous Routines. (line 60) * gss_duplicate_name: Name Manipulation. (line 283) * gss_encapsulate_token: Miscellaneous Routines. (line 265) * GSS_ERROR: Error Handling. (line 119) * gss_export_name: Name Manipulation. (line 250) * gss_export_sec_context: Context-Level Routines. (line 1013) * gss_get_mic: Per-Message Routines. (line 27) * gss_import_name: Name Manipulation. (line 27) * gss_import_sec_context: Context-Level Routines. (line 1079) * gss_indicate_mechs: Miscellaneous Routines. (line 150) * gss_init_sec_context: Context-Level Routines. (line 30) * gss_inquire_context: Context-Level Routines. (line 812) * gss_inquire_cred: Credential Management. (line 282) * gss_inquire_cred_by_mech: Credential Management. (line 330) * gss_inquire_mechs_for_name: Name Manipulation. (line 179) * gss_inquire_mech_for_saslname: SASL GS2 Routines. (line 9) * gss_inquire_names_for_mech: Name Manipulation. (line 159) * gss_inquire_saslname_for_mech: SASL GS2 Routines. (line 35) * gss_oid_equal: Miscellaneous Routines. (line 325) * gss_process_context_token: Context-Level Routines. (line 745) * gss_release_buffer: Miscellaneous Routines. (line 170) * gss_release_cred: Credential Management. (line 389) * gss_release_name: Name Manipulation. (line 140) * gss_release_oid_set: Miscellaneous Routines. (line 194) * GSS_ROUTINE_ERROR: Error Handling. (line 119) * GSS_SUPPLEMENTARY_INFO: Error Handling. (line 119) * GSS_S_...: Error Handling. (line 44) * gss_test_oid_set_member: Miscellaneous Routines. (line 239) * gss_unwrap: Per-Message Routines. (line 184) * gss_userok: Extended GSS API. (line 26) * gss_verify_mic: Per-Message Routines. (line 72) * gss_wrap: Per-Message Routines. (line 128) * gss_wrap_size_limit: Context-Level Routines. (line 951)  Tag Table: Node: Top709 Node: Introduction2055 Node: Getting Started2932 Node: Features3946 Node: GSS-API Overview4707 Node: Supported Platforms8417 Node: Commercial Support10969 Node: Downloading and Installing11856 Node: Bug Reports12909 Node: Contributing14289 Node: Planned Features16400 Node: Preparation17014 Node: Header17669 Node: Initialization19232 Node: Version Check19799 Node: Building the source20736 Node: Out of Memory handling22591 Node: Standard GSS API22905 Node: Simple Data Types23691 Ref: Object Identifiers26458 Node: Complex Data Types29064 Node: Optional Parameters43223 Node: Error Handling44455 Node: Credential Management53254 Ref: gss_acquire_cred54198 Ref: gss_add_cred59182 Ref: gss_inquire_cred67190 Ref: gss_inquire_cred_by_mech69186 Ref: gss_release_cred71818 Node: Context-Level Routines72573 Ref: gss_init_sec_context73918 Ref: gss_accept_sec_context89886 Ref: gss_delete_sec_context102971 Ref: gss_process_context_token105520 Ref: gss_context_time107210 Ref: gss_inquire_context108034 Ref: gss_wrap_size_limit113562 Ref: gss_export_sec_context116240 Ref: gss_import_sec_context119503 Node: Per-Message Routines120616 Ref: gss_get_mic121729 Ref: gss_verify_mic123592 Ref: gss_wrap125732 Ref: gss_unwrap127993 Node: Name Manipulation130544 Ref: gss_import_name131696 Ref: gss_display_name133415 Ref: gss_compare_name135127 Ref: gss_release_name136187 Ref: gss_inquire_names_for_mech136764 Ref: gss_inquire_mechs_for_name137454 Ref: gss_canonicalize_name139197 Ref: gss_export_name140502 Ref: gss_duplicate_name141760 Node: Miscellaneous Routines142613 Ref: gss_add_oid_set_member143890 Ref: gss_display_status145205 Ref: gss_indicate_mechs148890 Ref: gss_release_buffer149535 Ref: gss_release_oid_set150520 Ref: gss_create_empty_oid_set151343 Ref: gss_test_oid_set_member152166 Ref: gss_encapsulate_token153063 Ref: gss_decapsulate_token154197 Ref: gss_oid_equal155355 Node: SASL GS2 Routines155881 Ref: gss_inquire_mech_for_saslname156087 Ref: gss_inquire_saslname_for_mech156988 Node: Extended GSS API158337 Ref: gss_check_version158702 Ref: gss_userok159162 Node: Invoking gss159660 Node: Acknowledgements164618 Node: Criticism of GSS164841 Node: Copying Information170876 Node: GNU Free Documentation License171122 Node: Concept Index196232 Node: API Index199421  End Tag Table gss-1.0.3/doc/Makefile.gdoc0000644000000000000000000005076112415507650012334 00000000000000# This file is automatically generated. DO NOT EDIT! -*- makefile -*- gdoc_TEXINFOS = gdoc_MANS = # ### asn1.c # gdoc_TEXINFOS += texi/asn1.c.texi texi/asn1.c.texi: ../lib/asn1.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) $< > $@ # asn1.c: gss_encapsulate_token gdoc_TEXINFOS += texi/gss_encapsulate_token.texi texi/gss_encapsulate_token.texi: ../lib/asn1.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) -function gss_encapsulate_token $< > $@ gdoc_MANS += man/gss_encapsulate_token.3 man/gss_encapsulate_token.3: ../lib/asn1.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -man $(GDOC_MAN_EXTRA_ARGS) -function gss_encapsulate_token $< > $@ # asn1.c: gss_decapsulate_token gdoc_TEXINFOS += texi/gss_decapsulate_token.texi texi/gss_decapsulate_token.texi: ../lib/asn1.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) -function gss_decapsulate_token $< > $@ gdoc_MANS += man/gss_decapsulate_token.3 man/gss_decapsulate_token.3: ../lib/asn1.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -man $(GDOC_MAN_EXTRA_ARGS) -function gss_decapsulate_token $< > $@ # ### context.c # gdoc_TEXINFOS += texi/context.c.texi texi/context.c.texi: ../lib/context.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) $< > $@ # context.c: gss_init_sec_context gdoc_TEXINFOS += texi/gss_init_sec_context.texi texi/gss_init_sec_context.texi: ../lib/context.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) -function gss_init_sec_context $< > $@ gdoc_MANS += man/gss_init_sec_context.3 man/gss_init_sec_context.3: ../lib/context.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -man $(GDOC_MAN_EXTRA_ARGS) -function gss_init_sec_context $< > $@ # context.c: gss_accept_sec_context gdoc_TEXINFOS += texi/gss_accept_sec_context.texi texi/gss_accept_sec_context.texi: ../lib/context.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) -function gss_accept_sec_context $< > $@ gdoc_MANS += man/gss_accept_sec_context.3 man/gss_accept_sec_context.3: ../lib/context.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -man $(GDOC_MAN_EXTRA_ARGS) -function gss_accept_sec_context $< > $@ # context.c: gss_delete_sec_context gdoc_TEXINFOS += texi/gss_delete_sec_context.texi texi/gss_delete_sec_context.texi: ../lib/context.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) -function gss_delete_sec_context $< > $@ gdoc_MANS += man/gss_delete_sec_context.3 man/gss_delete_sec_context.3: ../lib/context.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -man $(GDOC_MAN_EXTRA_ARGS) -function gss_delete_sec_context $< > $@ # context.c: gss_process_context_token gdoc_TEXINFOS += texi/gss_process_context_token.texi texi/gss_process_context_token.texi: ../lib/context.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) -function gss_process_context_token $< > $@ gdoc_MANS += man/gss_process_context_token.3 man/gss_process_context_token.3: ../lib/context.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -man $(GDOC_MAN_EXTRA_ARGS) -function gss_process_context_token $< > $@ # context.c: gss_context_time gdoc_TEXINFOS += texi/gss_context_time.texi texi/gss_context_time.texi: ../lib/context.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) -function gss_context_time $< > $@ gdoc_MANS += man/gss_context_time.3 man/gss_context_time.3: ../lib/context.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -man $(GDOC_MAN_EXTRA_ARGS) -function gss_context_time $< > $@ # context.c: gss_inquire_context gdoc_TEXINFOS += texi/gss_inquire_context.texi texi/gss_inquire_context.texi: ../lib/context.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) -function gss_inquire_context $< > $@ gdoc_MANS += man/gss_inquire_context.3 man/gss_inquire_context.3: ../lib/context.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -man $(GDOC_MAN_EXTRA_ARGS) -function gss_inquire_context $< > $@ # context.c: gss_wrap_size_limit gdoc_TEXINFOS += texi/gss_wrap_size_limit.texi texi/gss_wrap_size_limit.texi: ../lib/context.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) -function gss_wrap_size_limit $< > $@ gdoc_MANS += man/gss_wrap_size_limit.3 man/gss_wrap_size_limit.3: ../lib/context.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -man $(GDOC_MAN_EXTRA_ARGS) -function gss_wrap_size_limit $< > $@ # context.c: gss_export_sec_context gdoc_TEXINFOS += texi/gss_export_sec_context.texi texi/gss_export_sec_context.texi: ../lib/context.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) -function gss_export_sec_context $< > $@ gdoc_MANS += man/gss_export_sec_context.3 man/gss_export_sec_context.3: ../lib/context.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -man $(GDOC_MAN_EXTRA_ARGS) -function gss_export_sec_context $< > $@ # context.c: gss_import_sec_context gdoc_TEXINFOS += texi/gss_import_sec_context.texi texi/gss_import_sec_context.texi: ../lib/context.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) -function gss_import_sec_context $< > $@ gdoc_MANS += man/gss_import_sec_context.3 man/gss_import_sec_context.3: ../lib/context.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -man $(GDOC_MAN_EXTRA_ARGS) -function gss_import_sec_context $< > $@ # ### cred.c # gdoc_TEXINFOS += texi/cred.c.texi texi/cred.c.texi: ../lib/cred.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) $< > $@ # cred.c: gss_acquire_cred gdoc_TEXINFOS += texi/gss_acquire_cred.texi texi/gss_acquire_cred.texi: ../lib/cred.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) -function gss_acquire_cred $< > $@ gdoc_MANS += man/gss_acquire_cred.3 man/gss_acquire_cred.3: ../lib/cred.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -man $(GDOC_MAN_EXTRA_ARGS) -function gss_acquire_cred $< > $@ # cred.c: gss_add_cred gdoc_TEXINFOS += texi/gss_add_cred.texi texi/gss_add_cred.texi: ../lib/cred.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) -function gss_add_cred $< > $@ gdoc_MANS += man/gss_add_cred.3 man/gss_add_cred.3: ../lib/cred.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -man $(GDOC_MAN_EXTRA_ARGS) -function gss_add_cred $< > $@ # cred.c: gss_inquire_cred gdoc_TEXINFOS += texi/gss_inquire_cred.texi texi/gss_inquire_cred.texi: ../lib/cred.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) -function gss_inquire_cred $< > $@ gdoc_MANS += man/gss_inquire_cred.3 man/gss_inquire_cred.3: ../lib/cred.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -man $(GDOC_MAN_EXTRA_ARGS) -function gss_inquire_cred $< > $@ # cred.c: gss_inquire_cred_by_mech gdoc_TEXINFOS += texi/gss_inquire_cred_by_mech.texi texi/gss_inquire_cred_by_mech.texi: ../lib/cred.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) -function gss_inquire_cred_by_mech $< > $@ gdoc_MANS += man/gss_inquire_cred_by_mech.3 man/gss_inquire_cred_by_mech.3: ../lib/cred.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -man $(GDOC_MAN_EXTRA_ARGS) -function gss_inquire_cred_by_mech $< > $@ # cred.c: gss_release_cred gdoc_TEXINFOS += texi/gss_release_cred.texi texi/gss_release_cred.texi: ../lib/cred.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) -function gss_release_cred $< > $@ gdoc_MANS += man/gss_release_cred.3 man/gss_release_cred.3: ../lib/cred.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -man $(GDOC_MAN_EXTRA_ARGS) -function gss_release_cred $< > $@ # ### error.c # gdoc_TEXINFOS += texi/error.c.texi texi/error.c.texi: ../lib/error.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) $< > $@ # error.c: gss_display_status gdoc_TEXINFOS += texi/gss_display_status.texi texi/gss_display_status.texi: ../lib/error.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) -function gss_display_status $< > $@ gdoc_MANS += man/gss_display_status.3 man/gss_display_status.3: ../lib/error.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -man $(GDOC_MAN_EXTRA_ARGS) -function gss_display_status $< > $@ # ### ext.c # gdoc_TEXINFOS += texi/ext.c.texi texi/ext.c.texi: ../lib/ext.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) $< > $@ # ext.c: gss_userok gdoc_TEXINFOS += texi/gss_userok.texi texi/gss_userok.texi: ../lib/ext.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) -function gss_userok $< > $@ gdoc_MANS += man/gss_userok.3 man/gss_userok.3: ../lib/ext.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -man $(GDOC_MAN_EXTRA_ARGS) -function gss_userok $< > $@ # ### meta.c # gdoc_TEXINFOS += texi/meta.c.texi texi/meta.c.texi: ../lib/meta.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) $< > $@ # ### misc.c # gdoc_TEXINFOS += texi/misc.c.texi texi/misc.c.texi: ../lib/misc.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) $< > $@ # misc.c: gss_create_empty_oid_set gdoc_TEXINFOS += texi/gss_create_empty_oid_set.texi texi/gss_create_empty_oid_set.texi: ../lib/misc.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) -function gss_create_empty_oid_set $< > $@ gdoc_MANS += man/gss_create_empty_oid_set.3 man/gss_create_empty_oid_set.3: ../lib/misc.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -man $(GDOC_MAN_EXTRA_ARGS) -function gss_create_empty_oid_set $< > $@ # misc.c: gss_add_oid_set_member gdoc_TEXINFOS += texi/gss_add_oid_set_member.texi texi/gss_add_oid_set_member.texi: ../lib/misc.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) -function gss_add_oid_set_member $< > $@ gdoc_MANS += man/gss_add_oid_set_member.3 man/gss_add_oid_set_member.3: ../lib/misc.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -man $(GDOC_MAN_EXTRA_ARGS) -function gss_add_oid_set_member $< > $@ # misc.c: gss_test_oid_set_member gdoc_TEXINFOS += texi/gss_test_oid_set_member.texi texi/gss_test_oid_set_member.texi: ../lib/misc.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) -function gss_test_oid_set_member $< > $@ gdoc_MANS += man/gss_test_oid_set_member.3 man/gss_test_oid_set_member.3: ../lib/misc.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -man $(GDOC_MAN_EXTRA_ARGS) -function gss_test_oid_set_member $< > $@ # misc.c: gss_release_oid_set gdoc_TEXINFOS += texi/gss_release_oid_set.texi texi/gss_release_oid_set.texi: ../lib/misc.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) -function gss_release_oid_set $< > $@ gdoc_MANS += man/gss_release_oid_set.3 man/gss_release_oid_set.3: ../lib/misc.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -man $(GDOC_MAN_EXTRA_ARGS) -function gss_release_oid_set $< > $@ # misc.c: gss_indicate_mechs gdoc_TEXINFOS += texi/gss_indicate_mechs.texi texi/gss_indicate_mechs.texi: ../lib/misc.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) -function gss_indicate_mechs $< > $@ gdoc_MANS += man/gss_indicate_mechs.3 man/gss_indicate_mechs.3: ../lib/misc.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -man $(GDOC_MAN_EXTRA_ARGS) -function gss_indicate_mechs $< > $@ # misc.c: gss_release_buffer gdoc_TEXINFOS += texi/gss_release_buffer.texi texi/gss_release_buffer.texi: ../lib/misc.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) -function gss_release_buffer $< > $@ gdoc_MANS += man/gss_release_buffer.3 man/gss_release_buffer.3: ../lib/misc.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -man $(GDOC_MAN_EXTRA_ARGS) -function gss_release_buffer $< > $@ # ### msg.c # gdoc_TEXINFOS += texi/msg.c.texi texi/msg.c.texi: ../lib/msg.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) $< > $@ # msg.c: gss_get_mic gdoc_TEXINFOS += texi/gss_get_mic.texi texi/gss_get_mic.texi: ../lib/msg.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) -function gss_get_mic $< > $@ gdoc_MANS += man/gss_get_mic.3 man/gss_get_mic.3: ../lib/msg.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -man $(GDOC_MAN_EXTRA_ARGS) -function gss_get_mic $< > $@ # msg.c: gss_verify_mic gdoc_TEXINFOS += texi/gss_verify_mic.texi texi/gss_verify_mic.texi: ../lib/msg.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) -function gss_verify_mic $< > $@ gdoc_MANS += man/gss_verify_mic.3 man/gss_verify_mic.3: ../lib/msg.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -man $(GDOC_MAN_EXTRA_ARGS) -function gss_verify_mic $< > $@ # msg.c: gss_wrap gdoc_TEXINFOS += texi/gss_wrap.texi texi/gss_wrap.texi: ../lib/msg.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) -function gss_wrap $< > $@ gdoc_MANS += man/gss_wrap.3 man/gss_wrap.3: ../lib/msg.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -man $(GDOC_MAN_EXTRA_ARGS) -function gss_wrap $< > $@ # msg.c: gss_unwrap gdoc_TEXINFOS += texi/gss_unwrap.texi texi/gss_unwrap.texi: ../lib/msg.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) -function gss_unwrap $< > $@ gdoc_MANS += man/gss_unwrap.3 man/gss_unwrap.3: ../lib/msg.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -man $(GDOC_MAN_EXTRA_ARGS) -function gss_unwrap $< > $@ # ### name.c # gdoc_TEXINFOS += texi/name.c.texi texi/name.c.texi: ../lib/name.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) $< > $@ # name.c: gss_import_name gdoc_TEXINFOS += texi/gss_import_name.texi texi/gss_import_name.texi: ../lib/name.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) -function gss_import_name $< > $@ gdoc_MANS += man/gss_import_name.3 man/gss_import_name.3: ../lib/name.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -man $(GDOC_MAN_EXTRA_ARGS) -function gss_import_name $< > $@ # name.c: gss_display_name gdoc_TEXINFOS += texi/gss_display_name.texi texi/gss_display_name.texi: ../lib/name.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) -function gss_display_name $< > $@ gdoc_MANS += man/gss_display_name.3 man/gss_display_name.3: ../lib/name.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -man $(GDOC_MAN_EXTRA_ARGS) -function gss_display_name $< > $@ # name.c: gss_compare_name gdoc_TEXINFOS += texi/gss_compare_name.texi texi/gss_compare_name.texi: ../lib/name.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) -function gss_compare_name $< > $@ gdoc_MANS += man/gss_compare_name.3 man/gss_compare_name.3: ../lib/name.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -man $(GDOC_MAN_EXTRA_ARGS) -function gss_compare_name $< > $@ # name.c: gss_release_name gdoc_TEXINFOS += texi/gss_release_name.texi texi/gss_release_name.texi: ../lib/name.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) -function gss_release_name $< > $@ gdoc_MANS += man/gss_release_name.3 man/gss_release_name.3: ../lib/name.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -man $(GDOC_MAN_EXTRA_ARGS) -function gss_release_name $< > $@ # name.c: gss_inquire_names_for_mech gdoc_TEXINFOS += texi/gss_inquire_names_for_mech.texi texi/gss_inquire_names_for_mech.texi: ../lib/name.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) -function gss_inquire_names_for_mech $< > $@ gdoc_MANS += man/gss_inquire_names_for_mech.3 man/gss_inquire_names_for_mech.3: ../lib/name.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -man $(GDOC_MAN_EXTRA_ARGS) -function gss_inquire_names_for_mech $< > $@ # name.c: gss_inquire_mechs_for_name gdoc_TEXINFOS += texi/gss_inquire_mechs_for_name.texi texi/gss_inquire_mechs_for_name.texi: ../lib/name.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) -function gss_inquire_mechs_for_name $< > $@ gdoc_MANS += man/gss_inquire_mechs_for_name.3 man/gss_inquire_mechs_for_name.3: ../lib/name.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -man $(GDOC_MAN_EXTRA_ARGS) -function gss_inquire_mechs_for_name $< > $@ # name.c: gss_export_name gdoc_TEXINFOS += texi/gss_export_name.texi texi/gss_export_name.texi: ../lib/name.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) -function gss_export_name $< > $@ gdoc_MANS += man/gss_export_name.3 man/gss_export_name.3: ../lib/name.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -man $(GDOC_MAN_EXTRA_ARGS) -function gss_export_name $< > $@ # name.c: gss_canonicalize_name gdoc_TEXINFOS += texi/gss_canonicalize_name.texi texi/gss_canonicalize_name.texi: ../lib/name.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) -function gss_canonicalize_name $< > $@ gdoc_MANS += man/gss_canonicalize_name.3 man/gss_canonicalize_name.3: ../lib/name.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -man $(GDOC_MAN_EXTRA_ARGS) -function gss_canonicalize_name $< > $@ # name.c: gss_duplicate_name gdoc_TEXINFOS += texi/gss_duplicate_name.texi texi/gss_duplicate_name.texi: ../lib/name.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) -function gss_duplicate_name $< > $@ gdoc_MANS += man/gss_duplicate_name.3 man/gss_duplicate_name.3: ../lib/name.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -man $(GDOC_MAN_EXTRA_ARGS) -function gss_duplicate_name $< > $@ # ### obsolete.c # gdoc_TEXINFOS += texi/obsolete.c.texi texi/obsolete.c.texi: ../lib/obsolete.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) $< > $@ # ### oid.c # gdoc_TEXINFOS += texi/oid.c.texi texi/oid.c.texi: ../lib/oid.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) $< > $@ # oid.c: gss_oid_equal gdoc_TEXINFOS += texi/gss_oid_equal.texi texi/gss_oid_equal.texi: ../lib/oid.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) -function gss_oid_equal $< > $@ gdoc_MANS += man/gss_oid_equal.3 man/gss_oid_equal.3: ../lib/oid.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -man $(GDOC_MAN_EXTRA_ARGS) -function gss_oid_equal $< > $@ # ### saslname.c # gdoc_TEXINFOS += texi/saslname.c.texi texi/saslname.c.texi: ../lib/saslname.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) $< > $@ # saslname.c: gss_inquire_saslname_for_mech gdoc_TEXINFOS += texi/gss_inquire_saslname_for_mech.texi texi/gss_inquire_saslname_for_mech.texi: ../lib/saslname.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) -function gss_inquire_saslname_for_mech $< > $@ gdoc_MANS += man/gss_inquire_saslname_for_mech.3 man/gss_inquire_saslname_for_mech.3: ../lib/saslname.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -man $(GDOC_MAN_EXTRA_ARGS) -function gss_inquire_saslname_for_mech $< > $@ # saslname.c: gss_inquire_mech_for_saslname gdoc_TEXINFOS += texi/gss_inquire_mech_for_saslname.texi texi/gss_inquire_mech_for_saslname.texi: ../lib/saslname.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) -function gss_inquire_mech_for_saslname $< > $@ gdoc_MANS += man/gss_inquire_mech_for_saslname.3 man/gss_inquire_mech_for_saslname.3: ../lib/saslname.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -man $(GDOC_MAN_EXTRA_ARGS) -function gss_inquire_mech_for_saslname $< > $@ # ### version.c # gdoc_TEXINFOS += texi/version.c.texi texi/version.c.texi: ../lib/version.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) $< > $@ # version.c: gss_check_version gdoc_TEXINFOS += texi/gss_check_version.texi texi/gss_check_version.texi: ../lib/version.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) -function gss_check_version $< > $@ gdoc_MANS += man/gss_check_version.3 man/gss_check_version.3: ../lib/version.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -man $(GDOC_MAN_EXTRA_ARGS) -function gss_check_version $< > $@ gss-1.0.3/doc/gdoc0000775000000000000000000006223712415506237010626 00000000000000#!/usr/bin/perl ## Copyright (c) 2002-2014 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 . # 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 in the synopsis. # # -includefuncprefix # For man pages, mention a #include 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 . # # -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, "\$1", $type_func, "\$1", $type_struct, "\$1", $type_param, "\$1" ); $blankline_html = "

"; %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, "\$1", $type_func, "\$1", $type_struct, "\$1", $type_env, "\$1", $type_param, "\$1" ); $blankline_sgml = "\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}) { open FH, ">tmp" or die "cannot open tmp"; $_ = $args{'parameters'}{$parameter}; s/^ *//gm; print FH $_; close FH; $_ = `./asciidoc -s -b texinfo -o - tmp 2>/dev/null`; s/^\n//s; chop; print "\@var{".$parameter."}: " . $_ . "\n"; unlink "tmp"; } } foreach $section (@{$args{'sectionlist'}}) { open FH, ">tmp" or die "cannot open tmp"; print FH "$section:\n" if $section ne $section_default; print FH $args{'sections'}{$section}; close FH; $_ = `./asciidoc -s -b texinfo -o - tmp 2>/dev/null`; chop; print; unlink "tmp"; } print "\@end deftypefun\n\n"; } # output in html sub output_html { my %args = %{$_[0]}; my ($parameter, $section); my $count; print "\n\n 

Function

\n"; print "".$args{'functiontype'}."\n"; print "".$args{'function'}."\n"; print "("; $count = 0; foreach $parameter (@{$args{'parameterlist'}}) { print "".$args{'parametertypes'}{$parameter}." ".$parameter."\n"; if ($count != $#{$args{'parameterlist'}}) { $count++; print ", "; } } print ")\n"; print "

Arguments

\n"; print "
\n"; foreach $parameter (@{$args{'parameterlist'}}) { print "
".$args{'parametertypes'}{$parameter}." ".$parameter."\n"; print "
"; output_highlight($args{'parameters'}{$parameter}); } print "
\n"; foreach $section (@{$args{'sectionlist'}}) { print "

$section

\n"; print "
    \n"; output_highlight($args{'sections'}{$section}); print "
\n"; } print "
\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 "\n"; print "\n"; print "".$args{'function'}."\n"; print "\n"; print "\n"; print " ".$args{'function'}."\n"; print " \n"; print " ".$args{'purpose'}."\n"; print " \n"; print "\n"; print "\n"; print " Synopsis\n"; print " \n"; print " ".$args{'functiontype'}." "; print "".$args{'function'}." "; print "\n"; # print "\n"; # print " Synopsis\n"; # print " \n"; # print " ".$args{'functiontype'}." "; # print "".$args{'function'}." "; # print "\n"; $count = 0; if ($#{$args{'parameterlist'}} >= 0) { foreach $parameter (@{$args{'parameterlist'}}) { print " ".$args{'parametertypes'}{$parameter}; print " $parameter\n"; } } else { print " \n"; } print " \n"; print "\n"; # print "\n"; # print parameters print "\n Arguments\n"; # print "\nArguments\n"; if ($#{$args{'parameterlist'}} >= 0) { print " \n"; foreach $parameter (@{$args{'parameterlist'}}) { print " \n $parameter\n"; print " \n \n"; $lineprefix=" "; output_highlight($args{'parameters'}{$parameter}); print " \n \n \n"; } print " \n"; } else { print " \n None\n \n"; } print "\n"; # print out each section $lineprefix=" "; foreach $section (@{$args{'sectionlist'}}) { print "\n $section\n \n"; # print "\n$section\n"; if ($section =~ m/EXAMPLE/i) { print "\n"; } output_highlight($args{'sections'}{$section}); # print ""; if ($section =~ m/EXAMPLE/i) { print "\n"; } print " \n\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*\\* ?"; $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 () { $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; } } } } gss-1.0.3/doc/Makefile.in0000644000000000000000000022202512415507652012022 00000000000000# Makefile.in generated by automake 1.14.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 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) 2003-2014 Simon Josefsson # # This file is part of the Generic Security Service (GSS). # # GSS 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. # # GSS 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 GSS; if not, see http://www.gnu.org/licenses or write to # the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, # Boston, MA 02110-1301, USA. # -*- makefile -*- # Copyright (C) 2002-2014 Simon Josefsson # # This file is part of the Generic Security Service (GSS). # # GSS 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. # # GSS 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 GSS; if not, see http://www.gnu.org/licenses or write to # the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, # Boston, MA 02110-1301, USA. # This file is automatically generated. DO NOT EDIT! -*- makefile -*- VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ @ENABLE_GTK_DOC_TRUE@am__append_1 = reference DIST_COMMON = $(srcdir)/Makefile.gdoci $(srcdir)/Makefile.gdoc \ $(srcdir)/Makefile.in $(srcdir)/Makefile.am $(gss_TEXINFOS) \ $(top_srcdir)/build-aux/mdate-sh $(srcdir)/version.texi \ $(srcdir)/stamp-vti $(top_srcdir)/build-aux/texinfo.tex \ $(dist_man_MANS) subdir = doc ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/src/gl/m4/base64.m4 \ $(top_srcdir)/src/gl/m4/errno_h.m4 \ $(top_srcdir)/src/gl/m4/error.m4 \ $(top_srcdir)/src/gl/m4/getopt.m4 \ $(top_srcdir)/src/gl/m4/gnulib-comp.m4 \ $(top_srcdir)/src/gl/m4/memchr.m4 \ $(top_srcdir)/src/gl/m4/mmap-anon.m4 \ $(top_srcdir)/src/gl/m4/msvc-inval.m4 \ $(top_srcdir)/src/gl/m4/msvc-nothrow.m4 \ $(top_srcdir)/src/gl/m4/nocrash.m4 \ $(top_srcdir)/src/gl/m4/off_t.m4 \ $(top_srcdir)/src/gl/m4/ssize_t.m4 \ $(top_srcdir)/src/gl/m4/stdarg.m4 \ $(top_srcdir)/src/gl/m4/stdbool.m4 \ $(top_srcdir)/src/gl/m4/stdio_h.m4 \ $(top_srcdir)/src/gl/m4/strerror.m4 \ $(top_srcdir)/src/gl/m4/sys_socket_h.m4 \ $(top_srcdir)/src/gl/m4/sys_types_h.m4 \ $(top_srcdir)/src/gl/m4/unistd_h.m4 \ $(top_srcdir)/src/gl/m4/version-etc.m4 \ $(top_srcdir)/lib/gl/m4/absolute-header.m4 \ $(top_srcdir)/lib/gl/m4/extensions.m4 \ $(top_srcdir)/lib/gl/m4/gnulib-comp.m4 \ $(top_srcdir)/lib/gl/m4/include_next.m4 \ $(top_srcdir)/lib/gl/m4/ld-output-def.m4 \ $(top_srcdir)/lib/gl/m4/stddef_h.m4 \ $(top_srcdir)/lib/gl/m4/string_h.m4 \ $(top_srcdir)/lib/gl/m4/strverscmp.m4 \ $(top_srcdir)/lib/gl/m4/warn-on-use.m4 \ $(top_srcdir)/gl/m4/00gnulib.m4 \ $(top_srcdir)/gl/m4/autobuild.m4 \ $(top_srcdir)/gl/m4/gnulib-common.m4 \ $(top_srcdir)/gl/m4/gnulib-comp.m4 \ $(top_srcdir)/gl/m4/ld-version-script.m4 \ $(top_srcdir)/gl/m4/manywarnings.m4 \ $(top_srcdir)/gl/m4/valgrind-tests.m4 \ $(top_srcdir)/gl/m4/warnings.m4 \ $(top_srcdir)/m4/extern-inline.m4 $(top_srcdir)/m4/gettext.m4 \ $(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \ $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.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/nls.m4 \ $(top_srcdir)/m4/pkg.m4 $(top_srcdir)/m4/po-suffix.m4 \ $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \ $(top_srcdir)/m4/wchar_t.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_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = AM_V_DVIPS = $(am__v_DVIPS_@AM_V@) am__v_DVIPS_ = $(am__v_DVIPS_@AM_DEFAULT_V@) am__v_DVIPS_0 = @echo " DVIPS " $@; am__v_DVIPS_1 = AM_V_MAKEINFO = $(am__v_MAKEINFO_@AM_V@) am__v_MAKEINFO_ = $(am__v_MAKEINFO_@AM_DEFAULT_V@) am__v_MAKEINFO_0 = @echo " MAKEINFO" $@; am__v_MAKEINFO_1 = AM_V_INFOHTML = $(am__v_INFOHTML_@AM_V@) am__v_INFOHTML_ = $(am__v_INFOHTML_@AM_DEFAULT_V@) am__v_INFOHTML_0 = @echo " INFOHTML" $@; am__v_INFOHTML_1 = AM_V_TEXI2DVI = $(am__v_TEXI2DVI_@AM_V@) am__v_TEXI2DVI_ = $(am__v_TEXI2DVI_@AM_DEFAULT_V@) am__v_TEXI2DVI_0 = @echo " TEXI2DVI" $@; am__v_TEXI2DVI_1 = AM_V_TEXI2PDF = $(am__v_TEXI2PDF_@AM_V@) am__v_TEXI2PDF_ = $(am__v_TEXI2PDF_@AM_DEFAULT_V@) am__v_TEXI2PDF_0 = @echo " TEXI2PDF" $@; am__v_TEXI2PDF_1 = AM_V_texinfo = $(am__v_texinfo_@AM_V@) am__v_texinfo_ = $(am__v_texinfo_@AM_DEFAULT_V@) am__v_texinfo_0 = -q am__v_texinfo_1 = AM_V_texidevnull = $(am__v_texidevnull_@AM_V@) am__v_texidevnull_ = $(am__v_texidevnull_@AM_DEFAULT_V@) am__v_texidevnull_0 = > /dev/null am__v_texidevnull_1 = INFO_DEPS = $(srcdir)/gss.info TEXINFO_TEX = $(top_srcdir)/build-aux/texinfo.tex am__TEXINFO_TEX_DIR = $(top_srcdir)/build-aux DVIS = gss.dvi PDFS = gss.pdf PSS = gss.ps HTMLS = gss.html TEXINFOS = gss.texi TEXI2DVI = texi2dvi TEXI2PDF = $(TEXI2DVI) --pdf --batch MAKEINFOHTML = $(MAKEINFO) --html DVIPS = dvips RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__installdirs = "$(DESTDIR)$(infodir)" "$(DESTDIR)$(man1dir)" \ "$(DESTDIR)$(man3dir)" am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } man1dir = $(mandir)/man1 man3dir = $(mandir)/man3 NROFF = nroff MANS = $(dist_man_MANS) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ distdir am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DIST_SUBDIRS = cyclo reference DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ ARFLAGS = @ARFLAGS@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CONFIG_INCLUDE = @CONFIG_INCLUDE@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DLL_VERSION = @DLL_VERSION@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EMULTIHOP_HIDDEN = @EMULTIHOP_HIDDEN@ EMULTIHOP_VALUE = @EMULTIHOP_VALUE@ ENOLINK_HIDDEN = @ENOLINK_HIDDEN@ ENOLINK_VALUE = @ENOLINK_VALUE@ EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@ EOVERFLOW_VALUE = @EOVERFLOW_VALUE@ ERRNO_H = @ERRNO_H@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GETOPT_H = @GETOPT_H@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GNULIB_CHDIR = @GNULIB_CHDIR@ GNULIB_CHOWN = @GNULIB_CHOWN@ GNULIB_CLOSE = @GNULIB_CLOSE@ GNULIB_DPRINTF = @GNULIB_DPRINTF@ GNULIB_DUP = @GNULIB_DUP@ GNULIB_DUP2 = @GNULIB_DUP2@ GNULIB_DUP3 = @GNULIB_DUP3@ GNULIB_ENVIRON = @GNULIB_ENVIRON@ GNULIB_EUIDACCESS = @GNULIB_EUIDACCESS@ GNULIB_FACCESSAT = @GNULIB_FACCESSAT@ GNULIB_FCHDIR = @GNULIB_FCHDIR@ GNULIB_FCHOWNAT = @GNULIB_FCHOWNAT@ GNULIB_FCLOSE = @GNULIB_FCLOSE@ GNULIB_FDATASYNC = @GNULIB_FDATASYNC@ GNULIB_FDOPEN = @GNULIB_FDOPEN@ GNULIB_FFLUSH = @GNULIB_FFLUSH@ GNULIB_FFSL = @GNULIB_FFSL@ GNULIB_FFSLL = @GNULIB_FFSLL@ GNULIB_FGETC = @GNULIB_FGETC@ GNULIB_FGETS = @GNULIB_FGETS@ GNULIB_FOPEN = @GNULIB_FOPEN@ GNULIB_FPRINTF = @GNULIB_FPRINTF@ GNULIB_FPRINTF_POSIX = @GNULIB_FPRINTF_POSIX@ GNULIB_FPURGE = @GNULIB_FPURGE@ GNULIB_FPUTC = @GNULIB_FPUTC@ GNULIB_FPUTS = @GNULIB_FPUTS@ GNULIB_FREAD = @GNULIB_FREAD@ GNULIB_FREOPEN = @GNULIB_FREOPEN@ GNULIB_FSCANF = @GNULIB_FSCANF@ GNULIB_FSEEK = @GNULIB_FSEEK@ GNULIB_FSEEKO = @GNULIB_FSEEKO@ GNULIB_FSYNC = @GNULIB_FSYNC@ GNULIB_FTELL = @GNULIB_FTELL@ GNULIB_FTELLO = @GNULIB_FTELLO@ GNULIB_FTRUNCATE = @GNULIB_FTRUNCATE@ GNULIB_FWRITE = @GNULIB_FWRITE@ GNULIB_GETC = @GNULIB_GETC@ GNULIB_GETCHAR = @GNULIB_GETCHAR@ GNULIB_GETCWD = @GNULIB_GETCWD@ GNULIB_GETDELIM = @GNULIB_GETDELIM@ GNULIB_GETDOMAINNAME = @GNULIB_GETDOMAINNAME@ GNULIB_GETDTABLESIZE = @GNULIB_GETDTABLESIZE@ GNULIB_GETGROUPS = @GNULIB_GETGROUPS@ GNULIB_GETHOSTNAME = @GNULIB_GETHOSTNAME@ GNULIB_GETLINE = @GNULIB_GETLINE@ GNULIB_GETLOGIN = @GNULIB_GETLOGIN@ GNULIB_GETLOGIN_R = @GNULIB_GETLOGIN_R@ GNULIB_GETPAGESIZE = @GNULIB_GETPAGESIZE@ GNULIB_GETUSERSHELL = @GNULIB_GETUSERSHELL@ GNULIB_GL_SRCGL_UNISTD_H_GETOPT = @GNULIB_GL_SRCGL_UNISTD_H_GETOPT@ GNULIB_GROUP_MEMBER = @GNULIB_GROUP_MEMBER@ GNULIB_ISATTY = @GNULIB_ISATTY@ GNULIB_LCHOWN = @GNULIB_LCHOWN@ GNULIB_LINK = @GNULIB_LINK@ GNULIB_LINKAT = @GNULIB_LINKAT@ GNULIB_LSEEK = @GNULIB_LSEEK@ GNULIB_MBSCASECMP = @GNULIB_MBSCASECMP@ GNULIB_MBSCASESTR = @GNULIB_MBSCASESTR@ GNULIB_MBSCHR = @GNULIB_MBSCHR@ GNULIB_MBSCSPN = @GNULIB_MBSCSPN@ GNULIB_MBSLEN = @GNULIB_MBSLEN@ GNULIB_MBSNCASECMP = @GNULIB_MBSNCASECMP@ GNULIB_MBSNLEN = @GNULIB_MBSNLEN@ GNULIB_MBSPBRK = @GNULIB_MBSPBRK@ GNULIB_MBSPCASECMP = @GNULIB_MBSPCASECMP@ GNULIB_MBSRCHR = @GNULIB_MBSRCHR@ GNULIB_MBSSEP = @GNULIB_MBSSEP@ GNULIB_MBSSPN = @GNULIB_MBSSPN@ GNULIB_MBSSTR = @GNULIB_MBSSTR@ GNULIB_MBSTOK_R = @GNULIB_MBSTOK_R@ GNULIB_MEMCHR = @GNULIB_MEMCHR@ GNULIB_MEMMEM = @GNULIB_MEMMEM@ GNULIB_MEMPCPY = @GNULIB_MEMPCPY@ GNULIB_MEMRCHR = @GNULIB_MEMRCHR@ GNULIB_OBSTACK_PRINTF = @GNULIB_OBSTACK_PRINTF@ GNULIB_OBSTACK_PRINTF_POSIX = @GNULIB_OBSTACK_PRINTF_POSIX@ GNULIB_PCLOSE = @GNULIB_PCLOSE@ GNULIB_PERROR = @GNULIB_PERROR@ GNULIB_PIPE = @GNULIB_PIPE@ GNULIB_PIPE2 = @GNULIB_PIPE2@ GNULIB_POPEN = @GNULIB_POPEN@ GNULIB_PREAD = @GNULIB_PREAD@ GNULIB_PRINTF = @GNULIB_PRINTF@ GNULIB_PRINTF_POSIX = @GNULIB_PRINTF_POSIX@ GNULIB_PUTC = @GNULIB_PUTC@ GNULIB_PUTCHAR = @GNULIB_PUTCHAR@ GNULIB_PUTS = @GNULIB_PUTS@ GNULIB_PWRITE = @GNULIB_PWRITE@ GNULIB_RAWMEMCHR = @GNULIB_RAWMEMCHR@ GNULIB_READ = @GNULIB_READ@ GNULIB_READLINK = @GNULIB_READLINK@ GNULIB_READLINKAT = @GNULIB_READLINKAT@ GNULIB_REMOVE = @GNULIB_REMOVE@ GNULIB_RENAME = @GNULIB_RENAME@ GNULIB_RENAMEAT = @GNULIB_RENAMEAT@ GNULIB_RMDIR = @GNULIB_RMDIR@ GNULIB_SCANF = @GNULIB_SCANF@ GNULIB_SETHOSTNAME = @GNULIB_SETHOSTNAME@ GNULIB_SLEEP = @GNULIB_SLEEP@ GNULIB_SNPRINTF = @GNULIB_SNPRINTF@ GNULIB_SPRINTF_POSIX = @GNULIB_SPRINTF_POSIX@ GNULIB_STDIO_H_NONBLOCKING = @GNULIB_STDIO_H_NONBLOCKING@ GNULIB_STDIO_H_SIGPIPE = @GNULIB_STDIO_H_SIGPIPE@ GNULIB_STPCPY = @GNULIB_STPCPY@ GNULIB_STPNCPY = @GNULIB_STPNCPY@ GNULIB_STRCASESTR = @GNULIB_STRCASESTR@ GNULIB_STRCHRNUL = @GNULIB_STRCHRNUL@ GNULIB_STRDUP = @GNULIB_STRDUP@ GNULIB_STRERROR = @GNULIB_STRERROR@ GNULIB_STRERROR_R = @GNULIB_STRERROR_R@ GNULIB_STRNCAT = @GNULIB_STRNCAT@ GNULIB_STRNDUP = @GNULIB_STRNDUP@ GNULIB_STRNLEN = @GNULIB_STRNLEN@ GNULIB_STRPBRK = @GNULIB_STRPBRK@ GNULIB_STRSEP = @GNULIB_STRSEP@ GNULIB_STRSIGNAL = @GNULIB_STRSIGNAL@ GNULIB_STRSTR = @GNULIB_STRSTR@ GNULIB_STRTOK_R = @GNULIB_STRTOK_R@ GNULIB_STRVERSCMP = @GNULIB_STRVERSCMP@ GNULIB_SYMLINK = @GNULIB_SYMLINK@ GNULIB_SYMLINKAT = @GNULIB_SYMLINKAT@ GNULIB_TMPFILE = @GNULIB_TMPFILE@ GNULIB_TTYNAME_R = @GNULIB_TTYNAME_R@ GNULIB_UNISTD_H_NONBLOCKING = @GNULIB_UNISTD_H_NONBLOCKING@ GNULIB_UNISTD_H_SIGPIPE = @GNULIB_UNISTD_H_SIGPIPE@ GNULIB_UNLINK = @GNULIB_UNLINK@ GNULIB_UNLINKAT = @GNULIB_UNLINKAT@ GNULIB_USLEEP = @GNULIB_USLEEP@ GNULIB_VASPRINTF = @GNULIB_VASPRINTF@ GNULIB_VDPRINTF = @GNULIB_VDPRINTF@ GNULIB_VFPRINTF = @GNULIB_VFPRINTF@ GNULIB_VFPRINTF_POSIX = @GNULIB_VFPRINTF_POSIX@ GNULIB_VFSCANF = @GNULIB_VFSCANF@ GNULIB_VPRINTF = @GNULIB_VPRINTF@ GNULIB_VPRINTF_POSIX = @GNULIB_VPRINTF_POSIX@ GNULIB_VSCANF = @GNULIB_VSCANF@ GNULIB_VSNPRINTF = @GNULIB_VSNPRINTF@ GNULIB_VSPRINTF_POSIX = @GNULIB_VSPRINTF_POSIX@ GNULIB_WRITE = @GNULIB_WRITE@ GREP = @GREP@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ HAVE_CHOWN = @HAVE_CHOWN@ HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@ HAVE_DECL_FCHDIR = @HAVE_DECL_FCHDIR@ HAVE_DECL_FDATASYNC = @HAVE_DECL_FDATASYNC@ HAVE_DECL_FPURGE = @HAVE_DECL_FPURGE@ HAVE_DECL_FSEEKO = @HAVE_DECL_FSEEKO@ HAVE_DECL_FTELLO = @HAVE_DECL_FTELLO@ HAVE_DECL_GETDELIM = @HAVE_DECL_GETDELIM@ HAVE_DECL_GETDOMAINNAME = @HAVE_DECL_GETDOMAINNAME@ HAVE_DECL_GETLINE = @HAVE_DECL_GETLINE@ HAVE_DECL_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_OBSTACK_PRINTF = @HAVE_DECL_OBSTACK_PRINTF@ HAVE_DECL_SETHOSTNAME = @HAVE_DECL_SETHOSTNAME@ HAVE_DECL_SNPRINTF = @HAVE_DECL_SNPRINTF@ HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@ HAVE_DECL_STRERROR_R = @HAVE_DECL_STRERROR_R@ HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@ HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@ HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@ HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@ HAVE_DECL_TTYNAME_R = @HAVE_DECL_TTYNAME_R@ HAVE_DECL_VSNPRINTF = @HAVE_DECL_VSNPRINTF@ HAVE_DPRINTF = @HAVE_DPRINTF@ HAVE_DUP2 = @HAVE_DUP2@ HAVE_DUP3 = @HAVE_DUP3@ HAVE_EUIDACCESS = @HAVE_EUIDACCESS@ HAVE_FACCESSAT = @HAVE_FACCESSAT@ HAVE_FCHDIR = @HAVE_FCHDIR@ HAVE_FCHOWNAT = @HAVE_FCHOWNAT@ HAVE_FDATASYNC = @HAVE_FDATASYNC@ HAVE_FFSL = @HAVE_FFSL@ HAVE_FFSLL = @HAVE_FFSLL@ HAVE_FSEEKO = @HAVE_FSEEKO@ HAVE_FSYNC = @HAVE_FSYNC@ HAVE_FTELLO = @HAVE_FTELLO@ HAVE_FTRUNCATE = @HAVE_FTRUNCATE@ 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_GROUP_MEMBER = @HAVE_GROUP_MEMBER@ HAVE_LCHOWN = @HAVE_LCHOWN@ HAVE_LIBSHISHI = @HAVE_LIBSHISHI@ HAVE_LINK = @HAVE_LINK@ HAVE_LINKAT = @HAVE_LINKAT@ HAVE_MBSLEN = @HAVE_MBSLEN@ HAVE_MEMCHR = @HAVE_MEMCHR@ HAVE_MEMPCPY = @HAVE_MEMPCPY@ HAVE_MSVC_INVALID_PARAMETER_HANDLER = @HAVE_MSVC_INVALID_PARAMETER_HANDLER@ HAVE_OS_H = @HAVE_OS_H@ HAVE_PCLOSE = @HAVE_PCLOSE@ HAVE_PIPE = @HAVE_PIPE@ HAVE_PIPE2 = @HAVE_PIPE2@ HAVE_POPEN = @HAVE_POPEN@ HAVE_PREAD = @HAVE_PREAD@ HAVE_PWRITE = @HAVE_PWRITE@ HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@ HAVE_READLINK = @HAVE_READLINK@ HAVE_READLINKAT = @HAVE_READLINKAT@ HAVE_RENAMEAT = @HAVE_RENAMEAT@ HAVE_SETHOSTNAME = @HAVE_SETHOSTNAME@ HAVE_SLEEP = @HAVE_SLEEP@ 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_STRVERSCMP = @HAVE_STRVERSCMP@ HAVE_SYMLINK = @HAVE_SYMLINK@ HAVE_SYMLINKAT = @HAVE_SYMLINKAT@ HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@ HAVE_UNISTD_H = @HAVE_UNISTD_H@ HAVE_UNLINKAT = @HAVE_UNLINKAT@ HAVE_USLEEP = @HAVE_USLEEP@ HAVE_VASPRINTF = @HAVE_VASPRINTF@ HAVE_VDPRINTF = @HAVE_VDPRINTF@ HAVE_WCHAR_T = @HAVE_WCHAR_T@ HAVE_WINSOCK2_H = @HAVE_WINSOCK2_H@ HAVE__BOOL = @HAVE__BOOL@ HELP2MAN = @HELP2MAN@ HTML_DIR = @HTML_DIR@ INCLUDE_GSS_KRB5 = @INCLUDE_GSS_KRB5@ INCLUDE_GSS_KRB5_EXT = @INCLUDE_GSS_KRB5_EXT@ 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@ INTLLIBS = @INTLLIBS@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBSHISHI = @LIBSHISHI@ LIBSHISHI_PREFIX = @LIBSHISHI_PREFIX@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBOBJS = @LTLIBOBJS@ LTLIBSHISHI = @LTLIBSHISHI@ LT_AGE = @LT_AGE@ LT_CURRENT = @LT_CURRENT@ LT_REVISION = @LT_REVISION@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = @NEXT_AS_FIRST_DIRECTIVE_ERRNO_H@ NEXT_AS_FIRST_DIRECTIVE_GETOPT_H = @NEXT_AS_FIRST_DIRECTIVE_GETOPT_H@ NEXT_AS_FIRST_DIRECTIVE_STDARG_H = @NEXT_AS_FIRST_DIRECTIVE_STDARG_H@ NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@ NEXT_AS_FIRST_DIRECTIVE_STDIO_H = @NEXT_AS_FIRST_DIRECTIVE_STDIO_H@ NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H@ NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@ NEXT_ERRNO_H = @NEXT_ERRNO_H@ NEXT_GETOPT_H = @NEXT_GETOPT_H@ NEXT_STDARG_H = @NEXT_STDARG_H@ NEXT_STDDEF_H = @NEXT_STDDEF_H@ NEXT_STDIO_H = @NEXT_STDIO_H@ NEXT_STRING_H = @NEXT_STRING_H@ NEXT_SYS_TYPES_H = @NEXT_SYS_TYPES_H@ NEXT_UNISTD_H = @NEXT_UNISTD_H@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ PKG_CONFIG = @PKG_CONFIG@ PMCCABE = @PMCCABE@ POSUB = @POSUB@ PO_SUFFIX = @PO_SUFFIX@ PRAGMA_COLUMNS = @PRAGMA_COLUMNS@ PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@ RANLIB = @RANLIB@ REPLACE_CHOWN = @REPLACE_CHOWN@ REPLACE_CLOSE = @REPLACE_CLOSE@ REPLACE_DPRINTF = @REPLACE_DPRINTF@ REPLACE_DUP = @REPLACE_DUP@ REPLACE_DUP2 = @REPLACE_DUP2@ REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@ REPLACE_FCLOSE = @REPLACE_FCLOSE@ REPLACE_FDOPEN = @REPLACE_FDOPEN@ REPLACE_FFLUSH = @REPLACE_FFLUSH@ REPLACE_FOPEN = @REPLACE_FOPEN@ REPLACE_FPRINTF = @REPLACE_FPRINTF@ REPLACE_FPURGE = @REPLACE_FPURGE@ REPLACE_FREOPEN = @REPLACE_FREOPEN@ REPLACE_FSEEK = @REPLACE_FSEEK@ REPLACE_FSEEKO = @REPLACE_FSEEKO@ REPLACE_FTELL = @REPLACE_FTELL@ REPLACE_FTELLO = @REPLACE_FTELLO@ REPLACE_FTRUNCATE = @REPLACE_FTRUNCATE@ REPLACE_GETCWD = @REPLACE_GETCWD@ REPLACE_GETDELIM = @REPLACE_GETDELIM@ REPLACE_GETDOMAINNAME = @REPLACE_GETDOMAINNAME@ REPLACE_GETDTABLESIZE = @REPLACE_GETDTABLESIZE@ REPLACE_GETGROUPS = @REPLACE_GETGROUPS@ REPLACE_GETLINE = @REPLACE_GETLINE@ REPLACE_GETLOGIN_R = @REPLACE_GETLOGIN_R@ REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@ REPLACE_ISATTY = @REPLACE_ISATTY@ REPLACE_LCHOWN = @REPLACE_LCHOWN@ REPLACE_LINK = @REPLACE_LINK@ REPLACE_LINKAT = @REPLACE_LINKAT@ REPLACE_LSEEK = @REPLACE_LSEEK@ REPLACE_MEMCHR = @REPLACE_MEMCHR@ REPLACE_MEMMEM = @REPLACE_MEMMEM@ REPLACE_NULL = @REPLACE_NULL@ REPLACE_OBSTACK_PRINTF = @REPLACE_OBSTACK_PRINTF@ REPLACE_PERROR = @REPLACE_PERROR@ REPLACE_POPEN = @REPLACE_POPEN@ REPLACE_PREAD = @REPLACE_PREAD@ REPLACE_PRINTF = @REPLACE_PRINTF@ REPLACE_PWRITE = @REPLACE_PWRITE@ REPLACE_READ = @REPLACE_READ@ REPLACE_READLINK = @REPLACE_READLINK@ REPLACE_REMOVE = @REPLACE_REMOVE@ REPLACE_RENAME = @REPLACE_RENAME@ REPLACE_RENAMEAT = @REPLACE_RENAMEAT@ REPLACE_RMDIR = @REPLACE_RMDIR@ REPLACE_SLEEP = @REPLACE_SLEEP@ REPLACE_SNPRINTF = @REPLACE_SNPRINTF@ REPLACE_SPRINTF = @REPLACE_SPRINTF@ REPLACE_STDIO_READ_FUNCS = @REPLACE_STDIO_READ_FUNCS@ REPLACE_STDIO_WRITE_FUNCS = @REPLACE_STDIO_WRITE_FUNCS@ REPLACE_STPNCPY = @REPLACE_STPNCPY@ REPLACE_STRCASESTR = @REPLACE_STRCASESTR@ REPLACE_STRCHRNUL = @REPLACE_STRCHRNUL@ REPLACE_STRDUP = @REPLACE_STRDUP@ REPLACE_STRERROR = @REPLACE_STRERROR@ REPLACE_STRERROR_R = @REPLACE_STRERROR_R@ REPLACE_STRNCAT = @REPLACE_STRNCAT@ REPLACE_STRNDUP = @REPLACE_STRNDUP@ REPLACE_STRNLEN = @REPLACE_STRNLEN@ REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@ REPLACE_STRSTR = @REPLACE_STRSTR@ REPLACE_STRTOK_R = @REPLACE_STRTOK_R@ REPLACE_SYMLINK = @REPLACE_SYMLINK@ REPLACE_TMPFILE = @REPLACE_TMPFILE@ REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@ REPLACE_UNLINK = @REPLACE_UNLINK@ REPLACE_UNLINKAT = @REPLACE_UNLINKAT@ REPLACE_USLEEP = @REPLACE_USLEEP@ REPLACE_VASPRINTF = @REPLACE_VASPRINTF@ REPLACE_VDPRINTF = @REPLACE_VDPRINTF@ REPLACE_VFPRINTF = @REPLACE_VFPRINTF@ REPLACE_VPRINTF = @REPLACE_VPRINTF@ REPLACE_VSNPRINTF = @REPLACE_VSNPRINTF@ REPLACE_VSPRINTF = @REPLACE_VSPRINTF@ REPLACE_WRITE = @REPLACE_WRITE@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STDARG_H = @STDARG_H@ STDBOOL_H = @STDBOOL_H@ STDDEF_H = @STDDEF_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@ USE_NLS = @USE_NLS@ VALGRIND = @VALGRIND@ VERSION = @VERSION@ VERSION_MAJOR = @VERSION_MAJOR@ VERSION_MINOR = @VERSION_MINOR@ VERSION_NUMBER = @VERSION_NUMBER@ VERSION_PATCH = @VERSION_PATCH@ WARN_CFLAGS = @WARN_CFLAGS@ WERROR_CFLAGS = @WERROR_CFLAGS@ WINDOWS_64_BIT_OFF_T = @WINDOWS_64_BIT_OFF_T@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gl_LIBOBJS = @gl_LIBOBJS@ gl_LTLIBOBJS = @gl_LTLIBOBJS@ gltests_LIBOBJS = @gltests_LIBOBJS@ gltests_LTLIBOBJS = @gltests_LTLIBOBJS@ gltests_WITNESS = @gltests_WITNESS@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ libgl_LIBOBJS = @libgl_LIBOBJS@ libgl_LTLIBOBJS = @libgl_LTLIBOBJS@ libgltests_LIBOBJS = @libgltests_LIBOBJS@ libgltests_LTLIBOBJS = @libgltests_LTLIBOBJS@ libgltests_WITNESS = @libgltests_WITNESS@ localedir = @localedir@ localstatedir = @localstatedir@ 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@ srcgl_LIBOBJS = @srcgl_LIBOBJS@ srcgl_LTLIBOBJS = @srcgl_LTLIBOBJS@ srcgltests_LIBOBJS = @srcgltests_LIBOBJS@ srcgltests_LTLIBOBJS = @srcgltests_LTLIBOBJS@ srcgltests_WITNESS = @srcgltests_WITNESS@ 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 = gss.html gss.ps gss.pdf \ gdoc asciidoc asciidoc.conf texinfo.conf texinfo.css info_TEXINFOS = gss.texi gss_TEXINFOS = fdl-1.3.texi $(gdoc_TEXINFOS) AM_MAKEINFOHTMLFLAGS = --no-split --number-sections --css-include=texinfo.css dist_man_MANS = gss.1 $(gdoc_MANS) MAINTAINERCLEANFILES = $(dist_man_MANS) # GDOC GDOC_SRC = $(top_srcdir)/lib/*.c GDOC_TEXI_PREFIX = texi/ GDOC_MAN_PREFIX = man/ GDOC_MAN_EXTRA_ARGS = -module $(PACKAGE) -sourceversion $(VERSION) \ -bugsto $(PACKAGE_BUGREPORT) -includefuncprefix -seeinfo $(PACKAGE) \ -copyright "2003-2013 Simon Josefsson" \ -verbatimcopying -pkg-name "$(PACKAGE_NAME)" BUILT_SOURCES = Makefile.gdoc # ### asn1.c # # asn1.c: gss_encapsulate_token # asn1.c: gss_decapsulate_token # ### context.c # # context.c: gss_init_sec_context # context.c: gss_accept_sec_context # context.c: gss_delete_sec_context # context.c: gss_process_context_token # context.c: gss_context_time # context.c: gss_inquire_context # context.c: gss_wrap_size_limit # context.c: gss_export_sec_context # context.c: gss_import_sec_context # ### cred.c # # cred.c: gss_acquire_cred # cred.c: gss_add_cred # cred.c: gss_inquire_cred # cred.c: gss_inquire_cred_by_mech # cred.c: gss_release_cred # ### error.c # # error.c: gss_display_status # ### ext.c # # ext.c: gss_userok # ### meta.c # # ### misc.c # # misc.c: gss_create_empty_oid_set # misc.c: gss_add_oid_set_member # misc.c: gss_test_oid_set_member # misc.c: gss_release_oid_set # misc.c: gss_indicate_mechs # misc.c: gss_release_buffer # ### msg.c # # msg.c: gss_get_mic # msg.c: gss_verify_mic # msg.c: gss_wrap # msg.c: gss_unwrap # ### name.c # # name.c: gss_import_name # name.c: gss_display_name # name.c: gss_compare_name # name.c: gss_release_name # name.c: gss_inquire_names_for_mech # name.c: gss_inquire_mechs_for_name # name.c: gss_export_name # name.c: gss_canonicalize_name # name.c: gss_duplicate_name # ### obsolete.c # # ### oid.c # # oid.c: gss_oid_equal # ### saslname.c # # saslname.c: gss_inquire_saslname_for_mech # saslname.c: gss_inquire_mech_for_saslname # ### version.c # # version.c: gss_check_version gdoc_TEXINFOS = texi/asn1.c.texi texi/gss_encapsulate_token.texi \ texi/gss_decapsulate_token.texi texi/context.c.texi \ texi/gss_init_sec_context.texi \ texi/gss_accept_sec_context.texi \ texi/gss_delete_sec_context.texi \ texi/gss_process_context_token.texi texi/gss_context_time.texi \ texi/gss_inquire_context.texi texi/gss_wrap_size_limit.texi \ texi/gss_export_sec_context.texi \ texi/gss_import_sec_context.texi texi/cred.c.texi \ texi/gss_acquire_cred.texi texi/gss_add_cred.texi \ texi/gss_inquire_cred.texi texi/gss_inquire_cred_by_mech.texi \ texi/gss_release_cred.texi texi/error.c.texi \ texi/gss_display_status.texi texi/ext.c.texi \ texi/gss_userok.texi texi/meta.c.texi texi/misc.c.texi \ texi/gss_create_empty_oid_set.texi \ texi/gss_add_oid_set_member.texi \ texi/gss_test_oid_set_member.texi \ texi/gss_release_oid_set.texi texi/gss_indicate_mechs.texi \ texi/gss_release_buffer.texi texi/msg.c.texi \ texi/gss_get_mic.texi texi/gss_verify_mic.texi \ texi/gss_wrap.texi texi/gss_unwrap.texi texi/name.c.texi \ texi/gss_import_name.texi texi/gss_display_name.texi \ texi/gss_compare_name.texi texi/gss_release_name.texi \ texi/gss_inquire_names_for_mech.texi \ texi/gss_inquire_mechs_for_name.texi texi/gss_export_name.texi \ texi/gss_canonicalize_name.texi texi/gss_duplicate_name.texi \ texi/obsolete.c.texi texi/oid.c.texi texi/gss_oid_equal.texi \ texi/saslname.c.texi texi/gss_inquire_saslname_for_mech.texi \ texi/gss_inquire_mech_for_saslname.texi texi/version.c.texi \ texi/gss_check_version.texi gdoc_MANS = man/gss_encapsulate_token.3 man/gss_decapsulate_token.3 \ man/gss_init_sec_context.3 man/gss_accept_sec_context.3 \ man/gss_delete_sec_context.3 man/gss_process_context_token.3 \ man/gss_context_time.3 man/gss_inquire_context.3 \ man/gss_wrap_size_limit.3 man/gss_export_sec_context.3 \ man/gss_import_sec_context.3 man/gss_acquire_cred.3 \ man/gss_add_cred.3 man/gss_inquire_cred.3 \ man/gss_inquire_cred_by_mech.3 man/gss_release_cred.3 \ man/gss_display_status.3 man/gss_userok.3 \ man/gss_create_empty_oid_set.3 man/gss_add_oid_set_member.3 \ man/gss_test_oid_set_member.3 man/gss_release_oid_set.3 \ man/gss_indicate_mechs.3 man/gss_release_buffer.3 \ man/gss_get_mic.3 man/gss_verify_mic.3 man/gss_wrap.3 \ man/gss_unwrap.3 man/gss_import_name.3 man/gss_display_name.3 \ man/gss_compare_name.3 man/gss_release_name.3 \ man/gss_inquire_names_for_mech.3 \ man/gss_inquire_mechs_for_name.3 man/gss_export_name.3 \ man/gss_canonicalize_name.3 man/gss_duplicate_name.3 \ man/gss_oid_equal.3 man/gss_inquire_saslname_for_mech.3 \ man/gss_inquire_mech_for_saslname.3 man/gss_check_version.3 all: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) all-recursive .SUFFIXES: .SUFFIXES: .dvi .html .info .pdf .ps .texi $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(srcdir)/Makefile.gdoci $(srcdir)/Makefile.gdoc $(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; $(srcdir)/Makefile.gdoci $(srcdir)/Makefile.gdoc: $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs .texi.info: $(AM_V_MAKEINFO)restore=: && backupdir="$(am__leading_dot)am$$$$" && \ am__cwd=`pwd` && $(am__cd) $(srcdir) && \ rm -rf $$backupdir && mkdir $$backupdir && \ if ($(MAKEINFO) --version) >/dev/null 2>&1; then \ for f in $@ $@-[0-9] $@-[0-9][0-9] $(@:.info=).i[0-9] $(@:.info=).i[0-9][0-9]; do \ if test -f $$f; then mv $$f $$backupdir; restore=mv; else :; fi; \ done; \ else :; fi && \ cd "$$am__cwd"; \ if $(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \ -o $@ $<; \ then \ rc=0; \ $(am__cd) $(srcdir); \ else \ rc=$$?; \ $(am__cd) $(srcdir) && \ $$restore $$backupdir/* `echo "./$@" | sed 's|[^/]*$$||'`; \ fi; \ rm -rf $$backupdir; exit $$rc .texi.dvi: $(AM_V_TEXI2DVI)TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \ MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \ $(TEXI2DVI) $(AM_V_texinfo) --build-dir=$(@:.dvi=.t2d) -o $@ $(AM_V_texidevnull) \ $< .texi.pdf: $(AM_V_TEXI2PDF)TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \ MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \ $(TEXI2PDF) $(AM_V_texinfo) --build-dir=$(@:.pdf=.t2p) -o $@ $(AM_V_texidevnull) \ $< .texi.html: $(AM_V_MAKEINFO)rm -rf $(@:.html=.htp) $(AM_V_at)if $(MAKEINFOHTML) $(AM_MAKEINFOHTMLFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \ -o $(@:.html=.htp) $<; \ then \ rm -rf $@ && mv $(@:.html=.htp) $@; \ else \ rm -rf $(@:.html=.htp); exit 1; \ fi $(srcdir)/gss.info: gss.texi $(srcdir)/version.texi $(gss_TEXINFOS) gss.dvi: gss.texi $(srcdir)/version.texi $(gss_TEXINFOS) gss.pdf: gss.texi $(srcdir)/version.texi $(gss_TEXINFOS) gss.html: gss.texi $(srcdir)/version.texi $(gss_TEXINFOS) $(srcdir)/version.texi: $(srcdir)/stamp-vti $(srcdir)/stamp-vti: gss.texi $(top_srcdir)/configure @(dir=.; test -f ./gss.texi || dir=$(srcdir); \ set `$(SHELL) $(top_srcdir)/build-aux/mdate-sh $$dir/gss.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: $(AM_V_DVIPS)TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \ $(DVIPS) $(AM_V_texinfo) -o $@ $< uninstall-dvi-am: @$(NORMAL_UNINSTALL) @list='$(DVIS)'; test -n "$(dvidir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " rm -f '$(DESTDIR)$(dvidir)/$$f'"; \ rm -f "$(DESTDIR)$(dvidir)/$$f"; \ done uninstall-html-am: @$(NORMAL_UNINSTALL) @list='$(HTMLS)'; test -n "$(htmldir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " rm -rf '$(DESTDIR)$(htmldir)/$$f'"; \ rm -rf "$(DESTDIR)$(htmldir)/$$f"; \ done uninstall-info-am: @$(PRE_UNINSTALL) @if test -d '$(DESTDIR)$(infodir)' && $(am__can_run_installinfo); then \ list='$(INFO_DEPS)'; \ for file in $$list; do \ relfile=`echo "$$file" | sed 's|^.*/||'`; \ echo " install-info --info-dir='$(DESTDIR)$(infodir)' --remove '$(DESTDIR)$(infodir)/$$relfile'"; \ if install-info --info-dir="$(DESTDIR)$(infodir)" --remove "$(DESTDIR)$(infodir)/$$relfile"; \ then :; else test ! -f "$(DESTDIR)$(infodir)/$$relfile" || exit 1; fi; \ done; \ else :; fi @$(NORMAL_UNINSTALL) @list='$(INFO_DEPS)'; \ for file in $$list; do \ relfile=`echo "$$file" | sed 's|^.*/||'`; \ relfile_i=`echo "$$relfile" | sed 's|\.info$$||;s|$$|.i|'`; \ (if test -d "$(DESTDIR)$(infodir)" && cd "$(DESTDIR)$(infodir)"; then \ echo " cd '$(DESTDIR)$(infodir)' && rm -f $$relfile $$relfile-[0-9] $$relfile-[0-9][0-9] $$relfile_i[0-9] $$relfile_i[0-9][0-9]"; \ rm -f $$relfile $$relfile-[0-9] $$relfile-[0-9][0-9] $$relfile_i[0-9] $$relfile_i[0-9][0-9]; \ else :; fi); \ done uninstall-pdf-am: @$(NORMAL_UNINSTALL) @list='$(PDFS)'; test -n "$(pdfdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " rm -f '$(DESTDIR)$(pdfdir)/$$f'"; \ rm -f "$(DESTDIR)$(pdfdir)/$$f"; \ done uninstall-ps-am: @$(NORMAL_UNINSTALL) @list='$(PSS)'; test -n "$(psdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " rm -f '$(DESTDIR)$(psdir)/$$f'"; \ rm -f "$(DESTDIR)$(psdir)/$$f"; \ done dist-info: $(INFO_DEPS) @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ list='$(INFO_DEPS)'; \ for base in $$list; do \ case $$base in \ $(srcdir)/*) base=`echo "$$base" | sed "s|^$$srcdirstrip/||"`;; \ esac; \ if test -f $$base; then d=.; else d=$(srcdir); fi; \ base_i=`echo "$$base" | sed 's|\.info$$||;s|$$|.i|'`; \ for file in $$d/$$base $$d/$$base-[0-9] $$d/$$base-[0-9][0-9] $$d/$$base_i[0-9] $$d/$$base_i[0-9][0-9]; do \ if test -f $$file; then \ relfile=`expr "$$file" : "$$d/\(.*\)"`; \ test -f "$(distdir)/$$relfile" || \ cp -p $$file "$(distdir)/$$relfile"; \ else :; fi; \ done; \ done mostlyclean-aminfo: -rm -rf gss.t2d gss.t2p clean-aminfo: -test -z "gss.dvi gss.pdf gss.ps gss.html" \ || rm -rf gss.dvi gss.pdf gss.ps gss.html maintainer-clean-aminfo: @list='$(INFO_DEPS)'; for i in $$list; do \ i_i=`echo "$$i" | sed 's|\.info$$||;s|$$|.i|'`; \ echo " rm -f $$i $$i-[0-9] $$i-[0-9][0-9] $$i_i[0-9] $$i_i[0-9][0-9]"; \ rm -f $$i $$i-[0-9] $$i-[0-9][0-9] $$i_i[0-9] $$i_i[0-9][0-9]; \ done install-man1: $(dist_man_MANS) @$(NORMAL_INSTALL) @list1=''; \ list2='$(dist_man_MANS)'; \ test -n "$(man1dir)" \ && test -n "`echo $$list1$$list2`" \ || exit 0; \ echo " $(MKDIR_P) '$(DESTDIR)$(man1dir)'"; \ $(MKDIR_P) "$(DESTDIR)$(man1dir)" || exit 1; \ { for i in $$list1; do echo "$$i"; done; \ if test -n "$$list2"; then \ for i in $$list2; do echo "$$i"; done \ | sed -n '/\.1[a-z]*$$/p'; \ fi; \ } | while read p; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; echo "$$p"; \ done | \ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ sed 'N;N;s,\n, ,g' | { \ list=; while read file base inst; do \ if test "$$base" = "$$inst"; then list="$$list $$file"; else \ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \ fi; \ done; \ for i in $$list; do echo "$$i"; done | $(am__base_list) | \ while read files; do \ test -z "$$files" || { \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \ done; } uninstall-man1: @$(NORMAL_UNINSTALL) @list=''; test -n "$(man1dir)" || exit 0; \ files=`{ for i in $$list; do echo "$$i"; done; \ l2='$(dist_man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.1[a-z]*$$/p'; \ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ dir='$(DESTDIR)$(man1dir)'; $(am__uninstall_files_from_dir) install-man3: $(dist_man_MANS) @$(NORMAL_INSTALL) @list1=''; \ list2='$(dist_man_MANS)'; \ test -n "$(man3dir)" \ && test -n "`echo $$list1$$list2`" \ || exit 0; \ echo " $(MKDIR_P) '$(DESTDIR)$(man3dir)'"; \ $(MKDIR_P) "$(DESTDIR)$(man3dir)" || exit 1; \ { for i in $$list1; do echo "$$i"; done; \ if test -n "$$list2"; then \ for i in $$list2; do echo "$$i"; done \ | sed -n '/\.3[a-z]*$$/p'; \ fi; \ } | while read p; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; echo "$$p"; \ done | \ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^3][0-9a-z]*$$,3,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ sed 'N;N;s,\n, ,g' | { \ list=; while read file base inst; do \ if test "$$base" = "$$inst"; then list="$$list $$file"; else \ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man3dir)/$$inst'"; \ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man3dir)/$$inst" || exit $$?; \ fi; \ done; \ for i in $$list; do echo "$$i"; done | $(am__base_list) | \ while read files; do \ test -z "$$files" || { \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man3dir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(man3dir)" || exit $$?; }; \ done; } uninstall-man3: @$(NORMAL_UNINSTALL) @list=''; test -n "$(man3dir)" || exit 0; \ files=`{ for i in $$list; do echo "$$i"; done; \ l2='$(dist_man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.3[a-z]*$$/p'; \ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^3][0-9a-z]*$$,3,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ dir='$(DESTDIR)$(man3dir)'; $(am__uninstall_files_from_dir) # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$(top_distdir)" distdir="$(distdir)" \ dist-info check-am: all-am check: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) 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: $(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: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) 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) @list='$(DVIS)'; test -n "$(dvidir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(dvidir)'"; \ $(MKDIR_P) "$(DESTDIR)$(dvidir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(dvidir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(dvidir)" || exit $$?; \ done install-exec-am: install-html: install-html-recursive install-html-am: $(HTMLS) @$(NORMAL_INSTALL) @list='$(HTMLS)'; list2=; test -n "$(htmldir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(htmldir)'"; \ $(MKDIR_P) "$(DESTDIR)$(htmldir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p" || test -d "$$p"; then d=; else d="$(srcdir)/"; fi; \ $(am__strip_dir) \ d2=$$d$$p; \ if test -d "$$d2"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(htmldir)/$$f'"; \ $(MKDIR_P) "$(DESTDIR)$(htmldir)/$$f" || exit 1; \ echo " $(INSTALL_DATA) '$$d2'/* '$(DESTDIR)$(htmldir)/$$f'"; \ $(INSTALL_DATA) "$$d2"/* "$(DESTDIR)$(htmldir)/$$f" || exit $$?; \ else \ list2="$$list2 $$d2"; \ fi; \ done; \ test -z "$$list2" || { echo "$$list2" | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(htmldir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(htmldir)" || exit $$?; \ done; } install-info: install-info-recursive install-info-am: $(INFO_DEPS) @$(NORMAL_INSTALL) @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ list='$(INFO_DEPS)'; test -n "$(infodir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(infodir)'"; \ $(MKDIR_P) "$(DESTDIR)$(infodir)" || exit 1; \ fi; \ for file in $$list; do \ case $$file in \ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ esac; \ if test -f $$file; then d=.; else d=$(srcdir); fi; \ file_i=`echo "$$file" | sed 's|\.info$$||;s|$$|.i|'`; \ for ifile in $$d/$$file $$d/$$file-[0-9] $$d/$$file-[0-9][0-9] \ $$d/$$file_i[0-9] $$d/$$file_i[0-9][0-9] ; do \ if test -f $$ifile; then \ echo "$$ifile"; \ else : ; fi; \ done; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(infodir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(infodir)" || exit $$?; done @$(POST_INSTALL) @if $(am__can_run_installinfo); then \ list='$(INFO_DEPS)'; test -n "$(infodir)" || list=; \ for file in $$list; do \ relfile=`echo "$$file" | sed 's|^.*/||'`; \ echo " install-info --info-dir='$(DESTDIR)$(infodir)' '$(DESTDIR)$(infodir)/$$relfile'";\ install-info --info-dir="$(DESTDIR)$(infodir)" "$(DESTDIR)$(infodir)/$$relfile" || :;\ done; \ else : ; fi install-man: install-man1 install-man3 install-pdf: install-pdf-recursive install-pdf-am: $(PDFS) @$(NORMAL_INSTALL) @list='$(PDFS)'; test -n "$(pdfdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(pdfdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(pdfdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pdfdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(pdfdir)" || exit $$?; done install-ps: install-ps-recursive install-ps-am: $(PSS) @$(NORMAL_INSTALL) @list='$(PSS)'; test -n "$(psdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(psdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(psdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(psdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(psdir)" || exit $$?; done installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-aminfo \ maintainer-clean-generic maintainer-clean-vti mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-aminfo mostlyclean-generic \ mostlyclean-libtool mostlyclean-vti pdf: pdf-recursive pdf-am: $(PDFS) ps: ps-recursive ps-am: $(PSS) uninstall-am: uninstall-dvi-am uninstall-html-am uninstall-info-am \ uninstall-man uninstall-pdf-am uninstall-ps-am uninstall-man: uninstall-man1 uninstall-man3 .MAKE: $(am__recursive_targets) all check install install-am \ install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ check-am clean clean-aminfo clean-generic clean-libtool \ cscopelist-am ctags ctags-am dist-info distclean \ distclean-generic distclean-libtool distclean-tags distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-man1 \ install-man3 install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs installdirs-am maintainer-clean \ maintainer-clean-aminfo maintainer-clean-generic \ maintainer-clean-vti mostlyclean mostlyclean-aminfo \ mostlyclean-generic mostlyclean-libtool mostlyclean-vti pdf \ pdf-am ps ps-am tags tags-am uninstall uninstall-am \ uninstall-dvi-am uninstall-html-am uninstall-info-am \ uninstall-man uninstall-man1 uninstall-man3 uninstall-pdf-am \ uninstall-ps-am gss.1: $(top_srcdir)/src/gss.c $(top_srcdir)/src/gss.ggo \ $(top_srcdir)/configure.ac $(HELP2MAN) \ --name="Generic Security Service command line interface" \ --output=$@ $(top_builddir)/src/gss Makefile.gdoc: $(top_builddir)/configure Makefile.am Makefile.gdoci $(GDOC_SRC) echo '# This file is automatically generated. DO NOT EDIT! -*- makefile -*-' > Makefile.gdoc echo >> Makefile.gdoc echo 'gdoc_TEXINFOS =' >> Makefile.gdoc echo 'gdoc_MANS =' >> Makefile.gdoc echo >> Makefile.gdoc for file in $(GDOC_SRC); do \ shortfile=`basename $$file`; \ echo "#" >> Makefile.gdoc; \ echo "### $$shortfile" >> Makefile.gdoc; \ echo "#" >> Makefile.gdoc; \ echo "gdoc_TEXINFOS += $(GDOC_TEXI_PREFIX)$$shortfile.texi" >> Makefile.gdoc; \ echo "$(GDOC_TEXI_PREFIX)$$shortfile.texi: $$file" >> Makefile.gdoc; \ echo 'TABmkdir -p `dirname $$@`' | sed "s/TAB/\t/" >> Makefile.gdoc; \ echo 'TAB$$(PERL) $$(top_srcdir)/doc/gdoc -texinfo $$(GDOC_TEXI_EXTRA_ARGS) $$< > $$@' | sed "s/TAB/\t/" >> Makefile.gdoc; \ echo >> Makefile.gdoc; \ functions=`$(PERL) $(srcdir)/gdoc -listfunc $$file`; \ for function in $$functions; do \ echo "# $$shortfile: $$function" >> Makefile.gdoc; \ echo "gdoc_TEXINFOS += $(GDOC_TEXI_PREFIX)$$function.texi" >> Makefile.gdoc; \ echo "$(GDOC_TEXI_PREFIX)$$function.texi: $$file" >> Makefile.gdoc; \ echo 'TABmkdir -p `dirname $$@`' | sed "s/TAB/\t/" >> Makefile.gdoc; \ echo 'TAB$$(PERL) $$(top_srcdir)/doc/gdoc -texinfo $$(GDOC_TEXI_EXTRA_ARGS) -function'" $$function"' $$< > $$@' | sed "s/TAB/\t/" >> Makefile.gdoc; \ echo >> Makefile.gdoc; \ echo "gdoc_MANS += $(GDOC_MAN_PREFIX)$$function.3" >> Makefile.gdoc; \ echo "$(GDOC_MAN_PREFIX)$$function.3: $$file" >> Makefile.gdoc; \ echo 'TABmkdir -p `dirname $$@`' | sed "s/TAB/\t/" >> Makefile.gdoc; \ echo 'TAB$$(PERL) $$(top_srcdir)/doc/gdoc -man $$(GDOC_MAN_EXTRA_ARGS) -function'" $$function"' $$< > $$@' | sed "s/TAB/\t/" >> Makefile.gdoc; \ echo >> Makefile.gdoc; \ done; \ echo >> Makefile.gdoc; \ done $(MAKE) Makefile texi/asn1.c.texi: ../lib/asn1.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) $< > $@ texi/gss_encapsulate_token.texi: ../lib/asn1.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) -function gss_encapsulate_token $< > $@ man/gss_encapsulate_token.3: ../lib/asn1.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -man $(GDOC_MAN_EXTRA_ARGS) -function gss_encapsulate_token $< > $@ texi/gss_decapsulate_token.texi: ../lib/asn1.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) -function gss_decapsulate_token $< > $@ man/gss_decapsulate_token.3: ../lib/asn1.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -man $(GDOC_MAN_EXTRA_ARGS) -function gss_decapsulate_token $< > $@ texi/context.c.texi: ../lib/context.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) $< > $@ texi/gss_init_sec_context.texi: ../lib/context.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) -function gss_init_sec_context $< > $@ man/gss_init_sec_context.3: ../lib/context.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -man $(GDOC_MAN_EXTRA_ARGS) -function gss_init_sec_context $< > $@ texi/gss_accept_sec_context.texi: ../lib/context.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) -function gss_accept_sec_context $< > $@ man/gss_accept_sec_context.3: ../lib/context.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -man $(GDOC_MAN_EXTRA_ARGS) -function gss_accept_sec_context $< > $@ texi/gss_delete_sec_context.texi: ../lib/context.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) -function gss_delete_sec_context $< > $@ man/gss_delete_sec_context.3: ../lib/context.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -man $(GDOC_MAN_EXTRA_ARGS) -function gss_delete_sec_context $< > $@ texi/gss_process_context_token.texi: ../lib/context.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) -function gss_process_context_token $< > $@ man/gss_process_context_token.3: ../lib/context.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -man $(GDOC_MAN_EXTRA_ARGS) -function gss_process_context_token $< > $@ texi/gss_context_time.texi: ../lib/context.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) -function gss_context_time $< > $@ man/gss_context_time.3: ../lib/context.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -man $(GDOC_MAN_EXTRA_ARGS) -function gss_context_time $< > $@ texi/gss_inquire_context.texi: ../lib/context.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) -function gss_inquire_context $< > $@ man/gss_inquire_context.3: ../lib/context.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -man $(GDOC_MAN_EXTRA_ARGS) -function gss_inquire_context $< > $@ texi/gss_wrap_size_limit.texi: ../lib/context.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) -function gss_wrap_size_limit $< > $@ man/gss_wrap_size_limit.3: ../lib/context.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -man $(GDOC_MAN_EXTRA_ARGS) -function gss_wrap_size_limit $< > $@ texi/gss_export_sec_context.texi: ../lib/context.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) -function gss_export_sec_context $< > $@ man/gss_export_sec_context.3: ../lib/context.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -man $(GDOC_MAN_EXTRA_ARGS) -function gss_export_sec_context $< > $@ texi/gss_import_sec_context.texi: ../lib/context.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) -function gss_import_sec_context $< > $@ man/gss_import_sec_context.3: ../lib/context.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -man $(GDOC_MAN_EXTRA_ARGS) -function gss_import_sec_context $< > $@ texi/cred.c.texi: ../lib/cred.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) $< > $@ texi/gss_acquire_cred.texi: ../lib/cred.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) -function gss_acquire_cred $< > $@ man/gss_acquire_cred.3: ../lib/cred.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -man $(GDOC_MAN_EXTRA_ARGS) -function gss_acquire_cred $< > $@ texi/gss_add_cred.texi: ../lib/cred.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) -function gss_add_cred $< > $@ man/gss_add_cred.3: ../lib/cred.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -man $(GDOC_MAN_EXTRA_ARGS) -function gss_add_cred $< > $@ texi/gss_inquire_cred.texi: ../lib/cred.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) -function gss_inquire_cred $< > $@ man/gss_inquire_cred.3: ../lib/cred.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -man $(GDOC_MAN_EXTRA_ARGS) -function gss_inquire_cred $< > $@ texi/gss_inquire_cred_by_mech.texi: ../lib/cred.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) -function gss_inquire_cred_by_mech $< > $@ man/gss_inquire_cred_by_mech.3: ../lib/cred.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -man $(GDOC_MAN_EXTRA_ARGS) -function gss_inquire_cred_by_mech $< > $@ texi/gss_release_cred.texi: ../lib/cred.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) -function gss_release_cred $< > $@ man/gss_release_cred.3: ../lib/cred.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -man $(GDOC_MAN_EXTRA_ARGS) -function gss_release_cred $< > $@ texi/error.c.texi: ../lib/error.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) $< > $@ texi/gss_display_status.texi: ../lib/error.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) -function gss_display_status $< > $@ man/gss_display_status.3: ../lib/error.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -man $(GDOC_MAN_EXTRA_ARGS) -function gss_display_status $< > $@ texi/ext.c.texi: ../lib/ext.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) $< > $@ texi/gss_userok.texi: ../lib/ext.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) -function gss_userok $< > $@ man/gss_userok.3: ../lib/ext.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -man $(GDOC_MAN_EXTRA_ARGS) -function gss_userok $< > $@ texi/meta.c.texi: ../lib/meta.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) $< > $@ texi/misc.c.texi: ../lib/misc.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) $< > $@ texi/gss_create_empty_oid_set.texi: ../lib/misc.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) -function gss_create_empty_oid_set $< > $@ man/gss_create_empty_oid_set.3: ../lib/misc.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -man $(GDOC_MAN_EXTRA_ARGS) -function gss_create_empty_oid_set $< > $@ texi/gss_add_oid_set_member.texi: ../lib/misc.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) -function gss_add_oid_set_member $< > $@ man/gss_add_oid_set_member.3: ../lib/misc.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -man $(GDOC_MAN_EXTRA_ARGS) -function gss_add_oid_set_member $< > $@ texi/gss_test_oid_set_member.texi: ../lib/misc.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) -function gss_test_oid_set_member $< > $@ man/gss_test_oid_set_member.3: ../lib/misc.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -man $(GDOC_MAN_EXTRA_ARGS) -function gss_test_oid_set_member $< > $@ texi/gss_release_oid_set.texi: ../lib/misc.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) -function gss_release_oid_set $< > $@ man/gss_release_oid_set.3: ../lib/misc.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -man $(GDOC_MAN_EXTRA_ARGS) -function gss_release_oid_set $< > $@ texi/gss_indicate_mechs.texi: ../lib/misc.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) -function gss_indicate_mechs $< > $@ man/gss_indicate_mechs.3: ../lib/misc.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -man $(GDOC_MAN_EXTRA_ARGS) -function gss_indicate_mechs $< > $@ texi/gss_release_buffer.texi: ../lib/misc.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) -function gss_release_buffer $< > $@ man/gss_release_buffer.3: ../lib/misc.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -man $(GDOC_MAN_EXTRA_ARGS) -function gss_release_buffer $< > $@ texi/msg.c.texi: ../lib/msg.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) $< > $@ texi/gss_get_mic.texi: ../lib/msg.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) -function gss_get_mic $< > $@ man/gss_get_mic.3: ../lib/msg.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -man $(GDOC_MAN_EXTRA_ARGS) -function gss_get_mic $< > $@ texi/gss_verify_mic.texi: ../lib/msg.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) -function gss_verify_mic $< > $@ man/gss_verify_mic.3: ../lib/msg.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -man $(GDOC_MAN_EXTRA_ARGS) -function gss_verify_mic $< > $@ texi/gss_wrap.texi: ../lib/msg.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) -function gss_wrap $< > $@ man/gss_wrap.3: ../lib/msg.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -man $(GDOC_MAN_EXTRA_ARGS) -function gss_wrap $< > $@ texi/gss_unwrap.texi: ../lib/msg.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) -function gss_unwrap $< > $@ man/gss_unwrap.3: ../lib/msg.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -man $(GDOC_MAN_EXTRA_ARGS) -function gss_unwrap $< > $@ texi/name.c.texi: ../lib/name.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) $< > $@ texi/gss_import_name.texi: ../lib/name.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) -function gss_import_name $< > $@ man/gss_import_name.3: ../lib/name.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -man $(GDOC_MAN_EXTRA_ARGS) -function gss_import_name $< > $@ texi/gss_display_name.texi: ../lib/name.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) -function gss_display_name $< > $@ man/gss_display_name.3: ../lib/name.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -man $(GDOC_MAN_EXTRA_ARGS) -function gss_display_name $< > $@ texi/gss_compare_name.texi: ../lib/name.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) -function gss_compare_name $< > $@ man/gss_compare_name.3: ../lib/name.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -man $(GDOC_MAN_EXTRA_ARGS) -function gss_compare_name $< > $@ texi/gss_release_name.texi: ../lib/name.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) -function gss_release_name $< > $@ man/gss_release_name.3: ../lib/name.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -man $(GDOC_MAN_EXTRA_ARGS) -function gss_release_name $< > $@ texi/gss_inquire_names_for_mech.texi: ../lib/name.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) -function gss_inquire_names_for_mech $< > $@ man/gss_inquire_names_for_mech.3: ../lib/name.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -man $(GDOC_MAN_EXTRA_ARGS) -function gss_inquire_names_for_mech $< > $@ texi/gss_inquire_mechs_for_name.texi: ../lib/name.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) -function gss_inquire_mechs_for_name $< > $@ man/gss_inquire_mechs_for_name.3: ../lib/name.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -man $(GDOC_MAN_EXTRA_ARGS) -function gss_inquire_mechs_for_name $< > $@ texi/gss_export_name.texi: ../lib/name.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) -function gss_export_name $< > $@ man/gss_export_name.3: ../lib/name.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -man $(GDOC_MAN_EXTRA_ARGS) -function gss_export_name $< > $@ texi/gss_canonicalize_name.texi: ../lib/name.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) -function gss_canonicalize_name $< > $@ man/gss_canonicalize_name.3: ../lib/name.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -man $(GDOC_MAN_EXTRA_ARGS) -function gss_canonicalize_name $< > $@ texi/gss_duplicate_name.texi: ../lib/name.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) -function gss_duplicate_name $< > $@ man/gss_duplicate_name.3: ../lib/name.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -man $(GDOC_MAN_EXTRA_ARGS) -function gss_duplicate_name $< > $@ texi/obsolete.c.texi: ../lib/obsolete.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) $< > $@ texi/oid.c.texi: ../lib/oid.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) $< > $@ texi/gss_oid_equal.texi: ../lib/oid.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) -function gss_oid_equal $< > $@ man/gss_oid_equal.3: ../lib/oid.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -man $(GDOC_MAN_EXTRA_ARGS) -function gss_oid_equal $< > $@ texi/saslname.c.texi: ../lib/saslname.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) $< > $@ texi/gss_inquire_saslname_for_mech.texi: ../lib/saslname.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) -function gss_inquire_saslname_for_mech $< > $@ man/gss_inquire_saslname_for_mech.3: ../lib/saslname.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -man $(GDOC_MAN_EXTRA_ARGS) -function gss_inquire_saslname_for_mech $< > $@ texi/gss_inquire_mech_for_saslname.texi: ../lib/saslname.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) -function gss_inquire_mech_for_saslname $< > $@ man/gss_inquire_mech_for_saslname.3: ../lib/saslname.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -man $(GDOC_MAN_EXTRA_ARGS) -function gss_inquire_mech_for_saslname $< > $@ texi/version.c.texi: ../lib/version.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) $< > $@ texi/gss_check_version.texi: ../lib/version.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -texinfo $(GDOC_TEXI_EXTRA_ARGS) -function gss_check_version $< > $@ man/gss_check_version.3: ../lib/version.c mkdir -p `dirname $@` $(PERL) $(top_srcdir)/doc/gdoc -man $(GDOC_MAN_EXTRA_ARGS) -function gss_check_version $< > $@ # 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: gss-1.0.3/doc/texi/0000755000000000000000000000000012415510376011000 500000000000000gss-1.0.3/doc/texi/oid.c.texi0000644000000000000000000000107712415507724012617 00000000000000@subheading gss_oid_equal @anchor{gss_oid_equal} @deftypefun {int} {gss_oid_equal} (gss_const_OID @var{first_oid}, gss_const_OID @var{second_oid}) @var{first_oid}: (Object ID, read) First Object identifier. @var{second_oid}: (Object ID, read) First Object identifier. Compare two OIDs for equality. The comparison is "deep", i.e., the actual byte sequences of the OIDs are compared instead of just the pointer equality. This function is standardized in RFC 6339. Return value: Returns boolean value true when the two OIDs are equal, otherwise false. @end deftypefun gss-1.0.3/doc/texi/version.c.texi0000644000000000000000000000076412415507727013536 00000000000000@subheading gss_check_version @anchor{gss_check_version} @deftypefun {const char *} {gss_check_version} (const char * @var{req_version}) @var{req_version}: version string to compare with, or NULL Check that the version of the library is at minimum the one given as a string in @@req_version. Return value: The actual version string of the library; NULL if the condition is not met. If NULL is passed to this function no check is done and only the version string is returned. @end deftypefun gss-1.0.3/doc/texi/gss_delete_sec_context.texi0000644000000000000000000000457412415507673016347 00000000000000@subheading gss_delete_sec_context @anchor{gss_delete_sec_context} @deftypefun {OM_uint32} {gss_delete_sec_context} (OM_uint32 * @var{minor_status}, gss_ctx_id_t * @var{context_handle}, gss_buffer_t @var{output_token}) @var{minor_status}: (Integer, modify) Mechanism specific status code. @var{context_handle}: (gss_ctx_id_t, modify) Context handle identifying context to delete. After deleting the context, the GSS-API will set this context handle to GSS_C_NO_CONTEXT. @var{output_token}: (buffer, opaque, modify, optional) Token to be sent to remote application to instruct it to also delete the context. It is recommended that applications specify GSS_C_NO_BUFFER for this parameter, requesting local deletion only. If a buffer parameter is provided by the application, the mechanism may return a token in it; mechanisms that implement only local deletion should set the length field of this token to zero to indicate to the application that no token is to be sent to the peer. Delete a security context. gss_delete_sec_context will delete the local data structures associated with the specified security context, and may generate an output_token, which when passed to the peer gss_process_context_token will instruct it to do likewise. If no token is required by the mechanism, the GSS-API should set the length field of the output_token (if provided) to zero. No further security services may be obtained using the context specified by context_handle. In addition to deleting established security contexts, gss_delete_sec_context must also be able to delete "half-built" security contexts resulting from an incomplete sequence of gss_init_sec_context()/gss_accept_sec_context() calls. The output_token parameter is retained for compatibility with version 1 of the GSS-API. It is recommended that both peer applications invoke gss_delete_sec_context passing the value GSS_C_NO_BUFFER for the output_token parameter, indicating that no token is required, and that gss_delete_sec_context should simply delete local context data structures. If the application does pass a valid buffer to gss_delete_sec_context, mechanisms are encouraged to return a zero-length token, indicating that no peer action is necessary, and that no token should be transferred by the application. Return value: @code{GSS_S_COMPLETE}: Successful completion. @code{GSS_S_NO_CONTEXT}: No valid context was supplied. @end deftypefun gss-1.0.3/doc/texi/gss_accept_sec_context.texi0000644000000000000000000002766512415507673016352 00000000000000@subheading gss_accept_sec_context @anchor{gss_accept_sec_context} @deftypefun {OM_uint32} {gss_accept_sec_context} (OM_uint32 * @var{minor_status}, gss_ctx_id_t * @var{context_handle}, const gss_cred_id_t @var{acceptor_cred_handle}, const gss_buffer_t @var{input_token_buffer}, const gss_channel_bindings_t @var{input_chan_bindings}, gss_name_t * @var{src_name}, gss_OID * @var{mech_type}, gss_buffer_t @var{output_token}, OM_uint32 * @var{ret_flags}, OM_uint32 * @var{time_rec}, gss_cred_id_t * @var{delegated_cred_handle}) @var{minor_status}: (Integer, modify) Mechanism specific status code. @var{context_handle}: (gss_ctx_id_t, read/modify) Context handle for new context. Supply GSS_C_NO_CONTEXT for first call; use value returned in subsequent calls. Once gss_accept_sec_context() has returned a value via this parameter, resources have been assigned to the corresponding context, and must be freed by the application after use with a call to gss_delete_sec_context(). @var{acceptor_cred_handle}: (gss_cred_id_t, read) Credential handle claimed by context acceptor. Specify GSS_C_NO_CREDENTIAL to accept the context as a default principal. If GSS_C_NO_CREDENTIAL is specified, but no default acceptor principal is defined, GSS_S_NO_CRED will be returned. @var{input_token_buffer}: (buffer, opaque, read) Token obtained from remote application. @var{input_chan_bindings}: (channel bindings, read, optional) Application- specified bindings. Allows application to securely bind channel identification information to the security context. If channel bindings are not used, specify GSS_C_NO_CHANNEL_BINDINGS. @var{src_name}: (gss_name_t, modify, optional) Authenticated name of context initiator. After use, this name should be deallocated by passing it to gss_release_name(). If not required, specify NULL. @var{mech_type}: (Object ID, modify, optional) Security mechanism used. The returned OID value will be a pointer into static storage, and should be treated as read-only by the caller (in particular, it does not need to be freed). If not required, specify NULL. @var{output_token}: (buffer, opaque, modify) Token to be passed to peer application. If the length field of the returned token buffer is 0, then no token need be passed to the peer application. If a non- zero length field is returned, the associated storage must be freed after use by the application with a call to gss_release_buffer(). @var{ret_flags}: (bit-mask, modify, optional) Contains various independent flags, each of which indicates that the context supports a specific service option. If not needed, specify NULL. Symbolic names are provided for each flag, and the symbolic names corresponding to the required flags should be logically-ANDed with the ret_flags value to test whether a given option is supported by the context. See below for the flags. @var{time_rec}: (Integer, modify, optional) Number of seconds for which the context will remain valid. Specify NULL if not required. @var{delegated_cred_handle}: (gss_cred_id_t, modify, optional credential) Handle for credentials received from context initiator. Only valid if deleg_flag in ret_flags is true, in which case an explicit credential handle (i.e. not GSS_C_NO_CREDENTIAL) will be returned; if deleg_flag is false, gss_accept_sec_context() will set this parameter to GSS_C_NO_CREDENTIAL. If a credential handle is returned, the associated resources must be released by the application after use with a call to gss_release_cred(). Specify NULL if not required. Allows a remotely initiated security context between the application and a remote peer to be established. The routine may return a output_token which should be transferred to the peer application, where the peer application will present it to gss_init_sec_context. If no token need be sent, gss_accept_sec_context will indicate this by setting the length field of the output_token argument to zero. To complete the context establishment, one or more reply tokens may be required from the peer application; if so, gss_accept_sec_context will return a status flag of GSS_S_CONTINUE_NEEDED, in which case it should be called again when the reply token is received from the peer application, passing the token to gss_accept_sec_context via the input_token parameters. Portable applications should be constructed to use the token length and return status to determine whether a token needs to be sent or waited for. Thus a typical portable caller should always invoke gss_accept_sec_context within a loop: @example gss_ctx_id_t context_hdl = GSS_C_NO_CONTEXT; do @{ receive_token_from_peer(input_token); maj_stat = gss_accept_sec_context(&min_stat, &context_hdl, cred_hdl, input_token, input_bindings, &client_name, &mech_type, output_token, &ret_flags, &time_rec, &deleg_cred); if (GSS_ERROR(maj_stat)) @{ report_error(maj_stat, min_stat); @}; if (output_token->length != 0) @{ send_token_to_peer(output_token); gss_release_buffer(&min_stat, output_token); @}; if (GSS_ERROR(maj_stat)) @{ if (context_hdl != GSS_C_NO_CONTEXT) gss_delete_sec_context(&min_stat, &context_hdl, GSS_C_NO_BUFFER); break; @}; @} while (maj_stat & GSS_S_CONTINUE_NEEDED); @end example Whenever the routine returns a major status that includes the value GSS_S_CONTINUE_NEEDED, the context is not fully established and the following restrictions apply to the output parameters: The value returned via the time_rec parameter is undefined Unless the accompanying ret_flags parameter contains the bit GSS_C_PROT_READY_FLAG, indicating that per-message services may be applied in advance of a successful completion status, the value returned via the mech_type parameter may be undefined until the routine returns a major status value of GSS_S_COMPLETE. The values of the GSS_C_DELEG_FLAG, GSS_C_MUTUAL_FLAG,GSS_C_REPLAY_FLAG, GSS_C_SEQUENCE_FLAG, GSS_C_CONF_FLAG,GSS_C_INTEG_FLAG and GSS_C_ANON_FLAG bits returned via the ret_flags parameter should contain the values that the implementation expects would be valid if context establishment were to succeed. The values of the GSS_C_PROT_READY_FLAG and GSS_C_TRANS_FLAG bits within ret_flags should indicate the actual state at the time gss_accept_sec_context returns, whether or not the context is fully established. Although this requires that GSS-API implementations set the GSS_C_PROT_READY_FLAG in the final ret_flags returned to a caller (i.e. when accompanied by a GSS_S_COMPLETE status code), applications should not rely on this behavior as the flag was not defined in Version 1 of the GSS-API. Instead, applications should be prepared to use per-message services after a successful context establishment, according to the GSS_C_INTEG_FLAG and GSS_C_CONF_FLAG values. All other bits within the ret_flags argument should be set to zero. While the routine returns GSS_S_CONTINUE_NEEDED, the values returned via the ret_flags argument indicate the services that the implementation expects to be available from the established context. If the initial call of gss_accept_sec_context() fails, the implementation should not create a context object, and should leave the value of the context_handle parameter set to GSS_C_NO_CONTEXT to indicate this. In the event of a failure on a subsequent call, the implementation is permitted to delete the "half-built" security context (in which case it should set the context_handle parameter to GSS_C_NO_CONTEXT), but the preferred behavior is to leave the security context (and the context_handle parameter) untouched for the application to delete (using gss_delete_sec_context). During context establishment, the informational status bits GSS_S_OLD_TOKEN and GSS_S_DUPLICATE_TOKEN indicate fatal errors, and GSS-API mechanisms should always return them in association with a routine error of GSS_S_FAILURE. This requirement for pairing did not exist in version 1 of the GSS-API specification, so applications that wish to run over version 1 implementations must special-case these codes. The @code{ret_flags} values: @table @asis @item @code{GSS_C_DELEG_FLAG} @itemize @bullet @item True - Delegated credentials are available via the delegated_cred_handle parameter. @item False - No credentials were delegated. @end itemize @item @code{GSS_C_MUTUAL_FLAG} @itemize @bullet @item True - Remote peer asked for mutual authentication. @item False - Remote peer did not ask for mutual authentication. @end itemize @item @code{GSS_C_REPLAY_FLAG} @itemize @bullet @item True - replay of protected messages will be detected. @item False - replayed messages will not be detected. @end itemize @item @code{GSS_C_SEQUENCE_FLAG} @itemize @bullet @item True - out-of-sequence protected messages will be detected. @item False - out-of-sequence messages will not be detected. @end itemize @item @code{GSS_C_CONF_FLAG} @itemize @bullet @item True - Confidentiality service may be invoked by calling the gss_wrap routine. @item False - No confidentiality service (via gss_wrap) available. gss_wrap will provide message encapsulation, data-origin authentication and integrity services only. @end itemize @item @code{GSS_C_INTEG_FLAG} @itemize @bullet @item True - Integrity service may be invoked by calling either gss_get_mic or gss_wrap routines. @item False - Per-message integrity service unavailable. @end itemize @item @code{GSS_C_ANON_FLAG} @itemize @bullet @item True - The initiator does not wish to be authenticated; the src_name parameter (if requested) contains an anonymous internal name. @item False - The initiator has been authenticated normally. @end itemize @item @code{GSS_C_PROT_READY_FLAG} @itemize @bullet @item True - Protection services (as specified by the states of the GSS_C_CONF_FLAG and GSS_C_INTEG_FLAG) are available if the accompanying major status return value is either GSS_S_COMPLETE or GSS_S_CONTINUE_NEEDED. @item False - Protection services (as specified by the states of the GSS_C_CONF_FLAG and GSS_C_INTEG_FLAG) are available only if the accompanying major status return value is GSS_S_COMPLETE. @end itemize @item @code{GSS_C_TRANS_FLAG} @itemize @bullet @item True - The resultant security context may be transferred to other processes via a call to gss_export_sec_context(). @item False - The security context is not transferable. @end itemize @end table All other bits should be set to zero. Return value: @code{GSS_S_CONTINUE_NEEDED}: Indicates that a token from the peer application is required to complete the context, and that gss_accept_sec_context must be called again with that token. @code{GSS_S_DEFECTIVE_TOKEN}: Indicates that consistency checks performed on the input_token failed. @code{GSS_S_DEFECTIVE_CREDENTIAL}: Indicates that consistency checks performed on the credential failed. @code{GSS_S_NO_CRED}: The supplied credentials were not valid for context acceptance, or the credential handle did not reference any credentials. @code{GSS_S_CREDENTIALS_EXPIRED}: The referenced credentials have expired. @code{GSS_S_BAD_BINDINGS}: The input_token contains different channel bindings to those specified via the input_chan_bindings parameter. @code{GSS_S_NO_CONTEXT}: Indicates that the supplied context handle did not refer to a valid context. @code{GSS_S_BAD_SIG}: The input_token contains an invalid MIC. @code{GSS_S_OLD_TOKEN}: The input_token was too old. This is a fatal error during context establishment. @code{GSS_S_DUPLICATE_TOKEN}: The input_token is valid, but is a duplicate of a token already processed. This is a fatal error during context establishment. @code{GSS_S_BAD_MECH}: The received token specified a mechanism that is not supported by the implementation or the provided credential. @end deftypefun gss-1.0.3/doc/texi/gss_compare_name.texi0000644000000000000000000000205612415507722015121 00000000000000@subheading gss_compare_name @anchor{gss_compare_name} @deftypefun {OM_uint32} {gss_compare_name} (OM_uint32 * @var{minor_status}, const gss_name_t @var{name1}, const gss_name_t @var{name2}, int * @var{name_equal}) @var{minor_status}: (Integer, modify) Mechanism specific status code. @var{name1}: (gss_name_t, read) Internal-form name. @var{name2}: (gss_name_t, read) Internal-form name. @var{name_equal}: (boolean, modify) Non-zero - names refer to same entity. Zero - names refer to different entities (strictly, the names are not known to refer to the same identity). Allows an application to compare two internal-form names to determine whether they refer to the same entity. If either name presented to gss_compare_name denotes an anonymous principal, the routines should indicate that the two names do not refer to the same identity. Return value: @code{GSS_S_COMPLETE}: Successful completion. @code{GSS_S_BAD_NAMETYPE}: The two names were of incomparable types. @code{GSS_S_BAD_NAME}: One or both of name1 or name2 was ill-formed. @end deftypefun gss-1.0.3/doc/texi/gss_create_empty_oid_set.texi0000644000000000000000000000147012415507710016656 00000000000000@subheading gss_create_empty_oid_set @anchor{gss_create_empty_oid_set} @deftypefun {OM_uint32} {gss_create_empty_oid_set} (OM_uint32 * @var{minor_status}, gss_OID_set * @var{oid_set}) @var{minor_status}: (integer, modify) Mechanism specific status code. @var{oid_set}: (Set of Object IDs, modify) The empty object identifier set. The routine will allocate the gss_OID_set_desc object, which the application must free after use with a call to gss_release_oid_set(). Create an object-identifier set containing no object identifiers, to which members may be subsequently added using the gss_add_oid_set_member() routine. These routines are intended to be used to construct sets of mechanism object identifiers, for input to gss_acquire_cred. Return value: @code{GSS_S_COMPLETE}: Successful completion. @end deftypefun gss-1.0.3/doc/texi/gss_wrap_size_limit.texi0000644000000000000000000000502312415507675015700 00000000000000@subheading gss_wrap_size_limit @anchor{gss_wrap_size_limit} @deftypefun {OM_uint32} {gss_wrap_size_limit} (OM_uint32 * @var{minor_status}, const gss_ctx_id_t @var{context_handle}, int @var{conf_req_flag}, gss_qop_t @var{qop_req}, OM_uint32 @var{req_output_size}, OM_uint32 * @var{max_input_size}) @var{minor_status}: (Integer, modify) Mechanism specific status code. @var{context_handle}: (gss_ctx_id_t, read) A handle that refers to the security over which the messages will be sent. @var{conf_req_flag}: (Boolean, read) Indicates whether gss_wrap will be asked to apply confidentiality protection in addition to integrity protection. See the routine description for gss_wrap for more details. @var{qop_req}: (gss_qop_t, read) Indicates the level of protection that gss_wrap will be asked to provide. See the routine description for gss_wrap for more details. @var{req_output_size}: (Integer, read) The desired maximum size for tokens emitted by gss_wrap. @var{max_input_size}: (Integer, modify) The maximum input message size that may be presented to gss_wrap in order to guarantee that the emitted token shall be no larger than req_output_size bytes. Allows an application to determine the maximum message size that, if presented to gss_wrap with the same conf_req_flag and qop_req parameters, will result in an output token containing no more than req_output_size bytes. This call is intended for use by applications that communicate over protocols that impose a maximum message size. It enables the application to fragment messages prior to applying protection. GSS-API implementations are recommended but not required to detect invalid QOP values when gss_wrap_size_limit() is called. This routine guarantees only a maximum message size, not the availability of specific QOP values for message protection. Successful completion of this call does not guarantee that gss_wrap will be able to protect a message of length max_input_size bytes, since this ability may depend on the availability of system resources at the time that gss_wrap is called. However, if the implementation itself imposes an upper limit on the length of messages that may be processed by gss_wrap, the implementation should not return a value via max_input_bytes that is greater than this length. Return value: @code{GSS_S_COMPLETE}: Successful completion. @code{GSS_S_NO_CONTEXT}: The referenced context could not be accessed. @code{GSS_S_CONTEXT_EXPIRED}: The context has expired. @code{GSS_S_BAD_QOP}: The specified QOP is not supported by the mechanism. @end deftypefun gss-1.0.3/doc/texi/gss_display_name.texi0000644000000000000000000000320512415507721015134 00000000000000@subheading gss_display_name @anchor{gss_display_name} @deftypefun {OM_uint32} {gss_display_name} (OM_uint32 * @var{minor_status}, const gss_name_t @var{input_name}, gss_buffer_t @var{output_name_buffer}, gss_OID * @var{output_name_type}) @var{minor_status}: (Integer, modify) Mechanism specific status code. @var{input_name}: (gss_name_t, read) Name to be displayed. @var{output_name_buffer}: (buffer, character-string, modify) Buffer to receive textual name string. The application must free storage associated with this name after use with a call to gss_release_buffer(). @var{output_name_type}: (Object ID, modify, optional) The type of the returned name. The returned gss_OID will be a pointer into static storage, and should be treated as read-only by the caller (in particular, the application should not attempt to free it). Specify NULL if not required. Allows an application to obtain a textual representation of an opaque internal-form name for display purposes. The syntax of a printable name is defined by the GSS-API implementation. If input_name denotes an anonymous principal, the implementation should return the gss_OID value GSS_C_NT_ANONYMOUS as the output_name_type, and a textual name that is syntactically distinct from all valid supported printable names in output_name_buffer. If input_name was created by a call to gss_import_name, specifying GSS_C_NO_OID as the name-type, implementations that employ lazy conversion between name types may return GSS_C_NO_OID via the output_name_type parameter. Return value: @code{GSS_S_COMPLETE}: Successful completion. @code{GSS_S_BAD_NAME}: @@input_name was ill-formed. @end deftypefun gss-1.0.3/doc/texi/saslname.c.texi0000644000000000000000000000436412415507725013652 00000000000000@subheading gss_inquire_saslname_for_mech @anchor{gss_inquire_saslname_for_mech} @deftypefun {OM_uint32} {gss_inquire_saslname_for_mech} (OM_uint32 * @var{minor_status}, const gss_OID @var{desired_mech}, gss_buffer_t @var{sasl_mech_name}, gss_buffer_t @var{mech_name}, gss_buffer_t @var{mech_description}) @var{minor_status}: (Integer, modify) Mechanism specific status code. @var{desired_mech}: (OID, read) Identifies the GSS-API mechanism to query. @var{sasl_mech_name}: (buffer, character-string, modify, optional) Buffer to receive SASL mechanism name. The application must free storage associated with this name after use with a call to gss_release_buffer(). @var{mech_name}: (buffer, character-string, modify, optional) Buffer to receive human readable mechanism name. The application must free storage associated with this name after use with a call to gss_release_buffer(). @var{mech_description}: (buffer, character-string, modify, optional) Buffer to receive description of mechanism. The application must free storage associated with this name after use with a call to gss_release_buffer(). Output the SASL mechanism name of a GSS-API mechanism. It also returns a name and description of the mechanism in a user friendly form. Returns: @code{GSS_S_COMPLETE}: Successful completion. @code{GSS_S_BAD_MECH}: The @@desired_mech OID is unsupported. @end deftypefun @subheading gss_inquire_mech_for_saslname @anchor{gss_inquire_mech_for_saslname} @deftypefun {OM_uint32} {gss_inquire_mech_for_saslname} (OM_uint32 * @var{minor_status}, const gss_buffer_t @var{sasl_mech_name}, gss_OID * @var{mech_type}) @var{minor_status}: (Integer, modify) Mechanism specific status code. @var{sasl_mech_name}: (buffer, character-string, read) Buffer with SASL mechanism name. @var{mech_type}: (OID, modify, optional) Actual mechanism used. The OID returned via this parameter will be a pointer to static storage that should be treated as read-only; In particular the application should not attempt to free it. Specify NULL if not required. Output GSS-API mechanism OID of mechanism associated with given @@sasl_mech_name. Returns: @code{GSS_S_COMPLETE}: Successful completion. @code{GSS_S_BAD_MECH}: There is no GSS-API mechanism known as @@sasl_mech_name. @end deftypefun gss-1.0.3/doc/texi/msg.c.texi0000644000000000000000000002072712415507713012633 00000000000000@subheading gss_get_mic @anchor{gss_get_mic} @deftypefun {OM_uint32} {gss_get_mic} (OM_uint32 * @var{minor_status}, const gss_ctx_id_t @var{context_handle}, gss_qop_t @var{qop_req}, const gss_buffer_t @var{message_buffer}, gss_buffer_t @var{message_token}) @var{minor_status}: (Integer, modify) Mechanism specific status code. @var{context_handle}: (gss_ctx_id_t, read) Identifies the context on which the message will be sent. @var{qop_req}: (gss_qop_t, read, optional) Specifies requested quality of protection. Callers are encouraged, on portability grounds, to accept the default quality of protection offered by the chosen mechanism, which may be requested by specifying GSS_C_QOP_DEFAULT for this parameter. If an unsupported protection strength is requested, gss_get_mic will return a major_status of GSS_S_BAD_QOP. @var{message_buffer}: (buffer, opaque, read) Message to be protected. @var{message_token}: (buffer, opaque, modify) Buffer to receive token. The application must free storage associated with this buffer after use with a call to gss_release_buffer(). Generates a cryptographic MIC for the supplied message, and places the MIC in a token for transfer to the peer application. The qop_req parameter allows a choice between several cryptographic algorithms, if supported by the chosen mechanism. Since some application-level protocols may wish to use tokens emitted by gss_wrap() to provide "secure framing", implementations must support derivation of MICs from zero-length messages. Return value: @code{GSS_S_COMPLETE}: Successful completion. @code{GSS_S_CONTEXT_EXPIRED}: The context has already expired. @code{GSS_S_NO_CONTEXT}: The context_handle parameter did not identify a valid context. @code{GSS_S_BAD_QOP}: The specified QOP is not supported by the mechanism. @end deftypefun @subheading gss_verify_mic @anchor{gss_verify_mic} @deftypefun {OM_uint32} {gss_verify_mic} (OM_uint32 * @var{minor_status}, const gss_ctx_id_t @var{context_handle}, const gss_buffer_t @var{message_buffer}, const gss_buffer_t @var{token_buffer}, gss_qop_t * @var{qop_state}) @var{minor_status}: (Integer, modify) Mechanism specific status code. @var{context_handle}: (gss_ctx_id_t, read) Identifies the context on which the message arrived. @var{message_buffer}: (buffer, opaque, read) Message to be verified. @var{token_buffer}: (buffer, opaque, read) Token associated with message. @var{qop_state}: (gss_qop_t, modify, optional) Quality of protection gained from MIC Specify NULL if not required. Verifies that a cryptographic MIC, contained in the token parameter, fits the supplied message. The qop_state parameter allows a message recipient to determine the strength of protection that was applied to the message. Since some application-level protocols may wish to use tokens emitted by gss_wrap() to provide "secure framing", implementations must support the calculation and verification of MICs over zero-length messages. Return value: @code{GSS_S_COMPLETE}: Successful completion. @code{GSS_S_DEFECTIVE_TOKEN}: The token failed consistency checks. @code{GSS_S_BAD_SIG}: The MIC was incorrect. @code{GSS_S_DUPLICATE_TOKEN}: The token was valid, and contained a correct MIC for the message, but it had already been processed. @code{GSS_S_OLD_TOKEN}: The token was valid, and contained a correct MIC for the message, but it is too old to check for duplication. @code{GSS_S_UNSEQ_TOKEN}: The token was valid, and contained a correct MIC for the message, but has been verified out of sequence; a later token has already been received. @code{GSS_S_GAP_TOKEN}: The token was valid, and contained a correct MIC for the message, but has been verified out of sequence; an earlier expected token has not yet been received. @code{GSS_S_CONTEXT_EXPIRED}: The context has already expired. @code{GSS_S_NO_CONTEXT}: The context_handle parameter did not identify a valid context. @end deftypefun @subheading gss_wrap @anchor{gss_wrap} @deftypefun {OM_uint32} {gss_wrap} (OM_uint32 * @var{minor_status}, const gss_ctx_id_t @var{context_handle}, int @var{conf_req_flag}, gss_qop_t @var{qop_req}, const gss_buffer_t @var{input_message_buffer}, int * @var{conf_state}, gss_buffer_t @var{output_message_buffer}) @var{minor_status}: (Integer, modify) Mechanism specific status code. @var{context_handle}: (gss_ctx_id_t, read) Identifies the context on which the message will be sent. @var{conf_req_flag}: (boolean, read) Non-zero - Both confidentiality and integrity services are requested. Zero - Only integrity service is requested. @var{qop_req}: (gss_qop_t, read, optional) Specifies required quality of protection. A mechanism-specific default may be requested by setting qop_req to GSS_C_QOP_DEFAULT. If an unsupported protection strength is requested, gss_wrap will return a major_status of GSS_S_BAD_QOP. @var{input_message_buffer}: (buffer, opaque, read) Message to be protected. @var{conf_state}: (boolean, modify, optional) Non-zero - Confidentiality, data origin authentication and integrity services have been applied. Zero - Integrity and data origin services only has been applied. Specify NULL if not required. @var{output_message_buffer}: (buffer, opaque, modify) Buffer to receive protected message. Storage associated with this message must be freed by the application after use with a call to gss_release_buffer(). Attaches a cryptographic MIC and optionally encrypts the specified input_message. The output_message contains both the MIC and the message. The qop_req parameter allows a choice between several cryptographic algorithms, if supported by the chosen mechanism. Since some application-level protocols may wish to use tokens emitted by gss_wrap() to provide "secure framing", implementations must support the wrapping of zero-length messages. Return value: @code{GSS_S_COMPLETE}: Successful completion. @code{GSS_S_CONTEXT_EXPIRED}: The context has already expired. @code{GSS_S_NO_CONTEXT}: The context_handle parameter did not identify a valid context. @code{GSS_S_BAD_QOP}: The specified QOP is not supported by the mechanism. @end deftypefun @subheading gss_unwrap @anchor{gss_unwrap} @deftypefun {OM_uint32} {gss_unwrap} (OM_uint32 * @var{minor_status}, const gss_ctx_id_t @var{context_handle}, const gss_buffer_t @var{input_message_buffer}, gss_buffer_t @var{output_message_buffer}, int * @var{conf_state}, gss_qop_t * @var{qop_state}) @var{minor_status}: (Integer, modify) Mechanism specific status code. @var{context_handle}: (gss_ctx_id_t, read) Identifies the context on which the message arrived. @var{input_message_buffer}: (buffer, opaque, read) Protected message. @var{output_message_buffer}: (buffer, opaque, modify) Buffer to receive unwrapped message. Storage associated with this buffer must be freed by the application after use use with a call to gss_release_buffer(). @var{conf_state}: (boolean, modify, optional) Non-zero - Confidentiality and integrity protection were used. Zero - Integrity service only was used. Specify NULL if not required. @var{qop_state}: (gss_qop_t, modify, optional) Quality of protection provided. Specify NULL if not required. Converts a message previously protected by gss_wrap back to a usable form, verifying the embedded MIC. The conf_state parameter indicates whether the message was encrypted; the qop_state parameter indicates the strength of protection that was used to provide the confidentiality and integrity services. Since some application-level protocols may wish to use tokens emitted by gss_wrap() to provide "secure framing", implementations must support the wrapping and unwrapping of zero-length messages. Return value: @code{GSS_S_COMPLETE}: Successful completion. @code{GSS_S_DEFECTIVE_TOKEN}: The token failed consistency checks. @code{GSS_S_BAD_SIG}: The MIC was incorrect. @code{GSS_S_DUPLICATE_TOKEN}: The token was valid, and contained a correct MIC for the message, but it had already been processed. @code{GSS_S_OLD_TOKEN}: The token was valid, and contained a correct MIC for the message, but it is too old to check for duplication. @code{GSS_S_UNSEQ_TOKEN}: The token was valid, and contained a correct MIC for the message, but has been verified out of sequence; a later token has already been received. @code{GSS_S_GAP_TOKEN}: The token was valid, and contained a correct MIC for the message, but has been verified out of sequence; an earlier expected token has not yet been received. @code{GSS_S_CONTEXT_EXPIRED}: The context has already expired. @code{GSS_S_NO_CONTEXT}: The context_handle parameter did not identify a valid context. @end deftypefun gss-1.0.3/doc/texi/gss_indicate_mechs.texi0000644000000000000000000000121612415507711015425 00000000000000@subheading gss_indicate_mechs @anchor{gss_indicate_mechs} @deftypefun {OM_uint32} {gss_indicate_mechs} (OM_uint32 * @var{minor_status}, gss_OID_set * @var{mech_set}) @var{minor_status}: (integer, modify) Mechanism specific status code. @var{mech_set}: (set of Object IDs, modify) Set of implementation-supported mechanisms. The returned gss_OID_set value will be a dynamically-allocated OID set, that should be released by the caller after use with a call to gss_release_oid_set(). Allows an application to determine which underlying security mechanisms are available. Return value: @code{GSS_S_COMPLETE}: Successful completion. @end deftypefun gss-1.0.3/doc/texi/gss_verify_mic.texi0000644000000000000000000000410412415507714014624 00000000000000@subheading gss_verify_mic @anchor{gss_verify_mic} @deftypefun {OM_uint32} {gss_verify_mic} (OM_uint32 * @var{minor_status}, const gss_ctx_id_t @var{context_handle}, const gss_buffer_t @var{message_buffer}, const gss_buffer_t @var{token_buffer}, gss_qop_t * @var{qop_state}) @var{minor_status}: (Integer, modify) Mechanism specific status code. @var{context_handle}: (gss_ctx_id_t, read) Identifies the context on which the message arrived. @var{message_buffer}: (buffer, opaque, read) Message to be verified. @var{token_buffer}: (buffer, opaque, read) Token associated with message. @var{qop_state}: (gss_qop_t, modify, optional) Quality of protection gained from MIC Specify NULL if not required. Verifies that a cryptographic MIC, contained in the token parameter, fits the supplied message. The qop_state parameter allows a message recipient to determine the strength of protection that was applied to the message. Since some application-level protocols may wish to use tokens emitted by gss_wrap() to provide "secure framing", implementations must support the calculation and verification of MICs over zero-length messages. Return value: @code{GSS_S_COMPLETE}: Successful completion. @code{GSS_S_DEFECTIVE_TOKEN}: The token failed consistency checks. @code{GSS_S_BAD_SIG}: The MIC was incorrect. @code{GSS_S_DUPLICATE_TOKEN}: The token was valid, and contained a correct MIC for the message, but it had already been processed. @code{GSS_S_OLD_TOKEN}: The token was valid, and contained a correct MIC for the message, but it is too old to check for duplication. @code{GSS_S_UNSEQ_TOKEN}: The token was valid, and contained a correct MIC for the message, but has been verified out of sequence; a later token has already been received. @code{GSS_S_GAP_TOKEN}: The token was valid, and contained a correct MIC for the message, but has been verified out of sequence; an earlier expected token has not yet been received. @code{GSS_S_CONTEXT_EXPIRED}: The context has already expired. @code{GSS_S_NO_CONTEXT}: The context_handle parameter did not identify a valid context. @end deftypefun gss-1.0.3/doc/texi/cred.c.texi0000644000000000000000000004231712415507701012756 00000000000000@subheading gss_acquire_cred @anchor{gss_acquire_cred} @deftypefun {OM_uint32} {gss_acquire_cred} (OM_uint32 * @var{minor_status}, const gss_name_t @var{desired_name}, OM_uint32 @var{time_req}, const gss_OID_set @var{desired_mechs}, gss_cred_usage_t @var{cred_usage}, gss_cred_id_t * @var{output_cred_handle}, gss_OID_set * @var{actual_mechs}, OM_uint32 * @var{time_rec}) @var{minor_status}: (integer, modify) Mechanism specific status code. @var{desired_name}: (gss_name_t, read) Name of principal whose credential should be acquired. @var{time_req}: (Integer, read, optional) Number of seconds that credentials should remain valid. Specify GSS_C_INDEFINITE to request that the credentials have the maximum permitted lifetime. @var{desired_mechs}: (Set of Object IDs, read, optional) Set of underlying security mechanisms that may be used. GSS_C_NO_OID_SET may be used to obtain an implementation-specific default. @var{cred_usage}: (gss_cred_usage_t, read) GSS_C_BOTH - Credentials may be used either to initiate or accept security contexts. GSS_C_INITIATE - Credentials will only be used to initiate security contexts. GSS_C_ACCEPT - Credentials will only be used to accept security contexts. @var{output_cred_handle}: (gss_cred_id_t, modify) The returned credential handle. Resources associated with this credential handle must be released by the application after use with a call to gss_release_cred(). @var{actual_mechs}: (Set of Object IDs, modify, optional) The set of mechanisms for which the credential is valid. Storage associated with the returned OID-set must be released by the application after use with a call to gss_release_oid_set(). Specify NULL if not required. @var{time_rec}: (Integer, modify, optional) Actual number of seconds for which the returned credentials will remain valid. If the implementation does not support expiration of credentials, the value GSS_C_INDEFINITE will be returned. Specify NULL if not required. Allows an application to acquire a handle for a pre-existing credential by name. GSS-API implementations must impose a local access-control policy on callers of this routine to prevent unauthorized callers from acquiring credentials to which they are not entitled. This routine is not intended to provide a "login to the network" function, as such a function would involve the creation of new credentials rather than merely acquiring a handle to existing credentials. Such functions, if required, should be defined in implementation-specific extensions to the API. If desired_name is GSS_C_NO_NAME, the call is interpreted as a request for a credential handle that will invoke default behavior when passed to gss_init_sec_context() (if cred_usage is GSS_C_INITIATE or GSS_C_BOTH) or gss_accept_sec_context() (if cred_usage is GSS_C_ACCEPT or GSS_C_BOTH). Mechanisms should honor the desired_mechs parameter, and return a credential that is suitable to use only with the requested mechanisms. An exception to this is the case where one underlying credential element can be shared by multiple mechanisms; in this case it is permissible for an implementation to indicate all mechanisms with which the credential element may be used. If desired_mechs is an empty set, behavior is undefined. This routine is expected to be used primarily by context acceptors, since implementations are likely to provide mechanism-specific ways of obtaining GSS-API initiator credentials from the system login process. Some implementations may therefore not support the acquisition of GSS_C_INITIATE or GSS_C_BOTH credentials via gss_acquire_cred for any name other than GSS_C_NO_NAME, or a name produced by applying either gss_inquire_cred to a valid credential, or gss_inquire_context to an active context. If credential acquisition is time-consuming for a mechanism, the mechanism may choose to delay the actual acquisition until the credential is required (e.g. by gss_init_sec_context or gss_accept_sec_context). Such mechanism-specific implementation decisions should be invisible to the calling application; thus a call of gss_inquire_cred immediately following the call of gss_acquire_cred must return valid credential data, and may therefore incur the overhead of a deferred credential acquisition. Return value: @code{GSS_S_COMPLETE}: Successful completion. @code{GSS_S_BAD_MECH}: Unavailable mechanism requested. @code{GSS_S_BAD_NAMETYPE}: Type contained within desired_name parameter is not supported. @code{GSS_S_BAD_NAME}: Value supplied for desired_name parameter is ill formed. @code{GSS_S_CREDENTIALS_EXPIRED}: The credentials could not be acquired Because they have expired. @code{GSS_S_NO_CRED}: No credentials were found for the specified name. @end deftypefun @subheading gss_add_cred @anchor{gss_add_cred} @deftypefun {OM_uint32} {gss_add_cred} (OM_uint32 * @var{minor_status}, const gss_cred_id_t @var{input_cred_handle}, const gss_name_t @var{desired_name}, const gss_OID @var{desired_mech}, gss_cred_usage_t @var{cred_usage}, OM_uint32 @var{initiator_time_req}, OM_uint32 @var{acceptor_time_req}, gss_cred_id_t * @var{output_cred_handle}, gss_OID_set * @var{actual_mechs}, OM_uint32 * @var{initiator_time_rec}, OM_uint32 * @var{acceptor_time_rec}) @var{minor_status}: (integer, modify) Mechanism specific status code. @var{input_cred_handle}: (gss_cred_id_t, read, optional) The credential to which a credential-element will be added. If GSS_C_NO_CREDENTIAL is specified, the routine will compose the new credential based on default behavior (see text). Note that, while the credential-handle is not modified by gss_add_cred(), the underlying credential will be modified if output_credential_handle is NULL. @var{desired_name}: (gss_name_t, read.) Name of principal whose credential should be acquired. @var{desired_mech}: (Object ID, read) Underlying security mechanism with which the credential may be used. @var{cred_usage}: (gss_cred_usage_t, read) GSS_C_BOTH - Credential may be used either to initiate or accept security contexts. GSS_C_INITIATE - Credential will only be used to initiate security contexts. GSS_C_ACCEPT - Credential will only be used to accept security contexts. @var{initiator_time_req}: (Integer, read, optional) number of seconds that the credential should remain valid for initiating security contexts. This argument is ignored if the composed credentials are of type GSS_C_ACCEPT. Specify GSS_C_INDEFINITE to request that the credentials have the maximum permitted initiator lifetime. @var{acceptor_time_req}: (Integer, read, optional) number of seconds that the credential should remain valid for accepting security contexts. This argument is ignored if the composed credentials are of type GSS_C_INITIATE. Specify GSS_C_INDEFINITE to request that the credentials have the maximum permitted initiator lifetime. @var{output_cred_handle}: (gss_cred_id_t, modify, optional) The returned credential handle, containing the new credential-element and all the credential-elements from input_cred_handle. If a valid pointer to a gss_cred_id_t is supplied for this parameter, gss_add_cred creates a new credential handle containing all credential-elements from the input_cred_handle and the newly acquired credential-element; if NULL is specified for this parameter, the newly acquired credential-element will be added to the credential identified by input_cred_handle. The resources associated with any credential handle returned via this parameter must be released by the application after use with a call to gss_release_cred(). @var{actual_mechs}: (Set of Object IDs, modify, optional) The complete set of mechanisms for which the new credential is valid. Storage for the returned OID-set must be freed by the application after use with a call to gss_release_oid_set(). Specify NULL if not required. @var{initiator_time_rec}: (Integer, modify, optional) Actual number of seconds for which the returned credentials will remain valid for initiating contexts using the specified mechanism. If the implementation or mechanism does not support expiration of credentials, the value GSS_C_INDEFINITE will be returned. Specify NULL if not required @var{acceptor_time_rec}: (Integer, modify, optional) Actual number of seconds for which the returned credentials will remain valid for accepting security contexts using the specified mechanism. If the implementation or mechanism does not support expiration of credentials, the value GSS_C_INDEFINITE will be returned. Specify NULL if not required Adds a credential-element to a credential. The credential-element is identified by the name of the principal to which it refers. GSS-API implementations must impose a local access-control policy on callers of this routine to prevent unauthorized callers from acquiring credential-elements to which they are not entitled. This routine is not intended to provide a "login to the network" function, as such a function would involve the creation of new mechanism-specific authentication data, rather than merely acquiring a GSS-API handle to existing data. Such functions, if required, should be defined in implementation-specific extensions to the API. If desired_name is GSS_C_NO_NAME, the call is interpreted as a request to add a credential element that will invoke default behavior when passed to gss_init_sec_context() (if cred_usage is GSS_C_INITIATE or GSS_C_BOTH) or gss_accept_sec_context() (if cred_usage is GSS_C_ACCEPT or GSS_C_BOTH). This routine is expected to be used primarily by context acceptors, since implementations are likely to provide mechanism-specific ways of obtaining GSS-API initiator credentials from the system login process. Some implementations may therefore not support the acquisition of GSS_C_INITIATE or GSS_C_BOTH credentials via gss_acquire_cred for any name other than GSS_C_NO_NAME, or a name produced by applying either gss_inquire_cred to a valid credential, or gss_inquire_context to an active context. If credential acquisition is time-consuming for a mechanism, the mechanism may choose to delay the actual acquisition until the credential is required (e.g. by gss_init_sec_context or gss_accept_sec_context). Such mechanism-specific implementation decisions should be invisible to the calling application; thus a call of gss_inquire_cred immediately following the call of gss_add_cred must return valid credential data, and may therefore incur the overhead of a deferred credential acquisition. This routine can be used to either compose a new credential containing all credential-elements of the original in addition to the newly-acquire credential-element, or to add the new credential- element to an existing credential. If NULL is specified for the output_cred_handle parameter argument, the new credential-element will be added to the credential identified by input_cred_handle; if a valid pointer is specified for the output_cred_handle parameter, a new credential handle will be created. If GSS_C_NO_CREDENTIAL is specified as the input_cred_handle, gss_add_cred will compose a credential (and set the output_cred_handle parameter accordingly) based on default behavior. That is, the call will have the same effect as if the application had first made a call to gss_acquire_cred(), specifying the same usage and passing GSS_C_NO_NAME as the desired_name parameter to obtain an explicit credential handle embodying default behavior, passed this credential handle to gss_add_cred(), and finally called gss_release_cred() on the first credential handle. If GSS_C_NO_CREDENTIAL is specified as the input_cred_handle parameter, a non-NULL output_cred_handle must be supplied. Return value: @code{GSS_S_COMPLETE}: Successful completion. @code{GSS_S_BAD_MECH}: Unavailable mechanism requested. @code{GSS_S_BAD_NAMETYPE}: Type contained within desired_name parameter is not supported. @code{GSS_S_BAD_NAME}: Value supplied for desired_name parameter is ill-formed. @code{GSS_S_DUPLICATE_ELEMENT}: The credential already contains an element for the requested mechanism with overlapping usage and validity period. @code{GSS_S_CREDENTIALS_EXPIRED}: The required credentials could not be added because they have expired. @code{GSS_S_NO_CRED}: No credentials were found for the specified name. @end deftypefun @subheading gss_inquire_cred @anchor{gss_inquire_cred} @deftypefun {OM_uint32} {gss_inquire_cred} (OM_uint32 * @var{minor_status}, const gss_cred_id_t @var{cred_handle}, gss_name_t * @var{name}, OM_uint32 * @var{lifetime}, gss_cred_usage_t * @var{cred_usage}, gss_OID_set * @var{mechanisms}) @var{minor_status}: (integer, modify) Mechanism specific status code. @var{cred_handle}: (gss_cred_id_t, read) A handle that refers to the target credential. Specify GSS_C_NO_CREDENTIAL to inquire about the default initiator principal. @var{name}: (gss_name_t, modify, optional) The name whose identity the credential asserts. Storage associated with this name should be freed by the application after use with a call to gss_release_name(). Specify NULL if not required. @var{lifetime}: (Integer, modify, optional) The number of seconds for which the credential will remain valid. If the credential has expired, this parameter will be set to zero. If the implementation does not support credential expiration, the value GSS_C_INDEFINITE will be returned. Specify NULL if not required. @var{cred_usage}: (gss_cred_usage_t, modify, optional) How the credential may be used. One of the following: GSS_C_INITIATE, GSS_C_ACCEPT, GSS_C_BOTH. Specify NULL if not required. @var{mechanisms}: (gss_OID_set, modify, optional) Set of mechanisms supported by the credential. Storage associated with this OID set must be freed by the application after use with a call to gss_release_oid_set(). Specify NULL if not required. Obtains information about a credential. Return value: @code{GSS_S_COMPLETE}: Successful completion. @code{GSS_S_NO_CRED}: The referenced credentials could not be accessed. @code{GSS_S_DEFECTIVE_CREDENTIAL}: The referenced credentials were invalid. @code{GSS_S_CREDENTIALS_EXPIRED}: The referenced credentials have expired. If the lifetime parameter was not passed as NULL, it will be set to 0. @end deftypefun @subheading gss_inquire_cred_by_mech @anchor{gss_inquire_cred_by_mech} @deftypefun {OM_uint32} {gss_inquire_cred_by_mech} (OM_uint32 * @var{minor_status}, const gss_cred_id_t @var{cred_handle}, const gss_OID @var{mech_type}, gss_name_t * @var{name}, OM_uint32 * @var{initiator_lifetime}, OM_uint32 * @var{acceptor_lifetime}, gss_cred_usage_t * @var{cred_usage}) @var{minor_status}: (Integer, modify) Mechanism specific status code. @var{cred_handle}: (gss_cred_id_t, read) A handle that refers to the target credential. Specify GSS_C_NO_CREDENTIAL to inquire about the default initiator principal. @var{mech_type}: (gss_OID, read) The mechanism for which information should be returned. @var{name}: (gss_name_t, modify, optional) The name whose identity the credential asserts. Storage associated with this name must be freed by the application after use with a call to gss_release_name(). Specify NULL if not required. @var{initiator_lifetime}: (Integer, modify, optional) The number of seconds for which the credential will remain capable of initiating security contexts under the specified mechanism. If the credential can no longer be used to initiate contexts, or if the credential usage for this mechanism is GSS_C_ACCEPT, this parameter will be set to zero. If the implementation does not support expiration of initiator credentials, the value GSS_C_INDEFINITE will be returned. Specify NULL if not required. @var{acceptor_lifetime}: (Integer, modify, optional) The number of seconds for which the credential will remain capable of accepting security contexts under the specified mechanism. If the credential can no longer be used to accept contexts, or if the credential usage for this mechanism is GSS_C_INITIATE, this parameter will be set to zero. If the implementation does not support expiration of acceptor credentials, the value GSS_C_INDEFINITE will be returned. Specify NULL if not required. @var{cred_usage}: (gss_cred_usage_t, modify, optional) How the credential may be used with the specified mechanism. One of the following: GSS_C_INITIATE, GSS_C_ACCEPT, GSS_C_BOTH. Specify NULL if not required. Obtains per-mechanism information about a credential. Return value: @code{GSS_S_COMPLETE}: Successful completion. @code{GSS_S_NO_CRED}: The referenced credentials could not be accessed. @code{GSS_S_DEFECTIVE_CREDENTIAL}: The referenced credentials were invalid. @code{GSS_S_CREDENTIALS_EXPIRED}: The referenced credentials have expired. If the lifetime parameter was not passed as NULL, it will be set to 0. @end deftypefun @subheading gss_release_cred @anchor{gss_release_cred} @deftypefun {OM_uint32} {gss_release_cred} (OM_uint32 * @var{minor_status}, gss_cred_id_t * @var{cred_handle}) @var{minor_status}: (Integer, modify) Mechanism specific status code. @var{cred_handle}: (gss_cred_id_t, modify, optional) Opaque handle identifying credential to be released. If GSS_C_NO_CREDENTIAL is supplied, the routine will complete successfully, but will do nothing. Informs GSS-API that the specified credential handle is no longer required by the application, and frees associated resources. The cred_handle is set to GSS_C_NO_CREDENTIAL on successful completion of this call. Return value: @code{GSS_S_COMPLETE}: Successful completion. @code{GSS_S_NO_CRED}: Credentials could not be accessed. @end deftypefun gss-1.0.3/doc/texi/gss_unwrap.texi0000644000000000000000000000473112415507716014014 00000000000000@subheading gss_unwrap @anchor{gss_unwrap} @deftypefun {OM_uint32} {gss_unwrap} (OM_uint32 * @var{minor_status}, const gss_ctx_id_t @var{context_handle}, const gss_buffer_t @var{input_message_buffer}, gss_buffer_t @var{output_message_buffer}, int * @var{conf_state}, gss_qop_t * @var{qop_state}) @var{minor_status}: (Integer, modify) Mechanism specific status code. @var{context_handle}: (gss_ctx_id_t, read) Identifies the context on which the message arrived. @var{input_message_buffer}: (buffer, opaque, read) Protected message. @var{output_message_buffer}: (buffer, opaque, modify) Buffer to receive unwrapped message. Storage associated with this buffer must be freed by the application after use use with a call to gss_release_buffer(). @var{conf_state}: (boolean, modify, optional) Non-zero - Confidentiality and integrity protection were used. Zero - Integrity service only was used. Specify NULL if not required. @var{qop_state}: (gss_qop_t, modify, optional) Quality of protection provided. Specify NULL if not required. Converts a message previously protected by gss_wrap back to a usable form, verifying the embedded MIC. The conf_state parameter indicates whether the message was encrypted; the qop_state parameter indicates the strength of protection that was used to provide the confidentiality and integrity services. Since some application-level protocols may wish to use tokens emitted by gss_wrap() to provide "secure framing", implementations must support the wrapping and unwrapping of zero-length messages. Return value: @code{GSS_S_COMPLETE}: Successful completion. @code{GSS_S_DEFECTIVE_TOKEN}: The token failed consistency checks. @code{GSS_S_BAD_SIG}: The MIC was incorrect. @code{GSS_S_DUPLICATE_TOKEN}: The token was valid, and contained a correct MIC for the message, but it had already been processed. @code{GSS_S_OLD_TOKEN}: The token was valid, and contained a correct MIC for the message, but it is too old to check for duplication. @code{GSS_S_UNSEQ_TOKEN}: The token was valid, and contained a correct MIC for the message, but has been verified out of sequence; a later token has already been received. @code{GSS_S_GAP_TOKEN}: The token was valid, and contained a correct MIC for the message, but has been verified out of sequence; an earlier expected token has not yet been received. @code{GSS_S_CONTEXT_EXPIRED}: The context has already expired. @code{GSS_S_NO_CONTEXT}: The context_handle parameter did not identify a valid context. @end deftypefun gss-1.0.3/doc/texi/gss_canonicalize_name.texi0000644000000000000000000000242612415507724016135 00000000000000@subheading gss_canonicalize_name @anchor{gss_canonicalize_name} @deftypefun {OM_uint32} {gss_canonicalize_name} (OM_uint32 * @var{minor_status}, const gss_name_t @var{input_name}, const gss_OID @var{mech_type}, gss_name_t * @var{output_name}) @var{minor_status}: (Integer, modify) Mechanism specific status code. @var{input_name}: (gss_name_t, read) The name for which a canonical form is desired. @var{mech_type}: (Object ID, read) The authentication mechanism for which the canonical form of the name is desired. The desired mechanism must be specified explicitly; no default is provided. @var{output_name}: (gss_name_t, modify) The resultant canonical name. Storage associated with this name must be freed by the application after use with a call to gss_release_name(). Generate a canonical mechanism name (MN) from an arbitrary internal name. The mechanism name is the name that would be returned to a context acceptor on successful authentication of a context where the initiator used the input_name in a successful call to gss_acquire_cred, specifying an OID set containing @@mech_type as its only member, followed by a call to gss_init_sec_context(), specifying @@mech_type as the authentication mechanism. Return value: @code{GSS_S_COMPLETE}: Successful completion. @end deftypefun gss-1.0.3/doc/texi/error.c.texi0000644000000000000000000000646612415507705013203 00000000000000@subheading gss_display_status @anchor{gss_display_status} @deftypefun {OM_uint32} {gss_display_status} (OM_uint32 * @var{minor_status}, OM_uint32 @var{status_value}, int @var{status_type}, const gss_OID @var{mech_type}, OM_uint32 * @var{message_context}, gss_buffer_t @var{status_string}) @var{minor_status}: (integer, modify) Mechanism specific status code. @var{status_value}: (Integer, read) Status value to be converted. @var{status_type}: (Integer, read) GSS_C_GSS_CODE - status_value is a GSS status code. GSS_C_MECH_CODE - status_value is a mechanism status code. @var{mech_type}: (Object ID, read, optional) Underlying mechanism (used to interpret a minor status value). Supply GSS_C_NO_OID to obtain the system default. @var{message_context}: (Integer, read/modify) Should be initialized to zero by the application prior to the first call. On return from gss_display_status(), a non-zero status_value parameter indicates that additional messages may be extracted from the status code via subsequent calls to gss_display_status(), passing the same status_value, status_type, mech_type, and message_context parameters. @var{status_string}: (buffer, character string, modify) Textual interpretation of the status_value. Storage associated with this parameter must be freed by the application after use with a call to gss_release_buffer(). Allows an application to obtain a textual representation of a GSS-API status code, for display to the user or for logging purposes. Since some status values may indicate multiple conditions, applications may need to call gss_display_status multiple times, each call generating a single text string. The message_context parameter is used by gss_display_status to store state information about which error messages have already been extracted from a given status_value; message_context must be initialized to 0 by the application prior to the first call, and gss_display_status will return a non-zero value in this parameter if there are further messages to extract. The message_context parameter contains all state information required by gss_display_status in order to extract further messages from the status_value; even when a non-zero value is returned in this parameter, the application is not required to call gss_display_status again unless subsequent messages are desired. The following code extracts all messages from a given status code and prints them to stderr: @example OM_uint32 message_context; OM_uint32 status_code; OM_uint32 maj_status; OM_uint32 min_status; gss_buffer_desc status_string; ... message_context = 0; do @{ maj_status = gss_display_status ( &min_status, status_code, GSS_C_GSS_CODE, GSS_C_NO_OID, &message_context, &status_string) fprintf(stderr, "%.*s\n", (int)status_string.length, (char *)status_string.value); gss_release_buffer(&min_status, &status_string); @} while (message_context != 0); @end example Return value: @code{GSS_S_COMPLETE}: Successful completion. @code{GSS_S_BAD_MECH}: Indicates that translation in accordance with an unsupported mechanism type was requested. @code{GSS_S_BAD_STATUS}: The status value was not recognized, or the status type was neither GSS_C_GSS_CODE nor GSS_C_MECH_CODE. @end deftypefun gss-1.0.3/doc/texi/gss_userok.texi0000644000000000000000000000103512415507706014001 00000000000000@subheading gss_userok @anchor{gss_userok} @deftypefun {int} {gss_userok} (const gss_name_t @var{name}, const char * @var{username}) @var{name}: (gss_name_t, read) Name to be compared. @var{username}: Zero terminated string with username. Compare the username against the output from gss_export_name() invoked on @@name, after removing the leading OID. This answers the question whether the particular mechanism would authenticate them as the same principal Return value: Returns 0 if the names match, non-0 otherwise. @end deftypefun gss-1.0.3/doc/texi/gss_import_sec_context.texi0000644000000000000000000000220412415507676016406 00000000000000@subheading gss_import_sec_context @anchor{gss_import_sec_context} @deftypefun {OM_uint32} {gss_import_sec_context} (OM_uint32 * @var{minor_status}, const gss_buffer_t @var{interprocess_token}, gss_ctx_id_t * @var{context_handle}) @var{minor_status}: (Integer, modify) Mechanism specific status code. @var{interprocess_token}: (buffer, opaque, modify) Token received from exporting process @var{context_handle}: (gss_ctx_id_t, modify) Context handle of newly reactivated context. Resources associated with this context handle must be released by the application after use with a call to gss_delete_sec_context(). Allows a process to import a security context established by another process. A given interprocess token may be imported only once. See gss_export_sec_context. Return value: @code{GSS_S_COMPLETE}: Successful completion. @code{GSS_S_NO_CONTEXT}: The token did not contain a valid context reference. @code{GSS_S_DEFECTIVE_TOKEN}: The token was invalid. @code{GSS_S_UNAVAILABLE}: The operation is unavailable. @code{GSS_S_UNAUTHORIZED}: Local policy prevents the import of this context by the current process. @end deftypefun gss-1.0.3/doc/texi/gss_oid_equal.texi0000644000000000000000000000107712415507725014442 00000000000000@subheading gss_oid_equal @anchor{gss_oid_equal} @deftypefun {int} {gss_oid_equal} (gss_const_OID @var{first_oid}, gss_const_OID @var{second_oid}) @var{first_oid}: (Object ID, read) First Object identifier. @var{second_oid}: (Object ID, read) First Object identifier. Compare two OIDs for equality. The comparison is "deep", i.e., the actual byte sequences of the OIDs are compared instead of just the pointer equality. This function is standardized in RFC 6339. Return value: Returns boolean value true when the two OIDs are equal, otherwise false. @end deftypefun gss-1.0.3/doc/texi/gss_export_sec_context.texi0000644000000000000000000000603712415507676016425 00000000000000@subheading gss_export_sec_context @anchor{gss_export_sec_context} @deftypefun {OM_uint32} {gss_export_sec_context} (OM_uint32 * @var{minor_status}, gss_ctx_id_t * @var{context_handle}, gss_buffer_t @var{interprocess_token}) @var{minor_status}: (Integer, modify) Mechanism specific status code. @var{context_handle}: (gss_ctx_id_t, modify) Context handle identifying the context to transfer. @var{interprocess_token}: (buffer, opaque, modify) Token to be transferred to target process. Storage associated with this token must be freed by the application after use with a call to gss_release_buffer(). Provided to support the sharing of work between multiple processes. This routine will typically be used by the context-acceptor, in an application where a single process receives incoming connection requests and accepts security contexts over them, then passes the established context to one or more other processes for message exchange. gss_export_sec_context() deactivates the security context for the calling process and creates an interprocess token which, when passed to gss_import_sec_context in another process, will re-activate the context in the second process. Only a single instantiation of a given context may be active at any one time; a subsequent attempt by a context exporter to access the exported security context will fail. The implementation may constrain the set of processes by which the interprocess token may be imported, either as a function of local security policy, or as a result of implementation decisions. For example, some implementations may constrain contexts to be passed only between processes that run under the same account, or which are part of the same process group. The interprocess token may contain security-sensitive information (for example cryptographic keys). While mechanisms are encouraged to either avoid placing such sensitive information within interprocess tokens, or to encrypt the token before returning it to the application, in a typical object-library GSS-API implementation this may not be possible. Thus the application must take care to protect the interprocess token, and ensure that any process to which the token is transferred is trustworthy. If creation of the interprocess token is successful, the implementation shall deallocate all process-wide resources associated with the security context, and set the context_handle to GSS_C_NO_CONTEXT. In the event of an error that makes it impossible to complete the export of the security context, the implementation must not return an interprocess token, and should strive to leave the security context referenced by the context_handle parameter untouched. If this is impossible, it is permissible for the implementation to delete the security context, providing it also sets the context_handle parameter to GSS_C_NO_CONTEXT. Return value: @code{GSS_S_COMPLETE}: Successful completion. @code{GSS_S_CONTEXT_EXPIRED}: The context has expired. @code{GSS_S_NO_CONTEXT}: The context was invalid. @code{GSS_S_UNAVAILABLE}: The operation is not supported. @end deftypefun gss-1.0.3/doc/texi/name.c.texi0000644000000000000000000002520012415507721012753 00000000000000@subheading gss_import_name @anchor{gss_import_name} @deftypefun {OM_uint32} {gss_import_name} (OM_uint32 * @var{minor_status}, const gss_buffer_t @var{input_name_buffer}, const gss_OID @var{input_name_type}, gss_name_t * @var{output_name}) @var{minor_status}: (Integer, modify) Mechanism specific status code. @var{input_name_buffer}: (buffer, octet-string, read) Buffer containing contiguous string name to convert. @var{input_name_type}: (Object ID, read, optional) Object ID specifying type of printable name. Applications may specify either GSS_C_NO_OID to use a mechanism-specific default printable syntax, or an OID recognized by the GSS-API implementation to name a specific namespace. @var{output_name}: (gss_name_t, modify) Returned name in internal form. Storage associated with this name must be freed by the application after use with a call to gss_release_name(). Convert a contiguous string name to internal form. In general, the internal name returned (via the @@output_name parameter) will not be an MN; the exception to this is if the @@input_name_type indicates that the contiguous string provided via the @@input_name_buffer parameter is of type GSS_C_NT_EXPORT_NAME, in which case the returned internal name will be an MN for the mechanism that exported the name. Return value: @code{GSS_S_COMPLETE}: Successful completion. @code{GSS_S_BAD_NAMETYPE}: The input_name_type was unrecognized. @code{GSS_S_BAD_NAME}: The input_name parameter could not be interpreted as a name of the specified type. @code{GSS_S_BAD_MECH}: The input name-type was GSS_C_NT_EXPORT_NAME, but the mechanism contained within the input-name is not supported. @end deftypefun @subheading gss_display_name @anchor{gss_display_name} @deftypefun {OM_uint32} {gss_display_name} (OM_uint32 * @var{minor_status}, const gss_name_t @var{input_name}, gss_buffer_t @var{output_name_buffer}, gss_OID * @var{output_name_type}) @var{minor_status}: (Integer, modify) Mechanism specific status code. @var{input_name}: (gss_name_t, read) Name to be displayed. @var{output_name_buffer}: (buffer, character-string, modify) Buffer to receive textual name string. The application must free storage associated with this name after use with a call to gss_release_buffer(). @var{output_name_type}: (Object ID, modify, optional) The type of the returned name. The returned gss_OID will be a pointer into static storage, and should be treated as read-only by the caller (in particular, the application should not attempt to free it). Specify NULL if not required. Allows an application to obtain a textual representation of an opaque internal-form name for display purposes. The syntax of a printable name is defined by the GSS-API implementation. If input_name denotes an anonymous principal, the implementation should return the gss_OID value GSS_C_NT_ANONYMOUS as the output_name_type, and a textual name that is syntactically distinct from all valid supported printable names in output_name_buffer. If input_name was created by a call to gss_import_name, specifying GSS_C_NO_OID as the name-type, implementations that employ lazy conversion between name types may return GSS_C_NO_OID via the output_name_type parameter. Return value: @code{GSS_S_COMPLETE}: Successful completion. @code{GSS_S_BAD_NAME}: @@input_name was ill-formed. @end deftypefun @subheading gss_compare_name @anchor{gss_compare_name} @deftypefun {OM_uint32} {gss_compare_name} (OM_uint32 * @var{minor_status}, const gss_name_t @var{name1}, const gss_name_t @var{name2}, int * @var{name_equal}) @var{minor_status}: (Integer, modify) Mechanism specific status code. @var{name1}: (gss_name_t, read) Internal-form name. @var{name2}: (gss_name_t, read) Internal-form name. @var{name_equal}: (boolean, modify) Non-zero - names refer to same entity. Zero - names refer to different entities (strictly, the names are not known to refer to the same identity). Allows an application to compare two internal-form names to determine whether they refer to the same entity. If either name presented to gss_compare_name denotes an anonymous principal, the routines should indicate that the two names do not refer to the same identity. Return value: @code{GSS_S_COMPLETE}: Successful completion. @code{GSS_S_BAD_NAMETYPE}: The two names were of incomparable types. @code{GSS_S_BAD_NAME}: One or both of name1 or name2 was ill-formed. @end deftypefun @subheading gss_release_name @anchor{gss_release_name} @deftypefun {OM_uint32} {gss_release_name} (OM_uint32 * @var{minor_status}, gss_name_t * @var{name}) @var{minor_status}: (Integer, modify) Mechanism specific status code. @var{name}: (gss_name_t, modify) The name to be deleted. Free GSSAPI-allocated storage associated with an internal-form name. The name is set to GSS_C_NO_NAME on successful completion of this call. Return value: @code{GSS_S_COMPLETE}: Successful completion. @code{GSS_S_BAD_NAME}: The name parameter did not contain a valid name. @end deftypefun @subheading gss_inquire_names_for_mech @anchor{gss_inquire_names_for_mech} @deftypefun {OM_uint32} {gss_inquire_names_for_mech} (OM_uint32 * @var{minor_status}, const gss_OID @var{mechanism}, gss_OID_set * @var{name_types}) @var{minor_status}: (Integer, modify) Mechanism specific status code. @var{mechanism}: (gss_OID, read) The mechanism to be interrogated. @var{name_types}: (gss_OID_set, modify) Set of name-types supported by the specified mechanism. The returned OID set must be freed by the application after use with a call to gss_release_oid_set(). Returns the set of nametypes supported by the specified mechanism. Return value: @code{GSS_S_COMPLETE}: Successful completion. @end deftypefun @subheading gss_inquire_mechs_for_name @anchor{gss_inquire_mechs_for_name} @deftypefun {OM_uint32} {gss_inquire_mechs_for_name} (OM_uint32 * @var{minor_status}, const gss_name_t @var{input_name}, gss_OID_set * @var{mech_types}) @var{minor_status}: (Integer, modify) Mechanism specific status code. @var{input_name}: (gss_name_t, read) The name to which the inquiry relates. @var{mech_types}: (gss_OID_set, modify) Set of mechanisms that may support the specified name. The returned OID set must be freed by the caller after use with a call to gss_release_oid_set(). Returns the set of mechanisms supported by the GSS-API implementation that may be able to process the specified name. Each mechanism returned will recognize at least one element within the name. It is permissible for this routine to be implemented within a mechanism-independent GSS-API layer, using the type information contained within the presented name, and based on registration information provided by individual mechanism implementations. This means that the returned mech_types set may indicate that a particular mechanism will understand the name when in fact it would refuse to accept the name as input to gss_canonicalize_name, gss_init_sec_context, gss_acquire_cred or gss_add_cred (due to some property of the specific name, as opposed to the name type). Thus this routine should be used only as a prefilter for a call to a subsequent mechanism-specific routine. Return value: @code{GSS_S_COMPLETE}: Successful completion. @code{GSS_S_BAD_NAME}: The input_name parameter was ill-formed. @code{GSS_S_BAD_NAMETYPE}: The input_name parameter contained an invalid or unsupported type of name. @end deftypefun @subheading gss_export_name @anchor{gss_export_name} @deftypefun {OM_uint32} {gss_export_name} (OM_uint32 * @var{minor_status}, const gss_name_t @var{input_name}, gss_buffer_t @var{exported_name}) @var{minor_status}: (Integer, modify) Mechanism specific status code. @var{input_name}: (gss_name_t, read) The MN to be exported. @var{exported_name}: (gss_buffer_t, octet-string, modify) The canonical contiguous string form of @@input_name. Storage associated with this string must freed by the application after use with gss_release_buffer(). To produce a canonical contiguous string representation of a mechanism name (MN), suitable for direct comparison (e.g. with memcmp) for use in authorization functions (e.g. matching entries in an access-control list). The @@input_name parameter must specify a valid MN (i.e. an internal name generated by gss_accept_sec_context() or by gss_canonicalize_name()). Return value: @code{GSS_S_COMPLETE}: Successful completion. @code{GSS_S_NAME_NOT_MN}: The provided internal name was not a mechanism name. @code{GSS_S_BAD_NAME}: The provided internal name was ill-formed. @code{GSS_S_BAD_NAMETYPE}: The internal name was of a type not supported by the GSS-API implementation. @end deftypefun @subheading gss_canonicalize_name @anchor{gss_canonicalize_name} @deftypefun {OM_uint32} {gss_canonicalize_name} (OM_uint32 * @var{minor_status}, const gss_name_t @var{input_name}, const gss_OID @var{mech_type}, gss_name_t * @var{output_name}) @var{minor_status}: (Integer, modify) Mechanism specific status code. @var{input_name}: (gss_name_t, read) The name for which a canonical form is desired. @var{mech_type}: (Object ID, read) The authentication mechanism for which the canonical form of the name is desired. The desired mechanism must be specified explicitly; no default is provided. @var{output_name}: (gss_name_t, modify) The resultant canonical name. Storage associated with this name must be freed by the application after use with a call to gss_release_name(). Generate a canonical mechanism name (MN) from an arbitrary internal name. The mechanism name is the name that would be returned to a context acceptor on successful authentication of a context where the initiator used the input_name in a successful call to gss_acquire_cred, specifying an OID set containing @@mech_type as its only member, followed by a call to gss_init_sec_context(), specifying @@mech_type as the authentication mechanism. Return value: @code{GSS_S_COMPLETE}: Successful completion. @end deftypefun @subheading gss_duplicate_name @anchor{gss_duplicate_name} @deftypefun {OM_uint32} {gss_duplicate_name} (OM_uint32 * @var{minor_status}, const gss_name_t @var{src_name}, gss_name_t * @var{dest_name}) @var{minor_status}: (Integer, modify) Mechanism specific status code. @var{src_name}: (gss_name_t, read) Internal name to be duplicated. @var{dest_name}: (gss_name_t, modify) The resultant copy of @@src_name. Storage associated with this name must be freed by the application after use with a call to gss_release_name(). Create an exact duplicate of the existing internal name @@src_name. The new @@dest_name will be independent of src_name (i.e. @@src_name and @@dest_name must both be released, and the release of one shall not affect the validity of the other). Return value: @code{GSS_S_COMPLETE}: Successful completion. @code{GSS_S_BAD_NAME}: The src_name parameter was ill-formed. @end deftypefun gss-1.0.3/doc/texi/gss_inquire_saslname_for_mech.texi0000644000000000000000000000255312415507726017702 00000000000000@subheading gss_inquire_saslname_for_mech @anchor{gss_inquire_saslname_for_mech} @deftypefun {OM_uint32} {gss_inquire_saslname_for_mech} (OM_uint32 * @var{minor_status}, const gss_OID @var{desired_mech}, gss_buffer_t @var{sasl_mech_name}, gss_buffer_t @var{mech_name}, gss_buffer_t @var{mech_description}) @var{minor_status}: (Integer, modify) Mechanism specific status code. @var{desired_mech}: (OID, read) Identifies the GSS-API mechanism to query. @var{sasl_mech_name}: (buffer, character-string, modify, optional) Buffer to receive SASL mechanism name. The application must free storage associated with this name after use with a call to gss_release_buffer(). @var{mech_name}: (buffer, character-string, modify, optional) Buffer to receive human readable mechanism name. The application must free storage associated with this name after use with a call to gss_release_buffer(). @var{mech_description}: (buffer, character-string, modify, optional) Buffer to receive description of mechanism. The application must free storage associated with this name after use with a call to gss_release_buffer(). Output the SASL mechanism name of a GSS-API mechanism. It also returns a name and description of the mechanism in a user friendly form. Returns: @code{GSS_S_COMPLETE}: Successful completion. @code{GSS_S_BAD_MECH}: The @@desired_mech OID is unsupported. @end deftypefun gss-1.0.3/doc/texi/gss_add_oid_set_member.texi0000644000000000000000000000242112415507710016251 00000000000000@subheading gss_add_oid_set_member @anchor{gss_add_oid_set_member} @deftypefun {OM_uint32} {gss_add_oid_set_member} (OM_uint32 * @var{minor_status}, const gss_OID @var{member_oid}, gss_OID_set * @var{oid_set}) @var{minor_status}: (integer, modify) Mechanism specific status code. @var{member_oid}: (Object ID, read) The object identifier to copied into the set. @var{oid_set}: (Set of Object ID, modify) The set in which the object identifier should be inserted. Add an Object Identifier to an Object Identifier set. This routine is intended for use in conjunction with gss_create_empty_oid_set when constructing a set of mechanism OIDs for input to gss_acquire_cred. The oid_set parameter must refer to an OID-set that was created by GSS-API (e.g. a set returned by gss_create_empty_oid_set()). GSS-API creates a copy of the member_oid and inserts this copy into the set, expanding the storage allocated to the OID-set's elements array if necessary. The routine may add the new member OID anywhere within the elements array, and implementations should verify that the new member_oid is not already contained within the elements array; if the member_oid is already present, the oid_set should remain unchanged. Return value: @code{GSS_S_COMPLETE}: Successful completion. @end deftypefun gss-1.0.3/doc/texi/asn1.c.texi0000644000000000000000000000435312415507664012711 00000000000000@subheading gss_encapsulate_token @anchor{gss_encapsulate_token} @deftypefun {extern OM_uint32} {gss_encapsulate_token} (gss_const_buffer_t @var{input_token}, gss_const_OID @var{token_oid}, gss_buffer_t @var{output_token}) @var{input_token}: (buffer, opaque, read) Buffer with GSS-API context token data. @var{token_oid}: (Object ID, read) Object identifier of token. @var{output_token}: (buffer, opaque, modify) Encapsulated token data; caller must release with gss_release_buffer(). Add the mechanism-independent token header to GSS-API context token data. This is used for the initial token of a GSS-API context establishment sequence. It incorporates an identifier of the mechanism type to be used on that context, and enables tokens to be interpreted unambiguously at GSS-API peers. See further section 3.1 of RFC 2743. This function is standardized in RFC 6339. Returns: @code{GSS_S_COMPLETE}: Indicates successful completion, and that output parameters holds correct information. @code{GSS_S_FAILURE}: Indicates that encapsulation failed for reasons unspecified at the GSS-API level. @end deftypefun @subheading gss_decapsulate_token @anchor{gss_decapsulate_token} @deftypefun {OM_uint32} {gss_decapsulate_token} (gss_const_buffer_t @var{input_token}, gss_const_OID @var{token_oid}, gss_buffer_t @var{output_token}) @var{input_token}: (buffer, opaque, read) Buffer with GSS-API context token. @var{token_oid}: (Object ID, read) Expected object identifier of token. @var{output_token}: (buffer, opaque, modify) Decapsulated token data; caller must release with gss_release_buffer(). Remove the mechanism-independent token header from an initial GSS-API context token. Unwrap a buffer in the mechanism-independent token format. This is the reverse of gss_encapsulate_token(). The translation is loss-less, all data is preserved as is. This function is standardized in RFC 6339. Return value: @code{GSS_S_COMPLETE}: Indicates successful completion, and that output parameters holds correct information. @code{GSS_S_DEFECTIVE_TOKEN}: Means that the token failed consistency checks (e.g., OID mismatch or ASN.1 DER length errors). @code{GSS_S_FAILURE}: Indicates that decapsulation failed for reasons unspecified at the GSS-API level. @end deftypefun gss-1.0.3/doc/texi/gss_release_cred.texi0000644000000000000000000000143312415507704015106 00000000000000@subheading gss_release_cred @anchor{gss_release_cred} @deftypefun {OM_uint32} {gss_release_cred} (OM_uint32 * @var{minor_status}, gss_cred_id_t * @var{cred_handle}) @var{minor_status}: (Integer, modify) Mechanism specific status code. @var{cred_handle}: (gss_cred_id_t, modify, optional) Opaque handle identifying credential to be released. If GSS_C_NO_CREDENTIAL is supplied, the routine will complete successfully, but will do nothing. Informs GSS-API that the specified credential handle is no longer required by the application, and frees associated resources. The cred_handle is set to GSS_C_NO_CREDENTIAL on successful completion of this call. Return value: @code{GSS_S_COMPLETE}: Successful completion. @code{GSS_S_NO_CRED}: Credentials could not be accessed. @end deftypefun gss-1.0.3/doc/texi/gss_release_oid_set.texi0000644000000000000000000000145512415507711015621 00000000000000@subheading gss_release_oid_set @anchor{gss_release_oid_set} @deftypefun {OM_uint32} {gss_release_oid_set} (OM_uint32 * @var{minor_status}, gss_OID_set * @var{set}) @var{minor_status}: (integer, modify) Mechanism specific status code. @var{set}: (Set of Object IDs, modify) The storage associated with the gss_OID_set will be deleted. Free storage associated with a GSSAPI-generated gss_OID_set object. The set parameter must refer to an OID-set that was returned from a GSS-API routine. gss_release_oid_set() will free the storage associated with each individual member OID, the OID set's elements array, and the gss_OID_set_desc. The gss_OID_set parameter is set to GSS_C_NO_OID_SET on successful completion of this routine. Return value: @code{GSS_S_COMPLETE}: Successful completion. @end deftypefun gss-1.0.3/doc/texi/gss_context_time.texi0000644000000000000000000000147712415507674015211 00000000000000@subheading gss_context_time @anchor{gss_context_time} @deftypefun {OM_uint32} {gss_context_time} (OM_uint32 * @var{minor_status}, const gss_ctx_id_t @var{context_handle}, OM_uint32 * @var{time_rec}) @var{minor_status}: (Integer, modify) Implementation specific status code. @var{context_handle}: (gss_ctx_id_t, read) Identifies the context to be interrogated. @var{time_rec}: (Integer, modify) Number of seconds that the context will remain valid. If the context has already expired, zero will be returned. Determines the number of seconds for which the specified context will remain valid. Return value: @code{GSS_S_COMPLETE}: Successful completion. @code{GSS_S_CONTEXT_EXPIRED}: The context has already expired. @code{GSS_S_NO_CONTEXT}: The context_handle parameter did not identify a valid context @end deftypefun gss-1.0.3/doc/texi/gss_inquire_mech_for_saslname.texi0000644000000000000000000000161112415507726017674 00000000000000@subheading gss_inquire_mech_for_saslname @anchor{gss_inquire_mech_for_saslname} @deftypefun {OM_uint32} {gss_inquire_mech_for_saslname} (OM_uint32 * @var{minor_status}, const gss_buffer_t @var{sasl_mech_name}, gss_OID * @var{mech_type}) @var{minor_status}: (Integer, modify) Mechanism specific status code. @var{sasl_mech_name}: (buffer, character-string, read) Buffer with SASL mechanism name. @var{mech_type}: (OID, modify, optional) Actual mechanism used. The OID returned via this parameter will be a pointer to static storage that should be treated as read-only; In particular the application should not attempt to free it. Specify NULL if not required. Output GSS-API mechanism OID of mechanism associated with given @@sasl_mech_name. Returns: @code{GSS_S_COMPLETE}: Successful completion. @code{GSS_S_BAD_MECH}: There is no GSS-API mechanism known as @@sasl_mech_name. @end deftypefun gss-1.0.3/doc/texi/gss_inquire_mechs_for_name.texi0000644000000000000000000000324612415507723017177 00000000000000@subheading gss_inquire_mechs_for_name @anchor{gss_inquire_mechs_for_name} @deftypefun {OM_uint32} {gss_inquire_mechs_for_name} (OM_uint32 * @var{minor_status}, const gss_name_t @var{input_name}, gss_OID_set * @var{mech_types}) @var{minor_status}: (Integer, modify) Mechanism specific status code. @var{input_name}: (gss_name_t, read) The name to which the inquiry relates. @var{mech_types}: (gss_OID_set, modify) Set of mechanisms that may support the specified name. The returned OID set must be freed by the caller after use with a call to gss_release_oid_set(). Returns the set of mechanisms supported by the GSS-API implementation that may be able to process the specified name. Each mechanism returned will recognize at least one element within the name. It is permissible for this routine to be implemented within a mechanism-independent GSS-API layer, using the type information contained within the presented name, and based on registration information provided by individual mechanism implementations. This means that the returned mech_types set may indicate that a particular mechanism will understand the name when in fact it would refuse to accept the name as input to gss_canonicalize_name, gss_init_sec_context, gss_acquire_cred or gss_add_cred (due to some property of the specific name, as opposed to the name type). Thus this routine should be used only as a prefilter for a call to a subsequent mechanism-specific routine. Return value: @code{GSS_S_COMPLETE}: Successful completion. @code{GSS_S_BAD_NAME}: The input_name parameter was ill-formed. @code{GSS_S_BAD_NAMETYPE}: The input_name parameter contained an invalid or unsupported type of name. @end deftypefun gss-1.0.3/doc/texi/meta.c.texi0000644000000000000000000000000012415507706012753 00000000000000gss-1.0.3/doc/texi/gss_display_status.texi0000644000000000000000000000646612415507705015555 00000000000000@subheading gss_display_status @anchor{gss_display_status} @deftypefun {OM_uint32} {gss_display_status} (OM_uint32 * @var{minor_status}, OM_uint32 @var{status_value}, int @var{status_type}, const gss_OID @var{mech_type}, OM_uint32 * @var{message_context}, gss_buffer_t @var{status_string}) @var{minor_status}: (integer, modify) Mechanism specific status code. @var{status_value}: (Integer, read) Status value to be converted. @var{status_type}: (Integer, read) GSS_C_GSS_CODE - status_value is a GSS status code. GSS_C_MECH_CODE - status_value is a mechanism status code. @var{mech_type}: (Object ID, read, optional) Underlying mechanism (used to interpret a minor status value). Supply GSS_C_NO_OID to obtain the system default. @var{message_context}: (Integer, read/modify) Should be initialized to zero by the application prior to the first call. On return from gss_display_status(), a non-zero status_value parameter indicates that additional messages may be extracted from the status code via subsequent calls to gss_display_status(), passing the same status_value, status_type, mech_type, and message_context parameters. @var{status_string}: (buffer, character string, modify) Textual interpretation of the status_value. Storage associated with this parameter must be freed by the application after use with a call to gss_release_buffer(). Allows an application to obtain a textual representation of a GSS-API status code, for display to the user or for logging purposes. Since some status values may indicate multiple conditions, applications may need to call gss_display_status multiple times, each call generating a single text string. The message_context parameter is used by gss_display_status to store state information about which error messages have already been extracted from a given status_value; message_context must be initialized to 0 by the application prior to the first call, and gss_display_status will return a non-zero value in this parameter if there are further messages to extract. The message_context parameter contains all state information required by gss_display_status in order to extract further messages from the status_value; even when a non-zero value is returned in this parameter, the application is not required to call gss_display_status again unless subsequent messages are desired. The following code extracts all messages from a given status code and prints them to stderr: @example OM_uint32 message_context; OM_uint32 status_code; OM_uint32 maj_status; OM_uint32 min_status; gss_buffer_desc status_string; ... message_context = 0; do @{ maj_status = gss_display_status ( &min_status, status_code, GSS_C_GSS_CODE, GSS_C_NO_OID, &message_context, &status_string) fprintf(stderr, "%.*s\n", (int)status_string.length, (char *)status_string.value); gss_release_buffer(&min_status, &status_string); @} while (message_context != 0); @end example Return value: @code{GSS_S_COMPLETE}: Successful completion. @code{GSS_S_BAD_MECH}: Indicates that translation in accordance with an unsupported mechanism type was requested. @code{GSS_S_BAD_STATUS}: The status value was not recognized, or the status type was neither GSS_C_GSS_CODE nor GSS_C_MECH_CODE. @end deftypefun gss-1.0.3/doc/texi/gss_get_mic.texi0000644000000000000000000000344212415507714014103 00000000000000@subheading gss_get_mic @anchor{gss_get_mic} @deftypefun {OM_uint32} {gss_get_mic} (OM_uint32 * @var{minor_status}, const gss_ctx_id_t @var{context_handle}, gss_qop_t @var{qop_req}, const gss_buffer_t @var{message_buffer}, gss_buffer_t @var{message_token}) @var{minor_status}: (Integer, modify) Mechanism specific status code. @var{context_handle}: (gss_ctx_id_t, read) Identifies the context on which the message will be sent. @var{qop_req}: (gss_qop_t, read, optional) Specifies requested quality of protection. Callers are encouraged, on portability grounds, to accept the default quality of protection offered by the chosen mechanism, which may be requested by specifying GSS_C_QOP_DEFAULT for this parameter. If an unsupported protection strength is requested, gss_get_mic will return a major_status of GSS_S_BAD_QOP. @var{message_buffer}: (buffer, opaque, read) Message to be protected. @var{message_token}: (buffer, opaque, modify) Buffer to receive token. The application must free storage associated with this buffer after use with a call to gss_release_buffer(). Generates a cryptographic MIC for the supplied message, and places the MIC in a token for transfer to the peer application. The qop_req parameter allows a choice between several cryptographic algorithms, if supported by the chosen mechanism. Since some application-level protocols may wish to use tokens emitted by gss_wrap() to provide "secure framing", implementations must support derivation of MICs from zero-length messages. Return value: @code{GSS_S_COMPLETE}: Successful completion. @code{GSS_S_CONTEXT_EXPIRED}: The context has already expired. @code{GSS_S_NO_CONTEXT}: The context_handle parameter did not identify a valid context. @code{GSS_S_BAD_QOP}: The specified QOP is not supported by the mechanism. @end deftypefun gss-1.0.3/doc/texi/gss_inquire_names_for_mech.texi0000644000000000000000000000130712415507723017173 00000000000000@subheading gss_inquire_names_for_mech @anchor{gss_inquire_names_for_mech} @deftypefun {OM_uint32} {gss_inquire_names_for_mech} (OM_uint32 * @var{minor_status}, const gss_OID @var{mechanism}, gss_OID_set * @var{name_types}) @var{minor_status}: (Integer, modify) Mechanism specific status code. @var{mechanism}: (gss_OID, read) The mechanism to be interrogated. @var{name_types}: (gss_OID_set, modify) Set of name-types supported by the specified mechanism. The returned OID set must be freed by the application after use with a call to gss_release_oid_set(). Returns the set of nametypes supported by the specified mechanism. Return value: @code{GSS_S_COMPLETE}: Successful completion. @end deftypefun gss-1.0.3/doc/texi/gss_acquire_cred.texi0000644000000000000000000001121412415507702015113 00000000000000@subheading gss_acquire_cred @anchor{gss_acquire_cred} @deftypefun {OM_uint32} {gss_acquire_cred} (OM_uint32 * @var{minor_status}, const gss_name_t @var{desired_name}, OM_uint32 @var{time_req}, const gss_OID_set @var{desired_mechs}, gss_cred_usage_t @var{cred_usage}, gss_cred_id_t * @var{output_cred_handle}, gss_OID_set * @var{actual_mechs}, OM_uint32 * @var{time_rec}) @var{minor_status}: (integer, modify) Mechanism specific status code. @var{desired_name}: (gss_name_t, read) Name of principal whose credential should be acquired. @var{time_req}: (Integer, read, optional) Number of seconds that credentials should remain valid. Specify GSS_C_INDEFINITE to request that the credentials have the maximum permitted lifetime. @var{desired_mechs}: (Set of Object IDs, read, optional) Set of underlying security mechanisms that may be used. GSS_C_NO_OID_SET may be used to obtain an implementation-specific default. @var{cred_usage}: (gss_cred_usage_t, read) GSS_C_BOTH - Credentials may be used either to initiate or accept security contexts. GSS_C_INITIATE - Credentials will only be used to initiate security contexts. GSS_C_ACCEPT - Credentials will only be used to accept security contexts. @var{output_cred_handle}: (gss_cred_id_t, modify) The returned credential handle. Resources associated with this credential handle must be released by the application after use with a call to gss_release_cred(). @var{actual_mechs}: (Set of Object IDs, modify, optional) The set of mechanisms for which the credential is valid. Storage associated with the returned OID-set must be released by the application after use with a call to gss_release_oid_set(). Specify NULL if not required. @var{time_rec}: (Integer, modify, optional) Actual number of seconds for which the returned credentials will remain valid. If the implementation does not support expiration of credentials, the value GSS_C_INDEFINITE will be returned. Specify NULL if not required. Allows an application to acquire a handle for a pre-existing credential by name. GSS-API implementations must impose a local access-control policy on callers of this routine to prevent unauthorized callers from acquiring credentials to which they are not entitled. This routine is not intended to provide a "login to the network" function, as such a function would involve the creation of new credentials rather than merely acquiring a handle to existing credentials. Such functions, if required, should be defined in implementation-specific extensions to the API. If desired_name is GSS_C_NO_NAME, the call is interpreted as a request for a credential handle that will invoke default behavior when passed to gss_init_sec_context() (if cred_usage is GSS_C_INITIATE or GSS_C_BOTH) or gss_accept_sec_context() (if cred_usage is GSS_C_ACCEPT or GSS_C_BOTH). Mechanisms should honor the desired_mechs parameter, and return a credential that is suitable to use only with the requested mechanisms. An exception to this is the case where one underlying credential element can be shared by multiple mechanisms; in this case it is permissible for an implementation to indicate all mechanisms with which the credential element may be used. If desired_mechs is an empty set, behavior is undefined. This routine is expected to be used primarily by context acceptors, since implementations are likely to provide mechanism-specific ways of obtaining GSS-API initiator credentials from the system login process. Some implementations may therefore not support the acquisition of GSS_C_INITIATE or GSS_C_BOTH credentials via gss_acquire_cred for any name other than GSS_C_NO_NAME, or a name produced by applying either gss_inquire_cred to a valid credential, or gss_inquire_context to an active context. If credential acquisition is time-consuming for a mechanism, the mechanism may choose to delay the actual acquisition until the credential is required (e.g. by gss_init_sec_context or gss_accept_sec_context). Such mechanism-specific implementation decisions should be invisible to the calling application; thus a call of gss_inquire_cred immediately following the call of gss_acquire_cred must return valid credential data, and may therefore incur the overhead of a deferred credential acquisition. Return value: @code{GSS_S_COMPLETE}: Successful completion. @code{GSS_S_BAD_MECH}: Unavailable mechanism requested. @code{GSS_S_BAD_NAMETYPE}: Type contained within desired_name parameter is not supported. @code{GSS_S_BAD_NAME}: Value supplied for desired_name parameter is ill formed. @code{GSS_S_CREDENTIALS_EXPIRED}: The credentials could not be acquired Because they have expired. @code{GSS_S_NO_CRED}: No credentials were found for the specified name. @end deftypefun gss-1.0.3/doc/texi/misc.c.texi0000644000000000000000000001253612415507710012774 00000000000000@subheading gss_create_empty_oid_set @anchor{gss_create_empty_oid_set} @deftypefun {OM_uint32} {gss_create_empty_oid_set} (OM_uint32 * @var{minor_status}, gss_OID_set * @var{oid_set}) @var{minor_status}: (integer, modify) Mechanism specific status code. @var{oid_set}: (Set of Object IDs, modify) The empty object identifier set. The routine will allocate the gss_OID_set_desc object, which the application must free after use with a call to gss_release_oid_set(). Create an object-identifier set containing no object identifiers, to which members may be subsequently added using the gss_add_oid_set_member() routine. These routines are intended to be used to construct sets of mechanism object identifiers, for input to gss_acquire_cred. Return value: @code{GSS_S_COMPLETE}: Successful completion. @end deftypefun @subheading gss_add_oid_set_member @anchor{gss_add_oid_set_member} @deftypefun {OM_uint32} {gss_add_oid_set_member} (OM_uint32 * @var{minor_status}, const gss_OID @var{member_oid}, gss_OID_set * @var{oid_set}) @var{minor_status}: (integer, modify) Mechanism specific status code. @var{member_oid}: (Object ID, read) The object identifier to copied into the set. @var{oid_set}: (Set of Object ID, modify) The set in which the object identifier should be inserted. Add an Object Identifier to an Object Identifier set. This routine is intended for use in conjunction with gss_create_empty_oid_set when constructing a set of mechanism OIDs for input to gss_acquire_cred. The oid_set parameter must refer to an OID-set that was created by GSS-API (e.g. a set returned by gss_create_empty_oid_set()). GSS-API creates a copy of the member_oid and inserts this copy into the set, expanding the storage allocated to the OID-set's elements array if necessary. The routine may add the new member OID anywhere within the elements array, and implementations should verify that the new member_oid is not already contained within the elements array; if the member_oid is already present, the oid_set should remain unchanged. Return value: @code{GSS_S_COMPLETE}: Successful completion. @end deftypefun @subheading gss_test_oid_set_member @anchor{gss_test_oid_set_member} @deftypefun {OM_uint32} {gss_test_oid_set_member} (OM_uint32 * @var{minor_status}, const gss_OID @var{member}, const gss_OID_set @var{set}, int * @var{present}) @var{minor_status}: (integer, modify) Mechanism specific status code. @var{member}: (Object ID, read) The object identifier whose presence is to be tested. @var{set}: (Set of Object ID, read) The Object Identifier set. @var{present}: (Boolean, modify) Non-zero if the specified OID is a member of the set, zero if not. Interrogate an Object Identifier set to determine whether a specified Object Identifier is a member. This routine is intended to be used with OID sets returned by gss_indicate_mechs(), gss_acquire_cred(), and gss_inquire_cred(), but will also work with user-generated sets. Return value: @code{GSS_S_COMPLETE}: Successful completion. @end deftypefun @subheading gss_release_oid_set @anchor{gss_release_oid_set} @deftypefun {OM_uint32} {gss_release_oid_set} (OM_uint32 * @var{minor_status}, gss_OID_set * @var{set}) @var{minor_status}: (integer, modify) Mechanism specific status code. @var{set}: (Set of Object IDs, modify) The storage associated with the gss_OID_set will be deleted. Free storage associated with a GSSAPI-generated gss_OID_set object. The set parameter must refer to an OID-set that was returned from a GSS-API routine. gss_release_oid_set() will free the storage associated with each individual member OID, the OID set's elements array, and the gss_OID_set_desc. The gss_OID_set parameter is set to GSS_C_NO_OID_SET on successful completion of this routine. Return value: @code{GSS_S_COMPLETE}: Successful completion. @end deftypefun @subheading gss_indicate_mechs @anchor{gss_indicate_mechs} @deftypefun {OM_uint32} {gss_indicate_mechs} (OM_uint32 * @var{minor_status}, gss_OID_set * @var{mech_set}) @var{minor_status}: (integer, modify) Mechanism specific status code. @var{mech_set}: (set of Object IDs, modify) Set of implementation-supported mechanisms. The returned gss_OID_set value will be a dynamically-allocated OID set, that should be released by the caller after use with a call to gss_release_oid_set(). Allows an application to determine which underlying security mechanisms are available. Return value: @code{GSS_S_COMPLETE}: Successful completion. @end deftypefun @subheading gss_release_buffer @anchor{gss_release_buffer} @deftypefun {OM_uint32} {gss_release_buffer} (OM_uint32 * @var{minor_status}, gss_buffer_t @var{buffer}) @var{minor_status}: (integer, modify) Mechanism specific status code. @var{buffer}: (buffer, modify) The storage associated with the buffer will be deleted. The gss_buffer_desc object will not be freed, but its length field will be zeroed. Free storage associated with a buffer. The storage must have been allocated by a GSS-API routine. In addition to freeing the associated storage, the routine will zero the length field in the descriptor to which the buffer parameter refers, and implementations are encouraged to additionally set the pointer field in the descriptor to NULL. Any buffer object returned by a GSS-API routine may be passed to gss_release_buffer (even if there is no storage associated with the buffer). Return value: @code{GSS_S_COMPLETE}: Successful completion. @end deftypefun gss-1.0.3/doc/texi/gss_release_buffer.texi0000644000000000000000000000171512415507711015443 00000000000000@subheading gss_release_buffer @anchor{gss_release_buffer} @deftypefun {OM_uint32} {gss_release_buffer} (OM_uint32 * @var{minor_status}, gss_buffer_t @var{buffer}) @var{minor_status}: (integer, modify) Mechanism specific status code. @var{buffer}: (buffer, modify) The storage associated with the buffer will be deleted. The gss_buffer_desc object will not be freed, but its length field will be zeroed. Free storage associated with a buffer. The storage must have been allocated by a GSS-API routine. In addition to freeing the associated storage, the routine will zero the length field in the descriptor to which the buffer parameter refers, and implementations are encouraged to additionally set the pointer field in the descriptor to NULL. Any buffer object returned by a GSS-API routine may be passed to gss_release_buffer (even if there is no storage associated with the buffer). Return value: @code{GSS_S_COMPLETE}: Successful completion. @end deftypefun gss-1.0.3/doc/texi/gss_add_cred.texi0000644000000000000000000001661012415507703014220 00000000000000@subheading gss_add_cred @anchor{gss_add_cred} @deftypefun {OM_uint32} {gss_add_cred} (OM_uint32 * @var{minor_status}, const gss_cred_id_t @var{input_cred_handle}, const gss_name_t @var{desired_name}, const gss_OID @var{desired_mech}, gss_cred_usage_t @var{cred_usage}, OM_uint32 @var{initiator_time_req}, OM_uint32 @var{acceptor_time_req}, gss_cred_id_t * @var{output_cred_handle}, gss_OID_set * @var{actual_mechs}, OM_uint32 * @var{initiator_time_rec}, OM_uint32 * @var{acceptor_time_rec}) @var{minor_status}: (integer, modify) Mechanism specific status code. @var{input_cred_handle}: (gss_cred_id_t, read, optional) The credential to which a credential-element will be added. If GSS_C_NO_CREDENTIAL is specified, the routine will compose the new credential based on default behavior (see text). Note that, while the credential-handle is not modified by gss_add_cred(), the underlying credential will be modified if output_credential_handle is NULL. @var{desired_name}: (gss_name_t, read.) Name of principal whose credential should be acquired. @var{desired_mech}: (Object ID, read) Underlying security mechanism with which the credential may be used. @var{cred_usage}: (gss_cred_usage_t, read) GSS_C_BOTH - Credential may be used either to initiate or accept security contexts. GSS_C_INITIATE - Credential will only be used to initiate security contexts. GSS_C_ACCEPT - Credential will only be used to accept security contexts. @var{initiator_time_req}: (Integer, read, optional) number of seconds that the credential should remain valid for initiating security contexts. This argument is ignored if the composed credentials are of type GSS_C_ACCEPT. Specify GSS_C_INDEFINITE to request that the credentials have the maximum permitted initiator lifetime. @var{acceptor_time_req}: (Integer, read, optional) number of seconds that the credential should remain valid for accepting security contexts. This argument is ignored if the composed credentials are of type GSS_C_INITIATE. Specify GSS_C_INDEFINITE to request that the credentials have the maximum permitted initiator lifetime. @var{output_cred_handle}: (gss_cred_id_t, modify, optional) The returned credential handle, containing the new credential-element and all the credential-elements from input_cred_handle. If a valid pointer to a gss_cred_id_t is supplied for this parameter, gss_add_cred creates a new credential handle containing all credential-elements from the input_cred_handle and the newly acquired credential-element; if NULL is specified for this parameter, the newly acquired credential-element will be added to the credential identified by input_cred_handle. The resources associated with any credential handle returned via this parameter must be released by the application after use with a call to gss_release_cred(). @var{actual_mechs}: (Set of Object IDs, modify, optional) The complete set of mechanisms for which the new credential is valid. Storage for the returned OID-set must be freed by the application after use with a call to gss_release_oid_set(). Specify NULL if not required. @var{initiator_time_rec}: (Integer, modify, optional) Actual number of seconds for which the returned credentials will remain valid for initiating contexts using the specified mechanism. If the implementation or mechanism does not support expiration of credentials, the value GSS_C_INDEFINITE will be returned. Specify NULL if not required @var{acceptor_time_rec}: (Integer, modify, optional) Actual number of seconds for which the returned credentials will remain valid for accepting security contexts using the specified mechanism. If the implementation or mechanism does not support expiration of credentials, the value GSS_C_INDEFINITE will be returned. Specify NULL if not required Adds a credential-element to a credential. The credential-element is identified by the name of the principal to which it refers. GSS-API implementations must impose a local access-control policy on callers of this routine to prevent unauthorized callers from acquiring credential-elements to which they are not entitled. This routine is not intended to provide a "login to the network" function, as such a function would involve the creation of new mechanism-specific authentication data, rather than merely acquiring a GSS-API handle to existing data. Such functions, if required, should be defined in implementation-specific extensions to the API. If desired_name is GSS_C_NO_NAME, the call is interpreted as a request to add a credential element that will invoke default behavior when passed to gss_init_sec_context() (if cred_usage is GSS_C_INITIATE or GSS_C_BOTH) or gss_accept_sec_context() (if cred_usage is GSS_C_ACCEPT or GSS_C_BOTH). This routine is expected to be used primarily by context acceptors, since implementations are likely to provide mechanism-specific ways of obtaining GSS-API initiator credentials from the system login process. Some implementations may therefore not support the acquisition of GSS_C_INITIATE or GSS_C_BOTH credentials via gss_acquire_cred for any name other than GSS_C_NO_NAME, or a name produced by applying either gss_inquire_cred to a valid credential, or gss_inquire_context to an active context. If credential acquisition is time-consuming for a mechanism, the mechanism may choose to delay the actual acquisition until the credential is required (e.g. by gss_init_sec_context or gss_accept_sec_context). Such mechanism-specific implementation decisions should be invisible to the calling application; thus a call of gss_inquire_cred immediately following the call of gss_add_cred must return valid credential data, and may therefore incur the overhead of a deferred credential acquisition. This routine can be used to either compose a new credential containing all credential-elements of the original in addition to the newly-acquire credential-element, or to add the new credential- element to an existing credential. If NULL is specified for the output_cred_handle parameter argument, the new credential-element will be added to the credential identified by input_cred_handle; if a valid pointer is specified for the output_cred_handle parameter, a new credential handle will be created. If GSS_C_NO_CREDENTIAL is specified as the input_cred_handle, gss_add_cred will compose a credential (and set the output_cred_handle parameter accordingly) based on default behavior. That is, the call will have the same effect as if the application had first made a call to gss_acquire_cred(), specifying the same usage and passing GSS_C_NO_NAME as the desired_name parameter to obtain an explicit credential handle embodying default behavior, passed this credential handle to gss_add_cred(), and finally called gss_release_cred() on the first credential handle. If GSS_C_NO_CREDENTIAL is specified as the input_cred_handle parameter, a non-NULL output_cred_handle must be supplied. Return value: @code{GSS_S_COMPLETE}: Successful completion. @code{GSS_S_BAD_MECH}: Unavailable mechanism requested. @code{GSS_S_BAD_NAMETYPE}: Type contained within desired_name parameter is not supported. @code{GSS_S_BAD_NAME}: Value supplied for desired_name parameter is ill-formed. @code{GSS_S_DUPLICATE_ELEMENT}: The credential already contains an element for the requested mechanism with overlapping usage and validity period. @code{GSS_S_CREDENTIALS_EXPIRED}: The required credentials could not be added because they have expired. @code{GSS_S_NO_CRED}: No credentials were found for the specified name. @end deftypefun gss-1.0.3/doc/texi/gss_inquire_context.texi0000644000000000000000000001234412415507675015723 00000000000000@subheading gss_inquire_context @anchor{gss_inquire_context} @deftypefun {OM_uint32} {gss_inquire_context} (OM_uint32 * @var{minor_status}, const gss_ctx_id_t @var{context_handle}, gss_name_t * @var{src_name}, gss_name_t * @var{targ_name}, OM_uint32 * @var{lifetime_rec}, gss_OID * @var{mech_type}, OM_uint32 * @var{ctx_flags}, int * @var{locally_initiated}, int * @var{open}) @var{minor_status}: (Integer, modify) Mechanism specific status code. @var{context_handle}: (gss_ctx_id_t, read) A handle that refers to the security context. @var{src_name}: (gss_name_t, modify, optional) The name of the context initiator. If the context was established using anonymous authentication, and if the application invoking gss_inquire_context is the context acceptor, an anonymous name will be returned. Storage associated with this name must be freed by the application after use with a call to gss_release_name(). Specify NULL if not required. @var{targ_name}: (gss_name_t, modify, optional) The name of the context acceptor. Storage associated with this name must be freed by the application after use with a call to gss_release_name(). If the context acceptor did not authenticate itself, and if the initiator did not specify a target name in its call to gss_init_sec_context(), the value GSS_C_NO_NAME will be returned. Specify NULL if not required. @var{lifetime_rec}: (Integer, modify, optional) The number of seconds for which the context will remain valid. If the context has expired, this parameter will be set to zero. If the implementation does not support context expiration, the value GSS_C_INDEFINITE will be returned. Specify NULL if not required. @var{mech_type}: (gss_OID, modify, optional) The security mechanism providing the context. The returned OID will be a pointer to static storage that should be treated as read-only by the application; in particular the application should not attempt to free it. Specify NULL if not required. @var{ctx_flags}: (bit-mask, modify, optional) Contains various independent flags, each of which indicates that the context supports (or is expected to support, if ctx_open is false) a specific service option. If not needed, specify NULL. Symbolic names are provided for each flag, and the symbolic names corresponding to the required flags should be logically-ANDed with the ret_flags value to test whether a given option is supported by the context. See below for the flags. @var{locally_initiated}: (Boolean, modify) Non-zero if the invoking application is the context initiator. Specify NULL if not required. @var{open}: (Boolean, modify) Non-zero if the context is fully established; Zero if a context-establishment token is expected from the peer application. Specify NULL if not required. Obtains information about a security context. The caller must already have obtained a handle that refers to the context, although the context need not be fully established. The @code{ctx_flags} values: @table @asis @item @code{GSS_C_DELEG_FLAG} @itemize @bullet @item True - Credentials were delegated from the initiator to the acceptor. @item False - No credentials were delegated. @end itemize @item @code{GSS_C_MUTUAL_FLAG} @itemize @bullet @item True - The acceptor was authenticated to the initiator. @item False - The acceptor did not authenticate itself. @end itemize @item @code{GSS_C_REPLAY_FLAG} @itemize @bullet @item True - replay of protected messages will be detected. @item False - replayed messages will not be detected. @end itemize @item @code{GSS_C_SEQUENCE_FLAG} @itemize @bullet @item True - out-of-sequence protected messages will be detected. @item False - out-of-sequence messages will not be detected. @end itemize @item @code{GSS_C_CONF_FLAG} @itemize @bullet @item True - Confidentiality service may be invoked by calling gss_wrap routine. @item False - No confidentiality service (via gss_wrap) available. gss_wrap will provide message encapsulation, data-origin authentication and integrity services only. @end itemize @item @code{GSS_C_INTEG_FLAG} @itemize @bullet @item True - Integrity service may be invoked by calling either gss_get_mic or gss_wrap routines. @item False - Per-message integrity service unavailable. @end itemize @item @code{GSS_C_ANON_FLAG} @itemize @bullet @item True - The initiator's identity will not be revealed to the acceptor. The src_name parameter (if requested) contains an anonymous internal name. @item False - The initiator has been authenticated normally. @end itemize @item @code{GSS_C_PROT_READY_FLAG} @itemize @bullet @item True - Protection services (as specified by the states of the GSS_C_CONF_FLAG and GSS_C_INTEG_FLAG) are available for use. @item False - Protection services (as specified by the states of the GSS_C_CONF_FLAG and GSS_C_INTEG_FLAG) are available only if the context is fully established (i.e. if the open parameter is non-zero). @end itemize @item @code{GSS_C_TRANS_FLAG} @itemize @bullet @item True - The resultant security context may be transferred to other processes via a call to gss_export_sec_context(). @item False - The security context is not transferable. @end itemize @end table Return value: @code{GSS_S_COMPLETE}: Successful completion. @code{GSS_S_NO_CONTEXT}: The referenced context could not be accessed. @end deftypefun gss-1.0.3/doc/texi/gss_inquire_cred.texi0000644000000000000000000000362412415507703015145 00000000000000@subheading gss_inquire_cred @anchor{gss_inquire_cred} @deftypefun {OM_uint32} {gss_inquire_cred} (OM_uint32 * @var{minor_status}, const gss_cred_id_t @var{cred_handle}, gss_name_t * @var{name}, OM_uint32 * @var{lifetime}, gss_cred_usage_t * @var{cred_usage}, gss_OID_set * @var{mechanisms}) @var{minor_status}: (integer, modify) Mechanism specific status code. @var{cred_handle}: (gss_cred_id_t, read) A handle that refers to the target credential. Specify GSS_C_NO_CREDENTIAL to inquire about the default initiator principal. @var{name}: (gss_name_t, modify, optional) The name whose identity the credential asserts. Storage associated with this name should be freed by the application after use with a call to gss_release_name(). Specify NULL if not required. @var{lifetime}: (Integer, modify, optional) The number of seconds for which the credential will remain valid. If the credential has expired, this parameter will be set to zero. If the implementation does not support credential expiration, the value GSS_C_INDEFINITE will be returned. Specify NULL if not required. @var{cred_usage}: (gss_cred_usage_t, modify, optional) How the credential may be used. One of the following: GSS_C_INITIATE, GSS_C_ACCEPT, GSS_C_BOTH. Specify NULL if not required. @var{mechanisms}: (gss_OID_set, modify, optional) Set of mechanisms supported by the credential. Storage associated with this OID set must be freed by the application after use with a call to gss_release_oid_set(). Specify NULL if not required. Obtains information about a credential. Return value: @code{GSS_S_COMPLETE}: Successful completion. @code{GSS_S_NO_CRED}: The referenced credentials could not be accessed. @code{GSS_S_DEFECTIVE_CREDENTIAL}: The referenced credentials were invalid. @code{GSS_S_CREDENTIALS_EXPIRED}: The referenced credentials have expired. If the lifetime parameter was not passed as NULL, it will be set to 0. @end deftypefun gss-1.0.3/doc/texi/gss_init_sec_context.texi0000644000000000000000000003502012415507672016035 00000000000000@subheading gss_init_sec_context @anchor{gss_init_sec_context} @deftypefun {OM_uint32} {gss_init_sec_context} (OM_uint32 * @var{minor_status}, const gss_cred_id_t @var{initiator_cred_handle}, gss_ctx_id_t * @var{context_handle}, const gss_name_t @var{target_name}, const gss_OID @var{mech_type}, OM_uint32 @var{req_flags}, OM_uint32 @var{time_req}, const gss_channel_bindings_t @var{input_chan_bindings}, const gss_buffer_t @var{input_token}, gss_OID * @var{actual_mech_type}, gss_buffer_t @var{output_token}, OM_uint32 * @var{ret_flags}, OM_uint32 * @var{time_rec}) @var{minor_status}: (integer, modify) Mechanism specific status code. @var{initiator_cred_handle}: (gss_cred_id_t, read, optional) Handle for credentials claimed. Supply GSS_C_NO_CREDENTIAL to act as a default initiator principal. If no default initiator is defined, the function will return GSS_S_NO_CRED. @var{context_handle}: (gss_ctx_id_t, read/modify) Context handle for new context. Supply GSS_C_NO_CONTEXT for first call; use value returned by first call in continuation calls. Resources associated with this context-handle must be released by the application after use with a call to gss_delete_sec_context(). @var{target_name}: (gss_name_t, read) Name of target. @var{mech_type}: (OID, read, optional) Object ID of desired mechanism. Supply GSS_C_NO_OID to obtain an implementation specific default. @var{req_flags}: (bit-mask, read) Contains various independent flags, each of which requests that the context support a specific service option. Symbolic names are provided for each flag, and the symbolic names corresponding to the required flags should be logically-ORed together to form the bit-mask value. See below for the flags. @var{time_req}: (Integer, read, optional) Desired number of seconds for which context should remain valid. Supply 0 to request a default validity period. @var{input_chan_bindings}: (channel bindings, read, optional) Application-specified bindings. Allows application to securely bind channel identification information to the security context. Specify GSS_C_NO_CHANNEL_BINDINGS if channel bindings are not used. @var{input_token}: (buffer, opaque, read, optional) Token received from peer application. Supply GSS_C_NO_BUFFER, or a pointer to a buffer containing the value GSS_C_EMPTY_BUFFER on initial call. @var{actual_mech_type}: (OID, modify, optional) Actual mechanism used. The OID returned via this parameter will be a pointer to static storage that should be treated as read-only; In particular the application should not attempt to free it. Specify NULL if not required. @var{output_token}: (buffer, opaque, modify) Token to be sent to peer application. If the length field of the returned buffer is zero, no token need be sent to the peer application. Storage associated with this buffer must be freed by the application after use with a call to gss_release_buffer(). @var{ret_flags}: (bit-mask, modify, optional) Contains various independent flags, each of which indicates that the context supports a specific service option. Specify NULL if not required. Symbolic names are provided for each flag, and the symbolic names corresponding to the required flags should be logically-ANDed with the ret_flags value to test whether a given option is supported by the context. See below for the flags. @var{time_rec}: (Integer, modify, optional) Number of seconds for which the context will remain valid. If the implementation does not support context expiration, the value GSS_C_INDEFINITE will be returned. Specify NULL if not required. Initiates the establishment of a security context between the application and a remote peer. Initially, the input_token parameter should be specified either as GSS_C_NO_BUFFER, or as a pointer to a gss_buffer_desc object whose length field contains the value zero. The routine may return a output_token which should be transferred to the peer application, where the peer application will present it to gss_accept_sec_context. If no token need be sent, gss_init_sec_context will indicate this by setting the length field of the output_token argument to zero. To complete the context establishment, one or more reply tokens may be required from the peer application; if so, gss_init_sec_context will return a status containing the supplementary information bit GSS_S_CONTINUE_NEEDED. In this case, gss_init_sec_context should be called again when the reply token is received from the peer application, passing the reply token to gss_init_sec_context via the input_token parameters. Portable applications should be constructed to use the token length and return status to determine whether a token needs to be sent or waited for. Thus a typical portable caller should always invoke gss_init_sec_context within a loop: @example int context_established = 0; gss_ctx_id_t context_hdl = GSS_C_NO_CONTEXT; ... input_token->length = 0; while (!context_established) @{ maj_stat = gss_init_sec_context(&min_stat, cred_hdl, &context_hdl, target_name, desired_mech, desired_services, desired_time, input_bindings, input_token, &actual_mech, output_token, &actual_services, &actual_time); if (GSS_ERROR(maj_stat)) @{ report_error(maj_stat, min_stat); @}; if (output_token->length != 0) @{ send_token_to_peer(output_token); gss_release_buffer(&min_stat, output_token) @}; if (GSS_ERROR(maj_stat)) @{ if (context_hdl != GSS_C_NO_CONTEXT) gss_delete_sec_context(&min_stat, &context_hdl, GSS_C_NO_BUFFER); break; @}; if (maj_stat & GSS_S_CONTINUE_NEEDED) @{ receive_token_from_peer(input_token); @} else @{ context_established = 1; @}; @}; @end example Whenever the routine returns a major status that includes the value GSS_S_CONTINUE_NEEDED, the context is not fully established and the following restrictions apply to the output parameters: @itemize @bullet @item The value returned via the time_rec parameter is undefined unless the accompanying ret_flags parameter contains the bit GSS_C_PROT_READY_FLAG, indicating that per-message services may be applied in advance of a successful completion status, the value returned via the actual_mech_type parameter is undefined until the routine returns a major status value of GSS_S_COMPLETE. @item The values of the GSS_C_DELEG_FLAG, GSS_C_MUTUAL_FLAG, GSS_C_REPLAY_FLAG, GSS_C_SEQUENCE_FLAG, GSS_C_CONF_FLAG, GSS_C_INTEG_FLAG and GSS_C_ANON_FLAG bits returned via the ret_flags parameter should contain the values that the implementation expects would be valid if context establishment were to succeed. In particular, if the application has requested a service such as delegation or anonymous authentication via the req_flags argument, and such a service is unavailable from the underlying mechanism, gss_init_sec_context should generate a token that will not provide the service, and indicate via the ret_flags argument that the service will not be supported. The application may choose to abort the context establishment by calling gss_delete_sec_context (if it cannot continue in the absence of the service), or it may choose to transmit the token and continue context establishment (if the service was merely desired but not mandatory). @item The values of the GSS_C_PROT_READY_FLAG and GSS_C_TRANS_FLAG bits within ret_flags should indicate the actual state at the time gss_init_sec_context returns, whether or not the context is fully established. @item GSS-API implementations that support per-message protection are encouraged to set the GSS_C_PROT_READY_FLAG in the final ret_flags returned to a caller (i.e. when accompanied by a GSS_S_COMPLETE status code). However, applications should not rely on this behavior as the flag was not defined in Version 1 of the GSS-API. Instead, applications should determine what per-message services are available after a successful context establishment according to the GSS_C_INTEG_FLAG and GSS_C_CONF_FLAG values. @item All other bits within the ret_flags argument should be set to zero. @end itemize If the initial call of gss_init_sec_context() fails, the implementation should not create a context object, and should leave the value of the context_handle parameter set to GSS_C_NO_CONTEXT to indicate this. In the event of a failure on a subsequent call, the implementation is permitted to delete the "half-built" security context (in which case it should set the context_handle parameter to GSS_C_NO_CONTEXT), but the preferred behavior is to leave the security context untouched for the application to delete (using gss_delete_sec_context). During context establishment, the informational status bits GSS_S_OLD_TOKEN and GSS_S_DUPLICATE_TOKEN indicate fatal errors, and GSS-API mechanisms should always return them in association with a routine error of GSS_S_FAILURE. This requirement for pairing did not exist in version 1 of the GSS-API specification, so applications that wish to run over version 1 implementations must special-case these codes. The @code{req_flags} values: @table @asis @item @code{GSS_C_DELEG_FLAG} @itemize @bullet @item True - Delegate credentials to remote peer. @item False - Don't delegate. @end itemize @item @code{GSS_C_MUTUAL_FLAG} @itemize @bullet @item True - Request that remote peer authenticate itself. @item False - Authenticate self to remote peer only. @end itemize @item @code{GSS_C_REPLAY_FLAG} @itemize @bullet @item True - Enable replay detection for messages protected with gss_wrap or gss_get_mic. @item False - Don't attempt to detect replayed messages. @end itemize @item @code{GSS_C_SEQUENCE_FLAG} @itemize @bullet @item True - Enable detection of out-of-sequence protected messages. @item False - Don't attempt to detect out-of-sequence messages. @end itemize @item @code{GSS_C_CONF_FLAG} @itemize @bullet @item True - Request that confidentiality service be made available (via gss_wrap). @item False - No per-message confidentiality service is required. @end itemize @item @code{GSS_C_INTEG_FLAG} @itemize @bullet @item True - Request that integrity service be made available (via gss_wrap or gss_get_mic). @item False - No per-message integrity service is required. @end itemize @item @code{GSS_C_ANON_FLAG} @itemize @bullet @item True - Do not reveal the initiator's identity to the acceptor. @item False - Authenticate normally. @end itemize @end table The @code{ret_flags} values: @table @asis @item @code{GSS_C_DELEG_FLAG} @itemize @bullet @item True - Credentials were delegated to the remote peer. @item False - No credentials were delegated. @end itemize @item @code{GSS_C_MUTUAL_FLAG} @itemize @bullet @item True - The remote peer has authenticated itself. @item False - Remote peer has not authenticated itself. @end itemize @item @code{GSS_C_REPLAY_FLAG} @itemize @bullet @item True - replay of protected messages will be detected. @item False - replayed messages will not be detected. @end itemize @item @code{GSS_C_SEQUENCE_FLAG} @itemize @bullet @item True - out-of-sequence protected messages will be detected. @item False - out-of-sequence messages will not be detected. @end itemize @item @code{GSS_C_CONF_FLAG} @itemize @bullet @item True - Confidentiality service may be invoked by calling gss_wrap routine. @item False - No confidentiality service (via gss_wrap) available. gss_wrap will provide message encapsulation, data-origin authentication and integrity services only. @end itemize @item @code{GSS_C_INTEG_FLAG} @itemize @bullet @item True - Integrity service may be invoked by calling either gss_get_mic or gss_wrap routines. @item False - Per-message integrity service unavailable. @end itemize @item @code{GSS_C_ANON_FLAG} @itemize @bullet @item True - The initiator's identity has not been revealed, and will not be revealed if any emitted token is passed to the acceptor. @item False - The initiator's identity has been or will be authenticated normally. @end itemize @item @code{GSS_C_PROT_READY_FLAG} @itemize @bullet @item True - Protection services (as specified by the states of the GSS_C_CONF_FLAG and GSS_C_INTEG_FLAG) are available for use if the accompanying major status return value is either GSS_S_COMPLETE or GSS_S_CONTINUE_NEEDED. @item False - Protection services (as specified by the states of the GSS_C_CONF_FLAG and GSS_C_INTEG_FLAG) are available only if the accompanying major status return value is GSS_S_COMPLETE. @end itemize @item @code{GSS_C_TRANS_FLAG} @itemize @bullet @item True - The resultant security context may be transferred to other processes via a call to gss_export_sec_context(). @item False - The security context is not transferable. @end itemize @end table All other bits should be set to zero. Return value: @code{GSS_S_COMPLETE}: Successful completion. @code{GSS_S_CONTINUE_NEEDED}: Indicates that a token from the peer application is required to complete the context, and that gss_init_sec_context must be called again with that token. @code{GSS_S_DEFECTIVE_TOKEN}: Indicates that consistency checks performed on the input_token failed. @code{GSS_S_DEFECTIVE_CREDENTIAL}: Indicates that consistency checks performed on the credential failed. @code{GSS_S_NO_CRED}: The supplied credentials were not valid for context initiation, or the credential handle did not reference any credentials. @code{GSS_S_CREDENTIALS_EXPIRED}: The referenced credentials have expired. @code{GSS_S_BAD_BINDINGS}: The input_token contains different channel bindings to those specified via the input_chan_bindings parameter. @code{GSS_S_BAD_SIG}: The input_token contains an invalid MIC, or a MIC that could not be verified. @code{GSS_S_OLD_TOKEN}: The input_token was too old. This is a fatal error during context establishment. @code{GSS_S_DUPLICATE_TOKEN}: The input_token is valid, but is a duplicate of a token already processed. This is a fatal error during context establishment. @code{GSS_S_NO_CONTEXT}: Indicates that the supplied context handle did not refer to a valid context. @code{GSS_S_BAD_NAMETYPE}: The provided target_name parameter contained an invalid or unsupported type of name. @code{GSS_S_BAD_NAME}: The provided target_name parameter was ill-formed. @code{GSS_S_BAD_MECH}: The specified mechanism is not supported by the provided credential, or is unrecognized by the implementation. @end deftypefun gss-1.0.3/doc/texi/gss_inquire_cred_by_mech.texi0000644000000000000000000000501412415507704016627 00000000000000@subheading gss_inquire_cred_by_mech @anchor{gss_inquire_cred_by_mech} @deftypefun {OM_uint32} {gss_inquire_cred_by_mech} (OM_uint32 * @var{minor_status}, const gss_cred_id_t @var{cred_handle}, const gss_OID @var{mech_type}, gss_name_t * @var{name}, OM_uint32 * @var{initiator_lifetime}, OM_uint32 * @var{acceptor_lifetime}, gss_cred_usage_t * @var{cred_usage}) @var{minor_status}: (Integer, modify) Mechanism specific status code. @var{cred_handle}: (gss_cred_id_t, read) A handle that refers to the target credential. Specify GSS_C_NO_CREDENTIAL to inquire about the default initiator principal. @var{mech_type}: (gss_OID, read) The mechanism for which information should be returned. @var{name}: (gss_name_t, modify, optional) The name whose identity the credential asserts. Storage associated with this name must be freed by the application after use with a call to gss_release_name(). Specify NULL if not required. @var{initiator_lifetime}: (Integer, modify, optional) The number of seconds for which the credential will remain capable of initiating security contexts under the specified mechanism. If the credential can no longer be used to initiate contexts, or if the credential usage for this mechanism is GSS_C_ACCEPT, this parameter will be set to zero. If the implementation does not support expiration of initiator credentials, the value GSS_C_INDEFINITE will be returned. Specify NULL if not required. @var{acceptor_lifetime}: (Integer, modify, optional) The number of seconds for which the credential will remain capable of accepting security contexts under the specified mechanism. If the credential can no longer be used to accept contexts, or if the credential usage for this mechanism is GSS_C_INITIATE, this parameter will be set to zero. If the implementation does not support expiration of acceptor credentials, the value GSS_C_INDEFINITE will be returned. Specify NULL if not required. @var{cred_usage}: (gss_cred_usage_t, modify, optional) How the credential may be used with the specified mechanism. One of the following: GSS_C_INITIATE, GSS_C_ACCEPT, GSS_C_BOTH. Specify NULL if not required. Obtains per-mechanism information about a credential. Return value: @code{GSS_S_COMPLETE}: Successful completion. @code{GSS_S_NO_CRED}: The referenced credentials could not be accessed. @code{GSS_S_DEFECTIVE_CREDENTIAL}: The referenced credentials were invalid. @code{GSS_S_CREDENTIALS_EXPIRED}: The referenced credentials have expired. If the lifetime parameter was not passed as NULL, it will be set to 0. @end deftypefun gss-1.0.3/doc/texi/gss_encapsulate_token.texi0000644000000000000000000000214112415507664016177 00000000000000@subheading gss_encapsulate_token @anchor{gss_encapsulate_token} @deftypefun {extern OM_uint32} {gss_encapsulate_token} (gss_const_buffer_t @var{input_token}, gss_const_OID @var{token_oid}, gss_buffer_t @var{output_token}) @var{input_token}: (buffer, opaque, read) Buffer with GSS-API context token data. @var{token_oid}: (Object ID, read) Object identifier of token. @var{output_token}: (buffer, opaque, modify) Encapsulated token data; caller must release with gss_release_buffer(). Add the mechanism-independent token header to GSS-API context token data. This is used for the initial token of a GSS-API context establishment sequence. It incorporates an identifier of the mechanism type to be used on that context, and enables tokens to be interpreted unambiguously at GSS-API peers. See further section 3.1 of RFC 2743. This function is standardized in RFC 6339. Returns: @code{GSS_S_COMPLETE}: Indicates successful completion, and that output parameters holds correct information. @code{GSS_S_FAILURE}: Indicates that encapsulation failed for reasons unspecified at the GSS-API level. @end deftypefun gss-1.0.3/doc/texi/gss_export_name.texi0000644000000000000000000000233512415507723015015 00000000000000@subheading gss_export_name @anchor{gss_export_name} @deftypefun {OM_uint32} {gss_export_name} (OM_uint32 * @var{minor_status}, const gss_name_t @var{input_name}, gss_buffer_t @var{exported_name}) @var{minor_status}: (Integer, modify) Mechanism specific status code. @var{input_name}: (gss_name_t, read) The MN to be exported. @var{exported_name}: (gss_buffer_t, octet-string, modify) The canonical contiguous string form of @@input_name. Storage associated with this string must freed by the application after use with gss_release_buffer(). To produce a canonical contiguous string representation of a mechanism name (MN), suitable for direct comparison (e.g. with memcmp) for use in authorization functions (e.g. matching entries in an access-control list). The @@input_name parameter must specify a valid MN (i.e. an internal name generated by gss_accept_sec_context() or by gss_canonicalize_name()). Return value: @code{GSS_S_COMPLETE}: Successful completion. @code{GSS_S_NAME_NOT_MN}: The provided internal name was not a mechanism name. @code{GSS_S_BAD_NAME}: The provided internal name was ill-formed. @code{GSS_S_BAD_NAMETYPE}: The internal name was of a type not supported by the GSS-API implementation. @end deftypefun gss-1.0.3/doc/texi/gss_import_name.texi0000644000000000000000000000322612415507721015004 00000000000000@subheading gss_import_name @anchor{gss_import_name} @deftypefun {OM_uint32} {gss_import_name} (OM_uint32 * @var{minor_status}, const gss_buffer_t @var{input_name_buffer}, const gss_OID @var{input_name_type}, gss_name_t * @var{output_name}) @var{minor_status}: (Integer, modify) Mechanism specific status code. @var{input_name_buffer}: (buffer, octet-string, read) Buffer containing contiguous string name to convert. @var{input_name_type}: (Object ID, read, optional) Object ID specifying type of printable name. Applications may specify either GSS_C_NO_OID to use a mechanism-specific default printable syntax, or an OID recognized by the GSS-API implementation to name a specific namespace. @var{output_name}: (gss_name_t, modify) Returned name in internal form. Storage associated with this name must be freed by the application after use with a call to gss_release_name(). Convert a contiguous string name to internal form. In general, the internal name returned (via the @@output_name parameter) will not be an MN; the exception to this is if the @@input_name_type indicates that the contiguous string provided via the @@input_name_buffer parameter is of type GSS_C_NT_EXPORT_NAME, in which case the returned internal name will be an MN for the mechanism that exported the name. Return value: @code{GSS_S_COMPLETE}: Successful completion. @code{GSS_S_BAD_NAMETYPE}: The input_name_type was unrecognized. @code{GSS_S_BAD_NAME}: The input_name parameter could not be interpreted as a name of the specified type. @code{GSS_S_BAD_MECH}: The input name-type was GSS_C_NT_EXPORT_NAME, but the mechanism contained within the input-name is not supported. @end deftypefun gss-1.0.3/doc/texi/gss_wrap.texi0000644000000000000000000000423012415507715013442 00000000000000@subheading gss_wrap @anchor{gss_wrap} @deftypefun {OM_uint32} {gss_wrap} (OM_uint32 * @var{minor_status}, const gss_ctx_id_t @var{context_handle}, int @var{conf_req_flag}, gss_qop_t @var{qop_req}, const gss_buffer_t @var{input_message_buffer}, int * @var{conf_state}, gss_buffer_t @var{output_message_buffer}) @var{minor_status}: (Integer, modify) Mechanism specific status code. @var{context_handle}: (gss_ctx_id_t, read) Identifies the context on which the message will be sent. @var{conf_req_flag}: (boolean, read) Non-zero - Both confidentiality and integrity services are requested. Zero - Only integrity service is requested. @var{qop_req}: (gss_qop_t, read, optional) Specifies required quality of protection. A mechanism-specific default may be requested by setting qop_req to GSS_C_QOP_DEFAULT. If an unsupported protection strength is requested, gss_wrap will return a major_status of GSS_S_BAD_QOP. @var{input_message_buffer}: (buffer, opaque, read) Message to be protected. @var{conf_state}: (boolean, modify, optional) Non-zero - Confidentiality, data origin authentication and integrity services have been applied. Zero - Integrity and data origin services only has been applied. Specify NULL if not required. @var{output_message_buffer}: (buffer, opaque, modify) Buffer to receive protected message. Storage associated with this message must be freed by the application after use with a call to gss_release_buffer(). Attaches a cryptographic MIC and optionally encrypts the specified input_message. The output_message contains both the MIC and the message. The qop_req parameter allows a choice between several cryptographic algorithms, if supported by the chosen mechanism. Since some application-level protocols may wish to use tokens emitted by gss_wrap() to provide "secure framing", implementations must support the wrapping of zero-length messages. Return value: @code{GSS_S_COMPLETE}: Successful completion. @code{GSS_S_CONTEXT_EXPIRED}: The context has already expired. @code{GSS_S_NO_CONTEXT}: The context_handle parameter did not identify a valid context. @code{GSS_S_BAD_QOP}: The specified QOP is not supported by the mechanism. @end deftypefun gss-1.0.3/doc/texi/gss_decapsulate_token.texi0000644000000000000000000000221212415507664016164 00000000000000@subheading gss_decapsulate_token @anchor{gss_decapsulate_token} @deftypefun {OM_uint32} {gss_decapsulate_token} (gss_const_buffer_t @var{input_token}, gss_const_OID @var{token_oid}, gss_buffer_t @var{output_token}) @var{input_token}: (buffer, opaque, read) Buffer with GSS-API context token. @var{token_oid}: (Object ID, read) Expected object identifier of token. @var{output_token}: (buffer, opaque, modify) Decapsulated token data; caller must release with gss_release_buffer(). Remove the mechanism-independent token header from an initial GSS-API context token. Unwrap a buffer in the mechanism-independent token format. This is the reverse of gss_encapsulate_token(). The translation is loss-less, all data is preserved as is. This function is standardized in RFC 6339. Return value: @code{GSS_S_COMPLETE}: Indicates successful completion, and that output parameters holds correct information. @code{GSS_S_DEFECTIVE_TOKEN}: Means that the token failed consistency checks (e.g., OID mismatch or ASN.1 DER length errors). @code{GSS_S_FAILURE}: Indicates that decapsulation failed for reasons unspecified at the GSS-API level. @end deftypefun gss-1.0.3/doc/texi/gss_check_version.texi0000644000000000000000000000076412415507727015326 00000000000000@subheading gss_check_version @anchor{gss_check_version} @deftypefun {const char *} {gss_check_version} (const char * @var{req_version}) @var{req_version}: version string to compare with, or NULL Check that the version of the library is at minimum the one given as a string in @@req_version. Return value: The actual version string of the library; NULL if the condition is not met. If NULL is passed to this function no check is done and only the version string is returned. @end deftypefun gss-1.0.3/doc/texi/gss_process_context_token.texi0000644000000000000000000000316312415507674017123 00000000000000@subheading gss_process_context_token @anchor{gss_process_context_token} @deftypefun {OM_uint32} {gss_process_context_token} (OM_uint32 * @var{minor_status}, const gss_ctx_id_t @var{context_handle}, const gss_buffer_t @var{token_buffer}) @var{minor_status}: (Integer, modify) Implementation specific status code. @var{context_handle}: (gss_ctx_id_t, read) Context handle of context on which token is to be processed @var{token_buffer}: (buffer, opaque, read) Token to process. Provides a way to pass an asynchronous token to the security service. Most context-level tokens are emitted and processed synchronously by gss_init_sec_context and gss_accept_sec_context, and the application is informed as to whether further tokens are expected by the GSS_C_CONTINUE_NEEDED major status bit. Occasionally, a mechanism may need to emit a context-level token at a point when the peer entity is not expecting a token. For example, the initiator's final call to gss_init_sec_context may emit a token and return a status of GSS_S_COMPLETE, but the acceptor's call to gss_accept_sec_context may fail. The acceptor's mechanism may wish to send a token containing an error indication to the initiator, but the initiator is not expecting a token at this point, believing that the context is fully established. Gss_process_context_token provides a way to pass such a token to the mechanism at any time. Return value: @code{GSS_S_COMPLETE}: Successful completion. @code{GSS_S_DEFECTIVE_TOKEN}: Indicates that consistency checks performed on the token failed. @code{GSS_S_NO_CONTEXT}: The context_handle did not refer to a valid context. @end deftypefun gss-1.0.3/doc/texi/obsolete.c.texi0000644000000000000000000000000012415507724013641 00000000000000gss-1.0.3/doc/texi/context.c.texi0000644000000000000000000012621512415507671013533 00000000000000@subheading gss_init_sec_context @anchor{gss_init_sec_context} @deftypefun {OM_uint32} {gss_init_sec_context} (OM_uint32 * @var{minor_status}, const gss_cred_id_t @var{initiator_cred_handle}, gss_ctx_id_t * @var{context_handle}, const gss_name_t @var{target_name}, const gss_OID @var{mech_type}, OM_uint32 @var{req_flags}, OM_uint32 @var{time_req}, const gss_channel_bindings_t @var{input_chan_bindings}, const gss_buffer_t @var{input_token}, gss_OID * @var{actual_mech_type}, gss_buffer_t @var{output_token}, OM_uint32 * @var{ret_flags}, OM_uint32 * @var{time_rec}) @var{minor_status}: (integer, modify) Mechanism specific status code. @var{initiator_cred_handle}: (gss_cred_id_t, read, optional) Handle for credentials claimed. Supply GSS_C_NO_CREDENTIAL to act as a default initiator principal. If no default initiator is defined, the function will return GSS_S_NO_CRED. @var{context_handle}: (gss_ctx_id_t, read/modify) Context handle for new context. Supply GSS_C_NO_CONTEXT for first call; use value returned by first call in continuation calls. Resources associated with this context-handle must be released by the application after use with a call to gss_delete_sec_context(). @var{target_name}: (gss_name_t, read) Name of target. @var{mech_type}: (OID, read, optional) Object ID of desired mechanism. Supply GSS_C_NO_OID to obtain an implementation specific default. @var{req_flags}: (bit-mask, read) Contains various independent flags, each of which requests that the context support a specific service option. Symbolic names are provided for each flag, and the symbolic names corresponding to the required flags should be logically-ORed together to form the bit-mask value. See below for the flags. @var{time_req}: (Integer, read, optional) Desired number of seconds for which context should remain valid. Supply 0 to request a default validity period. @var{input_chan_bindings}: (channel bindings, read, optional) Application-specified bindings. Allows application to securely bind channel identification information to the security context. Specify GSS_C_NO_CHANNEL_BINDINGS if channel bindings are not used. @var{input_token}: (buffer, opaque, read, optional) Token received from peer application. Supply GSS_C_NO_BUFFER, or a pointer to a buffer containing the value GSS_C_EMPTY_BUFFER on initial call. @var{actual_mech_type}: (OID, modify, optional) Actual mechanism used. The OID returned via this parameter will be a pointer to static storage that should be treated as read-only; In particular the application should not attempt to free it. Specify NULL if not required. @var{output_token}: (buffer, opaque, modify) Token to be sent to peer application. If the length field of the returned buffer is zero, no token need be sent to the peer application. Storage associated with this buffer must be freed by the application after use with a call to gss_release_buffer(). @var{ret_flags}: (bit-mask, modify, optional) Contains various independent flags, each of which indicates that the context supports a specific service option. Specify NULL if not required. Symbolic names are provided for each flag, and the symbolic names corresponding to the required flags should be logically-ANDed with the ret_flags value to test whether a given option is supported by the context. See below for the flags. @var{time_rec}: (Integer, modify, optional) Number of seconds for which the context will remain valid. If the implementation does not support context expiration, the value GSS_C_INDEFINITE will be returned. Specify NULL if not required. Initiates the establishment of a security context between the application and a remote peer. Initially, the input_token parameter should be specified either as GSS_C_NO_BUFFER, or as a pointer to a gss_buffer_desc object whose length field contains the value zero. The routine may return a output_token which should be transferred to the peer application, where the peer application will present it to gss_accept_sec_context. If no token need be sent, gss_init_sec_context will indicate this by setting the length field of the output_token argument to zero. To complete the context establishment, one or more reply tokens may be required from the peer application; if so, gss_init_sec_context will return a status containing the supplementary information bit GSS_S_CONTINUE_NEEDED. In this case, gss_init_sec_context should be called again when the reply token is received from the peer application, passing the reply token to gss_init_sec_context via the input_token parameters. Portable applications should be constructed to use the token length and return status to determine whether a token needs to be sent or waited for. Thus a typical portable caller should always invoke gss_init_sec_context within a loop: @example int context_established = 0; gss_ctx_id_t context_hdl = GSS_C_NO_CONTEXT; ... input_token->length = 0; while (!context_established) @{ maj_stat = gss_init_sec_context(&min_stat, cred_hdl, &context_hdl, target_name, desired_mech, desired_services, desired_time, input_bindings, input_token, &actual_mech, output_token, &actual_services, &actual_time); if (GSS_ERROR(maj_stat)) @{ report_error(maj_stat, min_stat); @}; if (output_token->length != 0) @{ send_token_to_peer(output_token); gss_release_buffer(&min_stat, output_token) @}; if (GSS_ERROR(maj_stat)) @{ if (context_hdl != GSS_C_NO_CONTEXT) gss_delete_sec_context(&min_stat, &context_hdl, GSS_C_NO_BUFFER); break; @}; if (maj_stat & GSS_S_CONTINUE_NEEDED) @{ receive_token_from_peer(input_token); @} else @{ context_established = 1; @}; @}; @end example Whenever the routine returns a major status that includes the value GSS_S_CONTINUE_NEEDED, the context is not fully established and the following restrictions apply to the output parameters: @itemize @bullet @item The value returned via the time_rec parameter is undefined unless the accompanying ret_flags parameter contains the bit GSS_C_PROT_READY_FLAG, indicating that per-message services may be applied in advance of a successful completion status, the value returned via the actual_mech_type parameter is undefined until the routine returns a major status value of GSS_S_COMPLETE. @item The values of the GSS_C_DELEG_FLAG, GSS_C_MUTUAL_FLAG, GSS_C_REPLAY_FLAG, GSS_C_SEQUENCE_FLAG, GSS_C_CONF_FLAG, GSS_C_INTEG_FLAG and GSS_C_ANON_FLAG bits returned via the ret_flags parameter should contain the values that the implementation expects would be valid if context establishment were to succeed. In particular, if the application has requested a service such as delegation or anonymous authentication via the req_flags argument, and such a service is unavailable from the underlying mechanism, gss_init_sec_context should generate a token that will not provide the service, and indicate via the ret_flags argument that the service will not be supported. The application may choose to abort the context establishment by calling gss_delete_sec_context (if it cannot continue in the absence of the service), or it may choose to transmit the token and continue context establishment (if the service was merely desired but not mandatory). @item The values of the GSS_C_PROT_READY_FLAG and GSS_C_TRANS_FLAG bits within ret_flags should indicate the actual state at the time gss_init_sec_context returns, whether or not the context is fully established. @item GSS-API implementations that support per-message protection are encouraged to set the GSS_C_PROT_READY_FLAG in the final ret_flags returned to a caller (i.e. when accompanied by a GSS_S_COMPLETE status code). However, applications should not rely on this behavior as the flag was not defined in Version 1 of the GSS-API. Instead, applications should determine what per-message services are available after a successful context establishment according to the GSS_C_INTEG_FLAG and GSS_C_CONF_FLAG values. @item All other bits within the ret_flags argument should be set to zero. @end itemize If the initial call of gss_init_sec_context() fails, the implementation should not create a context object, and should leave the value of the context_handle parameter set to GSS_C_NO_CONTEXT to indicate this. In the event of a failure on a subsequent call, the implementation is permitted to delete the "half-built" security context (in which case it should set the context_handle parameter to GSS_C_NO_CONTEXT), but the preferred behavior is to leave the security context untouched for the application to delete (using gss_delete_sec_context). During context establishment, the informational status bits GSS_S_OLD_TOKEN and GSS_S_DUPLICATE_TOKEN indicate fatal errors, and GSS-API mechanisms should always return them in association with a routine error of GSS_S_FAILURE. This requirement for pairing did not exist in version 1 of the GSS-API specification, so applications that wish to run over version 1 implementations must special-case these codes. The @code{req_flags} values: @table @asis @item @code{GSS_C_DELEG_FLAG} @itemize @bullet @item True - Delegate credentials to remote peer. @item False - Don't delegate. @end itemize @item @code{GSS_C_MUTUAL_FLAG} @itemize @bullet @item True - Request that remote peer authenticate itself. @item False - Authenticate self to remote peer only. @end itemize @item @code{GSS_C_REPLAY_FLAG} @itemize @bullet @item True - Enable replay detection for messages protected with gss_wrap or gss_get_mic. @item False - Don't attempt to detect replayed messages. @end itemize @item @code{GSS_C_SEQUENCE_FLAG} @itemize @bullet @item True - Enable detection of out-of-sequence protected messages. @item False - Don't attempt to detect out-of-sequence messages. @end itemize @item @code{GSS_C_CONF_FLAG} @itemize @bullet @item True - Request that confidentiality service be made available (via gss_wrap). @item False - No per-message confidentiality service is required. @end itemize @item @code{GSS_C_INTEG_FLAG} @itemize @bullet @item True - Request that integrity service be made available (via gss_wrap or gss_get_mic). @item False - No per-message integrity service is required. @end itemize @item @code{GSS_C_ANON_FLAG} @itemize @bullet @item True - Do not reveal the initiator's identity to the acceptor. @item False - Authenticate normally. @end itemize @end table The @code{ret_flags} values: @table @asis @item @code{GSS_C_DELEG_FLAG} @itemize @bullet @item True - Credentials were delegated to the remote peer. @item False - No credentials were delegated. @end itemize @item @code{GSS_C_MUTUAL_FLAG} @itemize @bullet @item True - The remote peer has authenticated itself. @item False - Remote peer has not authenticated itself. @end itemize @item @code{GSS_C_REPLAY_FLAG} @itemize @bullet @item True - replay of protected messages will be detected. @item False - replayed messages will not be detected. @end itemize @item @code{GSS_C_SEQUENCE_FLAG} @itemize @bullet @item True - out-of-sequence protected messages will be detected. @item False - out-of-sequence messages will not be detected. @end itemize @item @code{GSS_C_CONF_FLAG} @itemize @bullet @item True - Confidentiality service may be invoked by calling gss_wrap routine. @item False - No confidentiality service (via gss_wrap) available. gss_wrap will provide message encapsulation, data-origin authentication and integrity services only. @end itemize @item @code{GSS_C_INTEG_FLAG} @itemize @bullet @item True - Integrity service may be invoked by calling either gss_get_mic or gss_wrap routines. @item False - Per-message integrity service unavailable. @end itemize @item @code{GSS_C_ANON_FLAG} @itemize @bullet @item True - The initiator's identity has not been revealed, and will not be revealed if any emitted token is passed to the acceptor. @item False - The initiator's identity has been or will be authenticated normally. @end itemize @item @code{GSS_C_PROT_READY_FLAG} @itemize @bullet @item True - Protection services (as specified by the states of the GSS_C_CONF_FLAG and GSS_C_INTEG_FLAG) are available for use if the accompanying major status return value is either GSS_S_COMPLETE or GSS_S_CONTINUE_NEEDED. @item False - Protection services (as specified by the states of the GSS_C_CONF_FLAG and GSS_C_INTEG_FLAG) are available only if the accompanying major status return value is GSS_S_COMPLETE. @end itemize @item @code{GSS_C_TRANS_FLAG} @itemize @bullet @item True - The resultant security context may be transferred to other processes via a call to gss_export_sec_context(). @item False - The security context is not transferable. @end itemize @end table All other bits should be set to zero. Return value: @code{GSS_S_COMPLETE}: Successful completion. @code{GSS_S_CONTINUE_NEEDED}: Indicates that a token from the peer application is required to complete the context, and that gss_init_sec_context must be called again with that token. @code{GSS_S_DEFECTIVE_TOKEN}: Indicates that consistency checks performed on the input_token failed. @code{GSS_S_DEFECTIVE_CREDENTIAL}: Indicates that consistency checks performed on the credential failed. @code{GSS_S_NO_CRED}: The supplied credentials were not valid for context initiation, or the credential handle did not reference any credentials. @code{GSS_S_CREDENTIALS_EXPIRED}: The referenced credentials have expired. @code{GSS_S_BAD_BINDINGS}: The input_token contains different channel bindings to those specified via the input_chan_bindings parameter. @code{GSS_S_BAD_SIG}: The input_token contains an invalid MIC, or a MIC that could not be verified. @code{GSS_S_OLD_TOKEN}: The input_token was too old. This is a fatal error during context establishment. @code{GSS_S_DUPLICATE_TOKEN}: The input_token is valid, but is a duplicate of a token already processed. This is a fatal error during context establishment. @code{GSS_S_NO_CONTEXT}: Indicates that the supplied context handle did not refer to a valid context. @code{GSS_S_BAD_NAMETYPE}: The provided target_name parameter contained an invalid or unsupported type of name. @code{GSS_S_BAD_NAME}: The provided target_name parameter was ill-formed. @code{GSS_S_BAD_MECH}: The specified mechanism is not supported by the provided credential, or is unrecognized by the implementation. @end deftypefun @subheading gss_accept_sec_context @anchor{gss_accept_sec_context} @deftypefun {OM_uint32} {gss_accept_sec_context} (OM_uint32 * @var{minor_status}, gss_ctx_id_t * @var{context_handle}, const gss_cred_id_t @var{acceptor_cred_handle}, const gss_buffer_t @var{input_token_buffer}, const gss_channel_bindings_t @var{input_chan_bindings}, gss_name_t * @var{src_name}, gss_OID * @var{mech_type}, gss_buffer_t @var{output_token}, OM_uint32 * @var{ret_flags}, OM_uint32 * @var{time_rec}, gss_cred_id_t * @var{delegated_cred_handle}) @var{minor_status}: (Integer, modify) Mechanism specific status code. @var{context_handle}: (gss_ctx_id_t, read/modify) Context handle for new context. Supply GSS_C_NO_CONTEXT for first call; use value returned in subsequent calls. Once gss_accept_sec_context() has returned a value via this parameter, resources have been assigned to the corresponding context, and must be freed by the application after use with a call to gss_delete_sec_context(). @var{acceptor_cred_handle}: (gss_cred_id_t, read) Credential handle claimed by context acceptor. Specify GSS_C_NO_CREDENTIAL to accept the context as a default principal. If GSS_C_NO_CREDENTIAL is specified, but no default acceptor principal is defined, GSS_S_NO_CRED will be returned. @var{input_token_buffer}: (buffer, opaque, read) Token obtained from remote application. @var{input_chan_bindings}: (channel bindings, read, optional) Application- specified bindings. Allows application to securely bind channel identification information to the security context. If channel bindings are not used, specify GSS_C_NO_CHANNEL_BINDINGS. @var{src_name}: (gss_name_t, modify, optional) Authenticated name of context initiator. After use, this name should be deallocated by passing it to gss_release_name(). If not required, specify NULL. @var{mech_type}: (Object ID, modify, optional) Security mechanism used. The returned OID value will be a pointer into static storage, and should be treated as read-only by the caller (in particular, it does not need to be freed). If not required, specify NULL. @var{output_token}: (buffer, opaque, modify) Token to be passed to peer application. If the length field of the returned token buffer is 0, then no token need be passed to the peer application. If a non- zero length field is returned, the associated storage must be freed after use by the application with a call to gss_release_buffer(). @var{ret_flags}: (bit-mask, modify, optional) Contains various independent flags, each of which indicates that the context supports a specific service option. If not needed, specify NULL. Symbolic names are provided for each flag, and the symbolic names corresponding to the required flags should be logically-ANDed with the ret_flags value to test whether a given option is supported by the context. See below for the flags. @var{time_rec}: (Integer, modify, optional) Number of seconds for which the context will remain valid. Specify NULL if not required. @var{delegated_cred_handle}: (gss_cred_id_t, modify, optional credential) Handle for credentials received from context initiator. Only valid if deleg_flag in ret_flags is true, in which case an explicit credential handle (i.e. not GSS_C_NO_CREDENTIAL) will be returned; if deleg_flag is false, gss_accept_sec_context() will set this parameter to GSS_C_NO_CREDENTIAL. If a credential handle is returned, the associated resources must be released by the application after use with a call to gss_release_cred(). Specify NULL if not required. Allows a remotely initiated security context between the application and a remote peer to be established. The routine may return a output_token which should be transferred to the peer application, where the peer application will present it to gss_init_sec_context. If no token need be sent, gss_accept_sec_context will indicate this by setting the length field of the output_token argument to zero. To complete the context establishment, one or more reply tokens may be required from the peer application; if so, gss_accept_sec_context will return a status flag of GSS_S_CONTINUE_NEEDED, in which case it should be called again when the reply token is received from the peer application, passing the token to gss_accept_sec_context via the input_token parameters. Portable applications should be constructed to use the token length and return status to determine whether a token needs to be sent or waited for. Thus a typical portable caller should always invoke gss_accept_sec_context within a loop: @example gss_ctx_id_t context_hdl = GSS_C_NO_CONTEXT; do @{ receive_token_from_peer(input_token); maj_stat = gss_accept_sec_context(&min_stat, &context_hdl, cred_hdl, input_token, input_bindings, &client_name, &mech_type, output_token, &ret_flags, &time_rec, &deleg_cred); if (GSS_ERROR(maj_stat)) @{ report_error(maj_stat, min_stat); @}; if (output_token->length != 0) @{ send_token_to_peer(output_token); gss_release_buffer(&min_stat, output_token); @}; if (GSS_ERROR(maj_stat)) @{ if (context_hdl != GSS_C_NO_CONTEXT) gss_delete_sec_context(&min_stat, &context_hdl, GSS_C_NO_BUFFER); break; @}; @} while (maj_stat & GSS_S_CONTINUE_NEEDED); @end example Whenever the routine returns a major status that includes the value GSS_S_CONTINUE_NEEDED, the context is not fully established and the following restrictions apply to the output parameters: The value returned via the time_rec parameter is undefined Unless the accompanying ret_flags parameter contains the bit GSS_C_PROT_READY_FLAG, indicating that per-message services may be applied in advance of a successful completion status, the value returned via the mech_type parameter may be undefined until the routine returns a major status value of GSS_S_COMPLETE. The values of the GSS_C_DELEG_FLAG, GSS_C_MUTUAL_FLAG,GSS_C_REPLAY_FLAG, GSS_C_SEQUENCE_FLAG, GSS_C_CONF_FLAG,GSS_C_INTEG_FLAG and GSS_C_ANON_FLAG bits returned via the ret_flags parameter should contain the values that the implementation expects would be valid if context establishment were to succeed. The values of the GSS_C_PROT_READY_FLAG and GSS_C_TRANS_FLAG bits within ret_flags should indicate the actual state at the time gss_accept_sec_context returns, whether or not the context is fully established. Although this requires that GSS-API implementations set the GSS_C_PROT_READY_FLAG in the final ret_flags returned to a caller (i.e. when accompanied by a GSS_S_COMPLETE status code), applications should not rely on this behavior as the flag was not defined in Version 1 of the GSS-API. Instead, applications should be prepared to use per-message services after a successful context establishment, according to the GSS_C_INTEG_FLAG and GSS_C_CONF_FLAG values. All other bits within the ret_flags argument should be set to zero. While the routine returns GSS_S_CONTINUE_NEEDED, the values returned via the ret_flags argument indicate the services that the implementation expects to be available from the established context. If the initial call of gss_accept_sec_context() fails, the implementation should not create a context object, and should leave the value of the context_handle parameter set to GSS_C_NO_CONTEXT to indicate this. In the event of a failure on a subsequent call, the implementation is permitted to delete the "half-built" security context (in which case it should set the context_handle parameter to GSS_C_NO_CONTEXT), but the preferred behavior is to leave the security context (and the context_handle parameter) untouched for the application to delete (using gss_delete_sec_context). During context establishment, the informational status bits GSS_S_OLD_TOKEN and GSS_S_DUPLICATE_TOKEN indicate fatal errors, and GSS-API mechanisms should always return them in association with a routine error of GSS_S_FAILURE. This requirement for pairing did not exist in version 1 of the GSS-API specification, so applications that wish to run over version 1 implementations must special-case these codes. The @code{ret_flags} values: @table @asis @item @code{GSS_C_DELEG_FLAG} @itemize @bullet @item True - Delegated credentials are available via the delegated_cred_handle parameter. @item False - No credentials were delegated. @end itemize @item @code{GSS_C_MUTUAL_FLAG} @itemize @bullet @item True - Remote peer asked for mutual authentication. @item False - Remote peer did not ask for mutual authentication. @end itemize @item @code{GSS_C_REPLAY_FLAG} @itemize @bullet @item True - replay of protected messages will be detected. @item False - replayed messages will not be detected. @end itemize @item @code{GSS_C_SEQUENCE_FLAG} @itemize @bullet @item True - out-of-sequence protected messages will be detected. @item False - out-of-sequence messages will not be detected. @end itemize @item @code{GSS_C_CONF_FLAG} @itemize @bullet @item True - Confidentiality service may be invoked by calling the gss_wrap routine. @item False - No confidentiality service (via gss_wrap) available. gss_wrap will provide message encapsulation, data-origin authentication and integrity services only. @end itemize @item @code{GSS_C_INTEG_FLAG} @itemize @bullet @item True - Integrity service may be invoked by calling either gss_get_mic or gss_wrap routines. @item False - Per-message integrity service unavailable. @end itemize @item @code{GSS_C_ANON_FLAG} @itemize @bullet @item True - The initiator does not wish to be authenticated; the src_name parameter (if requested) contains an anonymous internal name. @item False - The initiator has been authenticated normally. @end itemize @item @code{GSS_C_PROT_READY_FLAG} @itemize @bullet @item True - Protection services (as specified by the states of the GSS_C_CONF_FLAG and GSS_C_INTEG_FLAG) are available if the accompanying major status return value is either GSS_S_COMPLETE or GSS_S_CONTINUE_NEEDED. @item False - Protection services (as specified by the states of the GSS_C_CONF_FLAG and GSS_C_INTEG_FLAG) are available only if the accompanying major status return value is GSS_S_COMPLETE. @end itemize @item @code{GSS_C_TRANS_FLAG} @itemize @bullet @item True - The resultant security context may be transferred to other processes via a call to gss_export_sec_context(). @item False - The security context is not transferable. @end itemize @end table All other bits should be set to zero. Return value: @code{GSS_S_CONTINUE_NEEDED}: Indicates that a token from the peer application is required to complete the context, and that gss_accept_sec_context must be called again with that token. @code{GSS_S_DEFECTIVE_TOKEN}: Indicates that consistency checks performed on the input_token failed. @code{GSS_S_DEFECTIVE_CREDENTIAL}: Indicates that consistency checks performed on the credential failed. @code{GSS_S_NO_CRED}: The supplied credentials were not valid for context acceptance, or the credential handle did not reference any credentials. @code{GSS_S_CREDENTIALS_EXPIRED}: The referenced credentials have expired. @code{GSS_S_BAD_BINDINGS}: The input_token contains different channel bindings to those specified via the input_chan_bindings parameter. @code{GSS_S_NO_CONTEXT}: Indicates that the supplied context handle did not refer to a valid context. @code{GSS_S_BAD_SIG}: The input_token contains an invalid MIC. @code{GSS_S_OLD_TOKEN}: The input_token was too old. This is a fatal error during context establishment. @code{GSS_S_DUPLICATE_TOKEN}: The input_token is valid, but is a duplicate of a token already processed. This is a fatal error during context establishment. @code{GSS_S_BAD_MECH}: The received token specified a mechanism that is not supported by the implementation or the provided credential. @end deftypefun @subheading gss_delete_sec_context @anchor{gss_delete_sec_context} @deftypefun {OM_uint32} {gss_delete_sec_context} (OM_uint32 * @var{minor_status}, gss_ctx_id_t * @var{context_handle}, gss_buffer_t @var{output_token}) @var{minor_status}: (Integer, modify) Mechanism specific status code. @var{context_handle}: (gss_ctx_id_t, modify) Context handle identifying context to delete. After deleting the context, the GSS-API will set this context handle to GSS_C_NO_CONTEXT. @var{output_token}: (buffer, opaque, modify, optional) Token to be sent to remote application to instruct it to also delete the context. It is recommended that applications specify GSS_C_NO_BUFFER for this parameter, requesting local deletion only. If a buffer parameter is provided by the application, the mechanism may return a token in it; mechanisms that implement only local deletion should set the length field of this token to zero to indicate to the application that no token is to be sent to the peer. Delete a security context. gss_delete_sec_context will delete the local data structures associated with the specified security context, and may generate an output_token, which when passed to the peer gss_process_context_token will instruct it to do likewise. If no token is required by the mechanism, the GSS-API should set the length field of the output_token (if provided) to zero. No further security services may be obtained using the context specified by context_handle. In addition to deleting established security contexts, gss_delete_sec_context must also be able to delete "half-built" security contexts resulting from an incomplete sequence of gss_init_sec_context()/gss_accept_sec_context() calls. The output_token parameter is retained for compatibility with version 1 of the GSS-API. It is recommended that both peer applications invoke gss_delete_sec_context passing the value GSS_C_NO_BUFFER for the output_token parameter, indicating that no token is required, and that gss_delete_sec_context should simply delete local context data structures. If the application does pass a valid buffer to gss_delete_sec_context, mechanisms are encouraged to return a zero-length token, indicating that no peer action is necessary, and that no token should be transferred by the application. Return value: @code{GSS_S_COMPLETE}: Successful completion. @code{GSS_S_NO_CONTEXT}: No valid context was supplied. @end deftypefun @subheading gss_process_context_token @anchor{gss_process_context_token} @deftypefun {OM_uint32} {gss_process_context_token} (OM_uint32 * @var{minor_status}, const gss_ctx_id_t @var{context_handle}, const gss_buffer_t @var{token_buffer}) @var{minor_status}: (Integer, modify) Implementation specific status code. @var{context_handle}: (gss_ctx_id_t, read) Context handle of context on which token is to be processed @var{token_buffer}: (buffer, opaque, read) Token to process. Provides a way to pass an asynchronous token to the security service. Most context-level tokens are emitted and processed synchronously by gss_init_sec_context and gss_accept_sec_context, and the application is informed as to whether further tokens are expected by the GSS_C_CONTINUE_NEEDED major status bit. Occasionally, a mechanism may need to emit a context-level token at a point when the peer entity is not expecting a token. For example, the initiator's final call to gss_init_sec_context may emit a token and return a status of GSS_S_COMPLETE, but the acceptor's call to gss_accept_sec_context may fail. The acceptor's mechanism may wish to send a token containing an error indication to the initiator, but the initiator is not expecting a token at this point, believing that the context is fully established. Gss_process_context_token provides a way to pass such a token to the mechanism at any time. Return value: @code{GSS_S_COMPLETE}: Successful completion. @code{GSS_S_DEFECTIVE_TOKEN}: Indicates that consistency checks performed on the token failed. @code{GSS_S_NO_CONTEXT}: The context_handle did not refer to a valid context. @end deftypefun @subheading gss_context_time @anchor{gss_context_time} @deftypefun {OM_uint32} {gss_context_time} (OM_uint32 * @var{minor_status}, const gss_ctx_id_t @var{context_handle}, OM_uint32 * @var{time_rec}) @var{minor_status}: (Integer, modify) Implementation specific status code. @var{context_handle}: (gss_ctx_id_t, read) Identifies the context to be interrogated. @var{time_rec}: (Integer, modify) Number of seconds that the context will remain valid. If the context has already expired, zero will be returned. Determines the number of seconds for which the specified context will remain valid. Return value: @code{GSS_S_COMPLETE}: Successful completion. @code{GSS_S_CONTEXT_EXPIRED}: The context has already expired. @code{GSS_S_NO_CONTEXT}: The context_handle parameter did not identify a valid context @end deftypefun @subheading gss_inquire_context @anchor{gss_inquire_context} @deftypefun {OM_uint32} {gss_inquire_context} (OM_uint32 * @var{minor_status}, const gss_ctx_id_t @var{context_handle}, gss_name_t * @var{src_name}, gss_name_t * @var{targ_name}, OM_uint32 * @var{lifetime_rec}, gss_OID * @var{mech_type}, OM_uint32 * @var{ctx_flags}, int * @var{locally_initiated}, int * @var{open}) @var{minor_status}: (Integer, modify) Mechanism specific status code. @var{context_handle}: (gss_ctx_id_t, read) A handle that refers to the security context. @var{src_name}: (gss_name_t, modify, optional) The name of the context initiator. If the context was established using anonymous authentication, and if the application invoking gss_inquire_context is the context acceptor, an anonymous name will be returned. Storage associated with this name must be freed by the application after use with a call to gss_release_name(). Specify NULL if not required. @var{targ_name}: (gss_name_t, modify, optional) The name of the context acceptor. Storage associated with this name must be freed by the application after use with a call to gss_release_name(). If the context acceptor did not authenticate itself, and if the initiator did not specify a target name in its call to gss_init_sec_context(), the value GSS_C_NO_NAME will be returned. Specify NULL if not required. @var{lifetime_rec}: (Integer, modify, optional) The number of seconds for which the context will remain valid. If the context has expired, this parameter will be set to zero. If the implementation does not support context expiration, the value GSS_C_INDEFINITE will be returned. Specify NULL if not required. @var{mech_type}: (gss_OID, modify, optional) The security mechanism providing the context. The returned OID will be a pointer to static storage that should be treated as read-only by the application; in particular the application should not attempt to free it. Specify NULL if not required. @var{ctx_flags}: (bit-mask, modify, optional) Contains various independent flags, each of which indicates that the context supports (or is expected to support, if ctx_open is false) a specific service option. If not needed, specify NULL. Symbolic names are provided for each flag, and the symbolic names corresponding to the required flags should be logically-ANDed with the ret_flags value to test whether a given option is supported by the context. See below for the flags. @var{locally_initiated}: (Boolean, modify) Non-zero if the invoking application is the context initiator. Specify NULL if not required. @var{open}: (Boolean, modify) Non-zero if the context is fully established; Zero if a context-establishment token is expected from the peer application. Specify NULL if not required. Obtains information about a security context. The caller must already have obtained a handle that refers to the context, although the context need not be fully established. The @code{ctx_flags} values: @table @asis @item @code{GSS_C_DELEG_FLAG} @itemize @bullet @item True - Credentials were delegated from the initiator to the acceptor. @item False - No credentials were delegated. @end itemize @item @code{GSS_C_MUTUAL_FLAG} @itemize @bullet @item True - The acceptor was authenticated to the initiator. @item False - The acceptor did not authenticate itself. @end itemize @item @code{GSS_C_REPLAY_FLAG} @itemize @bullet @item True - replay of protected messages will be detected. @item False - replayed messages will not be detected. @end itemize @item @code{GSS_C_SEQUENCE_FLAG} @itemize @bullet @item True - out-of-sequence protected messages will be detected. @item False - out-of-sequence messages will not be detected. @end itemize @item @code{GSS_C_CONF_FLAG} @itemize @bullet @item True - Confidentiality service may be invoked by calling gss_wrap routine. @item False - No confidentiality service (via gss_wrap) available. gss_wrap will provide message encapsulation, data-origin authentication and integrity services only. @end itemize @item @code{GSS_C_INTEG_FLAG} @itemize @bullet @item True - Integrity service may be invoked by calling either gss_get_mic or gss_wrap routines. @item False - Per-message integrity service unavailable. @end itemize @item @code{GSS_C_ANON_FLAG} @itemize @bullet @item True - The initiator's identity will not be revealed to the acceptor. The src_name parameter (if requested) contains an anonymous internal name. @item False - The initiator has been authenticated normally. @end itemize @item @code{GSS_C_PROT_READY_FLAG} @itemize @bullet @item True - Protection services (as specified by the states of the GSS_C_CONF_FLAG and GSS_C_INTEG_FLAG) are available for use. @item False - Protection services (as specified by the states of the GSS_C_CONF_FLAG and GSS_C_INTEG_FLAG) are available only if the context is fully established (i.e. if the open parameter is non-zero). @end itemize @item @code{GSS_C_TRANS_FLAG} @itemize @bullet @item True - The resultant security context may be transferred to other processes via a call to gss_export_sec_context(). @item False - The security context is not transferable. @end itemize @end table Return value: @code{GSS_S_COMPLETE}: Successful completion. @code{GSS_S_NO_CONTEXT}: The referenced context could not be accessed. @end deftypefun @subheading gss_wrap_size_limit @anchor{gss_wrap_size_limit} @deftypefun {OM_uint32} {gss_wrap_size_limit} (OM_uint32 * @var{minor_status}, const gss_ctx_id_t @var{context_handle}, int @var{conf_req_flag}, gss_qop_t @var{qop_req}, OM_uint32 @var{req_output_size}, OM_uint32 * @var{max_input_size}) @var{minor_status}: (Integer, modify) Mechanism specific status code. @var{context_handle}: (gss_ctx_id_t, read) A handle that refers to the security over which the messages will be sent. @var{conf_req_flag}: (Boolean, read) Indicates whether gss_wrap will be asked to apply confidentiality protection in addition to integrity protection. See the routine description for gss_wrap for more details. @var{qop_req}: (gss_qop_t, read) Indicates the level of protection that gss_wrap will be asked to provide. See the routine description for gss_wrap for more details. @var{req_output_size}: (Integer, read) The desired maximum size for tokens emitted by gss_wrap. @var{max_input_size}: (Integer, modify) The maximum input message size that may be presented to gss_wrap in order to guarantee that the emitted token shall be no larger than req_output_size bytes. Allows an application to determine the maximum message size that, if presented to gss_wrap with the same conf_req_flag and qop_req parameters, will result in an output token containing no more than req_output_size bytes. This call is intended for use by applications that communicate over protocols that impose a maximum message size. It enables the application to fragment messages prior to applying protection. GSS-API implementations are recommended but not required to detect invalid QOP values when gss_wrap_size_limit() is called. This routine guarantees only a maximum message size, not the availability of specific QOP values for message protection. Successful completion of this call does not guarantee that gss_wrap will be able to protect a message of length max_input_size bytes, since this ability may depend on the availability of system resources at the time that gss_wrap is called. However, if the implementation itself imposes an upper limit on the length of messages that may be processed by gss_wrap, the implementation should not return a value via max_input_bytes that is greater than this length. Return value: @code{GSS_S_COMPLETE}: Successful completion. @code{GSS_S_NO_CONTEXT}: The referenced context could not be accessed. @code{GSS_S_CONTEXT_EXPIRED}: The context has expired. @code{GSS_S_BAD_QOP}: The specified QOP is not supported by the mechanism. @end deftypefun @subheading gss_export_sec_context @anchor{gss_export_sec_context} @deftypefun {OM_uint32} {gss_export_sec_context} (OM_uint32 * @var{minor_status}, gss_ctx_id_t * @var{context_handle}, gss_buffer_t @var{interprocess_token}) @var{minor_status}: (Integer, modify) Mechanism specific status code. @var{context_handle}: (gss_ctx_id_t, modify) Context handle identifying the context to transfer. @var{interprocess_token}: (buffer, opaque, modify) Token to be transferred to target process. Storage associated with this token must be freed by the application after use with a call to gss_release_buffer(). Provided to support the sharing of work between multiple processes. This routine will typically be used by the context-acceptor, in an application where a single process receives incoming connection requests and accepts security contexts over them, then passes the established context to one or more other processes for message exchange. gss_export_sec_context() deactivates the security context for the calling process and creates an interprocess token which, when passed to gss_import_sec_context in another process, will re-activate the context in the second process. Only a single instantiation of a given context may be active at any one time; a subsequent attempt by a context exporter to access the exported security context will fail. The implementation may constrain the set of processes by which the interprocess token may be imported, either as a function of local security policy, or as a result of implementation decisions. For example, some implementations may constrain contexts to be passed only between processes that run under the same account, or which are part of the same process group. The interprocess token may contain security-sensitive information (for example cryptographic keys). While mechanisms are encouraged to either avoid placing such sensitive information within interprocess tokens, or to encrypt the token before returning it to the application, in a typical object-library GSS-API implementation this may not be possible. Thus the application must take care to protect the interprocess token, and ensure that any process to which the token is transferred is trustworthy. If creation of the interprocess token is successful, the implementation shall deallocate all process-wide resources associated with the security context, and set the context_handle to GSS_C_NO_CONTEXT. In the event of an error that makes it impossible to complete the export of the security context, the implementation must not return an interprocess token, and should strive to leave the security context referenced by the context_handle parameter untouched. If this is impossible, it is permissible for the implementation to delete the security context, providing it also sets the context_handle parameter to GSS_C_NO_CONTEXT. Return value: @code{GSS_S_COMPLETE}: Successful completion. @code{GSS_S_CONTEXT_EXPIRED}: The context has expired. @code{GSS_S_NO_CONTEXT}: The context was invalid. @code{GSS_S_UNAVAILABLE}: The operation is not supported. @end deftypefun @subheading gss_import_sec_context @anchor{gss_import_sec_context} @deftypefun {OM_uint32} {gss_import_sec_context} (OM_uint32 * @var{minor_status}, const gss_buffer_t @var{interprocess_token}, gss_ctx_id_t * @var{context_handle}) @var{minor_status}: (Integer, modify) Mechanism specific status code. @var{interprocess_token}: (buffer, opaque, modify) Token received from exporting process @var{context_handle}: (gss_ctx_id_t, modify) Context handle of newly reactivated context. Resources associated with this context handle must be released by the application after use with a call to gss_delete_sec_context(). Allows a process to import a security context established by another process. A given interprocess token may be imported only once. See gss_export_sec_context. Return value: @code{GSS_S_COMPLETE}: Successful completion. @code{GSS_S_NO_CONTEXT}: The token did not contain a valid context reference. @code{GSS_S_DEFECTIVE_TOKEN}: The token was invalid. @code{GSS_S_UNAVAILABLE}: The operation is unavailable. @code{GSS_S_UNAUTHORIZED}: Local policy prevents the import of this context by the current process. @end deftypefun gss-1.0.3/doc/texi/gss_release_name.texi0000644000000000000000000000110612415507722015106 00000000000000@subheading gss_release_name @anchor{gss_release_name} @deftypefun {OM_uint32} {gss_release_name} (OM_uint32 * @var{minor_status}, gss_name_t * @var{name}) @var{minor_status}: (Integer, modify) Mechanism specific status code. @var{name}: (gss_name_t, modify) The name to be deleted. Free GSSAPI-allocated storage associated with an internal-form name. The name is set to GSS_C_NO_NAME on successful completion of this call. Return value: @code{GSS_S_COMPLETE}: Successful completion. @code{GSS_S_BAD_NAME}: The name parameter did not contain a valid name. @end deftypefun gss-1.0.3/doc/texi/gss_test_oid_set_member.texi0000644000000000000000000000161512415507711016505 00000000000000@subheading gss_test_oid_set_member @anchor{gss_test_oid_set_member} @deftypefun {OM_uint32} {gss_test_oid_set_member} (OM_uint32 * @var{minor_status}, const gss_OID @var{member}, const gss_OID_set @var{set}, int * @var{present}) @var{minor_status}: (integer, modify) Mechanism specific status code. @var{member}: (Object ID, read) The object identifier whose presence is to be tested. @var{set}: (Set of Object ID, read) The Object Identifier set. @var{present}: (Boolean, modify) Non-zero if the specified OID is a member of the set, zero if not. Interrogate an Object Identifier set to determine whether a specified Object Identifier is a member. This routine is intended to be used with OID sets returned by gss_indicate_mechs(), gss_acquire_cred(), and gss_inquire_cred(), but will also work with user-generated sets. Return value: @code{GSS_S_COMPLETE}: Successful completion. @end deftypefun gss-1.0.3/doc/texi/gss_duplicate_name.texi0000644000000000000000000000162112415507724015444 00000000000000@subheading gss_duplicate_name @anchor{gss_duplicate_name} @deftypefun {OM_uint32} {gss_duplicate_name} (OM_uint32 * @var{minor_status}, const gss_name_t @var{src_name}, gss_name_t * @var{dest_name}) @var{minor_status}: (Integer, modify) Mechanism specific status code. @var{src_name}: (gss_name_t, read) Internal name to be duplicated. @var{dest_name}: (gss_name_t, modify) The resultant copy of @@src_name. Storage associated with this name must be freed by the application after use with a call to gss_release_name(). Create an exact duplicate of the existing internal name @@src_name. The new @@dest_name will be independent of src_name (i.e. @@src_name and @@dest_name must both be released, and the release of one shall not affect the validity of the other). Return value: @code{GSS_S_COMPLETE}: Successful completion. @code{GSS_S_BAD_NAME}: The src_name parameter was ill-formed. @end deftypefun gss-1.0.3/doc/texi/ext.c.texi0000644000000000000000000000103512415507705012635 00000000000000@subheading gss_userok @anchor{gss_userok} @deftypefun {int} {gss_userok} (const gss_name_t @var{name}, const char * @var{username}) @var{name}: (gss_name_t, read) Name to be compared. @var{username}: Zero terminated string with username. Compare the username against the output from gss_export_name() invoked on @@name, after removing the leading OID. This answers the question whether the particular mechanism would authenticate them as the same principal Return value: Returns 0 if the names match, non-0 otherwise. @end deftypefun gss-1.0.3/doc/stamp-vti0000644000000000000000000000014212415507663011620 00000000000000@set UPDATED 9 October 2014 @set UPDATED-MONTH October 2014 @set EDITION 1.0.3 @set VERSION 1.0.3 gss-1.0.3/doc/gss.10000644000000000000000000000376012415507731010634 00000000000000.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.46.3. .TH GSS "1" "October 2014" "gss 1.0.3" "User Commands" .SH NAME gss \- Generic Security Service command line interface .SH SYNOPSIS .B gss \fI\,OPTIONS\/\fR... .SH DESCRIPTION Command line interface to GSS, used to explain error codes. .PP Mandatory arguments to long options are mandatory for short options too. .TP \fB\-h\fR, \fB\-\-help\fR Print help and exit. .TP \fB\-V\fR, \fB\-\-version\fR Print version and exit. .TP \fB\-l\fR, \fB\-\-list\-mechanisms\fR List information about supported mechanisms in a human readable format. .TP \fB\-m\fR, \fB\-\-major\fR=\fI\,LONG\/\fR Describe a `major status' error code value. .TP \fB\-a\fR, \fB\-\-accept\-sec\-context\fR[=\fI\,MECH\/\fR] Accept a security context as server. If MECH is not specified, no credentials will be acquired. Use "*" to use library default mechanism. .TP \fB\-i\fR, \fB\-\-init\-sec\-context\fR=\fI\,MECH\/\fR Initialize a security context as client. MECH is the SASL name of mechanism, use \fB\-l\fR to list supported mechanisms. .TP \fB\-n\fR, \fB\-\-server\-name\fR=\fI\,SERVICE\/\fR@HOSTNAME For \fB\-i\fR and \fB\-a\fR, set the name of the remote host. For example, "imap@mail.example.com". .TP \fB\-q\fR, \fB\-\-quiet\fR Silent operation (default=off). .SH AUTHOR Written by Simon Josefsson. .SH "REPORTING BUGS" Report bugs to: bug\-gss@gnu.org .br GNU Generic Security Service home page: .br General help using GNU software: .SH COPYRIGHT Copyright \(co 2014 Simon Josefsson. License GPLv3+: GNU GPL version 3 or later . .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 gss is maintained as a Texinfo manual. If the .B info and .B gss programs are properly installed at your site, the command .IP .B info gss .PP should give you access to the complete manual. gss-1.0.3/doc/gss.pdf0000644000000000000000000135537212415507743011262 00000000000000%PDF-1.5 %ÐÔÅØ 1 0 obj << /Length 587 /Filter /FlateDecode >> stream xÚmTM¢@½ó+z&ÎÁ±?tBL$ñ°ãd4›½*´.‰<øï·_•èÌf’W¯_wÕ«îrðãc;Šòê`GæUŠOÛV×&³£øç¾öƒ¤Ê®[vïÖæ6ïWÛ7ñÑTÙÖvb¯“uYt/N¼.³ó5·½êÿ¢¥=åS‚> stream xÚmTM¢@½ó+z&ÎÁ±?tBL0ñ°ãd4›½*´.‰<Ì¿ß~U¢Îf’W¯_u½ªîvðãc;ZäÕÁŽÌ«Ÿ¶­®MfGñÏ}í I•]/¶ìÞ­ÍmÞ¯¶o⣩²­íÄ0^'ë²è^œx]fçkn{ÕÿEK{*ʇuÄpg6;µÞ$4»¢;»µgZ8, ’ü²M[Tå›P¯RJG¤eWxm½ñ­ž÷ŽE™7·¢â žÒ"/²îÑ7»¸¦‘¼ýj;{Y—ÇÊ‹"1þt‹m×|‘£o¼irÛåI É‘c¶×º>[TÒ›ÏEnn#×ÛûþbÅø¹‘ûÒî«¶BS¬ØEVå¶­÷™möåÉz‘”s…«¹gËüŸµ)gŽÏR©ð133wÄ xAÄbêí;¬ÒaGL6K& 0+‡}&ö"?‘á°(Ò¦Òa/ ¡cì,•!£½¥‰î-fö3¤Ù*IÃx {aªùð”sIC%ÒðhSô¢¨7å£Å}­HÏ=ŤIYƒ¹(îƒêjŧ ÿZóéàü4{ÖØSOØá5˜‡áZ ä®ekxvKº·Ǭü÷…Ü@2aÂ> stream xÚmSÁnâ0½ç+¼$z Ø¨"¤€ÄaKU¢Õ^C<ÐHàDN8ð÷õÌŠV{Hôüæç=üúØS`¾Jñ m}u%ŒÒßE Y]^/`»w¦¶oâÃÕå:1L·ÙÖVÝ‹omy¾èUÿ­àTÙ ÖÃþŽv¹Êó‘DM^ug{¦…Ç‚° ÉpmUÛ7¡^¥”žX[“ÖôÚã{=1î+kܽ¨8 …@iaª²»¯è_^|Ó˜¼¿µ\¶öXq,ÆŸ>ØvîFŽ^‚ñÎp•=‰!9òÌþÚ4gÀêBË¥0pôùÞÞ‹ ˆñs#P~k@hZ+vQÖÚ¦(ÁöA,åRÄÑf€5ÿĦœq8>K¥Â_¸—žX NˆHæžÐÔ3$¤Çž˜{<Ý0Š*¢5cÕ~ÿP÷õʯÂùÝ5WÂ42^!ž0^#žrq‰xƘœE„3xÎü ñ ªz“)cÒgl1BÌîÒ°õ•?ŸXqû!òŠNA‡¨Wš»A*dý1ùÔ)iȧΰÅç“Оó â9ç’†NVf¤¡–kô¯VäaŠžUJü†ôì?%Íš5Ø»bÿTW£=ј«±®–¾Œ¿É5ëñ2éfè&p2pj³V^ócH£Mc†VYxLS7˜E=›þ1âj· ¾gÈÈ endstream endobj 6 0 obj << /Length 320 /Filter /FlateDecode >> stream xÚPMOÄ ½÷WplZ8j¢7Ư֓ñàVª=ì6ÒºÉþ{¡tc ‡™7 ï=22+XEVÖn31OýKÍÃ*ÃeO‘ õÏw8þƒŒU^É™ï¼ÉN/+ͤ€RÍš.zÒ%Be k^ÙS¾ºy,8U:_¹ó}›@íÚOßOa~8Nü¾o]×ýÆ¿øCñܬ³‹&ûøìÊ‚x4}×AÜ;Öe÷É“Ö Xa1z"2PŠ’éP¥Z|Õ5?»» zDßz3è•Oï.MÒB3ÆÉm£-&+PA”£«1q./)ßÒäÎý°KTè$]ÚTnÛiØ|^L)PEî9RT@ª”Ñ>—U ñ+\a h—dë~;Ó‡¼ÖÃèºq ð·ÄP ÒÏĬ¥cb_SH‡# endstream endobj 13 0 obj << /Length 632 /Filter /FlateDecode >> stream xÚ}TKoÛ0 ¾çW;ÉÀ¬êévZ»¥X1lÃâí²îàØN#̱ [n×_QTÚlè†E~¤È¤yÂü'K )i¥Ê¤=¬XÐN7 _/W<â”þü/$ÓB$ÙI´ózu¶Ö:áŒV¬âI½ƒçx®(+uRwÉRïÍœfRJrhÆTdi¼õC3;YRNnÓL”¤k\ß¡¹BÛçÖÙm°õã ¥t—ûlìˆN•(Úb.?}CÅåfCÓŸõ•/-ã9å ¾°·åa27{\ÀhEE!MTˆkA¶ÎÕiõ™¤Lz¢Np׌k„þIWT«Ü?P‚1™=W´1,A‘+;÷»y¶#&›ÉœVe‰)ËøÆ¬û`f,]è…ófBÞ¡ pÏ6š–’¼ö*¥Igf7™íâz„4cwÜ‚|°Ø³{ˆqöÇ':4µË¡‘² ^Æ®ŸŽØþ‰jI¹æ˜·ó9CŒ¢ íEAúÂ:-™ú¨~÷÷[Ã’½í£iûq²"ßÁÏ{qÂs‡ðÞ„g3" Á:ø±‹úÓQz!óÛe;˜yœªŠ‘m ¢*Ž€r ̆ÄA½±;¨{øk¦¨ ÅYÏT(ãMšé¼"÷Æí1Ähö!dy—jí]ý–˜ØSDmú¼g_¸–Áé4cL“±ÈYva1ÞqxAjô¿D‘‚AïÑ9ÀyÞ´€ÿõì\DçüÙ™úŒdEÞ¢ËÓˆ…[Ø@[ €ýÂKøÀ9¶ÃÒyb_`ÝĵÆ~9f¬µq ŒŽßŽk.UÜwu2Gpû×[œ£WaãVïëÕ#’ÝVH endstream endobj 59 0 obj << /Length 2543 /Filter /FlateDecode >> stream xÚíœK“Û¸€ïþ:J!Ä“`n¶w×ëÔN첦rIr %Ú£¬FšPÔ>òë’x´4xÌÀ¯õšå*, Ýmö7Fw“xV¨?xV³’RT19[ß>)†wÛ÷³ñÅ›O°þÞR}q ¾ùìúÉ_~à|† Tž]¿›q,QUZq×›Ù?çÛÅ¿¯ÿöäûk+‡ò@…ý7ïi,•ÆÌY¯QÙ$$C˜²QÛõ¢bóúí®Y,iÉç‡wãÏç‡ý‚ây׌?޽M£(†(¤¥þw´BEÁGIx±Ä˜ðùËqI{P’ð|sZw[%lX‹ Àê5L üU åøCœýëáoæ®ûlo¿rátÆ0ªèL0Ž0©¿#®>BE¥þÂdàüH‚^¾ë- ÎJ´/-QJ aüúoÞÓx<.˜‚“Í‘Hôo *QÏNQóM×m÷ï9”ÎW]ÝvÍfDGÐs1qIþ°ä|AŽ>ðÍ{ª_QÆ­¿Ïá¸~ x°¸T!’"1ªÒ’ˆ9âÌ€H4ˆ?,$7uwj›£@!V/¿¯—Ž? †°£[óyµëc¸Bv¼´:+R°ÆôYVUØ£ÒjDMÔ\­–O_¿£æ«_DΛö—mó«7tª”ƒdoººÑ(©ý“OÃî /wÀxQ•†<.+D¨%iòV§»»ÅRñvvêÀ×»º{who½q¡^ˉ¾Ç­ ðf¼’ÍáíÌùÄÇ4$Á[\¥å­¨ÒðÆ5oÏ··M»ÞÖ;"þB¸ >¥‰‡6í“|Úœ€mÐõÌK0$E[T¥¥Mu* mBÓöÝ¡ßJÝïõÆžJêýç˜:ç»z·ë?ð‘ÇKD)™] (}Ùórb@Aïú†¤€Šª´@± •R J Ô³“†èMcÖw›”%’å7²K~ysCxj'æãéÄð„¬p/žÀžQ•Oª¶Ejñ”vwÝ÷¯k·oO] ®I‰§_WÉîÏ8µÿòÉtbdBLüdCRdFUZ2 ELšŠ2ª4™êL±ß›Fª6ƒ ©~Ê)z~< !µ·ò9tbB(„—C`HŠÃ •çñª˜±Š#ŠKsÚ›¯Ûæ®nëH+ƒ ,ª©•ne˜ëšÛÊëíŒ3ç•>T  T.5úC+嬼ØVÆM½iZ_|⪲Q™ÂÓ'ÓrÆ¿ÙAˆ¹3ŒüäCRäFUZrG%±äšÞÇËý¶ÛÖ»íÿ@¸»—b:•U¾lh¼—Ï¥ãBâç’â2ªÒrÉ â¥Ùm›ãCÞ×{(‡DðùM³î,?û­Øð¿ŸÊ/Ÿw«×Ðhæ³éÄØ„ øÙ†¤ØŒª´lÒ 1" ›ÌVv¶;W#ìnšñÅQ}„N@ BH„ôB IAUi!$‘ÒBhº#¯N݈Ý0ÅEÙüJ×ôÞÚßÇnêý&X³fbªY?1íˆ|Äœ€bÐß~Ä€!)Ä.TÞ;ÓªnÑQ•êðªSàÔíf|±Z/ú±ïyX$þs‡ýçZs¹rϵ`}ø\{æ“ÊG4#AÀ¥F¡#!t×—Úsíj{{·ÓÛÛwuW‘æºÏÃ~›ªœÚéŠéÔû)6:ã©ì(D¢Ð~!)£*1®”rF…J°´ Z _ŽŠæ}ÓŽvÀ2`U"‘ÝS›­8‘oåsèÄ8„Pø9†¤8Œª´rލ(‡¦V²êÚËÉ•õoo·»Zƒ¹écd0ÙúÆãa$}¹óArb A¯úA†¤@ŠªÄ”!©RkÊ"‚dCÚ«»ú¿'½±nôÆJû¸VÆã¦á «Y{!}¡órbAú†¤Šª´‘ B@„L4z~S·õº÷D‡†àœÃdåT‹"¤/t>BN@ !èO?BÀBQ•v;ÃU˜;„L‰õÕÛÅ’óùšu§‡Ü6͘imÿU`Ö´Ô~J­²îUèoŸS—иãÑ éõK ÀÚ…šq¶¢ð’,I‘ÕiI+* =”4=àÛtMO(¹SüŠb¥¯}>VN@ +èâVÀ’VQ¦6Ad…f+âÆÃïvÍoÅ ¢"îçÊ-DhŒ[²‰"ÄyßO´$A\\§ d¤T “‚ÆgÓöçmc#W½;ÚåD²©ÇóñÌ ñ§”ÏŸã²€½7`AKRüEuZþEþÈÅÐnó›§,K$1Ÿê®ŸJCEí¯|€Š‹ŠÀ’ŠQE®¬î»EszxzênL(\ÃCc ãðs_Åhöþ½—H²o}ï a¤¯u>FN@ #èÒFÀ’FQ#Z¢c‡»¨í·wý3DÔËus<>ˆ$"Ô‰zê_?"aÓ>ÈÇË ˆá]À X’Â+ªÓâE(’ÂÑe†$þ^ßé Ž‚NEŒ/zfÕ^ËçÑ®áÐÀÞû™)c -‹ê½D:áêµû}£ïe~¶ÝoÂåÚb*w<ª `\=^ù|žìúOÀ½˜zyrf¤xŠ)4å\•ÃÔ ÊVoïúœËÜÿºßEëV…».T·í›| yXõ0ÞȆ ˆPvætì½Z’à,®Ó‚&b…¿0Ú÷m{ÐÚ#ó„Õ4Ûúyæ€ !Ú[ù :1!%)£:ÍŠKŒw º'Æ “ˆC³³îNDZà»> ýòMlWaÎ'.3«lÆù˜91̠˘KR˜EuZÌ8}U˜™*ÛÕx§‰Ê×¶ÇÛåQ÷ÖC¯jP”ò«®x„¸à™ƒ°– ›K½T3rᆆ–¤¸à™…ÅLýäö4ɽµÿƒ«z_¿on‡±ûñ#Ñ #,§ôð½M{ .' tt.`I ®¨N ÅH.q¿°¿ü©Ÿê×C¥9{sèŸÑÑKªdzÂcðÒ>ÈÇË ˆá]M¼Ï"‚–¤ðŠê´xa‰·#æYD¯ÇÇD.¯šãQ¬qߊB¥´ñrjcf§MÚùˆ91Ä »™·Ö -I!Õi+¸²ßŽcHPjµ›âöî´ ÞPŽ F¡S}«ü(‰˜vG>iN@Œ4èuæOÐ%)Ò¢: iA”[ÐÌã®¶Çu³ÛÕûæp:>`{ìÓ­HæJ_ül¬ÜúUÐÃÜ;ÛÌH0Uh*+D ;X sgÇÓÕO#J/VÄíŽ <bEJT²‰«LÅ´?²)së#”A§soèfÜ£ìÿÃê endstream endobj 91 0 obj << /Length 713 /Filter /FlateDecode >> stream xÚå—ËŽÚ0†÷> stream xÚÅYÛn¹}Ÿ¯àcò‹U¼Æ¶m d±†eI?ÌJ½ö`GÓB«go_ŸÃ®­¥éÙE¢n0DY<§.¼T—ƒqFLq†¼¡ †Èx‰&dÃèR0Éa"š\ç“)ž eCŽÑH‹¬|]‚ñ燤¤dªhÈx(Åø€¥äŒXŠE"ŽÁoäfâs&±ò‘³,‹Òyd*R”Îd-eYº„G ŽtY¬ã3|4_Ä+@#R|r/Ëð D¯|ÈUð™¼,’•1­õõ|ä…ÍÃÈz±xä*LašÎÏD‡‡ Í£l}>óIÂóðQ VXóìˆøŒ}a&¾ìa“¾ TðfY–/‘õAí£ššñÂ|øj-ã~!äf1O?D”gâ›ôi šœ±_–g VI>Œqž~¼ÌÄGøDg}‹Ï MÓÉL§.Ϭ—'átÓw™Ì´[ðiÂc¾YŠ-~úe3½DȽSÛðaômá‘mæC+qÿøç¿j‘9ygö‡ÝîãïVí¾(.d:VóØDÿœj^¡§Õ¼\þ·j^ТWVu²V´²V´²V´ò(¢¦äüì2Wý¨€/²œZ˯¡€?§ãðÜo¨‘+&¼—Ç"RŸèÏÔòL|¸‘1>Ôðü™T<º™øàËú¿ DzZ>S Š4>‘ãÈXèrVμÐq¦:DäŒÇj ^³p&|>ßhã…vòP *aÚ¾4—?·ñX|¢Z^˜¾—’r/÷¹—kõfßwíÍáºß¶ûA¿Ç#'ò_7}¿Ýú·wÕoº¾¹ÑUã'k/›Mèš{]ñðë”ãêê//ß¾©XßþØt?n›ŸF’‰‰“ÕW‡»»¶*PÅÞî6ý÷mw;rž™;ÁxÝÞÞ6Ýõv³ ÒU 1=u‚pÑþ´ßµ››Ñ'›ý@ùfßov; *ØJà¾: ’ïšJ;Zõdl„tûÝ¡à}4r"Çì÷ê£Ç!›š8]Ý5w›nóÛ†úràDú¯ÍgKÇþÄÝöð÷ö×Í—»ôÑØÉš¿7Ý=&ªª¯?7×?èª“Ñ ÿnwÇpôŸ›Úè;}tõ¹é¤o}n¿¯¿inÛî—ÚûŒ ÿ¶þHètw÷˜ÚtC pjƒ1îîé¹SŒííÝnÐýbÓoj[o¿ã93¹š.ÖÔë¢ùÔtƒC~Wð ;îÑ6¿ßÞnw›aå ¨Î-üÎFZ endstream endobj 286 0 obj << /Length 2303 /Filter /FlateDecode >> stream xÚXYsã¸~Ÿ_á·¥jG4oJûæLí¸œšÝuboå!ÉDBf(R>òëÓ(JCï¸T%«ÑÇ×݈¯"øÅWëèªLÓp­®ªÃ‡ˆ¨vwÅÞ~ˆeÞ&.'3ÿöøáúsž_ÅQ¸ŽÖñÕãvºÕc}õïàÓ^{mË4Mƒø—Å2Ëòà®]$« ·Ýb ßz¨zÓµØÎã8ˆÿ}üû‡_ÇSó$y'{8ó;þJ௠“8Ï„¿b•…qš1ñb™ r”ÆÌ|=GÀÈåý@I®ò”—ß><ÀŠuÇ_ÕJÿplôAóEßéÝ–¿ý~šÛ·ðƒ– q`¡a*zÐÕ`M¿HÊà)Pì“©dåÍñؘj²ý½ívV¸#bÖv«`\¹Ó0ΙùÿDyXÞÜßA3qÕ: h*ŠäZë`pºæÖfäe´ºÇžñ¯³ßx‰‘ ­¬í;8‚tþdjÍÎ_n…úµp9÷ºqèpJ7Á5jXžÝ$æ«ô{5J¶ÏÔo÷×w¿ÝÜc7ªÆÈÇãj§Lëú™Éþ%^ÄRF9k‡ª®uÆùMPŸ¸»ânc6VÙ×9U[³(üdÁA7ƒjBšg`¶¬ÉÃbOÌ+Ë2Ò~kͲE;iÀNº#¹*‡·ey0åö÷?¯¿>é…IîÕõú€r-“`3ôLµC+g -á¬-V%$êᨃã‰M·ò, 5kh9^èdq¦Ý¡¢ãàБàAå…|%Ρÿgk^xÎô ù!ý_¦­‰·g¶“•мL_yâ7ãé¤% €øÐ¼¸cÚªja Lý~±Jƒ\ÿ9ýíᔽnj'Zôê|¸·ô*5íÜO»¨4Y¥iœ“9Ĥ(n ›DtÕD’Üoºœ^·ì’@Úšš¤wœ1nw«[mUÃûaÓ´ÀŒ/¼xe ÑtF‡rƒNÐÔ£mÈ ‰ ›…iV$$‹p½^ Ɔ‚²·ºïIÞi™½²=\adãu'C÷dþEÁú-Ñg¸_s©†ÃÄµÎæ_”â@@920XÝ@0Sp_]ß4²ïvh)Èvl_xžêǫ%Þçæìewb)#tB›…RÄ`£²š-I¿€õ›V×oÒ#íÕŠõ•l @SÎLjîv r[COuÚÉÔrdÐܪƒiŒ:a2®z6«hxŒ tÙ$Œqë"à$‘úòmc…D)*¾Ið‰»ŒØe)¦Ræa¹Â°O{üüóœÅq˜E怆‹< >£óÖi°ó®çLÂò‚ÀCq• fí!& \wÐÜ:7)ØB¿(Œú€JtÝdiq† u+z'M¦ww‡EŠ ¥§@€2Ú4BîÚ B¦ô—IR’—aZdWYV„e’S¢æ0Fkø‹ʘÎ)ÓÔɯ_N6àôîLð—Ç02öýñ—ë뺫\è†6¬ºÃu½Áþõ*.àþéw9]ûÀØ»oçu~ö÷ÌiürSQ<)#Í“pU&—.äý匹_QaÃÎTÉ‚"BvZÒ^˜£ý—¨Ap̲²ÝíÉOÅÏlwàé½wb9ggÚ–;ñ_?I·5Eˆ]=Sv†‘Û½íaX€ð;†JI¹™fÎóp Þ’ŠûÑ’³7Y°1vØ- él‡óŸeqÏ_$6FAb‡)‡ÈFò=e´è²«Â»,‹²õÔZ½¿j)²§e)0ZâIi@~ïƒVW€¸ÁUVâC^fÁÅÅ Ì&×OW¥ˆ(gF}6’²˜IIF‚ûÖÜSž%ΤãÓí³”aíg§{&|@ÈŽ¡–FX'i>Å+žÚjMׯAÅìuƒ¬âúÊ#aS ²~§iÍ@{Qòt:­-€Ä6£Ž__$.ZƒW­¹!¸„ `u  ”³a×ÀÀnOöƳYÝÌŒTLæ Ül:Žhߨe°üò“÷R!yLžŽ‚±òª/Ë3=w³“Š>že §%š‹ÃÃ(*îè'vNPe/Ù$›f§´àB8ö¼‡8 ÄýY®BúW5Z½3K8û¼X§Vý`:~qÒ g j‰u,íÕ©F8 gU7ÇÀµ†kj¹WªÚiwŽwRgã$›Ñ0뎵í+)ÉÒ% ¾v›“Q® ‹êîúŸä<«…»‡nÛ3n¾°Ú!çš¿áÂb3Qt¡ÒC\™zÏÓÈ£5”8dœµÙ¾âBeÀ„UV×PEZ˜f AfÉÆÂ=öØë°¡¹‚&yät ³ýs=åþpÑ1÷!r8Ïýa4-|—ç_-E0³rí÷hðK§¶o ñwtaÔ®é6 ¢©$:Ö`¢ã˜$ðúx[z?ƒÆòÿ¦7l^%%Ð 0É¡¡uÚi+¿Î Ü#ÐÐ='3gÝgÀ)‡®Ò¸ðÄ.êÝX5nšwÈHbª¶ˆ9„ת1ÿã*hF`w=GÉÛ»vyóð鎌ðŽ'´XtJÄi%ܧʞŒ3œGÂ8]»sã™m$–ÑîT˜ŸŠø5fFXÚZo+À…Ϧ ß” Të+ (Ñ^¬j—€¤@^wQ á5ÜO‚ªÝ °ÿ;$Í!¨³=eÐ!^}74ÂŤ€!0¤iæç .ܾ-N—ñ1Võ#<‘Á½Ž1[ÜGoãËv'³ .÷<òTJj*[p²„,øã _2ñM?¿»¶&nµä~²ÚU€MÞðé 8éTBGÒØÓ“„ø^*ò®9Sƒ#ù$ ‹?ªo³”QŒ+KðAÙAŒœ¼‹Ò€…%çï¢@¸Ç̃Ë5Bt¿Ý]DÚ,–îŽ)çO•L±QÖÊ3S‚ Ýñ·"•'ˆK'©LHr2FœÓĤÏ+ ¨bìkiÝÌFçÇ©áòM4ñ#ahµ¾(û?Á,=½ endstream endobj 290 0 obj << /Length 3051 /Filter /FlateDecode >> stream xÚ­YK“ܶ¾ëWÌ-Ü*“â$‡º)Š­r*v”hS9Ø>p9ÜF’&9»ÚŸþº|Œ¸²TVMÕh4F¿Ðv>ý‚]æïÒ(ò2³ßç>CûãN:ÿ~û"P<—Ýæ_o_¼ü!Žwïe~ìnï—¤n»_œ7§¼ËþÆ¢È ^ݸÆÄÎÍM¸wƾ½q©=\бjôã p›ßnÿþâûÛiÕ8 ¿=`þ1ÉÞxAd„¿|„‹¢ÊÇò@Ý,s«ñ$½¼iÇØçA×ÕU‘ƒÙïhC~⌭Ìʺ<Ò÷2ê«ã‰78ÈØbý±¼9\áʤA»sƒÈ báy(‹K_Xâ ‚5骢DÌÃ¥ÀÜIær…mó«˜C)¯òzE‚W^%óåq¹Däà€O† ­ìÝs9 ù±è]>TƒÇ,†NÁß±—б0ã·´{ÅÌ¥cœûö¢Ú1ŒDG™…0{ªæ¨ “~úöý{÷õ»_ñ2næùa¦Ë²LàݸIâc9Ò7?]ÊZÅï—ªÇbr À&‚@–tÎ7.ñ!HŸ*q«§Y¥VÉÈ@T‘D½dЗµØ&4B4ƒ¨Y(g­¢`&¡6t0–/û†º9³¢Ô.ÍÁú£%ÃôU5Î,MvNRG•µ¿€\C:)JîNg´ÐòPÕï5I;]^õèÑ+‚íùŒ. ŸàÅ‘ )É$îêj8)‚ù_ %5‘áä DB–ÎóåGEQ+ Òbç9õºRÚHêjGAvåxá¥öv)Tƒ´¹4¤Ïû§ïŸZ5`ò‘qÉþÆž"ÁEÌ’fÆS>®WÉiãîðDÎÚÆð!ðÂèV )òyr°$åqa¶/ÙìghÒÏà ëLàô2#ü ×YÀ\à¸èÌ~l¬=4CÔC/ùW©OúFpÖ| Øwì2º,œúßÌÏ] "E«ûFWØDïlãÐe+´Å³ûÈnª”h|¥’ ѶËûqk/`(2 ‡ _)' +aLŽÔ)ú§nl}Þ©ceèfèi`“i˜"ø,o t„eS”²k?\À»õa±[€,÷ózÏ?ÙÌb/¬ˆ¥t&{<«‘Xðö¼ç¥•Èžiba¬ŠÁLr-PS‘íìÕžÐæúD-³PoHª ,²²n™“Äê~¥èÛ`Ÿ-]]f Aªí‘Ý>Ï/I Œù‹¶ùÃt£4.}Ã!*ÔÅs8fÝìgÍ‚r¡¶Ý6y]+èXÙ˜f{ážzUN9«¢ÏOך~ÛJ«²W¤ûKoÓµý•E²8TVNŸŒ£`oþ©&q–ÅZÔ’Îg"06ç4’¡÷ÒŠüišÙƒC%!ÆDpÍ•’û¼îK¥d¿]¦¢ 6%®eæ3"˜®Ê~rãÔâ|ù©…8ѪñëìU$É44®±²IÃéfÅEø×Á†U3t†ê\Õy/(¬ÞæÒ¥€.ÃÖŠ"#0)Gx} v/뤉Æe\æ©ä«`•˃g5³2’9€ÀåX~™ê-²'MhÁ^òMxÎy5G¿õZSäã´} w+Ÿò™ؙͭ/Ý5™«ûD´vXr,Ê^Ø1‰Y„sP Æ™rS¦\×ìKØ¿ôs™[qì Õ,€zS@d²UÐÆwœ_€Œ~Øv9¹~™c"ÜÊκ9ü¥SLæüƒe¢Áx˘T¨ë!0Òš¾Ë§+×Fúës”ÎÄÉ1úˆ}È>Ñ`.îgåÒX)~ê<úöBúŒ³JÔߦþR͆ê®MÄdï„iB/†HSrà˜š…ÏðVÁv^EÅ΄毬&Å—EÞ IË7$^q¦G™r‰ÛIÞs¶ès4˜/XvufuS#Ê€FMîÛN/Mœ*™ž¨WÝ(ˆ­.9 —éÉ$o˜,üãx°Ó ¶—ûã53œÄZ¤µ¦Š]>h YibÈ’ 9SGS´ýÒÈA|²˜(4‹ã¥™¥¢91!LÊB«%冊hðK–'‹¡–‡ ¹§è¤H‚â<øº7gɾa÷€urŽ5`¨š`pÿ:&ë,›rÔšÓ–K.HJMÍWÉ­{•bFz¯zws]yÈâeq–³˜Ìh1ƒ•ªÀA&ø¤29cÚÙ“ŒÊ ÿÕ'éf!$³…’LÝ ƒZ ³ìœAp‘¹Ï_´&‰SÌj5—z¾BcïØþvui1mBs.å‹z_Ñþ:AÓ0¡d”]){Ä o:ÿ¥GFFY›˜Œ QòÔÆFôçôA°óþ®"ìGm|,G—"©_>³ÐyÝèw+Ï`Ô¿«Ñݲ¹ïÆœ“£™t½XR¯Òö‘Â._;c`¢v;r/&<i1—jKMɇ}Ûõ’@0ï›LM,}C¦¿ú±[úü}ªi‘ï%Iº 3jM‚ªæ/¿ù»MϤ»GÆ<ï"/L#êÕ»÷/þµUú "ã¥~ĤÈ7ÊÂÇrÜX4ö=?ˆ¾É¢±ñ|“­=“±'i{ñ›[ýÐó£ì[pú‰ç§ñš‹GŠê$÷ÀzNaIŠ® ê8Ä/\£ºò²¨îŸ*ñŒ oªçOçlÊFîjåÒЮü‚½"Æö¦GDCzFtŒŠ_Ͱ_ÄóX}[l¼ØH |PôhiJdd1]\nטâ`¢!ˆ>ãp÷\ì1éòÛƒ@,_0!D$ºjCÑig´Ç0‘b #Úèb`Yƒä|‰Zqhè­mÒ.c} ú›šAƒ‚d&Æ‹Œù3šDîÞKâˆI}Ö†ŒŸyY~‹5 I;Ëö«5É„X†f–?"é¹Ë9sâÐ.w RÝЋèûõíZ<¢ áŠÇâü|MÑÙJaŸó‘ $‰Œ$’®g}Z”…^“O‹/Èþäq$^H$BòXYœÉÖTÉH7Ž%Œ¼46ßbm¦^JÝÕÚìÚ ¸6´›0éÞ £ä›p±eÅÅ…ýäàD R2B\û›Ö–ØÏ«WŠÕýp}Û‘2ÌÕ£ÑÃMLÙf]¤z™ù¹FnEÏfufª–k=Æ^TÂÚ‡Z§¾¦’äžËðª.Eʸa˜¾.R€æÊ!“Çe‹‰¼èÛa"Âo#eG…Ð^¨žOéÔFúQ^óÈÏ7<œœz:e>¥÷xñ[å\~joÏ<'ùª@ƒùª o¢|ÃBÇËÑI'¯j»y9¦ýë¥õ'Ä’÷ú.Œú–\Quj¶<œ. ¬Hu»äÓ2¦‹.ƒÐ!¨·Vj­Eª¸fKŒä­ž´ÓkNý¤ñš0ñ·ù ”xò¨U·ô„k,ËÇß¹&$u“… £øhË*\½âI½sà erVõ—?P`àø)‘ºaà%ôŸxûľQÜ2Bçý¥C=&„æðå$wt±Æ¥iZkƒÇn3/õD;ÉC¯qlÙghÏåò±¶­¦šcdœ©˜TY,­r•v¢¦G·¶¹zƒ½oëšÆ£q–o±÷ØË‚xûiöoå]•+Ñ·?ÿçå?„·ËG!y¾ÌA‰þ«E2”s%ä{*th5éü”Kr‚{†±•TLØVb uÎRê¢ÞA}BÝvó&ìÎõôãd¤âˆÏËW­»S^>$©ævz©Ä—æCÓ>6n]5—î±¹liB–zQY²ßm-"ß5×+»_D>0{ê§_C¿?!iú.LÃÏ’ÆS¸¥kouêºüK— õ˲Ïsè:m´ó…Ô£Ô3±ù êU²OÜ®øêEâðõoaÛ endstream endobj 293 0 obj << /Length 1301 /Filter /FlateDecode >> stream xÚíX[Sã6~çWä1™Yku¿ômÉnY:…2$Ìv¦íƒI xHl“öß÷È’_'P;0D8ÒÑù>}ç"“†20x C†ëÁly†‹§ùãÀ n/ΈŸÀÄ 6ó|zöùW!#ƒ LꦦóÁ_ÃñS˜­£|0Ɔä—QÀ¹^&#ª‡ë<ð9ßÌÖq𨱠dÈFÿL;û6­v”žèžÙõOÖý#„ 9š#¸s1%6És’n“`'›×à1ÙX/ÚàÈ› ?ù9Í 8’Z•S–R?¿Å¶~‹í8[}œßÇ 15CDìvˆ'îÁâ‚õûO¦Õ”,ÝFy6;Ñ<·4yƒù38ˆï—Gìb†ð[˜!Þz槺ÎRT–{ ;Œqà‹€h‰D˜*÷E£@J<üÝÇaâ‚æâúîóïq1›WûˆÃ4R!ô ¼ pã±[G‘0¯X&óʘ\…ÏÖb4 ˆó¨«5Š´ª˜ óå Ÿ<`jÀK¢š€™<i6Ì7’;ïî®/ÿì"ôkês…ts‹ÑØ}ÌÒe/Šœÿ9è0h-+ Ø žb¤©"-\dOaô"U0fAºzî:À!@ç½j’È(Ý6¬ ÃŽ'Æ0¢Ä4åvxOÆ“m®FR`CÜS=ÙL¾9–[ªRûT¥jªTZUI7*ˆµƒBSvÐK)áÜA~jôk«^b ¢FtO¬´ïɵ¡LšÜöî,œ¨hÑ+‚<Ó Hg—†ýôÚEŒz#Vb—A•ðÞZÑt;TF²Bèõ#=ÂÛhþ=\×0ªáfD†;˜ÿ‹¨_DÒ‚”ê£Îƒ´i±¯ßN£Ôw´®08á¨Ô2€âß‹ÎÏ’¶ÅÉ 2ºUGôp_æ/#!ÀÍYäDùK!®¼§Žªn•ïlSó{w*§m8mž‡)Î"œYLÏ[û7Ì#çkãd™=Y(¾'ˆ}TÓð K‚˜nA†Eó¸–W¾Ô‘‡k¼)A„Lµôý8?LËõ“õBë`^Þ 8$‘èàñ¤\]ÞLܤ±ƒS¶?ŸÜÓ‘þÌ 9ŠrÖ¸[¬ã ÎãW¿{ܤ˜è¡é¢²¯ýRú‘á ÅH—çW D©¿?VËùîy?DMÌ.ÎWcwCã×Â!§šnŽ…†L‘PFR¼G¤ìg¯âYž®ÒŸŠ~ÄÉ<µžmW>óÀÖî«¿±ÀãŸÛ89Eµt¥Öe/h ¥€w"rV츭Æõ{Vyª Éªu/£±l(¿ßwžr@mRK§îa„ßoÜ×ýG)¡ ¤Q/Ÿ2øÝ¼‚§”Ï3Ç‹ðS–… ˆmÍ0!§ëƒÛ»€lg°ªM¼»ö%)]„y\ªéCüM6þ:øÃ^cÒüyò”fžÏ‘ž]‰p‹X¿%0 ÝZ_Ý¢ ꢮR•»é®6I°r¾z/\~Ê0^YKÙ “²—¼ŽÖ瓯^;HJ…ú ÇUy2œ8`vP‚‰~èíd³u¬z¬$Z߯æÞƒý÷wqìÍŒÙÝxc¦e»gdШqÙx½âv6–öU-B†–íP,{»?²âZ”T¬2÷  ÒîK¼õ,£•ªx¶ãb¡<ÛÁž9âøÏi%™¸>Ÿò Ê‹']^Ÿ{÷piQÍÒlß?þ 6Ff endstream endobj 300 0 obj << /Length 2028 /Filter /FlateDecode >> stream xÚ­X[oÛÆ~ϯÐCR@¸â’\’òS§MS´EQù<m®É•Äš•Ûɯ?3;³4¥ÐI ÌårgçöÍMrÀŸ\mƒUEbg«¼~ØÝůo_H>çÃAvòõÍ‹ÍwJ­d ¶ÁV®nöó«nŠÕïÞõQŸÓ­ý(Š”mƒk%¥¯ÿ¼ùáÅ·7W†_(žü¬|"NVI Å$¢ÌÄÚO’ÀûnE^gÌëÝ’7) ³ ¥ñÊ—Jl·Lôöúzígiê…b«DLkÝ´xûóÿhñ“¾CUÀ{@–d.‹)â Ù핺:µ?6wMûÐø{ä¶/X„K5d”ŠXEŽôåâõ±2厔Q–L—[­@EP¬áËHH%éܧùªT„ièîtOš‰X†çö‘[6êu×ö=™3_ûÒkëÓZzee ÜŒ½¡¥ãuUZXŒ\ßZläôÑÏŸÚ¡íÚJéu[2îȼgnR37!e„>B"ë#ܱ>²—²mÆ"Ù¦Ná:Éîü1IÇGßTû%m¥H¢äÂDa8ɶ \&²ˆcãÝžxìÛ‘ä{ÃòívNù—ô©å0:YÓ´Ýpqphù ¦÷Æ<0A¥‡}ÛÕîÍè]ÁŒ:sqa9¸ûØEG>©ÇáØvŒåT!¢8 QkÖÛ¬¦" Pk_%!xª® ²ìÀ÷y©+¸/UÞn<ë(´¬L Ùp$C—Kð–ŽÉ!T{K¦,9ì”==5Zô~­O—•¾­ mï­³ÜñÑvO[‡ÌšSÐêæ¸&#Áú®´¸™0wg7ØŽšåÈuC‹[+Ÿ…–Õfh§±ËQÌ£î C²FYÙß³'š¼ sEÆIâ¹q2°·::†ålŠDM™à] ¨ å`òð„”½ÑÃØ™^`¢ŽÁA bêÙýÇú‚,æ¿úåë`ˆ,aÞ[•Ä’ü>Ku¯_¦Á/kgv(„\ -=­`¸p¸·ê„[p(¿äíX´d3…ÃSÙÎ/ÕT ;Ĺ\Fô5Né¹ÚüîØVõÒ»S€AùK˜ˆ(à/ßú5ää+º£GÉ¿ùÛ -Úî°èÓ¥­©CkêMµ6bëRݸ0ƒˆ/8s_”Î¥×Ó‡‹ νrùƒ ©2„.,`A=|z ?WLQ•ÜIØDO5€71ÒCøXMÚÍìw¼t% »²|^ŽiýG  OsÙ?‡‘A´Š°e”‰m¡…‚O"ØÂ?hܰ—>ß™7ÕLîÏèúê &ýíý¡¡´€ÿýõÈiæ×§Æ£ÿ“µ=ék§.õˆ wÏdv¦Èó³€;ý¹//åÜ¢är—|«ms\hˆ„Úœ7í:’ÞCSµº ô–*KŠSO?èªÂŸïunœ“OÚÖÓ;ÛÌ8ÛPÆtý…})ZD±w•eßµ5×soÁÙÙö‰ºÂÜô/§D-©A¯`1¢øW—!5L¡)β$GïÏ. —œ÷Ülh,NW› ü‡fÄ<±çæÐ÷›à®"ƒä™”ÏÃÄþX&µ(“Ê`ˆg> “ÌäÑ´f#÷4цm9àÙÃèb»…$µe÷4=pˆ©0Þà âW/ÿZI`ÞŒ¦‰,àCä‰H º‡ÏN$SIüšx>`Š¡åàôXä#_–Mü,¯%&a6{˜ 4ÍeÆáy3ƒA1 Ï3ݔ͎åáh­ˆp<³¢eìh8ï½hY¬ <ÀßO6vHDjãåàó8t^©&ÃÔ)]r­Ãð1ÝŽ%ÖRܳٞ‚Þê§šÇZ¸¼[”abngXáÀ÷q E^Ô~¢D{lbÁ4öW ›öy3hž¥ blA5'Ý@ÑÜÄ3…(-n†jTLÛå€6”½a&¶ʺj FŽ’SGùóîæÕ?.a$†)|:G 'Õch¢‚D^"C»´ç^I»Õõoz è(»òvtÛ.¯Êû§_`Ñò½ „H12ài³«Ú.4ÎJ´ }[]66yÂ[oz§šœ «Â¶”‚×¶Ñ4™û€’n¦Ÿx,•‰žD`›/¢ã Y ‘Å3Ûo#w”eU¹\7«Ý¨ÇãÛ­îËü©ÑÅ‚\ÍeÇÆ$[ÎçÀx9]„ÑuNî‹ýœ±šÎ|ÍL–³](Òðé÷}g“OˆËYò±b6Å'䌂9Iž?+çSâ\ü϶j{©¯¨¿}8n¼ýèù|[Êä—m5_ hñ¸ÿ@‹OŸÑæÅÅæŒÄO‰˜]:%„xž‘óÕ3DX²ÿ¨¸• endstream endobj 306 0 obj << /Length 2744 /Filter /FlateDecode >> stream xÚ­YmÛÆþî_!BË%—"é~icÄFŠÔ(ìs" Ð=q%±G‘ —ìÙÈŸï¼-EJ¼‹c÷evwvæ™·•ZEð§VE´Ê’$,t¾Ú^D4ÚVÜxÿö…º n&”ßÞ½øÓ›4]©(,¢B­îöÓ­îÊÕÁë£9÷¶[o’$ Ô«õFë4ø¾YÇyÐwízßrØõUÛ`;U*H×?ßýíÅwwã©i!{HyËßvÊŸRy˜¯¶¹U¢™Å?®aaœÌƒåVÕ¸ÞÔ5òûnTª”IÃ0ÄÑëK#IçlTn¢ýë~¼w4=¶tðöÃrÇv¨Knß“,wÎ]{æ~Wæ!áÇ ¹iJÞ¬³¦’}+G Î ‹°¨ÃDocfQƒTôjoÕ‚YTa7ÞÆÁ·Ã–giðÞÂáI´]ï–nŠâ(B‹v¿ßó©ŸQŸíÀlõǪy¸O‚£YÇYðßõå®ûvhü¥xí=1Bwæ/쥦¶Æ­7Ê/®D¼ë«ƒé-ïQõ39% '–(\J–ö"£­ž^. ¥s%þ©lI*·01Õ?58=.b„‘Ü{nè¤Åà– Ñe±Q9þ‚BkT:5üe`‹îƒóZéÞvæÞS›ÚµÜÚ¡v‡L<\]É÷h\óM¿pSO@%¸´¢ …þd{^?tlÔ '(g¥t¬zQÐßWˆú_ë<™!*Ÿ °×ŠyY¯üÁñŒ~…É$ØÍÐäM4èæh9WÝ×vft:@!nÎ`îâÞìLVˆrXpøѨ¯ÊغŒô2c?kCŠ„Î# ZˆFéÚæðgtœ=] :++ vqG´Ö8 H4¸™,ä»C£³n¨{9âܱ÷+Ü ÌeŠJ@ÓâIÅ68°LE²<Æv^ÀY Õ†›¢N˜5[àI+6)œ|'ñp’Ïg^¸ÞlA=MiØ„ç›òm ÁþªÈÄÇdâc™fW%¡y\ 'U:Ž~7~ô‘;>J4ÖƘfƒôÐ"­Aë¡òá¡ç<úÔ1H¸ödÛFÀhk «Íà„Q,£"™»¶$O&® {yÎcì*d%á«Ãñ—S(›ZÌžp¶Þov-«HËgŽaT¤ÁcÕe ðŒ‘åÀ;•oßT½pCº¡Kø@7‘óŽxUù$Òªœ\ã.¸°-Hë`K@‚NŠàŸˆ sdÅ/ƒí*Ré¸$ΕÝÙxnÞád3Od:YZVÀïvЗÃ[&7;h…EDó‚”-:löz¶>_9”Ò²}×íùdY¬¢\Q +xÍÄ·pO=ô:î fôuìLÙ;ÀÄÜ_òäãèŠQuuÍ­²å¯ì®½œlÙËüq­M|?=5‡ {hHʰk»ÎîzZXÞÄ9y¿€  1‹ @©@x`Éì:‹0/Ø‘•+ŒÌE$" 8B¿€"Ê£‹ˆ€€-œ ]’¬7¤ÁÏí0cîy“A(+9é§(ÌÙt2Œ¼wíIÖ¸\¿€¥YVæÉ%bŠvú1}HGBƒãÕóÈŠã‰SÃŽ$‡ØD‹ÆýzÔ;]5Ž9±BÇ­Ëc@ þÀÃZƒr¡¦@sÄQ"*¯éªÃQ 5‚“+òjï³Ü¨MsÀ€Ÿ :b7«ÇçŸ't|cÌ-ŸÈ_%BO’•1IpgŸ–ë‡QSS›ÕS5]å»}ûŠwKÓ0Êâùuþ-™Å¬LJÂ(ñyì»98÷—C3„mwXJDòš¹_ðÍb§_§7HÎÈk0Õ°ÐU÷C/¸}ªø(&øÊ ”BÆø‚[mƒC=ô-Iö˜xÝŸ( [4¬1í™å^OÝ'væI8Bõ!6Æ÷ ì de´·ñ¯jÔ™ªlLÄ4%eÐÝà–’oNYm,ÙÀÏBŽuSÚ=í¥ÈËÆôË;ÜÛpîë#Žˆò’2¾¼œ°žpÙVÝ,CkÝÆœd‘#€NÙJΩ'¯r•“i*ajJº° º9tæt┈v’ùcqls1_ lz·’ÃP•–LäÉʌݾƴ§SÛŒ©(–¤àùuðѯz_"ÚIóÝ+y¼œ=8rjyÂÿâ£d®žæþ͇î$ÙŸ¯pô¤$¾Z|Û,©(¾æiçµÜ‰³älÖsE…ªb‹nëš“_¦ßß"Pß}ä·*Lӕމ »áR7âð¡*í6Y)ðñÛìw‡r¿|sY¿ý®™‡rbN%ºoÏàÄ…6+¼ðâsã¯Z4eq6½Ï3¿.ñóÜ_m9 Ýd:ðÓ&וhñ’$BÂÒ ÿàçàDMQ]ÈI Ð4àüŽˆÚ)Ù8믎 fJn¹“-¨Œ‚oÓò,ü¾¶'!¼ÇRó†'LÑK.>Q ôUébE«PR#ïKÛôKÀO dØ&—R‚väž^½É«ÊèQœ Gªbg¹ÔºR8&ÔȘF|ä¿Á~ýf²Á®¹Â0òxÁ0ÖóOa…{#²Yr)b6»ÏÓâß`þjËÁ̸xIЃH{VWõ ¼L]‚Á>.Ò0Éæxá×îáÿý.!cò<64øú¦}ÆIoqÉø&zò?Î-âV%h°#pËj/Ϫ›a¾ùxß'î.˶_óûÇ{ ÅÆÉ´€PÕµ ñGË(x×ò æî­àC·ã÷'+¥&Nä—_ÈÜO RÈqûOv7H] ˆÓùººï0ûá‡säá;ÎÉš…dïdOmG?VåøÎLíŒwê¹\ƒs¤B®Ö8mŠ‹,8É2V¼¢CQð“?vß}üᇗLꯇÃe> stream xÚ­]oÛFì=¿BØKO@¤éô­EÑ&i—nh»ÚÃÚ>œ¥³}ˆ,yÒ)‰ÿýÈ#å&­‡­[8G‘<~“GéEð'½*òŠ$ «´ôêÝYä°ÃÆ#àý«3É|08_,Ï~|™ežŒÂ*ª¤·\?µl¼âb«öV~$‰?ùAšfâºóãRØ¡÷8›©¶¦ïΤ¹ÿiùúìjyÔšÅñ¿49¿²/OÙW1óò2 e’’#Y Ò/}‘q˜&"®K=š X™ÊDÜ»%Èn­‚GµÖ=;зaîéšÐò2—}÷Äv5›¶_©–à[?Ë…ŒZµzüú޾Eñz¶b0–eØS™„2#‹÷.¼z¶ªkZàL¢ê¨-‰JÔ–µyêdØn5ñ5”¨zÚiÊœnˆcE¶ ±·¦ŸÂ÷ëG*±ž:N2Ê;øq!ú‰Hwƒ/:òÐI˜‘ ܃3=þŒJXÐÐÛâ‘·€‘rGaoú<ÚèžÏß]“•tou7ÒluÒršåÀWÏròñ"©nS8õµË!ZçØ*xìݲâÜëìØ-pÿëa­jM(,G™“¦ð „XÍë Àó#õY ¬$C0òÚPˆyZ¥Qz×wàZÇâ*Ü„,wKä§§ÜX¸Qôü=>pËQ©ºÖ{;¯w÷6YÂ-XÝÒ2 a{ÃÍíçÈk€BôðîçÎK¸Hj½ÅÙo§ÖOY`@éD¥7ê¨ë¯•ÆÌ‚ï£4޲°úRiÝsZî-ú†!<Î_^¿¹^ü|u‰Ô퟊Aó{ûô!ßc.ë ,»·Poï1ÊË#ýo¦vT„‘LþO¡î¶W .Qü¾Ì[<í¸hE®4íüÂuìœzÒòì_ô-ìb|ãÕbñ_›wþC‹çýñâP·}§ŸañÂ×LúæÙ\šE endstream endobj 314 0 obj << /Length 2644 /Filter /FlateDecode >> stream xÚYYo#Ç~ß_!8/ÃXÏ}8A€Íbmo¼ [ÄÁ¢E6ɉæ g†–”_﯎9H´Š!@ÓGuwUuÕWUMÿÊß•{Wiºy”]mª7¶û+iüôý_éÖ \Ï(ÿ~óæ›ïâøÊ÷ÜÜËý«›Ý|«›íÕ¿wsìm»Z‡aèß®ÖQ;ŸZ{4­é‹¦^­ƒ,ó<']ýçæoÞߌgÅAðJ¦ˆò W)¸JÝÀ#å*É"×#á*X­ã$p>­Ö¾C¼¬ðvÀÅ¥H9ÈÐÓµ7«,t’äΩ³h¤žóýÏ?_ËÐã*Èœæ$ÃC½ßèŸöºòH‚;¶Ý5m%3]SY™Û¬‚Kë½íd€D÷ne´CkÃ$˜2õVizÒí©(u¬{ìz[¹$I㇮û* “‡‘S[ÞËw:Ó>ÊІŽùcÇ´JÜU¦,¥)cÒ>KSÔv+ãE-_á󻦄šË†„»/ê½îd7¤÷Î]­Ó(sÞÒ‘ýÅJ[ëžÍîL‘ ?`/ŒF~ÉÞ®i$uŠ^fŠ­í6mq+ºßÊØ¡¡e÷Òá3©Q·-+b¾¼¨‹¾0eñ?»ÕXúçwií¯§¢µ•­Iê^·#Ù•LGÃeXå!d#j‹_»Ñ"b“²2q_ôiÁ]„¤šøò½—ó£a04ÚܱÄëQäÉL/ª­CUöÁTÇ’Œ–5ødšeÆßÏðcª25ñs2¥+H@0¹a”€+E×ù…4[h|?üÜõEÄ·ì9^æt=¬Ç´[é|ro’Vtƒnw2ý‹{[Óéõ¬5Å¥GDcwªÅ§°Æ§¡œ%åuìRh4¸ûd[–.ß5Þ~ú »±«céÖ²™Ø‰Í%$Õú±s% °u•V’Ì’¢‰Oï»îs,ÜÃ’îbߣx u 2Á¬Ù|4_!¾½¹# µµtÕmnaŸ•ŒìÚ¦’å#Û?}GTï¤Cš6»~cÓ´-aMÝÅÞ«AÃ"Î\x~?ÞCÅÎýÁ’^ƒ,bh¢!â›úwµ c-]Ó-iÎ}7Kgš{VqQìf~6WXùA}›ô£ŠŽyÄÞFÜŒ.È<Ü–V†eÛ¬íCÑ)ëû6º;•å£JÇþMt TÛª~ÒÔM²ì\?°·5›¹_AÎ:@$¼Õw`¼×âê´¡S›jÑ–ü4q‘A¼J%¹!PJAEõû)Ò)²®,LóL°ÕËgÁ2Œ£ÉÎÑ~ÁÎqs3_f+ Ü((êMyB˜ZÚ/àxñðRfœk°Š) nJ8x'=#²hnÔM½ž°‰FìCoëŽ ePNÎï”üæVÑÔ2 ˜/´‹†Ü–VÉ%¡U­cË€üÀ ¯…êÙ¦V_‰È¬>@ŸËp4Û9±îD1÷i=€Ô¶’`ª‹<”ìi™ÓÖT{п¡„ÃKÂ%6ÔC¢*4·Ât°rD­"y­û¦ºôÙjù½‘މ÷$ÒÓ˜˜1’§ÊÏ2é:4¯ ”|²Ö÷ á d3tg“¼]6mGÇ«Ym¸ÆßÈ⡘3e!¶'xó,€èƒD ®¥±mäÛéwÀ î4µÕF+ßJ¯6›P'ʦt‰:lÃ^vpÛÓh9–L?@Æ4峂˜ *ÛöPéá QÂé‹Y£lÄ¢„ÐK]/ÍÏìïR¹1[™¦»âqøBâN¹\4áÀÿ“Žqª 'åçbö¦¨u°Ð1.Ué+(¼؉=uDô–Sµh˜å_HÕb7ô–RµAf¸='¢>¤y’\ •ÈK÷»éY­µ¬Ä›$L¦lfá%eGnDòž2¼¦ð«, 4<´½ô(Ë*ù¯âõÛfÂf‚¦T¨í€ì–—YÇìeï hvÍðþ6$.›_fë£ÙS×ÂÓÜ8©s„«V(WŒÀ×2²[Nûo+¤£FKâ½b­D|Pº˜*FtÃ;fwÖô§vHZ;Ù£ÐIy°¦Õ$«uBï!­©;)…žÅÛ¶AHEŠí=ÜukÄ ÂäüA ùM_ Ðël/tº•Û©m퀜4@ÅrS*ѳYpˆú%MG«ÄöeCËÈŸ;¿´”Ÿñ¸B/R®šÃê‡)ʆ¨Íà½gól ˜—üŸ·Ew,ÍãgÔý©{‰'ê¾|늀€Œ^ ¨á…C Rl¤Â£©­À¸êóÜÜ€ãù˜žW€¤—8 S7™’%3œ_ëù}¡Ý5e)J’cN_^Ý%&àO¾Åùë2Ñ‹Œâ‚Nnø’T÷t]uAŸß{ÎóëÁ:d#ÒÂÇwŸß~üx-_}EJùË"d¡` â È ²þ¹BµŠÄH|/w„ 0pî^ñ ü~ïHå‚éÛìzz½¤æÖvE+ÏpQêï@>> stream xÚ•Y[oܸ~ϯpÓ‡Ê@†IQ—´(-œ]›M»EÍ‘%ÍH°Fš•4qŒ¢ÿ½çBê2‘íA,^Ïý|äÈ3þɳÄ?‹´IŸeû>v»3n|üñ…´ë6°p3[ùÃõ‹?¿5æLú"ñyv½“ºÎÏ~õþ^¦‡¡èÎ7ZkO½>ßñ>tÅ!íÒ¡j›óŠcß÷âóß®ÿñââz<Ë(õLáÊç¹ ã@H0Wù±ŽŒï -]{[ŸK†¥·‡± ñî«¡´«J»<hÒ}•q§®š»s{$ôÓ†¿m3/ç*‚ÙžÄĪ·+³á˜Öõ÷Ž}‘ PLxW–¤Û¹³O±gßcN‚¿ª T°‘ZH‘<¡ò2\PrpÇCC™®Upã ³o„b¾íݹ1Þx.ŒtÕ®äC©›nÙ¨ÐÕíºtÏ~H»áxqŒ–Þµ;h{l²á›S2ÐA‘£`¯pn¯ÀO6}–j×÷7$ìÆM°Ì’§3ôîæ òÉ7>ü—–ì âXľrTÓì¤BCü¨0ôrç}ÖU·0ÖËyjÛv{¶mhø{U§n«U"’Øœ…&±ÖäºÂÀ° ¤"^ŽÌÙíß̬8ôé1ËXCÞþüzñu(šÜÉñãÕ¿ùpùÛ+nÒ]Á-}…2I´æ‰@äÅϰ~B’8Öº2¾ Áº!ÄjÂsìD~è5dns8ÿ„r|øB0Ù·mæ{>Ûz¾þp¸Ñ·ûb(«fg»Õ¾ªÓn¹òy‘mëºÅðºožÝV¤]m9‚a dJ‚`é±6¾»5ßWˆ£Ä9é>­žtij·úõAàFb­ÚøÇªÉêc²e¼¿B€‰òo+ùD6”"0'BT[ÞìýCt‡ÓøÜÍ¿.>^]¾ÿ¥p’¬ÒüÏ4cŒºªf¾üæÀQK´f›V[^‚”ß¼$¢±Œ—ǽü©HsŒÚ;¸Êi÷¨O·n„k¶ú2í0š°]W·]Ú=>ÿ‹u䕳НՀ<^üûòúæí›ËŸÿùñb¶eEæÿ²5#08X9YÓHù@[Aü$!¯TÂÝ„Úû\ñXÕ9ûqdl@£wËŠ5B‹'‡lž-«DM5;cÙ‰°àÆ~QS¤8ì¤ü±gQû“/7Í%[ðÙd˜k±ê‚#önE±ÚA2«¢\)b5–Òwbㆦ¿mB{ËØ>åšn9v›GÅJDÑÒ¢¶¢úÒ%›Qg  §cµÁ%•ÝS5'{±üT]AZÚz¾T)v—ÒW|. !³Η6—kþ&ͦ´‡ó´õ H)‰÷§9¼·>&{u¢:g§5MÍäW3ùµU+øQ1iô =6(ØœzÉe'£áj_œ õ¸ Ë“dãØa>@ƒA½°¤É‹à‹¨ÖšÁÇ\àoά¸e§™Áí1»Y ´È®-‘ÍÜ&)ÑÃw*ÐaW£é®`@ Y¡0¿E“Z”ýh-€ÀŒG£n6Ù¶NwýšIƒXD'ÑiI·«·#¢X¯x ¥ (:kgD1áø%ŽU „çÑ@Ö27bp¡¹ãTT|M!oÛe}9yÌ•n ÎQA./00Y:xäV:¸g§À{ö6èÀõµXÅ‹À|¼ÈY»,c¼³±ßmÛ Ûü盲#ê îË¢áuø|BæÆa’ãk.aÔ½˜·Û! {ovpE¢«l2-Õöè¬L‘£Ø0'•ÒщÂg(†}V ¥`ë-•¸Îí¡w„8° Wù¶»Cæ’‘h`+Çtölʉ7?Œ;–߉úô8©¼ÈGš+©›OHÂ٠ЙA&ê[Π5‚$•DO€$ /´½góójT"ŒÍJ«fZLBÒ"¡t=±l3÷Úñ:Z¿éVÖ™dŒ…õô/•HTô¦-ZŒR¶L¦ô¬©—&rÏ|Pàf~Ch ‹㣦*𬠇Ñ3k¬Oë¾å§F»$…,ãŒ"¨É€Áú _¾BgYê\ùÿýÈw|t±¢÷N`L:ËÈY´&¾‹Öù@YFÅp(ẅÛSþ8C¬ºu üÈÌÎ^ÑHÈX-pÌ7ïHJkêdY&pÐŽà`B íó(CöyŒ`¡È{DK.T*‘˜šAôX®Ý•Vp˜ðÚ=Zê– ³V?í¶¬\å,ßso°»R¦×C‰ª‹‘ƒO³K5´û?g®âoÈØÃb:챋Ò¥Ö‘VTîj¢ðûî1&š×óõÁبôÈ[³ãw£½«ž¼_1¼¤×+ã^¯ ¿^½'  ô"ã½£Ûçž_",‚èÿyÚ}â%kñr<^*¡ñæÃ¥ý!‡Ÿ ûƒLÓÜ(S{§‰<»7åŸnèJ y ÎÏÓ.ç¹¢ëZûãOÆH'·»¶n|üé¨%Ù€Ɇ?ë8¹N 5y…!VÞfìkžpe…û _ÑjîtÅpìÖ«%˜!PcÄwÙ+÷ùèÕF.~.¡«I1¬Q×±PÁèwûªi»ÈìÃqýÚ¤æïÖ.›]üòþÝÅ;á~…øËÆGN endstream endobj 181 0 obj << /Type /ObjStm /N 100 /First 851 /Length 1649 /Filter /FlateDecode >> stream xÚÅX]S7}÷¯Ð#y`Wº’VR'“(…2'3mS6ë…¸˜]w½NÉ¿ï¹Z°×`ÓôÁh%]Ý£«+”—B åIP†ÆãÑXá'‚Aƒ…_Î`8àç­¤Z+Ș 2¸ïy%HJ¡%0R ­€‘Zh9ŒéŒû™ÐžûN¥Ñat™RÈ#EÂ@aÎø€6VSÜÓZŒ“–÷&%2–OZd,ŸŒÈ2ȃA™‡‰„»£Ho¦·þd<+ÊÉ$¯Êºóß²O÷$ ÷†oq4¤¾œ‡&û„ºiËjTŽ:p¤ÆÞéñ‚Uëçz2Ž«¯õHÇ€ËÙìû [ì­Ú+®ªúŸI9êB¿XÖ]ì1N:É’ë‹…rßyµvn «¦ßºWus}/ŽÌõd½ûȘæŒa?¨‹9k|›‚ÞŽ ¤”rq궯ãQN»XÜÜÒ~y´ïÝÓã•5K#ÀRNÎ"=çiÅò#â|îvŒóƒt¿nFeÓÉ’ç¼aÑŠO¨ ;7lÂw»AßóÝic¸áüså¼WW&¶<;îþì|iÛéOi:ª‹Y2›WIQ_§£ÏÜO!j·w ,´:À®¨ˆXÓô·ßÿ¨dªÇj>™œ¿cu–T2›pÚR¢6¢”‘I@Eµ„;Dä¢ Qwøˆ"Ð->-ª+ßu°"=Å¥‡ËÑIOEúés5@«”²O ÿJÜ7)láÄeŒÊB’¡~üáfëžÙ(^·1›‹á»¶Gí^kÏËв»àŸdĽóbnˆ…úÃçzé|>x̵Jâ‹Ï$™çª\┣¶76±Áv{¬oSÚþ<&å³rZ7‹ëbû´¢¤I?ç%Äï«où¥û[¥•‹˜Uð7¹¬æIÝ\¦hS\néj6 [|cá þnÂiÒ‰$ó4ò, X¯ÌË8Õ»"øõ> stream xÚ­YëÛÆÿî¿B©Àb¹Ëwü)¹Ú‹¸çæ.(Š$VҞĘ"e>îâýß;¯¥HÏ=#†k¸ÙyíoföÔ"€j‘‹4 ý<ÊÛã‹€F›ý‚‰Ÿ~x¡dÝ ®F+¿¿}ñ—7q¼PŸ¹ZÜÞYÝî¿xWsêl³\…aè…ß.WQ{7©v¦Ùñè77L|÷þír¥ãDç^¾üíöo/^ßGÇZ?SF\ùHÈ„L}­âH„L²ÈWaÄB†Ëœ:+E, P,†™D~%™€)ÂÜOU*<|%\Šã©´¼õ¯¦3LÝ.Cå}:Á‡òlËü¦–~*÷•ΙßíÁ²Uî견—:ó–+åKåU{œ‰¼m]áø=þg‰ìŠºjyÒ4²¿o­z³Ô©÷‰éα5Wdxü¸Â#V¥©à”}oö–ymŠjWTûöÛ³B?ÁEnúY’ vp–x[¡ÒÝ“ÿÁݳŒúI2³‰p ˆèÖ=¶MÁF ½¢B-Ý¡0°c Î¸G{‰.q2>ÎV„J|¥$‚¯ß­û¢êB ûTx¡^mŠ4Ô±×Wm±¯Ð¾ø«èØ#­çKSiz kV‚ d¢-ŽEiÄv¤Æg,&¡üÎP —S¯¾ÃßÄ,4õšºïŠŠ kÌ $ž3;?JPµ2DrÁÊÆv}S1}¿ŒAⲸLÇËw¶Ý6Ŭ–:¦°]±ïëžüOâƒb–¾&ßl;Û­Z²Hëƒ}ÜÁ²qêµýý{à/ñ-PEË¿'Ór¼=œ­Øõ¤Ÿ­x–mÄÙ&±Sr<½5eI±tß²—d~&‚¢ ÷‘ X¡}Û®IÏ•›`uOoú»;Û¬»9ÇF¹ÅŽÏAì#žF€¤þÓÁ.WCÉ ž« ö‰».]=Y´é T8Ü%òé©«›—<ðp(¶¸ýÀŸàà¶h;9‡£Y±H¡‰þ¥­öøΉlIÖÏ\Åç˜1!͉gºº3%ÑšþˆÿoXeñÉã(š£³&EåxÒY¦ÁvýõJB™'áåÂü¼z$n*fÀ°|Ó 4?Çþreaõ¶ëIMvo|6ruŸNvgïœà>õ[-ŒJ =ôèz<÷RØ]k[üÛB¨2 ²ç^Íè{_hÞ7÷ˆ ¼h5Çò¿³ò¼äÑoFÃÝ«¹+²Ò¾3QZòð '%®¤¼«$”Ü bð"Ȇq´6Ž’µqÀœNe±5˜Hyf#pJ“<4ŽˆbRŽéŒ«ÂJ(ý:‘Ú1º,Ò¡ˆáÀ „œ5Ae”Z"Í‘1’"NKu‚üÆö£±ºk¬uL‹v€zZÎi6gYTìN%¸É{aTníÜ5€-ŠÂ±mÓZ‰¤93ª ñc=8d¤i˜aæ¬ÅJ‚„*$ȼ:†BN¥…÷l$CU ¾×Ól¸ÁâÀûAGyxEuªÉ—:*Ð0lp#ç!ÑØV‹¹ÖÕŽ›¢„â…ë@ä…šLöú Fr¨»\1­Î誳,þªf™Ÿe‰Û@:ÆÞïvKiºe©Žø!DAêäâjL’[Ut…)£vc ‹€á •*O¹,Ї| ¡¿¾Z¿~÷þö_ëï~óæõOó^–»Mþlå§uæÇ`¡Ç¥Ÿ«“¯QÛ“ï|Dª§æ!r¹ü‹êf©¯lƒùìzSVìË®€¶dE5P=ŽÊ¤ŠÎ[&©sÐ.›ïlceu}2{{¹sRh8Ìd¹@ÉKþÇm Õ$ƒˆca[Ñp8ٱˆ±Áɪo$^Fb¦ªy+ò³óÖT[Yd `Ù𺮞D¼>ÃŽÖó«B)tä½þÃ`“7[Ââ…‚ ‚ U*Œðk0¸[L—̘.qÖOÜÉ šà¡Ñw®%þ8ôºnEÂo¦  ±Ûýå·`±ƒIˇó@+‹Ð€*7/þ1×·ë4‡èL‰U”º¢þ É„9™Æ-U*$`=w‘r äðf®[»]C ‡æL§Ær¬xv|˜Ô Ú5gzT¶=­@êÆùŽJ=•©§ww\pÎ5Õ>4ãžì¢›ÃÙ4ÿÒû_ÀóÛÎ=’HãûE(Ÿ§P>”Ï#r(Ÿê4tüÐ)ãGc÷¦ÙYÙld}+ÏZH¿½¹æ¥?‚ÀÎÕJÉU£Ô¡}®ŸÁùF±ü‘«È½Vqjþͦ”!gøˆ)žÐÑ\ÅÆOÜ/ɤ]ê¦[WpáfK(Q³aÃ}a.äz.¢ **'©?ƒQ‚¯“9q‚˜`9œ´‡æŒQ_áÐ!*š:ôÿ¼dâŸrðøM}Ä^H.o¬Æ¯M8eʶ–qyMÂÑ‹øÁéó;PžgüDÃCz}¼ïqR¢&JsŽ3$!=GÏ×ißhh Ú¹% GH:ãÝ÷Œ6Ú)M¢cÿ`R_™æ^k¢ç¼E£÷ ¹tñÚõÿªÿœŠá`ÚáØmçKê R?ˆ£iOÿÏ9# 楈 ´uþBÀ•IƒGBŒÛ¬(ÌG˜\ñù4uL8Ã!†ŽA u\¸ix1 ,ñ÷ ÷¯TmRš>Ÿ±op„öP÷x¢ÎrèËOLmkné°HσKehÅø>µ<ö54%›,w…“Óšªâßûi¡+¶}ið•Ó‚<ŠlÓª¢1Бº¿hüýçå!‘^ÓL>1ܺ÷1§-¿¾•?Pœ_™!¬«mÙïìÎ}]¼§ oŽô±ÄKþ®ê™S\óàšÉÇð2zANfï<ŽëØelE'… ´m´«°öo,§9êgˆ½jb%Ëß}5hÂßÉÙ°3yÌì»Lò?è:h endstream endobj 326 0 obj << /Length 2527 /Filter /FlateDecode >> stream xÚ¥]oä¶ñý~Å¢OÚ`¥Š¥Ë““K‚+Ò^E$0h‰¶Õj¥­¨½‹Sô¿w†Cj%YîùPX‘Ãápf8Ÿ4Û¥ðÇveºSB$¥,vÕñMê ÃÃŽ?ýð†y¼ãæ77oþø}–íXš”iÉv7÷sR7õîçèÛG}Ͱ…‘x»¥Ì¢ëQwµj‚þp}Mƒ«¿¾ßÇÂæ˜cÑ1ШW‡x%UͽßÜ]Ø“®ŒMÀHÁ™®âgN|š‚ÁÌå 1>o42Édö£‰â* >jKLº2ºïÛ¶ÇÓ>ùÛ—ûz»urœ10Ã]ÌYR0¯õñédj–ŸñÌo§±gì¶6¶º/üÛ ^ÈŠ•-~øóí¹éFÁAÛxtkº‡ññë %}ì¼Jü ®øhºÑ^¼Eø?ÏY:è+ûzK1O¸(–òÞ8í•<¢c›Y‚8gkkš`0ÀïHþ£I·4¥î› 4)Úe.4;Ò„·#!MÌÇ[Ɔ%›ñ”'yQ¼æf BKùÖÍÈ4sÖÒºRØö4º …6¢ÌŒÆ#Ž}؀שð:Ýt¡Ð bù¨<¥¶+"έèºJåÂV±lÅæÍŠPE~ŠÔ¡üƈgG‚¢™â ®•C!¸‘ÊóèjÉb±©CÐãvC ŸT+»‚mKÑJ$™ØV4œ8¨¶°+¡î'ƒ¾O•Ë»=†„vöÒþ l —£KÚz¨Ñšºöi_,”H£÷­]Ô‹íYæk\™]‘›T‹]?ú3ÆÑO#A)®-³6îú]™§]Håü‘2Ö§Æs€ÝC†WEâ·ì­0dǬ`—ÖZ~AkMÐk­_ê±åºÇžõo®aÞè±Kê±õØå²Ç–)õØ¡!t讎 –ºiRÐõ®ãé­5ãë9OÊr^*Ô"Ëç=1‚sŠƒA)Wb]¥L¡díŒ ô=öC€,úx¬ûxO"8áêñ…—àÐàÑ‚gIe>À@ÚQi›0î^b–ù“LØÏl<­qbþìÞ 2ä}ê¶™ >þ=Pi}‚8O²<C’fÓ¼Xˆñò;RÀþ Ók¢Ži®ò,…þ|Ërò¤â•–‡j{PÆÎùøçF/(}ˆí¯lÇ]§Ë¿°ö¿¤%·Íïæ‹­6dènÜjÇC.¤¶ýËòÀÔª)GøçóY_Ž¡™¤â ¦êR˜ÒÚ¼as–¶©Kæ\*V®aC qà üXBÅ8Ût«ýÀ*† Mœ,«d„,˜i<9½Ñ{¡–…´‹»…¯uàëªqüƒuLéUi«ùRŠ¿:³B ¼DÍYdrw%\²¦j:Ó}?=6ôlFS¤>4^ŸhòÐÂjZ²`äXQãÙ,¸8x dòõ ìKΉ/aÅf€OŽTƒŠ"¼= ߪÀUD"<ê:lW™9M«ïZ^Ä–ö¬ g„M¯š˜»=qŸÓá$%q½Ê'¡JW> rÅq‚¸×\ª?4¹Š€K±!uFT{b=a5ÐÇSuPºPwÏÏILæCC]]GÐj0Sö‚6ìy̘+ÇÒ upy@»j[tîÞ'ÜÀr'~)ðÜÌU¾œ—ä뺋û7Ϫ=N€ƒú n$v“~Êiá@̼/=¶”Ï*×-[]˜ê‹ÞíýìåÍ"ã¡ÙòHjlJTØ¢˜Í .Ó= Cõ?ÉAíȧçñGúÇ­,ÓÄôÏUÊçoj`â9˜ 9CI, æOÓŠ¶ÀJ°Æú½¢-y)`ù÷A `Ç~pe‚ÝCãÙŘM½$NVMCPȈf`næ0íÇÙN…É ÷'U"–Ó7¤­¹í›ú¥àÌOd6]ºï¼fm‹L„̹Ëû,ƒ,V(¬¶(C÷©wù¶ÇGQTßoÔ¡¼Û£&5Mn°ƒÁâ>Ɔ²ó¿ø¢†‘ endstream endobj 330 0 obj << /Length 2714 /Filter /FlateDecode >> stream xÚÛnãÆõ}¿Â`±rHŠí“ën‚-ФÈú­)Œ15²ˆP¤Â!wã|}Ïmx, æÌ™Ë™s¿HÝEð§îŠè.O’°Ð‡»òò!"h÷zǃŸ¾ÿ dß6îg;ÿþôá/ߥéŠÂ"*ÔÝÓi~ÕÓñî?ÁãÙ\{ÛíöI’É_w{­Óàsoš£éŽ ýþóg<üûÓn§*.¥vÿ}úç‡O#î4Ž¿ñ‘¸óæ•9¼2 #x¦¼2;èP%š_™„q¨vû4‹ƒÇÎín¯‚f—ÄA_™ÚáSÖt#TfIÂ<ù!(ñp³‹taypZkËë•ã¯á¥ÒÔµíöíÕü:ÈÓ·—ªäñÑôÃ…wögÓË#‚Ÿ#¥íòB`垸¸ñ ‚^„*Uüj@`˜õ®ï†²:²„>õ §÷³×Î:¼ ÞbEp/x÷û3hOCGÊpž}»‚„óÀ K³9KãCªC ¤Ç½:÷Œ$Á„2‘Ƈ™Ä‹ õƒÃ$A\k/üöÖ‘üÔžx‹á©³=Ͼ¾nok{ p÷ uâ‡[ÃÏDíËø’< ¾ž« œŠd¹^kàÎ [Fô- /»ªyõK òú4Wlo醽ÁvCŠ&æâ¤û{Fpi]϶±[¶ñ>ñ¨ÎÉ´-b²s¢Àn¸ ›;¶ر&@gš€%®­v*@Dè{ÙÁ¶ £(Û H³6hh,ÜŽP •¹cǨ­ðz­í "Éà¡¥ZËU5Ýæ€w’EÜ#¤Ýy äQÚk?€“€=o#Ð ÉmèU‹_ñéH´MgO¶³p¯ãeñ•Y­+»ê…M–AÌ3ØeJ|W6Žl?5Ú9Ù0lBì¿ßâ?ªÖ>ÖÌÃX£ä)È̲Áñhи…” ¡US­=p™<Ëìoh‹û8‹˜Ç¸K*X ŽçˆÕˆxv?è0¢j"Ü¢î»Ý<|‡.M1 )ØrÒÒ/\bylÒ´P9D8TîÌ+òÎIäd¶áUSâ eÌ#X˜ãá+ìщ¿¹í϶РU_‘”v¨%ΉAW£Eb4kWqÏ™‹º¡9Ú®~#Fâ|bÍAr¦‹µ Vò› 7 ‚±Æ€1‹n7MgkÕGá¹y ‡ÆXO²ú“(Û¯J–Íš˜šk,¾V_v& ¢êxxnë£íFðûaϼTuÕûŒ"Ë™ÃðC•“oã]L(Ìàî3Ä5ŽáCe >Ôõj…§“Wí+ë&$ ¹V¼7@^fo2ü½]Æ)×–up¾¡ó›…0wfí±Ȩ&³}eÒNß³•¤]8òÑBXuÐÉÄ[†×³ßv‚ëÚ®$E›¢ ®±àñöÊñˆdÛŠÔ;¹úÖN8x+”|ã º\§HEúz«:¸ÿbúžÞhP(i<±#Žç9«"Ç9 Üt1¿ˆ~áLœ¸šœx~›×mÈÄàê—] i@Usî¡!:·Õ˜“ îoJ!Ûn\o ù’>n»¨š’|\'¦ŒÝì„`®p§7AÉ WÓÅMÇ À²©W3Ô(øp[rTÈCòó®øúưQ}‹‘Õ!Α@Á„rΗªñ>€œ&ó3ÞH0qù\âÀ]­æ¬óŠÃf!sÇÁÜVaúUì{qpt¸¡"+‡õï`qbÜhˇ™-O˜6²fB î³L)FTý™½¶äÞÓO‰Þ{ûé¼]ÿ@AšéyùƒíÙÙòb1Æá­*H©",bå ûoîŽÃ"]”VKÿôöD…$ûƒ];@¼FYiu]·¨iÊÎ `a莆M*!ãKÂ` ¾‚–=?>ÿðãóãOÿññ‡§OÿÚ&*u=òˆì*ʦìFGi°ô@d‚°ý:~}hŠ6ìv ë`”àuÁš°âÊb[%—L(¤®Þû‡Íu~•¦Ž},«›#åÐN⾄yëªÎ޵u¾ª­“¹ƒšg!Zb$îXßx2PJJã-*dÖ.[" è €:N¦ŽHŒ‘$xl¹‚‰àµBôkwLRŸ÷ýoï×ö€½ÕNúT|¡_ÇŒ@‹ê ²wÝ]‰±»‚qŽj²À®IYsœoù'Ì ¹ÊŠŸÛ,[­ÿ“ˆƒ¥1ùPlµØrè&×¢ 'o8 5±Žh} ³Lg¤²>:9ÐsµêŒÿ⢰‘´x“³gT¶¥ÒÀƒ?’ÂJH§C.HÄ€¥ŸèèýûÙhb=ǹìÞ ¯íÌõLr¡Ž¿Ø7{õ·ªnªûÀ 55òF»¡nÃ/»ëŠoQ謯r:Crç)ú‚8£ŽÓ•²Ñ¥®ˆ´+¦´å+½Œ’çñð÷bªYï!î­aétmSý.äÄYî#uظjò¯ô)÷2/ájj’#‰¸_‚¬šƒwä+:+F¢æŠ®n}QRRŸÑç °4ã.N¹ï¨ü½¨;Ü´™‰ÞHΓ`¢ímÉ)ç‘AœW¬ß‰ x÷¬f¯¶±‘–f¼ÕÒœ :ê”lDz±uq³ì!à.aR"LÂ^ÉÆã§z?'–q; —¢ŠÓ$ഞǦD¸Ë?ôlŠæÙŽ§‹2”A¦÷G¤cc¨ý ŤÁǦ4W7Ô^ç`ñç(ªÓf1ýëaìÒJ÷}gwâ_RaKæùœ.uŽq,œm­”Z¼qÔ‹Xöc ô7¦Ó èÆY‚”¥ÜFE#ê ù&ø“É#û¤—©ŠŸ5+l³ê ,<¿ñ 1.ÔêEL× ÔÑ-öï„Ò"sÌcéËp¾¾K“lÜ- õEÈ¥Z’رáX±ëª(»õ¯šýë§ýN¢°æ£Ãv^PZçþ/ûi:wi! ›Ø“)éÄk È9n6Ü匤鹦TÜŒnûKò["ÐM ŸÒØ–ßÏwmè?,ƒC¢>=ÖqàἕN„Ä©šŒ×ˆ¥¯"lÙrZqv˜;­¥õÇ3SŽ—®…‚Þ¹Ýî^ÅŽ†½ŒöMfx´÷2ɉ™ÐÐ4£'I·‹Kyò ÝÜtÄSó W+yMGr’æ™mùˆÿ1eE×€Žï†üÝ >„ál´x »É»14¾Ñ „U²fäûãçÛÎÂ/¦i¨€Ð± ~h{+È!@Yæþ>R ô¦•4ë$¡Øí–¶s %ƒÀmÊvèÌ+©EvD¤4—Z˜²t­M)|Áß}€ýØÀ#Ló<XíV_äˆÔ½k^#‹ï±Çq+"®ÛŠb™öqøÆeîFqøÆÂ·‚.]ä–‹iDqómÊñ7ðìTÂdh¸ñ#ï_™ÿIQ¨ endstream endobj 333 0 obj << /Length 3049 /Filter /FlateDecode >> stream xÚkܶñ»Å¡_¢¼ªHê™onÚ.£ˆïC¦0x»¼]%Zi£‡Ï÷ï3/RÒ®ìÚ…—‡óž¡Õ]ÿÔ]•ÜÆÄUZÞíϯšíw<øå§WJàv¸[@þíáÕ_̲;•ÄUR©»‡§%ª‡ÃÝ¢Nö2ºþ~gŒ‰Ì÷÷»4Í¢÷£m¶?ðìOïßóàÍ¿ÞÞït¦t)}ÿ߇¾úÇC8;Óú+‰DÈÿMe^¦±2)Siïu}Ä?] T¥e]»¯Û#þH£ßqɽ𳅠նa¸®çÙn<9®ê±&|Ž¡÷*²£åÏõxª[†…]çø~WVEôvä©z`0Xâ {¹4õÞŽu×~7 _àž;eb•1õ½.À8 Î}¬›zÄ“‘Ú°tüš¦ÞÉÜÉŽ<2îséNÑÞÁé*üf¾y+¿­Çà£ÛîÐÀnÓ[¼úkø¥MB48ýäúà—ä+¦¿k Öd‹_¦¦Dj$ˆÖˆh&Oï4Ð]ŸItýxâ‹—&ž‚DoZÞruOÆìÏ”; äÀ¸/Ž>ðÜ#mqóQÎC“ŒpJ¼Ûºé4*71Ô8è‚ãñB² 5 ¤s8DÔ€T7_ª®Êó¸,*8‡ð‡áÃãôÌý0 øJÓ ›Üxè}×M‡+€¼ñè!æì4q[qçN›*Ö©ÆA\‰ª™Xǰ6×Ñ;Ô{vÃֱȅ"ν}½=€--€óˆt¾ñ8Í ë)®˪~záËVq×È+œ ˃¯‡—Â/"™ÿ Ë Hà¸ØÈ`л†ä0œêˆ}FP†,.¾Û•¤eæŠBZÜ7¶>¯„Ð8îT ,"òX‰3}_·{Ò7p(õ¯‰2-AEŒž®îÉš•åÑÙíqòdÛz82g=A°Ñ/M‡*ñruÂŒ='ò†‹Ý³QfÑ f±±ìù3Ÿ^辺Pxߺç᥇[ÕÛ ¯‘Ç@jàéhN”]:¦ ØŽøº~d€Ú:ï»l_£CÁÉ}·rŸ²åï  uÅ”-óåK}¬û®=Ëñ¸ªŒ~M²/¯Ás»È7TüEÇÄСFà uãø´"Bûç ìóG<ŸH¾ˆôç¦öàúF œ›þGBÕîÖ ðÂ21`Áä• ‹Ü’,ô86ÞN°‘•Ãw¤\òBUå¶‹-‹8]?JOô_–*ôy¹B°)«Pá0ÙJH_ËQcj—“ÐëÙ•ÂBÝr,eFkö¸ppà’ u2M²ÔfÉ%øó©–„Œ~¡òŘԕ–@ú{^4 –¥DêýZÓµG_¤]%E’édß”ý¼Ô¤›°¼ì«S7 <'åóèÆÝ0öÜ!ÑŠ2´ÚB%TídHN“½ØGT$„E Y¢GÅx°ØÛp念¾†4€3p ´‘&¯AIDœÇ‚GI¢ÄGÒ•î©Ñ þ*acãt±7”ìr$—=vÕ…ÝL»Ûš2ÛÔød‹Æêà»N`b®žûƒav–‰TN8Ú)8 ¬$8,{UL¹’Æ/«"{”Ô{¡4¨Ñ6«e¯·\ʵTe³TUÎÌœPÚ‚Qá:UêÊw²Ô\œ ¯†óë:ŒöJJe‹è1ø%A7ËWìÿÙ¶!1ÁX ®S#ÈP ,v2€ /k7z«A¹òCŽ8šsÃE,ë2h¹`åö,†`›ÐÝËÆ%¸7‚áÑ—åÜ-ÝÍM¥¹4\…ÐMö…íªÁ„½Ç•j…“zö/w;HW2 dU¬Ji;üÂI r 0dv[îL .´JΈ(|˜¼ÉŒTœä!—Żɸt\˜l‰bð¥±/_B›Ï;Ðô™nî]Â[€Tq(!,¤÷ßU{ û 8Ùú×6âRé¯h 鲺Ñ*]–A«p<×fÅq\õ—W¹ñ—Š*®²ê«¡TŸ©¸¶—q®³ ÁJPË¡jMÔ•ÿûŒpTœ!X蟅ÜÙÁ™u ’†±²O¤•¤¬¸4§O d˜Ò€)e90`ˆ ¯±E\¢ ¶×sîôÈûÉ"^J>Ó¾Îñz炲D“á— á@Ù Ž'-°¢2 ËšawŒ£Û®É¶<ò1ßdE¬‚iRÑ'‡O¼ÖKRêì*GÙhÈé?’GY9Aé9±§ 9ñ2ÛMW²wÒ=]·Ý­’nv¤Þ>áûQBqVgjÝ^Ç,ô¶+ (¹”úÿÝ ¶.ó‚ ؾá0¶ÞL]U¶¸Ä2Ç58j¸ßÃù Ñ>S,ê—Tq^V7UáÖm4¸©oðÄeÃry—*ã@…ϸŠÉ~Ûñïãd{+—r¼$®*[]¨ÌBM Nä)~0_øÁÌ3f9¸â\®Z¸«QÆ…*WîwàÍ)0là/Sƒ®¯5³~ –†SˆTI*YE½£¶.̺ym' ¡ºÊÖä`j@‡æ3âŸú‹nßM|o}Òs$/À=ñ[iQP> 3¿uظxá¹ñÔwÓñÄ+œÏ×mM\"‚¥·™5e nÊH9WH†xèÉ fÎ5à–j¼(¾”šÐCfy“¶QÈ¢´ £ØÆƒ Lÿ;Î’„‡¾Q™i€âþøŒP6Ù endstream endobj 336 0 obj << /Length 3312 /Filter /FlateDecode >> stream xÚZYÜÆ~ׯXä‰x²Ù¼œ§µ¢,Ù°HÛXp9=3sÈ ›Ô‘_ŸºšÇˆcÉÁ>L³ú`Uu_7¾‹à/¾+£»ž ð‘EÁ¥ï€<¨á9œjZÝg«q8™ö^Á`ëj°]Ëô½iì;$›Þ1eèxçà®;Þg> rV]›ËÐõòÔòz+«ú¶jx¦­Î&¼Étðfã FÎ êèn³,»8 ã”ENxÐQF;ytªˆ”Ï$œ!áZž»’Éì™üŒ”²„7;Û9ñlj\pªZëÎ_M¥x΋ZÙV8éÚæöQÄ&J‰1 òK”F†µŠ¬ê(°p :¥a¥-¤ˆÌoòÕ„·(â‘h°DËI´åQ«ûá³í`+º ZØ!`LÙÒ˜’85"fùèÜî{r¦~‚é4Þ¶²Áß·øT¡WdIpFÇf°—Æ0¥îθº4)Â8POŒv‘€O|¸V“ o«zÃ4PÑÙÈ騴|abÉú2‡À½&y€ ¶D/‹0Êb/úŸ¶äLÃ\å~Åë7[ÇÄEêËOqløZåaVæ+ˇÀ‚ 'ât0ðªÈ[ÂÙdH+Øb)‰Â|y¥ìªŸ»TÜe©ßȺ&ªæ=j·"‡rL£€BœZ¡ 4Í—Lþ÷þ^æÖuç…Û« 8„W­Ì§º\‰Jx&˜ð¹'ƇÞüg´ÄXóë7²ä½NÝ8Èñ)± =2‘"ùC=öB"ý åøN†Ì©~ Å4½57ܽÙ{Z!%K)\ÀI ù®ï=ŒmÍ+¶®NçaTËË««¶ká½ý¯yò±æ“»SQ¨òɘåíH1”@$¼öòÎî}A½à¯ÑÂÀDáûhZ§ñ—–‡IV®Lö*Ü'‰°$Ñ~®c:)¨¯ß„tÜùÓ0-ä´—%ªÞºŽâ¥¦‹Àœ»|ËîÐõgžïÀ“¥ ý™/‚gÀöáÔÆº ÓïlÅ4ƒ­À ÒP«xuÄØmõ£™€nÒ•nz°KÛ Bq¼?Ù)ÈŬy{²ó|§ “1Cà/[(pÙuÇâIN¶tx.÷þ Â.xH'ïñ§:¾$¦–Ý÷¾ÐAˆW_¢°nËÌ{s^x ¥'ÌžâT · 5¤i(ùÀ`š[ø8¯ûê,Ë:þÛ=‘âáêh÷‘Ù­>ÐÅ…L„ÞÀÙÇïîS¸÷Þv㦗^ì©z¦ôTF“R L¨ÕÀÄŠ G;åp¤âÛØÃ9 –e΢C§€>.ØáÆ‹ä>Ìèè7‹çØx}dåv+¦%kŒÌ`™M ‚ˆMÃ$2ƒõW‚$/,#Ï Îm £¦myeÅ$31ÓkÇ.=ÃÑL~Ðó&²3bÑ0ÁÝ€F>šz«K‚Íh˜`ŒÈþˆ#–Y˜Î9½Æ £S%Þ†ãXœ ©ÇRo@X9|„E§Šâ§¨)x ¸¨1•“! ž[ßCÝ$Ó(_+B”še]G†·u>w-&Pߘ((<[\1ÐÍ)¸Ø[QYð[Kû¾1û£Óɹ˜RÙ[ÃæÄÞ4œ„Oö²é@wfm²štÆ+0ªß&·Íz8±·¿Dqbzb±ñRÕŒÙÒÜ ˜ºfH³{ÁÉUã:&ƒ?ðR~t#Àçc³áPõ"Õ`z✯o$4ÇÃ…'qÐÅiÉo>(‚ õ „9p Y£?ñOXnæ¸án'ÄžH* FG¾« Pšª'}À°"Ayì뀾kdrâÐKR®òÙE%ÁU$GǤD%*•Ъî7”i³Žì˜ªUq¾týpÓS‹’ìt0Ôo»Ó ­ÖâÆ]L§3žs¯| Æ'_j¥bœ8’r* páËï(tFêËP~€v²ÏÓý‚ëæy<2©äÝUCFµŽ ÂæÊ»`MÅÃÑ)äGÝ&‘÷8®rt‰_ñÄœT`noÀçtËvÌ™ äãLmÙÖ£€±ÕôRåëÿd®/íqļÊ =UôÂË­Bx}4ðŒÕ”ZhfƒO{@ûõ@…7$uª¦Ã#j7fØ/§™s}¾à,”RTæQ `rÍ0.öñ†n´€ùF^~à2ñwâ„B@S5†¾Ý (ZßK¥ó ¼OÓ°X!Kóá÷½¤órªåfD©r(sT«Ê´¯œð)üBÑÊÏB·íeBôZ‡ÙuFzõÁƒ®4!OQ½XFÞb¾;|èÍŽö¼D;d’rÎóbï ì­â2LÊøÅ‘"*?Õ6¸ ¦l2qé°/ÁA `{T†j-ÿ:((‚8Nàè½m„ÆIGQ3F” ¤bTTž†½yxýj³vŒs4÷ÈË¿÷è c†‘~ER$ažæWºmáò°,ò/ÙâÐFç8r}p —•üî¹ ¿iŪ#A>“²E(ß×Ä— üåãþr\UÜøœuN?³¨ ˆ,¿¦M»·„òï[Ÿ5@Q@*3ê…4° É”Êd©Š5¥/±qÔõûÿ†8ÉdÖºÁÉô+þÁÔŽ%¡,ô=NÊ%´L^‰¦H;™Âáã´Š5W^wÝ6â¾T*€c7z´Hžú0(ú¬NÄgq¬é+Ûiܬ˜$žùœØÃiÙÁ™æ g¾?™Þ¬Z?RJ¢>ð3èêÓè?5âf.àÁ·¼|V•®ÝÞ–] ’$Œ0/Ì7U{«£Ù4¾ä›l|Æñ°rFɶP<ó3¬ƒe¿ÞF¾oºÊ‘Â[QVø*ÈGqÇÝóTÙfÅ| 0Ý ´—øŠ?TW¦áÜå4€oࢭ˜úd‚´ŸðáºÚ‘´“†*_£ZÆ *Gíð–q8ˆOÆÈ£/åqªÃ4þ?z‰I¨âì3Ð\Eáïɤ0, JUˆ³«ŒÂqëèµ £”ùà Z`ÛΧà˜K+{XJ\7 ýõX¤ã gzË0©”p_^5o™¶7øÕÁjÆ}EàŽ° ÅoNå6½"ƶwÛ‘pý¥b O8ä`›S°eŠDÚHÚu8ÂÞUm/UóW0¯H/–H‡Ç3£e̱6VP4Ô#ü|;x/ªnlöÜ0¸àLÚYæÝU£ÂM‰eéiÀ¥8¿©Dܾ¾é_xw›{$ w˦,|CïЦ®ô;°h§ïz8¢V%÷§·êñÅgÖ-_Pa¢Ó¥3à½>m~eÉ¢°˜ ʾªLÁ¢ ”wÍ«lMÔUûÇÈ Ò½âFüH´Ÿp,SúZ$AÝC«à!H'›½å;xø¹;ï¤a—W­TIŠq&=æ<¨ì^Ül öBm_¤IÛ÷ìwOaçݻء™¾RÔŽÍ—­ µ6|~‡G'¯§ìtPêÏtöžK˜ü3»"Îo·»÷ÖÕ¶£Ù‡Ü xžžéc¤¤Ì«¯xa>c®Úv»«œ{m‹ì<ñ…Zú½ßÂè,ê¿m´o‡ùî»è\ñ}ãËü'ó€Á±R²šs0ѹ“ºéq¨Ëä ½@…zZ <#Žq»ÈóÀïšÿ—a?öfû{Œ•ÒË—Ê÷U¨ìpÍÕ· ìÕÞÎ|TÛ*[ä¨å5 7˜rù Úò²½‘à⼪Éœ[¼@䯮­Ú m]Üò(-d&s`2i ÌÅž˜p¹ƒ¨#ÿ¨ù:Ì-*üŸ•¶56ÓàDŸíÑmÉŠvž‡™ÿ’ ¸i].¿X ŽIÒ+Ù¯pÀçˆÐïÖP¿´Á¦êè·wü»¬(˜‚ßâÒU-…Ô«ÿf˜˜øš~ËkŸ™Ðk‹dÊ::®Ë'nMwÐòÝj gz~uæ›°°ÓO¯å¡'Y¼Ì¸øŒ}ú¿ˆvúȽÑn’¤LW¨ÒT<GuÕ nI}ÞOÓYQ@Y1}¿‹ËÙpù³7ÚÃ=¬4– a‰TÊ_qøÕ†wO¶Ô Tß̵‡Îç’©î¤î5_ûúõá: endstream endobj 339 0 obj << /Length 2100 /Filter /FlateDecode >> stream xÚ­X_oã8ï§ð£s˜x-É÷žÒ´3“›6ÍM2¸Yì.ÇV£Žµí‡ûîGв§Ivš‰É)’¢Ä þ˜Ú†/„:¯/lE-ï |ýtÁôº>,ìלּœ]üôÑu f[¡2c¶Ü5KŒ_Íá*ÚÔ²ìõ…¦ø¹×wלÖQžDeBÔOÓ) “Q¯Ï]ÆC“9½ßgÿº¸žµº]Î$®|‰ÒÛEÉlßb7¼À±˜pjý´‘‰\ö@€kVu¹kßWÕ<^Ey.³ù"Í“4¿¯æ» þ‹` †2A?sIäÝí|›æµà` ç»fš§uÕE9’¤D…ÿT¬¶æbĆ ÛåR–óDV1)éòʪ:Ⱥ¯1Šc¹9®ð„¾ç1u‡97›,£:-òyÕqö;þÑüÿ#Žtq­÷#¬Ï-.Z>÷HÌl%ÁÞ€=;© Ÿ?Ú¸`žo9¾c¸kù"ÄÈøõwÛHà#˜ŸŒGµrm‹ûF™1½ø÷¡ g>³\Æ”(×Öá£Üãù´(L"¼õçKd<ÑÞ{ãÏ¡õwÀ~³™#³¤"t‰Ì‹Z©o—O\>qq³Xj³((¤f‹¼¯w9$»ñUGi.Ñ ¡ ;„¿E8¾e¡gñ04\Ÿ[nð6ÏØ¶%„«D wÇ3`á dÇ7JØ€ƒûïGØžåzâžÅvHȲ²z}y:ÆCåú3Kt=3õâýýRµ*¶™6i¡·Píg¤º“ˆE.©« ŽÞ ,‹,+Pü#$åÏ:#»Õ”Ši'#¡¨Ï‡óÁÇù·ñtr=ýäù·¼ÚÈ8]¦ ªT4ãËÓ¡"Óʺ¹nsmósQÕý¬ˆ£ìG$í ¯gº@Žr8žrY“¢F¿Ù®-­{‹f£ ÌÙI¤£ÛÉÍhüÌf¶m¾N­ øtŽí“oÀæ@››í†x6eQq‘U; ïi|9%Œ¯wÍðóànª}|;š“&î*=dž1Èp|XùýúëÝwbOÏ’t9ÕÞÈÕ9®‡·4|µ£®³ÁtÚb<çÒúàÆ¼Ùp8šÍôèqWæ)æéx ý2º¼%FEz½u×C±*m›É빺iW]zO33ìû4]ÅÛ¶ªiÖÝ. TØ/‰R¯¨0Ú@ø…©êÒ<ßÁ4• ‘x¤P©ñè#@þUAVu´ÈÒJÔí–ÖíÁÍ#{P@sšÊuZ«V'TÜ^û!Ú„ç€äö)3z^Éxh’í²¹NˆwjPC¯0¨¢µl4c‰PODˆJýeQ¨ ؃I欚—€Ú`/;ŽÚÍ'5ǰ5„ó™³]S‰ëo宆AÈ[z‹Q5ýЮÂ@ü¶Á¥×¥ycõ»ŽòéX‹ÈpBXñQ,ì¯Üìx¬£ç T]A-(Öp¸þü˜‚j5¢óGËb›'š)o>jñmDa… u±Àé’8Ú• XkLRzðúph^>Xÿà@ýÁÖNoÀcšAïêØú™z["l:œCáØ^ˈ׋éürp5¿¯FãOÓƒÚlßrÑ0ɲ,ÊêÞ¢=ŠÉr[7m¾D$(ptÙ°wÂïîuN®»ÓøÀ¤MsÕk¹Ì6§ÅZS%Í7WªlUš5™ââ¥;ζ‰^M¥Äõ !°Ý "ÕD}VÊ)%iBÕ—$= чÀÿ¨ðÓÆ endstream endobj 343 0 obj << /Length 2689 /Filter /FlateDecode >> stream xÚµZ[“œ¶~÷¯˜G¦*Ã$ø<ù²vö”½N¼›¼$©-vÐì’00°¶«òãO_$.cÆIŽçØUÔ´º[­OÝ­Æá*€¿á* V‰~&ÓÕvÿ$ ª¹_ñÃû×OBË·ÆÍ„óùÍ“½ŠãUøY…«›ÝTÔM±úÅ{ñ:mÖ!„'ž®7RÆÞu—×En ¦¾¾¾æ‡g?\®7QF™ÆëßnþóäâfÐGÑß49ÿÚJ•J?’­ìš?ÖQêé Q‘÷k&ïÈnzÝCnßüÞ·Ór&¼½|Üá¿-ñp¨ÊmÞ•MÝòûö¡é«uè{u{õÓ›7Ï^¾|¿ˆˆž³ÌÍÉ[ÖFëb0s3%>‹JbŒ…BªEm"XA&ðúQ X¢ð}¾ïpõŠpà1ŒÍ î½€ `ò½†„×.ˆŽÉ|8Ä,îç5F&S6="#€#3Άqï4¿(t»5å[\Ø—vRÃvT€@ˆºy(íì½ÎkËcc=HÛ5UÕ0ìY“é%µ(RöÒ—¹æ#B÷Î:› ½ËûªãÁã:V^^õš‡C`Ä]ŒþÐk8H…%‚€eØ£™œÌ¢Ôõ#[k…±!¥N„á‡f_vŒ@:º H ºƒ˜ÍdOô%s}øÏ7z4RÐø)Æ@Ç¿ Qó½ÜÆ7¼Ë@ÒŸ0T”“R4ä¡m¿Y²x? ®„n ÷„@%§L!cÆól'ÿéÕ«‹÷ìfB¸+½Œ-1ÅÚ*Õ%(â©™©¬½ÝÌáÚê1 ýÔÍ˃’Nä¿ò¾.)ùYB÷‘,ÆÇrNÀdYR0F6J~ÄͲÒüjçxÉZømúŽÍSsYœÕ†5Öb<€ƒlͤ-"s¹H“$ìÞ0IJB#•$8¼c´óÀè®7µ¶¯ËüHìÔH —Ö¾×Ðü}i–Cî; xuàÜ!MÓb ÛØÈ„Q,’âŸD±K2ïÉàDp¦áí`ƒ;ÄV"fW"ä™®†C¤vAÙ9ÞUeÛYÉbíÓþŽ™6oñëÅrª@ïhŽö$‚綤ЋõÉÿ×y´i³;ÙƒÎc[ïI)#&°a7O[¶J£“xhÏȤŒãÝjìe’ªU³>ÿr¹”wZ—ü—Ëvyrayç¶÷ÝÖ¦Þï®s°íXáåËÓv.'.¸ÁµZ@ւ𛲈ˆ_‘¨0‘§—”~‰ë*%¨ÒLåbâR1\¥ÕYtªÌWQ4×ùîòåi¨¯! (Û3äy À¿×ºc,ÄŒ…dÄ‚<…8€$™®Dù¡Š¿ÉK±ô¡&Qpݧ±åX$gѨ”»b¦q )\üy•) )œiD |¡R0„çP) 9d*é¼¾¸ùßÀ…±PQôãÏ ×Eòž]4)âãÈ 'Jf,Åa# ndp ¾uïIJ“¯TÌ!gP˜d~œ©\®˜?Ï¡R¡Hu´ÊïŸ]]]¼Y€\¬`»²³(V¢²x®øùåÕËË«××¼¿TÚÀï¤ZA*ðäz¦\Êbwвx^é0š„˜4 ÓÆ\ebiÐX¾¡Ž‚·XGêíøê¸±#¹±sAÕ„¡š#‘Þ÷y]Tc‡êkÍœ nGìÍÉñ½áï®P•µ¶*©[fs}G¨4˜P@µXÖÔ·“Á¬`Äqg¹Œ¶Eé˜ÐBÅÙ[¦Y©OJ;››·òªÒæéBSgøã¢'· )+´S‡™ÞÎ[ßønœ'x5¯&û `ŸƒÌ:0¼Ÿ{à‡¼ lEÒ’˜¤ÑÕ‹Ú“§v$ñ•û¨3lœ».1¢ÈÀm3°Î`t%2Œ+àw¹ýO–f±—-¡â‰‡¶å»··}Yw"Z2òa)Ǻëë­½4€‚I˜†*]7êÈ&ns¢Syê’ á°ic¨ýÛòÐu]ë)Àq¡mŒ†'®yù u¾i’Ö£ m*jÝiö o-ÿ–½å†¥mŠeÖªfÑ´/_¢±ÕÛÞ”ÝpOÌ€bË-ypÂMB k<²¸7„r¾¥góš&q!\Sðï´‚úŸøcO@6Ar6úܲ§×vàñù^×Ú”Û¥+£P©1à`0Zñs:¶‹Pv‹„Âã‡íˆÂ¿.k7ÁJQƒ±ÑŽsùNÍ[ƒo¹W¢(psu´ja3ÅÐAÀ€`ôqcŸôÍ£sg1 ª¼¾ïó{=ï|c<õUò‚ÅžS çÀíÝþ°sˆ‚{Ó“p“»;õ}e9wy‡·z|ë¶èäD¤jÎÄkðÇäÀo‡-E*FÆ“Ÿ&`q€ºÁLRÃÑù2ó†Ë,hDŒgØy`>÷I»H1xº?*=´0ípZ™µ|àåØ}—Ó3³3!ùL|y‡²Õ]g¿,Kм‰ÅA’jNÞJ æë®aÄ‹ƒveÓ‹ÏþŸÀ‰s8.v÷ß hu=)† ™ÍQí,¢Í]Ùýc¦Å·pŸ0ïcûtñ[Ww†lnôÛëç +C„½Ç…ãøçæþüéêÃÿ_è endstream endobj 347 0 obj << /Length 1488 /Filter /FlateDecode >> stream xÚ­XYsÛ6~÷¯Ð[©™P%’¢ú&ËŒÃÖV2stÚŽ¡ˆ TxØI'?¾»XPuØiÚä8öøv÷Ã2ë9ðŸõFNoÈù`ä…½ÅúÂÑ«åÇ î®/˜‘³AÐÞ“¼L.~~éû=æ FΈõ’復$íýaMVbS˲osÎ-þKßö<ßšÕB¥¢Liõz6£ÁøMÜ·]Ÿ¹#‹ý¿’_/¢dëÛwÝÇ(ƒ}”Ìõ<འôŒ{õ[ßfŽïX‘ç™úØC¾•eQÒð}Δìlk=Øw™ãX³f³ÉåZªZ”_I,VËÂì~ÃÀ¨Íø€ùƳýþ‘A› ,dÆ,#»—YMþ9ëÛï®G .7 h½À|ˆÂu†¾å ½Ã²ÚîÀå¡öâ·ùz%ÕÒÀá•-é+ès=ë3kfëzâ¼lS¦'²nJU( ÂÀªjQ7fo) ­Ôè=®ŠÊ !Á°5´4¯`ŽAà÷>«·ºªºµÈT눲ä+¼n–T¡ì¿e‰Þ|n=ô}ßy#_À<YõJÒÆhA£¥Èr™€Ë,´â%-vä4}pkÌ*!š&®ïY:Ì“yJÛYEß¡O@a>`(ŧ­QüʢΠõSÕ¡“‰È@ «XÒ—,Â`[ œ<¢uQÑD••,š sƒÝ1h7K#(J­Î 2Œ’)­cªµ/qŸÜfÆšNèÔ+H†Ñï`ÑNœm¾øÈÕùÂ/ä ÌØ˜\“6Ï (HÜÞñmÄLµhc‰UÀA¡Œ(&¥umšUÍA¹ÈLjHQšÁ ˜gU­«œÒüžò‹öh`«SU2yâNyr1O<°Þ¯$@)iY£u†nM „tB«•Ô'ÀÙžXÉTŠ1ò‚>˜‹¦”]ëf¯j YUKÎøÎÓ.—0Y Œêë©höü±‘%Ò4C~Šœæ4Àr­)K ÷dÈæ®cU²®5ÓôE uèKP`PµiK͵µM£W`¢+ÛQÇ*aêT'˜¶í7X ϳ­È=k-…"|pIi³œëx²´ÑÂÜàqMRXÑÌ0wÜ+PNÑ^˼ m>0í·{_aswMû5pRÓíÝfgï®m¤n0àŽ)ÖT¬Au4‚vÿ{É# ü.3DÛ·&öÇËÇéÞHFµgÚý|6ŸŒonæñt<™D³Y|yÍï¢ñ• â¤R~n²³I@7¹Ù6¢„Xð…n\HPÀúû¢hr£¨îekW¤t3œT=ôý]œDæ&} (œsH]/v@Àó@ˬ®¥°íc°—ã«ù,¹{;IÞÞEÈ~È(ïÝÁ!ûx à`-r<ª2ÝÖmïÊïpÎ5¥:~u9çþœûqÊu²ƒ‰¹&¯úvè9{,3(…=¦(ë¶€k¹X˜j}ž^ÛÌaé¥>ò'ub:¾ ÷D¦DžµDÐYk+t„n™|žË­ïä÷7‘yckê„"õ’¾BÀC¾ŽòXÝÈïÂvO¯â)< ›g°ÅjQ”¥\˜SEQ27G[±úøDve)‚û,³dœ¼$C,÷ŸªRûlÕØŠôÉŠý@Ánã YÜÃ_ÃñóPÐ-_]|’âJ¤ÛJcF£gÏÉôõ|rA3G :4.¦… ü¼ÉDnbÖ ~.Ô†>¦ãà½|êízÖö`£Ä$¦êáa䅪嗺ÍoÕ6i©Î³z€ÌªÕóá*zM’ø]4O^ÿMá2ó£³ޞɶ²g º³Œu¦I<¾1bN×þ®ÿÖÉÎôl}xké_½¬í´úQEÝr ……_é1§Î1i%Œ¶ü²Ñ·ì³W7Us‡Æs{ˆæt]÷¼àŸ"þš—r— endstream endobj 351 0 obj << /Length 2110 /Filter /FlateDecode >> stream xÚ­XYsã6~÷¯ÐÛJU#.Á›[y‘mͬ7²ä‘ä­ÊfS*ˆ‚-V(RÃÃG~}ºÑ/S™T%3ÀúC_7ÌF&üg£Ðù¶m„N0ŠNW¦\ÍŸG4X¹bJn ‚Ó–äõö꟟]wÄL#4C6Ú>µÚF?oŽü\Š|2µm{lÿk2uw¼)yzàùV¿l64˜=ÜM¦–ˬpÌüÉ/Ûÿ\Í·µnײþ$H”üˆÒk£d¦o°Àyc0Û!¨€c·Ù}žÝ-×óÉ4pLsÌl€æùîø>."‘$<YUL@‡;~âqRå‚&ÿ7]³Q,æœ:e¶Á\:¼o%È0)0íJ°¶þëÙíîëêAëw”þíQ)úVñ$.ß§ÙÓôœg¥ˆÊ8KÔªCsñ­E)´;ʪD Ó¬¤ÁžP›¼pöK|€mßÃû¸œ=nÿ½Zßýo~ çù€•¹}ÐÙYä\•ÓX[0Ë÷ñá þÿþD“,â U9˜€fç,‰£÷!˜=”ÿÇήàYÏFËzß™åz¹ü"Ò*å/|Ÿˆïíöñaqw3ÛÎwóÅü~¾Üæšö=P}ÿåÌUÆ`‹K‘&q’çI.øA™J¼ÅEY|Ürv?ß-WÛÝýRÛ*èêÃB‰ŸÔú+/zÑÅ/[ì$¢#OãâÔ:¥ ÎbFÈ“l¥e¥¤=…´dqãMu>Ó}y®n äR꽎Õ}!¸-ϰM¥y)‡¡/EHvYöHT2„ïKŸ;‰¡öNáŸÚ;­ÿ©mzö1ŸÈ´7«åönùæÏo1_˜ »Ì†B›kÉôa-Ê*Oµ•³4QWÜS¼³Ð1|ËíÂ{.Š]œÆåÒde)OÐ×AyEâÜÙaÐô÷Ç»äYUÆ©òÅ©*¡åI¢1óg§CjËLÒ Xª­è.b†*•Äf íÝm ‡,ªd 4éúÔ»2m?ˆòT#<ˆ"ÊãsÍ¢ÓA«öÓv»úq¾T^o9¾ÕJŽ2ûU¤½|àJ[uºâú¾ÙÓeGru„ày‹¼}ôÎ6ÌÕâV”À¬A€ÿPÈ^ ž:yœ.£:ê ‰·sœëúð6{\næ_5I"¶‚3SÌÎËîíä°ÖÓa°½P·T¤‰¢ÕÆôeöÐ1£¥õÝ ®ê“LOp.}' ÂøÈ¹ˆDüB¸ú ÀôŒÐ³{d‡®rì  qÇö!Ä¡? Æ2Î'0Ð±Ž‚<)2U…(hTÕF"h\ÂfKuVßê–Éö˜8áÈr<Ãd66M?ÿbŽð’ÇpüÑ«”û[4úžá;^WãÍêþa1ßÎ?Ñ­_q„;Ò4.È,œ¦¿‰a—êHæÂn5N*“q†ÙŠ_ù¾i¤!½õGË¿·º\ˆ<ÏòBIæ´½ÐõŒÜ›¿k]@e'åm\ØS72úÜ^©œ%Ð*95ìmæ ‹À`hDÇý+¶gNh„ÐnãQ>»èlæ¢Yý¿E£š»£ñíí®[¼ŸÐn{™%Y‚^Ø:(é&”@çáZÜ=ÆÒ3ï8.…JÎî;ÁsŒÀ÷T´ºßUqZÚÖP"ãÃP‹ª A¥¦­•5A¹ ›Cvæ ÕÃq•:CËpÜ × Çð„`ŽÀÞý&2! QóÆŸ' %ø*Þ8–VÌfà2Ê ;éÎ4•á ¿µ¬´§/í _“! Y!d]Èôµ›7 v‘ÛŸæC¦Âç—cÕ›°ñi Èû;&D³º÷—…“Ån°Ðp¤¯²Š”±¨¡’; úµ}íB,{õÃȸÅÑ2ÌÞª¬xò‰GyV ¸ŸVÛN7³Åânùe7_¯Wë!e¡oØž­·|<Õp›ðÄC׫Gè0ç;2#l— Õæ³‹êl˰¬úþðBô73˜çwÜýøð@˜Ùú§ÝÝòójÐpVh¸uvp|6Ûð·’+ß’_Mèw" º# Ș„߃ã´ä¿¢fN9ýÐ_` ³Ï«³Oue„Á‡^ SÊ ¡RŸP}:,r¤Sì«’”!R>‘ôAáK¬M_Tða#íZ­Ì„OMfÚ¾*Ò¶ov²¤²=´©²ù—ªuA> stream xÚ¥XÝsã4ï_‘GgK²üOåàà˜;>®å ˜Œê(‰Ç–ÝRþzvµ’ã¤.Ç íƒµÒjµÚýí‡ÂV)ü³U•® !’*+Wõñ&u³ý~EƒßÞ0Ïc<ãüêþæó·R®XšTiÅV÷»¹¨ûíê×èÍAݯc!D$¾XÇY&£»Aµ[ÕoiöÛ»;ÜþônsÉx±rýûý÷7ßÜOgKÎÿ£’Èù -YšÁj¶ÊË,a"#UoA9.QØi‚„9ž}Ôíš—Ñ Óµ4T8óŒDÕ8>t {uVÇÐÑך}«תiL»'B÷}×[Œ«èsjÔ°ëúclON¨®Ío)Ëj´É*f¤{ÌDÂ$©~TmëŒ\• ËZ¡m«*êvŸH–E]Oxr©íÖÐuBequX³è iÜwã`ZM k Ú5£þĉt¾XM7qrÛ- ìx ¦+Àtý³S>õj3ÒÛ´»Ž|oÝØx@<Ð¥‘È¢^cjµzKFø –yôGçÑeÁA£¥ñ¤¯§»¶y^—"JœÁ‚‚%¥Çé=^›g9¡‘g‰—$é ™jröV£8W~.Ë3 wu’AàænóööÝû_>~ãù/ÀX Ëx`7–ŽáÎ0dÞÏDá×´[S«AÛpPƒ_?ø©±Ýê¾íÏkî.š0‚8‰ìÒª5öˆÖÂ{ ºÈàèRú:7ÓpOS£ƒD¶}¯që&}œ—3G•3K:ÒØ nŸ'€7Y‘{p!ÜÄi/ajáì962:²ðGfÑ“ib:õÊ~4´ëzÏQ¦ñ`RP¢‡ƒç×è/+êU¤½sæ2E RèÝ<«HNè¿N©Í@ÔëH‡ûà–É„–ÖvI+²Q.§¹õ±­ñ`È ÇAaè¿âú2ñ°ÿŠî*)‹ Ýç¼Yç8ϪœâÜ9-ÙT;#|âÝ¥(B,PN%V'윶 Ÿ¶)•W©Ô+wq#g=Á iE@Ú´]ìD€Õjä!0pSݵäU4nZ€­{ð¨_œ@„›ºMR‘—€Tˆ8\ï5á¸C< Y[bq ˆ•?¥—¥Á´]¿ñxYòOD.‚NªWGˆ~‚ïço àI Ìž|’KN[D’%ÑÉ£._ÕkÐmf6ÁæÁXÈs0 Þåð*Eæ˜ÀF¥YT2 ÁÕZQ4ånÚˆ?§þ€K‘𒯲Òtî:„_OW[X„\’dÅêÉqWÀW ešÕÝÍÏKm—E"XåD¥¡˜n*LætU˜ÍŠÏ6Z—k«Üb9Kò8{Niª1/õ9~ÞP‹%ðõÝG¾6àÕ* ¸` ÐXlzÈ5€ðgZ¸@?$áªÊ /yº—gV³Ô-a«ÌŠ>môRƾÌé ù;ó!Ƣψ æ™J¸¤Kr%¸Y@ù6£iÁ—0'eÂJX¡‘È]#‘øÒ)d’§ìeïžx q D–%ÀC©,þ☬’Šç Š'eˆÀ q ÂÌ3‚§¡¸Á‚jžÐJä)Ï|n´€°z =“5qMU³,8ô#JÔ-­™ÿzY––l—“î—]ö“å¬3Uȧ8O_èc±×t;ú:DãÊ^Cç Qåf©oç–'g`A2ToWêî~ÞÒÖÀL ªÁͱ‰ 5݈éعžlX‚qG™>“¶'ìp> stream xÚ­;Û’ÛFvïú Vž8)éû%yÒÊòf¶ÖÒfgòäu©`#"Ë!i´¤|}ÎéÓÑ`s<1QªFŸÓç~éá ÿøÂ³…•²ðÊ-ÖÏoX˜m>/hð÷?¿áqÝ ®F+ÿôøæß~ÐzÁYá™ç‹Ç§ñV›ÅOËwÛòØUÍÝJJ¹”ÿ~·RJ/ºr¿)› Íþùáoÿv·š ¿äþîçÇ¿¼yÿ8ÀÖB¼I\y¥,eÁ͈¥qªàR–ŸÛ¶‡÷ë°‡c1.ÃJ%4nõÓÏl±—Y°B;±ø–>/`w0Ú-ÞüW çºPF¤PËõ¯§º©2(¼uó@6ö°)äuSmì”{’éB+¹X Ð ‹úáÎÉåi¿îêÃþŽ/Ž_8UáµøåJ: ¸LÂ7ütª÷wÀôýOûé Û°1lDÔ(Þïð¦YäÇËT!ÁÌ%ñ„pP µÁì”xÊ´“…°2¥] K8SpãÃVÆFrÀ¹î„[†³¡Ôþk…Úåèk g}O°MÕ‚`m>õøeÉk&äÍŠŽwSsœD2Q0kÒ“Œ$'s$0XFBÐÕÏÕ§¦ú5wÍ ÁyV\`¨ò¡¤.¼™ãlJúƒª'gûxÿ}¦á…泤2`™ôD Û*++)taÁ”ÆðTJž«õ6«…õrBÖ,-¨·C HP8fn21ÊÌ2n%-OÍóª* 7 TË k&POmù¹Ê+…Q~°¨Æ™ìïë7’ãÓ€ÝtSð•x”W°Mz°Tb–ƒMœ6¯ášâ¾0z  œ²q6Zç@‚)Ñ þsÀ” nÖM9vÝñ­„)…'ºw8uÇS\ÿ§-Ä~»,'9ǰG¿J-Ä !FðBi}›.¸àp«­™ð¾p`¡g€)™W L4f×é* ƒÍ/×Ý©Ü]7eÙ€"çñ”Df9:aÒ3½*V‘àXó$À‰þo‹Sÿ"ÏÑ`e• bˆÄ21 xžL Šº-r7¡·cã¹¼‡~IÄ-|Áô ò!?R!öEÊÙeW}®šÈ¿çdGn¹©Ÿ¾…3‡ÉD0 JU·ÏäþÛ#¬³Ëj]ÿƒqµŽ“„A h£ªÈÒÍoXqS0£癋9Ag[h qþ6ÊÙ‚ÃÀÞ€qUiÌyA7DΌ覙tË› øÒþ±Ls0ªÞ屜† ðX–9 *&-S¨ †ñ˦*7Q"ŒX~@\ÂèðD¿Ç¦Þ¯ëc¹£Ç/ÛCW A®HEëþu»=œvÿ%..×+JG8#@f¬¯!·ÛdŠ¥¢„šÓ@VX°ýZù`o‘# •ã"ledÔÀs(­S™ƒ\‘ÄÈ2Ä螨ÕOy¨‡‡#¤Á˜ —;¢;D§Ë§gÔØ_HùšDào[A|¾ié¡Û–RúÇ×=pÜT‘æŠ\ɉ1+ÁHÀ»üíN›e¹«+ãõòa0OßhY²ŠFXK‘¥¼U@5È8n¥\_üÉ€Ô°P|`/„q)Èûß¿ÿáþÃýã{:wwÀ_ƒü?U˜ …Ib@UôÌ$_6ÀÖ ›~ð–mKäñow¤ý¤Ò Й°èkýŒ«OÑ8GÆ4Ïu×UšÛÕOjŋڣ^kˆDlÌÍbˆa+\J'‰Žæšƒ4a¤FœÁ)Q0ª1BM0B/?‚‚h½üŸjÝÑÄý÷íw(µ¶×0ŽcõÂïãF:n¤–§ý¦jvßêýgš;5u‡H~#ŽJS†ŒýeP8?è£vÑçáa0~øpjѺ­œfyUÂÔF‘¸}ùÿNu'E8S'ÃV¼¤2ª$ÁyafÉ]áHA~ø˜ º&½œ&%| 3xKƒÁâ,0%±)̇÷Ü÷½§ä>­ ö~¿td}a\îc™¢H»'W?wÕs4ò%Jõ*h. Ð$(öSyÚu¯±ùD“K_@Ð*%²¿›<(Ö¢`'*¨iu ‰Y)Ƭ×#1é!ƒHûa™fàÁÒ%h^)@NâÙŠ$¿v-8V®pÈ…d‚D¸ðþfrqëÂVV›ë‚ Ò‰Y * i‰M!bvÿ{GŒ!ÅVD’ Fáä—z·£Ña¿ûFë{~gX=±®ÄDi5ñ~G<²ÈŒâ€'Ð![‚(à²)[ÀÈ_ñë6T5DwNÝæcy!;¦_pë¾ðêÏQHðv)À·xêwïÞÿí‘è°¢ŸK–Àdd Œ"K`4¸E|Ô'æ0Pr—VpäØõêAm âòé+¦U-Ž^“HRQ1 óÂ80P ò?¡o‹„5d)> stream xÚ­[ÛrÛ6¾ÏSèRÞ‰¸Äè^%Ûz'±³µ»³;mÇÃP´Í]*Rqýöý~”DŠ²ÝŠã ˆÿ|ÌF)þØÈ¥##Dâ¤åó7©Ÿ]ßÂàÇïß°¸n‚…“½•ïoÞüý;¥F,M\êØèæn«›éèçñ·Ùª.Ög!ÄX|s6‘R¯ël1ÍÖÓ0ûýõu¼û|q6áŠq7æéÙ¯7ÿ|s~³…­8%’´ò,³‰i+&d@´\ cÇõCY…QžUE•uüõoÜx4͸XÏ˪*¿ÌŠ0{wÆÆËugq·r¾šóbqƱsV—ËÊ2¾_LË<«#œl6 ƒy‘ŸÂvÌe5?›°qÄ걬ˆ7 uÂDÂT@ÿñ¡Ì ÈP³T4`ã|]L ¼×e6 sED sabžÑ§OáÓ/ô3ŽŸoˆl<" d‡wáÍ´¨Jì݈é·-ÿ…6‰l¤ K8s$ŸMGS¼Ò‰4£G¿r> 7£ÙèúÍ¿úÄ$°…Ñ[aÎFAyÞ€Ð* [Æ_â¸'n¾ª‰´§ðXõ[ŒÜ–®Oë×’".Bßxâ#0“Ee¨‚FnÓâ—”ÉE1M¶LW‰U.¬» Ê¢Òñš„¿©ËEž›ùâ÷¨,y]LÔ—=~¿„ጦ×ʵ.çÙºœ=5«‚hhœ/ƒ"¿×am–ç$ž$“îUôð–ÖŠqU.ò—¨„“–ÞDRƒVV$\3ÎÖEÌÊÿ ‚ž gú]­—}ӸЫf”ˆWÕIµ ŒÎKâ\–=Ò‚ eUУå]x³üRgå¢\܇G8ƒ‰÷ô€yhm?ÚÞÒ´é(x&ïÖË9l0šªžªºˆ“³å½7w"t󢪠áJšñõr¿)=u+ðvVB÷ 9‚ÚÚN„¶.î–àâ¡….–5Q¥ÆÕfX´\Ǥäòümh¥d‰Qðô*ðKyoy`sܱ„>Ò)OŒ2§Øw*á©õ[‘' ^¼ÇÌS;`C€©I¬5m—7ïάßœÊIâG9 œMŒ“C #±…/2@2†mṄOQ©kƒ|uóC ¸QqÛ¨8éÃ×2‹ÌéÄàã–yÜWÕ!Æ 1Qs9RÖ%:Õ§`Ì„I´ö;ÁI˜¤¼ePý\ÃíÌ p ˆ¢ ˜øû³j|ç½Ù¢±J<,2oÐ-É@ð~ð1ÚÓ' ‘8>ÎpÔ`»kãÜgQÊb+6HÍ#n¼¼êiøiiEbŒêÀ|÷éümä}#š®P<Ýä!Ÿ€Nk™8ìÕÒém$L±Éj5{"Iqƒ&Š2Š6•Pþ/ºI.Á ˆÐ" ìOq“Ü$BI¿Uc±åâˆpMîÙWÃ=#¤ìÃú.ø4 r(ü|=S+³rXÓŽ–$–Éx¾U}nÎ$©SCà.9Ø€ÌðU<“ * ô paXŽlyŸg­TŠX· L€Wð*(dš0|´³¼.¿ž…ìX¹¿I+=Ô1„!d):þ;ÌygY•!¾òXzQ—ób‚«ÍÜ'E4çÝšÿ*üÌ÷.ÑʘC¼ìÉC¶ ‹’z–û[R®¯d`½œ³ÝÚæÁ† ÑA“™O@cÖÉ¡5›Hï¬óm—4G¤Ó¢uáuafIUZ$÷I_ö׸«ÓãÖΠAŠCsIí¤<)ì@ƒ”¦"ÔÏ5ª‹º°'Ø©D[7TrΞ€=¨Ä{ÔÉD‰”⺠´e-V‡:70¿Ï͸Œ” J¸$¦ ªªxƒã KåpÓØâœ‚V SÀãIv”ó0†…§Èþ®7MµORhÚ{˜Ù`!¢z‚X§ÌíéNHAµ}cU¡àãêa¹™Mëmw€ÊE(c„¦|¡(b‚&òl6 Õ(lS¿{ÿ3Åða¾©âûÝ7=žË—@šIn¥I¤t# S°RœfíÈì­ò[éÔ¾¨˜UH*K™“Ôm¸!¸Ùå|^LˬE9Œðn9›-‰}Á˜ lÇbÏB? \cý\¨ö´PC`/RHÃÚØ­ $”Ý`Õ€¥@éÓ;¶9é親ÃÓº¨7ë&Ä3ƒ“m›ØO˜Ìa¼¢¹iVg>©5Èü:壪o:Ñ‚¦ € X„™r‘oÖÛ—a:)1`¾ƒôPd.I~³²¸+Ö!Í;Dª'@«|“ #ŽÏ6Å7´ÜÕûÜí|ˆbéöúöÛ«OŸ?ž£0´Äa‘7Y|æ—û†¯$w•{"«ên3 `ó%yŸ-†]¸“°Oð÷ï>Ü~:ÿö‡×ÿiáe[βа¢í6Ã¥ EUÇvßs8é.JTêÜü÷s/OX*’ñy‡˜Ör|ãUfÕ´ ׯÝgåÂë/ò9jøR·ŠÆÇ›®ˆ“RÃû¥Ê‡À“ê8jFÀ%¤°L9ª5Ba•­1ö-}B˜r7šÝ- ªÍjÒqÔ˜P-¾m|ápú s_+ïSÓˆô9ˆ”Úm³Ò›RöÐ!ϱRP•bQk>'FtHe,ÄN‰cá+Z¬$Ôš¦s9‹\çÇ4‘â¹ðò¡qþxþáüòæâÝÇëÛóÿ|¾Àc¯NJÑæ‚¸ñÎɺÞ“Ÿ y ½¼i°ëb[׸û¸æ}‘gþàöž‚^DÀ-»ò{µUñûŠvJ^í“.¯<å}¤dÇJtÔär‹¸JÁúGßý^ 6‹éV&aÜ8¾¯¶ŒÄŧ\E\K’ŽøCR 7õi¤Gþ€£ 5$Ôs-;P‘2á[¤YFG•å[m^œ{ÚØ†ÊÀ3„@¿—އ)ÙtÚ—JP= PI@U híîÀ\¸õž‡¸’6šñówdΛEîÓS6þu§,qJqÏPj>9ÓHøêÓí¦\Ô‚C©¹"ÎÞ‚ÐÛ\v-AA ñk*<#×Ê3.ÅDOÝ£P÷ tâž“ÿYÏáÚmÔ=Zø­”z¾ ù¶§‹ôëo‘˜+$G͸åļ\,×·’ûMÕG“Q¾!W¿m"󢪣.áN¾¦¹Œj[ÃmrÊSˆ§j[é·Br×Všnµí ^Ã@… ©´µìƒéÈhÝ 0I„Óm˜uŸXMbÍÖY—‹Õ¦öê|‹äe:+úDËRhçzeëWA 9lÚÂ*;´ùà×S…ð„k9T‡¸ x™£[îÄlà¶ÁïÏÚ‰€h+[¹ÎófB%>Œ™Ð¹¤^]|è#–Kè™ìR‹øáÕÔiõ8°QA'Îx›œ~«)ƒ@)¢ uSe÷}jŠtNóAdçõEwd÷²šz“ßb×ݦk´ìˆ­/PIAp>!¹'gØâß.PõP4)`À3´{Qþ¬¿F´¢ø- ±^§Æ¸?z™Fn XrçH@„á§i&vb¼†D:h[ ýÊ—(óîÚ¾Æè½&  MJøT´ië7:”—ð!f¨FÀ9w ö…Z Ÿ@Z5L‹PËUfýL"5Ò$Šñ¶š.7õkbo¯šñ È+aá\ rv’žBåòvŽ Ö55t Ýû"pÛ`Â@ý=²Ž} Uñg¹Ng;ë Ó$‹^Ÿ¢ö{5b!JÂÓû„dŸ¨W¥ßº?#ke¾-È·1—¤f×F÷!…þ³e†=æáòÞ2«íáè8£ Î!ylÛ/dŽtýáxªÇO˦˜¿ƒC;i×*œ:פP¢ªNK*Ç2œ®÷Å:Jp¯7”wOžf?ù©uJÛj$l/ÎùÉ€AÌ7ÃFMS¡Ã7Í|øoµF|¥ÐÇ6…,ߢþ@¥¯O2&‰Ò^X®Ÿ-ÖA¬*"ˆ…”ZP[þ¸ÓY€ÇÑ{ÒbÌ…æ~Ÿ,4ÏüEDÛzBáÆ‰×°‡®v8kj°ï¥/À†üÝ Óçï‘Ðå[›R_=›ÆárEœllÁ¤.4i¯··ý`ÿÎ^ÓÙ"ýîÝu¦ÇxŽ}Œuî µ›{“bwÜy6Q´•o¶Òh{°IÙtJ­Ç‰3Ìßâ ¹þkbˆe†ˆ6ÄŸÖ+N£˜ßIuü–˜p¾”¢¤,¬ °÷Ž˜N«ÙµL,RÈ6Ûvu೿ ‚ß¾¾ê[êR‡ÃåО’Ô£ï\Þ^oïaÛ4 ˜FtÞ´»ç",–Æ:ŒÅc\Ö=ðÃË/Y¸×þ?~§Å]¶™Õááðj¹Ÿ&ÿR °Ý ¾²j|¹¬û. ×™Œäœ´Üª§Íýà´{tžåbRb0± ;MKšÞ~‰§”òØu/ëåA¥þ0õ¤a,¡¬[ ó\Ù®ÒêT ”®ÒjÉÛ@‰m$ â¿ç®ØÊž8E·ü׳':DßÞ¨µ’?çIâ)A<ª‘;ïÑ øû‡å]ø DÿnïI2eO½Âí] ¶â(ïûðï¹ðÊý­“à X¥C}ß‚ßèªçE¸vùÓÇý¹ ç6a¾E°—Ì=²cô?99r8çNKMˆœØJ4{]ÁÎeLÍý´B;óLVüÞXó±lfÚŸ0ôbÙÍeD’’A ÉvjlªwWŽùŸ„˜na_—áÀX¹xÿ$¥ÿkYäåŠl‡¦¼¦7]Ó¢×Û;Gz÷2!Ìsº%m{®;ìºgN _Ô"Çý‘ËJ„èŽpëß–zõH&J¶‹‰=®@ºÒãÿ9E®ÆÞ†±;Vœ®8l=˜[ùf]ÖÍ…iÌtï:`Êÿ'™ÿ<$Tôÿfþ1m†<ˆgù¾µØùƒw¸»ƒ‡–G¤ÿnJŽÿ‘ :Œ endstream endobj 371 0 obj << /Length 3911 /Filter /FlateDecode >> stream xÚ­[[sܶ~÷¯ØéÓj&Ë7‚hŸÇq•Ií´RŸ’<л”Äfo!¹–Ý_ßïà€Wqe—ã±8àÎw®‹ÿÄÂÅ «TätºXï^Å~´¼_pãßï^‰0o…‰«ÞÌïo_ýõGc"Ž\ìÄâö®¿ÔífñëòÍCv¬óòj¥”Zª¿]­´6Ë›:Ûo²rãïnn¸ñú—ë«•4Bº¥W¿ßþôêímKÛHùÂMÒ̧»tý] ‘Fé"Iu$”æ®Ë|ÓÐü³]L(§ýT•8Zî×ßãÅ/ZÄ‘¶‹G?s·P‘´ ­íâæÕ¿&ij%jHôTe÷9Q³Q&‘UËùiÄ6#–¿Å&¾¯ª‰]:©T~ã.‡„ciñ"ÞH)#)桊ï•ÚaΈ¬Q~Îd„R­¿£Ë˜.Ë<Û€á‚z‰¿£Ov¢p‹„TsìD—"îäÍEGi< Ë•ÒQªF,ÿþÃí?èƒírÅßýæj%–å•XæÔØ4ý•L—u‘myÖ.»’vù…;!Ã)M£eNU¾áV^ÔÀ|Òb%EÅ ½8Jø~À<§—žÀÂuνCÉÏl½Î5·«|}*‹š¶@$Y®¼¡üs]EW«›ywƒ½N™‘ÅW[»{!M”Jœ™ÅXúÌ™iéd’:Ll†$¯ß_ß^¿¾JÕòö-3hÅ7Ú¼R{,¶¡uØo¿p«90>é" |4¢‘DŠqʧ„gï”ÐFF'¢ÏŠP,£ÔáB›4Š“ô"æÄIä$ø ¡N•:ÂDÆŠYH %q:$ùš>üÍ›·¿Ü2+Vüxr §V8 ´:ñ‰½ø°Üù˜Ïg ¤Ã3j%ŠçA?;Aü±ÙT£ca½3PRÐïM­‚öÇ|('tاR°Q¦àÙeš1‘¬s°”Ô » ð|¤g šb 5$ZæNicÜ1ÐÆIÐÆ×÷y µ¡åÕ†oÊåáX‡}¶e-¢~öiGÿ‡c.Y6w<wØo*îÔYͯœ<´^"À›Èáe¨§-ÝšÄbG»¬ØsûÓ•1Ël[„Ww^Ñç\ìï¹?hŒôoÝ-µ%wûPT4!]fåýiö­Âó~(ó@²¸ã'}m?(õawôŒ9xÄ‘„íá“-²XV4ž€^Î âMäÝñ¡¡IÈ‘0–¬nz„½rH™àáéôsƒu•™…¤€6±rH²ƒœˆyrCl€Î]w_xd’fW‹9ö¥a™ÄÊ~•€– ;E-#K6SŸâõûÞþHñm¸2•„;€É)´Ÿò*`&K¬"–6–i«xðÁÛ:Ÿ®G5ó5Ì ÏÅ.ˆ¸.c¹+ê:ÞN©¾»-îr‚º— 1Cü4³›b¬ŒLz!{7…VRæ+Xl ý’Yˆ¦P¤Z©¾ŒU<ÆÚµ`ŒæŒe²ô˜B*rG,0„Çxz<ÆœeÒà±lðI<6‘³ú ×á1Ú}i†ct[8fEŽ‘‘}—·búµ‡âÎNçÑæmÇÔñp㋼ißGd1 ÉZˆ§rAƒ©áy‡'o7½£=3Ìc s OÃLíe° ËÎ9¿Tlä3° /›nÝ $eYàÙ€dß2˜7˜=O&(餘cg“ÎØ¯2C%³4€•ŒYÑâ2ã±J`1'O=@¥ú°¬[XVϲö°œö`Y7Wú¥ÈLž'~Ðgý2pv¼ûé>žê)h_S³0˜œ¸ô"”g-Ý ¢›¨gãV6‰Œ˜‡jGÆŒ¨>dûÍv2r¥ Ø¥íÁ³1éùÈ•Ôpeûûsàg»X½„;2ÁuóPMà/+=¤ZLÑ´PÑi: Í*Zš!MŠ[éØ,w¸ Õ#õ§œ€ºð!–âVŸÊ½ôÖO‚‚{Åb+¥Ò Ä÷ÀëXÙ*%¨7¯º´ŒU/÷ù#5ÆÚc•oóÎm ‰¸Y¡AÎ1ý¢]ãüO+žyWv<µ[i³iUPÙ¸³ÚÅp./?Š; -·öYM 2ÌXgÎá?Žáï„ú†Ýüìý~þ90·âgÕ:"Ð@A›Y=Šœ¿ÅB{z6 òf½¼qä‰:=‘ó*³Æ+¿u¼k¶Ž÷¶ŽÏi=šBÁ˜ù±Ù(u EÍf<û½œuÕFwZZ|{QéúDŽù1øüÄý¤n”ÀG 'sQ¶ ºQH¿”1îY 6§“Y¨R|T¨vºQ¶„ˆe^NåšCZèǪb[ÊÓ)ÛØöXà |+Û÷8Èìo-%ØãË FªN¤ê`è}*2nŒG«½pÜeGÆ;Hèuù¿Ô6Ϫf©æxyµ0%;B¡¬32ÃÀ]»2¥žeùsÉkÊØ-Z T­Ë6mÛSšš^n¤º,+ Û^)¿”4iò;AG­b5 a·"­ß'LM Ó“®áJHŸàìyˆÙº>qh„·:>€)8Ìú2Q¹€±â`§‹@w—¯é"Ž|ü‚}ŸÜ·y²\ÞÖ“ó»¶$(ä•û)»Še Ê:jpG©E¼||(øk¹Ë×^÷ƒO?Ƽ áٚŧ[nêCI5þ%“ˆ]·fOpÑûpýêò_NOFÑëd”Ö)s†¼1|wâÚÐ@$®i'®Ž³ƒ4$T²} ¡2ñ™¶Þáø(ÜjãÀu™õ£Æ‚òvÆ×$TYð‰ž…°…‚ŠÅðaÒ‚w"bšT hâì;P€?¬FÁ>:…`— å-œÏþPÃÝ&0•ìÓ Ù3åjé`SΑ«U>Bé^’«ƒ*çjDKÄTz@ÃM¤D:™ [i€-½ £ãLA¼|ÍÀÍaŒÉ.^pÊ î§ fP`⑌¶‚­MÛÊqÚ6XÀv“±O 6•iWžò Îü{×äyÝ(ÏëÆY]9Uí˰›´µ×qüÔFhtL¶/ª®¿“sÐN†ð ~cöH£qÏ$‡ý³uÞ-į7¬]È,£.IŒoT§c\”5/>eữ›É¤Ã´lvë†w§ÐÎ!k8ž©„öt‘…I{‘UL¨”ú¥àϞϓõl1 I(P Ãl@²Ÿ9¥ïæûE­Ö!¡Ns3©ÌÊXŸÌ¦4âÆû¢¡=[”¤ugPn–¨´±/Ê»<J¡Ý4M_’ƒhH¨¾ã Äuã _&ÂÁ$1CŒ=ŒƒÓbÜ -*ÆÅ®©/:xç½âw uxÉX‡slÐ8§Ý&Z‡èwZ˜©ô¢i®£ÿ ãöpŽº¼¡ûùS–³Ð|¶> ÀGÓ§kSªöž7!‰ÆÀG à£wþ3©1|4NÛ}²mX7y_]zÔ‚xУ(”_wïØ¢N&pO‰€{ô:ä¢O¡;{ HÉʣĊˣ©_J«ä<î‘•ÌB‘êöúû°GŸÝ”äõëXÑéÁdµõ5>2pîaï%xøE¸ÞAŸaÔ= }c¬{½!Ù"# ^Sy¦ wNŠ][§™qwxôÁ»é¼±¯ù>]¾+Æ“Û虯d õ T7ú0±Úg»¦Ð7DîÚ à±,öëâØ®6åÁ}ÿŽÂ{¡&¸Ìïò²«ý½Yù¿%ðõÄOd/D{.OkªBäqj¿[–Ê5#¥ð8SU«MÊCkÁsûÂÞ"‰³šœ³À¶’Ê:–\EˆûÐHy8Ãò0|K—ù'"ÖåÌ0xÚg§úáPÿó J„@™À1ΑQqG(=ì*íÈXŒj‡š*ÿ쀞‡ò/aÝ2Ôß1j¡ÑÄ ëm!ÊU¨4 ŸIáoÿ¥Ô/ªî×gÐd©öMÂeO(†|yV±ÉCYbПÉ@Æ6RýË”Ž¥T{›ÆÞ²!–†‹šPÈ×+–Ç+èLÑs6J1ò9u¦™pwÚ¯é¢B[»Ì*&TÚ›Ÿ0&àÑÌåMñ&BégÚ&A¡'€žÉ(+ä‹%Û¦fB:ÑÖLPÛgQXU¹8TY†8 5:k5TŽkžBw²Au»&£ –}G=·„ÁNàQS¸',_æÛ/×·wi•‘ž xt"ozÁU¼ðÇ…gþ¹¨š‚*å1.«3ªœ‚œÝtŒÅ̆£^AšP±ŠñªÃpWÒ¥Z yâ¶nrbȾ«þ OJ>îÕC¦U5Ð+!b¿æ¨+L•|_üjc¯½rE|4¥G¼9¢5¶Rg2ÑÒW¹o©ãe™’È™”VjËøãi^°õ9—JRÅŠža¤ß1ÒßÔ]AQ §æ §1EºÁ÷¦,Â9&°ÿ]2$øúŸo¿cö²Ù©›8}Ÿóm†Z„ÓÌÂËŒmù•_ëÞmüdÕL84‰ “Ð%ã[ßOC©˜•]«õ:c‚Þq‰µýµÇ,¿o( Þ/Õ Na|“ße§møU0ÔBXájZŒ°ÇÏ>f—“±MÆCµ¢?«R ë¼ô\TFšÖ‘±êÂsSUw&2Ð33P$ÿ—÷ÞÒ¬Ø}‘´øÈyHÚì~f/¢ÔDC›-ü±•ÿM endstream endobj 376 0 obj << /Length 3727 /Filter /FlateDecode >> stream xÚ­[ëoã6ÿ¾…?:@­ãûÑ~JÓ\›b_פ‡;´ÅBk+‰pò£’½»ùïo†CÉ¢"ï°°ÀZ¢HÎp8ß >cðÏ<›Y)3¯Ül¹~ÅBký0£‡ß~~Åc¿t\ôzþx÷êÿÔzÆYæ™ç³»ûþTw«Ùó«Ç|·/ê‹…”r.¿¿X(¥ç·û|³Êëµþ|{K—ïo.BsáçB\üu÷ë«ë»Ž¶â…LbÏopɹËÜÌ8•q©ˆÑ?™få=Ðw|¾¬‹UKÿïnb®e&ŒÃ$üÂÔüÅf+øøëŒeÊÎ>‡žëô³žªÙí«Ò×6“̤šü¡ ÊEÍ3>0/•ž‚!D&Hù¸!)yÆ„š„¤Ô3<%yóöæîæòÂÉùÝ5I`[Óï¨$°í„‚)LæŒü¦$°­ãŽKRúL«Ð|w÷ ¨ ï¯^Ìšæ9+Š™Ì*7+ ž­S)+ùrYìö#tÏœæ“ÐU:sn`M±!jXf&"jTf†D—ÛÍ…pó}ñe ÝÑú`h¶‘Ý—×qà¸À½õ PË3ÁÏóJf¨˜š\ê"ÐY¢‹Rp fr 6ó™“>åãjÜ+)t%óÖÜ¥$/q›®®®ßßѺ·õ1z<·VþU¸)˜‘œƒâ©o®_ –1f'!)TÆÔ`ë[‘‘Jâ è³±3e¨ÏÝcÐ Íæõ8‘þÜôÞ¶_v Þv^,÷ÅŠšö[úýHèåЄÏÊÏwu¹Îë²zj{Á6ÄçžíP_ð >Gï>¬Á—ï°¯œ7åfÙò²ÞUźØ,ÂJXbUû|_n70P/y]ÐCUþïyC&ðYÆß]½E>•«ØqÈ/±ñ1ß”ÍzÑàz´•2®–Ôí3vÈÃJ)7ßÞÓ—íÇ}^nÊͽ‚r-*Áhß—yÊ5lm46x…bƒÌBת¡Æûz»Æ'ÕcAMÍS³/bcµ}(7ÔŒ Bv—EÓd ­ìüv»Žcʰºˆ¶*h¡$þVdØg·ûCÔêâ~ Ray³Ýã²ô¼9ìHFÛ:¶.•0°Ÿ.Àÿð„”è LŸp?žgÜ‚/‚Vð³|=g.L¥œ9m~LRp:Ÿ$:çlJ2E(¸rÜò“ÞeãÀùì(`G~S ü”šFæŠ#Öñ)Iô?´àVÇ]«ã¨ŸÊ<:&è÷­zÆp@è1%c™¶gEJi3cÂDRšÄü}(Iód­ÈŒ·Sµ°R)Sº,¤Óóûàà!ß´6 /›<˜3Ú‚mt*â‡gÇ@HW´2sêK&¸m l$iàÇUQûFØ‚8àB°1è3B–¸ìsˆ ®c‡ÂÀ6\;vª‹ +jÅd°È²±5´ÞÀvÚà9(‘ ¼Âg^ˆójG.Ó†‡© À”¨½å~,Öièâ'¡Šî9. £:š±s¯5LCP”&%šŒ3T,!áyZ ^ƒñ)¸ŽgLÚ”›SÅÉEÆ™š‚®ä&ãê’—MCS‚ÓSü¤ä)…, ßí,—v!ؼMÒ/{L¿(¨†ñ"¶Iá1£\)9Øýl™RB)æÍãöP­èÓGÊìè¥ÜP&Ø”«Ø²DCé 4,óª¢Ô^0p—Ë@éhq?"ã‡&~?޳zÌä)¥ãÊdb…fqùyÖ #6L%[,~2Vq§ [’“v¥O Ço0‰_«2߇œ\‚Þo«*d㟃ˆ±OÌv 1ôúªØ¤³¡Ì6÷2PÉEÂ}¾ZÁ –Ê›‚¨â*“§¶&åÚÓ[]ìõ†žÈ(&P€öSe{¨¼ž¯ò}ñÖhHaEmÇpêU/ûßÊÍòPw_¨ª'FÔEgÁ=Ân9ý¬Šû¢¦Hè‡ÉßH§‡&R$’Ô¨$Òu[ Â—%f@©c _¨ …ß÷[úmáu³]ïŽh[r¶)>ÇÁÑ(‚m'Œ«ª±£µžâè§â)Í6¹††ºÄ’8‘ŠÊ õ Œ¸[iMÝ8Ž|WO‹>Œ©ãŒ¾z<€/ºƒvΨëÃòZp…Ü„ða¸àÐØNR¢†àJá7)tøR6{r¥Ï怰`€!Dœøñíï¯_Óî;€øypƒñk–Öãh½ ”ewÃ8ˆ €iÅ}æÎEV:”Np*ݽñ:?äþšOCÕA«T!|®Bc~¾ËkHQÃ!ªbnž×‡Þæcõ’¶ºÒ¶B§4½êë uü\¢ÆcÏc…fК6ó…LÑj>,s¢²EzÂûçöËŽ0n/(qê¼¢-X7£* `–„Ç\ÆžY<>L¥’ Í(^sBNAñšÓª´¡?PžΙ½ î ¤ØK±5ú´2‚­š:¯ _Ó‚vÇëÁn­õ,;3Öá¾eCÒKÀÛ| ©„3/±¡)¨FJ¨¶6„§D }GùrNÍÁ^ð¡o/Ñoc·þd2øÔ™L (ˆTœÏ³ñô:D¡ìx‰ažàXÓ°p}ÞT.L%NŸWq ï'!h `-›«ð!8•ÚNBÀ©ô*]ão×?]¿½»¹|Mr£zá&b }–bGòj8rÜ1I«B]qþÑgŽ‹„ÿ~ÉCÆÌD"\•%G aN•ÝÀ ]õ¹ hÈK%OÇäËÏ“t"\´y&è°ÑÁ¤©Èfd¸Þ‘œð'ðò¹à5”xõ° +D‡ãKSìé2 ÅOz^Œ|„*9ðwÖ¡1ƒÀeÂTÌU¥žMB&˜Mhv.–ßC.A|Ëå¶^l¬žèž6~DwÊf]Í]à ’À?L–,Ãl$?T{z‰Žø1§Ü[㙩Öcä±G٠÷>î„írQË[‡mq‚¶žjÙ±{C§н×!‹eœYîzu…1ûˆY˜¡#ª›=½¬óö;§âŸè¬Ûœ¨namZ—€Ž< +aq1€„îÜ7NÑ„W@PLB8—FÍmïã ÈU~ÞÐéwLîŸâ!½i«mÜ+lŠ÷dÂöf/ tŠÖàPIÖg°ðÄìÇ㳂ø¬4Ý<³çá}ñÙ‰0•‘ît€Ö"”0¦ ©!Bž’ Ñâ¤ç“ЮЉ'4/ßàé9£ «˜mS,ð7娻‚„>3“°$5€c Ktü‡$yV¼dÍt%$r½¡oÅ—]…éù²»Aí#Õ‘7"*3t­—DzÆäËâ$)7~<ú;ÅÛÚº+ü:7%ûªM×v°¦®ü(>­xB>œ7Áïxô7x ”•aùÿ¼Ó/vn}˜JuåóÑðï qân¢úk•M Å ôKÙ6ñ†2úê xä§ùá1ÈYžÀLx‘"Þ…Ðg¦°¨ö€qªî0»†|>oÆÜ2€5îÄ$„¬Á:RÂ}É‘,B\–±¦ØÊ*ĵ~ZÕé^—SÅD ý*nõ³ÃJ¡ÙW2%yÂÒÙй™„<œJxþÕTÉ 7 IÌ•ð%$O&K^OBÜž’|°Ì~¶/ ÍGŠsØR$Q6„'²$Ü&`¯„0éRÆO§INŠ)¨bšäÌ€jë0QýZ‚0²¡H°Þ»—Á‰ã-w—ú*…«9UˆaRðp»Bž›"ûmãTü«)¦€QÈãDWà\B´_C ‘ŽA¤Jë(x ±*‹Ut xq¿ð[{hÝ?]ÎÏ«Cñ=ö>LŸÁ™8’·®Þ½yÿúúî:Hw ÃB÷ðW* Ï5—¡NÐ4÷‡XúÁœ°*ºÃ!ÝÍ“pMļüéÛë«_^Jü÷ ùP,«üc'Âþù*5á]…¢ÙGÙ}•'3ä ÙÝß …ƒ%0ç{œ£æwHþi×Ó ³íÁ0à¤PÎWX-²¡ç“ÐN:ÈDŸqVâåy—¾0…&¾Z§ØNÉÛÃá(šé¬ Ú×Z®Áìsp×]=!cvjËà}á–ÿû"œDA¶rßÞw?-L‰·š„žyÞ :HÅ8xœÊÑfRL%Öè/äÒé°¹>¥‡xì/Ã]ºg¢úé÷÷¯o®.ï®?\¿¾~qiTaxå(5­-äúÈ•gϱ´åˆÒë"_=Å>GEmbpñÒSA°j+ƒÇÃüF²÷m’ïñø6jKËS¢-ÑOÚ+ÚFŒ±î–TWùn H¬½¿õè€hôzåªÜ·wq?ÈÖe̲—»ÄÜ~¸þÏûx•¼’uÕ2 ^ÚÞU))ÝóÛÁ¡‘nm`ï`rØvü{x¡ƒ§Ð!F…e~hÚ£ "?8ÈŒ‹ïj7¶$œ!;/—ÂÛwAc+‡|Ö:0Ô·ÛxéîùR%þmîfäå~{h÷®³à•U‡µPãŽx+œK€}e­‰ÿO8‚¶ endstream endobj 380 0 obj << /Length 3381 /Filter /FlateDecode >> stream xÚÕ[mo7þž_¡ò!âñ}É~KS·u‘ĹÚw8 -E^Åôâj¥úr¿þž!¹’¸^ÉŠµzq¹\>óÂÎcÑãø'zž÷ ¥˜×®7ž¿â¡wõ¹?ÿðJ¤q ìüööÕß¿7¦'8óÜ‹ÞídªÛ»Þ/ý·÷£‡u¹º(¥úꛋ֦³-îF«»ØûÃÍMl¼ùxu1FHß—êâ·ÛŸ^]Þn±”'I#ŸPY€JÅ8ÈLTZ§™P:Rù¹ªj¼ß· °Å… #µ44Õ/¿ñÞ^þÔãÌ8Ù{ Cç= ­YïæÕ?Ú…0L[™£N¿o¦«²Ù f´íÙZæ½É‘Ç«òŽ`›ÚSƒñý@jVpÿòý…SýÍb¼ž.¢ÿ[úÒ‚+æ‘ôå@9¼%á›ë÷ÃÍt±Vòê0$ßaâv¸Ã¶|[XǬõ ¿rÃߦ™ÔjóTxÒI0 QϬuMáéb+;Åd¡rÙåXÒY&¬Si¥"&øº®x£Uû·ÄL&-Y!·Ò˜OËÕ°ZÖ›ª§Â0%¶£_ÇyÇËEµ¦ÑІ…š{hUqlÅͬr=«-3˜ð Ö…6 ¦‚DóeÓ@- Û *‘á Ôi¦WLáÛ.0}Á”·9æºM©s…«µD²ÞÃÍÊ6•ZÏøn1'•¶*Mz÷]°"½gNËœ•ÅhÞâb”´Œ[ѪRð“0ý†‡°{ž¢&ï /† nl³wå㮓å§9\‡l,¿Øûl:)×Óv¾ gRÈ_ÁÀ•1 ~>Zø)ŽÝM‚. S‘»<ÅÀ;@­ |uS>·,Q‰ï”ó]ÀJA©ÍaO^¢ÁÔ·D>±t¨ÞêS,]!°pà0¤67Wä ]_}ת“¼å)UªMZ•Çä/#äÖ ÎË1<æ´šWm@.Hìÿ¢MÜ’"öâl7 lËÂÕ„?”dtgš B2DT‚÷.Áf;ºÉ=1ãfë½BØ«CHCΤè¯ËÏå*-•ùA¯ëßM'_Ï¡ó}9&§¥E]º_=`\Ñ/ÇÓ_¹ÐãÔ)HCœ¨d­rCLI∂IuÔÜ•gÆÃFá ½;OjZÁ_…™ŠZWÙž™GŸä}í¾ÐBkß71©’ê…dæÚBØ¢‰}:Û…#ee× ªL4@Ûb æZw æX½æú5-,×_•£»¸¥E2F?ºÖVh¯ïGëØZ•“rUÅëeý¶6Z}.Ó@b÷ÏéhÆ R)ú7a¡–ãAÜý tl·"Ûþ` »ì°eDôÂUÏ8<ê,‘‹èEù0•­Sž·m9öKÄ]@>²¶ òÃu[”˙оLôÏ™›?_~wùáöêÍ»(kR%yJÕèQnžGŸ‚–›äꃪ©qWNF›Yê.¦Pòz¹Š=¬hŠÅxú@ŠoóH”ö8“y¤½h0_¸­fþ”ëîA{äA[~¦®¸#¥©T!Ž…Ô’ f=v€*9"›ƒ3µ>îEØ/(/½ÐÍeç£Y2`£ú·ÁŒÔ†Öãý²*ãÛéÖ,×ôó%ˆ6Œ×¹ÝÆ—£ª*WëŠE£Ej _´o²7P=ÅHeÃàHçK}¢O§=Vô§ëû8d}?­b_¤úªûåfvÛŸâ~&«²ÜöG‚ãXd5äÃÃl:…SŠØ1‰'O@ØTiP€'xAŒÒ:šÍâò¶p ’Ö£†#QPÜœµÀü&¦âE$fUÎÊQÕK¦îñÓhîã’Ȩh±³l}õÖ!øç»wÉMLbÏb™<Àª G`ª¡Ëÿb5tâkŠè]±hßEM%„~¶ˆ® ÈTD—A+¢ë3ÑålþuŠèšW,mnïEú'Äyn\;È•rtƒ­p»Ñ}Z›­Þ¾ÿJ¾PîHý=‹0/¤öÉ}> stream xÚåZ_oÛHï§ð£rˆç4ÿGûÖͦ»Y´I/ñèj+‰ÛJ%y³½Oäp$kl¹M?p[`-qfHÉáC…ORøÇ'Y:±R²L¹É|õ*õÔú~B׿¾âaÞ&N3ž½úû­'Î~u>ëek!ž©$ÎÜ×2jɹcnbœb\*R´\—m™·UÝ þÜsäÚ1鸟/M†Ÿé.f 7臬p‚þv`…ƒ}fÃ+$·a*혞w¡JHU8Tî©ôl¨‚ÉU(•’±à½1:¨‚AJ@ä]—Љ†pæ'^U’9逕`Îe_*(ù Cdf˜´‹Db6ºx'gv~Û'À ^)†ÕПøÒ`W:†+˜F‰è®\€+ ¸ +V½ÏpžÇŒ1ƒ{¦ÀÆãPõ ¤Ò¶œÇ@*d¥û&RCd@ªHäÿ"R¡çF,! ¥´H™uòE(¥)¸åbép8BVBÙoÂÑ1D8ŠDþ|5ûlÆ0FÀ˜QP¹úÔB5ÞÐôÀºžî†ž÷ H’„o,ùB†rÊÕhm Ã8˰¾ ØÊ¿öJ³¡ðоðø)Ž&^ž¿½¹=»z÷þí9€ô@ÁÅðŸ<@o  4ÍÝft¬°òÂ¬ÉÆÄN‰Ï¾ì˫۳ëó_ÆDCRPZîȦ ˜/XϋŘ‘š4¯6ËÅŽ7··xÉûlKˆXñ Å¾æPÚœŸÍ.þuî7p~ æíØ6¸rðl_´§QAéÒ?—ôîÄŽ¸»W÷æöüßï/˜ë˜ÈõÚº®o›Fjãû·z‘ M{ÈIõP÷Å×Û¾ö3Jû‚©-Éáx¿ïxMZ’^Ãætö¶wÞnyE€‚IMÓ™»ÄãÎhW«;!ã[j8Ïß;X0Ÿd)ØÏ;@`{°0@úxM&O¹ô°«ä^QCÞ첞òmû(ëÅ29×LA!¼¸2$µ.–EÞã+Ìq$ÒskbÉ]=¹‡Ñ©cŠm4Ô-4ùÃÄçÍzî¯^<ù¸jÎ2­E(è%Ëú³tõîvS®[) 8…FûÞ†ÝÞne›4î!9(AyÇKí±›¢†ÜŠë7 ư%Ôn™q/¹0gP2ÏÊJÊb:ä~od ›‰Ì¡8°·Æª\Wõm×ÞM3¶'«™äýìP¾Óx”jõ‰›H¡àÚð¢íâ—,c•g¥üê­ ;Ôæ8R!ptº#µ“™I&aí1dfX‰™Xfûr,Z²ÎCh“[(Ëb,’My}È|ô ÌÁÁ¦/øø TÆj> „ Œ±/ó2~É<+%Ãbs§«ÄR ÄÙµjmߪEË nl¡/ Äwû¥Vܹœ"iJbTŒ÷ “Y£¾£w 2¸Ý {„Þr’Y0Ú0vò(¤ õ·aW›"Þù÷«¹Ó<€Lky¨wà˜úaÓÄ2a·zÇ4cçW@R”NE¤2L ËÄÆtc_ ºóÅÀÚäê1ÿ¼ÁÒÁºÎ•ž^öUÞÝߥGâà X׊žrWCÁã‚Kã…‰É: ÇRJëÐz‡9ã=h`ÊÁ˜²æeŽáL® +0þá4gŽ"N ~-‰$^^ˆ„3,ÅqdB#ñôD»ÜþÞÔeCžÀ®ò²,§äÕðùÒ%uµiËupW(/îNEWßb»JÆ »Á+—¿n-ûpÃÂtÓîvV±ô®ú&é„ÖØ…ñï¡+P×jß ™ú¿{±¾•ž·DöjãÃþ7 «÷{_HëŸËÀ¿ä ãîKÒºõØÇ–O¡ufxøÓ |ÈÑ sß–‡­”õ‡xrWØÖ7‹ù¦òªÎñ´´.šjSÏ ÿÎ.¥{ ŽŽç-%5Ë2H" ®­R¿¨-,R@ ÿ,Êè^~ÙЯ¿Uø-W¡Ë àXIñüFP=8}ŒF ²²ú›}šcH }š¡Ä±“̱C˜ñ£ˆ´€I Ñ&‡ŽSדÙ»Ý.G˜>GÐÇ.?#_†Í®W@ÿŸ}š³ÉúŠk·³ó%(÷æî[1xÇ¿ã•Ö—²PÁìÅ "fá’ E ~ØÉ8ErÿÉwú¶øŸ Ü´ÕÉ5åÝflÇYÅ”ë·L o•À·ã‰ü4䇞‚H’iÀ„ë.ÇsÉaê›îF»ÿpJÿu3§ÝûHNÄ›-þ±ÌmSÌo礤 ™Ì÷¢…šåô¾ö¡·~¾tŸð|ý2ÉèJ endstream endobj 390 0 obj << /Length 3460 /Filter /FlateDecode >> stream xÚ­[Ysã6~Ÿ_¡Gz+bpÜ}šd&Yo%vvÆ[•¤T´DÛÜH”BRãxýv EP+5%»>¾>€Ðÿè,#3Íyš 3[nÞ;ZßÏÜçßQ?o烙ßݼûö)g”¤ÉèìænHêf5û5ùþ!ßµE}1çœ'üïs!dò¹Í«U^¯ÜèŸ?»‡÷¿\^Ì™¤,K˜¼øýæ_ï>Þô¼%c¯\$Î<^¥®’e$’Í”)åÂ-5¿€Oe²+p¹ø”ïvër™·å¶Jq9³95©MÇç±\¯ÝĺØä¥ßó—|]®^X]Yý¹/ëâ 1eàËëÛ¶§RV°¾Ý©_Òívß[Þ)9>£ßS¶þXç»ESþ¯X¬ËMÙ-e$+«Ú9Îò’rS;1žZNG?jϬnðyñ×n[Ç\ñ¦Î«æ®7ŒçœÑoá”ójÛ>t„¼Ñ¿¤¿Í‰U]Ú¡[ø…ÖÓ7þíà–§ lNuJ àã©`ŽzþÙÃ"ø#”Ï„V©É$㯿“Ù ^‚3§ˆ<Ú©›™H5ð´ž}~÷oŸ!WJe*³´¨Š°åh‹iØ ‘ÎC¶ ÓW…¸n¦áª2øÀ„\A'œ&·£ '"å^-”q÷ͯ?\žì«¥uRšüî¿„ÈDÓLB8B…r0¡LÂì7×?/öeÕræLÁaAZ’¥¢È?ÍxªEOå7"‰g– §‰” v`u,GNtÊPŽèQ5–#pèĈvÏC1†¼8l’iaI ã-övÁLb÷‡Àßüf‘–jÖï@f[/š6o÷MlOZ¦œö³¿q~É èÈÀA|MëØÆÿfB€Á(yÎÞ©1Ò̒⼋aèàG\1ÎMÏçÊ(KaÏÓ2Æ’¬ýÄsY2 Y y¶1¥êÔè¬Ó’Ïr@¯(”Åd‡ë"¦\ÊijÀ{ížV™NM±+žQ°6R_û×1SATª•˜‚©€gCèËꌤJN²QÁDª26Vßi×ÇV‘±ìì=TÿH‹½?ЏB™Ö€AàDLdŸg¦†¦pIQ_¨Tù¦ˆ`†¨u>SŽîHiÀô¤k˜N8m^ßí¢[ݘ(Ä&"è%) &gJM±)! PlêúòCÔV8™Ê¦X>,Ú§]tsRA¤0£ÍÅÂc ð6D!¢û…`*e’[R„eGa*²1¨4WÝ2ëâÏÅÝ:¿oÎÚ‡ ÇÐÏß*å̼yG½bI´€mE7D@ðqûs m®ø¸ŠˆD[ Ѓ™¬…øwN´•&U賄Xlr˜„Û@ªŠu„yùl6 ó 2 .Cæ·eµ*«û¨!Ò… 83ÈŽy¦BÎ/LYíöíb ¢Y —y´/š_°·" ¤Ô?Áö¤2ËF‚ÝÿÉRQG8Cš™©I+Àž‘¯ìœSÇÆ=”°ëv¼ÂヱiS›Lg, —%i6îÓ±žcÞ.»uæËvŸ¯Ïâ7 Æ^—­e©ÙN°5µ`líCØAš‚³ÀØû 8¿œýn÷í³­h8˜ê+zº„£ì ju®!S£ì,lSXKJjýÖÎBdûBˆÔ¯ úÆ€´ÍƒH QV~íÆÆ‘r+ÉÃH 9í~ÎìŸðQ–„5oDµò7 ªU4UŠž3¨IfIûÖʰȖ¡À ²ì±Àvõ…í2 ÌtÒ÷EíU·Ù^@•¬Ê»'»i;øsÑÅã²Ù¸øÑì`žNŠe ž*–~ЭÀÇG¨H£‚ƒ…cå5§25™Õ•1·0…„ïÔynÁl IIΞ«îmlu ®ØS#®AÅv¤å†Š“Ìj,iZá×®340|(8^#¦iÊø4\4„ÿ€k´ùa¤íÐMÁbÆ!ËÖzÈËWþq»Ãþ_¾î¼A'ÿtZ³Ïö”PD…C 2_7~pÄô§“ë*>ïw»õÌÖî`íØ¡Œæ^,Bѳ6L¡Œ†ÀmIñ®¥÷},½&)át–1Ê„,¯®#zÆ”~žŒ¢BÅh›Ÿ>~øxusùþ'”µÀã+sÈ‹Ü@Þø_÷³º  ¨˜&wðï×~֡쟻ºÄÎð'–;œ¹N/æR©äòÎͨ<ŸU1wF©TsÁg¨9d€6XW¢lU¬·žÖ’ZJœË·GF|¤A³ŽEª¡Jd_·ÔÐU±Þ„"1Xj´S˸¶ùØ<D-ø à 5cQ2É6%->Ú&†–Ij¾=ʺ Î%ßìT§DûÒ¬ŠG7Ò›ª >¡IŠÊ̺ãbW°„,hðÄ㎀ŠW{õ‚fg!Rf˜%E<w$K3&&a eI)vÀ2†Tc†NÂSÈÅõh›×W7ÿsƒù[æt&º5vbpt™¯×ÿÀóB–ì›ÂMør!“½ÿÓ¡90ã·¨æ§%Ðtm}u@Ð=ámœÕ™†+‘ö¹EPjªññ· &BhK¦Ò`dŸŠf»¯—Eã^åMã vé/»ààcÙ>¸§ö¡ô-cmMxÞY/Žoì:¬à¯[KË¿ª‹u‘7Ñ~¯–ÿ`ƒòð6‹_ôàÞˆ yù]‰ÉÊC¢[Ÿ}ë+”¼‹–68Ùë 0ôЇÔÔœ·ˆL3ÎOñQÄÝð‰ðåXݪIørY ùFO⹈šˆ©ÄãŠÓA ă`w"‚ú%Ô®ÄÀʤDÀvì1œÙföBDš™ÑaÓ°+ÈnU¤®ŽWikõ•« ¬]x|•ãÈ)m<WiÕ!×Ö§¤ǺI$W¸;¾½ó)«Õ]\ÙÏD©•½ñM‡˜ºÁ8!“d˜á3s–ºA*Ã"ïz€:;J1½CÚÂj§”p«÷ëË ¥XWAj!¡‚Ü‘Jñä@OÊä¿ 8€Í\üå…¿«¢)í"ücƒð>lÂ.SÁiÛ¡r7J¾!´C* åå$¡š4üåÐ>Ë.´Y>Ú'àÙ…ö!ϾýH¶þ~Ÿ 1þ·ÜìÖÅÆ7úuhŸ¡^] ÍÕ‘®Ø³aÜUú˜=ðØ7¾É% FÕ@ÒÉÌy˜X,^én Úå¡'> stream xÚ­Zmoã6þ¾¿Â÷¥P€µN|‘(µ¸ÚÝl‘¢Íöš¸C[ŠÍ$jmË+É›æîÏß3JeÛ;þ`rDqÈáÌ3/”˜%ø‰Y‘ÌŒRq¡óÙbý*qÔæ~ƾ~%ü¸9ÎG#¿º~õ×wi:I\$…˜]ß§º^Î~ŠÞ<”ÛÎ6gs¥T¤>?›kFW]¹Y–Í’©__]qãËï/Îæ2²ˆdvöËõ7¯Î¯Þ©”r‘4òù*‹ñ*…Èã|–å:JóB«Ív×õL? ³ Ɖà±*+h¾Ÿ~IfK<üf–ÄÚÌÝÈõLÅÒ(´V³«Wÿ˜dª‹8Iuȶ«;“yd7ÄúP˜2‹“ŒVâ†Bxy¦£Ÿ“4¹Ýýœe›×gó´È¢z[~ØY×I£Æ–ËÞUõ¦\áŠVÑõY®¢¥#5va«Ž²$ŠŽîšzÍ϶8Ù³¹ˆè ‰Tn·«jQÎi½u+‘ÎæBÅøãeŒ¥J]í0ø gž%IW&‰)f™±ÿ«tCYѰ†Ì€–{é¾™`)ElÒü$,e›B‡,/ßOðÔ˜Kê“ðÔ&–Љ€çW?¾{wþ]§ET7,ð’»t„yTW:ag‰Díê`P¯OÜ[Ôl¢®¬6xMD÷<¶{°üüãYšFåjgY„Ìc%±^Òäq ÄRãŒÒŠ#¡u,s‰©Lœ+õâq‹TƉþ,¡ì‰~Ìòü»ï¯ÿ5Á¶Èã cNÀV&2ÎLÈ•œQ‡… «pV]U®¸¿(W«Ø£J€Có\ŹÁqa;‰‡érÑíðâĉa„YZÄ"; ýpšt +ÖvAjù0ÁØä§`šË8QYÈ´#–OlvvEœÊ1ìb!vß_¼%#S2Z×—ÕÝ!ª3½C¼¥q_²\ѼY=”›ª]3i×Ú%°Òè$ºvÖ…WÞã/qßò˜Æz¬…Û0© ͬÛ5‚mYÈècURCÁP«–IÛ²)×ÖY==x¬V+~pëwïÈ¥ü )Üd5?m»²«Lk»º)ï-?èÊΓêÝjùŒ†À'u¼LpkÝv’ÀiÓš×›ÕÓ¤¼À†ÿ±pݭʆûƒ”Jz7Dòæ'=sjhÕ·Ë®³ë­ïÐfèÿ®Ávk<]ÕÅšèèjäòtºîñåß~¬Ú‹¿ºcÜ07 ó~@cW5t¼&˜„ÖWïºéà#q–§³GŸg|ðTPiš(ÍÒÿ'ôH“ì0ôPè³ÅF}ôAý‘a°¨,¥¨C»¨Ã¸¨C!Šq'ÿAO¨ÓZv<áo©.ˆÄd8y°ìÇ–ª<º¸óïRôxÂp®zST*ƒiµ,þEÅöFÄÇŠöL-Æ¥ÒÑŽˆ¾¦åìÚŽ{ÃZ©sר~ž[›ýL–':0C,áÎGû)Ûá Ê)#"GÅfÄæ©£û¶0† üK‘+}œ'§à M%„ê!heËÖN© ¡¿:c™˜ø€md[d1/¸l¸á3 ¢2Rí@F’é£CQ°£ÜL2ñʆ•¦å}û‚Ï4R}¦òxQuóuÙþæ\¤Ç‡øùNuè;‘¾©ÙN†¶LáÀ³¡wëѹÑÙ,­·´zã¢ü‚= [²æg0z‡ªˆó< Uòñ¡òÉ\‹¡Õ\H϶ga¼ãã–å ¿dû»ÒÒø^ÞzïÚt--ý¿ðEEˆ´ðDÛ|¬~N p.CFw5 '×DŸ¹¦‘gJµ÷Lh4öƒ÷G€r]=9«gø­WäÙÝp„ „NΖiÛ¦¦¡«¥ƒPî(Ç Æ^¢Ôci“#@’€ Ÿ©Œh´ÄÒx|éY¦žå.ÔMc½|êͲÚÜÚ²_x‘3M‡­q¯WR×B’täjèÁª¾¯xžæ_^¾í_e :˜{ÂÌtVÒ™†YùQˆ Šu"ÝT&U¡¹@é³Q¶IÆYràÙ8 ¶õÈãƒÅ|Ý¥ä¿{Jó½ V½Åq›|Ón¯¨Ö×gné¥'Ï€_5=öEkûñNÎ+§5¼Ö˜ñ~&<ꪵN&Á! Å*ä‘•ÄWBº©²B÷»˜:ñ« 0Êrt^ ÷.6Ò"ÙcÝè@ Nit¹Ù¢;3)&¡ÿÖBÔË–;,F4FE]–*¹ò;Ÿ2­B½iì芑XžÏê+‡…æ*ïO \µÞ®ìÚãkïò1`ÉÛt¸‘÷±0Æ{]2¤KL W‡±ö÷mÕ¸©5Š>°Ø¯Æk}ˆmŸ¬- …Š3y’ÚM¥Š?®-œ‚¥¯-,/.ßž¿»¸¼¸>g“áôÌi£é!Xg0ƒ‹ ÷œ‹`3¿ãW|¾¢F^Á%GÂ-Bë»ØT…“-©ºW5jjÊÛUÕ>¬—KdÒÛ‘xÉ]¨ï®©:;%P"x½ï.\ìK^sÃó ü‚PÓÈÃ0« ïÕ®É]§C !5D$„”~O@o—™6–P%˜’· Ü—¹‰Ž€4ê¸:^!b‘k7•z^ æeï³wZWïËèÑ îACX?ÄVì¨ísî¹0ாT§ò"F˜q s¢©DþÇæt –Þœ–S•Ya4ìMœ„§AÌØ;à9TfÓ̸Ê,y‹²õÿL~^w!*¹ôaP>!΂dÍ)V'VàƒÕiâsÎP߬P'á\¤±9`¼´í‚÷]ß’G¿ÚEDŽLJºµ,"ŸÏ;Í–'®71¤øäOA21òkräjòzç%×äˆÖÔ»®ÚøÎºì3Ἧp»äù^ªæh™ÆI’Í–*« #‰-ÝTI_¡­f"äCqŽa^qÄCxœ"êšrÓÞÙÆEÕŽPû‡’¾Zh¸LAÝ:žR0 ôñcýKb\Û né °‡s#ú÷~eªðFÚà+ôÿBÅ@ÆRBàºdGwFg&ÝTF‰¾h¾°Û©,¼0°¥â|e"id!ß–#Óߟ-NÄT&˜†¿H4Gˆ©âòW:*õÞ›¹òQ:.¥J%0Æü…ÓÓXEâE~䆴ÔqRá†*Ä\µ8•Î )z®3“g§3lõDL3l5S/žÆ>+Pn‘!pVH¶¹Ö¡%,Á+R§/R»µ]ç’rœ”/€ÚY©MÜÄWh,™L!¢›™ßI^DL•#g1‹ÊŸ%E·'B¹©Ò\H37•4ŧŒW çoOÀUQ $C¦“¶«ÝÑœ†§J{™ <RfÝ'¹…šCí.évm˜l»[ü{¯°¼«às :ø šIéú(¿ož˜\mîêfí}4nÉ÷Rc2oP’͸šù1Ò@¸õrS‘cã뎩 //NÂà Ó–oÞ_^_\þx>cf<g ?/“"ä|y~þöümÌÒ¾ðâçKj-ÊÖ¾öçšË¶÷tL¤Tœ!É’ÀC)ŽZ³P&†³’¹Š “Ê.E ðÍó“0Mó8wëq4Lœ þ4LñB1 -“ªöý ´ÈFך¸ .ë”÷\pCó‘ÜâCï=‘q/ 7Éî¶ó‰‰ã]WµÅKý'\&êÙx`wwn"þZ‹ehÉïµa¼Ç bÍV/"WÒ§Ëø¶uŸòBuÖ;%G-Os KÿÓ¹+“C}ŒpaÞ1f‹X'Gî*M‚óIá.OÂÔ}€•…L§=DNì$<‘#äûÏP!n÷ÈèˆÌKß6jøè"Q§X™†“.T®,øÀ¡&¬H¨"ð>C‰«Ý_njߟñU%º1Å8i™2\ñ˜|tÅc\ÄÕvÍnÁ_žþèþÝÅ´#¸[¼×í?N îð¡€ñ÷XÔèÝ­ãÉ~v"¢r:(iI›ZsÍÝýu :%ÿ­]J•Úþ ÿïQýgÔ«ý\´î²âËôᬩ¬¨>ðµ~È“¿}¢«/& ·=NÄ/ÜÎ÷÷Hûolq¬\­–ÃN{Ä%,DC*¨^ÊÎ)xÎÉ¿ 8‡ä(í“ò&¥ÜT:û$P —>l9W˜Oâ70pF€[= SœÙ µitûW!LØ—+¾¥©·Ÿû[­,øÀÀÕJŠ<4¿jC¹Št5{šüfÈY\Vã¿ä‹)ÕÁ±ß,ºßoªåÍÁ<ËUð>BÉ›77—ïo(Ø:ÿç5O§‘"À‹8Ž‡Û¬ý31ú„ûfe7ó¿÷6<¹J™Å*Ùßõ¸ÐºÆûËÄ^ý÷Óñ7ƒ±Nüèºüõ†`!àH =¼ZÜø‰‰Ég@7šã7‘Ó¹ìfœõzâ쳑 _OÂrYÛÝÐÝúë^ÿ J£‚© endstream endobj 399 0 obj << /Length 2038 /Filter /FlateDecode >> stream xÚ­YmoÛFþî_¡ûH@µ·ï/-îב©œÚ2îm!ÐÒÚb+Q*I% ÷ßof—”I™ŽSˆ.w‡óÌÎÎëŠ (ücGFâ¤,6g4Ìæƒ8¸¹:cÝÇ Êïgg¿TjÀ(qÔ±Áì¡Éj¶ü<¼X%»Ò磱b(¾¥TÃÛ2É–I¾Œ³W··qpþáÝhÌãnÈÍè×Ùg“Ù[qþ•B"ås)uSJ!9\´•„ E]ú"Íýr¾ñ‹Õ7ìÆL¦Úë…Ï?¦ _´iX›¨L7¾“ Ívûr~ŸfË4{,ºp"E¹ýÝgÞ$‹rŸ¬;䬶ûòm_ÜHM„ù…*ö] 3+7ìhO#к…ÓœOnn®oðe“ü6/ʤDøÉþX1F$ØNS°Üï¶y9÷y¾Í›Ÿ¿Û¤Ù[-N“I%Íÿ¾«÷Ã5´CƦ‚Æÿ\ûì±\ÅÕ¿ý#>饭X>[F&ðÿ|ç}~ÌüIÒ#í>Å<÷kŸ~~¿xˆŸ¾©wXmø˜UÇž·ÜÛ±¼¤»Å6+ýŸå|µ\·U†óéõüâz:›ü{v8p”Ï÷¿„ý—¬p1¯˜é |,1\ÙfCˆNã=ÈòýÝååä¦i0ÈlKy÷¹O~?Éžj}Æ™7Oú¸ Êx7½›Ì§“ÉÛÉÛ¯1«Ü/|úÑW–õo7Ûj„†×œ ¢øuá_qºZ—vp¿N‹•_Æ/ªsý Wwq\;Îcn ªßËD$ü×ÊgþãˆÛ!æ F!ü—+Fv˜ƒ¤™¯æs_îó¬¨Ö’jv¥†¿mëÏñ,ö5U¹Âƒ ói6bü ×0ØC¬~†÷qœ’õÞ¿`VuZúão˜¤„K5€?b —@ÆùùW:XÂ"0 Ò >ÊÍ#§€Ñzp{öSWòdRny`%‹ ]ŠFu/J& k£}ŽÌ™&TÙ>9§„:ÙFŽ^áOPO`¢hh¦q"-â3ÛVûõús¶ì' Ö8â÷°]¯·ÈñäàÊ‚)#ÜÉ£tT”yº(Ó-šV(Én`„–`AÛjøÂrŒ×q¼Kòdñ-/¾~ es÷ªUùAUüB™érƉ†©f&EKÕÑRÃkt ÜsXL“8(krÌãçé,@p¬’sÊi Ê Ó&pRâ ÀE?(#¾âñásŸ-¡¶`ò ö>[û¢8’±n§©B#••¢òø‚ŹÖ ¼«í~½ŒãpÙbÂeKœˆw-0hÒ’Òª¯n‘¤Ø¸n|u];Xœ÷V=Ø¢,êßÁ Ÿh·[Ÿð«(ˆ2æ©ïVÆÖØiµ~<€g-l¸ØÄ‰Ãåe-DüüS¼÷‘¨ÜÆg±_„VÜû%'3zø.‹K  2]ì×I޹DXDìèÔÃÆµvñ^`QíXkhv“"®äþÐX‰㣺o¨^öU)ªñçÇG7ÄÞ9'YÜôçÍv_Ôvô[1¢ endstream endobj 404 0 obj << /Length 3543 /Filter /FlateDecode >> stream xÚµ[msÛ6þž_¡¹/'ÏÄ(Þ_ú͗عôÜ8ç(7×i;Z¢-ÞI¢JRqs¿þv± $Ê”ÓVìdÆA»Xì˳ DŒ8ü£ÀGN)´M—/xì­FÔ¸}óB¤qç0ð|oäß&/¾¹2f$8 <ˆÑä~ªÉlôãøÕ<[7yuv®”«oÏε6ãM¶šeÕŒzß|ø@‹÷oÏÎ¥2Œ¥?ûyòÝ‹ËÉ–¶‘ò72‰#¿Â¥Ðœé‘õ𠥉ÑlÓÌóÕ™ô㦘fMQ®Î`&=þ\dÔ€×Ô¨ò_Zæ~ÙR•N0ådœSÙ€tü™fðò»s£Ç8r9RL:­ÅèËö1'ašû.{?qa²‡š8Ȫ‡Í21ûºœƒ@é]½™bÿƒ§vR5Ø{­4©%~S¬fhV9=E£Â)“@£êÙ.-%vÖxÆ­?EvZZfx€©ó ,]£Böªe.k’Œ¼e¾>Q”«ÛY>$yA‹ä;ðjnÜF+Ù€¼Ökèöã²jò;;÷ÎŒ'íŒÙz½Øz!ìXFSýB`bniÊôé];mꟓUóŽ9w´FiІºPÔó°ûI}¡ö4[,¢±ãã†}0 d%˜³î$]´ÒÄ©Œ’Äõ,_äMÞgֆ填 NwéöÛµÕàv†!j=sî`±O¶è'nxqOí¢i÷dÕ,¶ÓEüÙäiäÖÌ=(Ó£ÂJ‚ÿ¿«óÕ4>˜qyOÛ·IÁñ{@í*ù€[ýÄ %éaæ@ýÄ/š*[ÕËö»-‰SŠ£¢ßˆs.j_—EŸ¤Àëô)3à‹­UŠb8vk¼Øûˆ£³šÞ,ó*_|¡³¼.ª<–»M¢C¢‡ž%♦¬¾ ˆòøÍ•Õû[|.$³Å~H†­ÿq4øžÐXN£’Wh#õb“×ôŒû„¿M;‘ÔSdb4èßÈx6bO&à†·q*Ç“ð_õP´°W„d u¦Kòý-nÓͤÇ&9Ì‚€²â+º”o//^#íú|cA¨AHƒµòÛ’¾º¾@Êoh§)®Ûr. Àè¼hÀ‚ž‡¯î¹<¤„¤öL{ß%9¹½x×·Rï˜Iúq*Ù ˜•âˆÔ£Å‘0¤ã}îŠc:‡¬å±hæà¨è¡ÑH©Y %€ñð}Ši€CŠ3s€g"-Œ;ü%¸âä2â‹lÚl²EûI³‚0vîÆ6Å2¥ #c;ˆ¢c@``<š:i¹`´´"Nõ,ÆÎ2…ê3MãûÏA| ‘ °LiöI> o¡m1nGV«ú%õ?ÎsØ«”k—é7Å(ÝF<õt¾¢¦÷›Eï¶±i_8ƒlF{Šfê÷3ðWç1ÏW/׋¼ÑíÖô‚ÒlÕ›-N†µ¦NêÉ«óe^×ÙCžz«²É§„™ñ9«Ò @6如q³$qs€´)o¨ÑPƒ:PaÑ=½’,˜m˜3Ül˜ÉÉãñ,Ý9AœàÇ>ÅãáTZ0_î!lA¯µî~.šòÀ£®^õW.x¥°E\Ÿ´5.øKœÊØŠûHjDWASÅp@òÕÍ÷ï¯/'—´j ‚›šÚSÊbf9û(ÿÇêGLòÏñ/úâêeÚñ8äY{ù|ôµ»àŒíä¢2Dÿ«ù8ú0…±·HPZŸÏ©fW{)YIA¿$աνt¦¥#p1 ßy¢^$Rÿ:ó }j¬£O•Aý`æ¿‘*6’[gôôvU7y6ðÄåÁâñ}»xlÏ £¯–Å*Mô=?¶ÖT5‰N}Oö—¸šÊOÑék*|XÛ¤÷÷±M#¨`µ™Â×5?zîÔ`\O6gªfTýÄXÙÖÂz¹ì5%aóÚŒ´uàgÅI¸\µ÷¦‚ÜËÚ£±D8 ù§„¤C(º$ß¾›\¾é‹™²©0Y –«´í’Ý9t«ŽÃgÔîáÁ2.aGqθ1_¼âžYp›CHå”> yó2ª1UâÏÈ}W è;A’hÿH䫪׶WCæ…0UkÚÜk¯¸s$vK‡9,Äpf!âžTž€Ìø8•Vî x#ݪr,8m=¿j:=D‘zIÿË«’¥#ËÁ—x /L†t¶ö6Öéx[DèÊáOS tÁgÄ4¤LC{³4‰µqÐÅÀåÓà%‡tÜÅ©„ Ï¥iR;æ„„*„fgºD{ó4,L™h:X©]¢{¡abû=Ä ˜¥Iµ·[O²¼UhSÐÆ­¬ò¬iÏçâzÊÙìar%èXå 3BOµU»;)Âö"O3é£m…ÆÖ¬ÓŒ÷ï÷i>EÊ2:+,èKuRæày@¹À{Ÿl`«Y$>ÖY•-s:m¶­=!£å+ ×A6ýaYƒ‘aXæšqwËBk&1,sHB”?– æez’ý³è’|wÓTƒÐ?¨¥;Xæ `OÀÅi‚GÿíÕ¡b/À[F‡moWmWz—°uë:±+ÂNOµñ­jSåÔW¦ï3z¬7wuþ˦ó9ºÃ„ÒñLVº¾Ã¢a¶%–CûžÊ%0¬­B,‹¦‰`ÞE× ïÒIõ"™ÙÃÜó¾àþÒ d„®1Ï÷çw›bÑôM§˜Yxv6Œß[zà 78æ”ôÏ]×1uL‹~œé^™’y˜vÆÃ€üñx~·†‹dŽ<¥ÙØxÖoH㘈¦Ä wb´;p*£ìãFöp7ºûÓ_/ã$ð¥<„# ¾ú c0 ô $±¼ûÕ!ÙçÐÉZ/‡ ©QÑ…?X&9‡öH¤M§j(þ”Aá ¢{e]å÷yEGqÁõfÅÐM4С8þÆèævÑ-¸¤…ÁôD½t­!@džô´LWkZâ÷-¹í\sûÄ@O2¸õéPrSÓ¹:`¿þ2zp\<Ò'4K©Uq&©ÌóÇêˆæ,·CUšY-»dû!dzšF1­–ÚEh¢Eב=ó’ ˜{ Z“{kj¶§&€÷]B*Ãà€bÚ±Œš ‰vWWÂ×th„­#x,äŒ!Ê<é4M˜ñq*%ìÑ›Ás7 I<Þ–é¼¹~ÝC]By*Q/˜ÐÖ!:¹ùÇå»äL,$Íú°.Q¹9VžÑ¡«Ç´õ´âŒCp"ÌÆípŠq@¸§¹âÕÁÁ×ß_¿}ue¾ÉeŸåqN'Ž™÷¦Kœv"Êzï*×âšh ðüzYaš¤!MJ[£w'F8d¹¿°NÖ+ÁX¼éV,[àád.TW™j꣚:µÁf—ÐòœJ¡øE]SÝwZ´¾ÜÑénzOërÓÄÂ%öEæ©$xßoÚÆ@Šìc=œÝiv†(VÇ©¸8®VX±Ñz’öjÜÛ}’WgBˆñÅÛë·—lwRnýµM¶Åì  yQåû…‘©òÇŠ*D@ÒÅŒz·Uòü×¢nök×1mÅR1Õ©±CÐû¸±:NxÛ»H,Ã'?-°&N‘ûeo•˻ڳ±']•„Ö#ăԗFW›5Êü¨¨'=ËØ!ègWpmÖ!Æ‘”/ã¨:‘Ûñž-Î#öî9ÝœçõöØ7ePq.„p'w—Œz“”xžrضO÷ ¬mõå*x.Ú¡»Rà·}ób‹s“êYn›Œzõéõåõå›OW×oújˆžmþÀ¹óÝ^µI²8§Ÿ×|²&Ý›ªlo€g‹T¿£ZÞO]–-dKrÏ«¡oz]!“@ú€Ërõ×Tœ%†Y¿LÁæ€l€¿/Ñï?N>^\ÿ‘þ΋i}2½Å¬»ÞÞ9Èš¶Û#¿T­ß´æ)Æ» øi,à¤|qÿuA«Óå|‘þ€ë0€äƒ*¤âôjñçþ}ûs{ùþúâ‡?s¤÷¸Jü¹\Ña¶«|½h/nâ3žÅ¥ ø²ôaœ®YÔÔîY`„±Õ›»è £… dBœv‡;xR†.ϼO;þXeë6]äñuÇo·×`޾ñÞä×ÁºS ßxÑ fríÞ‡Þà á_é!H`7®CqYLû-Åêx©èÏpIYÓäËu³o"*)Rk.[%CSI'Ëhî¤V¬ÓÿÄ^« endstream endobj 408 0 obj << /Length 1413 /Filter /FlateDecode >> stream xÚÍXKSÛH¾ó+t‹\µšÌSܼÄPl±sØJRÔÄŒjeÉ‘d¨üûíyH–A †ÚòÁóhÍ|ÝýuÏôÃx ö"ÆPÂcoº8Àf´œ{¶q~|@œ\‚AGòÏÉÁÇ#!<‚Q‚âM®»KMfÞ7ÿðF.kUƘÏ> Î…QË|&Ë™=¾¸°áÙÉ  ‚ÐħÉàÇ䯃ѤÝ[PúLZò!ʰ‹’D!â^sD·@ÅÕáÕÅèëåh|8º::kBÞý2†U…’Щø“ÈŠnš‚P¶R“AÌür¥¬ªýåògf†¸?SµšÖi‘Û©âÚý¯ê ¸*õk¥ò©“]–…V΂ UUr®*Ô‡8p8,ædÌG³ÌªMП‹üCmqȺV‹emÇëÂþ[E¬@úp7]P‚B£(Žº®9ü2>zK·pA´†úï\íjÛ©oµi‘ú|¦òü:ÕSYZëÎo+Q©ò6ºõ~Ÿ#ßuræZr@cÿv „/ÓÌ2@ÇߦRƒxaˆbaΫª ˆ_-Ó)¨Sà1æHÐPsýÛìÍ`@<òîŒäÂcˆF Z™wqðµ/l) Q³Mܦw¥\&ÒO+F áþh5.·›¿—†1V°ëƒ|`kèï[hÙ´²ÿ%x4-ÕìIÊ…]ÊŒ'£ãgq.yçh(´‚4 לÓúFºVj•Tó²UR·Jê4Ëb_ÙË2ÝjX®Y¦‡–™N/¯x¢IyB0cú^ñ$F`³”£5¯ Ɇ±™ÞàzáN‹~ÎÓ‘8öÇ`Rò*Î3Œ(„^Šçø¹ª{6å Æ÷²)Oˆ6÷\¤ÓÇÃ,_Ð¥¶W†Yó /nV0KýZAëY¶‘Û‡ã/ã·Œ³ÓËB΋ºI ·Z=%3;aò½;gÓ<…üRå—GÒ6ëtmÒœ|õÛKN§j Ÿ=ã@ÞƒK‡+ØØHSY»É¼(2Ë~bî#nQ‚è¦ù'€¸ÇQ”"‘áv-U}uÉyÕPˆGÒˆÚt“A&ûÔOŒ0}ø<:}Û\Û1Ø!´1XÓÞ”Ím¬at¦æ²½hÝst‡ø‹¢±ûÒfcõNÎoâyêtŠïé5:é‹™Sf·àüûrr9<}'×LZ˪“ÚîtiG®š`%¾S}ºvVZW*»~/œ«…9¥Íý Y“x,zõìgºè|tv:üç\Tªe&Ý·[©<(J´EìMß±1Í2Ûjo,m½ e×Ì|cou4Ð0îUQÖ;k°íIñumtÔ¹b7íTf¾Þc»Ô÷µïSúÜÔ »‹sM)¾ÝK³7*5_èΩ)59E3zz]MBg!;3­šºcïjæSüÛpÚJ­¿˜Âm Íç¶³õâOIå>îýz%‹gÝûKðwš«·ä·ÜâîØäÛ‹Icÿæ‚ì.½œ¯ (ö˜Ø‘ PA¿ª^``HNÌJ$ 7ër‹àÁcGOxxÈ?€¶ÅÅ6\9!:ûÜ©y!Xǵ9/Lý¡ äå²ZeR¿‰ýc û3YË (Ó9Þ,sï 5¯gúc™ÏúžQ¶×4.§¹¾43ÿöVÀ°©Ò¦þI¸óô¤eÚd¡;í;”îô& +µ^«MzB¥`åÒNôÓ*«ð°GBäU´Š !cè¥N¶Tå–$|› ,f›{BUÞ09Ò“»¿QÂIØ>Þ(lžˆ¸dö"cSæ#¿œ£8JöwŸÙj"ØòLÐ^ 7ž VyO’zñû€6ö¢Aý endstream endobj 412 0 obj << /Length 2679 /Filter /FlateDecode >> stream xÚµZÝsÛ6Ï_¡·£g"”ø$Ñ7ÇV<ºKdŸ­Þ´Óv<´DÛ¼J¤JRIs}w± DJT¢VºñÄ.öë·»4„ðÇ6DR2«âÁlù&t«åË€÷7o¸ß7„ÃÖÎwÓ7ß½×zÀCfCËÓçöQÓùàçàê5YÕiy1”Ròû‹¡R:x¨“|ž”sZ½yx ÁåÝøb(46áůÓ¾M7´µG2‰;÷¸4ªÍ%5“JL¬—ŠXý%äRݽÌÀJH»¦± Êu ,‡<âCÓW?Ïò¬Î’º(ÿQÑ/Ù<Í/DÔY/´úšT´?/jZy‚›GA ÇÀ"ýV¦Ÿð•4Y¤ó·¸ 6Úþ9[,úOÀ¯C.×Ärû ”´ ²g’x’7LÁ$]fuÝ쨋ßÜ;9ý–U´¼Jª*õz« ÿt—‡“Ù,]ÁÝI±+ò¡ãkãÒñ""OQV¡ÌñádŽƒŽÌÝB[æ^WÌq€‚‚›áÕpZ”ô$‘¶6Ð$YÃýüq³å³/à¼(—Ébñùô—צsyÁ™Wbf$½Fÿxõxw;}¼]^ÿôøþÃåMŸÜb0ã¿%µ­¡FÒ*>îÊ¢NguVä4¯ÒòS6K+šýê0ñãjER˜e@N¡ÎqõÉÛK$èý‚)«Dãß,žé‰vÑ–ßܼñíß7N+¸eJ™¶ŠéРÛþük8˜ÃpSÑà³Û¹H&" £ÅàáÍ¿û"’©X¸£Dä‰^õ”‚q¡ÎBRÆ ß!y;yßCÕÄL[~ªè[Ä]ª`F¨¢T¦xƒ^¡K³PÛsð"`¡5ߺŒBÉø,$#Å¢HwIŽ'ÓÑÍ>YÅ9ÓBžƒ¬OÔ¦_èà?Ü ¾Lýøt¡Md‹äiA.ñ ÂSÚAä‘6åÒA*¼ˆN ÆA–¿â«uýpP¥(?‚h¢Jª´Tñ(•{WÀ(Ÿ“ ühá‚ÓF{¹Üȯ ÿê¢D¦Ë½P&…QK:ŒÛF{ ਣiÌžpÓ®p 5@Gù¼!Üü SÓàN|8A€Ýmu“[wã¾»ò+-ÛÁWÂMˆHAµÆé<ÂY—“Š?;•)Ízâ€Zj‹Ì¿êšgw ÿub²û†Bý~üa#Ïâ7…ò ávážÍ;pŽ)*9è¨ùÒþ²²s±£åº5£‡ÇÑwã2æJî£ì&7Ù06ïe†6½úJl›=@‰Õïžb'‰ –ß]^?¾O®Ç“›‡^^C I£m3k›DJcŒèÓ¢k¢ˆEö´6E [däŽÒÚîÇoŒvE|ͱû#QŽ.«£EòÃ$ÏÓ½÷”ç8^*Zp™—ÆXTBâªäŽî7™ZõEë Û!ñÍ $ÅÊ£N¬N-À,wG©Ð—ŠÍE{(kH“¡H=e¨LŒ]Ê$ÑŸ;¯’2YBrT°JPi¬D#¡U>ŒoŽ Pºùž+Û£‚Ô‚ÀØEZžÚ¨³R¸£4{p)ÚµGXIò†¿meA1) >ޝÞÒˆZÙ¨îxpqGûâ!r¡ŒLP—KÑ5ÑNiA¢ôÖzt<»ýp}8/‰êÃN“) ‹<¨¨A±ãÀ!@D\œÖ¿„Š2æî(EûŠàŒÜ·{˜PÊ4+ àÙÏ™ßÑ<z<'µÃ®—b”®]Òs( ±…ã6ˆyà6ow2¦´ª¡p̪ץçÇg‰?Ü}_]NÿZ–jßÁ¾Üu@iCÍuÈLtZ¡@\ãI`{Ú€ú߉™Ù˜ÿ[D<­kÏeEšÎ×TŸ¥´Šß©q9¡éöp9ØchwÚ•‹2MæÔ;!§{… ҃jSò'Mv‰Ÿ(›Pà=eó¡i£ú¦ooúê-cVåñèÇiŸ‚-gFê–~M,;U€–M }ÿ—¶Î:ÜâB“#á;.GÂE—#áŠKEüÑ=’¶ç¦#íVЇ‚hÑ:Z÷'—GÓŸîFGf#¦ÉF©Ãk6w +u‚Nû’Ò¤žÖž<ˆV0ŸXy†.Ó“¤ö•gàçk€§bÓl| F„’[€ØˆR¹/œþ+4gÖª®Ø×9ê¸é nþÙÇ¥³«6þŸˆ-ÖÈâO "Ú endstream endobj 416 0 obj << /Length 4234 /Filter /FlateDecode >> stream xÚ­[[sܸ±~÷¯˜Gꔇ!î@ΓvílœÚ•“H©:U›-=CI<;jIŽ½Î¯O7äXÖzX®²Hƒз¯»A¶*à[¹be„È´«Íã«Â·¶÷+zøç¯X·†ëÉÈïn^ýé/J­X‘»Â±ÕÍÝtª›íêçìû‡ò©¯Ú‹µ"¾XK©²ë¾ÜoËvK­?\_ÓÃåßß]¬¹bÜe‚]üró·WooFÚŠó.Gž®ROWɘÍíJ[™3!i¡°ŠÛëÛï.ßÜ^]þô©Ï·f‹œY á‡ûÈìæ¡ÂµËì©m.¸Í>ÖÛ*l«/Ûûª¶ñÛ¸>Qˆ\Jæ© íp…?ÿR¬¶Ðù·U‘K³úäG>®D΀§ÝêúÕ?R‡- ãgÙ—­à©lá9œ¾Ì>áËŽúêÝn}×´Õ6{hͬÍ5L½f&ÊÍÏè§·ßÿõEg¤èŒ —uOÀ^›U›úß“þœ õñbÍ  ÷Pîëk\(+²}Ó‡_žè÷MÛûßBçüÕgêï=hœ±º6mµ­ök\ðjMK\3‘3Åh¡}]î^Ó¹4á°ê –uôxØ·Õ¦¹ß×ÿX;’…^"‹'úø´««=öõe_7ûp²NHä‘?YŽ¢b äï»îTLœjÁÄJÃxcå\L”壜È\úCŸÈIL“1•KÍý\Ò ¢Zn6ÕSB>™Ž¾ aÍsËYL¸fŸRµúÎ;Ì‹bã¾úD-£ˆ!çà',Ë‘Ÿ.»><=í>“_b¬,e Î0ÝŸPhÐ}†¥üiÙ9Ûgs3ÜO…GOeˆ”`ÆQ.BRa~„Å$¯Þ§óF±Eh›ÔžmóýÕÍÛÿ»FñL8—¡Yi1TÇÖM¹Ûý/%æ]Em/”ÎÊÝ!¼þ8´{Lvã¸t?KwøÐU¿*²sÔ†“uÀw Fðý~S×dhXÙ ÂV@ÅY.WˆóŽtœÎT8ý• ·¶n-AÖpo|#º_Hp#BY†¨#„˜|´¨A¯5îèáÈV|+éÏ„õþµíýC~6V‘^“h«®9´›ª¦÷Åü/Ìñª<„ËWëpBqâ©ëê{Z ؤÍ‘ ¥lØ4-P ÕŒªÁºÜ]ã6ÑÍ"+E?ÄŽÊ9 « ®»¶ˆ µOø!ô—`²ê/ÚPOyçËf؇Z‚)"+ö©îÈ;—ä°QBá¯y¨EnÁ(K0Ò?«úÇ ?BÀTàÏ:¢²¾Jù4‘+“— ‹ªÆxL7)óL¬Xˆ(Æ=s¢ ™OC$–<ÅHCò3%a-Hz›âÎ’´ð3I¡ž‹%˜—À—!jÁ5 ;šRý *Ó*c•%snÆgоm3ž2Ÿ)zÁéE– j´‡GÕ$$³ ‚ ±M‡Ù÷˜ä‘ (LgßûRµ—êºÜÔ:1mv%Ì[êmvÌá[¹ ofƒÎ’$ú9Ö(‹ìz¬ËßaQ[Ù4FãþYØJŠwxZôÖ¡šü"Dãmal¶I´0§$S %˜•_‚&š=´YÑ6ÿùöÍÛ«›w—?âQ» ‘sC¯P³¿V¬ˆøêGuá/õo«»ò° }O0Y[7}s6«lê§r‡P]¸ìÝÞ˜Ð_€ä€.8~3ÐRmÏ, I\ù™ò}‘;¬YóE(:àÞÅ$“ìÆ"•rKÐäÌùB¼Í)»™ï•Àãü: âÐÆ‡ž¸²ohÜ‘ÃL½–ïzf{†RgÝÆÈP.Ήo+¤²'2áÖU‚ç ˜ ‹xoÎã¹Ì­µ¾ál8I³„t ’NåFÎH¦™çbÜ41A2ÓD¦Ó)ª *6Y¸-6@ñ4ZUI¦"°âëL©°- ìØóÍž¤óÅ"œJó°‘¾ùÕû}*”U>¿iãr‡g8%=­=œ^ÖÉ…u‰$Üð£×tÌÍS kø£ŸÅ·¼Ù3~}èËzOw¼0dh‡>6}¸ä5 Ò¼³è±äâ@D,Ÿ.Á;˜Šk×lS¬c8¸E(ã­ð–åY%4bÄ› Î1˜Á³nƒi…Pb^kç@aX&Ç<ýcœE”;b(¿Dß72gM'7½yUÕv–hÖ ž‘Ê.w;‹ðk‹vw!bFyøŸC[í>ÓNCOÓ’¹o¨·!u‚.Àgz'³Õû»¦]Gq棌 @ÙÿEp€žx݈-¸€[Ñ’¼¼ïš®F>ù·² “ú—ø‘/ž·EBSˆx ?›Ó ©—Èéù+iÃE—grzK 9½ˆäs9½%h†œ^¼Í¿^^]½ý1Ò#Á%èraóµxJ÷»wWoÞ]ýpý…ˆo4ø²ûÑÐum*ïᥳƸPëÎ16>È]˜Jú1¹,ïIç…žFµ ´ú‹Q-¢-å7®ò…hËÒ«œÇ7 ¯[‚*ç`ˆ!´Œ¨bˆ)¹¦J”ñù~t{¾UÍl¨,LvyË‚ÏMÙSØf˜~+éš6kîèo›`C½¯!lõ‘e¢ ðìÖÙå[+ÐÂø(Ø ùFh£ûëøÔ=4‡Ý–žGø„/ÛªDóŒ),“† ™½"{ ãþž^êžþRž±H'æ$,ÑBuᯠÁ :aÀ¿âTb(é者K]¼p“n²Jæ*¦dñ,™1ˆù ï ü17ã-3ˆ€äŒGmõÛ¡nÇ`¡‹3Ðrõ¯LZ†"þdà1Ô;SîAÒÎñ"?ïÚ˜´´sÍs3^!AiëN–od¡}0ÖÛ‡÷ jJgÿ_mBÅäÝ›×ô0)› j1XƒÀ#Ö$–]GŽÙÿ8.üâ Å‚ V[_CQô©DT‚¡‚ ¦Kfò×Ps>^(5dðá•"îÔ˜÷Ùürêᚆÿ2„J<øÚÐ,=×›á¹iË{¡A½CªÝM4sF¦Œ2d*üfÊíºÙï>?ð§’À:”ô($@8L¨{“Èš‘=¾U(Ÿê([XèaWz¼Ï˜Wt·%FU EûE_‘ÀsE…˜ÂÁãúñÅ FmQ”!)ÔðŠŒƒsÅ€‘_S =½¿”B0àˆ¬¢d‚>ó–„Üù©·‰ˆ.é3Yä3í<®ÂïW¡A9js¨'K`DXÒGXÆGX’‘–¬89¾ ©öžf2 œ*Ê'¾FQ×ZϯÁ°h"•íªý½/ÒxÉø¿ œoî¨qy¬Œ‘`ÃB”!õu©"€w˜AD¬Ç=ãëQà"Av}”D‚õ ­˜†@UC12é¾ÿ`ÞÃløOÕ6ô4žôÏB…ý¨ãà¶4Ò +uÁÑÖ¤ØØ¬M7–ÝK?n\F(Âù0únü*Í¡O?ª"ÍÇç(ò¢œÊ·•Þ„1^µ(ÝpVVXæU §Â˧_ññ ºcK–Ìú+4áABŸ¯éÍ…/Ë­P›ú@Ñ#v¤Ê¥;±c%üT‚éáSe:;ÀñXÅÄi¡ÉÕýú±ì~E›£&W«@LŽÎ:f˜lÕp­¥¬÷µÃlñ· ^±B#†/ûmTm?”`èaÁDURª"˜Â`ˆ„Ë­3®Ÿê€}`¤ð¹ D«~(âeO^×ðÁÃi3Àih˜~òØQSz¢ÄƆ¦ìªöc½ “ÑI€…0Lz #¼Ã^´J¨ì ¹4«ƒKƒG“]öêNzÝì&àÄ™ðilóŸaü sðâ[ê {)ðp=T°…vbkÁ²ÖGï&) À†ëŠ'ê’q7YÆ/fã\•ÿ0¼?æƒ Ù¦M¶ø¸…·ŒÓ*cÔÊ¡³ç•Ü!˜±ŒãLp¶ƒqݤlÃÏ"¥íxƒÔŽ7H÷¤ŽyîS8Àœ‡‰nx†¹€rœÏ‚àwôî„©©qÃM߯ 1žðB‡¥¥˜Ç‰eø‘z›SBþ:4Y¹#ž®öIvR¿|àÒlÝÍ endstream endobj 421 0 obj << /Length 2637 /Filter /FlateDecode >> stream xÚ­YmÛÆþî_¡|1xÀiË}%£\çš80îRûH–V'6”¨”ÏnÑÿÞgv—2©£j£"ôAû>³óòÌÌ’Ïbüø,‹g‰”,Sél¹}»Ñúaæo¿ÆÃº9Î{+ÿzÿìOÓzÆc–şݯûGݯf¿D¯6ù¾µõÕ\JÉo¯æJéè]›ïVy½ò£ß¿{ç/z}5š‹,’âê·ûŸÝÜik!¾’IZù”ˬÏ%ç)Kg&UŒKå]ÙÒ>ä­]u„ÿ8žÈbŠ ·^šŒÎüå·x¶Â䳘©döèVng’‰D¢UÎÞ=ûû(a“2¥NH/ëQªiÆ„š†jFK²!Õ tPZ¢{ªC)ºuЙ‘Iôk¬ã‡¦yʧЎþ?ÙÐÂIÍ×·a"„h*™äÉh1FBä Ÿ„f–0ŸXA{ çÐ*ÚVp‚$ZëOW©ŒÜ¨Œª}[T»¼DOÆN(vw%Ò¨-òªá~üÒé¬ï®«ú¸~N7šÍyƒôœã6º3ýãQ <Dk»´Å´ä¤©ˆÖuµõsËʯ¶[?PìŠ4‹¼­jv5×™ˆîvå'?ùáJ›(/‹UX»öÇ9o{*ck–¥L™àÉX¡ …£0–ÿs?xŠ]w×v„˜¢ÖÉ$ŒÁt6ÊH8 Ro냽öj’J²›¼šx°Jp Ó‰¯æ<ÚÈ—W°”]æ¥Vå;ÿo?Ä*¬/ÐlýøÐzüX@w¹zÁ,#Û‘Ñ®jý0áôAÉT3a 1,6é%‚’<ItÂR)Cü! ïÉpð$UÌN$oïFìgjšB/ùÉ5ßÞ|ws{ÿúåïÌG5“ÚÊ2E¬˜ÁÎQ¼ÇâÔ9¼q¶|¨wvõnˆ(JÞFÃg¼Mp¸UŠe@ÀKMàˆp”IÅÐÙ”QÎĉ“5 Ƥe&&2–¸ã<É8/'<åË¥Ýø»”)K´œ„®ŒbmŸlc—#4az"š†c†4{8M‚tñX”¥×FèsCí¦SÐ>¯ó­¥ŒÍ™œð—éG‹ñIÔGá€kÉR;IÎsÑ8ù‡q'i)΢7†éXLB­e6$9†<™lš™`q|zÍ#0/ë×6µŽrßí<€Ãi¸Ãpj»˜‚ÿàs0(:ÌçMS9äX.éõ‹}êÀ£,$`¼ ð¦©õÒ6´×D[²°CÓúÞЍSs‘VÝf>ù¶ãA¤¸Í~à”Sbãgòµ+¨yhÂ9E» ³~—‹f9™0õÚÊOŽ‚‰ÒÈ(qGºo¸¹µ‘寔¸ã(™Y„;ŽN ÂE: á ëµ&蜚…à€LÅ蓌áÝÞ«dIɤ«±n~óÆ·\*&•ï4PÛ?öÆ”+Â$CÂò²,+Òá#áÏHôWÛmÕZJö¨G™`0'Ü>jHSvy¨‘zõÓ¢AþHï]¾ (óˆ]ض›q–â¨íC&ŒÅíV#¬yïI!LK§‰3út©ƒÙ¦Íß—E³¡ûϹˆut¿±~a]Úb:Û<ÜÅÍ8ïòíÜÿaíþ0–Q"ØB³:Q,¹0PLé$­Ž ü»“\àåqC©aJ©!u›Mu(W]¡Á€@úÑquˆ¨ó]³¶5Õ]~  ÿNÈî÷^pNžèöÜ(cS[‡µa(ÝïÓ€Jnem›žŽiÆ4×0WÇþG=Ÿ#é¨aµB¹“\”¿S€F¸£„ê DªyFâjÉl¢ˆ0*ð$:šEˆÕú$4õG™iö¼•ü"VÊ#í ƒN¿“ë:Û£aë ­Ïf%)×ð]“IžÑšÙסòëlx™sÙŸR|*kQJ?µ–QÅ)Cê4D ‚“‘g5ç5à<,T—Ĥ<­.W䄸‚JE”˜.)D§‹ÞÔFÎ0¤´^Ä 1ZÚÝÅij#ïW]"A+?\­ÃÉ~O|)e3“@0R3).,)¶\º£âL>ÁJâ'¯Ûo<‡•gð_¶®`ôIl¢{zŠ©BNl4òu9@ÐeµÝ—–„§uˆ[Ôp:H:`àf¶ŸÝ BTíÂz±¡ÿmU‡‘Úî)¾ºs;Ρmâ^,ÒYÏÛÜ&ËÇÔ?å$"€35zàLÝ8£’ÌÀ% 4ÓT`8E´/Þ¸Aºã3˜öe Â¥Qðß…Yö¥ê YP‚4k ºáQ‹!Ýñòª…‰ˆR(?%:ð_’½ÔêÒ§« ˜6oM0Ðp‡Ö»jÜç­éŸŸ)á’ yð)Ó,MÌeQL2l‡Ž2ªËIGHRŽ‹n ’™b 1x@òÕŠ©ÛŸoƯ1Èš' ,tÆN ßÞ ûîÚKžïHê½äŒºþÝÎ-hýHH×ÜØÑ«©³DÙcW~Qþã@ÿ¦«bªþûx„ Œà-íà€#*ÄŒƒy·Â¿ú&îÕ—F…o½¨IyéêzŸ­4QÏ¡M¸›ÿƈ”+Í`v‘M^VåÀÜ2)ÝQ:þ‚û˘OA“jîXš!Íñ¤‚g,„¤,•Éä×wkÜ #=y”þe°Ú¾›þÉp:Ô‰2zÔ¶X¶ÅjA©®ÐDŒ-6«ÒüÙÿ!éX¼ZÜÞ-(*ßüãþEgIÂ0’·ÿ$YùÅÿv“œ»'°­ù`eð »[P Zì•Ü·+Â.?Ad/ÆLu›ÿsAž9`.áMaí, èÈçpO·ÞŸ£,#ÃG”ç½ _zòñ³“=ž‡óýé÷T£íšÑž/ËÂîÚÅx9¾`k—›EûioÇ(øjlŒƒn;@m±.ósäÛbkÐÊø¬ûµï–A%s/F=¼éÚ낤N¦róöíÝ[êt£ýþcÆ— d¨Zغ®êþþk¿±ShŸ‘SþóbL=ûr›ÿ¥‹4ûM°ªøk¸b¯‚-·ÕÑ’û‡L¹ï+dµá%zñþ°^û­=‹u¤Çúš;ó©óôœ'ñÍpçž“ €ì«µÿÛm jÿ ®ûÞd endstream endobj 425 0 obj << /Length 4047 /Filter /FlateDecode >> stream xÚ­[[Û¸~ϯ0ú°ð•W‰Ü>¥Éd‘6;“&“n‹¶4¶&Vëˬ%'»úßûJ–4ò¤…?ˆ¤h~äáá¹Rr&ð“3/f™Ö‰7n¶Ø<¡uÿyÆ…÷?<“±ß%:^vzþþöÙo_[;“"ñÂËÙí}w¨Ûåìoó—«ü¡.ö—Zë¹þþâÒ;ÿPçÛe¾_rë>páÅ»7—ÊJåçZ_üãöÏ®n[l«Ôÿ8Iêùx–iw–Zê$un–:“Hmxªß-vÛºø¥þ´Z®Ÿ<†»DGiù=æùéå§ë›O¿ÿøúõÕû¿ +º]Jƒ^.v–Üûn_äÿjÞËÄXÓÿŸî;ÛúÏÖ`ç_Wåºà"°Ä&ÿ秪ÎknùŽ4'ÌêæúöÍõÇ«O×WW¯®^µ3nÎ¥rIæ=ÀÒDdšÑ~ZÛâË…rsÚ&)@ýzU„’›ïw‡ºÜ±}_Ô‡ý…œo«ØÇn<©bíüŸ»}l¤NsLø€TíÈ´€ðºÜ.Ö‡eQ=Âüraòõ¡èíl7¡áŒŸÛ-—F$ÊØY*Tb¦MÿÛ?Äl‰— 1Ùìkè¹™éDaÝb¶ž}xö§1þ•Æ$Ê©0”‘‰Ç ­L¤H'´6‘fÙlécdE›gÝÈJ‰DxÓGfzŽ#)4ï p6ˆEè|pCYñs»‹ ÷‡õúW.àÓ»uY­Š%7à¸ƻ߭×;ñk¹ýO‚‰òƒc²ÇXûrQ—;b:’ùÃCÀÑf^ƒ³v±Æk0ìáæòC¾Ï7ÄOõ}ËKο¥ÿ(ç;ªÍ·4wåÅüK™ssÝt¯ËM1²/©O¼Íf6Ó‰–þ¬}Á” ¡„3 % ß¬ŠŽ×ž›h3èyØ.‹¿ iÚÉÜ®‹ªêÎùb±Û<äaC=’ŸØ°%ƒY°¾V‰WXh*™º³X_§‰OõÌZЮ‘ÃX€Í?Ón§æ¸…TÒ¢#+æe`‰´á*ô¾+k.ŒŠ -m’ =ÅıÁI¦}â/G !q5ÄÉ »–éA¾{O¤¸¹ANM’úIvI§P@ì!¿¿zñаÿúÚŸh“NmÀŒ~]è×o_òÏy¯Ëí²\ä51r¨×+ˆ…¼f®†@I,è •:Pw—ŽüsAV tT±ÿR.H!Qm“‡ãÁ•;þUD@%0zSnù™/!DRºEmw_ÄÁ ]AHrNຠ±Æƒ’f?TÏÇTs·U]1EÕ£˜ /ILi«Ý7˜õjDT¹‚ ‚‘äÒìÖ`5±é)ÔÌdçw¼L^R$÷Ü<*J”—80JE’Éô,z%ì eœ:iphR÷^N©Eš¤jùòæÇwo¯n¯’HP—%}Xaš®ÂTN¬¸N´¢gÝt'š’‰% & šÎµ\lbaRÓP¦µ™F 5 |’‚@j—(­û¯®Þ^ý0vÀ2Loš•:ÍVÚ‘€'©­1_—é)æ  4¾ü&±5lbkÕ$ˆ0F¬ó}È?Þ~|ñvLß ³·Sà’êJµ”Õ§X;È!#ášX=tÄOû€’ÙøI|@JÙÓÛ -ÂfHK†°ìC~¸úÓǫ뗣> ,27Éb!? èÈù"<©aEx7É$|â0ߢ¸ÆIϲl H“î¤@Þ\¿A…øSf’}†Y Ö:Aìqñ¯XêI¶šä¤Ìä7©LF·““¬×H˜¶øæúvLg KÝûIPa ¦ÚŽ“9°4‡$‚„ÑŒ íÿf2ŒM£&1JŠìÛ"fÈFÄt!_\ß\ zؘvš…ÂÿÊüõ¸з䴓Ï%EÇ£¡öàÑP!X•T Gho i‚ÉBÑeÓ›lŽ tÜšpµÚÁ¡“ó%WÇÈÄqæì†Âµ­‹LÖ:ä€ÐÿBpT«,:9$%/qSÄaÙ]¤Å/Ñ»ZÔñÏ_© f³äGŸ •h®—ñ]yÏÏ0ݬ‰éѨMÜ®Aì ]ì‹‘˜x½‹~¹·Å29f3©ìy T.r½jW3°(®f´ÿºóLx ÑBCeZŸöp:SNi Š2Õ‡<µQLìLâë#?µÑp©&Y²V¾¥^ Ü9òØñ>¹ãd„K¡§˜ ©2ÒdߨpÏ4sjDÑI߇¼}ÿâú„ëàå$D'×Á[õÑïJH*ˆ ÖzVàâb_ËzÅ¢Kœý¦YB2åY#"!ACÙ&Ñ‘µQ¸’Èò¾‰ñü&*Šdׇ|Í](”Ó4׃~!bz}®ª±íw4¯)–e(8N6BwY9„ãC=¾ÿBªIp±ÿ¸>nU,F@MêÒÄ A»™"fµ8µA^'çž³úøº*°W{¸5±9Î,i}Ìíô–ŽI(}Ì=áßÜÓ¨6z±®ÁWŸWMÀªŒ!¬}ñó¡Ü7-VÅJ…ìô%'¦ÑüXÇþUQ÷"`ú„dÓ×pì™6., %lJ?eÌÃyqx H8/Ι>äi]f2ˆñTO‚ìÀ:ð zÈOè2«tàñ  )ÞA<Þƒn+Ç( ¯Ž Î=HŒ:ù Ó¦Ô9‰+ªÊW%H `³`˜ólY%pê`qÒPª ®´ò5Î ZÛa¢;z†|UùzM’§nE™ <'gÖ¸¸&‘X6ƒÜŨ~xÉÄq.˜þ?¼+ £ü$Þ %löÍ$þ1‰ßƒlb꤄²6×@åÅ.Øç”ê°BVç•T1 žY/¹º¥twÍå}A† $‘EQF¥hû¯BŽåKIò”šóFõ§ÁOzœc2ÂDár°ûóŠ+[F6óNz†ªl/˜ùŸ)^Xì+Îh¡Aò#ù¢@M¸öf[ÕE¾ $H`#à±çÑ:8úýa_À3£)QX™ž‡ªyý(ßG­á~J›ó£–ü>xv¡ûtÒvTïi jxä2¦ðè ì—œ¡$…6¼´p2]b`Àë ÎΖ(FJ…}:[’fS R²&|ñDàGe&˜® Âo÷‘b-êÑ&’óM”S$§´CšÊ ¦¢­é÷o‘œŒ#m¦ÌT¢³t8ÏĹJœ˜b›!‰0‚~ŠàÇ GÒdä´¥ZekŽ5좈"Ç…B"ú%$‰¡ºˆîÀŒéQ«¡ÀR†äê9q7çWÀûYá‹Ô÷‘Û»qDmÖhVöâxTï„1m¼?Fͱÿ ×Ú¤0®}6ÅÔM&Âe™ÞÔ®5f@,{ÙTH½ô¸ªÃÎÖtœïÎýÓ¹/Cµ¼ìv ^¢ƒ—Ù¼·¹Â!·Q)âí¿ã ›0!nX®¡hãî÷»M;–ì_@ìxŽÌø¥u߱⚈$ šr[Ö%™ìÔJ617ïb¿ÑhEµOÁA) ÚóŒxíCüŒ¡D>MPØv'i \¨d«Ó>îh4A‘}?(yXCÐN4Ü2—y îÁ>°Òw¶k„㨽§wY`‘×ÙcþžÌ®ø‚3=º×ƒéG»;¾KT,jº‡AÇŠŒ ¥¡+ê¶."³PÍ]gê×¹rF¼¼ÄR†i:ŸXxvÊPVž´„Ÿl 1(X`S¦Ã ËYÇ™uòT­Š&¶S"3éN²ÌN¨#ʱÐéP>ñæ<—+ãѲ'L,™Ò ·S â„I©úˆ×7#.=ÕfGæ‹„¼úË-S™©v¥´do íábq–Ëxoû·"MᲞ9w¥ÃuØÇî»øÿœ«Õá®*~>4lÛ3Ë|O“°|Î1Wvv\!¸”ÃxxFµ°ß”u$7ÚÂòðße±wžC ýáWÊÀæÕÏà7cŸ@Ø$SYÓc•¯ï/ïåºÇÊkÿäh|)U´òñ°/ëæb#æÙ¿4†IÙ6GljÙÀ¯ÊxióÆ<ˆH.¬Î@ºš[ZÓmlM¢ÀÎÒ§åÉWIòBÐUMö} cÃPð&úò‚fÔ½î™ÅMÌ쉠¨!_4Á¼Œ2!ÛÖ›×XPTÓ}; ¤ÎmerL&ÐýÊ1MiávI7X& (1‡Øá¾K Gø†i|JÁ“ûb¢'Ô>=¢æpF}ÜJÔjµãˆ6FVè4PƉzüÊ/úÂó`—¼ûÿ¡ºÉa¤‰1.x"9‡–a†¢@e—•™Š”¨rý/´Zöf{„,ÌxMywXÐz[Ãó¾ÉfÄXLÚ¥ sÅ@PL£·Be"Í¡Š1#s"q%\BòñÀ„ú¼\ì`ë0%_Ã:ã|F’ †ôÚ°Æ%>Kû°ãy«TÃÔ˜3Í ®˜}CS&Íâéõ®A¿cÓ¶Àeës45Œ/M£©C¹OlÂæÇ"µÇÈ0^ÇÛ0(È ¹DÁ‘© Á€³HO×Ú\J(Ò7P«"›Ò’ ò}È›·¯Æ¯¸ÚØó\PºA eÕ½½ùãÕu‡õbúœ/(ˆKâ K‚;¤<ϾƒqJ]¤É—ÞIŸlÐñœ2ãË–=ÈWß½}ó2\ú½ ¬aüð °‚nž·#P¼›ê7°DëpJð:j·¯B¦@7dŽùYêÒ|ò’oËjÓRáĸÁý¾£oÍ‰Ž §*nã—qr)ØàDÈu„Tçoe#ÄÑJQÊøž»·ÏR[˜=ƒ±íN„ëL¸ùŽS©Mø4î¬Ó{X™0T¦NËJ¡§ M'€Ì¢6íB¾¾RÎ_¼yûñ}óy }*7åvÅù|ß$ã;a(4FUê }Ë}Ô‹~¾ ·ÚЯ €Ò¿”U,† Ó•“SÔ ù=ããù“±‚Ë-CQ¥j®Ù•”ôb•=öm8ñƒ1é0eÒ£ÒW(…Ø{ï[.ì.Â-½ø 6µÄJL§¡AòãèBe ¾®6&›oè?‡*§ž¯/ƒ#1þmYÕ^®ˆ)Éêä-¾1ŸK%0ºÇæÓýšÂŒc®—M¤“M×cÐôû†#ÿ pçå? endstream endobj 430 0 obj << /Length 2089 /Filter /FlateDecode >> stream xÚ½YÝs£6Ï_Á#ž)ª>´Oiâd®“úÒÄ÷Ði;7œMZRÀ÷ñßwW6ØÊåR“Nf‚íj¿~»2 (ü± ¥‚¤2 ëjfëûÀn.O˜£‹€0êQþ4?ùþB©€Q’Ò”ó»þVóeð{xö=¶y=‰„¡øŸ2¼m³rÂÂeV/íÄåí­¥8½~3‰¸â’†BNþœÿ|2oÙ+οQN¤<4î ÊtLd'’0!­¬ Åû³÷çÓ«éåû‹«ÓKäÿýE,ûŸ%°¥ "!Üÿ L[Ò¡*'1ÌPK5Ÿ$"¬7ù$b4aäžçù*¿ÏÚ|éÞu¾ÌË ×a[d+PRcd˜Õݧل'áljRaV¬²H”;¢EæˆÚ‡Ž| "”$‰˜ L1+‘eëtüÏVyœK’pP‚§ÑÞïÒ` k°‘:ød× \ ­‚Û“_}¾ÀyB’˜™bКáŠô0•©QÖL• qºÇô!+—«ÜºØcVgë|’øìÅ 2vN_bá ´p¶jŸÈ>f•uñΰ‰1lc?¡¡óÚ}±ì|ÁI6t؈3‚r¥Dñ¸ï°¿¼›¿;½ú&Mÿ›ÇöŽs“¯«6·Gz„PM¼‹î¬ù—»˜¾¿¬j;^ã¦݀G[Ò ø§SÆ"k‹ªôà 4š1¾"ý²XÚAYµÝy ‚¿íË]åè†G‘æ(.C߉ž6¢îñfz}uúÛk¦žêüq•¡ë}±ïÕ ´³hs§‰µ9TÓd÷yç¯ÅÊYðƒÕ^ç¸ðÒî|÷• Ù;ÁÖåPà°²'ìÖ¤‡R·æŒK°àËìu;ýõÝtv6ýŸÂ®Ú´Qu5ù?›¼\t¼o.ÿé}‡þ3%Ç›É+v_ÎKɯ[iù2óœ½]¼¦i¸JñŒ<¦áYUÂײ—Ü‹G_ìr“׋…ûdÝE¾l‰dEiQþUÛ4Š z{-²Õª(ïíçáqö¾iU¦’ðTRƪ€cU¦‰BÀV çŸêìÑ‘ Ô,j‹,_”ùkz™´^&ÄÂsñ´%p¹1¡^C¨[ƒ)­¢¦hB¯"(R€‚$H«´·Á†/{ *_þˆaäzm$hê…/Ms¢hð$%TñãÒ4dzÐð" sO ݬunY\õõ¼{ÛîZó!àw6UÖX–5p@Â@¨9_V”.ƒf¥ësJ»ôe]mš¡»Ôe× ¡,ÿOeiL‹,{¦Åù‡¬‘y9ì8uØBP˜n%Û–ÎeU¯!ITÈö×7oçмžÿöš>­…Á |\ۢߠ#¾ïðßм™7®Ã]XáQq¶-xØu®8nZP‡ûûA|¢c{oë%èŠMxRpÂã%D&Ül%˜czæa)8aPÇ`) ÍÇl%4®1DYÊFáªÁÞPQ¸‚¡‰.ÑÊ?fàUºP ä”t YDÌ Mãg•.4%Z$£°Ô’h­†,MíåÉ¢ŒAè‰1ØJ¦ˆŠýJ·™Ð(¾ÎÝÀÁ]ÜÁK¶Lã.60\Ez‡W®\u—¯0Ê‹jý˜ÙÌij03 ]þ…YËL`ôm÷Rçí¦.Ý‹å¼Út;•+ä^Ÿ,®òÑñ‰[QÇÓÇêAÇá(  “bÀñìí/×WÓùÔú.ÿ_bb¿0Ÿ@ƒœó1’‚¾“çT  ûN1 GU#K÷T0›¿™½›úÃ%r Æ.©fƳéô|zîGz4{̽AO¥¹`I…Rºöª»aDôFìÕö!y‡}fåû¢Ã>›5¤øp€¯OV*Í0ÒX2%°0h8´RÇþveî¤øWp/fPþñQ8ÆŠ$2ÝcéÇ=¨.¹NÇà }(¤ÞxÈu‡{F×øžÖº„†Qk=†4’BoÅä³j—àRÅ£°ð©²| ù†0…­B&~½[賺¯;‹©ù`/ýb·W-0qÆN¢ ÎTñ½Ã@wˆÛXVñµh^Žy<ËÉQ0¶‚mŸ½Xv ×gÙ¡ž¿KQz áëSæ7§³Û×üyIÚÞLv½™4¿Ò4›UkíÞÚ©&_lv7]²k9¡-Ë?;’ím—ìÿ€/m•Í]^ãOÈv¢²Ïê©R¯&q‰¦»´÷½ØÒºž7ë~)iÝoµþ‹`Ž–M >%Žú‰Zpi~c†8VÐü³E¬ªn}e~L¨…54MÔ€5˜ÄWæK #°Ô IöXv× `sDmL=¤“á_ï‘ endstream endobj 434 0 obj << /Length 3275 /Filter /FlateDecode >> stream xÚ­ZÝs›HÏ_¡G|sÌ÷°÷äØJN·»N.v®¶jwK…%dS+Ð&¹¿þº§Ä`œrN*=†aº§?Ý›%ðc³4™!âTÚÙj÷*q£õýŒ.>¾{Åü¼s˜x>˜ùæöÕßß*5cIœ&)›Ýn†KÝ®g¿F—Ùc›×gçBˆHüpv.¥ŠnÚ¬\gõšFßÝÜÐÅŇÅÙ9WŒ§‘Pg¿ßþëÕü¶§­8!“8ó —Z¹dVÅBª™¶2fB«¿%Ì Õñ–5Œ$4ëí™Q¶mrâùœþnܽŒš|µ¯‹öŒÛè+=ZUå7Q›ii h迬Zz§­ÏX”•Í&¯³»m#°ƒ4†}0+A”/¶[z±jH¢2ºƒ7‹¶ñ´ªýÖ õ$i#Ïd“w”*øo^WDÊTl%#óv_—4é¯3¥`§ûü/=”J÷"½:\Þ,/ß_ß.®?Í—×óùÕüjZ˜IÌ ë¤‰‘ðhQ®‹UÖæ°.mÔ>d-]e~ ú%š—x›FXµ£›E“iË(÷êãã-ª’ ¿zÿ¹/ê|Mbî:g"fÊ‹ÁÉIKÐÝîq›·(F-ˆ —Ȫô5ŒÔÞº›ƒ¬ã¤û¦éløÏÞ8E’€>ÅLs'‰Aóüõ÷d¶†‡ ‹XšÙg7s7À•€«íìæÕ¿§fu¶¤T?c”€5òç"àÆù/·S6™2Hj`’à÷0CªsIÅ}‚ƒ¡C4û á@=ð=pÐEq^é—®è?#ñÜQ{þD€ _ Ð1oï^´ƒøñœÑI°F'XÌYzœê¨ŒNÀXÇõ(Y\’B,•:Î% ‰èçÅåsF¢â„±)#yÿÓÕó0 й4 b¬Ð^FL?+# @ (˜0ö(AØH-sKAô}*#àÂåά¡´*¸­è®ÚB$žSà¹ð3ºÿŒþ6YëS>›A«]ž…‡k(8Ë{ºZº² BZÞ´PgÍÃÎçš—g½«O~Z\^Ü~¨M©Cjñ¬:Ò4¶J΄ձ°GF`²©[‰)þD`?Š™ñ%n±F@’êènßz.š˜ÑízOµdN£Õ††3º=,N"{LÒ0HdÛ:ÏÖs<Ö¤ÿUÞ4¹Ó½D!¼ñ)¿kdnÐ'¯Iõˆ|:Õ‹Qsó¾KÍãxôóüòŸ“ΖŒð ÷§ˆ²VyÑ!Dî0š| UïpÛà£G*ÎY_Ïèo—wY­hv4ä;påªxøwÑ/0Ô“;Õm·Ð!<§bxTÖy U`y¿óÀ!s³òA­q?µ†Á¬Xw˜r´y!CôŠ H*(š°ÆŒóña²=À@Ѐef‚c´}””å½@^pz¸AH“Z¥æn-¢ºÎ];ã)a(Õµâ§! ‘• O6è†CtªàuL; Š>!XŸâM ‘N1I§˜_]‡o_®\çˆE¿¼†Å©Âˆ UÓ¾p|ÿór_”­àPTq…º]’¤—°ï%pqà@' „»n•ß•xbép’Œ9@§žÔD£…A¾O1ˆš8ýî|Ð e>.¥»¨°/ȼqhñó[ D"9 Ó^"»¢¬ê%D vßLí ¤`ýì×äª"áUGÎ:í(h¯Â‚el´=fÇLÙXé–ÂÖNûe‚(€1nõIˆ°<.B¢ÅzÊElÌŒ9 Í”m´ý†F™†*¬/½/=vžÐ©Œ?P©[xº Š]m)O±)Á9Ä nênOáTK^U'!¬ô™±4'ĈRé¥Xí[À?KH‰Æ!ô ˆlJÒçèñ‚BOq>7aBÒÀÎ8êP½0sœ¯°XA¼Å¥„íz¿C'ãk î¬FÅ F¹…?¹Ïko';‚DëbóÕmš*…¸3Ž8¬ü qàa-”Ç“‚Ó /Ì3ÂÌOàÌ•‚’ÊhŒbn)%½ðo a,¶&ç$½IŸâ2 OÿOFCµA­'´ Œˆ\Bé…ÑéDBŠˆ\A¥¾{ š’x2Ú(éXÎÈ"ÍÀ" ÝËáat¼.z¸ùê`9° øó•T‹É¨™@¨J‚€òÅÆœ*¨úܸ[Saýø@T…0®4#ÄŠ/˜?wgªxó¹ÀãC¼r§xѺrs´=ê¶å¦UýIá€S<µ5è ¨ÆV•4ÇHL¶Ü-ާ^Nù'Sx~ Š ó (^¿Ÿ†"e'! 0@"Ún’šaÓá l_s„/Ê(S’a®óÈAkØ´:*r)×yÄ¥ž´€¦â¾ŽÍ‚“å"W—˜_Ó±oõ˜ý¹ÏýÍ œY¹QS†g[Ÿ¬nžš+Ö·rm:8ôÆC?¸Ÿ‚‡¿;,ݪÖÏr§Äþ0Lƒ)Y>:“ñÈB'þTJPð¾²iëýªõípB‚Ÿø©¾Þ¢§þ¢÷6ää ,•9Ô :Zøu\ùÿPNWŽ](QƒªÓ­–ùÙƒƒîfÊSì 6 ¤yÆwŽñÓ 0éQf uK%©}Þyý‘Á)H¦ttœò^/imOAÀtlÒ|óéíÛùG”sw&´8Ô÷É÷(æ>FÈ í8së[C®Ù#­üÎáiUn¿¢ùÇtŒ»ØÐ¤®;}P´úz$ ÄÒž8µÝPgj®»a±»áŽ8TÚõP¦ ƒ[{MG ½Uº6n(¬Qã§%è9Þj;—öÎF–‹§ô’AbmÿAmø€FC}÷Ÿº94äæ®¶”Î`%“ÁâÓîÓw·Ýʹ7/ï!çºkׯê¦V›)¶IÛ2 ¾[‘IJ§ 0ŒŸßtè¿ð'á¦v‚A„ýP9ë¾Èsa0ˆ9ð`µ.]’Û×yã1«ßbØÛn¿@‘¹¬Š>¬q1dÄ0ôô$‡æ‚#!¢•Ú]…K`@14OE÷y™×ä3ð9áèspÏ”-EXF%t &ƒ]G\J%c@Ôõ²%²^T4çóCAñ cŸ[` ˆ>fx@£"úÀj†ßµáø´ïXsPHŠÝ#­ ¼5¸’P~oË kæ*–ú§-QÒþfuU*@qs ÒH’᡺ȋ4)ПñèO{ÅAÅè¸-èu.±ÀÕbÔ²ù\4Xí)•P2×Ð…¶!õ.Q§þëÅ ÚA®îÜ]²4>YºïM÷0uá׫,ºøW î?!…÷Ý9ûrTÛË>zUü‡û£Y endstream endobj 318 0 obj << /Type /ObjStm /N 100 /First 873 /Length 1278 /Filter /FlateDecode >> stream xÚÍXÛn7}߯àcû²Kr.$#€S×A€5b?´MóàØÛÂm ² ¸ß3rñÒdʵ èÂ]‡sÎÎ’K!8ï´¸@â‚$RpAƒ‹è  .Šwí›\òŽcD·8–Œÿâ¸0ÌŠ⎢8µa‘\Šêà)kXÌžKt…®Ù•¤øÇ¬^ÌÖ…À7à3d8$܉ºDL AÆ“EÉ9¸Ä­õ°…k=P.ŽØÄÊ æÌ:Ã]΃K] ì¢ 3@M ľXCí.# 11H ˜ˆ” è"'ÌüÀ Jö"ŠŠi0ÒÅd\_Lb L—q›ƒ ("…¿‚+CKAˆ¥`þÔhòèR£…¥#eã?Éyü€6€j.À%»Ö•ÌWɰuÁ&{Ü6DÅchÆ·PîVˆŠ¡Á—=¡Œü 7È·´†Ñ1™cDÂÆ qfËr …å ib)ŽáOɦq²uœÙæ#4,& ›Ø;11 4Ì«''D0擨ðа%–Ü1€kEÂÐ{u"¸Íà\d À‰f(„H 0†š%Y,H¦d›`©3*C.êÁ‘é\ƒMqk„À²Õh(!m%H„‘D5CGÊYP¡ŒD«b(l´¤îà Îþù{tÃál6_vÃéÍûåêú‡«Ù_Ýðr¾¸î­ÇrôïºáÍx±to±Fú4*ÒÃr‚Tµ÷A`vèÜpê†W󳹎Ü7ßß.ÇÙåxù›gÿêôÔþO^ë^¼èð±0Žà|x÷Æ ?ÿò«+KлÙ͇ï¾bz{F,›ì°{°sÇìx>[®"=qym~l²‡²ÖÐÃÉb~q:¿NŽŽÝp6Þ.Ý'gkOÎÿ»á;8gËk,+doŒ¸ëùÍâb¼^Õ¥Õ­ÇË«ó—óÛ5»V-R‰ ïä|±Wv_@Š~3= 6ª¾·B°™›OtÜ¡©™­¸šÂÍZµ×˜Õª»Å2™ò!ªŽ%õÉ«Þ'«$±÷V鈠vºWÖ?½ÿcMͯ/ØÕïWãâzªj,åÍ)¹k£Yú¤ºÑ®Ä>G}òÌ‘¯3—›U]¾NÏSà¡ …V<ðÜ_u†c<`^eÄÍØäѰ5ã)5žÔŒ'ׂã-Ç<Áqs}™ØHâž‹n´#Ÿû€ýä>Ì©æJš¹Òý$\ê}—Vâ÷B*BÍ x³j'68©ô‚ øS—É5nmƶÀ&»ßã”ÑúTÄ"ôvûØc¸ø±G#¥ØÑú£ÜÊŽn±WšØ§žâ.%êÿd'Õ _·\ø‰¦ì¤¦…ÿ%¢G¨©ÎwâfD²ŸR–ëlÊÍ ÊfÑNl4‡>ÜwlØEI}Þê¼—µŸk-äf-ä-ÖþÄ•²÷^7Ú•>“î°Zþ»b<¥VcnVcÞBN±·÷Ï´†–zßQ¨•žÂÏ †–úS¶;İ¢¼ë¡lçM:{ž²÷¢m€ìëÃ}ÆðbŸk@Ú (í?C!V€‚oÂþ3´ÄÍ€6?{¦6¥Wì|žgÑäúÍ3oùæùzâ3Øxr¬·{ pL"ÞËÆ“ëW§¼å«Óû@”ýת+?ŇúV]ß endstream endobj 440 0 obj << /Length 3620 /Filter /FlateDecode >> stream xÚÝ[KsãÆ¾ï¯`å*µ„1O |‹×Z—’XëxåTªl— "ÁbÔâ±üú|== «]›8¥tÀÌpÐÝÓÓï†Ä"ÆŸX¤ñ"Q*Jµ[¬÷Ïb¿Z½YðàÇ°o…«ÞÎonž}õÒ˜…ˆ£4NÅâfÛu³Yü¼|qŸ=4yu±RJ-Õ×+­Íòu“•›¬Úðêw¯_óà¯?\]¬¤2]*{ñëÍßž]Þq)¿HÚù*…p‘[X§#¡4úK,t¾#’œ^¶ülîs˜å¡mÚ¦£é홌]$cáA)›ºŸüø·EédñÞïÜ/T$…ÑnñúÙ?§h’BFR%CªšÃoÒ-ó’Éø%6qq!–[ž>Túõ]±É7øI¢üüo^¢‹•IÝò:,mÛ GªxRçë¶*‚ð‘áÕyõ®Xç5ÿ¾Ïz?Ýáf’eN€¨HƒÒ•P‘0Lèá®ÉŠ2WÚÖEù†‡ÌB¥—ëCIðšüCÿÔ€‰³­ ÏûðêÝð|äqÿ•G¬WZGNÙ…MD$ÅY¬Wâ€-6Áš ¬¿‡ŒîòˆO,UÅØ±IdeØqUÒâe¶ÙMq3b?=7ù.o<h–×Mv·+ê{:'- ¹/蟶~Ž¥T,ßÔõÄÁŠŒ3 kðLÍYwtáA•þTžîü1Z-l$­ž­–q¤HÁ ŒÊDñLU‰xxÐ@Ò•ìIôÚ:̲]}àËWD.^fyüö /Ý“\âjÃÈß>ž'.‚Û'Åa(-ˆõ`þ¶ ¨5Q"]·ã>ÛmWwm±k¦ i˜9•> ÍE©ÐÝŽ‘ØÒ#.VbùÆ¥©éµ¬òºÝ ƾmu؇Ӗü,ÊõaÿàÏéçuþ¶ÍËu0,7ñÈJlY±'åZhÅ0ÙV&‘Lõ9×- Ô•T b“2ò¢,&̈°À&ä,XÉ…±NJ¶p8êLHSU§C¤=Ñ&—A¾á«IžKèCJ*v>!ÒŒNž­×ùÔÏt)Ô:™'<‘ˆõp\ÅIäæAª„ÀX–ãÁíe»]¼ˆä¼ÈwR}2Æ î(éqág ¨‹b¥<$×Ç!¨xȪlŸsȆiQó³Êþ]"Ž€™8T<&5Å–ŠYvßxç}ÑÜóèÇPÕÞIÒ‚GÞò³éx€Xpż2)¢!5´¹Ðhc–W =µ'æU2öy¹! i¡¹Ïqär Rh‚:M³‡‡]±ÎÈ}פ¿ÈwtŽÀÞ9©?Z‰maR™ó‚òvB(Ù!ŸtÆV{2^ë¼ÙàöÇNFn&¤0€nŒtîÁñÒú.ä!«Cpé:¹q$`ÆÂc·aJ)Åc»}wå(pgÙ\»pÒ1T1.Ð!™#½ƒ± ¼~5Ó ¹tœ)Íç7?½|yù#³yëm@ÿ>eÃODÆÎÂ{å¢Á'yRψ!ŽV©…NoÈ<‘žCt8¢·i”ÌÀÀ°Õ0‰X–~öÓ”ìIbØ›·mQåÀ· ±"àóö#€éÐ]ÊÈ€ È3¤8 :híÂà©SO[ e ²Ôt¼d—µâö¸ LÔLHÉo‘Âwâx}hwáêéGŸ¸‚[än}ç36òÔ¸Mm†­¶ËMÖdüSÝTíºià …4ájË{¼ ЖžGá… ƒ§´š6>@³š‚í:¼À˜0Œwņ§w-²bEnŠf §"ñðé0Z)\J „=+^PˆS¬‡dxZÆ„µH’Ô,h!1 IÍï'âhƒ€j¤ˆJÅiO éF¦Ë½O“Ö´zŸ•E½§¨!…¨r :´UöÆ")—艪­Ê°™T YíòòMüÞ`lž³´>ôÝ,YgÆàU08ÊJo±h¥àÐ4[³$Ò˜JG5Ë|×^ ³ «/`5ÉX&Á˜õa«#쾙Ŕ4/ïÂþcJì·VYYoó FrJtïºÚR¿DÔSèøR/Tþ1ð^ êÒæ_O¥Å£ܾ¾}ñêûþqys9™$ÇäÐC’ìË”zùºEãµÞ¶»®$å3ÞŽÂ1ÞÃaäªüúð_ß\þûf }*"‹€|ˆßWíÀ–Ü›^U,éÒÞ/É¤ÐæºÉÙyÊÉíB TQ ŒžP!cŸÀ$F*5OÐ Säk(:~T†1NµLGÚs±§eC´B˜H[Éõn‡Ê˜+­Ê'Ñ[„ Ú΃e‚ÃÐ?}ºÊ(q“ˆþgÁ.áý)q`'•v¨Ô„XH#*[IqêV?¿$emKVl±üõ$ˆHL‘þ~©Jˆ¤1HÔ«ïoÛ¢l”$+æs™[p~‹ãÓÑoAHG„D¹Ç¥·c:éáXå ßD@ \DW/°AÐï³Õé°^+#‹ó¨X„NCˉ›?#iÅ_ÂY†l‘1r­6u_”‡ê¶n²¦­§N–@CÄ‘•ÏZX7¬rÓ•Ï麎‘*ÄòœãR¨*áåtGΆ㮛S¥ ÍÌ‚a¶ÓH‹ÍÎ:Û9p*\N¢Gm¦î1‰\r”ÈN‚¹b?uƒŽŠ?éï¼A­‘hH7ÇÁ´AÜoõð`Ço"ÑÆ«JÏ‚‘&_ÀÑ•ÒX“Œ"2 ·wívËtŽmÃP5|Õk‚ý+dùJ è^릪À0¸‰ô郋Å9gªÈÀô(Ê•8Žì«ù¨˜ÅfìƒÉÚ]û†óIˆÎžCúM±ýØUúÔòŠ"ƒ}ÎV(ÄÿÞ#?pïŒû\ë°ÈdAdhy4É<$ô‰ ŸìŒ ££V@™$Ir ¡Ü†2H¥0ï½ÎØ •„§Hú,Lœgá´‰.©úƒtïNRótHæ´…DJã°cœZÀ ¹!ÒI 9LÔ<çD&ŸÀ’ pRn¢|4ëÚÀ&^¾ô[±® cÁ…W¬­Ç›¼ÐbÃû{JÖ$ø÷üK?ödž.—0¢KN¡Ý Êó•SNA÷eÚˆ;8-ËÛ(n?ᜰÆï£BˆŽÏ '„N)Í%HbÊ8?º)—NŠî¥ç¬ã‡‡ìm›“Ñ»Ìn(„ë1”² í3“ðñ;êá:²ç‡Sÿß—éÊ,éÁA—b‘ñ"àÒúêiØY†gý±ät¶:”‡¶îö÷š§×C>;àWü·TŸ×rùýÁ»V:ÆIÂVS‰à.çæò+íÌ qÍsΫ1È÷Ä’º¦ © Ö5g«:| Ñ.¿6:U„´ÿ˜›ôþ›PŠ™èwS±‰â4w^¿›ãT¥RõT;Rè@´gÁJùÉëta•΄ÙZ:F:°2þVËM¨ðû&ãɪ–tô¸ªZIjõt¯Ò'Œðhs M¤÷㼟¨j%<çAš x«ZJÉPòÁ ”bä°Š‰ØŠšþÛCµÏÃ~®:ˆ`¼$ÜF>0Âäôµ‘ …ôÄ+6×¶dˆjz¶À+»J ìºoƒ)1§‚Qb•L÷y™sçÓ&X s». ²~§òÓÄ÷ €ç@ Ï®œ¡|u}suýÓåDR-¨ŸÎYIêeŽ{}yùíå·Ìí=¼ ÂŒÿø®ObN1,]OÑDÜyµ^gÔèÍv0·0°¡–I‰·Q£Ê»wWœ÷ ªÜU¦ÏB#Y/ËœÏ&8" oP4¼’u]ècQlÕs)þjVáãÍÙð]–µC¨ðOä°9ø¼AçØ“ÀÛ»Žwߵ ̄õ‡†=©_Õh"¦òäöÈB[|‰‡øÌïe”Z®ÆAE邊?ESdÍ¡úsÍk”a”ÔÇ ÷èÓñWIŸÌs¥ïÅ’°ÇÒžçrläHx2IÅ“Ž.t°çÀÚĬOv°ç@:ؤŸé`w™o™iIÖÚù®z¡—_õñ Ö „n«;* ýL=­MšDØ&¸YÜ r\—œ÷É ’)=$ÂÐ)„†Î=B+£˜â°Æ®’ÿœÏ|×6w¤žAÞŸ{½`ëƒ —nT`ý0Âyý çtè¾ •Â"8ó 1¹”vŸûN*¶8¸›¯ÄXH=Ä;©!¡ª› )ò¤tŒtصËÊ@“mVì`ÓÔñgQ´Ö»J~!ç¬48‹G0ÞõýñV9/ §ïç:÷-{©H— ™ù^£_žš,[Y2×´+ ?çUEÖ™–(% M¹CÙÁâ]^ýžž©~Î]i/³¦ó/´›ì¤ß¦õTºä‰ò‘3ÑÂ…~ê[Z o4÷þk)¡F”ÑZÈÔwEþ.”ÝWT"…–†±¼à/Äè‡m»óù–z;GS‡øn:‡Ä)¨šDž¥e:Fli=¨X%½&SH§tÜxY{‚dÊŠ!ö'ëuRI;rII+Üy?™Glñ0¬(ߦ†UƒcTwU¬Ô-Gj<Ëøçæø4¡[ î!ø9ÇQnRP¡[ ÓÀ¬ì·ˆ‹}þÿÐ ÿöòåå‹›«]ÞÞ¼úûåõ Ô¥•‰TTÓåÛ›¼«¿qŸÞø!¨‹ºÉËõǰà9ÎŒÿ-lv£:æqT,;Py¯Ú—„Êw‹‰Žþ‘± þE¼þð›©y¬?‰¬Qta:9+¨“aS$µ»ýMoº¼·ÂDW•o»nb‘W¬O5í£îÿpc“« endstream endobj 445 0 obj << /Length 3580 /Filter /FlateDecode >> stream xÚÅ[moÜ6þž_±ׇ®N|Iõ>õ·pÑ8½Úh CÙÕÚB÷Å•´I|¿þž!)­(ÓŽ›UQðRÅgžy!Ãf)þ±YžÎ´I.Íl¹}•ÚÞúvæ?}÷Šùq \ FþûúÕ?¿Í²K“<ÍÙìz=œêz5ûeþú®¸oËúl!„˜‹¯ÏRfó«¶Ø­Šzåz¿»ºro~¼8[ðŒñ|.ôÙo×ß¿:¿îigœ¿IùˆK .E’‚MÏ¥22aB:.o›¦£÷G?òR&ìHÉ3šê—ßÒÙ /¿Ÿ¥Iføì£ºa3hmfW¯þ#ÈX–HÅCªËýîL°y[~j#ÔFr> u•'™f!õ¶Ú–Dv¼ƒ"•‰ÈóÙ‚ÿòí™óÃnÙV`šÍó_*¬,ɳŒÓ— a t Nì7ïÞÞª]+ø¶$#ß`Å´Ú›#m•i3e%Y7ïi–zBùp˜L¸G2…Ç ïžJ. Oê^v"áZ„² iq£Ȧrô°¦3næv]¤µÿð D!y¢y/‰mµÛ×7M[´‡&¶%‚õ£¿róBVÕ ìtAÎØQ–±ç46“‰f¦¤NR#OY6˰Zb*•™{…m?Eˆjl‡Q“Õ&\„D«U„¦1 Ózš9O8-´í©NŒÎ»Mê4ùH¶)c›j0^å£M)«À¾=É®A‹’|¼˜/PX²Ï›º\Æl4ƒI1>0Q[ý‚C®i&¼Öì ²›X¸Ô°VÂl!NS[–d=šJå^áXÇsð˜uk±ÞIZÔ¹€È4ù¶¬ýÎm÷ðMf¾ªÖvͶób{¿)·¥“oa±ýrÞÜc°ž—Ëêהɥïtlxãv³•ITxŠ%Z‘Å«D)qôD&î-`ùbVP¤?Ñò5`†¦J…rÄ5Ýö¨8FŠcRCþE|†{ÇYB°3d3 P\xõš€¦$õ2!Ñ@!ŠI„šfYfýq@³õZY—ŪSG9¿XyU´jWz]kïJ¯tg 6h‘{»w¿ï­Bú‘•WÿºÞßm¹Šk)*É(R°jÊðblâi¢”¨4MTjNÒO)¢©„öñIU¡ìùC('‹Ù7Vþؾ1àò°¥qï5×nä~í^6%LrÕ¸Îö®h]·7Ö`u'j´>V›kÕ嶨vîËg™š› B{À”µsú˜’"ôúÇ­ôs#+iW»Ý¼+ü¦R÷P~º¯êrõ•Ó’ÿ•µßsÏÐx÷ë²=Ô;¿ë^CoJ¨€|¤]rnõŠäeºÙ|Ôoå…߆íe†ŽõÞøxW-é»;7S¿J £¦ƒÑr5XûQ…å`½\ц\3/×á2¼šþd׌<”_£Ú£Ölåæêæõ»·?þp~}S:“&6âÕa¹´Õ4ëæ[yrIŒîÂÍpÝ¿¼>ÿùúæüç/~:U|žZÜ ¹¸îöj9F¯72ª7qö:é\¾ëxŒñ–3eöÖê-r&³“`âEx–¥ˆ9XàäìÒؖ>s•ó ­ZyEß{¡U=Ü®½À 7¢7éÐXý’ÆÙÙ‚å–J¸¤/ÈH¥Î˜I2RšK"”v®l÷Ç;ËFáø¤š†²RIžg!åQ.ü8)Å7˜Æ%¥Ù¤I©_t—œFóRC!ÄÉi©€ËÊ›I¸ô +?%҇乱S Éÿ¾ÔÒå<ÂügsS ú’ë)rSš éÛ rÓ)ˆúÜ4 ú\n:MŸ›4ÿ²Ü4ºm"…‘fbŠÕPž‹œ4XÌ®ˆE‹BeÒItEH‘hùH„O›S´hêåMÇâxf›³—ÈP"G’l-”¹»íøŒî°6 U v·/"[•`|½õíÓâÄÂŒyA¹„s2 HÉ;â“j{à’“4© Ùƒè¦Z—aÉä 77•%b˜`qBåHµe¸¸wožY•€š>2Û–Ë»›öáþ´í„‰Fº6ÁФ,HóävY‡$džäb¤yÑÕb’¼·_¸›õ¦¸m^¼XO×E|qq’áÉ^IöËb³y@¸Qµ%Õ1J qÕ­N#µ¿G` cx–€ÀçKwäÓeögJw2å6>› tGSuiý_W¹{[ºŒ³ØUÍöo.Ú £€|Š¢M•v1õÔE»/ã3V´ Ø|¶h7M_´ ˆ>W´›‚¦/Ú4ãE»oº ü˜|úb’º.kŸšw•ºcyÄTu…ä§%µxT!ù•;;…ªäF[o¢N³oìh Œ¢™d+ƒh ”ĦÔ@A3,ëIe9KRÛ1ÖMò ®…Ç™Ç!,áŠM@”—y®C¢VYL>D¯3#ç¾wO9o±ñj¤/  a¹µ-[xÓ]EaÙÞíëÆóÅÚõÓÖ›’?’`-ð¦Á4¯Ön¤]†ýäþ~ãǺç?ПýÜ7`Ùq`ØS¹)¶R(›,iNR >'ÜÂTŒ‰Ï•U !ÓÎAPˆp¸SX~Õ¸_'K4‚"5uËey ]Èñ¸óÝ£3|N%«kôàj°4ÒËÝCXJ^ >Åh·¤ ´³MãÔ}é"$Šæ0u{ç^·wÄ?µ¼’ã­-КÖ=ëØ´®K;šï-ïnŒ3‡±Ù޵+øaСñƒŽÔ‹˜bQL7®4RÓI3äb ª°ç„ˆ6e$‘ %…Ÿ€&×Éx¡¥êôBíLêwðŠ!çCÜ¡›¬Ñ«TM&ÚœÄ8]}@°e§Ê¤çüu,žåNVÌ”=² H^¾‹µÀÿMBS[±i~óö<¼µ ¡&=CÍÏÄ!ÂÇ!ò¥qH†ë0éJ¾1á#…dfÆC žŸVÕ¡*öQ¤‰1/¸ê‡%~¼êbú‚ϳ˜¯FïÈWÃ9_ ‡iS„ñÕza]7FöWaèÁ^ë ÆàZï&5FE1Xby*ÄXŸP伿ÔAíಌ`Ö9P¿›;9ê°7¨1¸“v©õNúéñH·è¡)ý|„ÆôK·h,iÀÄÐ{ÜäÈäW{§½{´ºHæpï ‘ûÚ÷Œ²8é–ÒçʹèD+e£€$)\æ”ÐEª“’N:¢´†¦ÊŒx$¼¹š„ ŒK ¼¸|sþíÅå…»ŽdHQDTŸž¹ëäþgB_v¨!¡FŸ½HÝ,º"ÅÑÍ£­¯<Ç<…LXŠo5$=11ö‚ ¡r_~´Á«‡Åh>Ã’,@?—Î([ü2fG‰%³I×Ùwo¾rnwko-Úm –ÈÆˆEc],cH‡ºj»p=ÛQÁ£ïë=Û‡jEUˆh`Ûͳsµ¤…á ç£ ø®¸  OUò^™èIø³6Ù;,9€ê.Ü7öþÊ¥iƒ>¼¥ó‡jÙµ»R‰ìkÄÚÜíO3 ÐöºÙS8Ué")U¤û݆d•æÇ4‡ùªuª%ÿ¢WÆ…­x‡MQ»g÷ ³p0¨± ¯ç6íâeضåö¾õŸïÝ/å]1ŽÍRó¡]*æ<û{º”Ö.¬Íï”ÊŸ‰¶B½¡­H¦æ¯}å|+£³É´÷ue‹|ÔQíV¥ÇÄ]wÝͽñûùË¢sõônßÝae‰åNûž¶½²9YÓž‹¶k9åíëÖýMZ­;iÈGú/I 6!£I}ü¤‡s§ÿ4íÞýgð5õÊ—Ë£Û$a-Ô©ANñatûn¦ÊRÙÙ:eÞõ+p®Lå6˜ÀºØ4¥ßGH¾ s<½$m°'˜®$aß•õ‡ŠîŸ56¤3í’ktº\™e¹²A’TÃQ²0š‰,,q#¯á~S-ý¦7¸¨ËØXØ5»vSrí/ç^‹´Õ¼Ó0â…ù zº Ñ> stream xÚ½]s›8ð=¿‚·Ã3…C @ôžÒ4é´“sÒÆy¸ëu2Š‘m¦\ÀIs¿þvµCL›æÒt2K«eµßb–ÌJ<+7ᚯ< ­–->¼9`ÏD§‡ùjvðûIZÌs/aÖlÑ'5K­öÑJnUMœ ìàåÄá<´/Y¤²J úæâ‚‡ço'Ž2?±1ù4{wp<ëî}ÿ™D̸dL¸ÂŠwYÀ‰ÑzUnsäˆsûضÂMhçå2›Ë<¿s§¯•Á¸Íš­š•Á«TÓòü¥c&ð„&‘¾*ˆdçã'ÏJáðå¹<¶n5æÚ \?`•[ïÇx˜ïF?äú…rY7“0²e¾U†³’ÀªÃõJ»%Á–ÙÍÄmUжÜ4YiÖYYKWÀÍ \um7­¥²j”1äõöw´&µÜž57êkã¢õ¹}¡Ì‘Qs^"Â-}·(«{Œˆ.ò:Iú:wd‘›$ÆÙ€RÔÖÚ· Qá À»¾Ïi‹Á½ H„^¤ÀËDD·gEÖdµAœ¬Çá?šâ H<-ô^Ïe®dñ–<²×J³Å`0ØøÜž–…ó¯ªJÚe úÕZòý.G%Þà¿òsV,éXn698/™T£M˜]ÓÒ|:°Ù;ŽÀÁ„17WV­ÉújL’Á¦—§§d1d!EÙТR_¶Y¥ÒïÚ0¦‹JC¸Ӣﻱ÷´ÈÙ¸cÑÓ"ÈÜ*2 ûŠŒŒ"£V‘pÜ×aÔô»Ø¢Wi(ygõJ¥à%±ý÷A¹GÎ!íÚí®¡ƒd@µ)?OHz‹œpÙêk«|zx´¨ÊµùA,ƒƒáŽðž+€ ï¾ ñ2¡¾jA¿hBäÚò;0èý(<»ndV Öü"zÝz`ÂlIQ_nBôS«ù¶Ê“Ar/qÌži p” ÑÖ˜½¶äÖÌnÌ%y¥dj­dŠ ¥æµ˜×fóà›"͵GÍ•lZ©…ªjZ7e{ªÐãW{ dؼ¢²\µˆÀ¤!yÏɘ]ÐüK‰šŽ\tµ7²¾ŽZ•EÝ‹ îó6‚æÍ׫EŽd$ØÂÐe‚µ¨]q©_ŽÑu|Ïõ¼Pÿrf2"Tö«£«×ǧÇo®NNßЇï( L‡šõêc[Ôâ1†°Ä04›È,ºØ1ßvèçœÒ„P&s¬‹,€Ò‚¬ fªrµ”T´`K‘ƒ+ª8€ßå:/çà²ó¹ÚèT8"c¸$‰Äc$:A‰€kEYÓ1yµ4…tO´@‹Ñ`׉掛ˆ¹Vs(Yqß@^Î.OÈBâZh'ά­ë­;A„-ks´]Qç²ë/£‰‚¥¥Ò«K#yº1¾Á}š¥ƒ’·/gM­òÅã¬óáøüôð¯_dJmr‰>eŠziJù¦*Snp»Ö¹ª®åRµŽ˜åy۶ͳöHøL'æÎ)ŸÙB= Žá³¼Çl×¢ìsÝhSðµí5HwÇï/§GÇÏšñvòB!uÊ…SCEVÅÜx瞹ƥú™i”í>Ÿ;—âß·Rú8óMOžÓ4œëbÄy`•|Í{Y»kpð¸VÕM6W´YËÞI'&n}ëÓ„µû;"ÝõãfY×ûÓO`ê&;ð˜Ë@È'L¢<.HÌt„·•ÜP‹P<6Œ`o踞³brò-n*&*åÛú´þ1À+p2޼8KÜd’Fõ€Ð3褢'Mô GÎ4%Ö×#Í*Èé\Cè%³Ú=…pü€…g­…÷Xûމ)\9c˜}4ßYªhB[+ÝœclB^nêm®ç‚ØÝ{v*é”U¶Ì "s¯„ê ?†Ö|l&ÉLK½Ü˜;L”™œRÐ?ƒÏ<.g¼Îž¹ƒõ˜v^Ϸߎˆ§]²@œ.Yà“El›“ÑdAX;Z]²À•™'!8w+ZáÂòñ)ëiOX\„n$BM*hŸ°–cïf!¦–„ÿŒKC/t½`xç:›·žãáÀ‘Ú¦nT¾ÁT$,–„»â)Œùçú0‹!)&‚^Q#C)³Ï™œ»"N~Þ”qNƒ„cJ°iW¾Ø5…;_„ͶIRéo§gÓgínM‡¢íÞEoÂû­6€®HtA'ºD´}¢zцô½*È\‡™0#Šh_/QÑýYñ~ÊÒüpIªš¸Z.&,ŠÍŸæj‰BI`¾@Ý^ȵ¹~#+XëgzÜbćÂmñ±GÕÐhQ]BPû~Aï<‘EûKGwër«PÙæå‹3ÍÄ@pi!Ûf˜ø53õlo|$øJÖƒFS¿ŠÃ¶-E18(FO4»¹´À.|˜Ü~œïŸ8›Á€wøz7ß¡üÿÚY= endstream endobj 455 0 obj << /Length 3564 /Filter /FlateDecode >> stream xÚ­[MsÜ6½ûWÌq´•áŸssR¶Ë[IìD:lU’RÑ3”ÄÚùIŽíä×ïk4H#Èv<,‚4Ðè~ýº‹EŽbQæ‹B©¬Ôn±Þ=Ë}o{»àÆo¯ž‰ðÝ ®&_þpõìß/Yˆ<+óR,®n¦C]m¿/¼«îûº½X)¥–êû‹•ÖfyÙWûMÕn¸÷Õå%7ž¿}}±’FÈr©Ê‹?¯þóìÅÕ(ÛHù•“¤/ÍÒêé,…3™Òfa΄Ò<Õ?rQÔÓ% ™YôäüÕÕ…SËöX_@„X®øÏÛöÐ×ë¾9ìù¹«ÛͺîøéÜäUhw÷X¢[Öëât½áÞwèû‹ÚrÙß]ˆeÍí®¯úa”à ÿíïjš%æ³*†§EJ {?ªBŠ2ÓÚ.l!2´I¿ÿ™/6x‰ßgºX|ô_î*“…Bk»¸|ökj_¥T™vC¡Ïý˜©d&¤žE¤²™°âDä›_^&¤Z—™RÌ"µÀvKK}ùÓsÚ¡W°S].a¼Ôpi¥ã PÎ1eTf­ù¢Ò••™ÊÝ,"­…gèXäë_®^¼z,Vç*ËK5‡X0›2­uøšokÖ|E/>\³¬šmõnºo­÷•ÌK?»ˆàñŽ]±ƒÇh° ¾&+„û'hð’РÚvä¯Âx86†tOàoG8@ÛÃAÁzG8@›Ü° ÐwŠâkÀ@B5å<` ]VÚ¯ƒD`‰ü<Ì uƒ©Ô0(”a0 F ŒËrSÎ1rò¼´_Tº‚ ÊÍ"²ÐYQ˜XäS` Df¤šC¬†›V:cW|[‡FÀ;bC€(h”È1û-Ü °ºlnè¯f÷¢ÆΊqúúS¾èøÅÍq;ü¨†¾Û6Ý9*½#Wn2 ÊÊäf2&GpjB¼ßó÷U[íj&Dx Cùþ°_ý]·ZjÀ+¬cŠWRd´0—IgG¿þñúê·ç¿\^CU¯R0mêäÊo£<,mÅ®îÂs[wÇ-×wuõúØ6}@1êñÚ-‚v©cWMÞ¾cñCßVûî¦n[R²ï8ðßöªMèë¾=øß`;H¢’šŠzYñóºÚn¹E£Ñ‹Û®KøŽÌHË…1P’VgùŽÔ¤ÖeòTêOl‡¶Oa…Ír=p›g¹3±pìJ -tæfZ¸Ì ¸9ËĦOcp©2£¿Å<'1X±}ªÁ>i£ccT§ÆHM°šý¡çßô-<˜Í%cD)ÊLÆn÷[ÝÛ}09ÏF¶Çúû”Ïæ1» …ǾùùíO/®^¤Öèò ‡%ú¼I//ë5V…,¢* ‹ÙÝokâi¬àqÂyùÀòÿ^¥Ä—€eNä:mkh¦Þ¯ëÍD£#x*BÓãv)uâåôP­=¢Ti&Ž@#ˆPÂÿ˜”Áü0…ÈFnÃÔ“^+0ï\¨…¶E&E¢2ذδWêĆc©zÒVb(›•e0ÃmuŸªH™E*x~©L,µkþ®RádB‰Y¤:xœ‹…n›]Ó§ìA–@Fði)³Â†÷žwÜ3ÓË? Pd¥1Ò˜²,éÍÏ×Çfß+‰) íç5©÷šV{=‘nó8_/ŠòLD•oȤV‚`—ãcHØ2vYÿC°‹d©\CkÎÖÃùEÃ^@‹#ÿWXJ¤ Êq)»fh¯‰Ú»Ô’ “)1~ýÝèm]H”+O󜴓 Æ„•Àg­]€ÔÚBû¡ò"úÿ”²VíÁr¡0|MGB›MB¦ƒ‡Å,2K‰Äöd¡}jW‹Ìá}>Æq²¾S"TI¯ aÕY¦g ¨±3ÈbJéLb‰JÁÁG¬ û8ûûc=D’S¥Îjl&IÜ6+zΰ.bØNÉ'×õàÑ®útÝìãÕÅ1#ö1Ÿ7&tyҗ릅GåTħ(„¹ç|Cž¡pQ„aS†=ôi8‰¾YnNÙ…Á×ÉÞÖmØ¿'C›ææ¯P7CçÏ þè 5Ý.Ðâ¨ò´<ƒex ¡fv¢7+@Nøú”&P +]ž€ 8" EÕ/žŠ7 šãhÔ]uÿ#C£˜Þ‘µúîû{*RÌaH:<¬$℺›šñ²©¶†-U´ÆóznÂßj³iz½‡ð[º·íƒd/Äò’«’\š”"x-xBƒ—ûð¼áÌ|Ý6÷èõWÝè¨åi^) ÒE‰mRÚŸœ±=7”Ùƒß8í‰óÐ|mpÚMÝWͶKÇ-e2ƒÑ"ÏMÒTšêLŸˆm~¦ç‚ô€8ÐPÈæ¦žûxµ@,9q¡"WOÇ*:Ç.¬ûÆ9Æ‚ÝÎ;cR/2±Òb™ôÎ!U›Ê¤°¡K3Ámå´UlºÔ¿­?\°SŠå–»èlŒþNˆCa†Þ¤3!ª¾J=Dz4U_m´*¶Wþ‘¦JÞ¶Ýò¼XáLC ŠSG› /MØÈ©êMá¯!‚ÆÕÁ:TçÆç{?zEGðŸ}Þƒ•ÅìÁPÈ.âûy ¦*—ç:°4Êß݈<8>ZË…„ixò9 ~¦ÁÓi(•§I>½JU=Ø"MšCna2Kds§Á×j1AëÊ1GpcŽ ]1õ-cÂIޱd! Ÿºà V³£wÜáåú–ß1úe`ÓÜwü¢Þ5}? ±¹rN¥9™uÏ(‡…ÊÂfÊÙ³ð Ü $4Æ\2º´QÁUM H³9GÃÂÅ­-Î¥se®üPZ·ð)mÊ¢@M¤˜E,ö1ûõ6em"ïDR<É;m!õ¤»^l]€§Ø ð†×Ês04­Èö?&yñC„˜Àª^Ç‚u˜•GÍ\2jæO@¿(t vù½ÅYVW–"©Jºë Þ9ü=´Ÿ²Lgv¬Úpˆêqœ^qbä[¡kô0þip?~ìîø͇û a[µ·á•N…¬ÅŒâÂQÖYL釪‚}Ÿ¥%KU6凢Ìϣi &Üre†®H.›g~dc á¼ÏI_u‰ÎΞo·>î~¤¼Ñº¥Wýñ'†ÂÑÕ†üÕ–ËêvÇQØé,‘;øŽpæý€:ÂÄ,gÈ”Mß1@ש³ÄÄ] Ïã,"².‹9p–h‚ ^j¨©éï¨Uð©««v¡•N˜¥áÓÝæ&Áél)âÉ%›.úP…}¡»ŠXfH™ýªý…!ÒH’]S¤æY½gQ©ÕûiŒ7Q:JÈ­Ž‰)}Á;¸MÀEs®öüüà¬t¥ô÷­b0™`iðP¬š}³¿‡‡ªe;’×Ï¢DÆC•~:š¡ëçlX•@Ì ¡„ø ))ç©$² PÂHæÓD¹–T6† «;º¯ EnµP‹{ÜX Øo< Ã&khé‚}3Ü.¤Î l…1CÌ¥Ñýží¤ö>ýâCÝ-ä]a|Ê·¾¦¼>lÃtü` Pjvጟ“Ì階–â„#PÇH ð@zÊ(#¶Ë×=wÕ{ºŸÑñg…4ÚŒu(•Ћ›¶ºÝ…’÷ŒUÀÔ½¢fȆ¤Ë—w‚ñê¨Â2ü|B _]^®ü•v%JïX;Ò•T¶^o»€ßƒö‘/† ®ø¾­×P}ØGêxG\‰>áûþ“÷GæëÔí§(8Þ¬Ãl |5nÛ„~}ó6±ØðÑÑWàœ¯Àí¹õeR™AæRšiãΣL Bù¡äp”ž¾rAõô\«9¤JrD M߸àé®Ð³+D+êï< W£XãßëÝ›nÇÀPËàõôzÌêýîLicø€o9ÒwLÝŠ ãtIó±GWóAPÅw'÷wúáöÏÉ…ËfR¼Ä[ª¿øÒyô?ÖÜIÆß–ê¢*€Š§ñ”‡$ô÷¡Â](“»PôÌפ©¿gÄÌGÄÄ» ç+uxáWIý'<œî!1/ž:C/±ñånÜy_éœIqÆè¨r”•hšãÃ}ItóíwêpEwSŒ0ñöUB¯ÎÃ-ýyÐ5ü¾áï¶Þßió¤r`"8.·‹¢Dyž? qZÒH2WŸÍ€"á,2•Yb5•0̱˜Œ¿DNÕì×á‘×^dò^M“‡M=\ùÝÅî‡åü²O‡ª endstream endobj 461 0 obj << /Length 3505 /Filter /FlateDecode >> stream xÚ­Z[oãÆ~ß_¡G©X±sã-}J6›tƒ&»‰ 4@´L[l$Q!©õî¿ïwæJCyÜ6µ`Àâ\8ç~ê™ÂŸž•j–[›”®˜­¶¯”ŸífüðÓ·¯´ì[bã2ØùÕõ«¿~“¦3­’R•zv}u}7ûeþf]퇺[,­µsûÅbé\:¿ªÝ]ÕÝñì·WWüðå‡w‹¥Iµ)çN-~»þîÕÛë#ìÔ˜ÿIÚù_°ÔºHŠYV¸D[LjëšsójaŠùÇEšÎ«fSÝ6›f ™Ï¼ÚÞóoÿ¹_,õ|¨·<îê¾=t«º—C¦tX/ô¼–çf+ †5¯»ùCß„þq¤À–i¢óøÙ¬$~ùMÍî°øÝL%.Ÿ=úÛ™MLnñ´™]½ú1F¨-ËDgSJ»jÏЛž1[U›M}—,–yžÏÿÞ¹ô¯þ¸0ù¼î^޳¥)ð™-µMtÊg5ÄU ÷T1o¶ûM½­wôúP M»ã ÍÐ×ÙŒ=s>o= =Ëðf%;{ZðŽç7Ͷxi<ìÈUІÇëb.šìû"Ð3Š®gÐ{ðê)TÄacóË@-JPM¡’.ZͺQCð ç¥ã´¼óË7‹Âλ•zþÛI]uR¦©ñ‚µüq>jÞûïoÍn°ft+%߀Ýàô è¾' 25Á@eÉQU©`e¸ H:sÉt™äØ›ê5n,)‘-f©‚^8÷‚½æçÎe”žÕ‹æ9iKv y‘€ÓS Í]ÌBŠD#ƒºÌÒ$FŸ:ü‰Â—H·ÕÑ”H‰oàíî]EdZ 3 DÊi@4¡G¹‘:w ¢¬1pzJÔíþÞ"ùx 9Å«éECË"?çf„Ä•#á$ê¹4¥Ñ7Cû;ÔˆWÐÚÀ¹¤_Ð1†/-’aåôY&J¦Ñ$—ƒ@3sý¦´/3¤ ™Ž"{eÚúÔË–Øuží¯{·£zj¨¨¤òê²å"㮹ÿì‰ö“߇a6ˆìùÙW2ÉHÎÄÕI”q™NòÌM“Í0o‰:œUžƒã2é‹NaÑQJ ð‰UMKVƒ\>¸—g¹ç^¼â2¨¸€Íÿ‡çTl>º°S<£ŽÑ ä–ev (ór‡ Иcœ¤(.C(Rš3BhdjÓ§éÊtþ&LqiBćgT@w5ë5^i(xà=\¡âauþöÐJaé¨n;+,‡®Úõ(¢Š<-{$L{s,Öcq,K4™¯ËbYןÒeªÌb+Œx¸5ß-ÙEÁ k[”^G§ ¾C æí¾úãPûAÆBÈ!ƒ4Q¸ù”ŸhŸ Š!Œ ì¨ð²k¨º‡zàçcR"œ9•M…q5´]õ@é?°ªú^^jPêR¡¼ê¾Ð²Ô¹ôtÂ’†[úG·ìÉxpßÕ|Pvª8üQ#Èý~jVTšTCC 9µºçr‡^¶È pžt{Ä–«T¹Äò ñ\+CÂÒ(ÉDQñ¢n9 çJáÔ<]½©«¾Ž˜8j' ý¼`£ Ì)ØQßH÷H©F©#œÕ‡Î7?¬I2ÑŸìX.澢⒓_ZW]³{àµáè×÷Ûîw‰Ž§î¢×b¬°~l†f¿‘ã&Í7èçÒ2—ô‹–»ö04;ÙûØ@ª‘Öwm÷ Izv*|¸­ç§¥­‡gidæ¡ÓZR{aK ÖªfÇ[ªñJ 0c³3Ÿ?®ëNŽ©ø§s62ÅÄ‚ô^"šÚÕ«ºùè™äMÊæªÝz[§ ¹]Íõšw5|G?È^øfžf¼{p³uuèŽýl9i$SÞfé/¤K{À“-½L9‹óBßž¯HXØ“Jw’€Uu»iúµ7sLL»%´µåßv'¯´ÿnÛnœÁq29Õ ž»?¾Qûž¯@þ´¢¨Dm8„$Ïë$†vÜX›dÆ!ëÕ‰Ö/jÁk›'H)/ ´&¼qÄR¯¬ônà°sÔùSÐÏô%Pue—!—ª®)È@ä£ó!•ÈV+(ñÇE oÎÝÕ´U§$LCeÅ̙ä/Þdz™`v’ø2 ïöÞð½Ë3ZçÀ‹,¿l§‰ÄvTír}w˜6C…vs¢.ÄõF$RíØ£pFÐ ýo(m’g™s˜Á\g» Õ–&Eiu hQœv€-yhzž¦aˆ.åüýŽÂ-V²_b*Ù6œˆG£økµ¿Ö±º&‘ddzS#ÂúñŒVOmu:À“)ÙùÝß°â·1K÷›ãQ Ù a¸í)21ÀñŒ¡ÞîômY°=«JÏi <çx«ÌÉ\x 0i[ÛÉ;ÒÞ>ú–|lr?éâ³À)K¼¯šÍ)tô5ßÁeã­'?»€ËÂ+FŸUôÈÏY“K<äõÀ3þ 3 “„¾¯…(Z¿ ;ºœ³Ãž-‹ž¤H'æ´0Åà”+ap¼±%Rd‘J4•i.<œör§áýØLö#O~7‚LµáÍLÉ.D´Q`!§úLiOù´àK°ººGêø¬(½’¦ù»zÕôyØ}ÜEÙCE¯QÊ£ ÎZpüÀžN–¤L(j?ôGP.²ŒŠB0¥YŸ• L“c¡…Ö{šçÔ~ÿyžDû[ÉÝAvà‹üm:æø|6,õÕVž`[í ö,É…Qš”¯sªÉd«NŒp_ur›çåÚ§€ÁR¨õR¡!×ßOŒÏ¶ç¥!ÚÎèó ¯&‘z”RH‰Å8Ê)ô ˾ÞõÍ þs‡¤c¨¥4œ‡(;ªœÝ}ÞÇ…Ý>tÕž¬ĺ9c÷¹çªÌ—ÿ\7Þåçg—n=Ïy®ÒC²à@:Å“<õ"nùq´O¿ÿ˜Ó·ÍOí7ÕŠ+6 úÃèHüˆ¨^F„yâ„qù”Fªoí\þlâ4vSv>´fΫ/ð» œdr-àÂ|ËåcáÞ 4Á40Ix¯✧5æ‹xj7ß’U>^ûe$Ï·€ oû/Ô_ËMsÛUÝg^øöêjé?a¢AÔéxÀ| «giº’ {rpMãG3}s»©¡'iiaÄJß¿ ¡­“Š”&‚LA ß§sWl£…DÒ—ßÈ“ÉñÐ3‘æìÒØÊŠÀÊ^ÇÜÀN/¤~èêÈw§œÂÚs¶î䃘7¹šm<¸ê¦^ØBjßû“›£°\vßg ±ˆ}©vkÆ©pó˜ zGÍ®8ÜY wvü@Ç>[Cø=A¦=ÑO>Ìx†wg4߯+ê•mx„Új³i£îgå³VÒAiˆ© ×ͬ_µùíO€˜”ž™Š|–EϧnCÜi!ȳÄàD7'A|P}Üül´ŒíE’¥uAŠ"àeU¬3I†G:*å}lzÓ'h-'1ôñâÓFž¦‹ÓôˆM§fŠÈ›Ø=]^^„vcu¢Ôí?¼]ƒ Ôõ"0ST‚(?§dò§9 súÝ.üÔõXÖpqAS­|aè;s´¥ë8mT'gCƒ­8@I[™n¶K¹˜ öЙԄ\C°û¥/NI¹ñ£©qv-a—ÇOpFì8kq(wnZ6Ÿì>÷qþ˜ƒ8rﹸwåž &ã&UÜßHuħMI¿-ðéˆÔ9›*-Œ_ÒÈrOy‰ç7õ)í¨yÊg ò<¥^SäSùœªðã0QÀžf endstream endobj 466 0 obj << /Length 2349 /Filter /FlateDecode >> stream xÚÝYÝsÛ6Ï_¡Gê&Âá›DïÉužÛ8ÎÅj¦siFCK°Å©$ª$eÇÿýí MJPš«5÷pñdDàîoû-6¢ðÇF†ŽR!ˆ‘Ùh¾~EÝju?ò~|Ź œôN~?}õ÷7J%†6šÞõIM£OÉù2ß6¶O„‰øn<‘R%7M¾YäÕ¯þxsãÎÞ_Ž'\1nÉÆŸ§?½º˜v¼çßOþ JÆ2’t& Ò½ó,y|4Mš¥õórƒËýÒ´xþè1C WÚ‘Ú «OŸéh›?(‘éèÑ\á©€§ÕèæÕ¿¢xŒ$܈!¢%(i€ló*_[§HIu²ó°ÊÝ|ÌÓdid<ÑZ&—w­EퟺÏõt›&e]·+ûV¹JŠfx Ïd‰­Ö…?†Bƒ.‘nÂaÊc»+ñJ¥ñªÂ`°²këåMšóJÿ¹°+À¿÷Rmç» @xÕãJOã€Q(‘l«WŠE±¹¼ÿ™¯ê²%ÔÔ{´ÒÄá§9óÐ\¦ÈˆVr¤UF¨Î^t™’ Z¥$bx™hç½ËBz ?8Àŵ$§ÀÅ5½0C\ç–iJdÆOÂ2cD±lÈòÝu„§ÉÀ]Í)x ʉÉÔž˜×樂N‰7h†nG&L‘Ì“þ`›]µñWñ0V ¬kg¿Ã€ƒîs áEí_„{›ÝÌί¯Þ¿½˜^„2 ìà5wÜÅ@™Üìæs°–ÔõÝnåÙÎKt"ôã;ñt¨[æN¼Ùůï/?\üÃÀ8D«”í¡˜:o#ìG:‡e™×~Ç~ÙF˜¢–jÓ»ëV ŽaD õÍh1ÎyD")Üf¸£bÌ’#àÈeýòîìãÙåÛ³ïßFïˤÐù1pe%Û(‡´M×»­?VVM§¼¸BMPž& øL¸ ’–ãv_בèà(#¥á\í»‡omýCél­çC¶ Ô!«R’˜6׸ô ¢p×ÀbãI¸kM(Cî"\3ÐÍNÃLA©tÈ DnóÁaìâ@V¸Ûa<Ä‘OoÆ™€ô;wWÏ’ÏφLjQŠ»‹ik?×W³]±iCi¢ð‚g nÐô 䞊gšPMDKå7ªh`fú‡ pü™Õ¡3$…³JpB¥þ/C뀗UdÔ(ÉXȧ;ïŽN>´ü¿Q*”˜òN#ëbSV³Ê„]“ ÁºÓ¯}ÐÆ¸NU6Læ ½:x\Üqà&àÿHaÁgÔK„gYJ83Ž”Ñäv÷¸%$òÄ^¦2s ÆÀ”h®Œ›˜’!ߥ¦ÕXœ­ vš[°·¦ü*³ˆ¦ƒd™ªgUW¥ÐÀ Bý $.¤‰æÍ—O¨0T€e¦ ¾*±XD8¸7v)!J¦{÷vÜG˜îf¡nŒD0ÇL›^x`± ž à*ÓC·qñ •_ ú¦Š¤R¾È[D\¾H ?}œï{ü0ØðíýrCÞå3cïmŒs]º¼º(îžœÐnñ 2,‚¶ŠzíÓtí;/ÀGå<,z¡Úò„,‰*Ì=ÕrXÙ„Pç˽ŒÞÑcŠ©ËŒdfH&ÍË¢Ô|R9Rš…ÌîŒ8:—Þ+ó¡‚fU¶Áêu[Æäìì×”:Å\×±rK•ÛâÁ­,<™»ª\û=(ÛŠÇwjÂ7o}=h¬Ú¡–¿ÞuC O¡ •)äX%^f£IÁ%TÊÌ Q‹(ò'{Îa=ÅFÃ%gàŸLÿEœÃånÄg4^rêÔê$L%:02ELž.Ôi…RO˜=AÝ@ð˜‰òä|Ø(ð^ŸÍ“ò.åP¨¹Vëqõäw*›C„NòÆ[2ï›]Û' MT7ù`mŸX—» G(š’:˜xáIáâcÑ,ýS˜Äð@> Pq  bïâF<ðu»»ºñ§o}á·*»²yÝï&UŽ|8’o·«bî;’ÈÐ#¿ë†p»:ô1$.å! æ«Õp$·l !k ÙBCêz‘‘AŠL% ŸƒE‘±Dõ? [(í¹Ì†|£M‡Vž†©  êo3dÚ³9Œ$hØÝŒ1šad<[­Ü0ì±Fó`xq<£Ã(ëVšÒú±Ÿ‹É~!÷/o¸Ñ!AGù†Ùø“Ræíª¨—h~xð¶{ øC¿»l½«:CÐ8uræO߇̵ÐxjuVèÒ]Úå uÞÎ …xö4ÛnÈY5mz*7«p²ÜÌ- ³^ˆºPtJ¼s¬Û¨~ÑCñ%ÑЀ”Hƒ¤½À¾ßCØÂʶ·Ù!8&ªgˆÝ#å›R»øŠ _—å®`ŒãxJ“³¦Éç˸XUŠð:,nGe)·hVP^ ãݪK{xùô`ÎÙØMÈžCË„­»b›¤½+ŒHÝ3ÒÝ&ÎÜßÇž¾‡ú/¾]p»NE¶ëÿ„êÅv endstream endobj 470 0 obj << /Length 3269 /Filter /FlateDecode >> stream xÚÕ[ßsÛ6~Ï_¡¹'ù&f‰ß@ßÚ4éä&iÒÚéLÛñ0eóN’Š“ûëï[”Hšvœˆ»‹’v±Xì~»Ø°YŠ?6séÌ‘8ig‹Í“Ô¿­®g¡ñËOXìwŽŽçžß_>ùæ…R3–&.ulv¹êNu¹œý>v“íš¼:;BÌÅ·gçRªùE“m—Yµ o¼¸ïÞ¾<;çŠq7—üìÏËÉ® ¡¥Å#%h[‰€­«*?zÈaF„=hÊq)JÉ&‘¢„¹”C1¾Ûÿ'Oz—²F7æ&¡l`ta?/K¨ñ¾Yˆ.òêÝ~µ ¬Ž©¥yŒVrépÆäL9ø ÇO³¤èÂüLZ™Ï‰“[¨¦„®U‰†iíþ¼f¶BlÊåÛ1_E :ÙqUlLÒ@R–ÑõÀ‰w# N^>Sð F²Ó,7¸ƒÛ§©TÝó>ªÄ’TΚLJÒ{ß—ptfÞä×yÕdSÚù²X}òkö/_ç rˆ°ƒE½ dzޡŸ™ç‹[,ñeà å0QžŒÊM¬h ±9~°·ÞïÂæŽû= +mØÝžÁa¢™X»g=ßÇJâ0ÞÑd†÷«2CüÆ9ÿJ.û”ôÀ¿Çå¨h8Tsj ¢œöA DCšeTê5+6Ë<Ù:(šÖz~± Û½8(šÖ†¤ºÏë&_†Ç÷ûl]4¤ŸÂ¨r>쪲É}•…r /NüY¶^çfVÕ³*|»(÷t’xSÎz¦¡²j²wÅ‘*}¹®ÊývYÇþMg\,rR£íõË|•í×ñm}zö»qväó¸è¾uó2xt=¾‹kã¹ÂËxØØ¼Äú¾oòðÁ{ð+S¦õG#7Ùa>×9sxè¿O×u\ÑêS±½ÉPòcÄC½¥šI‡€Aî)ê-)<â~*Ö†ÞÏÆ|¢L.'! Üá4ë“üùÍÛ±8  ¡åD­†LUŸèÏ_œ‘ù޶ä×W”C¸¤Iç«’RR–,nQ‡Ö.«²MÞäU¥³fþrÞgÛ0d¿­÷»ƒ²‡Ýf%L3ª|{ÝÜ„ãå]ê«mQÈAmž>U0@G•Š™”äéI¢„“SÉÄö@ê‡Ã[i'!ÊHXÕ'J)/ïØü⫼ÙWÛð6‹p¿JÏÿ9†W)I¤Ô$ r©@Ó=»h‘l'±8zRa(&`D¦Ø[ô# e"™„$¡Nkÿþ»FˆJžÐ‘ž€¦D0$uŸ&YÎq<.8ü­Ô}ðÒ¤CF‰̯-¢âÓÐ8"G‡S©‘0üŽ²ÃŠY7Ë´ƒâI/wŽþÓÖ p¤gZ܇~ä1éeáEƒ“/Ç…e€’ÿRYÁøK.&‘¦b6f+Á’åm£Ø´tMê ¾Tò¡´LjŽÒ¢‡;1 |þ}»'þ‰¤¦½`yñá,H.|ˆÜÀÀ3b—7ñK¶Û­‹óh²]´è›ìE ¥µ|(–ùñ*ðHAQ~ªõ-ó>ª{EVç‹}•‡™WPȪ g…kÇ{ÏOë3E鼨ìÖù&&fü®ÖÔÑ•ÐSWÓ›e°9l^¡W¦<ÇH_=.eš,Iݲ5Šy"àcãúÆäßyUBŸ|tUô`³ê¾†Æ¿tPy ¿Þçߎ‰f0XùêâêÙ›×o_=¿|>&(›&Ì ÒÅ~±ÜÔ«}{VK’Þ!c1¤{æ%þÓåóß.¯žÿööå/ÏM:q„Ù† ¸¸<œè^Ò¼Üduø’­ µE ÜÕŽõÙkIô~`ð§7-c¼9–h¡ÃÚÝðÍÐuƒÀ¯J˜9ÉãrˆW;̬.L/ÀèÑ|[¤°Å2´·e”Z±ŒªÌÖ ð$iYüby¸` ÿÍ=²Äô×wö!ËUL0 WÎénó9ÖýlZ䄦 ¬×ƒµtÎ(–Úxe}È)lº·ãu ðc ‡¯áB&Ú¨Iê@h.acòÙ€Á©hŸÆóCí$Äá¾%ÂÎñûÊAÝî꿤äƒ_ë½! е©V„Àm-æŒ*CôIŠži?•âì¿Wÿj¥ù‚’æ(Ó ¦( ¡©Z[ô`EÈ4cEH—æC!SŒ!]’Y=ÈçŠ=çÜëBÀ ܨzëºÿ^ h”©š„0¹É¾P _WÉÐ9#B¤ gzèõá#bÉUMsD0U›¿_Æ +H¥œ„0àJj{t?/b_ßð€€G­ÐøÍ¶îF´?ÁJ¸s>&é.eÏR›¸Kk%ài"ÓæTÿb‰]RÈuLGû8ÞgÂ74M¸°è¤˜ÆÅ§b'÷EI€Æ ˘ & 3ád]ΨÍDÈiÒnQ’LÍC5I,Á†|“ƒ’$³.“÷T$ Ê~N‘Jé?]t)’í°Ž3…õùDZ?ô‹“8ÌÜÏèkw|2™«¦¤oÝB z¾ÎŠ-é õñ‰KÿÖ_‹Pã‚îWbr&Z3gÉAç!§ôÓ¯¯^õ3÷‡¤ Z2t$Àÿ…Q\W endstream endobj 476 0 obj << /Length 3397 /Filter /FlateDecode >> stream xÚÝZmsÛ6þž_¡¹OÒMÄ#Þ²÷)qœŒ¯iœÖJ§smÇCK”Í«,)$×÷ëïY,H‘2œ¤±>Ýd‘ˆ],öåÙÄ(Æ?1Êâ‘U*Êt:šß>‹]ku=⇟Þ<~ܧ½‘/gÏþñÚ˜‘ˆ£,ÎÄh¶ìO5[Œ~ŸÜäÛ¦¨&S¥ÔX}7™jmÆM¾^äÕ‚[ß\\ðË÷g“©4Bfc­&¿ÏþõìtÖÑ6R~%“4ò \ ‘Fé(Iu$”fFž¤j\Tåo±ÐE >E:nnò†Ÿrþ™W÷Ûfs]åÛ›rNMÙø‡³“ç¾s³žH|”—ëbÁM庨àÑÍæSøöm^å·äCSèxLÄ›zðM:®wÛ)I«›  à oW%‘Q˜î¶¨ëüºˆh5žÑ‡Ôüq³m¥ø±T"ʰv+")2’ϯ¿Ç£ú@ ÒvtçÞŽT$­ÂÓjtñìÇ¥J¢XXL…¶Ô‹±nòÆ“ïG¯Ù8_­6´ö»š»óŽ÷ÉTŒ‰n¨Šy¹- –%75žbA³ÝB¼¾ %¹L…°XŒõâ-'U±¾nnX·6KúÕãíDŒ«MS̉hSbË\7ï4=ÝݼæÑù¶•2Ù´c îíÄÞnމZ1\”ë9¢íÛÜ-ÿæfœçDyº*>9eXQW6Þ‚/š´ª¹í6§÷ürWÖ7<‹c-»ºh¼^ùïŠÛ²iã輚`Î{~¾®ë‡:¡Sp.ä(Ñ2’Ò>E)tšAÐ/ 5ËKãó[lbü Þ1õ‹1l°c,`K‚ Å|*nA"é“0`RY0á>ú›2àÂDV¦íˆº˜ïª‚§^B%ËõuhÚ$‹ŒI¿8mGø9ͿݮŠ[RW ÓoJèׯíúni»ºaÚ°ã-¶7o*ßâ5 ®#_Íw«¼ÕG;†äÖjê^Mš¡ÔœÇšç{]fUW䙼³8y&nùoQm {ûðº\‡”ù§¢ÙU~òOc`ʻ⻠Û|ú.ă1´Zp1k­¼ç²‰“e^®Ø#hòøuY7Åz~ïÙ¤‘7p.P†?  ε…9n©öÍ,¿|ñêòâìMˆU«#mÔcœbÃ> žhSÁ©6a>ü”!Ñ}xÿöìäÅì/ŠN´Ȱè,‹¯{¶dÒ*R¹ ;’­Æc” £dKdJkq G‹dì—Â/¼^|²ÜTܲt{–âuü9 éj×xyÏ“{GŸ¯ª"_Üsï•óÈo¿v¾É¹hÌåÜú"úœ!ôåyþöÕã’„Îâ¾%¨,eAJà‚žJ¸$õõ)MÆ‚¤ŽR¶êÃz‹’¹ø¼e \Í›ïÿL£g„éØè¡')í˜nµmÚh«´Ê8€ì·KgðNþû"¯€M+ÿòçv¯ 󦯯Ï}VÖOçÞu7{÷úÔÏ8üf}Ûæžœ¿›þ2»<ýåýÙO§¯¾!·ÛUüÙ¹ê ï]µ"!”Õ#œ}&Þ¾;oY : %Ê| gS-›D b«Â6y¬–8Iæf2J2/7PçUÁKïçZäBaË¥)n¯k^ø¤ª\zå<¢ól-ÖâŒ5yQZð¢¢̰(3Ç ì=RÂCü`^!°‚#T’FСƒõ›Tvq8°'€!QmÓð‘4å­]^Ú3e@ìºxð¯¯)Ãß­ç)‹ñï{5AªbŒtkS©Š²ãŸÿp¹+×’pùÀXäåžf–tÍ(Ûñógƒô(’Zîg$=—b¤4Ö«ÿ¢ÊdÃôNÉX7“Œ½WÂjœ Њh¯ÿî—2²À^ú„|iS]R^¿«CK²Z0ÌŠœÕ^…3ÎXG±J°L§Qlõp™óæÏMhC’ÚcДRCš0Ÿ‡$•Œ=Ê2‘O'â`™Mh÷¦*Q‹A4Â~=_zŸØÆÔFé`¥{e Q!ËJ;·ˆé——Uññr¹Ê¯ƒ³Ãoeê`ú f(£" Q i~ö‘)ƒ]"ác¦ØxAkbÊRýæ͢®n@3(@𦻀®H|A´?^r­yIñXAGÀ(± * ©Ã]íZ‚ÍÂ:g¥8a# !“~…$§ÊÚ(Ó‡e‘õv×\z˜vyµ[.™ßC:BšÈì½÷_eW~„ :I°¥åиö ‘À¡&ú€DXûS¬–ä'²H¨§©bš@ppwLY¬¿´sZ K{ ÊšBa¢†”Ã['m ˆ4Ü9€àǶî ä*rt¦sEHú@|æ=„ç.ª‹¶XªÉ Ÿ¨ô)RÀzB27U«}y¼ £C„—95âL‚g]»SW«ãÜzçÖÌÕ>N¦áàËú–õ¶ö9ÁœK„¾‘9ðQš'*¢ ÜáÔvé? x…Ñ‘…„ øf™}šôR˜?ch› oñÉHìK³ßqòDÒ Z™t¾%ûF>‡Û&!¤,ò„X`å(D C¢!ü!¡ƒ2;ÎB :Xhãâ‘SæU!éláËáÝaµr±[ʃl ®pwt¨†ïn>ðž€_îÊÕª-†'H†’ƒ‚'٬ߵOx‚ê=,‘(´Ê"‰5k`Ì8y’>#ŽKì€ÔJº|úcȈà5á€A'³É(öÄt m˜…[ç®÷FdâÄÑU[Ë£ÿWE¾¦m·²¿í‰¿Û¬§t®ÀoSþy¹q' ‰K•I:Ý@ÂÙ´‡[èæúo¢ÛÐ[\W½~ƒ½¬>•󢿽ÇÂK‘yåw½¢zIÝP!À6ÿ›yBÏ”Î׫û¶6þ–ÓGË©LûEm ¢LÒ×”,–²Ò'iS ´Ž0…kÓ2=ØTƒpÞ/xB¿âÇ]£ÈÈÌå729¤œe‘J²“á#iAžÑƒ&¹c­‡‚!'%b­œºò3|ΖÊùŠÕ7‹Åø‚ç|´$¯E­´ëTTâ·»žÖRÕéèwp¬ÜÖÅüú ¬ËGXS¡S=~1™&)•{‘{ZؘóE±Ìw«ÆoÏ„é¥ówôBÌNWðjWä!ûáuÑ4tþé^‚›A€ŸüT mNž´:‹áÀxªDf{-uÄ›Íþ$XÆg÷t%$€ÍâHæ *+Ô“TSëH¦ÒM¥[=9 ùb8P©BÒ 'bHòÇó÷¢Èàê1ˆ"Æ ‰¾:}=B@ý ÞRUlñAÈÙ’©ÆL¿»uÿКŠZ·NÓùÀ™Þ÷7-èü%ývþÒ×È‹DÒ @xØ)uÌ‘J§,‹̤dÚ«ò))! çâ«Þwî16~M2þO(IÆFôG`PbljrØGèíµ• A(i#|y F”¢ë@fÈHˆ¤(9ÊÞ(n6çå‹WšÐœ˜ŒõDál„ȆDÉaáH %&A®¶rPñ †›PD>-ÀS:¨ÝT:µƒ#ÁÇH‘þˆ£†§BîW žLD*MykûÑse›Ã€-@:=ÔMwÿ¦üsÒÃÚékû©@`‘79ÞTåµ»©ˆç|çÑ ²¸»FBæçk¯ÉTøCU<À45w`Ú]‡¡–›|‰[ú‡È4%_»#üŽTñ;µOùç,L¨c„WFO~e£Ì.`7ÛeþdQõYraaÏ]Qê@Z{”öîÃÛ·>_ðׯºs·B~6oÔ¾B@DDIJe"û´êð€+ÑÒT¦­Î=îZ2 …p–F)ö>á/º–¬ïZÄ×"S³w-ôrË÷söÅ1p5~ÙRqo|ËRvÇÙîÌ›:7Ãã÷;ádÒH 5°ˆ‹fSùÊ@S]³ÍÎËœï^Ò§Òå¿ènn\&‰¶^=CÓAëïJÝózxYVE;M‹áy"½ªw—Ôs°ô·m¿Š6Ç@À<Ιç-jo”ÙÄÝ×DÜÔ¹,zIcwr„™d[­ 8¾ºe†À­ƒO'+Ei<öɶjÔ^MZþrU@£ endstream endobj 481 0 obj << /Length 3061 /Filter /FlateDecode >> stream xÚÝZ[oã6~Ÿ_a쓲¨Uñ"‘ê>M3™"»sk“.Šm‹@cˉP[òHò¤Ó_¿ßá¡dÉQæf¿ì",RÏýJŠY„?1K£™Q*Lµ-6O"7[ßÎøá§ž¿nŽ…óÁÊﯟ|û<Žg" Ó(³ëÕp«ëåì×àü.Û¶y}6WJê;úÕÁU›•g"Xfõ’'~¸ºâOß\žÍe,uh}öûõ?Ÿ\\÷àc)?OZù D…°¡%V‡BiÆõé™´AÛf ú½Ë ”$AF?q°8›‹ Ö¶mu[gÛ»bÁ ^^žó’¬\òLµm‹ªÌÖëü"/5>kxÔÞ弬قVä‹â·Hè|ɯ‹r»k;Òßõ4i“„‰r«$%¢~ý=š-ñ(Ôfvïnf*”Fái=»zòãåÚFa’˜1훼i²Û<$À3à!B‹%s¡BóŠkB[Æ&¨ví$†Âèx–JqŠÂ˜P ‰­0gÇ(2‹ªtÒÊŠ²á™·Ž™U{ÇöC׉‡œxøÄèßnH¬ís-Ò=ïªí„b•œ‚HÇ¡Á’‘uþŽ¡o³:Ûäd:,•„)³D/††UÄ…{Ò,aªâúk‚»ªXä<&Θ oiúžÖçyÉošü½×ÙÚZÕ›6]ßVuÑÞmšo0!EP¬üÇ»-+pU·Ny(Œ?ð3ëyx^5ŽÛ¥#)Ó²ÉÙì²²h6a¿,Þ•\eGQS±Ü<†ÛíºXddsóµ§Èѓۺj+Gþ¢Z7<·Éz$Óà¾hî<ºÏìš¼›øÃmUúïòMÑ 5¡·M3¡(6-©°LC‘i°iháÈiÃ4ñŠrýÅþ…W¨d„e#¶UZbó¾Xæ´ ’!ˆX‡Ð} á>ú›_2Â’¦[Ñä‹]óÖ+(jQÞNm ÍNâÏß ¦›í:ß@MÀâ6k¡8lCÀ,ìTìš–AUgœÒÑBâ¾Üfn¢ZñŠ¿òºš3ÇŒ*–jäæÖyyK>„¢‘÷8ÍXS^øSÞîê’¾?‹áþ×»ü»).è1‚ÝÍÕÍùë—o^\\_L1‹=S3µFÌÜ-HûEÐ4«ÝšÁ.*âé}8wÎûLu}ñËõÍÅ/o.ºx6…ƒôR`áœ#EìÎÿæ¶ŒË]Öð›l]çÙòÏæn‹:_N£×±•|õºÃq ·T ÆŸƒÚ³”Fc…ÂHêcÌRRMg±JCc=öp_Ëuδï=¸CkIzìó²ò\ƒ92²ÅÊs,ãÐ(¤kþ@1MÆÑô/)b§S²þþé³›_¿™â£ÕÇê1>N¤'À„¶bÔ›ZÆR[§¬þ£>,à¹íöèñ¿}Žô¶A¦*‚€á\b2ñdMº[²"¹FˆË鹯Vö‚%WgÇ‚ƒ`¢N¤Û+ŠCÝ•gJ°W™à¤ŠmG°5)C“xeøõù™UøpA –ü¾—œÓ8–ŽFe‘¦ö.ðõË›]Q¶Jž!‰‰Ö›]¹‡šD#U”9ô¤pàA¤£øJ-÷&ŒBƒ'F#Ç´ üKcÕ–Ô`„p;É.·ANlj(Ò€¿{ZF|Ðr Pªú¦÷ß5S$™ùá0nx#iZöìR&¡Ñb §¡/Qv¦ÚÒC»€$ÄFlY¯7‹öÏ©T2±ÉI€‚Ó 1lnã!LkCäÕ'™J$¿„¶SR5¡5}Zù»ñNrB¬ë“tR¬ÎeLJP)¦È°N@˜‚Fˆ,#ÂÞîàÿ'â‘ßè(> dòÅPØ/d©+o|žróv·Z1ž$&cd:vÏY_æYGî0ÿù¸‘Ä2¨ Oa$(¤RõI ¨D¤õI #mˆìð§9ÌÕîç°X!Gñòz×Çê;éø” 5‘½¬œß›´„¢‹>1]~h}R§à1Lƒ!#ÆMÇI 矜¨Q!1è@ZÇzƒÊ<»| 9äæ8|ÆI¨­DO1Åó¹1í¡Äŧ m%®` s³Àï(;›º­åÁŽâ8MÃ(>L‰)!¸ô‰ãm^{}ÙT.K["åt4»É—Ãdlÿ™.ÿ[øIÆÀ;fÞ('ù†Œ””u”’~47'/cà‡4vúèPl(‰Ò0j”œO¥oÐ×}òAܳ̽Iےº¬ôëð‹ ù¢LÇhNf ’‚\$OS“IÙ1ЩŒAR¯+= 1 âЖ2¶Õ‹^c\ö%‘+;žåª!V…g¬ƒªä÷Ôa*|¯iüMß9¤AV÷Õ?B‹…¬{\hºÉë÷–VåúÃ`_jl{Õ·W~嫟_¼à¯éH‰f¨—8aeuþn7l#,&O&Ôè·*WDR-Tžå¡t[Q ç •Ç˜$–"C¿øuhŽÛ÷i þ 9É)Œ³Þ•Àd<JY^¬Ò ³ Ù±YèÔ?î:Oîà¿[NXyÜi9Ãn#ó‡Êëx¬O¬x®<_4±Gªv¨[çœ{ú3S:ÏG–E_‹(ǧ3|Dm¿ü}Qí2 Z·Ý§7ôº Aôjº¯E-ÑÜD5@”GFiÒá¶B ßŸ zT2—6ÿÁ#>0íéÚ5ÙÛuÎS«ªÞ|C,N;&€Ñþìš®ÔN:¨”ù@yzîŽî|@^.]r€é——ç!?]w+§ý¿DêcØ8@õøQ A—lØ…”‘ ;'74,Ê%¥TŠÐðþ.Qþ]O^_c¸%DjÖxŒІI¿’/ÿ3èJm£ÇL$!›£®¶Š#Ö®Fi+!Hü!éIǰG³ikNJ#g¡ôñÐB¡.í]Öò›.(8† —eò ‘ZŽÓ¥á‰õðàÈ•€}ŒD\*p²Ë0݇É}ûm&騊CWótÏ@¤&ÔVžâžm%µùò{RÆ=¡¾âšvþø5ƒ8Ò_vÏ)Ùþž]$jý%€\2Àèà’ìŒÄÃ#§uô°+ "{ÀªýG¤ŠÕŠÿÊ» fÈàð´æ;J" “ÃÛ®¸˜¾‘`ÿ'o$ŒüŸ]<¿8¿¾ü÷ÅÍõë]¼úŠ ½1&«¬Xw:A*šN×Û¿¿áç£( 2>ç’ƒ“õ«Ë¾üdo RÕèã„›…Û©jÔÕœðû-'ðxöó›—çO¯¿wÂ#$cæaÞa¸GK&&KwýË_££UÝ„Œpéx-ùº$~<)<`zñ òž! b éÙ;º æ´Ü7‰ÞîüñIÑ_5ñÞ}pÕDw·ÜXþ순?Æ^·sJGÎó¿mU† endstream endobj 486 0 obj << /Length 2393 /Filter /FlateDecode >> stream xÚÝYÝsÛ¸÷_¡Gº¢ñA }ÊÙNÆíÙÎÅîÌÍä2Z¢lö$R!©$î_ß]|P$EûÒ³žj?ÀÝß~`w±d3 ÿlfè,圡g‹Í µ³õÃÌ >¾?a~_ ãÞΟîNþúNÊ£ÄPÃfw«>©»åìStö˜mÛ¼>9çÿÛi,„ŒnÛ¬\fõÒ;¿½uƒ·.OãD²ÄDBž~¾ûÇÉÅ]Ç[&É‚ć(U%cšè™Ò‚0.P@1¿ßü|>¿»ùçÅ5²˦% 50±/€,Üèèî1ЂFmõûi¢£¼ÄG}Ǭqk_O¥Œ²u±|ƒšÄw ‹ªÄ}mV”¹ŸÊÜû‹ª®óEëæ®.ÏÜ`UÕn¹ l7yÓdù<‹=Ęq¤Ãy¿kz‹ðÛà¯À@AG•›­ÖÞmå–ì1·?¿»%Ë×–»íú”EÅâ4fQÖ0®Jâu6Ð48 K‰Ri_Ëÿº¾½øåy=›”p•ôôœ¦ÂéYÓ׳ýƒžS«g|=« g‰ºD=ãÂHÏH' +^Ïø`õŒ‹VRœA=[ÍzPN³ÌAëtF•Ñ=hup=ZËsœŒ_Žz²žÊûjá×Åo” ktØV…«•ÛÔä_vy¹ÈÿJ[§€ÙuÖZRµ{ì»\Ÿi¶®ólùä6Ý[+ça›ÂòÇ-öþí‡ÿŸsÁzCÀV«7ôT%,º¡¡p® /¡¡7QcMûeÆ·¦q6†ƒ0ngžÕëC }ø¾Ý{Ä¢ dûNÝGTVžÝ“]n÷8÷N…ÒÁ‘ÿs6>»¹¾»øõn~ñë‡ËçS–f %IÊz¦ÂM2¼Õòï>ÔX9p¥óHœõ3ÈâÀÂÔ}€×7ãdÔ`Dqù#Ð|fùÒ¥Œ$UDI>“ŠjlÒøô™Î–°ª%"}³;73Ø8ŒÖ³Û“_¦ò_¢)Q(Q¢wXÁ­×¹“}›ÕÙ&÷)FÑ¥[[Û½ÌØbå5–¹]xs³V¦ÔÊäu™A¸€@eui,˜˜S´r`8ÑU]ÛØ½A\^¯ì )‹íÂLQ•Sæ£0QÐHÓqb›ºe"£kKG›¬GÊÎ|„Ãç¹ ›(©?Œ~ Pp[ßíÊEÀÐ9·ß»¿°5χçà¡iæÅf[Õí¼´¸´Ϊòk^·Sæ~@•mñ°«v{nÚº(ÜØ¾ŠÄ™FóÁ`¶ÄME 6-³u ‘hC\ЙږE³]gO“ tˆi@«‡ÁŽ€á%øÁóœÕ0r¶Sžø·êE ™2R®óuž5ÊçE³°EžÕsù"aòœõÊ/»ÂnæðÎ|“/Áe™¤ÑÏEã5f£~ ·OÛ<Øq·EóçÅýyÞ’F³ÍŪï Cp忬 â~Õébµ#×èY;Àº—è9¤#€ÌS{¶Ïʪ,>þÌ$Ót|Ffšð¾Á¾«ëg=¢ü‹¯£0¤ì^sãýYš 5(ˆÓaRz>ƒ4Óæ££½}r#LÙ/ Ù £25.Œú —H"¸îæ‘’2ùÊ 3N#h„<"ˆ`z˜G†LfÆ‘”2>ÒB,CŠPA‡Ì!åH)ŽÂ\)B)2apœñ8M‰JÕøßüéÝ©æQâ,ú¼O&Œ)]~âà©& )ûæj¾“ðÄÙc¼-EÙH%P”w9ÿ7*©çcúÛID²ç2•ÿ%Ñ€-‘”¤FþùÀ+I g·¤¤O¹ •Mç(æí¿xYÊ I“N›¢„Ò´Y»k¦DÀœu»ßtõ@ÓºH šƒÀ„×He“ž%Ê-ñ*ÑðT©°¤DWcCñÌ¡Ú9d¬SB…8 c(ý¨ðm§Tœš ³¢ÜîœgÍïw«•ƒx@™*{¦ôl+²Ir‰Çæ(¢qiHÊÙ@¶›Ëó)é(ü€é¡x˜¦„3‚0¡ö²YÇá\!õA¸}Ás€±ÆÇð ×Àa¼»pçë\µ&ŠØ×ö…#ʺΠ` *žŠMÊ€{³^hbS6ˆ™T6jû xú'dà)Ș¸à¯Ó8#‚=’bÔç´A¸Þj@9¾[a¸½ô7‡¼ö‡cãºJK¸»X¡íä•k#¹ÂÇœÆßƒöz½ð“?eŽPHÊ#ÅÁU-UbxµN?¥7 iYCœààfêUz¨ aI‰p ŸñTˆÑHí\!©p°Ö€k?´ÞB צg/¥œ½ÂK`,‘ÒÈ©xÑæmìnî÷mßxi'-O‡­?²9”Zê£ØH©„ÿÍÀ5ؼϵEÅÀò¤Mf9ŒcÈÊÏä\œ|o¿+ææ$%)UÖ¨)}U«‡sAPX")‘z M°N£< KY/aC–×7Nví+|€ Ç:ßøö›o]á¼ïºŒ®¡û–»iVVÀç6ÛÂØf‹üŨ–ö‹‹©¢‹…¾D%Ô…æu%@_R’Š—/y \•ê')m`™, ±ª \üI”£€q<9b*I´9 SH<‘C®-z›’‡~ø˜·»Ú}ZâÚûÎe÷k»Ï®Ý€3®·§ŠE·mUgþ¬‰}t÷àAhl|Â.2ÿå@Fß â¹`Ù>›óüanƒlwMëæïC\Æ¥Uá\8*¹›Ìö±×­d«6|ä¨Ý{èq)€°MüYdëµ§W=ÓÀ™pn•R"fù°Ïò 2¼y)$”P¾‰ØåTΦà¬Ç`š 8$é€+Z z ¼ÿ ´´ endstream endobj 491 0 obj << /Length 3271 /Filter /FlateDecode >> stream xÚÍZ[sã¶~ß_¡Gº³b‰;˜¾d³Ù¦Û‰ímìÌ4“d<´DÙìH”BRëu~}¿€2ISŽSñ¡ã‹œƒs¿€Íü±YšÌŒq*íl±y“¸Ñênæ~øî óæ˜8ïÌüæúÍ_ÿ®ÔŒ%qš¤lv½ênu½œý½¿ÏvM^Í…‘øêl.¥Š®š¬\fÕÒ~wuåÞ}úx6çŠñ4’úì×ë¾ùp}€­8%’4ó°dÌÆv¦­Œ™ÑmyÆmô™þåUD…Œ2ÿ³ðßšân¿Ý×~¬nª¢¼óÏe¶ÉýS³õ¿Å‹°ÆD8{™­iPD«mµ‰ÏæFêècéçÝåe^eë·xSiÔ܇m ï°6€IpÄ91Së*oöU™/‰®&ú%QÉç‚–6l†Ñ¯·ûf·oZ‚þv —i JÌ´a1g)Ñêç_“Ù'–föàfnf"æFài=»zó¯1‚rE8Il…1HÈ\vY‚d›³9‹r ˆ2ÜC±^û9%flÿ| 9ü”¬ôƒçóád˜ðe‘ïšb[†ñ­£è#cd<¡˜G¦¹/À9Á@ÜöwåÝvôðuQŽÓ ûèTÌ´²q¢íItb&6<ÅV&¶Btè4Â’`3 TiWzP±Ç]KiG‘rY,²&¯[ÂdÍ€DCM ±VèyWmIê?“ü/I,SÐ)‘TÒss—<ð‰Cþì€OǘÀ a*¤ŒSfN!”HÝVÚò—˜À¬ˆ2“@µ`}*ûPo÷¿$L}”Öš‹¦}%A¥ßíŠ~ícô‰lç3¤…´q ˆ´ÕÁúH¿©Y¬Í$ÜZÅfñâz¤åàâ4§´:VC˜þýéò‡3+¢ذ汕é°¥€NZ=8ï»óoƒ”þ÷á¾Xÿï½î–Æ –uÁ"«IMyp$³Ÿü ÷Ý xMOÞÓšƒñ¥a2¾4x~áßáà 6ù‚Tþ>+‹z㇂áÀ¬ü‹×mÕx$¼_ê:2ö¤ñჵ ~pGðÂç3¥¢l½Ï¿¢™ ¥î’²]è×A5n®nÞ_žúþÃõ‡0¿Gz›Àü`•›îB]틜ÜT]¯öku±ÝìÖ9ù™x ìÜïÓCÚÿæÝ·7ÄÊëŸ>"Àh—M(\;ʺ(`ÜK†ˆHs¸%y’c€Ásº­€¼d E‚ãi5TÁxlÞ‡:tG ûÉUVû—}Yå‹í]Yüž/ÇÙÀR8Llû#^%ZÈã,P ú/g J›(qZä”BÿÁM¸{Ël7r":.^ÛýšôHЍ¤`‰ÆžôUv"ÇTß© ±$ó¯O»Ã³xO,‘ #¦À‡:peQÀYÉ<„í qÇ1ÌDyü’>>cÅù‡÷ÿx +kY¡Éxí:ìÿFg˜eã4äΫíï¨tŒì`†<#æšæª’Ø·SÂÍ Î1…ÂòI …Mû G½cš¸½¦€™"œN0_ôŽ&eí°‘-Æš«Áy½w$ß¶òÐz¸[¬è‰²óQöÉGurº¬([‰~($OÓt0ä®™“S(]Ó~ –É+"¥„{’ÐŽÃ Zap$zœÉÙ)N¹çh’L8ôîêz$ôΤµUTTˆZ2JleûdìÃdLÅRs·—l䲨wëìL°èq::a¦®‰#}Ø­y&k‰¡p†¨ÃXHT~þ;ÉÙ¾\¸LE¿>Ù§JqGUH=5­ñ¸<¿Ùe#8ŒWDàÜÇ›'Ð:é9címUØré(íIdŒÄì ̈o€Oeç•*¡ý9éOûîdЩÛJ´²¼&žÎFâ÷—p˜9$ØÆÔØ嶺©›¬Ù×cg2*ì0ûmõ”uãuŠk0¹jŽK¬B+¬‹Ž¥8éä I¯6ÒmÅörŠ&c›òI Z$NÈÎ{P›1ú"f7‡¸Í ¹êoŠ Ç@ìûÄ¥·ðÂZLqnôop’C²ùÜ[€µR§S@† !OW–†¾Fåˆxs»_­<–Ï7º¼‚˜’â*5ʼn¤FdfMÿD—¿}Aýà…šAi£{Ææq7n… ÇEÇ ±1BÌgî\}7Gz>¢!ÒàÀÐ2®Bž¦—pí0ë2MOCèÞ3,ýàIªRƒü†,ëÇP½Ë«ÀÄÍÖùÍe±zôÕA<î·ëqú`t=Ánù1iŸpðk¤ŽÝLñXÅ ±G×&`d*N"›$BH·æYψ¦aôÑÆFÂÝôÿ Ë>`0•!ÅrUðXðI€ òm¦´ BQåÙ²•]„ÐK¸2;ýÞvÓÅÏPVâŠøËq`d °—›+‘“¼k˜ á­:M3î³ÝKôF\L‰H' G݇ÚuÏK±è—$夯]ô–ô/‰BѧÊH6ç¾>=Se®dô͡҉äÙ1~‘Óç…﹄ù—fOÕ)ZshzÌS+=ê=ÌÖfì<Êv»5±]W€6´û¾nüÛªÊÃÄšúfëwyHëÚã¾(²=s—ø§ÐCÀS›BÞ*$ç@òþ ʸGJ]‹l½îʱ<N!nNI3¤€Àž”F1jˤÒm%˜n{Gëœ*†#&³‡L˜Ãå À¶rD2Eâ1®¥°ºg¤ÿPC9•bÙ$Š­´Ñ¯ÒÐ  ¶Ú…Ú¯lŒ©)ü0ïh©æÂié%L"Ôè?pœ$ÞPΣßR1™wœ,„~õHiÕ[ߑݺ6Z¶9¬¹¦õ¾Yã–›r} ÎC?Ž‹n7’óNE×q3+¡Ì©»5j¼Ý9½ut +„H0òà§ %ÒPvBvØ èt[Æy㽋qµ3| Ùý¡ÌæGÃëÖO¥h¤Xø/5, ÌËÛ°INY߇Bž;NLG \ž·<ÂÕ>=ùT¬ï“\ã|[®ÉÐ(lâüž{öµ ©¡ñÆIû|–¹v½î² 8î×™‹¿d[ÏÇêíàŠ¡è¨£¬iòÍ® ·~°5® HsPíAÇúêPL\=z#xñã÷ßû'ב¥f·¯¨@ý¶/ªàɇõÄwëõ–Èþª}®UA¿½èÀüno©Ú&…O­»¡—*ßUyûд³žä¼ `»Ë~Ûçþ¹ÛR™SƒÿXo§ÖÚ·O¸V‡`ÅÓèËn_Ùªó::xŸûÙõc(V}ñ“ #úÍüç]ÐÈn×ÐHrYbN³Ó3¾íÀnZ8ß]]ÍéÆÈ êlòçÐ 4]>’IPÉÑZ!AÚÀa¾ìiJL*.”Ûê áÆXæ"jdÓ‹»Aà~}Ñïqã¯q`ˆH·(vþ †i¯`Ð ž×·Ú ¡3Þry•ù˜« ËäX¹K¬€9²p;ê´Ž¶ŽKÝV2í4ÿ|¦´kšù×Ñ¢8‰ë>N€ 26\Þ_ošMù­HmâXMœÊXœOsHí³•.Èw—?_þxåéì›.I[INF0nˆ19Z’)'}]´ÆªÑ#'˜(òd™èÐ^´à< Î(“™?Õìu2ˆ‚]¶ª ¶­jË6ßm°Œd®pgpwþ3ÌkÅnü¤UµÝø'y[Õ*E± ÛìwýF5ƨ˜ï «i +íLÈØE9âßþ(NeÔråò4m÷q*mÅlúš8u ¨!NíAmƒùçi˜w£ûnš\‚Häq—€à†’+N# R\, ­”ìwRÿ©›Œ—Å!ÌJäS씸î»”Äßè‰7áe‰š{ÁAVÉúØÃ µR9ÖÈTPáI`ƒr"ÕÏ)GšË’Nxõè¯z0£~„j¥É$8IÈR’¸9âG¤2„OÒ¤±1ªòârfjb>Í1U‚0Fò>LrÝÞ0ºûƒÈßÉ0gí 6Ò '¾q9Öú :Èî0eBAz_g¿‡§E÷B,ådT)qÉ™Œ1%$Hî&€k¼çyù„RÕÅ«1˜›6 ¦È¿ò '–QÓÕ_û9"jŒ˜à:aÔ‰U 8CÆÝV&ŽÇ,I§JNHñØ9&k\0Xn6 LG­læ¡‘á.µ÷>޹2ÁS8|1J‚Ú3²Ñ‘ûGdÝò§ÕtŸWõ¡ŽÜ?:ܽ ÞKê4ªS¯§±ÿ»ûi¯~ô‚4]øÐ|†`C©Óî‘#–TH± XÏ…/„kŸp‡êaô_ `f endstream endobj 496 0 obj << /Length 2473 /Filter /FlateDecode >> stream xÚÝZË’Û¸Ýû+´¤RC¼ÁÙy<WOÅŒz“x\]´Äv³"‰‘Š«óõ9%R‚»Û#z*åò‚lÄÁ}Ÿ ˜M2üc“<›!Ò\ÚÉbý,s£»Oÿòë«g,Ì›aâ¬7óÇëgûY© ËÒ<ËÙäú¶¿Ôõrò>yqWlÛr7 !ñÃt&¥Jæm±Y»¥}5Ÿû—çﮦ3®Ïi¦®yöòú€­8â&iæÙ. v)Ò Û »ÔV¦LH¿ËOMÓáý~XˆA¬Œ 7SrEK½ÿM–øñ—I–*Ë'ŸÝÔõ˜ÅÛj2ö c*•šQõz[ìʲÉR£Ø8ÈF§'¸›bí@OmÇs“3™q‘Zæ¾ÿyjE²ß,ÚªÞLYò!|¨!Rš+ÅéٰжÁ6Ü7o_ßì«M+ø¶P¤Ü› êÍZg}h¦mª%ëVø-SYÊûÓdÊ¥8œkŽ[9!¯ÎRiÏ4'ÍAq"åF 7ÄâV§Lçn)ØÀAB¬)·‰<ö/A–6$O ?(c]mêÝMÓí¾‰‰dT*Øaö_ýº‹zÓ´4ÆÐ0ñd‹2õ³*™ja'ZšTÀÐÎla¤[Š =æNes> ¦µiÎó>fÓ­I­É;eÑ®XL§‚¥1Ó)^e\ƒÜØ”s=†4ä…\óÇ5(2 7ec` ÆSGúj ò'k08¿×aÔõG¾’ýÕoÊß÷Å*òa¢e/⣦œ n†&DëUÄ!!»4л@¶³K2¨vu$÷°ƒ(>Ii†‘ Œ+sÒe±+èÌ$mù©Ü-®k9›,«Û{'´|].H·wŦjÖ^ÁÍóLR.ªß2&aÐï 8´_¨L£ŠÓÌéwÆ4J?ubocLdÿñdcLª8*#£‚Á¿RÏjøÐ3vNK)a žš•Ãg-“CÔ6hWËÎ22¹òN_î6Åjv[ïÖ~m1®÷µ—uzçq6†Þ3„'`ÇÐ;–b\>Iï—£ôÞGýzçÖ-©0ÕNêWŽí_’&$¾tK™µ—òNÄWàn¬om9kt‘ìã¹^•ņT"¹Äë˜.$OÞÔ›ÙË]M±dæ$lã_wå­ãÜxmkÿICªp#¥×lÕÒãžè]J;±É¿â+:¢Tj…ð"Mæ@蹤\%Ê]ÙU <àU´=!‘›vW-ڕÇ´*“I{Wú߉h08ö¾(vê~­ÃÂÿÞÔ´òçÍp‘}Vn‚CÀƒ‚R-‡Z!U§‡‰=z¾ZyІ²36p®ó¤ØnWÕ¢p,Ù 4=;’ïf»Å?Oƒ­1P{9}LyX‡T[bê^é‡?ß•jæÜ•÷1©:7@Ü87AÇ4üo¥/QITò«[LW°Båé}ãÁÛvW6A…åÒ9H<ãlK#©1A·²É.J*†’¨[I ýHkåhÊâ¸ÚÑCØ£>àOuë“øgíTt¿®÷M§·j³¨¶ÅŠ"^)gp ͘=1g½oá¡ü7wõ~µì˜Ù’œ¯ìl\´Áêµ[2qçx]mütÊ.Á;\hù\ü¸çȤš’ §‘”q¡_Ëv¿ÛøUþ3…´Åj_þpì(º=ùðÕ|~3¿yñöõ»¿¿¼~K­6K]ܯ£óýbáv×4·ûUGšÖÛUIašÆpg~Añöà?>ÿéæÍó×/¯ÿù.º–¡þØüd ×wMú‘ïTÝ@øárfÖ·M½WG#B»[WÊ&¾ÿnõu…©EÓ„ ÕqÆçÊ•c4xŽdJk)hØ7Îh‚:‘ÂXø¨‰õMÙ9 ]ÕDo+4… >UÜ\æÈ—R¹¥xö"–á𻵣@’¸B¾ysB´øJÉ])g'˜DÍ<±Ú„€'þå®}F̼êÒœ¨s½<ÍñÝñï§‚Gâ–Èôº ·‘¾ï©–'ÏÂwhmQ#ui¨ë0ÿxB1“åBh1 “å"O­ ¶«6¿ï«è-#ª„’zdºŸ«!òáøè4¬cncàr¼kLàÞÆøhü¹Uði3D]£Œ –ÜEk¬PPø&Ü=Ø×q÷æ²ß`'wQÖ%X*3u1‹’ø%QÊùEüRH„‰€÷Ãssk¿‚ÅÏ8š&Æ#Üð]¶>p1H]h §ÖÚ\Ä,¹£Ì„#4¶»wx{õSL@d‘îÇȦž FÄRÈ–Öžˆ•E€¾)tœ#È" L Äd9Í º>1¨¤‹3Ä<°”¨Ÿ€Þ2ÎW’íý¶l.¹’„¹†?Ò•0*Ç|”®„–Òö{éJÖ˜ˆ §•OnOr›"#1#œ®.âht‡¯ÝRܨƒ{G/«®»³Ñõ¹Ö¢Ý¤ïêODæã Cê—ØÂÙUâ—¯´˜2¨R£\i1d«y×ò÷¿p·¥5ïÙÉ0ñe;™V`¾l¿gdZs;Üo4qÒ/óQ@Ýÿ0ÐCP$"w“ÅÎ#Ю׿”§¤6Ž·Ó™rv¢Y7¡!b¹%Øúñzçú=úæ£?awïèüü¥Þ›°‚MÌö—(«Âêa¦ê»(u„êà¿nM‚k.…vZtÃ!ÅšdMŸî}¹Ô}—6É-zÚe7î7IÃm·taXr¼$sc·k,æ…Ž–~õ¤Ôâ ›Òx" Bª X[†VK_֔╘–Rš=r>LEN€_ŽLï'°uµŒ@rÔ-ª #@¢\ôPXŸùx'ŠîXêXwÙ nžä±:÷¯ ÜuÔ}('M×íný@ðv;:Rï.ËEÇ uÓO\»%þ_;`2åÿ_0 endstream endobj 503 0 obj << /Length 3415 /Filter /FlateDecode >> stream xÚå[KsÛF¾ûWðHm…XÌ{½lNÊ©8ÎFºl%)LB¶øP0Šö×ï×=AE6‘Ó–KÅ™Á »§§ß ‹YŠb–¥3§T’i?[n^¥¼Z}˜…ÁOß¾qß_Þ¼úû7ÆÌDšdi&f7w]P7«ÙÏó¯î󇦨®J©¹úüj¡µ™_7ùv•W«°úíõu|ñ㛫…4Bfsí¯~½ùîÕë›n#å ‰¤'T:P©’dF*­×‰P:Pù¡®[|¿ +ŠwjiÔÏ¿¦³~7Kãåì‘·nfØ ÖrûÛ¾¬ŠÌV$FÛi0[›d™écÞË+%æ÷#§–©KÄD¸¥‰â¾ÛU#XNœši°*œØè>Öm¾aFåU*‡K¶³…T€+ÃæŸ¿¹òj¾ß.›r·½ó_ã›÷ÐFÒ› å!b”ð;ïÞÞîËm£äÐDÝÆû½·ïë[œûöH…MûTˆDãøÖ/©I#ʬ»M'R«#ÂS6*­Ÿáò,^2nÈFí\T‰tªÏÅ>.¥}’)Å œŒŒÁ ¯¤Ÿó)IcÿÓgŒL³¬\àN„‰WnqüºÉ›}=v2g%¼ü,@_î¶uCC=® ÒšDX7³Ú%>µ—œVÚ,‘©bPÆÉ¾Ì °fPe)&Áše‰6¾µã)P¹¬eO¹}Ø7Yêµ2qVX9Ê?•Aé29ÅI˜båà$ïÞ|}ŠT ²/ÙHq ‰ð¶´.šgdSZH¦h™CŠyÛ<=õ˜Rö cì^¥QÜEGÞG ;(Õ Ô*XsÑá 3cP$Žáð]ëÛ¹,IÍÁÀ°ÖlgÞ@£Ý¼)>U”•Í^ØÏWåÝšßÂc`ñ>ß–õ&èdý€}n^,Ë_R¡—q1Põ7*’QÆÁÉÂ&©îHöÛ Œ4¤KøÄŠËئ‰šA)/þÄ9€2ÈÏ)ÓÆÍQ*yû§QÙGœBNS9NåÐsÊDÉIÂo*8Ò& EUä«Vôüæ¾ËLš]xôx_I‰ËíÎà ŸÂ¦ªXçMQË…€…0 £+›(~c²/Ozîw¡lx˜&à”n@xŸX’‹qÕ‚éChב’Ô>'%i¢”ùDzR¢ËÓ£wÔèJÐèÉÒO€–$“Y)Œîgd ä©ñÆÍ¯CA ˜‰¹ïîÂú¦kTê°ÖÜçM|š3ëäÞ?s³«švcÅË v¨XÑñIŠà@g7 !iM®Ω ÁZ“`7ûj‹·xFÜÃ@7B+"b_ÇÙû€*L}ï}$•ÆM z™¯×”ú¼ü® CÄ•u|þX6÷a”_ˆ0v|Š´ïUÆÓd:Vêîwg.¹[`Œ µŠM-òz,GqÈŽÔ$X†Ýt=´»r5‚Ògw; Î,„û]œ¸rÒZÛ$ȳÈ7ýÄâBN¶ÆMêt`@’MO†’Í›‚{a’Ú×Ê =Ð8!^p.L«åæa]lŠwçœDÜyÄÙêɈÀÄ•,pþ~=°ÕÕŽuj Ãí¬&ûD±&?9 ;ræu~°ûF÷–ŽšF³Ç’d=¬/w¶å‹0åcá—ä.wÛø ¸!J#;ZHÍ}¹ ã@;QÕ Lñ›¸¯¬{, TÇ#V›²®Kf´ŽsTrFÕnß”[~î™´xà/Mz7EǤŖ8çáåkåvUD"0jÏEÛI Æ.5”I`$Öñâùd­€q)·豌’ŒI×……¥r‹#n¢8ÑfäZæ%ß-Hom ª¢îQ`ìé<߯µ÷°«1âŸó¸ôeÝT-XIpª°F T¿—+F†•Va«öù:Ì2Ç[N´AÇBK 0*›"gíÎL«a<"©ÊlW„±|>(‘TtAT¦O`ý/ò·°³™õ J¦n4(aj‚ ‘¿I«Ä£%b­þ‘,É"-<äUS.÷ë¼ê)°08R#‘eûþ5í•´‡ÔVun>kÝ2„Жï‹mX+ãï]¾l³² +$}»ý"UÅ{JzÊú†µ|¹,â‘; ¡ê”ÓˆöÍu¤š¬'ð£Ž$K£`-óín‹«X“¡;ÅüYe“চ‚êãn5Ô)HäWùÕåØ%Ò+gt}¹-›qñH3&@J*ÂäwÖäSœ±º—SàD,â†8Ùˆ’eü£yŽÝŠØNA…"v«¬OE¾ õØú³ufj!jú+šÝ#Ÿï?¦`¼T—÷Á«ÒÐϼ¤£ÄU`Á „ÑÔPCy`ÉÇvY¨Çç¼ì«Â¡y&¬¸ üAy‘©™‹/¼K$,+JŸïF‚Bxë)JAÍ)ÝCú—4#ÿ¬¯«”×õgR†cü¤3¨9vÇe,|•I‡Þ41v‘ÐÚ'&{‰Hàœ»I:n3‰gZÿŠ‚{=h†"¦êËÈ Ï^ù³>k–rãîä«‚ó]Vi‰25E—•@Q¨óÿÐe¥j@öÑYÒh—•@Q(ôtY?ÊÑ.ë(•£]Ö)Æ.ké‹»¬œ´Yó( ­³›(<ŽÁr–UQ—Õ1bž¢ñJ Á‘héS¯ʶ¡z?Г¨f¯í*2›wH=ìþ§à#b¨7_GöÒŒÙKƒ|ßÜÇ1ÕJCõÙ«“z²ü§Aà¿#þÓ´iao€ “&Þš¾9Œ·‚l“綺N ñ¢©@Uîl£…{ãr˜t2Ü:?6.Ul\ºy>ÒØÁ ÅërY6ë§Ђ›oGk§«â.߯›®\éXÄ ¸V?*_i? ^aD®`r­7%/³Þã¤áTæ?Ò Ù,}Æ ÁëiÄ÷ŸFå@Ž‘©ÀMR9,ÔRj)&ÁÊEH×ÇJvH{wꜴ±1ÿ5n^µíüšä@P¦j-´«c‚hûp^èùu³«òEXÏëz׿à|–ºA°]æœršÔÅ>9BŠFASht”sšÊN4‰ ú°êjJ|ž?ÄGç…Ð¥§®!÷;”Ô±%"?¡Åð>¾Ç@_øJ%&h2úÔ3³/ëÖO6vë{xé6½s¨ž´}_òm±-ªÐ‹²\½£Ÿ®Ë²'6—vD£ˆ¡xûCt˜ßU»MxŠ ´z_6UÎßaÓÅ¢ÚøòÐV‚åy¬Ø'À‰–—s‡ß`°{bk £¶•µ Óc“N‘ÞÙ(y˜vÚqÛ]ìòñ˜;ÿø­÷ËѾð²8Ô Å¨OS*µš€R¥‡ÒQ@‰…Çû¢*–ø@Êý¨c=D,æ†ÁÐøLPIi ²i$ È$.ª‰Qí^Áæ$kL¿T(¸µHÄæaz`¹)¶•gxeÓ¨É4â ÁïÙÈSxr0†›.FžReZõ8Û·!«/­œ1¬>Yûbj_Pjm¨2Ž»'þ˜@qg?üòR4íf{”ÚbÒîþçù°Q[*Lqí¨cûg–'‰ô:ü–M%Â@ðbWíC_BñGiR‰0qºf)”^¯ù[®A‡XŽ_#Ð{yøYƒ@ ¿ãuަT«Y&s™n¨ù9’ @¢:â3]W% F0Në2PÀ9Út¥ÿ”NƒÆ$ ìÍÖÅ+«Oä7öœdz•(èÆåt"„J´Ò=:‡‚IÓÊ£…ESºo¡_a[òÁVI{œÿ ™·q endstream endobj 509 0 obj << /Length 2659 /Filter /FlateDecode >> stream xÚÝZK“Û6¾ûWèHmEXâ ädÇ뤒Z?63—-Ç5EKœVéµ$;ùõû5J¢†²Ç#æ°[s ‚ÝÆ×|>ÉñÇ'>ŸX)™Wn2_=ËÃh}7‰7¿þôŒ§y3LœÍüáúÙßÔzÂsæsÏ'×·Ç¢®“÷ÙËûbÛ–õt&¥Ìä÷Ó™R:»j‹õ¢¨qô§««xóâÝÏÓ™Ð\øLùé‡ë_ž½ºÞëÖB<ÒHšù+9wÌMŒSŒK ýµlwõ:òûTë¬XîÊïÉ ¼lŽ_†¸g6½ëo®n^¾}ý®_¥ù=e.gÜá­0=x@eW»ù¼œÎxÖ4·»eÔ:߬¶Ë²­6kÅXˆ‘,‡3ã¹cÞMfÂ2Íyw×4£þ³÷‡òœË‰‘–qØ ¼ÿOxøË$gډɧ0u5QLÛ–“«gÿŠžêkå\3ed朌ZËÏ[˜Ì³MÝh׎'ÆÑnh‡N´¯‹U9äg™{ædtà"N~ÿãÔÉl·ž“_§<ûpØQμÖ"¸V: Åv{ôöõÍ®Z·RL%M>¾ÁŠ±Ø›ƒj“÷ðd“Fw~ËužôøãiŠ %ZúNXÍl3XŠÏÍ©ï”Ý»N2aeßu}]ÂÂ^QÆ&¸`YSá²°4‚ÜßÒbzÞP‚Y±wƪZoꛦ-Ú]3´&X,ù~öw”×M€6pàB¾’qýEØjÅ öO{Ã,¶ö‚Å {$J‹>lN”"›ÆPêŸÂ÷”¶C¶ÌYßy¬ZowÇÀêË®¬Q'ÞôžpœåFޱá4"°¿»ßRÈ(–ØXeüŠ$¦sýŒ±Y.ÎF'<£½< N>äê™ÀþqkRÐ?€e±0 yÃäê2¨Â:d;%mÔÚ‹¶^ŽžåZŸJ7?#°mÖ–weP²Ú ˜ºlQÝþ–_—sJ÷źjV4¤²¹¯–ó ;¬æi0Z‚9 *Ù Û 5‘zÈm2¾6’9s™ÛyBQA÷ÅÊ Bà xm8’r¦?ÍʾâÜ0ž‹a+O´J”1ŠRK©m_i›PQ—Å¢ƒƒÊ®ïË„‹7ñÚnâƒñG(÷ø¢lœ"WÛ^g_sñµ08 eZ+Ôxq š4{ZÁyî›ÁàøÀ@¢y¢‘}½B Òؾ‘çÓ*ú`&ŒE³FÎe_s„6Y îy[¶³¦­«õ]˜>´HxÑ<›SïZPCµYWób£ì‡ö¢ºÛmBöÀX{dêü¤¸ÝÔ”‰„Ê6·ñúü\úðH•”>$Ö†%_àî5ðªƒ(+Ý1Œ’Ç eSw´X4€EÓ$/UA9ù©jïã]{_5ñ.­5¼´"OìÐ…'·u_Ô-<ø£{µŒ7Åv»„gÑO6VÒãBÚ×¢Åm:O©lÿ7´)Š“Mg[EKàÁꄼ ÌžQŠ¡°wÉ}u¹,‹f(µ!Ò½ô£èE¤{kúŠ» ¢ &¬²„6EÓËI×t Íô&ÛÖ â;:ŠÑH/óbÝ¡ZxûÕ4¥Ûiz^—ÛºlÊ8©ˆEsÎ{©6[õK/= )*<$Ó_¿!ã¿ ÆçýivU[|\Ò6ç–"&Þ,ªºœ·ñžNE]5&y”X²;³42r2c5_mSH„V“ø*I(víý¦®þLK “ÓAª2ò QkŸ­ŠvN-É}Œ FÕUIábET„k±ŽŠý™xÖù¼Þ,ã³eÕ´qogÚä)á]ä Á`º@qAc:Q Šã— NqÃR7‰Òy¨/Áø÷1*aꊖ½ÛŸ¼eÆÛ“ýŒ•=×-e@"%æ÷Ëj†²Œ§äÚŠQr2¹ŽþÂh•z¾š\r0^Ifáî®\—uJX˜ý‘&'mƒéA¡YQh«žäeþÂ9™‹$IŸ2íîvh›¤ÀjÑ^Ô‡žÚa÷P§É™G§!Ã÷uvè-?·]NŠ[Ï“™ –ú^†ß×…sé›+ǬÕa™‘ÙzrõÓhEÐz‘$¡:£»¬Wý9”ÃiKÕÊWq¿•j;W¥pTi‹©ÇüÛy:þ—u}½³(ç!IøæÅëW7oÞ^ß ¬Ô#QH#Nô§]…j€ü^-ÊÄ›&.ábsRìS'@Š& oÚÔ:¤“a3sèßöçÀØý ­'öpA?¼øGXÔc9ÆbªårF-ãá$ò8çw¶^ÿûÝ ½<—,wþÈbô Øúûiì°Œ>5ÓìÍijƒ™&õ²,âÏ6wÊúéŰ+˜Òì¶Gç«8¶O¦kqƒ…¤±3¶WT}|Ið\•±:Pi8Ï) âÁÏ(K:Ï>켟Ä(Ë\ã4’XžÅ.ô¿íCG £ãè:œà}ÝgŠÎUþ/á“÷ë=O);θW—SÊ^1ãôDX‡—.ã= àA”±ßÊ(»Ñe¼þF™N V«1e¥¹ ¥<†ÖD)÷´~mêùYFYç3£l”ޱ aEè›á¼€1£ÇÐ*st99?uÞy˜¢Ë?í¢lÎïÑè”ý:£¬-CcØGêW(eÞÌär J™DIãþ×9å=¦œ&óØ"O¹ÌiÒ²\¨ Ê7&¡Ì=ª§ÔO´ò„·R,'” YyÊö ÒýJ…PL ÓW:L(ÿ|ÒÆÉ£6î˜[veµ/„çˆeTj-ú$…æ|ø¸ (ØÄeXP2|\@ÕG›ð­X°Ú| Ý|¢•'$ÓÃ6ž"¾{²gN¾-È@Mö´4¶ôAvPÎÇžŸnê²Ù-Û"$Í7ÛÔçÒ/j™éú|0Ô• oGfŒE¨ñÄC×±éÌsq Éš¢I=·„dÔ"§O Ó?·DªM)“ˆa‹A@cZ˜Æ÷¡@GÇ“[‚”2&Ž8²qô¤¸mãÉ„guœ8H2¾O³†/.áø ¥« ®Ö‹2¬q×¥—Ã÷$=Ü:ÈÈ@1»Ül™ÃWèVΘ}àn•g6[ºxBÁúç3ÆëôêÌf*ê•­Áe<3\ž3¤O’KœJ?9ÒÅ]ÞtŸ´zmCJ‹Ô„ÄeÉŽ+9Lˆ£ܬÓÓæ>¤ÃПDr ® ‘æé€°”8ÆjQµGm”x¤f†P)¡äÿ/œå“)¾Aœ 4VÊòð9h¹.iDBÖq$ pê¡ «=þ"[ŽDyJ ’ÿU¦ endstream endobj 515 0 obj << /Length 2334 /Filter /FlateDecode >> stream xÚ­YÙrÛÈ}÷Wð-`ÊèôŠeò4‘í)§F剥7K‘M Ðý}Îín Z“"írK÷]Nßå\XL8þŠIÎ'©R,×Ùd¶~ÃÝÓæiâ/>ÿòF„u1Æ+ÿuÿ挙Îrž‹ÉýâPÔý|ò%ºY›Î6ÓX)©Ÿ¦±Ö&ºëŠj^4sÿô—»;ñóo§±4Bæ‘áÓ¯÷ÿ~óþ~§ÛHù¤•'V¦°R3¥¬L2Í„ÒÞJ¬Æ&‘Ñí4QÙNE4³«UQÙzÛ¸ÔDŸëmWV¶%»àtrè´H™È TäLÈà8¼ŠCFšè¶låÑ£Cy°;– S\ø½ál‘ çчm5ëÊºê— Å„ Kcÿ§_÷÷#KŸÚö¡˜ÏêrþÐÚîam×t2:…9?ÏçÞ®¢ò¿õãvÖùërn«®\”´šî»ÚÉiÊŒVA‹WRøÏÜšx¸èÀ”yÙnVÅËCÛ’dØwSWßmÔY$ûÕt=«çvÄ FzcíŸã¶ìM)«y9+: HfËÞ”wq»vÇàŒù^”«âqn·ÕÜ6«—²z:oA±í–DÓé¹}¤¡¨Êvݾ†OcW¶híÃãv± à½Q$—8øølpä§b©CŽBœŒÉqoÝÑ/!pÖ¿}X¼ê̬±„¯]oº—½)*AbݸWã–Ìêª+ÊŠPv÷ÕùÀ×W ëlÛf„$ˆúóÑö¼´8Îf4KþDÁ²vàh¯ðõW2hoº­fŦݮØ®þ¯õ&ñèýþù@"‰\èSع21·ã¢ßÙ‹EÖöÛ¶XMã\CäM½ÞM×=‡¤ýôñ]@jQ|ܦ²{a¾SAWŒ£SŽû¬$KD²S×w‘o»ö P·¹P•I– × ¾|å“9^Â^f äÙ-]O4ÓXÀ'«ÉÝ›ÿìÛÈ^«†QG!YF¦!ëQIOµjÒš\G«&­f¨°ŽhMô8y­©pZ)QOµæœeI~­9Ú"– ´"k¦JD( "BúøŽ< !9“´ßíûòaš©¨o¦"úºïå‚åÆ8j« l …QnϧۇmYuJú <ÓCœ„,à°¼—ò;÷„ÊòÃEšI-÷ªN±T )Ö*ÙÖúKî TL¦jåP—’Še€DIB—t·©Ì"çQ°¿WhÉR¹C%±nú®=âSj€ønõ[_׌›lPÃP4ÚΫÏTþM”J™Ì/ò]d!r'Š›à;j̘·4Úø.ÖpÀ!½Žå&@&Ñ{_Ï;#sƒ¤È®áŒÌs\›QgŽ¢G ¦er ¥JRÑQC¥¾‰Ÿ 0Z!ENßôGRE#á”9È1†u,Ó„¥8ÄAKqÑ8VoS¸‡j…Óè—ÄŽAáC¾Pþä<”’Aø+O|vθG»ü§LKÁFŸlef‡ä›—‹ç´{xkg”‘ž$Ò#µ¬K#;+çBÏÂÃ@„iÏ,²l¸D¸(E¦“} Å–G·ÑŽ!hR–¢S´IÔÃK„™N§ì aÇ!-OÇàûôHZäI9ýñÝ[øã|ßýÒú‹úxq1WìŒ~&ÕnLðnJ&ÒPë°¢—ØS²€Už¥`󣆬Žˆ%™¢ó!K.UeˆlãDI1ìÇ' *–(yjn¨w.MîÈ'ý:”Mx”q±VtÎ>^ñÜã‹¶—ôÜïó²ô¡ìo»%6†µÃ³¡=§gc²¨¥iœ¶ÕÛÕÜ/ ºŠD°¤GŒ»j1@ÚùހЛr•LWÄ3†àÅÇSCüÀ{°-9‚é̶Ä "X%bþô¬ég{ÆzÎb¨ :ÚKÛÖŽQi²Î¨‰þÑ3÷à¹ì–þj¼)îÓÕL¡‰ü8¬tf—ÖÅCú9oDm¢m»†Ú:r¨–æJBðe¬ñf œÙ54‰I¤hMsðt4uháùÐYŸhtÔK»‚¶k¶š”éIA?ù~­Kpü®íÅe‘䈫£,òó—–¢–2*‘‡ÕfÛù;Êz=d 2Ã/F_tÚè§D'ÁXY.ï(fß¶es&Ì^C1ÂLåC½ˆnÔ•8å™/{Äx€%e W°CiáhÇÀw¬?Fçbm;ÎÈõôm^6vÑ¿è‹ ýâ|ãpúˆ,Á‡Ì܉—êÞ²pW:z&ÉEëû,Ÿû7Dk^üõîS­¢cÙU@é’VìD7¶Û6Õ˜ÑÒ\` ÓÁ?ùEˆjnÆS-Ó$ÿqÝÒ¨q¹[|¹ZöÓ¡Þ.ä`ÜÉUT§ V U®Î2WÓ¯¡4Çø¯³¡R?…Ñú¾p)p®³a ÚÇR*ÃùPø¥Ê…=«7:wGŽ^:¶F^e¸ uOç~ÎÌŒº¬3¤ÌÈ̉JúÏ °³¤¨Â…ç&mohÙŽ9æ„ÚßíÜro}æØ?7ÒWàÀR™“t©z0”ôLªC)G x²þe±ZyN7 ÉLê£T(Zëvÿ­õìÊ®­7² ’HnSô9Œ5å¿©ì̶mѼЗªBøÒI/wTˆv¬Ãöӯ؅#m" D\äúì/ŽÏØ-£Qؽ-«zA›lÂF"G®ùÛÀޥ̹äöº„¢D,X†£$%åz³‡¡”Ú1¦Ö.{U&ú>uvbàó÷¾¾*•ôC† ¾)ózüÊ,eI’bdÂ0ÁÅEÍ.LjH¢D’Ä/YâX*™Vc‹Í\Áp\QV6lp0W½‹Öo`>lƒ¿óãÿ4iuÛ?Ã,¶8šÂ^ÇE€ ¢u %˜¼ŒjJ f”8I\˜,*À¢ÑPѦ±mð2LùÁp}†)€±äW1V°äÇÆî¾Ðì£æuáÇ} |𩟙bi¸s{0:}výÚoú>ÅðS¬¶ö§±ÿ åÃ/ ¨ãw7Ÿnûõýýû±ñ4ƒºìhä¿ÛÎf®ì´íb»êGtJ:Ê5Öù?Ky endstream endobj 519 0 obj << /Length 3267 /Filter /FlateDecode >> stream xÚ­Z[“Û¶~÷¯Ð£¶!Ä’éCê\ê̸n»îS’ÙáJÜ]f$Q!)»›þù~)’¢âuÄñŒÁsÎõ; ø"Á?¾pÉÂHÉœ²‹õîUâW«ÇEüû‡W<î[a㪷óoï_}ù½Ö ž0—8¾xÿÐ'õ~³øiùú);4yu³’R.åW7+¥ôò¶Éö›¬Ú„ÕnoÃà›¾¹Y Í…[j~óËû_}÷¾ã­…x¡´óLJ)%K f”2µŠq©‚”uÝòû­#Äq¬„K¿S M¤~ú%YlððÇE´‹~ën Üb´]ܾú×CÎ5S©rÝõa›ÝH¾|žàžr&Í<ÌÓ”ÙïºÉš£?ôØ‚21ŒëÅJ`·IÃ¿±ryܯ›¢Üßðå/ñÅcNkA/®¤…Î $ñï¼{{w,ö7°ˆ&ß…?ßõ™§IŸ9·œq§Z?':‰¬\›bB‰£sí §Xjõ"MГcõ)ÓiO2aäP{C^ÂYf_¤Úá¨Ñ­q²a—þt争‡(D ¼h[1wž¬Gò1šIÞiï Ú#˜ääbsÂ(ÏË!\Bþ¥ KÔUçå)yŽ)xMr~Þ‰ƒ"ÖRÙ‰Žx÷!Ûó—Ô+0ÒŸ¢.$ÃŽõæù0I<…ÔˆöºÜ× Õt +®Bp^¯eMøâDø“H˜Qü*ÒUŠHé$ýTmpd¬ÄÃx4¡|‘ 4Ë&Ì«è)»X¢Æ><ûCûÅ·ùš<õ)Ûõ.d„ú€}f™¯ Y­ãb f@(g“ŠC™6©‚ÞRf’³â:VœeœÜ%Q,A¼Jq‚ (,Mày‰|?ÜètÙK»CÝi6ÐÝ›3ÝUy¶9)í¶S†êqðš2,߆ bš”üþË«&ßL+NÃá”>KqÚ_ fP‘¢Lã ²>¼¡§•7}ÝI=¥;îúºãÚcÛspBéüÏf(—qNóz‚¥µ(f–N0žÈ!ËÉsJä­ÜL€yGV{ýîÛWô'½è>Ò¢R¢ÔÎ!ˆ#¬3”£¢¨ƒPY˜†öó.©`~$lç›íÍ<ÊúS¾q±·Ux)ü:|z[¬jl:¸ÚËBAf ÿ‰R€Ú Ò¾3ŽtöIi²ý&à‹åT ø:€Š¤’”T¸JÕ/§^’.½ÔЀ…¦Aå³n/”¶þæ{†Û "E(+ò=]þñÎöp@ê¤Çí•&kÛÃg<ʨÚF¢ñù0 ïo¬¢Å}ÙLAú“3ëÞ:^Ó‡ÑtŠpõ]ùuÈXLjJý—˜Oû¯Ð°‹“³0§·7dÞú/>{ô]#©æ¸ßÂ/Ãr}¼¯¡·Ø.†µ“×ê6jÿ±ª&õ¶ý¬Dnh‚¸A‹×v¶¶;Ó¿¦i JÆÎÂmÛ0î¥i¢äƒ†FYøã±SpJÚݵ=!¸<]чG(îáˆq+¼l7p¢xT¶ŸTåÕW§n¸Œk¿ÊéÉ_~køõ£ÑñGuër“=åÛcÙ¯ñw½/Ú]ì'wwYýîþøðWw°ðz Oè¦Â[*ñ×´(ÛL¶?ÿb,zÃà!ŸþÅ¥'ü×ð'é$鿱)ÃÓÿù‡œ35ÆÙ§ƒÈMüÔÛ¯·¿æ¦°û?KAŒÂ endstream endobj 525 0 obj << /Length 2148 /Filter /FlateDecode >> stream xÚÝYmoã¸þž_áÐ…¼8±â»xE?ìíæöRt›ëÙý´»0‰¶UÈrN/—æ€þ÷Δc9Ú\ŠøŠ¢Iäpžáp8|†¦³þèÌ$3Í91"廋ĵ6›™ùñý r1ÆG’ß./þð”3š“:[®U-‹ÙÇèí6»íl39çÿf !£E—ÕEÖ¾õýbá_Þüp5™¤ÌD’Í?/ÿ|q¹<`KÆži$J>¶R[ÉdBTjf*„ráM}µ+ëUÛe]ß~è -¦œPé»}Ï*ßvÜM}?Lcõvåþ_¿»|Bä¯×«ë«wS¯v¶m³º³ÿì&•¼ †´]SÖ›O‰¤N*6”(.g1S„'Av} 2Ý„’¶+lÓxB’”ê±Ú¯~O^·ŸÀõW^(–D³!T td©l½é¶{mÀ1ù6ƒLF¯ý9«z‹Íô¸"!‰ëØ´íª±•ÍZ»ºé×kÛ ÖÑ‚9í}tRJ„œÃ¼Òù1wÛ²²þ•ž,ïøÝŸü39¨<û˜¥D0›*¢À|‡ð£íú¦öÁýó\ÊgúM> Èd<ãèù\^Nᥠ¡)†¼“wûJD‹>ÏÁüyL£õœF}…Ð"Ê÷»ÛÊvå¾&SØqÐ5aÁ·oÞ­>\¾ýþYðÔDWuQæYgÁÆXÔm³ßxÔ5YÝVá»ÊðÌò|ßY[/xWvÛÐSû–¾nûÛ[x×Ѿélá[w6Ÿ³4ÚÆ~s8ŠÖ¬.Û÷~7‡Ñ÷^‰õ^¹ÃáYëûûSo[PNž½:è›ÅòÍòï‹)ï„ÝøàMi´Ü¶P:ä|Wá?f¡\½ïüKcóý¦.±Dº0<á;º)•êp³M£Ð=¨¥ŠcgÕ?$jLÉ!ÿþtH¬Tk„œq#×SëÇÏɬ€NØôDèÙ“ÜÍ8ašÃ[5[\ümꔀ¥",eNå*©!†‰³@8CNΓQID¢Îʨ!Bð“yÂñàÝ\ï‹ï°]§L1Š$ú–ð6HPõ”ÇyyL˜³@RFt*ÇC69Aš$ü,ëÌ%—ÑÇ.;[ƒ4‡73¦måÅcÈéá´™EÀH(,¥†'tb¢„hlDÐtlã•b„)eˆ–ÁÆ2¤Î h¥ 5çAÖ ¶¾#c*å4Ú¶S‰ Î`¹wP’†dññ»yЉ9wùœFŸ²&%FJæ|ËSØrzÈ×V=pÎüQŠGú0åX0 «ä4QP#x@(s,& 1± ©$€ðA,õ1ÿi| ˜ ¨Ӥt n01̯nr¸±_‡¹Œü!`;°t°¸Ë¾ ìejJZNÎ ”Œiêø8sO‡«„ C@s¨ ù3¦2…™ §J²@–ÁN¥kH2Fž˜9ãl ÚÚî ÿ·£ì@H0¤V8`"ª€ý3J‚ŠN­@L%Z‰EwË61sH`Bƒ¹ð‘'¼ÈÝ”HPª¸ÇÅÇÔþd†$RžAÏÓ‘ótvcõ;¯íöŽåúÞÍÙ5~<ê@–DÔž”—Ÿ*òÐøŽÉƒ"K&ý¦·q¦®M¹5Î7á/r›H Ev’@ì)ù0>ƒõTœûŒ{òïŒòh¿Æ§ˆ®o [©èã,Òê<ô_½Ã’ƒÓt©нðzÄAO‰ |g}–p,8¤6H-Žs^Ò¸èÖƒF- eƒdzR9B $ø!VŽý…Œ` ‘P3àT©0/¢5 ‡cG8UŠ>•“°¸ò, é²üÔ-NX´ ,ýqWV•ï¸X06g¾­¸¯³œ‹a1¥Ç!è+À…øbú!\ðãQ¸`£×탣!t„Ǫv¸ëú¶ó_Û@šÂ:;TPÄyÕ¾pH‡ÂÁ‹xb&ð²ý ¿ÆîgNÎuÔì{8z;à~`—nuUûެ€ö¢ d<Ï×Îùž r5>À^÷+LyáÆQª¯ƒ®aÀwžwruXí—$ä¿òã0 endstream endobj 531 0 obj << /Length 2934 /Filter /FlateDecode >> stream xÚåZ[sÛ6~ϯÐÛÒ;–¸@ߺiÚÉNÒtk÷)Íx‰¶¹£[H)žüûýJEÛqÅ>lw2ŽH<ç~ø$Ç?>qùÄHÉœ²“ÙòEîG›ÛIxøõ§<®›báôhå?¯^üãG­'ù½º+7Ûª¹˜J)3ùÝÅT)]nËÕ¼læaô§ËËððý/o.¦Bsá2-/>^ýëÅë«=n-Ä7n’V>±KÎ-³“Â*Æ¥ ÝÞU@ît¶¨V·Û»ðü{ÎUµ˜ÓK‘Õ«0¸_9¯ÚYSo¶ë&N¬ÃÂû»zv!lv×[ÿix²jªÍÏʦ\b’g[¼ø‡ª©nª¦} ¾ä2³Âh½Ü,ªeµšs@ì”KÆuܹ­×« \BiЬZÍÖ»¦¼­æaÂoãå|^Óúr±øfÚj¦Âv1²ÁÍÖ ?^†4z`‰‰,!°w_Â’=>“ýüÛÛ·,Ù5ÛþÞC{8b`­?]Lu‘ý§šmÃtSmwÍªŠ¸?}X†hÒ4(æ›õn[¯"-Ëò',îxS¶mÊ“ݶm§~Ÿ÷z¥44 Û.´eyá5ëÃÇ|2Ç$¨bÊLîýÊåD2a$ž“ËÿR?¥ s ˆ_+eàDS-ª²­»œImFAì“N¥ˆ÷\'ñL¥ÑLcI"¥ßsW_ˆ…ÕŠlUeõM°YHžtë6ü®ÖaI -€æ…ApyíÙ>«Ëm-ÿ¾&C£µ^h¨Û 0òƒÂLظ•_½„Å_.´ÎÊÅ®úŽV‚Øâ˜ØÞ‡PŽëËëWïßýòöõÕëøA›3nñ™_î]•Ê.w³™7̶½Ù-ÚÙšì̇0`$ˇÀLyn!ÞÉT(–kÀ ªrP;ÑÖB®/YmÅ^´Š)¿·#ѦX9×LÂÃ"-y\§¸v̈bÌ…fÜ)æu=Àj5³j$zgÂõè%'6 Xa+ ID2££ÚøñÂÊl·š‘ á~?tˆÃÐIp¥´°zÓ)Åûw×»zµ•žIhêudñ5¾Þ£/ò$ÚXCVšl)¢r‰m2¡äÑ)÷dŽÅ"a¡è{žHPÉ\1 %H² »èè‰8Òò¿GR~(µÙ“²¬WëæºEèÙµC$Á•H¾_ý28Ž á’à5lZ±Bb—ðêr9ga”e~óÂÂ8=J¤BŠ¥±²VŒ Þ1ëAUb¼;¨âû”‹„5%NÜKk€fEÚ‰­J tç1š3 ó$PH"%Çꑚ¥ƒÔ=‡KæAšˆh\ÝVÍËÀ±eóúæ«'Ú¾«BšU®êvc%-&«f5å)³.ùDßUlqg¦PiàxÀ©€µ…äÇ»—a÷—^ÌœgkŠ‘\dï)‘Ñ1‘¡7?øÔŽtá»+ ±îAñrA±4FPL‡Š¡áäE!Áñ èÛ™)„"k<(Ó¥ƒÆ¤ —nGAjÀl¡S¤Áœ@ú}½XÚ»Ì.d2ð%F0‡»÷S šª¢´ó(}¡—æÓ``¾Ÿ¦M)ÒÏémµªšÃ²AHëXá(¹LËâæH'½S&P2çI9™øHw`œN‘z‰ÉG©;CòÄ¥ JíùÌ òA¾iÖË0^†}ýà×úú¡«Ë‹—á°%IWÔª%õ9Lß‚ =•ΙœÌ{ ”FyóÞã| ‘sLšb„Ð^ÅÅ!ÄH^4¸Ce\4ozºñÆIOÞÛ)›¬”FO¬4|NVJOUÙ•åôV¯æõ—z¾+#ðeåµ-ºX ïÅQèÚË}ñ" Y›Áæÿ#MåKuÈâHÙ4± …Ÿ‰ |mŸÀvJ2Kª€"4·ê,wxïHY´@2îq\‘&€\VJÖO±>ÔER9¬Ëý)]¤ Ýkâõ×ÇZI‚zv/I"mÇÊ+(?§™O"­‡”?§•4åŽ\Iòÿçv”<øAƒØV!ˆR¸y…$øB[oË—Ds S%%Ö`ÊÊçtÑ ˆÉIýdIpê ñgu(pVÑA"PfŸ'þ¯w†k(©'RQ›gõ”kÒ2®´¥žè…û¶•8f™Èm+øÇ…U¡mµ?ÃDh[ §N™IÓWw¡X¦g4â‰LA©¬žÇÒÈsÙŸøYß`´!²p:œâŒ¯Cï@ÀŸšT;ËÅ"V(§RųLzŽÙPœ˜”dFgU±ˆEÂzPä qðàš=R!¢]‘",ªÈ¥FA ghz„RMø|$h²;åŽÃ‰”›Í¢žùCë0pèõÐ[(õý›P‘àqׯ1_Ó{EàÔ\´I )£–¾+H‡‹ëGâGn+„R_!?«ºBˆ`J xažèÙ.˜Òj ÄÎFá1A<œ;IÎF¡UHͬ,R”G­›Xbs„‘Ëwø*¤²¨"´oà!ØÅ =òipöØ9`E¸ €Ofë0[Ö«zuÆè̹& ôayF ¤uøðø®–÷š@mXÔÝhîïHjmî>µÕç]tmt³‚FËùÜ·ëh×úÓc0„‡ÚÂê‘N ¥(q½©ôhלÂcqÞaQìš$ÕÝî*gŸwu3Ø9(Í(xIèp*AŒÂ.6MéÒ¦ƒ+ݧ2ˆÒáȦ©©n¸Uív¨ø )£`Uš9Q¤X‡sw”gÚC*0W=RýÝxA=8 R”ÞÆ¸)9.éÏPñ89 &Æ0lãOix»ÖÇ5öò©ÛB¿‚¤òþ†ˆx´‚Š™º¨v’ÏÎ…z˜*8•wÇXß~ÆžuFÂ<¥LOQ½Ÿ,ç…,ð7áBûðrÖEÃ4ˆÃ=8^$…ÏI"\>Ì÷ê¶qŸðßÚõš<{š̘ähÇ Iæ)“¤©¯DÊËTX,— =ôpFú¤úä¦P_0Ç7…"£N6j$ k:ò‹Ÿm$(«súH5ªÏë#q.Æè!qN­ýé! OŸží0ç†(I:9„?ž`+T§åü@ÊUw wÝÿà´$£¯ï©ã³n)¡ˆ…™%7‚ø¡X¢c"øû˜jM ä]ÃRÇ×°€½;—ê¸Ð]éè1Cö™AkbKËŸñ'·¸0ðf€'2ô°¢jÿ zŽ endstream endobj 538 0 obj << /Length 2690 /Filter /FlateDecode >> stream xÚÕZ[s›H}ϯÐ#ªŠzé;Ì>å⤼;IfcϾdR.,a[ <€&—_¿çën$±¬ÄìlMùhšþî·cñIŒ?>I㉕’¥*™Ì×Ob·Z]OüÍû×OxØ7ÃÆYgçóó'{¥õ„Ç,S>9¿êu¾˜|ˆ^Üd·M^MgRÊHþ4)¥£³&+Yµð«¯ÏÎüͳ_N§3¡¹H#­¦Ïÿñää|K[ q$“´ó.—i—KΖLL¢—Ê3z[åu^LE5Dz_.©˜¶8ßí%1„Ž~‹uü¼ËIT®ò¬x 1b­ýÒby5åÑWlâxNuô¶,fßòŠÞ¦*Â[wmnrSOg<ºÅ½òùò·˜«|á?|wú2|Sûkæ/ë|=ÅîKÿMå7—wÎÍ›À˜#Ù&3/ÍŒKƵ‰Ø!eÃÜXškf­ñïO½jòª*¯³G+ > ºÊèXÐ&úO>oüÂé"¨ÒËQùíàÄ¿nJ¿°ÈqàzYä~ùóM®ÃæÌ¯Õ·N™ T ]ç¤Á7³­;;¬ÄÆi’®D%ÖûšdÓ™1":¿i·Uå¦ñlv¾]• ÇVœ\8îÒóì7uûúó²¹ñw΢´*iIäͦ*Ú­—tôמÜËq]×mhü¾õyo7BMŒHW‚¼þÃÇx²ÀKÀ”|v;×É„•¸[MΞük(€¹´Ìœ”`Éç(Ë9Yý.akF!šÄ,–{T×ùœ´pSSœQ=õa7¨!S– ÈG`F(É’T÷™Éæ¿o–Õ€„Å.ÉG!œ–š¤Ox^å‹= yz/Ô„Ôš¥‰ƒ!i`žî;Ã=š)ô¦ä(„SË’‡q¹iÚÈZ­èÎFÙª.Ã9OY}òOØ”ÅI?”|ä±cSd.ž/—×›rS¯¾ú½Ž)¼î¹OÑqS‡!:±ÑY¨\mè•GÖè¹ÎýpãÀ±?z°ÎûWÄÊ ŸÑ…Åâ+ƒ‡Æ(…\µ³’{ò«ž»ü–”wvЉ֟(##e:7ú»>8U랪 0 V0OMCv;`óî€M–ç&XÞ¥„Ö¡yCdU¶&43œwS®õ.Á숅j[O—âuu†ù#@„WÏNþõý ´£²–qMb»â*Ti/„Òª3Ÿ;ÒË«l¹r8$^»TB‹(öuY„Ï7ð§b™%,$œKáéÄìtc£×W­ò?\ ¬†‘ A@ýñ8†DÓ,îÂ1Ðþ²Tµ/ò#pŒQ¨£GýÏÁ1°‹ŽØ°‹ÊòìBÆ.â”æFš®Ej5¶‘» ãŽÚ¶¾÷A˜÷m:YÈ=²¦EË™ˆõ(”1×4Ô£üð´x h±›¸ýÿŽ0å¡ö"úž>R1#´È†qõ¸A-©± Gi4v‡ÍÉþì(d“„!DúdÿL C ±XÄì²t×6}Y¸&¥\#Æ ,ºpН.å{]3ù. Ã>dˆ”3ªï2„ÆÔôøÑ›€ :Êþ—2Ž€/ÌÑðê bôBHƒVÿoÑ‹“/m7Ó´ k¹4¨©n›µ Æƒšìú8PCÎ Ì %~ÐÍž¨=¦a ÓØ*z™÷ Õé- ¡:€†ŠÜã ¡F4Dœ Ìª1 :*†šC4Æ  ác í@Áâ¾Ù†²’4ŒÐ¸9 Ý :àD’ìÐ ¼ºªÊµ¿ËÂÛæ€Å]›n:09cÔ´6Ž~uÀÃç*»%Gî'Šiyñýð‹Eî†Lzé$£'™Ý—Ìö$sìÜ’ýD?Ár{m‡›½a¹ £LU;Ø%`ÆÞã• ]Á¥ ÂòqxWb‘£q¤ñÿúø?¯ôïF8G .ˆ£ûïßqçš3,rNƺñ¿Õ! 5UVÔíðIªòh–Ve]ÏVÉéJ1–þϾò_-H“ù‡ö ÷®Ê[`áczÔBö­”Õ-TÁü¯ÑŽÆ2@õ±3ilA’»ÆÿágI€£‡ç¼½†ªš†ggoYè>^ž¼oÁ⺠ûè§vU½Më¿ÿvëýL endstream endobj 544 0 obj << /Length 2880 /Filter /FlateDecode >> stream xÚÕZmsÛ¸þž_¡é'ºS±Ä;˜~©óZß$Í5ö}Êe<´DǼʒBRÉä~}Ÿ@™” ‹|âd¦“Á]ìb_ž]M2üc“<›!Ò\ÚÉìþIæfëO?xÿú ë¦X8í­|võäﯔš°,ͳœM®nû¤®æ“Éó»bÝ–õÙT‘ˆ§gS)UrÙËyQÏýìëËK?8ÿùâlÊãy¢ÔÙÇ«Ÿž¼¼ÚòVœ¹IZ¹¿KÝß%c6µmeÊ„ôÅ.®/¯__¼ùåýKb¾+™‘©T,ÜrH¢­I.–ójV´eÁ”JÚ»¢¥‘Læå¬X7›EÑV«¥x[T‹rîß®j?Y—E³Z†×7g,Y6k(Á&å¬ú5cÒ¿ ’Žn{WÒæ  ßΔ‰”©­S§CRæ¢ürFd©Æ@‘f†„(`Ê9”¤ýÛŸš¦Óùç­211ÑÒ¦‚ç¤Î³Éšd©²|òÕ-½Ÿ`?Ìb´˜\>ùWú'c*•š;Z™ö±ªæ®B§°‚q¸J–*“¹–Ÿ7Å"vÈBðT`HšÑÒøÕ^Y‘l–3w–,ùÞ„I±4WŠ; ‹3}TK˜âŠÔz !¯{,u6´EŽÜÖ¯™Êý¼¿L¦\nEÏŠs–Âô5W©æzWi¦Ó™H¹C yqàÊ8R¤ Çs3m#\Þ£³­’i®õí»‹Akus‰%²ÓÇmU7íu°¥]²J§ÒÚnéß¼{D5(”I…E¡Y*`‰Ç¨PX“fˆUc°ÍYšYy” )Ô‚ 1$,nJìrþ Ë¡±jž-{¶ÊbŸÂŒ1CÂÍê˜øLØTJ>Qyo—§ˆÏ$ÇúÜ‘Êl>1»®Î`lFöâ¹”Òyß»x®N~+g­·•‹Îh$빓ÙM¿"£óýWªy¹¤ðÛú ^§Q5Apíb8Î]™¾þ#ZÂa1ئ‚nµ6'iI©”Á6‰”üûZR?RKHàp5ÔÊóÕýº¨K°7oªºŒpFRUÀ«£pÖP[®†œïËÙ™`É]ædJŒšg:5VYSäŠ@:Xp>ŽÀ\ È›¢Y,‹û28’©å*`aûç±ð»·×àaÁq8âk(üî¢_721¹BÈïÞFp–‹æÐÊ‹’“BÑ_ã ‹Ô\ù p»¯–¤‚¶h7ML20ÇÌ‚õ`ÒEÂx9 ‘å±7É!µ:IZ®ó”g‘R/Ül³E3Z¤!eÄŒ¼NÃ|ûŒÛ˜ZMjÍ6½’-yËê™ö€®¥õÇT’2C 7²V d!d~ØVà™Ýb/'Pûmu‘as—#ñ¤™²Ãã¬/l¥|0qÐÙi°ˆNÑ1bNèËæ> <ï*†9/–”SÛòSY‡C»÷yz^Ý~{€œoÅ1yW,«æÞ{HãÑIhªÌ¤ßAð&O¨Œ#u$ª{†Hfï]h%'¤ê\ž†Ó%4!‘2Œ?¤(.–õ(\ Ò»ÐC®s„N3°íÏÜQuáçÄvÂÔ¯e=mÚºZ~ Êneò̿סGÌ|­Ú;?º<'8C#§%µúCæV¹MÆÏ ®Ïøðøþ@‘RFåaöl~ÚZ—t‰Ùtˆ`„„C›/ªUF¢§Tà9WsùKro÷ÆÙ=åc7+“Õš²r±®€uç¡Xpï츦6M9'4nBeDs>&aP;TìÐ6~}©ŠPe©ÕjBZå­8ßñÍ8o±ðn‚¸nº‹=ÈîJ†ðN»òOÉ=«™ŸkÚU]|*ýßeuÓw«Íb¾ÇK`U­Û:q {#K›®–‹oÿˆáì ªµ" Àv³(jÿÛ^ë5ìmAý^ßÓÅ\·/WmXضåý:ü ièÿÛº tª–ŠQ‘'—ÛN/NÑ=ú÷/oÞÐÅÍíÑÈfëÒá§y´Ôy·i×°‡ ó‡¦0~1ØyÖÀÜ*wènUxˆ]sqËŠ¦ñqrVyõºYï¡î¥O•ï:GK¹ˆ˜R¹Î†@êËøcÝm§[‘§Ì vaÎä껎NMtdØ18 ŸeCÎÛ€¯É=Y8'Û/I›§±†ÁΑúÛ‰çïÞþüæåUôzÂf)³;9ór3›¹ošÛÍ¢Kt÷ëEIœÆøN=ógç/®ß¾|þ¯c™# ¸Z—*õd—«pããJS*I»û ¹°ì¿X ÷5ÔùE rÀŒ$õþ¸FJòç„ÔpJ ×þ±\|ÏŒ¤:Rƒ3 ¾E¡7àÜËk;·8ÂúåÇ_äp‰*PS´sàkÌ‘Eû(œCÑ>àÜ/÷ËgÎí(¬¹ËëxÑŽ ¤¬‡«RŒ ¸ö»ûÐÁ¦9jå“/°þ hïî w*K~DÑN‚!1ŽQ´©Î·þLÑÎ~@ÕÎ3z[ŽQµ©Ìä¸N›— ‹ÞÙ!YüF-Çž35†8THɆâîB¸r›±18#«¤VÚ!ç6n(t•'vÐñˆý°œÃLÄi·­X‚ðœcûÜ~·©cÅí(|‘³4¬gÀø`SÇÚ‡ô÷ˆ+^äj9ŽÜ@­@™!£¢@™!­À| @xö¬®ÖÝeËÞ·¶Âù}$ã2×^óp‰QÌøm$ÂÚÆØÿ÷6’ÛØ/@™ 2 8­÷È—ŽT¬‘´ßúd‹Þú¸å½Þä6~¿óŸx=|™´ß¼qkCmðySÖá–0ªAú!L#Ž PçvŒFœ³e-ŽiÄÁ54â\nÄ©Lí6âû¯ú½F=ê9Á™•.Šž¬¨é1h+ém—®ö¿ÜÑi2‰Yê?qyNEÞ›ðÁZ׃ëC¨}óÅŽûLðª3Ÿb½~h»8")6Ýw¾µâ]±k¹zq§YA“¾Wás[–’NÝ\qÛúؽm]”Ø”»¯Áá‹E(¬½‚u õ?<Šq eN)9]E † RLó®´(‹&V!5’ºÇ`¬©Ê·CÆy‘©‘}Ľ–>ÂÖß÷° €ËˆQ°DJeò‘Níu³U~°›­lĉ腮1 o­n™õœˆ‹Ü™Íœˆ&îh¼¹§ïhkb†žÊpƆZÜ,ÈRÕ^ûަ‚k©L×R»®¥œkÙàZjëZJô\KÅ\Km}£àZŠo5½Û ôŽæü&ø–Üú–Øõ­‡äpãh…˜`HqR÷ÅUî†QÝôÇ Îa›#p ΰºmà!¼M endstream endobj 550 0 obj << /Length 745 /Filter /FlateDecode >> stream xÚ­TÉnÛ0½û+x¤Š7IÌ©YÜ4A‚¤‘oI°e ÐVJj¿/Ù±HÑÂŽg†óžfƒÐü0!ˆ)E‚% «g¡óêðÆÝù OyI v2O–³Ï_98D",‹ÝRËÜÃÓµì¥ç¥Ò£yÀ‡é ›\êÜ{ÏÓÔÇ·ó€pLäÑüqy9[,·Øœ’´™ïYŠ]–'(Q¦̭U6' \opn bfÒBáÒi$lÉûÇä&x BÄbðì2k@‰©±*ξÄe ÂŒï#çªÏtÙ eÛXð·åLLU—l:E>„<ü1>„˜*ýÉ45ÐÓ—Zf¦ßA?è²YM¡º5}M`^/ó„ÁÉÛ:HY™ZØÎ…À“©¢ÿ7´þÔ*Så/[]yG®K FœÇ Àaîù½~J@1†maO²í®lʾF¦ ár­|Pv]UfòõVmsÇ~ðáB+åýýÐj¹ÚÜê{ûY±ùðÃRsl b˜ûäçrX{kX—½¿ÓÈZ9êáD{Ö²Øjtìm}Ê6÷Kú#“UåC¶3Ö³êû÷r!Œ#N)ˆx‚Â(ùK¹ìž0L#£ÄTtTµª”ìÕ\3 AÅÁM8q´¼‘›•ž• òÀQŒ°É5†‘´ð¹7ãÐf|DØî+o¤Çé•·œâI Þå&ã,+{J{»¿6÷d„áÅ„#+§ci5ŒºéwÊà?O¾™¶Ðî+t'];l'SãØ÷±²ÙSˆÑŽöB—ªÉ«ï/Z]£-ºéÓôòï<Ñ£éÙG»3÷;jÚð”>Þ\ß^-–‹C{" NvÖc ¦c–¹7Ñ÷ÅXM2në®Rö;Ñ!ÜÀ×9~r|öt½8ýöQpÿ¾M3¾˜Þ–Zå4Í|nîS.þI³±Ñ¬ ®&üÍRw> stream xÚÕY]k7}ß_¡_ «ÍŒ4`òпBš‡¶&&½”B°‹í@úï{Æ®Cî®KŠ·àëÕ•ÎÎÇ™#­VWª¦’¤ZŸTN-.ž¸H¡Äî¸rªÀIí©6\cN¸ZÒ¼´dÌ“HOfŒï5µ‚q-©SÕ“Sô{r`D%QQKDÖ´¡ÑˆÖDLhXITkŸIjE†Äâ.O¤ ÓDÆšZOÔ8n‚™£Œd¨9B5¸êá7’# iÉé$Ñè³ÕÄp LGâGsCäøpPà‚¥ ö&h aé%±"&é°cŠ¡;æË௅Ó;N£ÃEÃá³·TKøì‚Føô’*…OÛ>½‚öðÙ ȨFJâ¸]Áƒ8J¢‘(êT EÒ;UrXn=0Ø+¡g­ÀŽƒX-¨^)ñãN‹îcþ%†e¨VÆB%ª2¸;1[ã¶µè®u Ç%SÔDð r•Ëpã=5BTÌB•ŠCöRgh_ñ¢IP#@°hR¢á ܇yAm:;›¯ÓE¨¹¤·éð˯¿%$Ò½úôñãûéÕ«ç0•,£Ð§¸óë«»tv–çŠðç¡xù·SJ{øM<6-4B P?ŽÄBðàNon®?ü|¼Kéðæõy:¼;~¾K_ü¿ûû¯#.ÿ8N‡Ëñêî‚(qûtx{¼½þtóáx{¿pÜwýtüýÏË®?§‹ÀÕœßÃÍå î…Ìî<¡Á¨:Å@šY‡¨zztAÔ­ôˆ¬Ó3ÃX/Ù0×pX³Û‹_wBèÊ¢Ò’EßÊ¢–o³ø´x¾Îè4ñ/3psvKè F´/²ÐÈ ƒ‡nÖÚÿ«-… ¾•*+ëTÍ0xXdÃb½ÓÕ&æô˜l¦Gè9ŨbµÑU»e¶½’Ø–O4ë›Ix¢Í0&5ìiÖp\KVß/K-¶ÍZlZœaî}¯ìôåBÖ6/d}`!›aS0ö®{¥g)ž>(ž¾¤g@<3ŒŠd™Ï­'pxñËvvJ£/UÖ}+> ²kiöý®ô¾T™oV™¨l†‰Í9ÞÞWqR4[·UcwBEwº‹×RçtÇAÄ6ºã˜cî9Æšgw]ÅU.9ÞÒöJ£/il›iì4žb *‹×Ç5\…jÇh|‰É¯´xëŠÓ«4Òú[×Lí-“ïV‰´T")1Êæ(q†¹?Ü:ûyzx©0®[éáõÌ0Õð8xâ±1ÇQ×g§;¨•–4úVëú&fŽÑ.™Ú* 9g/ºŠ#mØÑnÙî ¶«mf» °ÝfG–|ÇÞF_`ž=º{ŽÓï@£È‚Fá­4Êú/sL"ÄÏ2k8ìÀrü~´†•Ü|Ý^lA«îv-Ѳ,Kß\–oœíüãÁž endstream endobj 556 0 obj << /Length 1668 /Filter /FlateDecode >> stream xÚ­XÛrÛ6}÷Wè‘ÊDq%Ù¾4m“4™ŒÛÆîK]O†‘`‹c‰THÊvþ¾g&eÆugLp±Ø=Ø;Åg1þø,‹g‰”,Sél¹=е¾œùŇ7G<ð-À¸pþ|zôâµÖ3³,Îøìôb(êt5;‹~Yç»ÖÖó…”2R?ÌJéèÕmkË•]yꛓ¿xùÇÛùB¨,É"ÌÏOß½:íuk! ’8ï¡L€2a‚kPšT1.•G©æ mDôj¾àÑíœG=¼DxX<€:¼1L"RgAÔqUZÜ’›¨º gµë@¸¨6›j.Òè¦(/i_.Û¢*Ïš×µiór•×+ÿæ ÐÂYˆ/²;Êæ “©èeŽî—¤cý¯2Zp®í—ùeÕÒ]<—ŒkîÁ¯ìrR ‰Eîk†÷ÕiŠ“îÄeÓ¼Èw[O™Fs¦•îXHK}Ú·^|·k€³dôšHò+“ŒÁ‡ímû†e²gý'Öñͺðöwjº»-7û•¿©Œ.êj;¥™ ÁR• TO«E™ Ôr8%&:±ö0)öDÆéã˜i>øÇ… è1å0ýg§Ó¯cpPN¬‹Ÿ_‚qZ¨èì7›¯l}þÜÓwù¥õ«{Y'„d±á#Ä_ϼŽû?@ uH™·+å)vÁJœÎ G2Þ{¡ƒù¹×Í!?ærfbÃ8ÏHóÙy<[aó™4³Ǻ)¦8Åïfvrôç]u¸ÓʹfÊÈÒ,ßr.)‘ÜãjB?\®ÔÓ¨G§i6VMzmÝ3'P¢¸Å©·“áÁPg¯ç©ìÊ2íü.Ä9Ë´ÎÄ2…iûØ]¢  ?µÐÑr×~õÌ?`øK˜àêãõ‰‰G)“I–¨a.ÄAm6dSL(q ”"¹šDN1½= Fˆ g0sw¶¶Ÿ‚c2«aAàSh"ËX*͸Bô„£%è’eÌ=›wŽ–L$rìè±V.Sð§NTŒ;G£X=àhÉ”èKªë§ŠÎ$Ýg·¦­]‹¡u[ù¤_VÛ«ÿD¼)ÚuÈþ*Øúø¯÷ï]O@•f<–°bYf]·®Œ^A£6èi9Uq­CwiÜí¸þçx­'lŠOu^ñTWˆAôrL´-(D‹-]e¿=í{*(—…WSzzÞ ñ¯Ýµ‰ä[ÉaƒûiÚ§J°L$3­¨ˆü_ŸŽüÃ:‘3-QÛ’û>eÞÄh܇Ááƒm÷5ùà¯çt¹ÍÞ’ƒÓ$:%CÐF¾l÷ù¦cœ½×ƒñ¥VÞ„òÎø?âÍhïlG/.ü³gD2® šz¹ä*z ÷ֶ̇á[…2„KáO‚²Ë›Æ{"Ä#ä¯ý®3žP߸­« WžÔY¹ %¿¨ÊÍ— böÆ&ÂN0ÑDdxÁIOn°«é~¿¥oF*A-äæIšÉ¢ÌwZ÷­««Éú SÌihâÛAQ¶wU¨o\_Qí¥P©ör¢ÚOZOHD-VVô#ü·VXbE)”w8Äé/ó­ÐжÂqê)´Í÷Hk;ÕÊ–&ý(Ýáº'N£›ÁíúdgD²äá–™Ì}ôÜ)û·ü1ýÐ33*üãqÏ »¶,Š”éÜI8Œ?HLAÇï©Å ( QÆ<ìýX8O UЋ±ÖöyW]ò•3ªóÜ1a4i}ÂpÙÎÇ[ú6Ú!c飌Mz"M0†ˆQ'ûwŒNi¦}ñ7’Û—:úpÞvŸæÃ9‚FÏÕɽ̋O ݬaxèÿ_Ÿ=.GÎ/óÂÅð€~ßîö­çw_eŽ:)WTc…R—~ÏdÆF@'J¦ÁŒövç¼QÕí}劾aâ'Q®fw|”“(G|° 0ÐŒõPŠ)JVÁd~ÒYÈY9ã‡Ñ—·Ê¢üÂý£cƒ8ܺ_"®{‰â<@‹ B”ú·ñûÛ_™_ºŽM«¼lnBk=8ýyoßÈéífm±ãtú c¢ñ"PÚb¹ßtlkCA+‹fëÎéªö›•ù¢œ5pÁbwm·a?´ò0¨¨éól‡x^;ŒP’AÔö1é~CŽø½ 8öbÝèt§G:§5~o›·ýÏ0n«*áX5üÙƒãrXÁZø¤¢Xû&µó endstream endobj 562 0 obj << /Length 964 /Filter /FlateDecode >> stream xÚ­VmoÛ6þž_aôËd`äD½ØRÍ27M‘—¡öúe0F¢mn’¨’RÐl~G¥FŽdÀ`À¢îŽwÏ=w<ŠÍBø±YΖqLó$›õIè¤z7Ãŧ‹æí’G–?nN~xŸ¦3Ò<ÌÙl³}ìjSÎ~ Î÷¼í„ž“8Žƒôíœ$I\6ó( îíŸúK6;Ô“(c, ÒlþûæãÉj3†N£è•­åK¹¤Kr‘%”Å ‚Lç$]DVÌü °–©ƒ`À9Y$t9ì¹áµ°òCÀ,^Ð,ôù_Üü‚Ù]¬×v‘¿…i>áÁPó>ÎU]ó¦D£J6ÅÒqny!PÙ)Tu{1ñWòNsý0Ïâ€"¸iâ.YÐ$÷9ü$L¡eÛIÕøT/¤â‰8L8 iÆ20vFÒL°%AÍ!'jµÚi^ã‹Ú¢ú1?2fËdFXNÃĽbx§ 3-a³¶Ï$P:¯PÊõ®¯ÒeÐÀ2eU•²Õü¶eÎoÁµð»+@áñ­~MÀ-Ša/]Ÿ%ÐyLYÊ¡´¦µí¨¦[Þì•î[_᪱³Ù­ì˜™ô‹O¥7Þ€TǢعaµÕØ›Ïöß1â> stream xÚíYÙnã8}¯¯ ”‚´eíK ´ä}Ol—{zd™–hk‹$oùúæ&ÇN”®š™§:Bмä]x—CF¼Яxg wº,ó¦bܹጦÞíŒ[_DFWA„•+J{ú¥ÚTÕ;QàMÁ鍊뭦ë»q5ßIrÞWdYæÔo÷EQ¹Nt/Üÿ‰w0ò謗e÷ÉE…SÍûO»_Ó kU’~RFLùAH ©ó’¨*LHÍPxQV¨“&È0Ó÷ !%ƒLF:½7d.¦0Ëi/÷î(\¶O¤„ÎÅiÖt,.ÖÔw"˜…ÙotÅ>Œ›vÍM44^3uÄ•p#&Áä• L6YÅÝ‚8€;̇I’û÷"³oe\*’$ñš ÝUD™f¿Þ#Ó©\–ºUÂP¶Ø¢Ì‹*%lÆûhMçE¶iÍÆŸHa¦,_,—4^$º~PLSjˆx§¨¼!7ŒÞFN¾Ñn¤+ÆLÊ™z#¥Xºz 27…Iãè³MHÛšL*Öcç&e &Ö¤OÉ>´5‘*½±M¬”èøkÙ¹Š r^åæt.~gHŒ`¾úíÐ냈£Já!¬n3àîS˜c÷8Ó7&1˜ƒSŽ=ÒT‰G’)ìÌ%N#©ü¦ð¶J‹QA;WÐ^xŸRMuªQ,JœÙåêˆÀ+’rk×zhL‹X³¡<¦í.б"G6JS">´oÞM¥ ŒsÖÔ …i‰5L.cÛŸI’Ú¿±¿åŽ=?8¿1(±›" ¼ªhovc¾À†¯!é¤"{‰15dKIÿ`KÌÝàbeü}Etnê;9›€A@I“”˜ì×€N1Ó«ÌjWSX6’^R¶s“xdJÉÍ ¿Qݘ 7§úiÂãu¹P †NòGèÀ€gûñn–º•$óºqÉ|ä4$ìæù>Á]™Ä„tåø:q|éÆñ)å¢TI¦>9@Q—yCS¯…,“ ¥8åít°¹  ( Äò€tü8ËK³¬H(Eˆ·¦û‹˜"¯ÉÑŠŒñS4í}Há!RЦsnYÐqê&¸Gùâ}J¿rHÊ­5yÅKC¸Ž_ô‚€Žý)¨Âѧ+}ê$Lâkÿgá­H4ÀpËĦ… ªÊ!‹8« mE6…Ké¸/{˜^†ú.òÒ”m~£ÛÄÅ$1¢fGˆl©KØ–¨ž²™^½FiC¼Ã>c[\RQI±p¨"ñ{V¸‚&]Åý&rP ˜±^LÛ#ÉEéI¤Ê"=ÝbŸPÀÈh £^’Ââhox^jþ¸Ä}EäNiL1VN4¥L1¹1QmMñóvÔf9:'e(ižì‘ s¾ÌñZìdó‹¼áø®œÒш¶8šþ€¨¥qÂoã l²,Žø8õÊ®±jE–"=Û»(ÊŒ9p1F cñwW÷­l×E§Së<-º½xÙñîÄzêÔ¬'{ïy§š«÷¬ºå5šñÓkÐ>šVÍB?µ­ç5‹EÇnÖk5k\ó¬cǶÆsë4KVÑ8pCóØ“ƒ+ÍBWVP=¸!€½º"‹ÆÞ²å·_­uë8ŽWòPøÁÒ­ç~?zn°j¼ôœ;^_¦¾–Ûvo&ÙÇúöÉÓÚŠ³j8™ÿ豜O«Ó¶ù]·É±:0÷Þbñ’´-óÙÖ}‚k¿%5ד@ŒäæÈ«ÛûM»=zðÚ£¹°ŸÛ®ô”7Ö;O<-šRWcñ0|²Ee÷\èF{µlsØô£mÖhLzóôÆ­Ñbþ8> »¬ß­GA¨9Òø¸ËéÖïÊ~?míÆ|&‘³›ZQÿáùõU;¹Q¿=è÷#©ÎÜöKÞ„jbvêóìQØî;‘ÛÕò‘áo–ô2±¥mÍ5rB“8n?Úö`>cÛ›‚çW58¤‚°Î޵L6¬Î.ض£Íù1گ淌ѱ}N_Œlß{­©öÆ û†úÔNÞlÛþ@§fØG%—N”ìY,¹ëÛß[Éä%î4“!8—f’ÌÐdH–ä>Ò*ƒ'hž4Ь†FþD%r‚€aùÀ\‹dGé6)*±tÂ~. ν¦È ‚” ЀŒR€ö«¬€R`¾gW8Æ¥B!áÃ˽÷ b’›¤“ׯ,s<@‡¯þ&fADEEÔŠŠHõß] ttap]ä¬O›÷öÒ™½ôW…‹Éu‰ I¼È[Y›Á DÌ¥¥J—n*1þ.½Îªj¯=Þ/ÏJÌËàB«X"]£p]Ó ó¡d­‹ËšÑâ"ë‚Ðc¤·#¢és²Jè!®g;Ê®Hø ÊÎVAîV3TÆ}È~Î¥¯ ¢,òºtßÐÝ€E.s.ÙD8Y3>x½t+ªLôÅ-ªþ(ˆöÁ¢†~Qˆ£pŒ››@ÀW@艕8YrA‹b 2gƒ 8® C‚$¾b)˜‰“ålÈö¾ìøÆ³¤ª^L- ÅÞÐiýWpÂù_D'Ä$|‹Û>íýòù>¿ð<_’=-V/[¹)Xƒßí³÷ôâϦÛ€É?Àä`òæû‹ü(à>­`ò˜ˆò;ׄ;ü'‘Õn´j“—Ö¤³’^£fyk%uŽ‹›ˆz€³º=!¡0îùØ­­^·e7&gqŸÍzÚz¨ïgUÍ™‡V¢›™¹~ˆ7­çZuÞ½Ž÷'ë%6Ã`<_e«Nn¼šÈêNSÌ}¥µ|vÛækÕ_Za4?ÇáÒìÂGùütð~ÿ½Lä¾6s ò}1°e°ç.ãí5è­ ¬Òõ;™Á…Nñà‚ß”ÞÞçк}þ5úÊêÁÍŽWèÍxÑŒ[ˆVyópRš0eÎpÿúRO–dtœ–Gò8wÅU†CHjÇŸ´ð2®ä*9WÈ0&±‡Ní>¢cúg*åÿ¡Oÿ(Ðß^Ë×ü§1ÿÕô¯Í‚ä endstream endobj 569 0 obj << /Length 292 /Filter /FlateDecode >> stream xÚKO„0…÷üŠ.ÛE±oÀNœ‰® ÃÎÌ¡ y˜Fý÷¶\Ô‰n î½çôö;åˆù£Œ¡DÊ8S)ª‡ˆ-SwDP»ˆ¯>êôÂySFW[­gqÆ2ŽÊörUÙ G¼éª—Ù:B¥”Ø\ª”ÆyMDŠŸÇ)üÞzÛí`ÇÐÌgB…’cÃÈ¡¼nËïÛµÿÄ Î?œ‰çLbÁµZ9Mªb.pBµ8'”ãšH±ÐyŒ:ßx:Ïô;²‘Æ,[7•Ýɇ"ÁCµdz­zèŸ|¶OÎAîÕ5Û÷ªÖMC¨ .Æ6¸6 ‰DIª±Qáõttµ®ëªu]cϵ;Á¥F»ýŠüá¶“ª¾ÿ ©Äñ׋~|º endstream endobj 572 0 obj << /Length 3234 /Filter /FlateDecode >> stream xÚ­Ymoä¶þ~¿ÂE>TΊި—Ep¹öIÓ&nó! ´ÄÝe¬•6¢twίï¼QÒ®å6E Þ!9É™gf¨ø*‚¿øªŠ®Š4 «¬¼ª/"êöWL|ûÅ‹Xøn€ñfÅùùÝ‹OÞ(uGaUñÕÝn-ꮹú!xu:]ß$e`ºÆ~¸¾IÓ4xõ)ÿ¾ìhkëŽØÌ‚~ÇÝ_|÷ÌPIQy|ýÓÝ—/þz7k ’ä7ªŠœOt-@×"Lb•‰®y™…qš­tMãY×B¯®oT~®*ô’ªð‹ª‚‚—g‡”FaRæ,öî`€=Ë=‡~`ú M?ÝB¿?˜ñp \ßÄ1ò4h…iôâîù`ÝÈM×·ÓhûŽ[;¿Ðn0Æ3ìÆk˜ñÿéAzOC{TÁϦöj´=Iîl·Çýá†â4ŒUÌbÙÁŸ"°ÇSkަC¹£pxßõιnÊÔ%2>rïnÐGA?<„×7Yª‚ï¯ËÏe˜§Á8Ç̰u'ýó±áú²Þx 3ÊÁf@—gÚ³ò6—)”¥GO&£30]뎉Ÿ§f/ã´o$fp¦ÝqÃʯîd[Øèw²Ù úQNÉêVú‡þÏq«±®žœ3ͼŽÙº¾¼"[óîZå²øÈ½|?@ÀêVÈõ5¿„.8aÏeÉš1,èÃêÌQœ‰Ì~»ñžÈ|ŒÝæ5xºßIÈ.3_"ðÌúê û£ùp{tý9✽-V²vœl·ë¸¥ö¤ VûÈ´›îçÛw¤4n<‰‚{Þ qñnD.ì7EÀ¬väuɼâ|YÿÐãm~ôË’d48Å™áÝJ0øúSCÔ©›~DC@Ø3ïlcºÚ„Äg€[ðçaY0?pò*€˜÷³Ш¢~EÛA.rBøu` È5ø…ÐbPµo*ËÈÝ2/Åz™ï½LñÆaT×ãäÅê3ß4+ó„´G³©sÉÈ~î Í%…‚¤š‚œŠPUŠ3æÔwñD°8™<Φˆ®>® Ó‡‘LÐ Pؽ&syörÜkã|ݫװjã²áA ‡f»\ðÕïl…ZL’- w¦Cg"Œ*ƒÛÎà#b'³y-¦™¬ÁœÍK¬:¹8&ì‘=™zÒlB4¤Iny¨á`9îAcrÏTÚšßV*@Œ½ä±ð«íÙ…¨¶SbÅöžrÝBÉ ÄÛ‚ñ ºÇ‡‹Æ¹„‚2{Ô-ö²(C5Go› 넜|ìù @2¸’"‰%¯L`9P%¹/Ò¡±òIV–dy¨ …‚z6ÌÓß“”%* UY‘¤´Ê/òDÐÅ2 yj5U¨Ø£‰§ãNNr‘Sãû]ö·vᬣqË®BrVã<kr&0G;2(Ç)I¡¶GÁ!S·G äø<묛Èr¹X•¯!QÍÛÅÙ.æ˜qŒÏc+n ØA3xòޝíÒ²Ÿ¹Ï8.Ã. 2í0Mªßs¡1Dø"<ŠŠªìüB±‚E좷¨l­½G<Ÿ‰R®Ëß¡–ô xµp'ƒip Æö*"Ûì#")]ƒäÚ‰D+…½Ü醯¸P줋\=¼êæìr]ŽaÂNO(yå3Å*ðµhwQ>s7§.kþ£9öÃ# ;ê‚UK«t´$›™ŒÃ¼Ì%åX(ö7E¶˜jŠ@¨Òh¤I`©°ú§0„€… 6zÔL¹±m¿ZX ÿxá>|¹™#‚³'Ñœ#î{{?ívfx;nåŠEf¥òÜTázQ…Áœi $Á`Äó:Ù~šÄa^¥ç’‚Ò°Oº¦'ûeäVþ†úiæEžÞp/g «Ç‘°yIv÷›# U>¹QhBŒòâ¹±D–V+ÈÁäUEñ¹aPú_Swqõ/ÏÖ ž +dJBqb×Yެ~Ï6n0…È”déú ëñÃ[ÛlI^†ER,õÕ†DLÄÂê¼l"±àÍÏÊ-2¨î²uÝVà]c‰¸eÚü– îçž{v3÷éüvõˆÈ¢æcFz©qò,8ª™=iÆŒSûÏÊlÙDã±= ó(»t†KÑ>†ùÜnýR ¹p»|gIÏ›ëwB`ç/$À ÇiWØþ|èò"WQjµ•g_¯ï>çÏ~e ˜hj¬C3_Xã/]@ùZ·üœbâÎå5f§Zt.ƒonÿâ˜b?N}ˆjÐgT¼AÍ<·ù ñå(­ @ì絟 P+°Î"ùʂē脒²Ó÷ž‚¾÷´<Ò™÷ž”y…¿QìãÝdQƵ–Ž~ˆ?#<ñˬ ‹r6Z~£{4õÁmš8l,™½˜ß‚7sX‹ïèú— JoòÐ-áøO:Êω‹? ¦s_aðÇŸÜ_Ô 1'BP ëþdTòn$¥ð3áÌèDümDzúóO§À$øÙpa“ˇ.ÀP¾jQö¼àjpÝ„_·ð—WLÒµ"кÎP!úºäý ë(¯´+àGîcŸIÐíÞvô1…żdê½mÛ Öo`º_Æv—ƒ+˜X==Iº½FèyBFùrñÙs®;ç•YÆéMÛB†ôÇð ¼²]¤w¶Å’7èþy÷îÑÏÔ ©o¾~;ÙnL“­K-ð˜ñ·1;Ûù¥ë~L=¶áæÌOø˜žîì#t à쯦ßaTAwg%ýqô¾äš5%¦5?’” §Ývøñì†0tV^à±Ýï.€Olèë#•²ñßÝê ƒ endstream endobj 575 0 obj << /Length 2528 /Filter /FlateDecode >> stream xÚ­YëoÜÆÿ®¿âŠ~(Ð1\.ŸŠ@ñ+j]صE¹wLjGž¹¤dù¯ï¼È#%J)ø7;;Ý™ßÌ®Õʃj•z«Xk7 ’U~8óˆÚîV<øôîL ß7ίϾ{†+幩—ªÕõv*êºXýâ\ëŸ8¦.Ê/ëÖÚ¹øž¿¯Ú²+óÒðgà4[&¿»º‚¡§N䯻þÇÙ›ëÑ‚Ð÷ÿOS‘ó©­ÑÔV¥7YEIà*°¹E;·¨õ±c¥ÝÖoTì)³_ïÍzx©ó ?‰slÍæØ6äqn¬mZ¦L2–¹ë¦cúmݬ~Ïä솸š^f;ΖÌÌöýÔ # n’ ¶üjšE“5¸çl۾벩ÏA¶;¶a¥è*Å´®5Yg &fBÌj¿ã´«ý˜öB…Š—…©Ñ‰®üÕSiAö´s¿/s$ïÁ§4rÙÑò¨Ã½HCÇsA¸öa‘­·´. §iÞ|Ý´Læu“=ÄiÚC¤³ŸØ¹å¹nŸÉä( V)vŠûÍ÷ËsØBÙ±ÿúo_ÖöÃa`æ½­°ÂyÓ¶&ïÐÁ t.;¡N Îû½[þAÆb*L\_:ë(Ìôxñ_þÎk½ÅH€ØUɰbßT…uåH!˜|pXK\ÿ8¤h·‡p(Xpim›«¼GY0òз¾êÊãZ9•xs0ìyVC®[Vó‚l’ó8¨Ê›6k¦Zžµ/wûMeîP—©˜V[îDf>àŠû²±{dKÞš1„3‘·mÚ{¤dmQÖ;÷E{À°¤3m Ng˜cYU~¥ÁóD! ð?Ô١̳ªz`ÚÎÔ¦å ŒÂØùpùÚòDV é`M+Ü…•7¬Xè¨ úT bçÒ5.äV¬SÇ¥Ÿ½ ƒy6ï¬0÷ó¦Ê I‚U¨¬P§¿üæ­ ˜÷Ü ^Ýça¥]?FdªVWgÿ^ªÊPЉнHòæÀE¢i»åïzqúM”p*š+‡À@McÑ¿‹{àÃÄÉ·°ÂÇ-PñÜŠ¢?VYЂHáÿ³ªÃØqÏmÀ4˜„4DM×;4Λ#æ‡Ì0r¥¯<À*ówP ,9JãörØElÄ,î,Äæ€!!«OòC) : Œ8¨1å~XoBb|ËÓÂ`þ¸E€lÃÓ”Ò3ͳG4tà#•üÁÞ“’D”LŒ©²®C%C’Ÿ 9àÛ‘•R“|Ë×¹¡5G"BgCþBKòÀ„næ ®Â^ŸUd¬µ8a9ðD_s{áÓá!™‚ÁlÌý%D»moÂï¹x1HjÞº“Ý•qò0ÇF‡iYßí›¶¿’›ä¶r6EÖe/cñD#v­a}Uõ¶T—¨Ín‘nÚñ´ËºÞþð"éŸ×‰FÌ ýhˆäeÇ3Úç`Ù¹t¹1«™e`U¿ÛÿQdêÈ"3ô|ì ²c¹É·_xªÀ[¦~mÛæÀ£v›ã@;*& À—óy —<¤5 lõcVªDÓE\t³Ÿ!û²5Ïç>Þ&LÅe;”‰Ïý‰Ê E ü ¥¢ ñÁnvvGÑRa™£à2EÖØúoˆ ÏV™·eÍP()ȆÇ5ÁŽØë@A7÷LÚ¶F&­É{hð¥2©±–)½52”8gQ¤íž.¢¬FDR &÷M9¿­Êt3Ù~ó%7G©çPR¨ âwOh@ â© éŸT¦Hic™ò{s;ŽwÅÄs~Þ—T4@VN¼ãâØö7Pê¦wb°¹‚óCà ’Ñ‚cÚ’ V¿ÛK+ª øzZ”PñUgÄG ©u%Û¦êe{Bs·†=ÍÊJ "®mFæ»õI$Ô¦ž¼ƒ14À~°ç‹¾”· ·Áûó}iå'ôk2¢wèÒ~7ÔOv–ɳ0‚V-ŒÞK¹Fb+|¥÷à_Y^…CW•ík¶Â¼7Suíí@æmºDÀBYòŒôXïЫ5þÉíÙvr/×ã»YÝôauszUضÐßOÌv C‹É7gYJù]ÊB~šª,äX±qy6·?ô¸4ö°ÙÈ«žßnt¬¸ÓºøNh¤ÙfÛºÔV¨|zž^÷dñÈ%íWsËö…úâé3¸`ÍÓýx.Í验Ï`àpÕSŽ”,Øö cðs|Å ¢ˆó©Í=°EHd¼ÁŸ§¼A.™ÜR4ã´œ.I‡¥$œËz)7ŽY Y_e-¾ui*ôµümMÞ„ÕtŸÃÆÏOy—ÃǫÑ6ðc, îËnÏ#yRÓÎå=/úY7(vš_-ˆyz V¿À!¸Dç9J¯.®Þs¯ì'þüèÎŰÉ;cB1Äj´Äˆ'8aK8 ©È0¹ 2û…Ké>Œ¤­ëE+äÌ2‘·ヤ»ä? Çx‡£#†îì©PâCLŇ sY»ë‡ŠÀŠdààˆ22¬’9¶O÷””ßla¦ìdå-·þ&H!~>Å¥Kì¬îË ÝéÒ°ÍF|iä¿|¾êÿ$ïÜ  jp‚.èñØæ@ºfe!DÎd  TD‹PyS '¨ˆÔD ÷ƒ¼¯Ã$VÎïH‘¢EH¡4Xb¥Ä.!GÆ—AyÙ¯LAµAÍŒèR ߥ•ÿ¥Õ,B-S2þHC–Áx)­Èƒ‡)!àÇÐúœ˜Æ¹m–›¥è=ÕŸ@'ü&bxü¨« tŒ] ~ìT¥`Sò‹ ð¨¼.¶¼~zZL©)D+D´ûcmãÍ ø•~ÀH}j,uòL;$0Xã—ìä"Ø %UžZÆ÷éÅÊ;¾Û?îø`.”uO:>)«s/ä?È>^2¦àµëÛá4 endstream endobj 580 0 obj << /Length 2746 /Filter /FlateDecode >> stream xÚYYoÜ8~ϯhäeÕ€[uköÉ;™L0ñÌb°ÙYb·¸QK½:Æñ¿ßº(©»`a E‹d±XÇW´Úxð§6™·I‚ÀÍÂtSßxDínüöá¾0îœwOoÞ½¢òÜÌËÔæi¿\ê©Üü˹=¶;?utSšïÛ]ÎÝOüý¹=maäÕ4$„Îc³o»c>˜¶9A”Nlÿýô7O“ ‘ïÿŸÂ"ç•´ H›¸¾ŠB‘6NCWáBÚ@MÒ&‘s·ÝE1 øVX /…yåÐ ÂØÇ•AQAâz±â…ï\…ëøÎ‡O¿óü÷Û,p:­¹wßÒ¾ÅxÔ̓hÇ>šB7ý¤âήÂÈõ‚ÍNe®òEélAuºëy Pµrƒn¬êO-ªþ/üÑGü}æ[ê˜Ë÷¼7ƒeUìú¸|䯉hÉ^\g6bB×OüçVŒ‚åÃ¥¼»€Ä]°}õT´~27 #Ð$qHÞÍ$ºás@ÓŸ©ÉÍB|¿MCÑ2ô¾´û~ÁŸ¼ÓÌýµÕŽMI:—%›Â½4=¥R7ÝDjšlÏ`Àõ2ø á9ei>'2LŒâ:OÈz©sÁ¡;Ö]Û Ïz‰œ )íÙl‰¨]ìóo¤8îåpùÊr™†7*ºZÏéí-+1E+•íJZ«óœô¤œ~ìd¢fûEbZE1ÅŒ=»’ÏAq<à™Üèó£ ad N4ã(se°òS­­PýÅ|bÊù ÝaÈCêg4Ìbír’Púœ“G@†ŒYF¢Þ,²*º7‡ÆfK6&lR :N‹:p XV-埄ö`ž@b\—XÊb+?´®ì£UÁâiÅ^R±Á£$Çô%¦idž³¥o…œpú‹9´ú à…:ôÙ÷@Ð"ÇÕW4Î „¿û+ä†Ô‚sÏÍ™õ*!‘SBŠH<ºž%·A¬=tùQv©Ú±.¹ ¶# rœFf:jÂG]Ö"í›’£‰ŠÅØ !Æ -I)½e@ç T´`¥³&K” T9–†h± ƒÌ¹£$A+YkŽÎбDt°~m¡‘à¤v%)ô+ð"ÚÈ|ÇGj"  ÂeÞpcv^èÀ}–ÜÛŽe…Wî &Éコ +wúwe­ûž‡9׃ZÆgônç?£E²§,Û¬ÜÈK¥ç$i$«’fàkSP))[ȹŒv†Ã†Ÿ1ü~Ã[€„5ù0tš²j#ür/a´¸Y·0'›©#ÒК袥/Uk!îi\âÆeð1 @±Ò1`¹‡ŒÖ@vkÐT †½ýüùããÏ·wŸþäé·Ÿîy½û‡÷ŸŸýôåâFËÄKð ütªÒ“ñ‚E¢5 ìÌ„û„OƒŸÙY>CŠWËdÙJƒàšìVÙËÒ;Ýjn‘2_ñpÆ!žê¼@#´Ù'ׯFqUoÕÖE‘¥Ïç—ìá!ïAÂä=HcÉ£P›òJѼ+Xþñ‡R¨,jÖÜÞo’:_F.x,gd4H§„9±( @³u¹{ˆ„ºˆÌAjü¦Àõº“ø ³ê)i†¶ÇfŠB8hšµ”cg+ñâÙ @.¼Ó^ð@˜ÙÈ2Ê#xÂ=«¬Ì^âD@µ†± ôHãôÊÉÀÀ¹>„Q÷—°°Ôµ­ÈÕI©xÃñµ£çvo‹€²)§*µ‰ Ë{-Ø[úöÉ‘Ï."¨ç¶±x§]=æ()–”-¤ qbˆCmNtÉÁ|]ZŽ!ˆ}å’‡&€CË2…{ê ÕÇÏã[0ÀŸüÌ"|E¡O·F& ˆ„T³ç¯¬Â©ÈââÄO€'T#1ª ¿Ëºël›É\ÖŽÕœÁ8΄SâÂ@úßÑtÓ‹%WøöÑ÷SМÞ?ÎC½XÐ’/«hîX®£YÖ”†ßöByÛ{ËºßØÖ\@¸ŸZ^cwŽ3 û‘k¶¾8[¸öARÞ;m ƒW^!R¬f1 /’¯:ÎL¡%ŽP9‹aÄ–³H¤×Ÿ’ÛòöDoCÄêsb@g``L«U@!þÎòØúZ<÷fùÛUÁI;„Ýóæ0æý£ óS¶x[>¿2鋦Tü{ ;šó§@X åüIdÄ–9âb¨e8»³°Ç{-Ùž&íùË–žFKC˜ßf®Šj.ÿðíL†÷ÁBõ÷¢{)©à8ë‡yò‡šµ]™SHˆ%ËTé÷ÂÐ1CŽdKžÌÏ íGÒÓ[˜?6Vÿo=.^½¡à«™x,‘òÕ‹<~˦ è¤d9Ðá+èO1Á>m`ûbm‰s?Iš«/2\z„P@Ô‡PÌҮ𠰇W@¨'ômêõ±€¸<„àj[<×SE%ŒM¦2жô„Fj ƒÓ¡= R„\)bÿ”w"C¾z;goˆ›ñÁ •Òc¥ñŸ(E#‰–žüÐEa¬YÉÚi®$>d *©ú;à5#,Sˆ»ØË•‹S™ó„ëVöŸ+—ò_˜w–qÅÜŽ„‚ 8xÞ Ýp8gÚT™xžqàØÐv¦ ”t8`3y/ŒËs gC-4.JÏcç9c¶vymQb¤xû]fœ-2Ï©-09ðK±,…pªLÝö-|Љ•œ“E%¾×€±¦1[£)GÒLJ;ô„Õ8¤Ó¿\þó€U endstream endobj 584 0 obj << /Length 2974 /Filter /FlateDecode >> stream xÚZmsÛ8þÞ_‘É—Sfê¬^-{¿µMßvºwkf¶w×ûÀH²Í©-ùDiÓܯ?Hˉ²{Ó™ˆA‡ Üä"¦ÉÅ:¾(³ìz¯.ªÃ‹X¨ýö¿¿‘(ß‚Î×·/~zWI|½Ž×ÉÅíf*ê¶¾øWôêx¼Z¤«¨ikûãj‘eYôúg|ßtÇ+y°í– yô±ÝtýÁ ¶kiNV¬²h™_ýûö—ooƒEšþŸÊ2çŸh›$Éõòb¹Ê¯“,‡Â·»†N¢oDúز†¿_Edzk¤7`øKS±¢î]Ó_%‘άè›DLŒm{×Ö¦8ŸÞý®s:w°Ã¾q^¦ëÆÙmk†¦~I„586 ms‘d×IÍï`h1gºN£A¥R³Û`ï§äý,Ï÷C,^#Z!‹ãHô!*¢í[5žht–3r„î1=L»éè[FÕx£LW´:«oöqM}¶¥{ÛºéY£œDZ²¨CçéÒºæúj‘gEôqÃÔ,2tØ :u³8°Ð6@ÿ'ùš(Ë4v8tž¥2æn­—š‰Aydr¬Ð±Q«ËX7·-h‘¯#³ßw|$÷²Z â@*gE,ZŠÔ9ù€Ît  GZFÛ…,+¾ÌL70Ÿ‚?–qÀé‡6"Câ²<ú_>°¦ïЛ…§^èýˆUH39š´ŒÕ!Ê$º¡C<Ó¦ –®"Þ_²«〶­]Þìæs ‡vÎU¤f*~rЧ -‰3–æm×’oùÍ- /VtÈãTÐáÍÄQzo¯´šÃ÷E"7ª¦‡e¹ãv]? y4Ι-ï™{ìVüH„¶$¤ò89‰Ú[$ȸßñ½á"hV²f3ôäýæQ×ó·ˆ^›Š'~_<ÚÑ”\¦0­J D™û“ÍOAÌŠD Ä=L›ñMæ´ªZ@¡f6Dè ¨™ 4ÀS-ÈoÄËèçl©–*§–Ò’o°‡á!…XŒÈNˆxèœò H0w}-–Zc[cÀà#V.g¬L"¼•Ïìq“²&ü%MxÃÚK |ƒ:³MVÉVkñgÙxoZw$_ÃYgkƆ£G âð[kL3a^hüÐ7æ0JílÛ,úÆÔænßu£Ôá«-“ ýºA×7·5¸¹y0ý÷ñÈQ˜¥bZ&š;ÂJ9äRMÒ)gíäâ$ª)g2³'U¶ìÒ<8oùAÂO`ÕôšÌšägÖUÝØSðh‚<’*ÿOWñÚõñÀ‡ÅÚ â2§T9AÞÈ£ùRYÀsÚ,K¸5}‘Rc*÷<åÒ |G‰znÁ‹©R1îð¶M­&sºq*¬Saìn¤}A÷û+P&÷ ï&ú>›MÓ¡þÁ%F£²YzfV”t‹ö:ãoGCt9{;¾ýaGyôÎ`…‹lIÜ AÆ,b¦Îº5sÐÞ,rìUû±n0pÜK‚ÈôW_Þ|ùˆ>cz7Î¥ÛÁ©³åÚ'–ÞÑLH.BKeüdnEV²\_—+z+§×”ãë–edy/“‹ ùkH~¡é¹Ð/ïý„µÄ%hø«'ŒzÇ-qUó= —ç©Í")‹ëUž>¸Í‡K™–¹¹½ÑÓÔ`W£GX½ 7 «¤‹Ñ€åÓCûÃí¯ŸtâgŽ3ÊÚ¾T½= Ag»y‡\óyœžÒA‚ñ`ZÍo8^ðŒ™F79÷2)&ÎļȢ([ëå¥âý¤ôÙXšÁÄî}†;Ÿÿúþ%Ä|eMÞ¼›q1Sž$Ñ/Ÿß³&Gpy¦N„3Kκ™|±Èó– g¬ú2! •iA I)wÀÐRb¹eç Úµ’¾,5ð—àAŸÊ†aäHs]ïþÜ 7žr¿³HDÑEÞE ä[ê¥mý˜e™ÅœÎ¼,Š-ŒQP¥Û;ôõ)©ÐÊ Í%Oa†ÇyŠ<«Ø©ÉjºS!¼$o†œ¡Qukn~ë·~ê ²#B=ø8á ,HÎ:V@ÄüdâC†ÅÔ‰á‰þÈð ¸ÄÛ\ùððc”EèÊV–Ó&¨zþ‰•K 9—Àý²; ‰KŒÊã‚|5½ƒ0FN^ Bðuùû]g ~¡Á/B3s|Õ ®Ùo”õ¸Ü‡z›Î×ožÉ+šEsqI+PâLh›¦¹Õ¶ëöœFñ²/ûfkïØT™Pâµ/UqÚ3„*#.X”Èt­ÜSb{_óK_™5½–¬ÚPÄšÍz`%NG$‰ßÊú’uÄ(?øHå»O^4#™$£gÈ]ÿàA¡ü;ƒb¥¾¸×¾ž£ ÒTM·¤0ªi¤k5sâJÌå]‰7p9w©êÃ5[ªÁ¹|žZ-,v,÷Ý€…]A'0'ÒÄØFSž.7Àt o¸¿øÅYå—hÓ[˜bTkåËçIxkÛVYµV™ù2§„¸„#’Ї)Sî™2Mʞό*׸£äþ´ðäO‡Å å³ò¦Y)6Ó€¦Fvõ…Øç{Ô¢lzèíÝ84*Ô'OÜ•¹dîòµf> Æ ³’óœGw #»¡‰<û™jIºœT˜ÓBìð‡ÍçUƒúõÿ¼³· 5 ÆZsãÉÝØJ±8U‡H Uˆs…"ßï8\PÜÒ a4ØX~lÍVKØ?}j_Ñ“l¯µkRÃÜ'a¨,¹BI ¹í®ºÇ…E}lR<±/ MŸ¹ÍŒð¹$FÞ|ÀY´§'ÚHñ+…½Bj´ˆ›AŽT9+t âµKDƒþ£’Nð§Ê|F {ÛÓ.ÝPÔmÊÍ=¹æëøÍ¾ò 5Ö“Éa¶_BŽôRÐo“ yää\Ý­¦{÷4ÍáèVÂób§ë.¯Q1É 4äMÒ4ùÌõµ^vö¡+yÑ*ì¼ÔDyÚä&\¢ÀÇÄԹǯ!4ú À6‚ž¿›t™ù:"OÐZ®½ûÑê·oê ¢ÅSÏ9©¤ï½S¬ú0дFC– ªUEÉN@PE¸_‰2ýEèP2ž-o3ùôÓ <^A‡UBrOäßø¸¤ ‰§ 7ÖUôZ< ¦$¹Äáüz?jù²<·§yo,2„´€-ûla=+ÓINQ&|¡íÄ¥ÖIù»ƒE¹ýdßüÂ/Öl˜\$ç™=²€³=–ú09[SÀ×aùç¯B”užX¸Ýg»Üî› É e#«!Ù”uè¨ ´ˆt7j= Ï®ç…méAªZ·"Å\Z¶õ»&Cþ<‹y^»XKhhò£ÖúºQ.g‰ à0š¿q†­k”Á²ùÔ{$t Œ^×ÜÙ™ÓïG ˆHª€Egkôð²£Êiâm³åUŠ–ŒâЧÿg÷n&þ(]™[ø±Wÿ+Àÿ¶Û³¨ endstream endobj 588 0 obj << /Length 2776 /Filter /FlateDecode >> stream xÚYK“ÛÆ¾ëWð°JÜàEðM’-gS–”8W©âfá4’öß»¿î\b¥˜ééééé÷4ƒO¿`“ù›$Šn²8Ýäõ Ÿ¡ÝÃF¿þü"P¼!ï^üõí~¿ ü›ÌÏ‚ÍÝqIê®ØüÇ{u>owaêÙ¦(¿nwQy¯ï›ö¼¥•Dzy ön›cÛÕf(Û†öDû4òûíïþþâ§»‰‡}þŸÌó{Üîo²`¿9¤ñMÅÂqx³Ý¾÷ÛO¿¾~µ%înß)ÃþññöýÏàhìoé~³ ’›½ÛùØí¸ÝÅAâÕf&Þ£Lr\uš™¦À õвºò~¬, '+ ?¶,´|¬m .ù>ʤ¶E9n¯Þîï%Á"’vI¤:YÏÛº¶]^šªÒmÇW ]Ñ ]Ÿ™oÚæ“®BÄö¾ï»Ç}. ¾àÓ nTö2ú¥ÌmÓ[Ý#79Ì7ïʇ“» ›v ü^±E ‡dÞV µ >Ç(¶’F²ÐëÍ‚h.ì`¤ì`y†Œ0 š¶—ùÐ:t¥³"o€M§ë…€RŒ9¤ ´ÁXU%ºkÉwŠ}(™Ž,Ö. Ò ³€4H¢Á`bŠƒ.(€VtˆaݶL±„{ô‚ù…(õ—ý ¾þÐ Âpj!¦vt ²È/,ÆÀÙ{ëñg;VmÔÖ„5å||¢½™Í|jÊÜ@&ÚnM?v,xò)¥¦~‰És{dL¾æcï"KýÚ¯96žLó œ+r›µ‹ÜâÎûhf!ÚÇĺÓ/Ý€†n°b»2݃•¡mÚ‘ü”Ǭ‹±÷trÂÆ…m­ž¢}zbäñž±df*˜(FǶªTl<ÕER¼Ø5sºr1v5ŠÀ½ÍEVHÑ,ƒµ †ÉÂxé#Œ`TY L.Æ™76;P¨¨½©u¤Lnሽ.f°…R!µ¸»„R5î¬Ù0è{ÁÙñûžbÅݕۓñ+‡1H8@LcžHb·–”"Mg.y1Û÷"ÂþûÕû»Û»Ï¦4XT˜¼Óä<¯ýI'])^Ë‚ €3 Œ÷÷>Ûí8›9}‘»Œ 5*2b]· ’f'3KôÙ9?‰ötf p2ÔÕð «#ÅpÐO\Ð'¿„5†³á§lø *Q…öÔ-§„8¿Àß׬j€ôŒ•Dþ—^0ª)?ÑdJi´£³Œe÷$P ço÷„ÖátÍ»m à+YÄÐk¥ “ßHÜ2!onòŠ“CÄÂ×ÁäÓ„ÁNw%^Ymñªé:W-àȼ²¦ƒò°(¡AeÊûj‰‡¬¹®0…4´¼n' ¹êס§ò%Þ[ì4mìÞ,œ "Þ û:–:ƒG·YàâX‹c‘Ì)¹@!„׆3ܧ«³–ÌMg=k}¡ïÝ+%šËx"‡ûÞk*VV{Ù¿Ð&ah%ø,ÿP +¬;ù3” 9¹ty|”å©aZz‚°Jõw»V6r2 cJ¦µÛ'±wç,k!iAºP®Ú§KìåDp¹c²ÑãÈ-‡JýR²°`s²š 9£Ö-z § :²{EGäR,GTJSáW—ÍÌI”ªT#”Ä=I•K‚}:g,Õs¼N¥´Ã@K:A(®p™„…F¾Â\”^;]”jdrœ-Wk€ËWU6I†F®¤ (ñÀñ¢xUÖå Um¢µ±Sv©)‰:ZNÀ7‚HÌTZw¢ƒ‰G±2;GcA>e-E±’tùÚØÖžE¾{OÑ•T›ÆÄE?™ë .ÎC­FV4Àë*3YL´—¯ªàžH׎ÚB”JL´»¢º½{ùЯV-R¹¹ÄAM…‚%¬`Èu î‡ñ¤#W¥eúvÁÞV .‡ù:m5’M·c?càû»ă §xs¼>–^æõ§v¬”·ó8<èèDPíØ«Q•7î)@ElŽQö>  Óã+êX#)©oCÜI¦ç'Aó¤Ø7ù0šÊ= .ztP“Y¾9¤¤íLg]ƒP­T ­ÌLñ?“/BDä̓}^Óa¶¬³eEE+\0pÙüÃÙü1ZY›Š)à+E©YiqÅM°þ\]ƒ5©k°YêÀ¸®ùÖs)"›_¤!šM6É^‘Wcaeb[’Þ‰êo:Ò¢"pòìLÓŸÉpE¸X8,Z'˜2þ×pªR•™Šé:z8¿uEH–ÊS2ÝK!/C²ô•¥ØC>&ñtöå·(Ó›43²WʉšËûa ž;÷èfÈ ïH0óIvWª?}t$tJD2ùr*•“çü.$‡}°íà˜4öâœÝØ‹êj{¹ŒOð7 ðTíuÌ„¾…¼Ýšª5…@&*{¥²#A6…銧§&|»v)½zݶBÈ ÙX8H“ä*˽±0‘Jna Z³ÍáXfpl– WÎÀ%*?k—[ÎÒª”Bˆ¸M > ÷pÝk«š¼FÎ8óñTøšab”*3ŠóãìrßìE¼yjA`6Å»m —Dm4 È~™íó25Ó_N¶„‹Óô9ÿP6ϼ6%ì°ñÅTÿ±€èëPúS¼T<*›4˜â ’=âXR@¡7ÏØ) í"™ë"Ù3ZæxÖ²ON¹þzèlm¤J¢#O"T™öEu)1°Áa*À½ç1~ê„õvÕåv*¸¥½"SJq2`™S1®ØÇÁvOΫŒä“ˆÖö›±6öãËv±yRÄij^üx)'Â@b-¨ŒÈîýÒ:¾é“VÐô]¢Ô%í/·tv0e5½°±‘-ƒ©™aÅ7¬vu8%J²ŒÝí# ëI’k~²¬^¾¨†,êŽÛ>zX²À I‡zIÜû4[>3Éö”ZL®«ú r‰cô©íôDy-,ÖZÄ–àº5j–=JÏ €U…tùg² žÛù˜¸n W¶,0sA> stream xÚYÛrÜÆ}×Wlé%`wû%o’HÙ²åØe1N¥¢< ³Ü‰°ÀƒÅ¿O߀ “b1Ósïé>}z6Ú„ðmªpS$É®JËÍþô*$iÿ°áÂoß¿Š¤ß:n½žoï^}÷>Ë6Q¸«Â*ÚÜü©îêÍ¿‚7çóÕ6.ÝÖæÛÕ6I’àí_ùû®;_AË“iPÚCןÔ`ºÆ$Y™y~õï»_ÝÞ{ÈâøÿÜ,öü»¢tW”å&/Ó]”¤²åÝÕ6ÏÃàïVþ²*0-~Ë`8ŠàÎ Å#¨©}³Pµ5wïZŽÃövþŠÿto¯A˜g9p£jI0CÄÕŒžÖªL»¸ýÐw'·€¸Ô¦‚Þ6Q¹K#ÐB”좌OwÓÑ}ì/'M+¸2 xÛEäæ…ÒpìHP¤‰á{îõWÓ],×à(.L$¨€Ç£ÙãÌGÙcwijYÅÜÔº—©YT‹®Ê4¸¦#„²ûˆ·ÏÖÓ$h@!·¦|I cmƒàhìú'–Z½g³Â:Œßõ™NðÀ Ò" þyfØ]xÄIñîhÔÅêÅ;Úé6*vUVÂ7ÛåQÎû}+~ñ‹c3¶pøG9+”o@ÑùÆ5W••ï ‹íŸæÞ]ÏßS×ëùÖ,›—×G®É FKK¯-v/`>kîÝOØÜq|õó6ކ–ÉIuø%EcáÄVQ›Ïa”î –,· ­ÍºþìwE‹DáïhÄÐ! zPÅ^B†½+Ý=èn{?Ð"•ðæðÛhe¥ˆÓ²³Í ‰BÏcÙMŽ(aÎh"(—ƒrÛ¢süÜö¹!Y#3ð °ÅÁ²`}Êd$#NL§Íòt~Ú9í¯àLºÿ*w…º#KðP(XÆÁÀ舆9°¸í³×Ö£tôÌÖx3çXs+[yS ¼+Ánu>÷˜ßæ!ûE1o„Ë‚ (ˆeHmÝ¿i‘ú?j?ºáy'_õy®`K¬bfÈk›Jܦ성IÏÏý^Îý¡Ý7—š3Ø8tGnÐæC€ˆÃ@6f²#­­ bYSfR,l@ÔZí÷àÙ 80 óiæ3˜)šÏÞ—·íwDÐÝKÒ~)N’€1§znÖØú;Z¨h\[8ú#áØ'Ë2¥RüKùTCH5Zr”å‘\®¡Ô×cË—dÚ…©ƒ {½œ¸&¤á1“7À(gWùýª7ÅYÈ;ƒ/i,÷wÜ i.ÆÔ× C‘T¡µ0±Ì ¸‚kŒ8MŸ˜øXž…HŠ¥öÎ'¦Aø@žžî肾 vÎ#^RÛ3gÿ‹0ŽÉøFÀ˜ÔÈtÕSãsàQªuLS5ÑÇ(¨çØ´D!‡ÿb'¼hº‹ÓxŽƒÖq0‹•=> •[ÇF‚h|†dBøçkô¼¬X™Œ¢)(‚P·\h8U-‚žŒÃ)5´®®Ùœ!‡û`o!\‰—D'ð+t‹âÙ¥GS‰•$QŒ 4CõT…û˜ÍÓ\èéˆ[”ÈNÃrFAC bþ"σX8÷ö5n,Hì¢n»€a|¡8ebQ@Ü=>Æî½ô2ÖÅ¡ì~b°¸HøéçéJò°];ˆŸeU­zÍ‘ Š™o{×UF2/Hg•P:™ê™@âd‘®Ü}À@ÿ>JIÝJg» xÎøžsJÒ?pTÒÁú‡j'_6Ýj"? óØ>81.×r¶ä*gË¥ÑúÄMµ¶ûÞÜóá+rªBÂY„  Wó*T§(0í‚‚øÙ¦…-‘ÝN”íÊ$ŸcÐ/‚Û0Z=àLDp»þ Ñ4?ið½!1>8_—\7q-¾¹g¹<ùB§z4VFÉðhEm œ©ÍòˆĨ™Õü¦-Võ”–޾@ÍK‘-w$¬Me_JºÝ+˰€O;ˆ0˜Ýµ•5ñm `=þ3¬Ö›¬¹Ìð1QõÅ æxPè÷bA¸lì=J`qa¬t'J» ¤ð“±†KOÃ(l’÷î­­àTy—â€Â HUqrÊè â ¦^ƒÔaqŠæÞU,€¦zËØuOÛÑNý+g ÕjzŠ€ts@¨~ÚɤäWþ`賓šãb%¦,½Wnbñn’²MPöxнËB;n›½©$/½©§Š²9²ü$Èòž.”Øn8âUÆ…•[†+ P(AƒyCÏm_Z¦¤Ðô0æ¶”¿æ®nzrù„ø×ëk6€OÍù„£¼ã…Ñ"Ù!Z &`A¶LÏŽsVôvè/P E_É…Ô¤Yö¸Ü¾·{©Ž“M±ÄÛ %\º—H¿å…ßw¬3H—¡“5œ xQ·ÌEëï¸w ñlTë*I& %dÕ@Ù{n ÓE üq=蔥d㥣XPø@v @>K°iJ°ÆdÀ¹†ßi³fZ]s7‚-gz)B* ûik—ò)<¥ÒÀ*Vü6ŠIð6‡=ù´Ð ÑŠ ‡ òðW¹8Ì_ø¼ €^Œ &B¹ðE°–£@œ´0¤/ÙÃD ÑÓeÓt]q¸‹“ùmý,·u£힊F?ÆŠ7[±$š A§¼mk s“}½F´‡œîÓe|OÇYŸÍ—'²uo5>=´L(ÁàC9ß–;Äò²ü·æ•÷§Ôú“¼íoN!¿<ðŽ"L=ÝOø1ª*úýÀñÀµé€QÄ@ ƒ§ã€p¡E¬j‘›È‚¼™À,àP™¡ŸS¢È1ŠÙ/&ŽV¸¾D^iéI¬õrÌplÿ“ðËËÏnþÿÀ¡úÞÍ>µÜ»o”9Á8Ý•eF«…e"I-{î¸d¾F±ólA±óÜ™ŒågƒP8ô–Û“ø- ¤vš\Â2|•÷àÞÍ$?P@é‹jÌáé¥$$ÌP…][«^¿> stream xÚYKsܸ¾ûW¨| U%MÈá;{ZËòF[¶UµV’JÅ9PCÌ ¢r‡%¥òã·_A ²·æ@ 4Ýî=ÑY¿è¬ Ïò8^•Iq¶9¾ ‰ÚíθñÛ/o"™w /™ïîÞüùCšžE᪠Ëèìn벺«Ïþü|:_®‹@5µ~:¿Œã8x÷þ^µ§syÖÍ IpÓlÛîX ºm`Mœqåçÿ¾ûõÍõ•!]¯ÿ °8óÒFQ´Êβ"YEqÂ?£LíØHi´'–Ûµêõ®©Åݾ=R+ Z™\²jËßa¯z3[mS/3å«ÜíÛ9’:]QoX_¦QÜIÐòõydšÃ^CÖGÁP²0¨êÚn§;Ôœÿ2ŠWQÊGôpP¸cÜ‘MQâ\&t?p‹¤†¡#Tf„Ê™òe:ôt³àõ©%[×úk%ªfâßÏÁŽªëaÝŸz³çF5½,jÚºpè Ms-ÎŽsD‰Fz÷ì_Ü©á4ºÙÈжkìZ¬Úg&· pÇM" 6bd ð>++BºÊ áŸxv<¿L²48VÂ;djðGŒÍk¶*ò•Y_ÁÙ®›ºízuT<Ú¿c&eœº–´¯k3[üÝ´<µÒ¨¤€æöty°s?Ó«Å6pÈuÆ–†¯ãëÐ#ëå®õ€èX °*ÿ™ÛÆqÛ±g©ê­úÿo[ᩞªãé ÐSaY?Àí!Yr‘…îŠÇÜ4ÐLkÐJ§¾iõÈí–hèuÕÀò?j¨'!íñ†aC¼C5¼¨:Áå!ç =ŽÔf›Û•Ln»]Õèÿ™€„#ýbÇjöm§á\šÙùS+Ôh£'/#À·bï½4uÕÕßw»î‡u»8ŠäâµâÏ©ê).T;ÅÚ¾ã‰Ðå‡>Š#âý‘ü «{a× î~@:ñ¾Ë+öOT ]"ŽTà#OZ9‡h^Š%"E®Hž@…XæÁ:å¯#v+óåÏ»jƒR)L,c±[Ž÷‚(Ïl„ã¡;ôö"nL–ÐãÎÅÂØ·N‚Ûæ€†-ÁÚâÆ¤ºRœ¾ß·L ÌAW!.1‡ËÕ0"¢À|:¡ðˆ Øq»r ¸žCGRà×öBaûk˜† =ì»vÜí¹Su]Õìfá ¨ÇªFIÃX˜ÀòHæ7W>4”‰°<‚ƒF[³§Ì|ÏvÙŒfGa{èTU?{<rÉa¬)ñäkrè<†Hb!ȉÙHÛbm¨ã¶û°WíÈDƒ™ø0³|—I÷sª•Ä«ÞPtòSÃ&§¿P>Ë33üà“8q®ØQOCWÑ¿5IÊ÷%€ Œ×¾«šÚ N¶ðÈrHæÖÃX%W'¡¿‡: Nñ- É1úÖ㥷®y @^Øg/6Áý"r(ì8P»Ìî‚ãNÁ ÀK#u‰‚à ~&‡¥:ÔÖଳž”Ñ9„,ÚT¾+ÿB“œsX5¢]WÅÄfÿgÄδ{ÊžAÀÿîÌ­3@sæ ¼ÖÖ7w”u¦¶zÏ>Œ«7³„Óü•?‡¦‡Ü‹S­ÌßÅ¿:Ô/p endstream endobj 601 0 obj << /Length 2769 /Filter /FlateDecode >> stream xÚYYs7~÷¯Pù%Ã*S;÷‘7e­µµqì”Ì*×V²$QÎp¡iýûí sH#'ŇF£/|£«~ÑU^Ir]¥åÕöø*$ªÝ_qãþÝ«HøÖÀ¸žpþ²yõeÙU^Wa]mvSQ›úêàætZ­ã2Ðmm¾¯ÖI’¿üÌßv§Œ<šv„4¸kw=ªÞt-ÌI²2 òrõßÍ¿_Ýn²8þ›Ê"ç_i›]WQv•—éu”¤¬qq½ZçyÜ rïÞÝß¾»Y&›»OYï/w›÷¢ðÇ··¿ß®¢¾7Lû‚Ó>Ýÿú¿Š²ë¼Ì®ÖQqV™˜Ã"ØvÇÕ: N0Ý4²é$,ƒnÇãýA3ámÖþóQã„è™§³ÌbzÇ„Z[óm•åü¶‚YZ.¦?È,Óœ>)«zͪ­EZ[ë­ ^Ó-Šéi7àý(¹Ž²ˆ7RwäZTŒ•µòŒµ‚ï‰ýêÞ@¿H@î|œvœƒ®ÜýFì m“†wü•a×wVíõ\Dm\oÍÃYÌ”£®ÍùèW¶ªit½´…Ó’0øü¯ö{«÷`×L3;þ²' ±•ˆµfð^²ÕîÜôÆa°³èÙ'§ÑÉ(Úñ·íDÆÙéZ&uümÌÑô£œ©î¬zº6à* X¡‚<€}4]\Å0¢Ks{¢ÃO‹ZÇ£œ¥ä ¿Tïi&Al˜o¦>û•/¸,ú˜»’ìT‡4JA÷/ŽÓÄ4Ž_ ï4ŽÈJÈbÚms®Ñ@ÜãQÕrp8=MSÌó¢àƒÙêÖÉ:­Zd’åIÌéÔ<2 M¤A7Εí‡Ðæ¤§È†Ò OFxür0[œqQ+lâ~ÔYn((eaPr9“\.™419v)MƵөA9w¯‡`Êyw"i%žÍB(Ǹ/d™´Á§¿÷ÌiõÿÎÆjŸìÌÒ‰§·R·˜0 Ý€]´°Ùª‡FË’Ó{Îî–cF ÁŒvsɃ‚Ïöõf!)z 7˜—QöÆi.óðvV® Úò9æk´sLéªeZ×Ê܃jD«•y±y æ0VX§áçÉÈøöi¹üIVž[~!Ú¼$ÉŽŠªw$q%ýµÕ’¼ä øn½t(çV$ô’Ø0Ý*ŠÌ¯´zï‡EÞ’É0éá01íÞÙ¾«ŠJ´gXØ“n bl×Bb¬“2 0¸8Ú›!ÀNá]fã6JÞÒ¨@—©„~™>7±ð9¦4ŵfkgÂ(WYUŸ0ã/Æiñ4s?¶#®qv’Ãê$‡¦²Lè¤*œ¬am¸Ä'´—bºJ_Õs‹]RŒ.™e÷åÐ5¬­éÎ9¾žá ÉôRÍæþæãç#˜y†OòI´YÕ:`¥IÉ¥¾Û®u*ã¤ÂÃÉ_M[s ý…ß#»¢6†Qº%IXŸñ Ϛ³°+Üò#w†S]s¿µqK±Dk–™°±H>œ±OX{8¬7YLpE’z†„,X…yp¯1Áè Gþ»–Cá–5jºÒgž.‚ |-Ó}­Ój¨±Òsrœn ·H‘ƒóÕ9Vˆ 8°»2–›s¬B©›Vpu ØY–BöŸ{æ}__ž¼ÄXØžx(×FqÝQ Å2ð7îZý'6Ã!°¾7+,^"’Ê ¨k# .Ýñ(Ÿb³7- ûÌúQ¼$\Ã)ÑÓô%½ËûMQÿÁô@Sá´!l±3Xg)¦õÓDBú¸6U%`”‚5-…™L&Z.m¢ÀMFhºŽ;2mØx–˜‰eÌk!ï÷‘;_VP"•µÞ’—(Ǹm£Ì‘(-áÀ±\– £3Zë¶|L=#Õp ¨F“a‡õMª‰7±wÛîãÜñ瘦JêMåQ´FÔ‡õ©­(|"Ï ájG¡R¤£­“"wµmƒGINåF¶ŠgŠï¢†) Ê÷Q!Ó§8Ù`¦Ö"ˆÏ€âiP¡À¶~c'PÀÆ=cσI¸7@ªQµãœÃáBNÜÜG(´‹²,þ*æfk̇F[`PW•W¤E`1Ö¥˜¦*Ͻˆûç!s²š“Ó4/ÂÙ$bÓÂgV‘`äËšDËPùpËQAǨ®oèІ¼!Þ0Vjéü¾ÀÐ~pž{{Jâ{ —P>ó2ÙFļ7n½è¯Î>¾&ø$T\.Áî ³Ð‘ =ìb Ôˆ›T aòïp–hëŽz*@– îm"mj1$F£4ò Íî©Nœ ^¨yPô[ÚßyT»—»ñƨmOwH"¢&?0•0·÷¿Ý}ük3Vè8ŸThèð} /r:"':(ž–Ý”êÎÍXŸcñ#H¨ñÝf„)HâÍÅ‹ðÉúûVŸ¤­kD>ü¾ÂJÊ7!×<.†ÿ¬ÎÆÉ€eâd¸ð&>QÁ^„ÚÍPÕaHõ½>žzît#Ê%É*h,8è2³UŠ©U V•J|¼²Ká8½Î,=MÍn7‚› OÇ&?™úÜ“©¸"è¥$Ò¹ïð‰PÂáP«¼ØGºŸ-÷†§Ùb6¾s!f[(,ïÉð—¡dJÁB óˆo piðS5j«¹âÓe¦áÆ7Ó ;ã[$’Eh}X2f’‡r£ÅI²ˆå ÃùCòæ”1îÂIamï Aª3:KÙ…¸ZzѪbA‰Ü&ákµi]¯ø},Škv‡ÅRNΑ wóåùاÐ8K…m¸ËÉCïT?Rié&ùŸ †(o5%ÿ§F 0Ø—§îòÅZáÔQ ý‘©zÀÖø ”ÿÉß.“<’`?ùO#$Á>Ÿí0òÀñßc)þwåaäµÿøÿýÙ?ó endstream endobj 605 0 obj << /Length 2257 /Filter /FlateDecode >> stream xÚX[oÛ¸~ï¯0ò²2;¢dÝö-ÍI{rÐd:Ýâ`»´DÇDeÉG—¸Ù_¿3œ¡DÛ*ö @D‡ÃáÌ7ZÌ|ø³ÌŸ%a¸ÌVé,ß¿ó µy™ÑàóÇw‚ùÀ¸p8ß?¿»ùE3á/3?³ç­+깘ýáÝóEzª*ôù" Cïý¯ô½«sXyÓÕ VÞCµ­›½ìt]Áž0JC/Îæ>ÿçÝýó Cÿ§²ÈùÚ.Wñ,NWK®HaX/âØ÷>|yþòùžTý|ÿûÃúá·§5)úÛ"?ÿûaM£Ow÷Oë{Tvˆ¥XÍ"¡ }Þ©ùbÅÞ‡9\ªQf–xë¹ðêm7ËV÷UÁÆ@Ú^kÑÎC¿)u»£•J¯a”& ùU·ª žWäWM Zb¬·´ÒYu>>}9Ó /NáRD‚”ÿWm<˜÷{U¡ÈŽ• £Àû¤sUµ 'ÂÛ6õžÈÞ+Õ# »Ê2oÝç(fG  < NÕEÊQ—%IÞ†ˆÜê½.eC+šiºÑ݉ú¤½Q á;ãàШ–/B„W´? f ÁŒ›ž—Ðæ Ú'…þæ‹P543#UuR—|Ÿ%‹iiB4×›Rí™\³œ¼®rÕTírÊôkòˆ‹|³Õ,Òe´ M ,#X[úü †SŠvÿÂ@‘»‘q~ŒQg×u‡_onŽÇãò¥ê—uór“ׇ·Rm»›s=ƒL,CéêùóXµÜ—ZÄë¹P£Yn!’l™ 7ðî倵 t!F ü8ƒçùBxŒi è–8^4mæ’>…n;H_=„"e±©C Öú=þg7 +á=lé>>¼ µ)P´œQsÄãJalgˆoÙá(EÝpM§óÞD ’'Ô0™";‰"˜Da„ê–vŽ“o-ë†XdeÓ,”²SÍ Óšájêòp(µ2‘s–ˆ=ÝaÆȃÝuOÔÉ|¤$óïxPl.¢ì†ßm]–5î8’O\~PÏ`„ŠDƒ,tgÓNì) ìÍ©LcÝöÚSħ@‚1–à ßÑh0±F›ÚÈ^h„–ì<ÅP  Š`1°§ó#¿ªy›Ý%éS4rÛƒ°²ŒY“ –9 gk¸€ðÎ ÖÀþ×,@xÂ1šŒ ÓQæ%Ê ¹ 2a"óÌp0ÚxûFIO`k¶\Bœ@í çºÃd@7‚/óð%ÙXv‘’ éY›ƒ3‘ã4úaU1…–¹n£«p:¸ÊÈae$M 0æè-¤lœs¸œ˯~V¹×¦¹HO|%hÇÐ\˜¢S*Š|ë$1í$"ù 3Á×%} Ö¡s~¼Ñ4— ØXð ÇßÛö]ߨ ,ž7 G%ld|¥n+’Ø·sH¼z#“`ÂAã„TMAÕ_XºñQNãš…v­`€’çêÐI¨àgô)oœBÚH4%x/+”é#ùeßíêFÿeL æJX4ùˆ—x ‡«ÛÙ‰!¤ÆÆò(b1n{á1|÷TþÌ]¹°Nô³Bp“üùž:߇§ç½/÷ÓX+eÛrýļã{pR_vš. 4?óîðäºDHòZÝØö–׺SW´£Æî2âïÎn0Ý+i:_?s®ï}5Д­}EDNøë+æ4µÁœý¥jì ,‰Æ†ÎBð$܇"»%JΛF¿ì¨i†Þ–L4ÖÍwæ¤:âdÙÖ,Ž ù е´”½®F ÓV溄º,—1CŽö{ññ2¥x£%"ø*¨~8Â0&qPóàä–ȶÚäÌ¥¿kF¶!Ò@yòDŠJà±GrEzÒʹ?”¬ÄtÚnÇ÷CB >ƒ°·Š¢Ð( ô ø!ñÑÅî e¬13ÔQpûÇ»+›“}lȽà‚Hô2 T:¥¾î8PŸ&Ú‡ôVqüštþLÀâ‚Éĵ),Õ­6°h³è™ÀAFÔi|€8Žw¾»[¼ÿïb}‹&IãAë4bA@»kXm01Rêý¾¶|·Fé®Ñð°Û.Ö;*FÀw[êïζp öi\ =5mÎbÊšö~A¶ê#ŽO52«Mšƒ›c®…´ %y´€¨Ã*×5§=ɘ—z„n‘F¼ùÐè*×YN©{(%ÖŠ %çâwÓ·€|-â ÁƒßµäÕw(1ºÍëkÖ^–ô«´d‚äÝ _Í8³T®¬fl¡„o6¢œ–WW³‹¦×šÜú t±Ñn@Ë=ÞŒ²ÒqçáΩUîz³~ޏ ù¹F㯠H¤ÒC/tB–ÄzÑΠÇC~ÆÛqWSHYAѰ„)æ6- ¤ ËØx• zB8–NNlY=½÷­ñvJ¤‰É‹H@ƒ¨R¿hñHÁUÄq£Èðй"ŠÞòþŽç,‡VÐ*4ŠEPŒ£O$Ï_ƒ¬˜ªÓ(ÚHBWâdžÉÖÚ¼[bÁ4?lÁ éiyÉÁNY)NƧ'LZÓ%ìÕq7Ȭ ·-Ì«3/F ²RÀ²×4Â+]ú®í7­ú_Ïè0]X Ø&nð´Ó*|Åž”<ã.¤˜‘&É5­sê´zákàÊ;Y½ªéKjðS˜Ÿ@îÔnÒ¶×£ƒ_çQo-‡ÂTšÜ<|¯mâJª¬Jh:–„|x^cPúi´²È‚usÚ¬>9ºïQâ†û_b×Äø~:Y‹èGÔ>úy£ìL¸â‡õ*2mΩ%ÂÚT[ ¿åáÄI“ÛÎÊ:®éŠ–:«F;ˆ&äN¸À–N¼™àú+lýC^ †¦ÐÙñwì„ý=5~ …ìÏ„Ûþ¥oy™0@f×DrZÉâìt®þ&Ð&t³ŽórX¹)gióû›—VÒ endstream endobj 610 0 obj << /Length 1326 /Filter /FlateDecode >> stream xÚWëoÛ6ÿž¿ÂØ—Ê@¬Š"­G÷©Iš.ÅV›»/ë€*s•Eƒ¢’ø¿ßzø‘-ñÈ»ãïÞ4›EðÇfy4K9s‘ÍÊíEävÍÃŒ¿¼`žoŒ‹ çÕêâíír9cQ˜G9›­ÖSU«jöWð~·›/â,M¥žç Îypõ޾×z7‡“½jpCwÍZ›ma•n@†/3¤ÑüïÕ§‹«Ã2Ž_ 9OЦ€V„\$±G›d"d\x´77>ß|ý ¦Ëà=ç,x"Âjúv­ôÕÒêWUʦ³ÀŸ¬ç hƒ„ö¨Cw†Ž*Ô‚²ÛÊl‹{ÜÌòÅÞ‰«9¸Â]Ÿûë³h¸>÷×ûmÕÐfA$ÞN¦û`ai{kÝë¦@êq§d@<e­l.ʨ,ë®òú â(1x)èq”^÷˜¼`}•ÝH´×ÈC¶$û΄)šŠc×ZKkÔàN׺®5r? TúŒ2êasª‡õ ˜mlé䟮õú‹µ%X`èl¸Ñ*[ûå®xï(rœÍ²0OãY3áŒÞ8Hsô/ãeð-ZF×ð‘t’L¤Ó(L¢œã÷² øƒ½ËoŠ­~þJ‹[#ýÖWïÛnùŒóˆÿ”f4“…üÁè (¾.lëq*¾ëîkÕnzÿÜïð°þÐkûT˜~_ƒ¥áÏçÜð¤ `(¬ÞãwÍca„Âk“% ·—‡\·F7vq­{°+ùl{&—íSî«¢üá™Ï`p¢¡Ï³÷cÜ_ˆÄPBÓäñ ¢ê©#™–¬ B†eäy¿ÇОõš@¿yžkž0:Â8u 4öœÔÝ‚gcßDy8™l*“2‹RÒaß:¡®a¢ ß@½»¾Á£lJÔÿ"ñäÃâu §;ü‰]­ßÌHZjϵ5‘†IœS[ùqò~!{}ÑHìÓ§M%QÁ„öÍ êÌjUß$0eÚ3À2E/ë+À!s®Šœ§ñajMªö\ýZÎÂ,hOa±,ÌâüÖP˜g<7©Ñ  ÷z;ç‡6¼/†ù#ø+ÐñƒaqRBi¦Ëì´†x–` ¥ôvbx;d4÷©†²Ó£1!PÝ ;KÄP ©«ÜšVÏszP–Vo%qhðŸg.õeïUãû„;÷ˆÿ³tìZÍ%åÿVšÙ¿3tÛÏ}÷ÊpVûE c/"»ýÂ=A²í”=z9´ÊvæxWŒÎ¡v½s QgFqƒ±D }‰ŒvËx»¨GUÔÄ(Ÿ‹í+ÇQÚß±3Æý–ˆÒ½Uaº!N´Õ……Œ×ÂõUOÖ²h}ò9t(/tœHùäz¤p.àwW˜¢®eM” àÒ7gO•Hm´*½2Dßµ› ¸jaÖ¡q3wëñe ÒCg…‡âƒ‹éô™äÄGÙHƒNÄà}Áá_RlÇ'Æq°ˆ~âÀËj ¼2$ÑõYäžÀ¼ÇïeÄŸ!þ°ÿ­ó/þ+ì endstream endobj 650 0 obj << /Length 2130 /Filter /FlateDecode >> stream xÚí›ÝoÛ6ÀßóWøÑjNü÷Ö&M“¡C’¢¶=¨¶šuìÀ±»ö¿)RÒI"%EÞòÚÔ¥î®w?Þ)ãI¤ቊ&’R¤XÛšŒû÷f½M–ÍܧGvNNK) L Œ ÒLéCKMq# ë^ ±[­çIøüìí Ó…Ñé›÷m;v>‹Åt—¦öcœÖ>]îR[îmŸ–­|»Z¤›OsGDÊá>™É1-qpŸ ûä|Mf´nphKµi6ÚrÌò€Yß¿º>kz•ƈ1:îïîÂèv`îÚÁÛnóJü‚ÛšÒ‡™ņ¦Çõüô*cæ°?ìÜŽ½Ý&ëO3Žuuxî>!Pœ?‡ƒR ƒƒ&‚ Sú€RSܬX/ÈG‹Î“›‹da²üWïÜujF*¿§¿¼òݨ‚8“Ê¿3’åþž~Jáôƒ®dÀ”>Õ7*QºNåÇLï:èÞ%›å.ùj2Uê=ô•ã™P3_k`¸*_Ó4¥PmŠ NÂLøîÄ÷.Íæ÷¿’ÍêáΞé>hx°sÙžæ.}£™Rˆˆø) (9¹# Xv*ÞÆÁ9ÚÒ'Ä-šMˆ¹ÒF»CœwéÝv÷ÃÆ6YÏðtíŽè‹“y:ý’¬Öæ@°Ù«èžÒ§ä|‡9W ߯¥€ð6†þ6Д>1nQLu…PO£Ú—?Þm÷ÛÝvØžnM¨—ædÅXIø¿ÏWKD)\öX òçç@@#.u%þ9żé Íèx'´®°Ú (è± §ò½¿K`(Êçð÷éÞid¤ÄcƒÐ7ϰ&†U) Œ•[ão2¬€]XÕú±âÒ Ç®åýЉՇû¬¶¤/\fÐf#\=²çñ ÷S œ€€ Nùš0NÐŒœÚ0±å&™‡½­TÛ/¶Ù„ŠnH—kï¥ÖØŠè)½& ±sÆð—Â!†½!ft…¸¦01p¬óëx¯:3ÆUº¼HöžBDPDÇËÃÇžì(RGÑU ÓåÖ´$`F]- s¶˜Ò­är²|ñR7»Ëo3.§Éf‘.í‡×éî[v ²ó¥†ãOp²ÉŸûbp„€`„+÷FšÑá6…E„c‚ϳGjÛ‰ín¿Ò¶_ ÓW‡[Ïy„`ˆcöl¿!RDÌ9p8¥€00JÜ‹0£ ‹šBYaÜL¬î¶î:\VœQ×zÞ­<˜‰äØ‚¼­)âOc$øí)†Ì­iÉ=ÀŒ.ÈZˆ‘X쮌ËcPjAcÿ1(ŠÕx›çø zwñ“çÃ>?<|T•ŽV3@€]€´h,Áæ=7 _®_{Ò EcÓzÜ•^±ÿ·‡'™R@8ÉÀú“ 0£‹¡…C‘DQŒCYŠykß-8|÷f˜ñ{!Fœ7‡3R 3Cæg˜ÑÅHM¡¿Û¡Òœ¦X73ôy¥Û]ÕmóoQ?ì½_ àdü¾¨ž*¤Œ‡óùÊ×øßô6Ô@3:øjSXÐÅõðË€gwÌSÌ„sÄå¸f9÷öp†Ja†`H½9 šÑÅPMa GŽ”r*?v&©ÃézõÙÞ<{§2GÒŽ% c=I1–aÒÜšðÝ&4£‹´…gF,ïó EÁN‰jHÕøUðGŸåÎM) Ì £Ÿ`F75…þ E$Ín³3•Ÿ:3Ô§Õfi¿1í™ó©ï#Õ: }󦀪혺’pÙk}ëæ]bGË endstream endobj 702 0 obj << /Length 2154 /Filter /FlateDecode >> stream xÚíœKoÛ8Çïù>¶‡°âSäÞº‹´È¢›izX,‚k+­Q¿êG·é§_ɦÌɉ´.¿?ÿûæ÷`”ÔGgû#rVÿôìâæF2Ö³žúÈ  ¼*('ŒJa RZÊ,(—® ¯8hb”ÚP ‘ç„K³?þÓz½?Hƒc¨¬F šüòüœætÿký‹vÿßéàÑf:'šòŠä»š8‘ÕÿUW¿Q¶Cßþ ô@sþ9°óÀü$;nRµ˜œdÌ´jÁÝ×dnù©6 W„iz0T1Êå¦X—£b´˜oÊÇ2A´RÚdJ;Þt”.ŽŠÊ)ŠÔÒ¥—9@É$ɵ†(¿n'«²­Êq1WDÔ#=¦FA·Ê¤CwpèP~jPè –>нÌôªß3#ôñ.5Ñ?;f«Xº\Ü  ËP3€Zú˜Á˘¡îËk›a1WÝ|SÌÊÙÇru\ÍÜŽ7¥ €£„¢J%¨¥J/³RAxf»Éë÷ï‹ß^¾ysyõº¸¸¾~{RÔYU,=’‹ÁÝh’Œ@q·„§9†ÖÒ·Ÿ9À­y•´ñÑp¾˜OFÃéäGẎ³2váfD¨G1ÕÇ€ÚQ§up PZΫa-}€z™ 9'œV<ú\޾ßÊÕz²˜Ÿèõk5IÇíมð¿~A-}p{™ÜŠÍ À½˜-‡+ìÒ=¡¹w£L:t‡å8tPKè^æºd„sØ´÷ÌÅfrêЭ2éÐ]:”ŸãÐA-} {™è‚-`c_•ÃMY”³åæ®™lGnÖÕÔ=§ùC¡q³ƒKçæàÜ ‚’£Ü@-}¸y™nœ.@‡—£ár½Öð6‹/åü(gXvÔé@](”V (¨¥P/s”US&)!ÐiY±<Ö•Ëf¼é(]%•K%¨¥J/s€’f„+ÐSÇ“õr:¼{š=5ʤCwpèP~¡Pè –>нÌ>taLu)šúz3Ül#o¶ªj™z´ÔÀ É€ApKj‰¾€µôìgkCx®àír:Õ÷Ûøu}œ€­ é€]0”Z ï`-}{™À¹&Zƒ¶]ÎO`JÕŒ:¨ €…ÒâS*XK ^æ¨Ò„kã‘ÅfÁ‰”ôiÁ}.±R¦»ÄÀ]yákÕ°–>.ñ2.‘Uvúzù}¹Xm°É#Y¦Ò+z«O:zG!ÜÓñA-}Ð{™ô"¯¦Þ<@¬Ï\ÍxÓQº8J(ª@_0ÂZú ô2(¹ªwÆ9”ŸêwÄ“Qd߀¨^·Ç,auK·„ €[ µ¨¥%¼Ì%Xõ`MAcŸÌž;DoõIGïàè!®ÀÀZú ÷2è©$†ñýÑ6v;Þt”.ŽŠ*ðÇnPK”^æe&‰€$çãýC÷¬}>™e•½éxçãtÎoÑ®>lÛi[h9Ää´½OxxÒq¡E2õ˜vþù»î)#¹–Éû°›óï݇í'ÙoÝ“±OôÛƒ½ûÀ½û¯H¹$:©Ý¹‹¥D)öø®Z ¬ ¬ €ƒ…*‡ï‹w`A]`½Œq°¬ºCòØSÝ’}€a•I'îàÄ¡üŒG‰ƒ:ºˆ{ãÄ)¯æDñâãÝî.üضô´ƒK‡æàР‚4PG4/cZƈ6h5¬âv±*ÖÃõÙ…És’3ù¿Ã°ØòÓ±¸8¨‘ŒßA]X¼ŒQ,²ºËµJ–õŽ Â¤ºRåO¼;"œšñ$sPN-ÑÂí®µú°ŽN~Æ8'##œj:{NH×{ œìxÒ9¹8'(šˆÎF`]œ¼ŒqNÊ£#œšîvªŸßæšòÓ±¸8¨Q¼ÍÁ:º°xãX¤!XêM„å×ípbPœ°LžÀZ,æ«Uº\ÜâPG—¼ŒqM2¸j³\-F%ÜRŒ¼NgÕPéÏdÀpÙa¥ãrp\P;®¢¸@]¸¼Œq\U7Ìr°óaUNËáº,>nooc²;ªE¶ƒðV…tº.NJ-£_Èëè¢ëeŒÓeŠÐ,B÷äŸÚeÒ‰»8q(?Qâ Ž.â^Æ8ñêñ›òñ“Ý€z€a•I'îàÄ¡üÈ\ÔÑEÜË'ž BU„8ú Ž#[rmHëà`¡Ê2º–ëèëeŒ‚†j¨ÛÃvýöÃÍåÕÅ)~pºÁÐh’Ì@Y·„§Ñ‹ÖÑÁÚÏg­a °~_Bžö+&Ìå)Ó-âà¼ht¦ë貈—1n‘œ&¡E>¼{÷æâ‹«›—×—W¯ÞÅÆ†ƒÄv¼é]œ#¹ÔA]½ŒqŽ*kOÕ¦\oz|·‰©ž»è&%Œ i:A'åŒß˜a]½Œq‚ÂNÁíüŸÕpéÖùn)ó´»5f+bº9\Ü”ˆ>€Á:ºÌáeŒ›ƒkß“o×åjñåÉÿÉ{ Ó­q8wÀ$ã}ßÑå‹vº¸-XNxîlñ­\MnïâÛ”UNT¦ŽÙ÷½HéÜçãÜ]ƒEtqo§‹s§Š€n¿OpC¨|šÔ÷0ÈNÍt4§ãöp¸D|.q¨ Ë­\qoxû[ksëúk²¦“Ùäøn·¶:œøÖV/Åþ…Љ½g[ë¿CØe endstream endobj 552 0 obj << /Type /ObjStm /N 100 /First 876 /Length 1939 /Filter /FlateDecode >> stream xÚÅY]o[¹}ׯàãö…"gÈ™a,°Û mX$)Ð6ðCšUÒE+pd÷ß÷ÌÕÈòZrl˺ɋî‡xÏ™/r†ÃÞ,•Ô{O:páTGKƒKÔ)qkx­‰ÍGYjä×–šà*5u•„/D낺$-Š×%ic\[2.R;®œFÇ'b©2<¤Z‰áƒZ;øEqƒ×]kªÔÇbHª :Vå0ÅØF‚¼é…' ð±áÒ C^¨Rµø`ਇº^Îê¡cAJ‰Š ¥Ð³@ýnø»BÓn=‘«Þ cÈlšˆ$·‘¨1ÈMpŒ>ª› ŸG§²è’¦èЃ´@+°“ÈC‘µ’²‘á ) N1LN0$ÆqÜ®×Ax#‰™ûB ,3,#åÆš¤ÖÄ} »]¥á/Ÿ¤rj¥uÜÀYhÛÆ’*©1—ª©õ" ©p¬¿©)„&©œåoÛ€_„ mIë0"n Cqý› ï~éìo< z[¹_à3!Â`ZáIü°óAá O ‹p#ÿ&ÝŸðÇ‘¸L¢þ9ˆÕ 3CIs1Àg»îˆ;„njÒ X:Â÷:"œu„itlˆZâF“pÛ㹭à6ëo0´Ôd(ÈÄÉÄa›¦øKBfc7R}Œ"ìawÇ F‹'OËgëóËôäIZ>ó0õžû­;¶-œ?|ÿýbùÓÅúÍ‹Õez•–?=}––/W¿^¦³þr¸—¿}Xá×ïV‹åŸ½:¿üˆ¾X>_}\ºx³ú8MÙéÕßW?ÿòúÇõ¯éUI0Р3м¾À·76ã~8?_êÕ´&¸,7(§ÿËŸþs9=ÿí—óÿ-–?®/~^]l°Ë™ ð’w¿f7 ç"îjÍï“1^¤åŸ×/×iù4}÷—Õk`üÁ•Ƨé•/P“yþù¯üpoIçŸÞ¿?{ä)5+æß]㚌̈Þß;èK„”î{rù 3¡ø‡cydáG9|ƒõ;‡Ky奄•òKf¼kÌLs´Î}_g>ZçöíõûúèÑúØ=|hÑùX5u?TõèPÕ{„ª~ûPÕýPÕ£CU Õ(ae_ »ŸVo&Õ/$•ÃY¤VË^(IT…TZVOúez>»‘ŠÒ.±üãù_7?ßý÷òòÃ—Ë·ßæõÅ»åÍ£ãÁôð1ÒG¬ñ :/wÛ¡4r-síȶçH£9òš²ÆŽÆ£å¶}¹åh¹õ«É=öW¼QŽ•{Ô¯'÷~9ÚÑr÷¯%7Jº}¹Ç‘rûNí«É½—%|Çw¹¥èÍvØÃX.yŒi—}E£fl*}ïåÏYb?þœßš–Ù7뿽_½½¼¹ÞúN÷[$2©eßÎö ;_Wb<®º˜6Á§Û HßW®Ù‘Aä=—E"yas•¸j\-®cxó`s­q¥¸^ ¼x-ðZàµÀkׯéc·Â4(7o´ÐÈžöÅP¢g¨upCÌ×'Δ¦ÙàI¤¼ìÞRöÁÙz;HÙ표¡&*ßܦ¥$8±9OE)-Î;J¥<ˆ«ùXËR®(:Õ\¼h’Õ@ ç–f)éDZn)·Z~’ODYiJW”¨Çáσ”í4!ÛIJw#·”MQì9H)'R³IÉ Þ§ ûµ:‹š[Êu¯-­÷¬Ú«y"ÊÂyì&I«5Y¦Hðñè™Ê.^[©¹ñaõD”†b£+J%›Œ9§7ÅΑÜ0+oisžhŠ0жVv«:³a•—YWuÆâ3x7E˜Ì›ºsZ– ³²ïÔô¥–¬Í™/I¢ýxgK‰\fõð[O4M¨+òãn^’t¬¹0d¢ûRÂã› ¤vw3þÎ1wõg¥úöÔÖ’¯{}›#[5X=o¶j´”c[5qJ/=Zq~-=Z=Z!=Z!=Z!­8Е8[hCIŒŠžž^"Šž^œº‰ž^œ^‰ž^‰^¢ˆžž^œ;ˆžž^ôÅÏo^ôÑeÞ¼xѯ–x#ð¢¯*›Žò£ZAQg rÚnŸ‚C ÁóTð[N$²]_F°q¹e_ÍõD”žs†\ëxÕÜå0g'âDâárÍ´S×ä°i©œˆ³`X®™uY¿¥p9¥wò°™ÞQl–L›öjwý΂Œ endstream endobj 716 0 obj << /Length1 2292 /Length2 16885 /Length3 0 /Length 18226 /Filter /FlateDecode >> stream xÚŒötœïö 'iƒÆ6&¶mÛ¶3il§1ÚØ¶m[mÐØhгñ›ÎiÏÿûÖzß5kÍ<×öµï½ïgȉ•Té…ÍìM€öv.ôÌ L<Qy-f+ ,9¹š¥‹ ð?rXr  “³¥½Ï¢N@c—7™˜±Ë›¡¼½@ÆÕÀÌ `æàaæäab°01qÿÇÐÞ‰ fìfigÈØÛaÉEí<,?Z¸¼åùÏ#€Ê”ÀÌÍÍI÷·;@Øèdijl7v±Ú¾e45¶¨Ú›Z]<ÿ'Ÿ…‹‹#£»»;ƒ±­3ƒ½ÓGj:€»¥‹@è tršþ¢ P0¶þK– faéüBÕÞÜÅÝØ xØXšíœß\\íÌ€N€·ìUi9€¢Ðîc¹ èÿ6ÀÌÀüßpÿzÿÈÒîogcSS{[c;OK»sK @QBŽÁÅÃ…`lgö—¡±³ý›¿±›±¥±É›Áߥ$„•Æo ÿåçlêdéàâÌàlióGƿ¼µYÜÎLÔÞÖhçâ ûW}b–N@Ó·¾{2þ{¸ÖvöîvÞÿAæ–vfæÑ0su`T·³ttJ‹ýkó&‚ý-ût°311qrp€Ž ‡©ã_ Ô<€+™ÿ¿qðñv°w˜¿ÑúXšß~`½Ý€'W ÷ŸŠÿE°ÌÌ3KS€ ð£¥ìïèob ù?øíü,=ºLoãÇ `úëóß'ý· 3³·³ñümþ÷3*K)Ê +ÒþKù¿J{€7=;+€ž…ÀÌÌÊ àdgøüo%cËë`úí+mgnàþ§Ü·>ý§d·g€êß¡üo,û·É¨~º;“éÛóÿçqÿÛåÿß”ÿåÿuÐÿoE®66ë©þ1øÿÑÛZÚxþkñ6¹®.o[ oÿ¶ vÿ×TøÏêŠØÛ˜ý_´‹ñÛ.Û}´ùo-%,=€fJ–.¦ÿŒË?rõ¿ÍÆÒ¨dïlù×Õ gfbú?º·í2µ~»>œßfòoðmyþ7¥¸©½Ù_[ÆÂÎ0vr2ö„ez%vv€7óÛ:š=þžb#ƒ½Ë› àœÀÜÞ ö¯å`0 ÿ%úqE~#N£èoÄ`û¸ŒâÿEœLF‰ßˆÀ(ù±¥~#V£ôoÄ`”ùÞ²ËýFoÙå£·ì ¿Ñ[vÅÿ"®·ìJ¿Ñ[>•ßè-Ÿêoô–Oí7zã®þ½e×øÞ²kþq¿!ãßè­“ßè­Óÿ"ö7©½ÍÛqþGòש2šýߺümÿ–õŸúmðFÀü7|37ÿþ¥´üíÎútû#Þ_z{W§?½™|ü¾µÀâ¿í­žÀ?ë}“Yþß*´ú¾µÂúøÆ×æøÖ Û?j£þ;2û›«ÝÛTÿ¡#gÿ»˜7gûÿQ¿‘qø­~+ÄáíÆ°ÿ£™oo`FÇ?à¹?¨3¿1qþþ/tûƒ*û›¹óÛ=ûÛá-Åï“x»­],œ€t÷‹»ýo”\ÿ€oÝpû¾rÿãèÞ¼ÿHÆòÞóøFÖë7Ù·H^@§RýÏÆ›º:9½½÷þ¾“ß®ƒÿà¿_²@ ÐvyÁÞ”7ت>¸óW­0ž;ýîÿ,ù®f*5½÷²S—ë"tuMfà†Ó­pÒH?òê¶8ÕРѳ7¨­ús{‚rÇã§'Ã8•éÝØ¥)ÌÁÉBpÃ7‚øôjB{Ÿž?iX¿kï‘!ÏutåBTÊGûåþUÒ£á[ù±Ð…]å½Y¸§òú(õH½€’9ò<“¬yl(zÔs¤¹›ÛYÔœÉW"™8ZXŸã(Ö"oŸ,Ñ÷ó^k•j,ν8d8:ØïnPǦ)¼E’e°½K‹cdB#ŠÍ ZºŒÙêˆ{–ùÊG'7G± DË‘¶§CcL•·ÈEFmTsº±Qs8Kfž™ `•»÷Ÿ1½"ªæ2‚­]N”X>§ ÄÛßP Bu|>H^äXÂÉüÆí;CÙÿê'·Äb’ç¢ÛçmìpÒ ÁùëÂgrRÒ&[÷ZMûD@m „Ôø;³q/”ÑI¶æð`5ꫵ8^YÔ4„¬ÕX݆Lâë€B6È4HpÅ€oï^â碣ڮkð’Y¹.p::ÝŠG¦Ïîý¨ìc8)‹j~­n"è[–ˆ ªàX¥%nëç×%wJ<Óe3_àÍjDÌâ?MK—O†H¸‘Gª®˜’Љ1gU°j&ô†1ŒM]õÈ0`r,VÏð¥ªáÈ“4 ;aSáT*ad'Ão‘f´èXõÝZä4Ѧª¿¸×¼^lÃ>5’Åî Lmémj*0ˆQiÌè)ìíáçvõ·²¢ BÎ ^Ú";÷•ɇ*µÜ•ÃuG{š«z–n.ô˜üD0âv%pˆ¼UÚŽ­UpuZ –ãwµ(‹žœ›XÎkïSš‹0(ñÁni%‚ìíƒÝ¡/ðR§ÿAÈZ¹ï{»-UäŽ䵫Ì1?ÝA„¸°9Î8aêÑ^ŽYà†RŽK•ˆÊ§Ãα”Î.ûc.½|–Öë E²+ œº×ÏI»2!œg±}Ä4S¡,SZc>àra7Wóµ-CE¡)“û+¤ŽNí'S,ûàÏu±#Òz¶¡ `¡¾vi‰G»'ð·¹8Lz8ÏærðNï—Þ'u(~}õ…YY?‰Î¨êEÇ Lõre( ¥Ï¼.ቱÈT3%H,uè§” <èûƒÊ •RipûZþû¯Ë3=éOdçh ÄS$«WÜ ‘*~NKŸ²ÌÕX}Z0[Z7íû\(Û&únšíÞŸlÅèdˉb:ô5É}Õisš+²ÉM5ð§ù­Íy¾j®wEç Š fŒ¸Jâû|_ã N¶Â }ÈÈÃÕ™žoÐtüí´£åX¦{¬ßXkGq†¸¬¿ÁYBž@Ùt`ì ÛÁÄn§ï6¶Ü*ô!Ìõðœç•覑ç˜ñLYšb,¤Y=‹>ʳì±;UËÅ\ñ`ï4?ü¬ê÷ýùbš‹º(oô¡ôg±9·¡€ÒQŒDaÙm•äÒ^*ZRs*ô. [B'—B†VûòÇžO€NÊ·Ú b\] ÆuÝ—ú=7V²d=ºa0íäÜg¨–_±¶é–{÷YÌ`NuIeÇ×ßt*NÇÖ'£Ç¹¶”tÀmb¡HmbJ×Óé¥_8Úñâï¹‹Ýø-Ä{ µ¨=cC~¥BSqã–ìc™±/ðå¯k±•Cv°£ÇœÃk‰f@ÕŠÊÜFWt· ë-Íékå¡c·'6Vg<-ÛдÎáñhã7Ñ à;ŒpÞ&µÊµ?6-éd‰ú6 ÙÜÜßT†£v˜¥1Žó0<>Ó¡Áv­úDå!*OОCs³jxº“”£l@’ÕMÍ[œ`ļDàžŽ´›{32I~ H¨{nwVŒNSó+™A:JÈÔlµæ ´ŠZ†_\|ìɺ1*:d|¹¢ëî©]DlJÂh‰î&=~R÷¬–â>ÁMºHE¶Ç^wI*¿ÈfŸÞéŠç²y£…|uðRaÔ¼?D¤ÿÐPjl( ¹×”`k‘P4¿¤ìlõß×uÌh)aÈZerÅWÏ¿#8î¢(ßýA'<ýÁž„–­l½H`¦­0•Ÿ´($K£ Ñ)VãòÞp„^¦+q΄`¢àsÁ•ŽYÌy™ÅçäØúˆ˜¯ 'eùëÛ1ÎÚ$åü—‹,®rfí£®gA¹¥Y¸½`+2¼ç2´z¶°Dø28Øßû­qТl¸I àFb3}º]ç€ woa$S>þõj7ŸŒ1$%0Ñ¢ ˜šðO΋)Çæ²ƒ´×UÌÄUQ% ªv÷…ß¶}I£ü QhBõ ²›ô,ω1îeÆ-3¿;ަÚÊdæ]¹_®É|x ”äc¿(‚„Sƒ÷r.i<ñq•3J–_ò/ï&áÌ–íž…{wz·ßq¹ºÆå©ˆð¾¼Œ-ü”ëfDMØÏ ŠÏš·¼—$K–„ƒ^pð!­@ÇêWŸž<³æ<%†ÕñsVå5,¡¨_ ¡ÙÌ´º‚å8.ˆ<àÉSLO¾E•[jé\9ªs>ËÉüZ²ÄàIýséö²†nˆöd#5Æ>¦ìŽj‘~£¯][Z•<®Ö#E§1 ÙKÊZœ £&jÀ’çd_ÏW옫J¶VeYoêeþq°M±N3{\àÑŠN†Ãr®e0=IH)^îÕ$æSå-©$ Gl¢‘’Ö膗 bqŽN¨éÌÏkÀ 59–Ü’¬¹" ÒZuÀÖO•Â\£zl }#ðµËÉ/'òÒ^¥¢Í3RÍÚS òg½ÔÉ,ü:÷t }"õ}Ï£kl¯+-ºM£ÙÍ[Óa«W™©œóçÌ_j2Pº<•n¸O!{‘‚ša ¿"ä1hÚj -ÏNå̯Ì%æKá ÀÆí‘'Æ Ç‰sW¶DŽ\ôo¼õº°2 +×UÓœØ A Lù‡ÒdÌy°ŒE w¿á3 ;e´þ¥_£N¯Ò8¡Ã0xôâbs±Sà°R¬qðÒ„\%ý;¼o°“¦(å«w¬’>Ejà8û”é+y1v½¤Ã13¹ ”¹ô­ïý×ýW%~u»Ë+ªÅÖˆ9ˤŽ*ãµ7>ôyCx èR[ïn¹f©ÖÀ‰«VpÞ˜‰~¼Dòë& Z±ˆ¼üA†¿H·y%³÷÷ÊþP6e…D*k²q)ÐZÁ2!‚\ª>ÎI)SGÕ|ÖA0”1}Yeʬ$½»yÇ`“«<n5"An•SªÔË|ÚáeÂ2R]§é¿.Ok+ÛÜ68dNG²ÊÈê[ðµ†÷ñ6™3Ÿ‘³¯ŠÔž~_…Ü?|ï§]2¾ŒH3¾Ýø+‡0Óa¿E/ºŠwmŽÚ¼w,U>Eê9ÙFH¬ÏèµEîÝëMŒü«Uï>tiüÞ1y¬–FðëÊÉ­a·–@(A#UžŸ  ƒÊàXóÒ/¿-îŒ °ÈÜÑ5>í;]»á”æªë¡uˆh úìÏîÍ… ®#²‡R Ì?ê¼5Á…ùºyp^rLdÎ(\5jY`#¼’;žxwÉÍ$™BGð _þséë+-È-çwÏòN¸KGâ5ÇYórO$ÄÇ4æØ´ÄàêÂaq“ß!àéYQ{·=8“/8Hñz^‰¯Âù¿l“£=>Ã$¸aE˜ä·2&lHö4¬’¤”îôÊôŒL6·çÉnø»©Çc‹q︣ù2ìÑDÔ‘@ËœÕ ¹ìeÛØ"ÍÛ*Ò€´†"ncl b´m æ{% JÇTë$þäÐãHz€sghTMçš”îYuúŽ„ñ»vU7¡™ËÃf÷ýOÒg³ôWˆþѳPdrçï¾zï€÷a¿fõ©¢ÏV`yv/YÚ §ÑVW½Crw·%s²a„êyól*¾9ïq,wK¶Ïh„›w\Ë tæ­vƒŠÆ¤ÁùŒÚN£éOoôyé¯@˜P’>ªd„ÆŸàï6íá›­])ÏÜ3ŸkR<À$ŽRƒ×YÑÛ¾úHÓ¬7b‰ˆN x ¦+Ž€Cv²¥ >ñl%Õ™ˆïçjè37Ïhœß›Ð‘|–µ—`23‰5Æm?ÆyËY7g“4«´Ž§òÞçY……IkzY×§Ê´,™à&šÌ bÔåÆÄßã²cÛð®£xTn õkœgEhyBPíõ$;Ò´Š£·9HYô§Âì{/Ìðâ­ïÒ¶SÃ!qÍ;¶ŽçœéØ›ŽHs¥û–ÿùYZJºTÄSCÆšÞKã#g#ŒaÓéGcVû ª>3/'2Ÿ½à¦CÃç›wÂ7¬°>”®7øzeÈy; ë©ÌXQGðx)¨ÊÈ­yâ[dMŠ'hÄ'¤žQ›ò’Õy'Œñ Ä%£„éK%à˽E1P´îÖ·eðJÙMÝõY‹}ßâÂL ±òR}y3äÖ‚óêG7Á}6ŽΩÛ8LñËU“ÂõsŸUþ–"Aiúr·ÉÚëna[¸KžÄ¥çå^ÃîÍÅ™÷•»².­N¸L|¾c+,mÛ¦ÜÙ¶­݆•¼¸¹4¼-\©Š$AúûªFmÄ®þô_ !X¥¯Y²Èᯪèç¨Vw¿Q$_|ô#˜:¿ñKÄ ð å"Më’„x0¡ƒ¡l?Ã¥Ýèx{F \¯1cßpQ6ë|hì74&ÿh†àÛák²} «9WRÏõ ½¿Íø®šK' ˜žZ~؇°h~Ú¯Ú4Ý.í…¤e´ÉöEçrG¿— ×­™©‰¦iÚá3…v†)èׯAgæ®GÆ[\邯¦ÒKŽ.ÏÕ'vì×:%—ã¬í&ÖHÊ÷+HÌÛ¸LÏŠ·…Ì®Ùì{åø¸¬8|2¥CÂ.¼ñ,áíª¡( 8ó‚"âÓ÷'cqqÄU6’žb>Ý£‘JHNNò¥ö´}kFéfë0ʪ÷w&|c"I¨·Ÿ†xµ·âàª{lz%¼—Êé0n3÷ЏaÑ(é‚l@ø:ŽŽBµF˜aØè¢µ§tˆ8+Ÿ.ÕqêuY†Ê¼µŽíîy_6à‡¿ ·MV§n/ÕMêªxåvHl&E£,1“Ë!ueQ,²ùùÍüÜgT´Í´]º¼û®_&ܧ„ž_y­çëîØ,¤ßy>Nur¬ç-²IÝ×ÍY;]øJƒ‰GÙ^Ï]¤»U…Õ˜Ðõë¦{”l#k‡µ¤þt—Ãjé¥| bå1*æñÕ¢5ÜKíV!•ÜÖøê¢.¶n†ÐÝHüaÉ‹&Àuò‡×µÉVm`j-¨ÂI{ú¤¸^!¼6§™üjç# Øå0®º…ÅøŽØ%Åîý«‡Ÿsš,u+Ø¿bÁ½$kNž– ¹3ÏÏžæ]†ª¯$Ë nqE8$÷aŸ‡A"I„OÃfZ§±Mè7ÑmZâ>`u™'!!{@MÔÃå24Žg(KûÒà€x ¾†X\Ö¹´'w/k[ ä˜ëÊPîØkAÞâU‘<ùÖü¤°C¼‹t|‘ÒºéOEI°9¾ó+5æ²e–ÖE€˜S¯>Û¦VÜ,ëÃrƒ¯í‰5¬J}‘_˶S‡TÈ9y%låI§d·²œá½þKŸ>V>q3†õ`àS†¹®F¹Íj(ë€ïºŸ½¿1 J΂´ŸK:’é̦?ë]õpØG¥žÔÌ-õ´áŠ÷sIÎë"Ï !š7–x ùsjéæÂ#G€Cš¡jRrtÈ—>JÞÈ0žÁ‘ùŠD7nùä"lû¿——m€nÑá¹ÍÅéîCˆ‹³÷A«–PÎ[ç‰PÄLhQ²P…ÆœØ[qk{NW/°lçªÀ^9käÐ7¸K<—è¬LrE ¡IWáëÛ¸Üj&9ãaxòHûCQõºÜ¤ö!LO»AÒ—ŸÖx¢Ë8ña1´ƒªö¶çÝ÷ÙW'îr‹ÖÉá=‚­»®r8Y_¾ÕQÔ-WOcÒ eS,®)»{²d]ÃâÀþªö÷Ð0uÝ>y³ýrwÚ˺ycôT“;ÏÚé("…þ|;oM GÜÍÓ–|ÿŒç£¤YÛ~ q=9¡ìºÃÏ8ºôm;‡>LB9_M1ÚOÎßÍ4%9ªë=™¡M*СµØ e%‹êI¿žrNï³ÎÓ;a"#DZ‘Ø!L'Ë\-£âA%mað2ø‚LjÉ΃®ÚêOñ¸›x\u‚0ƒˆŸ‚û5m“ú¿÷ ⥈ÿìdv9ÃDÅrÓ‡eŸ?§5à¸[š¼³ÈþÖMܨê'ýSN­µ+ðÅ3Þ º|®†¡áý}“j7'Þ®Mö°ëº­v¯˜X¼öCÅ̦6[äÎ)kŽ#­" \éudpÚâ55(Cý1Ì!9‚=õ=8µœ‰M@º¼® F«ÿx|È€ñf÷{"¨‚¯>Œ{?´° GÜïm¶IDª} ᨛUÝ\ö’.¿hÛ–ï’WŸé×´ÑÓë+„ £/œ5Ç"hr;|з•Ë¥x®l<+šö?2*0ÈáT§Ì sø,à{woáÇÊ|4º9{N¡ò ‘äoßëÞ§i¢‹W¢¯ŽèÁÐ:Ud %3^8Nb± òëåW ýÕˆ¢À<"2­\òdùóP=Ætìø*š•h¿|WóöLil‹p¿`퓳µlâBæfjÙE%„yt[Ðtª“ÇûNì‹­º»û¾`oòócWCœPd‡úù÷ºȰMì¾F¬ f‡cP•Õ£™½ÚÄÐQÅ’þÏÝá—Ú5Ý¡¡ R .ËíÜÍ| ‘àÁîÓÐ@Ú<ú›–.‘<³Ì 7´3‘2èX‡MB],Ì+l«¹Íp[ªñãö¥ŸÇ³fžÃ¹óH˜[æWs2Œ¤ DCI¸ù…oe<\”f³Iïã‘lF=}Gô²ä{8ºq—©òÈ»†W,jÒÎ`ˆTvKL–:tñ– !â=+Ÿ h«<—sÒ‘qï‹ÉéÕJäªBÙNAÓn^'LWS€F “⫘ßå¢Þ@Œ<3"‰*µ©z¿v1!8+í•ÿŒ˜EG'”žDêV#J%‰0Ï´•ºøO@ùÑÀH€IaÅ ßO¡Îú4:ém#Н½_í­ôp¢'¦÷w¦Åiù¥“_“Iƒ{èL—Ùû@œ¹9ÐGGÄ·cáPC—£…ºè0X¶ìý²…ˆ¥`6R0äP`L =T„‡çìöó¤ð½l uä‰ý ° aŠ{¶¹lߣœäÎöŸs³Ã±*•é·.¨N+Ð°Ž²–J\½ reðlâ§ÜEœTÓaP]è"7lšã¿Ð?6Yæöu_/è¾éJjI³vÉ|^ Ö¾í¸ÿ•¢µ—ì¡\¨¤!¿,ôÌ«ð„O1ÔggÆÇ rÜüD¤>Ȭú\t€ŽçrÊŽ•Žåˆ•iÒ­s'þCÕ4¥ºv,HÜRk*‹ò‘)Çï“ ú8áf×Ýw›>…p¸MÑÕƒ}[S:Ô m8L_Aì%GW°3õY—ßFÅÌ·ZPTÄÑ,îÃÒ÷ûy40"i LCüucééè_ï*ƒçì5HºÚï(ÎeAc öOÎ>Ö…äÂÆ+*%}ÞzM!.½^Óû³æJ‡¬ÅìlyDá̦Tå`~– YBkgq‘­.ÙF„ˆym5 Õø¡½š')Ø ìøÙò—ëØ²N7>ô濎¿b« €Q áÄ 2¼"B‹Á¼´%{uÊ6@#:Hç”Q‹ h¢‰‚.vkÓó2 í­¸©RóªÄ®µ%ˆ¡]HÑзÆIrÜW‰Yr÷׳Dqs)ò ÂW¾uƒ¯JoÀM~ ñ¯V|áY®h¦#~{^Ú@áÔ»ÂáëI°›G%îf*Q~—[h¸‡iâ½ üÞÄI/ƒ½Òø^œF¿§gêKøÒ—³€+œ”j¤oÅJ+3œýD1 Ü»_½ø<ž›©çG¥éÂX\H0ºjïaɵQÛ”K4L%gv¾™{,¸qTTŸ°öÃÒk@=chêRâ¤^ѪUùÞ«™0<üüœQæ¸Hy©1tw£§¢®ò]²KpД64Ðs(ªtfEa§Àáua3Ù÷È-liBA~yÀ'Ï 9ŸëM­#Ã;Ž&…m2er'o¿†]†ü9bÔ=`ù˜ml ᬫ_“ó ÑpÅÄF­VÉ.=x¢Õí) ‚ë`¸˜¶à&OA€Ã"UéYV§Ÿrû7âHƒh>Q1^ÞÞ>29i$Õa·É¶†íÛ>È9 a çpÚ7Ûš‡¢?qÁ<¶nÂCÌ@mü‰îÅ©>³à|L%àeì¸mù'ö»q¥/ ;lørï×°$ oWÁÛ¯mÅ E]öè%JGÏÉ} ɶO.4ÀðžRí¸¸ÀAñòXÊʧ”Z.…;˜]cuGNbJdM`LåG%äÌA\®¦gu¼]èY4š÷8^”©_g)¥Ñ¤B¬Ë)#ËL«KUk¨î^*xè=;É÷ KMð9‰5Õ‡œºâ Ë®å "e:S”-æ×ƒ#6›38„nëþ{‚l'¹Žù/ïœ8÷Æ"0"¬iK¨óëiÌÙ~Ã’°÷ Ê’Ëtåî¯>4qŒ±')äÎÑ¿ŒìáÈ™í\²ýbâG‚ÄS06%öÕ‰Û Ò H{YÉ Åì;@²ujjÎJ†þ5hL Ò£ÃLaBS=2õ1ÔŒÉAÅŠâ ©°[ãÊ€Û:fS(Xwù㹜Ùùm‚LŽ#µ%xWµ‚ñÆ’æ-·¤7ÈkÅõÁD ¹ýÆZë«ø¢ Ù+!ðWâV[;‚Ÿ?b&]æùDc!˜ÕÉBO …zU6A*ü*ZrJ2ȤØ"_*ÈRõ(D ¦ÄøïzN|½ªØ­| =R„q›G‰YZNüȬXnØÒÌæS„0‰†*7iн`9z‘Ý÷Õ{ùég¨Úó€œ3KþîÙ—rߥåñeØ?q=–Ë©F—ŠÂ«[sdëîtt´’€’asé^ sÝ¥r† r¿pôÐÓÑr‡x1qþ„<{wÿ½-Æx_1äl7R©¸.³¦Ë×oLe;-ÁTß«ÄÖ'qœØMKõs~u ÂF ¬d„ÿYBUÁž£>Kw€Âfs”õ‡öÜbpôúäÓЯQÑmØ$°ÅR7?w˜¿/2ÚPaBó÷̬›js~)àiŽ\ð¶]%ùº«¡èÉ¥ËH®ÅÙÕô£JVY³ºZ² R=lM¦‘)Y®Kü”¡ŒP -Ķ6k¸7ÈñDŸ²3>±…?p9‰èËɳo`ëX×Ùr 5òÍ‘ J&½RÆÄ·ò¤fë¼=”Q<È6~…ƒ|VÏÉ¿¶¥<ž)Rso,ž@¹y¾ @†}ÝwÒiþÅ4lÓ³£Iœ²;rêT·óÉÇ{?`ʬÊ.½ÿ×dþ)@»é®gÞ 6Š.ò1`,µÑÝ<…¯ÊÈÎ:eâKtŽFÊðƒ?wú]Ýœ 2X­T­þœœ^SÊ3’[«æ„C’=jk\3SñëF·M™¾ìqqÛ}¿aA‡þuVø9ÑÅ-?!’ÌÁ`ló• Ôá*Õ‚Eñ˜ê³ ÙgÅ0bÎÉ{¡S2r²ï9÷v——önÁ›rw¨ÂvËc‰d:Œ —…ÚK<‚¿ÅéC|ù…­I¢Ç/õúè8µ¿8£Óë?Vw˧i…Àó“ÍÁÍã&‰[MrÇX›‚ ¼gzxÞ‚vXœw …ú¸®ºT[£t4 ÏX–,º:Äö{ÉÝ5–> uDê Ò&ie%ï—hŽÆÖóõã~~GߣÖk ãᨠ+‘õé•E.';þ™¼ýcœj'2ø&J½ô¨¦‡üÖüâ+>5ªlÖMh^ङá1Øö73Œ:45ýzÐR˜ãÑŽ¬{DV ‰àf…e œži¾™ÿ×*ýcƒAY+-~ơɳAhéTŒøò¶lºã´ÑqÜ©Ç3´Ø‰ޱK›ÈE¸ÍšO̪ßýï‹øvè×{$¯aøQdtz§+×Ô2Ii €^pújÕ­÷n‡Ö³Î®•}!Pš*¹á"‚½Xž¯Ó2Ði&4(¾ú-i(û“X ‹RF³_~X·á*Dü´8·™˜PÜš³–0=_ô‹O0ç—7êP~èf&•J4x?¶PÄÒºéiÙhW0Ú©íµXÞ}‹(…4~AQV++jÆwxÍX`À`rUƒqB—N+7¸Àc£¡kd–!¤¬®úCÐQ¦r`óe—9M•öA0"cÅ>—ì5—ɼžŽPà‹Äã™(„1 BÝP‰¦;êxZpq*ÄZU‡Ï`­6‹ïò(ñK9Óì‡cõŒ÷P¬O˜}àŒê;Z Rð3*Dì í“,¹–ÖI Üb“Ÿà ”äTqP$O>˜¯dŠÞçþëL„‡6 ˆ;A=]>èöümÁ ;ØdC»yo×WF°U‰ûx„AGÏtú‘÷.ò—ÍÀ‚æË$„§ZS‡dˆUgf¹?E‹ài»)fÓÏ>,tRum¯Æ'«>`I±l%˜< À+Û‘^kúå6VfŸ²s;gä¨jƒ‚­wàžÖ*&cÆyl[¦#COF´FPšûïÙôyZÉúTñÁ¥t lDŽϹ~ž¾ƒb íÐ?§¶—¦\Â~hÓñ2Þq¿®ÕûÄÜÞë·u¶1Lçá€O]榎V§„„G[C-wù%vDÛ¦h¸Egï[ðR´¸3‹ð ‹BY³ñªÛçZû(<ò«µ¹Å¸!1;bÅZúÙÏ ÙîõsŸ¦Þ7çƒteáb:=£èdÊÐÆ·-V°†Mäîlâ&<ÑŠù¦ºÅhM ëÕÙE`^Æ {3Ðzqˆ ý2c †›’zëË`Ê ég‚^è÷?Aèš'ÃwÞ~HÏùÑ]y挟r†Sg éC(@5óA?ABó€Ê™ÿuRBf{ |åN-„Ðâƒ›š·«£/]ø™O š=ß9£cxí—‘*ÑðÃøjÜfQ÷ލ"HQaÊ/ÑNSõürL+f´éæ~hÖ6kÙdØv^_ r9>þr¹}{õoŠåŽ.µqk«e’ã“î$žÀûª‚ûêˆÎÕ :”Dˆª™Þ-M ù*4ÔúRgfUÃ!‘¾šïnØ‹Bšj þ õ‹¦/–|´-Û[KB¬„@µKÊvÓ¾î(þID;Y1»Ì¡¡­~ë_ŽY*SºàûÁÿñ¾½øi(‹bÛòÄVÌ^ù«&pgŸÑ#§QSx—æ3UwÄ·Êlp•ã«9WD¬ÛØ;¹Dóµˆã8kÊë÷+´©R×ùCÃs4ébPø›ÔRª9–ºe„ èDÔ'’7á…º¤Øc£þÁÈɱ˂=fùTE`×zš÷nÎ)CNrL¶E _ 8üŒ,7‘±;-œ]ߕӘ›‰@(^ÆE§ íþ¸ 'C0?_5Óäöùêän©†¡†ÀKxrX”¸Lö¹];”G׫{Æmš\y› V¯w\CGÇ$îãšÖ¢¼Ú„ïÝ\>¡î’ú†­s©Q®ÐÔÕaÐE÷¯f†!óñÁV•Žïâpý²4£ ²‰ZqǶ=¿íï(ìîÑÛ$RŽraÏç+©ÏUÉU6(QÕÚ?‡r8ÆÒ²¤ÇzŠC˜S²EäVßó¤f*Nú|M`MYñ¼šïÜt^ ú:Õ“ .Ûó4­h‚ØòɹV=Öå2îó˜zÔåå©Ú°7ûô®Ã—(^ùê¤qæ¹±ÉFy<<–dæn”¾ŒÔ6>‘·¿ðG‚Ƚ 1HÔí6Ìñ ¶RBÞ!IglİŇ ª73»({\Šag@žÆ”†„#Ôî¦cXÅÄ7‰ HÃ9ç© 7£S;b2¥ªÈçOël³}‘ƒŽü]JùCã…}·•Ù‘€Àa€ŒÛ‰.)Œuü’¤žƒ¹;)môâg‚nâäå/Ì>ExÛÞ{YN³¯IeŽ—þ‚»—Þ"=Cj,*(ða¥?!¿t^¥ i`¡¥µòÜ:ý1­Š0f޾ ¤ÇäÌMkÀ±åñ‡o|Õ¥Ò¾¹·ÿÒ0¬ñìÒé!ï³b܉™;7hI½×'Ï2Ä–…¾Ÿ Æt~OX4È }Xfv­ˆ½DNó“Ú¥_ŠÂhqì¤@O!)nÇØ›ÒyâV(ÁeoÆÑôU–_‡„Ù‰¡4oe‹š„æ2ž¸Y0̃ðP£Ge£9T€ëÕäå»=Ž|Ú^“›¦ù9×õêÝרÍY]òB¾À#/›x éy~r ­Î%“@;f¤úCi0¹ØÄ˜æ¦Vï|3™Î']ñâ¢ãáT\±ñ>Œ‰rhù}<œ¤t…¥°T†ž—vnÒ¦ið8¬ˆ‰Å¾ì60º;*T{S朇9,=Øß.NjÚZÁ§¥9¼ÊªrâäõD¾Eø¥ä‰SRÙìCœd_܃s¤™YЪ19Y}8bòÈ\BŽ×/Àº£_pd:Ûà)_–\ônŒÛjR•UL}´ï2,´Og†h#ܺ\ ¾\ *ÎVj¨D›4áK©6ë `ÕÂÎó8á–n¯V¸êô¼¸ÙQ•€ÈÑ„†ªbÝ…žüMy%‰¹>z’ý†k Ê‘üý'îÁ¡GÚ ,\ä@°›ŠD¼ ¨7Æ{Sêx!šdÉSæNnì‹ Á ç`¬ ÷*¶é çÒ/ €Q¢ÞoW¶1s„–‘™±“Òsâø•Þ ¬÷ž)ßõ±ß›’… VKÝ êÎæ`”Pã ªi[ð?f‡Sàn"E¿ÀÆi‚¤^áW³„nZ‹(,»ÜVÆæÌ.ä.Áåj‘£Qq•ÕŠÜ×/kmÖùRº>i‹ø".Ö‹8Õñó‡H ‡£…f,à…¹Š“9´—Q»‰JàgF4Ô!ÉhȥƢ?=×X¿IIŸÒ‡²ÍH3&öÿS6>Q¨Wo˜&c¢0¶T:À¯!µ™ãÎ^§‚XoÒÊçÖî=ÇMÉy‡Ï­fD^“?ßû³­Nt¼¿a63{ô^±8$ ½øÔøæUGá§š?l¶ž``憂ÒÝŽÖ64“yÀHÿU§§’›`x…I˜¨7' «¯ÿìVî'­‰oUÜÕñ4•Ì ‘á7«ÇÈò°Ö ‡:lMˆ¹X퀂ÙõË~ áÌãL]ŽDžó Áþjpm4E2ƒîègÛ‡ÞÜlg:1 ‡®óÒë~|‹Fl­³Cù WqÇgJ<ý¯ÆúT…$ Ó].ê ,µÑ]¼%-ñ ^îEñAy©¬¬õ;«Än°ìè ë€VŠÊQƒÉ‡l–žÞôtDcóÁpö0®–°¦{±]û`‡ï5FIz^Cšëas)tˈ°§“0ÉÕÔqQúrfß/?k,w‘‹¼¾<',kW¤ÄbÉBÚÿXê¹ÙW—¤EK˜nÀ)V­†£Ë@=âÙ‡¯ÿ³Ùr²ìðÊ/ët~ ñ©¥¹(–X…—ÍþÛbb©%Õx¼ú”²ªKùÖðö=8\7á3£²º£»é»²kc³1/ó’½Ü6â‡R¡„§/gAwhö}¹·D¼ÀtØwj»L$Hû§D¥w¬Š[¢CQ£)wñ~“t+­¨+šë„êIB"´¶x¹!ç(­µš0düüI#dWÂŒ:xJ©=½Ê)F° ¾,ï§õ>PB*ÅØ ýؼ÷Y~y´T{% UÝ&éC•=¡ÊBuZÎLí,+E|è…è‡ÅÃ3ìíîÕ#i•UúEK¨37L‘ànïr&šÒ¼¢}ý$f—²OÑ<—üYqùÆ&Dƒ? 1bm|g~=¡OüÁRl›Ô­wÿNÿ‰áSï·Ù¶\ÒÃõ’±€z´¦âÂÙabÖR©”a'­$šÂã' 5\ß Þ%]mSEC\ú›]ðO]¾ëˆð pFiæ4‡v_Ì­3¢ð&…Wûxk«’G‡ë?âö‰iöD‡Py¦yØ "ѹ"ÒÞòÓÈ·.¬®oNùâ1¶BJøŠ:HB“Á/O•‘ìªP“ï'.li‡Æ#ò †å¥Å’Õ­C0ú—_ „TBc6g2ònùoz~-©ÐLEØeÚÆ?3NOr=kw5/Y;(0^¬"KµP«(«,®jOɾ{Ñ/xPôœœG¯N§”(Gb­]^X8û'GÂ%{Á<]8Q|.è#I]R¹Qal‹‡¹ƒZÆ*G§Ú€ª8›E¿‹&&ixß¡K6JâJ…>$ÜiÖ-^Nx;ƒªú&RLµŒÑ·{9¦Ñ^g¤1vr™Ø£´s–BÝš%Ø*!’`;(ɶÓ Ûo²raZêŸh»¥Õ‹ÝŒÍàKcÝìóí¿oá°•C„ãò¡”.›ÖÙ‹¤] è¼ÍkSY>Ð+ø5;Á%ÒîŠ.“ÍìkÇ»•fÓRÝ ý}_Q_4ùþ ›Šú8Ü Âe¡|ü5 qëO·ízááý–ra÷!T´7þN§‹Ü®6FaŒ ÷YŠa¨¬Eá5&¶òhÃ'cÁ‘iÉáàp~H}J*Y:Vƒº§¿·n ‰··Š´x<§våÃ9Gšx¦)ÈíŽß&|ÄâÇü*7„ÕaW ¿Iå5¹Ò <ä©}ݯ‡²-VSù¥`8u‘ôóîà ²¿NñëezPãuÑQ…ž·\À[;ÂOU®•áI`}£LHa7¼%ŽéíkD^ÙÜÐV_wÒáCÿ–Îý„8%ÆJ!¸ëÚ» Áõò I?Aò¹Î{ĵò„4+Èv°®”•_ö”›KFâß…-3»c²Y¨2Û6lç×qjX+Ui#Æ»åÙˆWæ¦IA:³y ‡¬î:0î½T¯ÀÚëlÀ®®ÿêCaÎkÎ ×èö¬°{®OÕH^lmoÒZvˆû#…qos¶Ø… ÈLåŠ(ˆ"±µ™1IkÿPsÉÊ|òq nfŸê×}æsó<ikÙ’C> ¦wóL¯êK¢Ç¨Ÿ±‹˜.Ak,c:Á'ˆ‘ÓÙxKv~7ôYÆ“#Nèê¡ÈºRÚ[ú'0Ãad,Cð}ù¹¹»Œgh1{€Cz}žP€S“Y•þµ›ý¹8_ƒÜ¦ÿ–À2Ë'kk¹‹=6µJ$T*êâ.÷ógú÷ql/È Sˆ{Mú±yœ+˜ÞÆ£ ÆŠou¾"[ÌRJ3È?…@\Ù¢A:uÚï|/¢2$rg í¸}ú¼*éP¾}DI³=i–Å)>óW£G _ÝÝ5ÖµäEìÎ-ÂO¿ŒˆI<û‚5Byk¬0ò¼¿‡ƒiànÞV&ZÒ» òQ ¨Q!¢¦e™N[#ÏåHÞ̆ú×£[Æ‹ï?t7Q>$”AÖyÈÎóIŽ{àJøÀֆ̖ηkÔáÒÀ$§MïÂdŸòÌG9eR°_JÍqΪIw‚h’ÁT2au£7dÚ!«{–>—ŸN«˜å<8äÁÖÞ»TïbIÓwo:1¼£ãDsB1£#ãÏ/8·Úæˆüêc¶µ÷ËÇÆs¦?´Äk& ²Ä.‚Z:fb¦F>×Töj¬Î7ªDÉ,q¦¾²›Qv²yö¬J#%Îán ¿úPÇÌËÈñ¯¡zõ±bàFówj«`%!u§ûƒVXówR HÀ¤¬?ÆÂ.ÓQÕàÝ0kiŸÈ.Ý;Çë¯-©3q³ïùôÎ`°&¡|¡Øv o‚ok‚ÌÛ“H~¼OämH†I]cü@ž[¬߀¦}ˆŽ“ÉÇ"´[aœt~´‘+ 3ü>;X>׊®q yÎëý†<ôTë k­aÿu„6ĸq·B$DÚgg Ï×y1aMØ%”À°ÛeÛ_(«žöàßÞ]|‰YÒáÝF 6²ó¯A6VÜ fù…õ½«Ú~ô¨L ‰&Y¬‰ºÎÓpڹ̗îh=Ö¤_€œÕ¹SÇ'ªc™Ú´ j¶ò­bFx£¨Öw¯éöWú >3Ížn(9Ðf9"²,. Ü”«u_£ôZ°ú௚ªŸsü‘¨¸P­Oýq/ p³vªRTöƃ©½ƒô8qÅ1îóâ5Úº¤ö<ü§a–.?u“±öV«íô×ÅTÚ©{žoµN…@\>8)×)7çCõV·ùa¤ è' †Tˆ›—þV{q}T‚6G!ïÇÌ«†Lhw…3Á$š|n#°^ÀÖe,”r°#«º¾æáVIƒQ²ÛFmK8_šŽæAιk•])“˜âÂÜÓö%„èqå‰'|½ÔÐ_¼bN ’Ä,\xÑ vû®†¤ø|y®ÙaZyè̪o‰¹ÞI¢ –ò}©0Q.¬ à1pQËR¦*ïFÐú W£S™‘ªÿG‰€5 ä8—¬Ÿ‡kЪÇ@ZôëfÝênnp6VëòdÛÍÐÀþÖFNh¢×Pjl\±uÖ¤®ý´Ù 2Î8h"VÈåxöªãnKT"SfU«®±Ä;«Ñ¬m9YôS Û`Àã=Ô¤ÌÏ¡°zi(ÜÈÝ)ÒŠkÄ<ä+جEÈŒ˜–¾«=4q…É8ZÕÌ¡ÓúG•‹¼ßZÆz¤‡¶‘ÉÊBkpïÄ!ʾôÍtÊSŠH„g>À£W¶œ¯×¥þq‰£Üb&siõL\rÕå[®šS»™]eˆ™ú 9úAëv°Šý¥ÓoŠ-A³‰˜¸}ŠgJº(=äûüztþctr½5±Úð‘;÷Ö,ÒŒ‘ç–NvÊBÕºõŒµ]T jª×qW¾ ÌF…½s~éH±0›½K-ñ÷$œ4S€d‚ï¼âñëT¡ç椼i3R«—»§fœSBæ7ÇÛ´'œÕkVLñ™aLf°ÍG°/P‘_'5€;ÄQ*/é, ÏÖQ"°;<-’x <ü’¢æ@p¶ÜUÔ%EwܨXø5Ü´Ìp(^1ãú¡6PËýgXìvI@°¹1´üŸÇ±ðæ¢Þ_'ÊÅ=ÍäL<r§»ÃgâûÜ5hçü›U1¸ÓÙX¥°^4ŸvÖo­>ËÜ!%%úŸŒ‹âGs/>aJ|‰‰.”Û€Æ+Ö Ñâð~B[³|,D1ðœW¼9q挓¬ª¤{1ߨøœãÁ5VÖŠ%ŽÊáËï[nRwç”»Oé;Âuˆçz?çyÊP?øýh_ÒÆ>°–ˆòéÀ í[r¬ÿœ=†©v7ÙN_ÚøãÀžZ÷'±ÅsJå/³áÄp:1RR>RQ&ÌSíâ+°©þN¯M"²ÊF…™þ¶¥nO®P«ØžäÐ%¥÷8؉ïñ¶C,³)ѵ³`ž2ÙP±Yc»-i®Ž³8EIàB¤…!âEöØ]’KÖ¯KJ g'à:ù­ûèüt#b”hA·“¥é}~$´ 1…0'8WMNFyrÃ$ÁRˆ^z²`@» —£ý0íWÌ“nèú£Aú„T°öïÐ '±Ã¸Òi\¦éšyÇÛØ s°†?ÛH›†™ÈÁf¯~±¼:‘¿b~ Ô£âßÁ db×}ùŽ«-޽s$Jlñt6"Ì N ­îFÙ¡$<¤&H: FXÁö¤1uHÒãFÐöÅñHCÇ7zŒNÛ¤·qÜþägÔƒ’ˆÇA—æãÂÀ¥ÖÖ$IÉ^öØàTþ…-ÍÐ8—Sòzܾ­àb'чú5J<\þRf^QÁ¼öÄZ®Ðàt,ã-´9GíKûxm²û.99(^ƒ`Å–4¼è~&ä,I¤’º–ÉçIºÛÄ;µ­Á‰ÔœˆdPØïbþò˜¡kÇ+h-íx>b²”P$½Å')J?* À[-ˆÒMº,È1bÀQé`Ñô±?õÎ.^Ø3'‹žéûgÝÚnÍ„dx傉ò£æ™×…:Y…†¦ë¢öÜjÕ°Òù*­ú½p›wÿø1X‘erC¾ÈVF¦x‚¡PÙnî1‡ê…=Þ™fAòžŽ{æše3‰*¾R»4ó8FNƒbc!Òž7ôñ(篨Lh^ò l œµ{°È¢¡l[HYgÄ“AõÓBJFúÏeè}vî -DM0gƒ’ -»GߪS™ÂGŒW@¿º8•Õ¿vÊ´°K‘å`ü?Ÿ`úÝÿuái¸ÃZ‚rbŒ›U 9ÌÊŽ¤Ö×ÊjGû¨ÕæF+у_ßnj1yvNðìê{HŸÄ}ß½•qOýikíp¢(âk㤅ÂhþšI†/v†#“Rè°L´æÚ‚ú=%2Åoe·!£ì›ŽÖ¼_2Ø|Ñ七$5tz@”{jÛUaâå`‚¸Óµ|mém‡ê\T,ÉŒE ú˜¿<‰3oÜ£ƒîÖ{Õ*bƒHƒé°•Á¾—&g¹ë ußáGcç~Tr\ÐU=×~Û”y²k{+`ÔÏøeQ n},«AÒ^ ÞL~sHŽˆ­h°Qé0ú~Ì *€D?ia£û»ÅD(® ­‘1ïvc‡§¸Yð0­· ¢t“άa¨1·eǸ›1CV–V\wÉS8À¬qÞm%F ¤ËMŠ¥îOvOƒnÑb_—Ÿ'ìÏΕoáE€…\jW®6'×0Hà!ůæüúnIê9ªM"~Ï‹ÎÝåš¿cKypY;§Fîyø'°¢­w &J‹¶#9{3â=G|½nðäc#ÇäB.áEz£ qزù­óÖ+š5 µ+«´œ|‘ÓS·¤•‹×äm\ú¸غ¸PX q"òËœYµRÞ^uJ˧èg˜É\tnSaçaÔò‘#‹Ø›¸Œ4Yžú• eƒó‹³Ðñ1;ÿ¼÷ óÍ×V,‹©ÐcV©U[åé(d]ʦ´EyÁ»kŒuZïÿ?ö3QléâÚöKcïÖUñ-³§qsëñêaÅçN5r«}®âèsñÑì, ÉÀØÞ‚Â3¶~¦lq4[XSN'¿I…EU*$c ’)ŠW:PÔ⨠@s’‘íñ~÷ o1lï9hƒ*|Iäʳ ß›ÁðšŠÖ]·¯›Í/böz]d"ìéÓ=ÿ°á„¤”˧ß¡u­N? éׇÍW¥ð~ Úaú@²…%q^¥1ÿFA_ªags1ku9^¬{/«^žlªfé«q¢X7·xþŽ"¥u¾óQŠ(06#¬ƒvz+œYò*Ë3ŠËBù_$ˇ_EIŸ½î Fäbö~«ñЬFê·ð’¬Ÿ6.éëä=ô±]³w{¦E$<žç®%<ƒA꽕íw$®*ÂÆé_¿ºn¯gtIRZaô°ðEu()κ?{‹‘ží8¬p=õÁá@º€@þy|0ÁÔ¾žý£×¶vdåß^à0gZj_ Ã4˜nNÍ’ÉêK ¹©„(šR{VÑX‘šÚÀSÅÏ, ô™ ?-—Ï`sø5éÕ‚žÂÓë íÈ*§P¿D5{t‘pÕîzÞ¢vëæM£>‚eÄn›vÛú&©U§ÁX³Dñ\%wäK$-—}õšùÇ5UÈ)/~ÙXáB~Ê lÙP ý×kêÿ°²VŽ:äÄô.Ÿ»Ü§R ”è0¬H±HÊ®‰Êƒ@\®§ìcÅM%? p’zM0 ˜…‹rXærÒÊi Îè‚©î‡!ÃÀ58¶#$IÈåDfN0zÐÐÅ¡îË£ˆ[bÀw&§’uÿ.ÞX¼U8c¢\ù«95Ë`Ï¢+l?‰€ÇÆÜíD´±±#â£qr4ùÊÃêÍCgWQ¦Déún¯Ïî8¶]EÉŸØ„ÔM<Äß„öÁÓ¾“Ž*³‡ZÛÄ­}笮s¬¡À§Kµ÷è@Yt"\»3ÎæZÇ8_ö°\C'› ×\­™ÃbÙ!É¿Ó ‹éy=4Ñuçß«~ò €m£ø„¿…Ï ¥{l­¦Ér» EöÓÉÛfæ«¶²|]n"ωuãðQP@>spÔÊ•à¥a% endstream endobj 718 0 obj << /Length1 1398 /Length2 5888 /Length3 0 /Length 6843 /Filter /FlateDecode >> stream xÚwT“ë²6‚´ RD¤JD`ÓIh"½÷^U@I€P’„Š ½)½7é*½ƒ(U@”ªt"EEéEàuŸsöùÿµî]Y+ygæ™öÎ3ßúÂ}ÃÐDH †²ƒ«£8!°0H¨¢§§A 1aHÀÍmŠÀ¹ÀÿÖ¸Íá,…”þ„ Átª¨‡BµÝ]€`1 XR|KŠ‚@·ÿ¢0Ò@UˆÔj£p,€[…öÆ q„<¼P> øöí[‚¿ÜJ®p  Aõ 8G¸+!#â4AApœ÷?BðÊ:âphiOOOaˆ+V…qçz"pŽ@c8Žñ€Ã€ç-õ!®ð?­ ¸¦Žìoƒ Êç ÁÀ…  Gb .îH$dšhé Ðpäo°îo€ ðÏåÁÂà…ûã}üå BQ®hÒtÚ#\à@u]aœNAÂÎ,Šàñ€ \ vÀ¯Ò!@u%# „ÐáŸþ°P à c.ç=Šœ‡!\³¦‚ru…#qXÀy}ª J¸wo‘?ÃuF¢<‘>Kö$Ìþ¼ ˜;ZÄ ‰ps‡k©þÁT€ëà8 Hê–˜”î„{AEΘz£á¿Œàs5¡?4 ´'´÷CØÃ ?,ÄÄaÜá~>ÿiø§ƒ0´ƒ; €G'¨áö¿eÂü1/ %ˆ@?0tþù×ÉšÀ0 éâýoø¯‹¨˜ikê« üiù_Fee”ÐGHL($*‚AâRÀ[„ƒß?ãBêø_-¤= xì¼^ÂEý]³ÇðþÙ>à?ƒé£Ô…yÿÍt+JøÿŸùþËåÿGóó(ÿ+Óÿ»"uw—_vÞ߀ÿÇqE¸xÿA¨ëŽ#¬а Èÿ†ZÀﮆpwýo«BX%¤ÒB`qaøo=«Žð‚à 8¨ãoÚüÖ›/œ  7Daç‚ô_6–A ,›¿M,aåp¿y.à KõÏ:ÔPì|ûD%$ â Ÿ I}À„5…Á½~±("ŒDá.@BÏ~@{p>h ) š0ì\øGl¨;CHþ‹„ÄË¿Ö÷‚Cã(¨L°SupËA¥«§Ðò ,éfêÁQ¡Á‚û¸.µa›…x“¬ÌIgê`õûNmúÊnÙ³¶}–j8j½Å÷„8ÔW8ìbÇÏö.Œ&øì³qŽÓ4=±HV¾.]Œé"2d¢m§T€9t™pÓøþUÝñ1Á“‡¡Dý–vH‹~k{eI¦.#Ûmó/ŸŒqMv½¦Ë;Lå|r}´m‘¢ŸÎ©#Ûzˆ÷¬ ïéë¦ëd¨íñpù;W(ŽNM¦—MUœ¼Â|:ïòÏœbtz;+а®çs|ÉÕú[ŽK[Ö7xÛo9Ú&ÚGƒ¿àÙéÐÓ Ê©˜Üü•HØTvIC|Â>Ö¼# ¡ùz¶ì»³vXˆŽ÷ähÇÐüOw-ËwÝÁ¼‚zñr§¥K_üê¸_Æx؇7ÿU™L·¤&À˜É·îg”×Íå’5½Ç2j!j)•êØb*_4};¸9à˜µ"µÜì²HÝçò»{>xñÓ¼íÖVežI·Š(d }4~¾fÚ7½àÉÑ&XäM-4­*Zï麰ç[áµ`­ÛãŠ*ô+÷¸J|ÿ@÷(% äÈ~ºÞÃ$ÜÁY6µØ¾{½”8FT¢Ÿûüh'ñm7ª…H àQ}´?Ù NêеxÒg†WėÛ${òº¨ˆå'Ï~È7§h‹»*NŒÅêÇ›øz}Zò›—èoÓ-„ Ü—ßé%.(Ò8ú ]™â}DýÁ¨7h-þqt‹ÒüNSNßHëè×K-%r·Ÿ~ÎÜØs`eÙΔ»ÌaÙjÃqfw†²¹ú]™Í¼`î¨ûa?yý–'ÇWfâ¥ú¬Œ×ó­5Ô=u¬A_pb÷&Lt«É3ZÿEÙˆ¦ü®ªßîwŠ©¬¸®»I—[¾ÖVî•9”\&kÛµ6ej?ƒøÚ¶:ÆÛ=à{åy7hjÉrJü^}‡è–÷àJª#³ICHé?zô©Ððºýø} äxÜÐÅê"Ž7_Û^EoÏ·±ÛÄÀ+jø‰ñ¾ÉqIá†Û|zÒ2”CMÍaÅÞ=~ìœ+x?Ú.>ý;¾¿‰BÕ"n£L¶¸~…”~ú¸{ð¼)04I7ræ‹E]µh•©zœù<‚¤ÕK¾ÏþƒfÍ‘%‡µ©ÚÞ+§tãÞHcª¥%Æu`z*팋ÔþÎt<ºz''#Kó†ùþt ¬þF}€ Lécgúr Åž,ôÓ×Ü2ŸÝá žðöv@߬ۋ}EóGûßêæä¯L.Õšæ~ìE}3öLY„]Ï€7mD¶(#šWÙÙ^11zm¼ìœ†[™¼“ÔÌy+`Ë 8ƒšk1W’HòÚ`ô8"p!°€€ ™gú¡¢ÖPdaO|ûLn“ý-&í…‡÷T…ã}þWš:U¾V;ïFx^©cÑÛÈä¯ëŒôð~Vx»èZe§$¤¥–î2üîZº_,‰äSQ? Ð7óJÆÁÑäS"Å’íþý -gåøðîS—oòžñ³wÖe?iÞ©ì¾èåAÿòŠ_À’ºWg†à Þ:¼³ª‘±N¦¦çòšSAcg–3Õ’>óžxÙ™øaÚÎ\Íô™“†­Ãp˜Ñ³ªjJÞ¢Ï2ý•FÔfÁ*h»Õ·Š2*D·ák<ê–¼Q€¼Ÿ!‡±‡E ƒL1¢È¯©-Í6;å!ätÃö³ï‰KrJÜA3ûq1Î"ñå<»—Þ —Ö}¤ ¬šÓ½k~ï™Ýñ;Ù– ÷'FyµQçê€êwºÚuc[ëžôÄ™¥Tîe,õÂ\ŽL5Ùz‘çÞp³îØ¥‹Ó™‘¨1ŽA_k`…uÚÒ +¾)pF¿œ'‰%QcÌ ¬X*,r›X¦gHëÂú;u|"WQk€ÙGb—ö’^nó¹ì”Þ€jO¿ª‡šš"5üÜGSvIÎ ?ïVy£¼Þ×;•Kñʯ6y™Jbå]LJ¼¦Ðœm¾úP»žùú!™G/«3$$×’?=`ŸZ@ŸòÁ^‹ÆÒžYŽXžQl„»åÇÓrÚ·gåõ¼¤mVB÷nD3_ÏÞÐîhò±aŒöbëØ$öò˜2Ùéú‰ÈJ8ÓaÚ—3òÌ38½Å(ñ3ü&«tÒÁ<3F]C…¸ºž¾kú*å+&z{cˆÍ1êIù¤ËtÝïö×/-ÿãÿàtÓ¢#Ku]j5ŠkkÄw+ûFƒzä\ß@dã)ËÚ¤n‚ŒÍÌ(Y[‹«¾9¹ãn/ïG&FWc·Õ+ûùÚ–Lñþöã´$·“ŸKÖ|ºf>Êñ÷R½ØxÊf"Hª~¬DAµ=®4Ú5çíÂûpQ÷BÓ;Ü‹\’M³Xúo_V)Û™Ÿ»*ó3Çš2ÜŽRk".´0pšLMS©¹†^aº Ñ$»ÎIa…/8yM+2Z¹@Á¨*•a+s^©­‡ÙmF ª”»mwð„žÜ¹²¡•ŸÑ=šzóÒjªþõÃ7gŸŽá([ø…f ìZáË»ÑòŠLû1•Á«dUOÇ›,H÷С£ÛÎdyAƒ½J¹´¼ÖzKÌèh(iö¦cï– $U¹Ì¼{ï-ǶSr/¡ÈŒç:}Øý: êw6‰D?~©ôرƒ¥ ynKªý6áÔ9ª¥i@CÍq”gUájP0ÿÊ|9«mRÖ¢âí¨©(+E݈iе1Žê ¾­â/þWûf2¡BjC,Ë! ¨¦vŸfÚ$–*Ú~¾Ml•þEÇËM¬£pþ ®˜½,c-ö½ïÅîpPþ€ÜŠZœbEs¢ð¦èýyLM¡t/»¦|)|uÒp`¦fT¦bÿcχ'Á~®™kB?êô”ñX[¬_lvôÄI¶Q‘Á&Û"Bœ’½¨ÞLc¯öúyŠË·¨YG+ [» {ëRé \¼³[½÷ÍÄ®T¸¥×Žîn.n«r>?óh‹jÜu:¥#ŠQHÍ9šîWbiX‘.ÁJ·Z÷°ÊhŠ–‡¼¬Vpi«­†2Ð/îïÜ€SäO­ áÀ>аˆôÄÙɆ&%LŸ8‹,ûÌ‘­ %¢2s¯?~ÛM²ø¥PJƒ›.=Øòf£»Aï‡ôHÒòä5Ô$`ƒUâÆ³øìfPRä§IÅÉõþKª”#7¥d.=x²U{¶½Èžs½RÎAå{^\màŒÂáêÆ<¹LŒuB ÆŸðO3¡"B÷“ªc{URåé- ‡GM©‡oX¥i•ånsí’ÿèÙ`âÊàoŒÛ=êuÄÐìޢ䀗ʬö_¶è.ùïkœ‚ÔR)‰ fÁKõ…1^ˆÊHógn—â+ž'–ÑŽ£?;è_ðô¶ž·ÊœÆŠº¹~;UÈþX¨S´'ã³»kÚ$þ6´=çõãbý¼ÍQÚy²VçùNؼ×+-G5¹ž âðBëxk Ð4¾Ýºù›ÖÃ㯢3Ìå7© Ã.¦®wYRV¦Æâ¡î'ÞMfÆÎó$±„7’º¾ÖçoÛBƒ}[îŽæš¿ìâ]ÃÏ­»úx¼|Ô¡ãÏø‘¥%RM«`‰§²‘Á9Î ed­‹³sדª—n¦1_:˜ùZÍrDÉ ‡·<ûÆ¾Š›wú=¨:¥É)ÊCš*„ޤÒÙô¯Œ°[Ü»!ç®¶m´–˜BÁ»¡*+SãTÙÙ×p47¡µ|(Še`Ï«Ÿ;VªuÕHx«oÒ íýÙüC/:³xkLåÑ}åÜ…¨ÕJ¹LìmòC¦‹[¯¨õL[š>œ5Kg5TÃþE¡x NÞÿAu?&uë2ÃU:[C“39™3µÃÖŒ žíˆ|Œ—(%—å‡h¯q´X+ÑÆ§»fOJÝ‚Hëø‰ms1À§ûJTe fRÝ=]¨X~4öÛ!µZáž‹s±"ÒH`{@Æ8.™!êý.´‚1x¢Þïú‹Uµ:æ¦A7ŸK±,Dg'¡Õ¤[=û²²‡Õ ôT 9¥rZ»kÅÚ=¶ßß$Þá3öÚœ_‹%éô¢”žt,¹IѬªÉ¼ž3ê%†Öù¿jbÔ.¼´Ú¸X(ív‘±»×Ñ[g¦öT]FöîYÎûŸþ¾[Ïæ(Gé®ì˜Š`ÚNŠ8*6•:íÖ[zòk—\J¹]ð; tˆ?ös‚ª¡Š¾¸ŽUýÌÖŠ‚ÚÍÆÈáý$Îõç›39;ñŠ&¹G¾ÚT|g;šVYÉü‡=ÌTeùú“7­ 2N ¾%½ø_úivMã}Ý«R¢†tS®U-½½ï(¢t)Fq=vßʆ¶›9r¶’,ݤĤq8ê+ƒRÎ}×y«d²v‡I™9M‹9Lá×eä¨3.jL=x€—¢½e‚Aó„VsE8ï.½U\¤¨+J‚è„¿N¾Æp³¯î{œºcWñézÕ%œn˜ÔP(¥/Ü÷ÝÈz«Áu¾9·÷Ë´êI8Êdƒâ|9¯êÂæ.Ò¨IêE6+]rg ´')÷—C•ü˜žXQ-xß§”ó²‰~õÜŒôÅãö¹'’aNÊ“‹R ! ÁŸ—UI_ÄűY>ÚñVMœh#wµ(²¹o9Köõä£Ó²§)ë@@ ¾nìK!aí,S4§X¯’"ÏŠ·â˯ŒŸFŠ‘…·'£Döã†X¨¼¨’¶wùoÕoj¾³90’Ýa{` š‚L/ÔL9I¤Àî`’5UÁœ-з–ݼ‡e{®/xQÉíez„_ü©ñŽÁ¯ònÓ7<4mt§â‚ø‡«ùøo©nzò¢…CÔÓ §˜A9‘*š6°º©Ÿšõ±'sÅ&ÜlxE•ê+T Õ¥½¼Skz‘.çÞ¿—ŽŽ8óŒU÷ˆ%ôÖha™†À½öþå誹ȶu¹F ~ž@Ó[Ï¥ü„ÅÞLžïnsIz-Åqµž£ºëe££öqCÑ«\¶<^§˜3»e~F9_\4« t8Dßriج¬}‹•5oö$*í'î?áàçx¬Î´•"TÒ1UsH÷’ê-œ~^+%¡U{pÜÇÓÁðð#YwqÁÁÝ&aPíŒÐØâ¤‰­Ê%¢‡·Üà¦éŒÅ²v…Th4®ºav¸gja`Ê6ü]\ØÀ‹Ë+Þë3ÝGw™sKû¤t4l¾jnŽ£vðEAßúÒ=d-[StjZÚ~Ž›^ôüüëfZÚêøP3¹¾¥›À#mq7²³%-¸èð¬ N&F¬CžA­x,6fõÍD_ZêI>ã_׊æ(Ìfù–Fí¸‡Ž'QÑ ©«ò‘’Ô‹=þ|©”ñ€çO{îxJ¼áì_ðuN+á…3s‰0Íj?oÕ jœO¸Þ³û*› ¤·‹ºéˆ2]ãîÜZ¾ dœË+_È?xD9\ò¥WT"ܱeu³ÙWKXÂý•­‘aþþøC>ÛOSŒŒzê×x’ï‹'H0%ÕÜ/š ~È 7W g§Ðà·Uxk¬®WB=ßp:6à°øhÝn?9GŒ$9%j•èÓÀJ šâ¾êtnÐ[ê¼Ý(k•Ûë¹:ÿbï“\»a±1Œ=R»Zß­Õ´)y x¬eúŠ+,ætÐ;c"ì[ÂÍd4¢iåÌê˜mÍäÂ35÷D½cFºé5­AÁ×ÍÞHŠªÒ%DQtD!Ü|Ää ¦Å =¯„“ÞNÝ”#¶×0zþ#é°qЦ¨õ-/Þ/ÍâhªrC©~6á‹ìÙØ~;ÙÝG5ÖºF¡ Mþƒz¯IåáÂB“¨g#WOU˜Ë™i.&?épé£Ýì²òg6¸ÊåÑJV-L›t£8õ<\Ï]…p„_ú¬ªÄ¬òoì•ãsË‚&,yŠºxÂÚÏVFº —Gõ°·Í¼/ »Ö9X¸Ñã’hî%¶kšõìÒ·®ž…ÌÎ?R+‹’Ž3y‰ô¾†ðô5Ö;ŽºªÂ)Ëày‹¨û0\æA®ïã³Á=)d½˜-”*ÓD/ŒRd›L×}T1è¯Î6‚þŠãSÊIÞ"w¯¯ËÉV$Aí²–v–¬3ô/äQQ‹…§¼‹âº |æ½ • §åšŸ\£û8ÒŠ¢AöÁ+}÷h³¤Å®ôPnÕ¹ç[²|2}u^c(hÅà>¡Hý\ÄI-u¯fïf[`¸9–Ç£x«úãUCαwÅ6z5tz0#KÞÅiÖ²¹–Ñ÷x̯õ0¸×H’“ä3·ú…æÑ8M¤xmL}³ù±Gv endstream endobj 720 0 obj << /Length1 1398 /Length2 5888 /Length3 0 /Length 6843 /Filter /FlateDecode >> stream xÚuTÓýû6("LAB¥a”Ò0º¤$¤[’±ml£AºD@º;%¤„$DAB:Dº‘þ3žßó~ï{Îûž³}?÷}Ýõ¹¯ë;NV=C~E(Ú¦ŠFáøABÒÀûÚÚê a ˆ€0€“Ó‰³‡ýmp>„a°H4Jú!îc``Þ¦ ÆáÚhPÃÙ‚Ä¥AÒBB@a!!©¿hŒ4Pì‚„µ€h à¼vtÇ á¾Îß@.7$%%Á÷+¨èà !`PŒCÀð!`{ !‚„áÜÿ•‚KÃ9J ººº €°h \Ž›èŠÄ!€0, ノ Ô;ÀþŒ&à!ØßC´-ÎŒñ{$†ÂâCœQPˆ¯4T×ê:ÂP¿ÁZ¿|À?— €þ“îOôÏDHÔ¯`0‚vp£Ü‘(8Ðiêªj àÜp|@0 ú¶Ç¢ññ`0Òlƒüj TUÔ‚ñþ™ Á qX,Òþ猂?Óà¯Y½vp€¡pXÀÏþ”‘ïî‚–û…vEyþ}²E¢ ¶?Ç€:; £NÎ0uå?¼ ð ÃÅ„$%D$Å0' Ì ‚üYÀÈÝöË úiÆÏàíéˆvÚâÇ€y#maø€'ìâ0Î0oÏÿíø÷ ¡Hhƒ#Q€²ãÍ0Ûßgüþ1H7 ¹ž~  ÐÏÏž,ñ ƒ¢QöîÿÀ­XPMOQÇÈ”÷ÏÈÿq*)¡Ý€žü" ¿°˜$$,”À?xÿ;ù§¡bÕQ¶h|Äï~ñõwÏ.HÀõG!ÜÀ'ÓAã© rýÃt !1!þ ôÿÍ÷_!ÿ7šÿÌòÿdúw¤êloÿËÏõðøÁH{÷?í›x,"Ö ™˜ù™-þÌ*;­jàÛ\?Ò3Hs4~e¶gÁþZkÿ®4v/DiÑžÏÓІávI¯ fü&Y°êìwT<®¡kGõj DY·ŒŽ¼½¤æ icäàx¬ Gë_í + €Æ¦êmý1ð–Çg‹êjà 0•ý“®DÜxQÁé™t_‰Ä¬TÜÕ¸ø8š¹­(/A«ZùØ(iFÚ5’,]è÷¥µ= 'Åu%÷å/ Ë&5 ƒýd¶³ ·®UyôãŸ6÷·÷Fš¯O–l 2:T µ-_ò£®ÏÈë¤ë¡ÍÜ›Ô 7¿Ç"ªBªÕPpgítž<¼xGBüÖ¹½óše®RïI¦GЕn¾l“³x%lÎ_lò¨q© Õ‡_ëYoõ›Öz.±ZÁ½Ê\f@žþn"1”åïb+;²4I—jæ!#Ó] .¥te& Ú<°Ž°…€Ù2š?Ä‹B¬\éI¤Tj°À#•Æëý$ã>å—š 7 4U[¿Ü\ݦRO”iƒÍŒ%ÈæZžz‰¿ZT9uŽçª+è^®Br«4)ŠO†=•_ôñ?Ÿ¤•LfÔ¢æ›]ôªc¿#U˜F ˜ÝÙfˆ™è}ž‹d€ó?ãì÷–ôñfµ|ª/s/Žs¬ÕU{@RØcsË+aÆU:¹•hû;®’¼®‰\•,iX ŒÐRìR’l%ªux1dûä"í%q‘Mê’†ý|á“KYfØfÊ$£eí“7ºQÉk.a+;zËÊ ñêTLù‰ý;„ÆÓã’ß®Q±ðV·z<ŽàìDô,2¶NÙ|¸ÉNóÕèŠs=¼:l4ö`Pxo-W™©übÂ.—;œhøæi÷+»>ú ?ɅŶÕÎSp.—‚wn•CÒe`aßP³èÀJÉ^!M$´ŽS£Í|{º¿Ø1‡§K‘ ‡‘šügã ÝÇwY2³\ Ð=ù¦ïÌ€|…Ç0³Be›¬éý˜µ©€= £~BFǤY œ0GF·¤¾BÌÑŸÇÞÖÅ–LUTÁ}N^4š\aAT|ÕÈìå~ÌüÊ“4¥0í¨l©3ôЗñN©eì‘ Íníï¦]/a& ,Åå^/+“z`[,ï;©®ˆ–Þ_`Dyé²…]søôp¥'µJùú„⻌“žUf²ÝÜÃÔ‚)©Æ±¿‰ü'»oíP•ñ^&!®–Ã`#ÞqÙNOMUyI‘+PNqÅÉúÇa­hNî23µAšÔÙg÷cß­Û]ë£'õ>)ÁÒ§:¬MúñžsÍ£c`ØD%³LuŒˆ%KàÚ:ƒZŽ$nþ‰þDð ‰N³Ø=ó¡^Ç$céUßEƒ× ^q›ºí6ÆŽŠ]ŸÞ÷½æ¥üï9k-ï!ú ›>i²V´@‹ÂÛ’ ¿˜ôUŸ9](Wõ‰„ÄRÓ(o’|@"Δ¿‘ïèùíŠ9KË̼kî7×¾ìLƒË8Õ>×ða<“Pb9^{ÞÔT³s®çé^Å  VWs[í1ÍM£‹MöÝÜØ½|‡¨:ìšÇä`Î @n]êz”(¤Î8¯"u¡ÝɃî:˜L7HkÛÐ1WÎ^V¡¥÷™aó’X ¼BÖ¼eÙØ3ňè¿Ð’Sº(âT:U‡§O™>y“²ŠÈçi0Bê†Ú OEg½K×ÉTÍSÑ$ù<î« .Žá~‘ºuséè©%UcíñƒœÀÝ…1UѵÎú½âï_ˆ® tâ JŽ,j‹ Û]Íðä⃒µ·ópÿ»ƒ7–j]¨@ªöb©pTÖEÍFN_çtà$ß`Ð øÞgëa‚•ýI¹´òÖ ÷ã7r×0—oˆÜ¸eÁaÑA›5ÒÓYyP£±Aä}) ~ÃiîªÂÃw6ésÏÔÑÜ|_+Ôç3„<’||/Zý.Ïô ‰!3ÆÉÁºt‡d#Ìd=Î?ÜpKTXXã-¿¶ìG5ªLº7vÊp©*rPéÙ©™˜èNž«¶Yñ² ┪ůªjvONF)ž÷Ò_çpù!*&|UÓûÍïa\à¢[QV oÏ„âEú\ñØÁxAœ‘ÎGrUvƒöúšB=t+bÅ­ƒ…·ÁHÜv¢ÄDýfýhc_,!B©ï¢«ÍÿÕíß=»eê>Ðd«j?ó…ñ¹žnW˜É»\¢–ZéýñKk¨’"žˆ¬°gÊ%±w õf[0Ûõ^ň®|µSu_? (Â51ÿzkEƒÏôW×÷ùêa|f ´m-‹8Rè JÚ´¥„ÍÆR3áüÃàìDØö€òÉøb¥[.êÓØÊ–£E?h‹ŠkoA€Xc\²òfVÅò¢Ë^ð,ÆæîZtm^q¥MY´‘{¬ç±¨|#—òÜÞ $ëÇø ƒâ*ˆœß­½SR3èa¹Ý20šOûšÆh£ã{n7°}ØñéѨç†ÙD$ÁŠq$‹ŸôÝ)âÔ‚£²ñ;G/òï9 ŒÆìRÚ»^Êóèì ½ÿ*öá„}<¿9Þë[f¿sL«Â^`-iw§mf—Ù,'<@ÞàÑ{ŠÔ ñô+ì‘»ßVùvåòÔFÉ,(Å*Cd¬gÝ),¨¥V¤cŠWÛö¶ 8>öòSö) ïGÆp`V¶O*ç>&%Oímotí g_ra:#¶2µÏ"Æ—òê 9æžß7øòc¼¸K‚µT¿“Ü£Á»qaé÷ ^à<­kè%ˆu“mߤ5ÃzëŒCvè ÕMNŸ êa€úèá¿À ny@‘ŠçÂêØ ±í>—=³{¸ð†râžÃ›Á ¡­ i¸P·½èJ«6F[ëüÂZöºÕ«b&ÛWU=ÑÔ“§BÍ}k--_»=ä .úHÖF´ÉüŒ,`ZzWM<€Y¿wöܵuØDxè†Ù=@5Ì3’6S”Sèqvd S“K…°¾éOèÅ3#|íè’VH^ñ–«.­kk]PêwG“ÁÌ@ëjêàˆ@I Ùï«Öü:Åörg½áù /®,ßOx˜ˆÖÊ×éÓM«ìøx™ó1A@лó8Õœ§3GvcÑ‹V;:4{‹ÀfÛ×yÄHœpúQ=ÈVÅ©ºÛ\ñmÄY„ peMÑÐ2Ø48#ò¸¢d6­°c-6RÌõ˜*þ¾Çû‘RŸ%i§sÕ‰G«<,ÏLÁ/ìjƒòQšê ñ–&Õ°.šÃÌB?vFÖ5‰¼l± ¾ö>‰WKÁä'ÛbV[¬ù„Ó÷ëIK_ic‹aÃ9 ºÚ,Jh¥~±û$Æã×ëÚ3^Õë¡ÈÜßhÖ§’}ÐáÖ¦¿»À¬¼·R§Y(ª÷3qüâ]LaÕ¢Ø0:äw²“‘R]@g —Dº‰Å­37AZ‡hx*ëlÝ?¿TÊÏ ì"Q\]”|!¢hΖ·‹kAøÒÃßM$æÍ÷ºå€C$Qä>”ùÓAâ%ö~¯bv®sñ#¿>¦„bR_ººçùÅ7TÌ¿xùEǾ§6 tk@Ôˆ½1:cèm$i¤9M”ýªU}íÖ-„ëù@Ù3·§ò?ØôÔnꦨx¹{¼ÐìWÊ8M ÒßäHŒ4›õ,ØØë ¾CY<V('®^—uÄ}±ªgw2™±¾Ml¦TÏí¯Ä>Æ8Ñÿ–=zÏêǦô]0ˆlûFÚ’ZR)…þÝ-òég”ÈB(V½6‰nóŠþe›-ã1¥ÜNþ›¸LØ{c#‚°lcþñ^®Ëö ŸoÓg„e¼Õ®~ÄЙ;Ødº<Ü©þfép/#°œy=Î܇Krþɤe¾#âc¤MZ€_Ò)Gb‰NrZâxÅYÒr@zNMÆ_“„LØõ€Ò*»o\¾/i‘Pa T+L,¯ióªN—Uuz6‘~ ‚ì,×›X_·*ÛYU÷-\&,ÚøX9u{Ջ䘌½YtÍað)¶­L|“‰@!ÚÖv3Ã~¿4¦Y];Ó-²=×TLÖÚ¿ È­~)×&{%Äm}Ü„4d³¢Tsµ Œ®¼„´ð*ò®Ë¶‘A·’§ç[‚B=ǯ$£Ú AOÚÉNŒ›wew\r¾m_v?ÙÂ=ÌØðyyUà?3oÒ$çÏjâHî¬ÍIö 6°#Úd°4d–]+Ö$˜„Ù?R}O°¼óе`;åÍë  ñÔ“NïÐp)},ƒì¸…šÊÁóÓUãŽG—ö߃N£i£¤ßN3õêT–—­WŒ$è]5˜Yjçc¥¶ÃiójØ|ahZ—蟅«Â9 l핯ô¿ÞH&n&Hó }ó âMx“ÀõHzÿòRk•Ú^i>çp?³Œ¨þšqÿu ÒÆy*~=‹£ó/íýUØåÑ»ÃÊ2_‡öRÁ•ÎÅ˘a‚üGì쬶MûijßF‹6/OnKÌ?}" Q ô·§|NÇeiG4í”OÙ¾AòS¡UxtI^¶5fhÙ"ªs7ž’à‚“—*=«|öfJ AȸJ(ì/BOrg h ³©5ñžàÊ5ÉŒ®jÞ„áá‰ÙÂÚîµI>Óí…ëeõÍ,¾ôåÞ<¼60å)_¡¯aUì›.ŸK/èÅv=ßPÉŒ›Xõ1,4§Â¸2zß3>o«…¥Š©$@‡*~°ÖKù7}2¡SxœPé8êý‘´Ä5÷”Émh1Œ>mÇ«ÛÜ–›_ÌgòºyÁ$îŠYÄ_ªóo(öhJ/ÂÚöȼÀ=«Ê¢€ð S ^¥»Y(×N6oY~ßqZ¤ßZñâ+"·à׊ ;"]PnÅ)µÜÖlÈÆP“÷Ö’I‹6ÿd‹ÆjŠg¹¥âǼ`×ÌœYß’Ä9ÈeÊñг!¥å­1‘˜«‹¥7  ªÙ “xóõA?öPÅüU¥+øÙ‰§ùD˜vì/Gù¬¼ˆ?ß°?ƒ_¤jƒ_šìœ¨µ×u++<§3¹ Ï•-'æ›2ᡟE/µÊŒªTDõ‰‘3mc* Ÿ&|T²-Hyt(uý³1½‘ ”6ö×븽Ñ~L©nY!Oí$ÁqÄ×¹ÁZñÉöû}nãôgyá˜dùÕôjÓÍDLK~â«dâKô$ߘ¬œÝÝ™P×Ì +˜sX¾ÌIÓ·LÉæ®|þØöó9¯û*Óëº_øµ‘¡t’¸tV5æ<êIç™l vÚ­‹ç „^3Ç}<5ï˲ïÂ¦Ï  m! +*Ú|i#y4Ì´Ü~›RP×y'щË$ðìÙ1 ƒ€”-O÷À„‹·Ô.:5ßÛº%lMá’'Ä¥ŽÇ9E' —ÏúBJW%ej¾ä;™Í C/‚(__‚‘xÕìîŸÈtEÐo­¦«i´õm’j¿z(ЉÊR·½°r‰}2×ò“éêùÀ&md›‚Eè/½dÃÿÃQ <Öê/=ä&|ˆÂ¾kï xpímTëýX²ORcÑòÕ"Ô|°è$“øÜ§kåÚë{‹´/¹:âÍuÖÖŠ›»n]^{¦›Â ¥=ÃTd~@Ý $1Ë™jRÅ)\u›.·8¶Qëk —kÉóÆÎÜË'¥*ESÛÝ#È\®W› Á”Ï{îôb™ê¸ ‡‡.Ž4+ &±›ï6wójóë> stream xÚtT”ïö.‚€ C "0”„twHˆ„0  13C HKJ*¢€t§t#©tç )¥Òñãœóÿ{׺wÍZß|{ïgïwïw?ÏÇÁ¢«Ï+g ·‚(Ãa(^> @AKKM ñ‚$P”#䯛„Â@Bá0‰ÿP@@@(ŒO„Âà´à0€º«#@@ ðPB@TâÿÂEÔ ÅP‡Ã H¸³'jk‡Âó¯W˜ ..úàw:@Î ‚€‚A0€eqœ9ôá`(åù\’v(”³?¿»»;È ÉGØJs?¸CQv€Ç$á±ü  r‚ü™Œ„``EþñëÃmPî €q8BÁ“á ³† ˜ÃújšgìXóààïÝøþ]îoö¯BPØïd wrÁ<¡0[€ ÔÐQÖäCy @0ë_@#ŽÉ¹ Ž + àwç €²œ„ðïxH0êŒBò!¡Ž¿FäÿUsËJ0k¸“†B’üêOŠ€€1×îÉÿg³0¸;Ìë¯a…YÛüÂÚÕ™ßuq…¨)þ…`\$ÿñÙBP ˜¨˜0â€x€íø•7ðt†ü ürc&ðñr†;l0C@| 6̉䠮¯ÿø§E" °†‚Q+ˆ-FòŸê7ÄæY>ê0b¸'þúýûÍC/k8ÌÑó?ðßûå×ÕSÓ4Påù3ñ¿còòp€¯ 8€WPŠŠD1/>ÿ,£ ‚þmøŸ\5˜ “ñ§]Ì=ý«e·¿ àú«nÀ?‹iÃ1´…¸þÃr3 ŒyüsýwÊÿ⿪ü¿Xþß )»::þsýŽÿaÔÑó/ÃZWFZpŒ`ÿ }ù£Z-ˆ5ÔÕé¿£j(F r0[ ›y„ù€ÂüP¤2Ôb­ Eíþpæßð—Ö¡0ˆ. ýõqÁdÿà ì€ù€ 1Äü!1jCý^ã/‚ÑÓ?ûP‚áÖ¿„'(òB @ž$˜Õc,€—F¡ÖßÔðóÁà(L 3³ÀŽ ùµf1¿3f7pë_~’Ô»"˜ÃSsð¿ìß ‡@< `’é 8øQ}EPãI™ƒ;ïÚ$þ^Ò‰± ïPö3"T—ÒˆÅrœ~zÚŒFòt§€ò3ûmy—“Œ…Éï^èJæ*Oá#^få [f«˜‰ë#ì±x¯cFÖ Š:¬¬' òL]Xºw#n¶ËXÛvésPx߫蘊wç¤ÎSUnÔnn-ËKÓ¤e7ÚYyŒª·ê5XùAw/sÅ):p5Ò,,Q;…UC²ù”$νôæRO_ïeçݶu·€µ}ö—(J¥G½ŒŠÂ„¥FsïÈ/2?¸m§PyY©Ü’ݶî*\äN8©Ð>´Cn›³Üwę́¥ë$ÚÉÑT‰{‘’Õ';[ö=Öl¢(¶@í!0Ô"ãåçQJ?`uú2§/X^HC  ÝÕ¢…#fý"½ú¿.oþ ÆywU\ •–Ô@¼¼4äeÚŸvAµSe|µ[)\ç°ý™„ÛÀäÈÊ'F3wbžqd¤N¨F}õÖ ‰5,ð‹(É#¥N­Ul¤û`vk,mÂÑŒúH¶0Z¼€Ý»Š_0+>«Ê¬üNŠ÷Ñù–@P¯ÖÙ'ooü­RWHÒͲhŠ˜EÈ'B³ yߘÐkÈÈ’œë¶²jçéýºr±©’§¯Ðñ‘ÆÕ³žù¡¥8Láo–äŠ6e7:ö¨Š=)îÖh“ÉÈrh™Ô§'§Ó0, ˜ó7’Í”øaõqúªÝ¶Q.å:¦›2*ÎíH°—º®%³Aï yÚoïEþVd+xÜÇEåG Ѝ¸žØI£veÞ ò„ŽlyEªšØiû±s蒥Ƴ¹8D'änLv>ø9¨»«QPFF}îåB×òÚIÐ =­ó°®`‡ÞbÑ[‚ÇÏ×UÔ|“ˆÔ(?LJ”²P=T¾êÆÜtM À)õÓ0£y ‘y7{­°Küjéën¶¾¢ÀyzC•‰På™ÃfEÓg NC ·)úøÖvFÏ•‡Q‹Í¾Ý…ï±[¥¹å è¨=M°—¦Ýë Ô›N­ýè9ÚvyÖ®"ÞV´Î`Ì–ý#Ä,Z&¹§¤8E‹±èà…á}Ó冷QOž› -çóV¢E\ۊǯê½È®X÷’{®•¾8ͪû7›ÞMƒ©¥S·gíõžtÍÇ¡d ›ä(å±5†Ôðûë&twmáxÍ ²°ÎXß'+ðJÉ£C ëdîÔßÜYç;±Æ¹m@Fò¸Í!7 w÷ÊyõÄ)Fy~£‰‚½ ïd!ø½$gdÜ–NZäÁXPéWÜØžB•ªºLÆ·œSãy»:¹ŽDvjøü‚ûq†Õcœ/I/}”D›÷`wÖ±c±ç’™$ôà;=¬X7ãŒâ·Ï\]›8“È%A±t|ã á—>;Ñ5m Qûçéã??-z’Òã+}äRê*¼^pzmxÖ̳œÓÒÆ!âìxEÄVÝmÊ2ÓŠR§ÒÖ5hÜòãZªØÏ`Éæ—]Óêï0×îæåC8àBïXK“¿œw§­„äSP=ÑÍ£’6ÊBÍR–çOƒLV’Y°EnkD ê¨ØëízÀù>ºã¹rLIsðT–KXêë±ù i|O¾XI•z€&lC¸òÚ·¡gêXìœOÊ‚ìÌgÆ'[CíêC¦s& w›Š?a¯µI“ܧ üÖï WßEMå:û§þ&‹›ð4½‘ª9R#;Æ~ÃWºI8aFéæï öüJ×*Öíסsån§–cijË?UKûC¾Jn®ë¸;Ç.§½âÊÑ­û ×Þñwã‰ga·Ë•Yº„w.¬$¨†{enj‰û+„–É£gnMÈ– ·7Æ6\*=*¸A˜Íkç•yâ_×cƒKÓŸG|öÂú#pú*GpiKÚ/pûIB6˾&õž‡±…­gÆ7q1Ÿœ ¾•‘Ì—Ç~¸z\Á”| ;âœ$.™Äµ2TÄÓX›¶él¦+Tkû6K ʉËÀظI…#üPŠ7m\âÛô<«x.|~I "Šyèù` Ûϼ8…ã éè¶+G9Þ,KN)ç1’‚…&DŒf }þÂ~p1†ýî.Ń缒1ˆöñÅBíÎ =e¾lÛ÷lm±»–oÏŽ®^N¼xnõÝž <:.‘àëˆz”/¡– ô§ÛòV Rž±âµôö)îŒY0•çüøåÓýº„Z‘*•»Ë¯”íªy%ý̈»ëÀÂïMüšý3ƒ§lW+*)F Þë…c=†V™f=¨[0ö¨µuo)c|qe,X5.¸ÏÏžL+ÏKAú˜WÏ–öxw¶Ãm—8 Ä5ôÁþ s7.Ñq,àZûÕ¸È 4¬@OUl»úã„!c²©ô'aIð±ìÇÛ‚â8POe’D*3%­A;Á¶Öù·g¾œiMÞºGI5''xÒŒxô#Ïý£àÄŽÈ}Ç-ó^ç?dQ#ëâ%x,x:îÄdJ,{¡4¤ ®ÆV#Jˆû9-uÍg$h7·ËÛ,l°Y«÷—±ˆ’<Ún$gñ@óøWd|¢æå–ùW-\³P–:; b:8Wú­~ñœycOßLÞm›‘­šAúƒ™Éߢ­=>*“Ë'![0@OSº@yê¢ñêŒL¿g“J^u˜B¿tŽç|P_=BõM6Æ¡è:FO{%sýQ†…1Ôäýé±Ý‹1ÙU‰3׃¯ÔC]†¢%øñyTãR~SàµË©‹|¸Ø¨jÒÓEwßœxÐAú"©™ÝFå¡ÁN˜ÖXÜJUÂÈ,)1•s¦9 ÷ñâö¬K( c™dBí‘ʺMo[»U÷ &6,?ÛPqákhpÙnãuÆWo¦6ø®’ï2¯m0‹z°‹¸0ˆE’t—(8ÚM‰fîÃK7ì¦5ós­ˆY㨠|{Ãᵑ¬„P+®ÃÚÚ´ýÃÆ‚N¥uø š&Õ—·vÑ U²¶ííi–2ãÓÇ7¯×ßqd{sˆ/¤^å”W—ã ä¾²OÜ,jgaLX~)œ2e$`yLì‹;oÅX/*ŦnZñT,°òöŠ£¡_˜"F[íªŽ|8W&4D¤IòžÕaê3€SÚz¯±¡.4Ínr2Çc‚x'òÌoÙ¿Ür<ô:qµÉë+ã.h$»à8*†ÄT7©Øœ|+ÑR<_ ²00¸o±Ä®Ï?*-ÎzÄvSmҽȃ¥1^àtS²tw"ßV?ôHíõÎÍ_Ï”à˜s _ &?£YðÒS¨µL¯ô Öë9Ú‡Í;µR™P)39Ÿ JH&Ž¥íÕùãÄl7_y_Ó=tµÈK -RÌ‘,•u~k¼ìp‹S×ó¡hÿêƒRWk5ÃáÉÜçê!)÷F»¬ÂmìÐç_p—Ê©ä†m’‰TýµHãX]˜—¼o¢Q(`áÅíl?éèIì~“ H/°ÇL©Y°Ôñ— á0ö¼Í“OÌöC«<ÃÕv•ªÐëx”R©ïðä"AF´RSÉé#Š€Zâò`íªýœ8ÔH”¹HíŸíÀ=~¡tQûÕï§bãëš!9““üÜBëå]­çþâÖäí ï EÌ5É'm`õêd|Ã[&Gè”×﬽òôn4lãÅÊ|¤Þ ¸ ¡DGŠšÒ•ï ”æS}¥å}öÎ kI¢Æ­W ß­ê¦ì~$È"!õðòNWÆ…1ë[5½¯Ûã Q^Sj¥›_kdóŸÑXò¯Ê¡5ÔÕ²_ôÊÀ}à¸dÉ Dý4ÚÉM/jÖ²vì”®”bÞìbl¿ðÇsy`/ËÁ©hWTüóà~W_~°0o"Ëè¥Kèã³®qxÀ‰ì3©C—h5¯_k_ÕðÓëü+¡îÉæÁèÅsjöWЂ×È|~^FkdÓžnBËÜx\Û|mö çä½gßoåWíLH®f(Qáô!XÛÞÝÍ2ørÖqjZØùAß§réŸMÕß~91"žžXZ)"»³'즶’(Ir.ò¡P9 òî „’©†.‰6M?%•àG"[!ÏVÉ•¡²Ò’“HNæow oR_@‘7|xÅj(AÙ”yZbEã ùÏ._:tϯc/œöëñr+/ªm÷òœä»í6’ﬕ)Ä[rSþhwXWKôÙr鞘Ù*’¡wÍrµa˜ÒÆ›ý(ÏÑ©„U‘S£YÊŸ‰Rág0«ƒÆPÁƒ¯e~ê¿€J¾GŸtb×7²êªóÄ ËžXÅž1áäy÷ô¦æ&pMOÔŒµ6¨txãÉ„×tô·Í¶\ýŽ¯È¥ý$’ÂóÚi48”N‰ ój»a7gUR‹§Õ‡Þ˜¢7ûqÇOÞÞïƒ<ËŽü×Ú,ÓíÄfÞÂ(Þ÷’rôc¸`ï”\£¡þ›6|iÂ8­6`šÛ>Õr%XœU0$r|ù º]JÕe¡Íq–;òMÉú6%ïŽëåÚ“ ¯äÊe¯´$ 5ïø'à“R~%ägùxiÇØÅTæ¨4ðbñÞ´?ÏaGùƒÓ\á‰Dâ€GÊpV’¸È‰@Ð÷ðݧ—ÖÞx°ÂÚÍ¥ç´ï^O"¨øH$—éžg@©K3²aO}DùãØLÆÄëï=„»|OAÌÇû/5ÑÃ*wv×?JT…o›Dç~2Y"¥–žòÕ N{Ps7˜ì>šÌ¹ÚÓñJPÖ·7Ó‰t-BÃ`3‡/NA­¥Èývâ§9Õ=Œ?{þùÀKPºe|sL…À¼3ÙÄrwz(Š”ú\ ïÀ>¿'äË–ïƒá®ü’O+JÜ Ò6 ÷„.û¥'vä°*ëԪ͓Koݸ=¢éürevy—ÛÕÒßðÉ>.$|N2ˆËr!"¾b×~J¶²ªG‚ŸÌñJútÈcD]0È@³zþ°´ <7¹+†SŸÿ¾OúXã¼-³Û´Ó©ùëÃbuzåé¡[ªŸM•å]ÆIá&$O.NÑGQem㸻b>ÍLé7JV¯%kò¯‹qÕÚËTÑ.¨p|óÈ×¹J4¹ótfIÖìý-‰i|®ùúЛô…Ì úJØ?Ó'ƒ€’`Uœì˜+Š5¸Ü¥2(ö¡ï#O’±q»e—Í¥¼9iê7ÑÈ‘äøœ…®&CÞNÓÀÃ}ŸQÈ;c•j.g"¶V»£Îjöô¼-eÿUN¹µoùk@ê] o<È›‘ÁæÀ¹Yã¼ì-x’ɾ‘zBh0[¤»¤XA€Ö7®ND_§½©£üBv5> ý|¹“‚{1ËH÷Ö$Ý)¦³”·QþøKœ– ßÍkõZ2Øâuõõëí6ƒ0ÜŠÒ½§¨#Â?SÌÆh-ëÎÂ`±KŸY¼‚öÂÖÑTQòæ@…݃–zþŒ>/·šÁTÉe¬´ù J6JùÇæu¹U¥êëR_Ò])Ò®b;ùC×»µ[ÜGšb†²Ëã…ÜŠ”Ó«3ý]nGo9 T<«xrzç.Ø=o0º?ŒëÖ‹ -q¦nߦ€.>Ÿ¤w4hÊUñ¢ÇAÅF¬ê¹ž;¹Ç†Ââòá KŸY§jòYóf5o¯±®"öAÈ÷ú¹™VΟ²%°–öÀ/FU%W$\7F¾s/W{œÝsܨ˜¿/ýi<¡BFk›øÝëú†ùÉÚ)q»bà£H¼øæº,Ÿt)ûGFÕc…P¢ûŽRˆË¨lN6J&ÐÓ¤;4@áë\ÈJìsŸ;ŽV¢(û&jµkIz“YÙÑ©*<\Qsx §ë«œ+¬þ$FãV~ ™²feDÜ=ì¸a½„ î§Œ<úÒ9ÍÅÐëÆŽÙDæÆÆV¶{«?îœѧ29ðuæñ÷¤ñµ€j©j½'̓]¹QuûéäjLõ(:=|îÍ(rjE£ øEéT){Qrøè~QTøCÝ·Vá ŠšÝ?î Ï91˜&Èîè¬ß9wŸ£v/Yliz¿WÄØ‡&‰«ªn½µÂCxå†î€º‰‰ˆz¥si5H´¸Â.ïè-|è£üü.&Z|ÀÌÌȺ?õ<µàêVõp>¯$p›ÌË–çÑ&N~ßøÐee«âð/»­Ö‡­5_Ϙ›(®Ñß6Št¼%Óœþôµï »WUzûÛM¿qê:w¬¥4q¾¯òFõfÝ_p"9—ƒÒ±ïRV‡h¿5–/霃–´žI¹‰9UMu1ë°}ÌêËJOTó^ˆ“#LO¹i KiPÓÐÜeÄÖxëñá‘ äÄŠ'ùÂ3:Óž§føõØj¡Ë­›^šL!Å'÷×kwˆØ½‚6ÛßdÞ-‘óe&ß­DjÛÁ´iäU¯³Ž¨Rù¼­ð$R}.®CÙÏâ¦*V™±&Î#»¾à´'á²Ï»<¹zÄÀðé4—-`­Q¯5™OÊ‘ú$ªm};“YíV„côöíCö©–*+rd]F%©5).Ü€jwØ{¡Ê3ÒÑ+ß´§ï°úPì®MëÒùdòÖÿ¬ììí4Ôq)xyóâÓ~o ïlÇûÏ}»{í‹)Ó”Û‘?-¦ñ>jîê?Nbû”õZ2 &(3Œ¬ç‚Ÿðz€+G²)Q•²Df󺈓Ù§PM?û=âépYñ£vËGW~ãÎòDblñoÉe«(QâgÐÁ"CVVÉ– ìK0]¤¬k+¶íMò”|*_i)Úf4þl¹á¢jP³F6ä–Zñ² Od9«bB]ŸÈb[õfxާü2ž3JëtI3&c†ükIq.‹é=Úo·ôÇÓÈÁ‘t3z\–7«~0ø‡-£¶s¬ü§Þ˜ŠiBí†üõÝfêñp.»¿ÉLM½À·Äaß+i}4<ô½HY¿u/LŽaŒùud`3U׎%ùpÿý!*Ÿ‚Ì­g5_ù[Œf»9äx„+rßÊ™®îp+èɦ*êN:Ý2…î÷OÝ¿014ÿ¹:Aì endstream endobj 724 0 obj << /Length1 2750 /Length2 24037 /Length3 0 /Length 25564 /Filter /FlateDecode >> stream xÚŒ·P\ ´-Š îÖ¸»»»»;»k‚‡àNpîN€à‚ww‚»¾ÎÌÜIæþ_õ^Q½¶®mç4$Êj "掦@IG7Ff^€˜‚* 3€™™‘™™ž‚BÝÚÍøžBèâjíèÀû‡˜ ÐÄ $7qÙ)8:dÝí,lN^.^ff+33Ïÿ:ºðÄM<¬Í ŒYG +<…˜£“·‹µ¥•(Íÿ|P›ÑXxx¸èÿrˆØ]¬ÍL &nV@{PF3;€š£™5ÐÍû?!¨ù­ÜÜœx™˜<==Mì]],ièžÖnVU +ÐÅhøU0@ÑÄøweŒðu+k׿åjŽnž&.@H`gmtpy¸;˜] ä5y€’Ðáocù¿ èÿôÀÂÈòo¸¼²vøËÙÄÌÌÑÞÉÄÁÛÚÁ`am(IÊ3ºy¹ÑL̚ع:‚üM¿É"ù]þNõŸ'¸™» hnn½cAWó?ø¯oL@ Ð ~aÖÑŒ/Ħ.¤ý®Fß“agL`ŠbGë ƒï‚K‡ûÃÛ7É4Õ™Ak.7"ÉC=(Ë[Ô׋ÄϾG­ o>´%ª|yô{2ŠWÜù??50^x$RßOGÀ .¼ë÷ìì§h Ù þU–"×Ùû­r>úgŸ”W}ÙÒHØìŽÊn5§ÂSÙ†h(ýÀâiŠ<Ó¬R7BXZ´3/äéë›)´œñWbÙx:xÿãh¶"_ÝuÖ˜ûŸ• uV×.\r\]BÈk´‘IJ_ÑýYì9ß’¢åy¯Vþ"â$úÔeÆ}ÖŒjkÕH‡æÞZ‘…N–íÜd@þúvbmi3†‘ ©fõ£Ht·Z6[ á~§…èJûf·…M*Á"ÏúWÀ4’ŽÕQ@K·ïcƒóÊÐðÃmXjÛÝPóðV·¿V±P¿¥' ­„•^Äòoa*t™Û(D—P…~Ñ#™û Ú$”ß7è\ôe³™Y—º|„à„#×ï<Æ¿²ñL±s}uÎÎÍ ø5˜SñÕôkêÙY!®›„qfu^†D÷ǼÕX*¾:`ãtpÓÙz%£x©7±|Â&Çüù7ò"v©Þ¹ª¡ý o›{žÆÍJ/q*$ÛÇ‘ £ûƒ¢Á¡}<7æû›7å墆˜Žš÷g•žá¢C1ê\!y;Urº\•Ò¤D"!>ßnÍô™’ýTõ ±oŽEÖRxØíúüäI_&#NAU´ Ð/wÀÿÁoÁ`^¼¨·&@ëãusk]‡Ò5b&ÊJ Eæî$™QÇP³æù ž(¾šú]>™Ï:XïÜÑ-’ï“[ä¾v•úÅì}->ލ4H»xJ’¹­€ôË5ꨈ‹ˆ–U O‘†E‚ÚŒéàÚñà”(Ù›6f Á±ci@a)Uæª|Æëlb¶Í¦O–ðql‹@•«~Ý*Æ5h¹€~—8ùš¸P¸Æ!ÜÄîgrÎ/©<‡oåøé¸ÛÖÕ³IÙ$s“ðò¬`صzÙé¨W[EïiH¢,Bµƒ`ÍöQ#aÁ¶øg¨0ëbSÎUÑ•Ù$òHBxkQ©P×_&DÞÊ"W3B/ôՉɎɺ•QöúrÁÄqÖ“jNôNtÍÌJÏà'^F2•¿•œ³ô$•äHŠõsuÈêl57d­ò ¶±±¦&Ch×Xè’+å Áh$Z/¹ó’ÛK™Ÿe†ðRÀmüNl‰3­µÅßEÎå€í1]C Ú:«AÚ­²nrÊÿƇhöå…þšói€~[Û.»»‰^†Ñ­L[~Íi}õæÀ®Y$óaù…‚ì½BŽsÅH¬‡/çNÒ¬þ]/Â%Çy(” Wà2)Ký‡Žã²ÎáM7=¶Ô°œ¯I¸˜®¨Tv<¡÷õÛ9ª°^V%æ)ÍÔ*Nerr»Çƒ‡Š†Dìu½.œ£iàèPäÝ7ùÊóu¬dM¨¯@. ËŒçûøí†þ™eŽ[%¥PéVÌxßÕ£Œú‘gGân;y®¹¢¾XKFáØ¢ÒÍì¸p‘«ñ>·3‰¼ùª-|Ç£wÛ,šLQƒ¢µW?I˜ºuò}îÉÞOÜ~  è«ü:9„é¹±ºÁjàXÖ»¨2z’±úŽì¾Ÿ'j" ƒÍÛÈòv>ŶtЛó6¨kq@(‰T‚#ïÀ¡váIYÊp4US-åsWÂsˆ#0H•°M=òÜ.ód¥øÐ0ë»­„xû‰RÞÃlÆÚºñså ©Âñ¡}Ÿp³ÖLX%Na¥ý²)óÂ'hÚãô£7}y‰k‰L×½Yvʬy¼Dš"4j¢òL»üeX'èebÙ"k·Yv|U¾ß»¨ÉÚæµ¡$aHa#Á>…pûªÎ;& v÷©cSoiA˜Š¼¼—ósT@0BŸJÕB]{!ˆï@òÞVØå (Ï­5ì¸5qË&†Vb9ÊcÊ“<'Njbó&"KÛ2CVP˜›ê×}^у´¯xmó’|‡fWv_NÚ#+X„š×Õ%ðßÓ¤‰ƒZV\²Æ¥Ï; \->UEÃjÁ*êø"ý ²¬C9‹q¿Cj2Àëê3Ž‘Þ˜¶f8*ö·Ë+•Üj$uå×kàÜ{xà0}‚ÓË"^°Ë{«Ä‡–Dw¬ó¸(c:;_<Ø[ Êílœ‘°6'žôš²‰Ç¤®Æ(¦QMÎ(Æ€n9 mÙö·h´êXºo¦Na|¾+e#p•*lXûšš|óyí£áSo‘Ъ”•²×­éÛ¹¹Ëg‰‚{ÃB-sôÖ…I%×ä$ïÔóL?ÅwjÆØQÛYVug-šþ¨Œ^!iÙ/›I™ù®¿ñ|o®‚]3òPγé¬YÔRóð7JÅ"‰I‡jä[­w õQ`ª$ŽI9*wômN¢¿'/‹ë dck¿Uæ™ã9ÖvåùNe¼UI„t첨uÏ«˜Tt<è:uý-©™XÆ"1ÓPk%”’•Ý­ÔÎa—|šUë½Îs%tàX‰Çôµ`‡Tésúð¨V/­$šÁ Ógcï²(•Z¸ð¡$}•ä|IÚ²eku¬óè}CEÀ¹Q‚qpa˜…z½b›Wl5,jÚ챞KQÆÓ Îu?úOg {í<bQäí¼Îå‡+ø1Ip ‰üãË—¨³)¹à®dé(ªºFAp]á1d™…u7Š‚í×”Ì.½®>ÊΧ\«1‡,ÄZܪé%“ž&õÞs*m—÷ÓkiLFɲòyX°Ô)Âðu{¹ß'Òá+ }å$×–Î m3LW{ßaý4–¯.0€]2)ÔÈoí÷} GóØ<•_[nÛÍgO¼bùDþÝÅ^äõÄ5£gàòÂAw ’6í‹@éí°ëõ™c†©°o¼÷,,‰˜q¤/¶,£Ö{ݦãS¢]fl„uS§PKWåOæä “ú7ÕcÓ”òüN_¡ÐZíÐýZße4pï?0õ¥4ÑYŒ}óñ.ñ&Þ0ªõ©þvÅ*ä1Ý qxÙ~=÷¡Wܤ€„w¦Ð>e鎥çÉxØ;®I8ao5ƒwç¡9i•÷vŽ¢³‰pÄ)Y$Ì÷ûÍ’IAˆ+k'¥k&záAwÊ^ìÒ¡¹˜~‡o´žø–¤ˆf1PtÐIÙD¯8.Ÿvï6¤õI§Êõ`îXRÆÒ~šq(Þñ”9 ²rÉ~}¾lte‚<‰h²¤¾*õÂT¡ë&¨WµÉ=š(åÚßÈK¬JÎcÀ‰Aþ`ï]Ec݈á1t`Ós£U)ß§*jH¨*jb÷õÈ«Þ(wN'‹·ŽC¡¸jm÷d ã4â zÌ—JäFü÷%L6…¡ëý y$þ«ÆI'Gâ”ZƒeÛ³*Ú­ä0ÒkÅ{È#n2…•ípïgtÎ…ç0Ë]RPŒ®Ž–{`‘:•ž¶ÜD¡ä‘R"S… V± B—,1ßec ÄòEÕLü,‘ý°zÆ ìkê^&®ŽoLÚ·ûªâ†Wžÿ~Ц+¬)ë¾±è‚)šï.¢aë5ï¶”l­ð!†Wy}°5³Ô0ßXæ’Š3DLé·$[uªÖ³l¾lþ8g|‡ùm÷@7;y1–Dí>Ç(^*¼sü\Ÿó¢@¡íÈ 15º.‚e–ÞwDÀ!5ÖQ¶rÙ…Åád;êó©FrX¢6àÊ“½“"‡¸Ö30¦wi~Õ$B:¥r]·uªšÝ=ZÃÿkß^ïU †`’ä{ŠNòñ!Ø=É4¸ ì´ÎNÉT®žY‘DuË1Ñc†€èˆŒ~€ Ë-€ìrª Õê툞J˜¼U™ÃNÐ;5—o€‚²ŽTéÌT4Té$¶Vd¨0G@ÂÊÚ$5ü]f¼ BVopó¸´Í‡|”-WLÌ ¯åø]ÆÁʼnÙêê¼qÛÔªE»>>Ê”j2þ½Åôš `Å䶤O†qó·f¡ü-30a5iÊþWèö„( ‡7z`–dþ–fm[ÿ¥I¥‰·wûïùF¶I×tJé¸ÂËìÇ & ¶µ”Œ£ïŸ¿m‘J•¦ VîQY(¸N¾™&ÖÖÒxöºilnÑékŒ6D˜ž£°ýF"Ýy©$ý ;4CltßÉ·ÿ¡nìâ}ü¦l‹GÞÛº@ƒe2xò…7eÈKTbVBiü!j8Ï„_~~¯é>N¬ÄÉ‚K7©h`ÀHyov`ç¨Þ @} ãÖ\L¶d<7á ãk³dÌægáAXeÜF%c—ûü~½–d§á)ïzJ¹gøØ7)F¢úÓ©À˜“ɾ!Bà¼Õ‘’-¤qVóIÆ–ÓÝb%·»÷2¹ËEÊÊe²;¼…¿™s/G·÷;’烙¬ü»®ã·ô•àn¹4»Ö¼Ò¹J¡}KÔUF@¥ÀBIÍÎç ,Á ÷ýõ>)Þðó>ŸàìÐ i]}ŠXŸó]`DH>[†8ëßE£½)Õ7[šØpª´Ö…Úí1dî°¦ØBn ­·æ¤…—ã-ƃŸm[T2®Ÿ=¨¾Ù3¢QªmõˆY°ó~"ÆáJÄÊGÔ¹ž«¯ì·?h4lª–rç0’Êxs׸ÀòùÙ)jáe=zdó ~ýc-K¥C¸Ñ£¸ ¿ Ý®E™%9áCI?¸ð©Â½ñ¼áV)¹>Žr˜BÏoG_ ¶e\œOEJØ,D‚ÖtP­Ý+zV¶{/:&O é¸ Š_ßðÆF/š½Q-‚\$Џ¡"1”ÅÑcÐl¶™”µYmŽóèM»¿ÂªíáðÈ%à† ö©Ë•šh“o{Z%6)ëmBxEâ; .ð†’¡Nym·Aá/.“é2kô÷³"ê"÷ßD×ï‰óü¢M×ñ\¡Ë;vº×7^ØŸÉòõ¢Ñîý° ÿ¸±û0žTÅ11æìrø~Cú€á"'þ S¶÷䣱ÉYÚçA¤½ê±ã#Ù=žxÝÐÇ&Døˆy>»Öò&!Øhþ6Ã5{CÂ;þýï½wOµš ß¤í8|pùÄì@ûÖ÷mµn©Ïedò0Z¤`Ë÷Ob'ùIÊÁ‚GÈS9cA€qC EqJþÉÊ×!×2¡6ï_ õŸ>Ò&`Î>« o”(šZ„Ò-µw®†d;’ÂE/kÀµûL^ZZŽšlÇĹ7HæN¦ñ÷¢k?x¯´”UL@<жC ZÞ¼² i³ôı—H§ægÌ]¤vO8Ëë2?iü¼|‡x[”0Á%xL3Px™&í— ÑVR)ÂEzà+¦ÊÏÄêö¬ÐÿíêÞuçsÀ£-ŒöU‚EAiæ$äæëøó#úÂgm‰ãâ”AÆÃ ’®‰^RZÙ%5®·]‹:DÕ°ûЧ6KH„”?DöeéÊwÿ¶~E[D¸NQÌÛ!çô¨SÃS×AýH¶„S%ŸúÊ>V|²'”6Nus|Û{ÿ^Û\SJ~–žn˳Bê¥pÝ©¥Ô¹¡jèÜ*ª¹âþ^—¨Â'D¼ÔM‘툖ž‘³¯0/,hCïee¼­Ð.ø:—?ôún¸þSS\vÆ/µ­MÙ²XÌ%b{@}PdpÁçâSAB’²?téT»ÜÍÙX¼znó[ÉÛý=¼ç[ÃéDHB/²–b¶KbµÞ2SÔŸK-n²ño˜‡ó”^O2 ]4W{p½ jZaÚi6Osº ì²î!9;Qôöò&$ùPè)K¨Ð­K#ôkUºe.¤§G¯&ˆ»„Ôy ÏKžbï)¾"¼QÓî^a®å¯ ùbµ®5 ØÁnÑ*)Þl»Ä8_¯Ac¨=É@êàéÿL®«Ø"9!~U}‹ ƒ­ lô陾9ckÿ¡ß4ïöóåEgƒÃ8[òQ†Wwt0¤F¶_$•vBã·!RÂȳ(œ2úÄi!{Ë7‚O¼CšFC‚3Ÿyhe˜ý±¦õI}ç1aOÙ4}·ܷ%3- G C¯•×J†i$⹑ƒž4Š2s1|c¦ð@x8§þw» ä‘çˆL9v<ÚÑ@9ܹ­"µåÈÑ*‘2)ªà>¬¾åìú‰#§¬óÒÊ\ÝØÕD?u¶µ†ê$‡Ð$âç ÒE?n棜³Rð«´în¾Û…´2Ü Ú:9®y_ðlñ›¯ùg'ÏÉB0ëëCbGX—ÄQ _Ÿïþœj—ÊF[?±?6ªÚUÔTŠUõŠ#n• Ÿµ”8ËÍ6*ñ„IöæR÷E ñª°÷䪖Śù(Ü–GfC¿0AïªÑµhu#éµ çŽmǤEÉL§˜á‰ßIÝ#HðÅ” ¦A)¦þlÇìºÚ6w¼»·êŸ÷k–fSqØÜ ئyk¥‡%F‰×ÔŸfã÷òr ,=în:3›ù¥ðËx½T7„°02v7˜Dì©U y¦ù@ù¹Âî]Ûaê-!ÆÔtK´Åg<©Ú¢I¶ÛSÆ$”}Hš—©ù¬šxr±;l÷ZËrY÷1%¦»dªi¬9³,¯ ‹9þÁ¶>sÙ%°B#<ߪ:Š&Ç‘Û;ݬR†bj<¾¦à2ߟKÌùߪdÃ[ä‚ÍÈxÚÓ<è!?(’6æ~W’¸píÌ7`ÒšD_ÁôR½DûJTeƒ Ö$ÍñYp³—ðm¥Ø«v'òœ…‚œíHŸ@™Cºóæa‹aJÂQ’éЬCæ-ñ¤ì}òÜÚ úlª€Ûáþq]¦è•Kç÷Ý<”0Q˜%\Õx‡—qœZ¯‡§¡>1©âœº XéûÚS©¤ªB$o3æû§¬{¢2ã(‰—(v¹O3œÉ;Ô §Äo[ݽUñäåZZvшŽT¾àÆ„íí3oIï bféËÒ»÷¡°snS& Ñò¢Û)15Åx,«…ÝbqÅ`P&‰NÜ1¾bŠkq"!þlYx×°jX®w‰vx‚UÁ¡4ìnýsÄ-,åA­n u­IˆUP yþ˜ œ/»ÅCú[á‰Ð$0„Äñþq]ìÔ1Ù[Kmøè`.ncyOޝ¥®¢P^=­à¼Ú@­BZ^Sîü«›°&fâ%­îÚù$Ñ¡‘Ân<ËqY®U$njY´™k3çlEçÑNqÿ 9Ôœ[B%ñtÝhÁŠØ›öÇãS÷oœÎk]|„±Ã…‰ù»ûŒVªäý£–ä…µ)À®ÏóߣçŠ}v’ò&ÉCÖ1†F ÁøäQ18¡c‡Ð"¬e¯ˆ]a‡KÉŒ}z/m°?”N°/u„3rR9ί,XÁä§î"b'>ø ¬fËII¤…̨|Mà¶v^}ãXºë¥al¨}¤.S%àfròÑëÑAå½µô4þ¾ö°ˆ'|p„¼T‰y„¦ÏG 䫳’óêú¼Û¾ ø"žùfbü0Òâ¢ÉÆéŸÐ¼x ƒ5±\ƒäžÜZ†_ŠÔ¸FýS]j¸K˜tž'Žu¥¶Éô¸Z¸ŸÌ^Éü†|kß®š@æKs•û×ìÊ{(¯9.BuòhíYEípØÛþð$I¹æ¦ÇƦdÚæWùnlx´WK¶à2e%B'¤&aêSÔ¯!BK)ñ5†‹J?ö>þÅŠÆï.YœhE •o4UEŒþ :ó’¼éy¸nÃF1wŃYǾŠúž$?,œž§°Ñ™ÖôJð;è•ÙØêójÓÂÈãžÊùÜ×ü8ë` iÝÃDIg»qeêå‚в\h›*''Õâ53õÄAér‹er¤µ°Þ¡r7уò›à3¿§Í'cÜN+Æ{eóÇ¡·ð°A6ÚI©k¶•ø%Ò÷ÏÇÆÌOK§’:ïŠg–ù¥+²E˜˜Ä×?-{ö3ôDà5+݈Ÿ–åqUÜÙH¦åPó]z %Š]}F*Ê ‡ø-ú®<÷C~Ê¥œnbë?e¥zÍPïí¶Uî}Ô.hx;Õ¨|j‡˜²óI„‹w“&`Ü?HÞ+-È”pú‰ñ5ÛÍôùk$Ê%Ô¶êm©–ÇÍ{˜6(ÿ3ù¢X_~j<Ûr%aÆV Î9ø£àظ–1Q¹mUGébÆyqؤE¦ò¨PÊ¡'áŠ^²×ž+ÇJ„.;”¼±ãä±—w‡P¤ y§–Õ`‡}¾„Èø~‚ÄYgØ×Ç?oÿäK¶þÝR0‚GñI?-•÷õb9¹àΆ• æSéƒ?#•ýlž¨÷œ{ûQüÊ« 〽\MI¤jIòž+ýM‰q®è­|£ëðîR JÆÀך"^c›ÞÈ<ŸÝqêKß …èæ¢—ÊìˆÉ¼8V£Ú Có(š?tÒÆ÷GØè[58%ïì"\Hc$lÖUj—âú)äžgT E®+úæÔÏìëœæÀˆ•‘YÑ5٨걤èãyœeh[(æÆî¡ØóK[!û‹eL´Î¡%3”yÝØòÖöo¤÷‚>Œiõ6Mnb± tUñÚµ~ØègÀ¨ ë*Ú/ Å=}.´åŠöƒÏœì@NÂÈ^§é±$s;fËZ;`¼éí)6äܶãþzäPºqÀ:“6…ZÆm•lÙ#ê>(-eae|ƒ‡Ö˜®pÔeŽI!KXâÉ_¼Mž†ú±Åˆk!q¤'Q¼/Š9 ä ÝtϽö‚ðÉÚOáS¼˜úg%"ˆƒ â‹ç"­$š*Ý+Ò#õ09[ eÑ­šŒtþVUÆf<Š”·õ²—[Öò1#UúEb‰ñÃsœ¬w'©ÑÑìÛ+ÌãvÕÇLJ 'æ¡O8ŠiŸv‘ørÆc±Æ?ÞÕ|¾z.¾ÃÛÜä«ÕˆWà™#P íæ2p{àZ7Ð/šGìM–n†§Ã¹MÂ’+ï5È]8Hz-_iL‚|zwqx¿Ê–€ç…ƒÿ3™÷‡ûïØ !‚‡ü>ËVV¼ŒCÅ ZoI%ø¥ôݘaUÍ-ºZ·t·l\>$§Ô9°Ÿ²˜~hÒòcú! .rw¢ÏŸz¡ÂYØ";2ì6y.å2+£Ú|§â°š§|upZ(Ámáɬ2‰(SF²”LΞ‰:`ãNéIŒ†FÆéC˜Tf‹Ý5®ât{$ƒeïðIQ/. µQ¿Ç€ÛùVUžXÕ±º!|È?>Ù“‚~Y?|íÎHGóA—­™¤£É×$i÷‰ÿZÅÎâT·£BÆJÖÑÉ茅ÑZžóϤî¸'ê¾P&=·EêúdÁGÀ_ÔmºeõMÒÐ~4‘Ñ894†íñ¹MÒ‡eæµ)¦Azîù\HMew0!'È8ëèQq1z CTÜP‹™ ~]ÄÃ8h±Ë¤Mº>½ZF”·)=ë;¥Ç›©‰¨vuŒâ”C7¥•Én3câi¼ÐÚ“í„Q¢¤Ãàæ›–QÏxS5Öé©íP‰¶\¥ÚÕfqŽOÍHk½'ìäâ üB«»uV]ÜÐ ãîÌ=€ñ¼Ú€{Dþ~„ˆËâÉÁ=LT¯;JNOÌÃ٧Dýï_)†Þ¬Pc~\üâzæá•$%–ÄvjV1‚K¨N½ LfRG«ÄA"êK«Á05ú‰¥É¤ ™@½œùÂçUt£õ³j>Fûµ;ÞgÍŠÑüƒxËK wF7ÁtÅ2t¡/¦‚ò`A0g/:BÑ8fwwŸ˜fãÒf{½ «þ½o^uó¡Ü¥0žn÷Z•fÈh5·IÆ”wÔv½æc8Iƒ|Ü9fz°×ªô·ç!â¦)öÉuŸMd¢¸. ¢)»F£ úÎ^Ë]óc­Úe… òý„{<9Öø ìêPÿÐ'º0±xÍHb‰ü‰õ²%t¬A83%t|¨ñ€7U'a‡°G;Ytš1Giò|ãt'©¢Jã-á¶?Ó¨~ÜSz&÷ Êß;š!$Ü(;¡Üˆ?10nÿÖØM‚„›X¾ñ`y^>y;T,,È¢¾ÜäÞ¢8yÓ¢™|™1–HUY“zËp&L¾™Ó?í ½ |@ä¯Ïbá£Ës¢)`À'Ê<Ùðˆ¸Z<-ɉ U×J}e*v5•aoÔ¿±? Ù‚Sàî³Or!¦DÿÔ Ã–áÍo5ÄTã’IùÙîkbÎ+ªÖÝv[HèäÒ4‘êåŽGO%©-{3vêq6·U—¢Ã2£E°í¥ }ÑÅ;rDn_»®Z:„e<Ž’ƒÈЄ©%°ý7ßïØ|>DA' ±¿Òö7éˆo¦ïðí! låxj­1!bÅ!S)¢`DdVM*÷ˆáÜ›‚Q{¡åî’+ê&v–«¶Ï(¯¶¹¢[ô¼„_^Š» D„ç~¿åɰ± 6ËÇœË8&°'U{'ÏÙ£ßà<¦ §a€â—Ù¾úã'˜&ÚÊŠ*r˜kÆAìxò"ö—)jIH Fe›ÁûÕRL×*ØrñÃ’L#/•÷,@§¼”«¹\É6åä~€§{\‡&æ@ÇM“oê!þóçy<„gHíùÙ°Ûº8ÄeaųEýåªÀhcÜ',Ò’Rù q̯-ñøÅZÚ€ã¶ý¸*Y&ƒÇÑù‰Žþtq­¼K ÊtêÔoCÙKó“S7ޝv]Ó|C|”`ÛüAWÕ••Ïß›Œ<ˆºð“„ßÏ#ÇÛdä‹ ƒ'ÆÈ}ÁD¸/xì6$­m¸P:Ižù9 )‚aد±ÒŽÃŸ…¶<"¸h¢ w>ÓÙdH³…köÒ)«Ã”žtWó©bÄ€LÃôc¥šjü9m@m¹5ÅÏ.òÐäiŽŽ@€æÙ! Ï42íêØH±–í|Åñk&úxq“uïÖ16i2! úƒÊ‡7Óí9µÆ„ ž«»ìŸ&¾Â¢ïú|³ìð¢èä8X/¡44ZCéÐpk“u­·Ã¤Œ¬¶¿gŒ ›å8±@ÍEg :Uæ>é÷§›—Ù‘Â"z&5í¹ÂÇOßH°&§Á%ÌO‰~/>S¼˜‡ömxj]r2<)Õ©Àͦ÷|?c_,-8¬J¸/†hr)ã¥ÙbHG×±[¿ÝÏ5zÜ›¡ÝüÀ¬ŠÿÕª«‰Tõd=êÐÇ9M™š›™6‹’rL’¹ÌǤǰþ™âÑ¢Â~D=ímÔ¹™±%Ä,sÌ(§8Ê" \z6‰nSÈÕKB \Ü s-ÕµÕ×ß.,\øJˆhÚ<4A:ämRXXй¾’élm§Ѳmi’àÚ^rViû€þÜi·uxï·³/㾬>]|Ín_EEŽÈMê͸½ Ö;[C™²…5¸ª÷ˆ‚º7~P¤?;ßð;èãwÛá±Ìnü¸—è Ïj‰¥ÄøO\X<½Æî—BÀ*K¨be`Ïb‹³5ïr}+”4 ©ý2Xw„?·nÕ8[ã’WÊÜÒÃå¿È¤;ë œuP ö+¯¥kÁ“H+د–ÌŒÁ-xØe†vžãÑ¥B09‰Ä âPµÕ ™¼-‹#Ö[~‹¦&©E*©y:çJ-#´‰ íE•Ázýú–‚Ü[B²µ ß…%TƒàD£rT YµôUÓÒSíÇ7 ÀM m¶®ýR#sPv³Î¾LEÍ_e諸ªJ^¬ÖºM¥^ Md5ùjÂòòtU{Tø`ÂgÂ`2”Â*ßGî#€µúÈ]¢ T"±]Ó±L"PÌíSÖÕÓ~Bþœ7þ<3Ô&]ÞÇsèÈ÷þp˱Ïä»ìŽ}~[Ê!‹º‘­ un§‰h²ñ”Ηå;ÙJ·~¬¸¤R¨ª{Òu¡ÒEO¨¯¸;f:a”íòÒïA°£·¼á²¼t%ÎiØí`ü1ߢšÊ INzð7ÛÄJjxß´©íRêDiÖ½ \VÃ/Êç;ó"Ê IÃTùm`1Bîç‹›Wd9µ¯†Ñâß[€ ŽîØÈ•H7'àæ:ŽÉvM^¨XÒå™f(°ÿ0íÆÁÛ6@…¹¸á[%›"õò ?.˜ 墲™ÎzÛ‘ìéÿS?Ç#=aDÝ Èßï,Üd™ˆ§M!ÍcXMF¤=uš‹ÿõ[`A׸Qeãøë¢=¬t”õ2Õƒ¾jER ÏÎm1Ü9’1#aldÚÈ»ÙÌýÑ,⦱Mçvv\¬Yõé©w!‰Aáq­¤ï…¿ÁŽ2e_-{3ÏàõÁ§áÁB2-~"*§`óD°S0f9ÒÁƒ îïj5,_@Ì÷Ô(å°N^DzÙ)ÆOp‚‡1Ò ™ý”o­Ó-m6(-4>}%²“qýó*´ >sCeA. ¾MR†ú3 âKrÈ~Ø‚’„ÏNQ¾³“…·ç‹_ ÌIÆv•fe])CeÖÚE¼³]q VÕj.ÒGWéiJF8›%¼ÎQq(â´‰­è1.E·$Äð€bpÕZŸôtNz>)ØÒéêd6Θ}vô²P?AtB_ú™>ŽƒÒŠ¦öýsÚØÝ’M|>“ ÀŸiòµJ—0&stŒc¯úÇÂÞwÈ8mÛÒé;ˆGý@üIJ9Š |>BoÓ:ÜN±vš4âÈäI𠇱œƒsÜ#ó%-ƒôÈæ×‰®¬í í–â|fîg·¼ƒGlfü¡c¼„¤yƒXEbýƒ$&7åø¦]v¼P\KÔnÅpœß”zaÅþÈ µz ~;„ÌœIÇ»ñÐ_Ò‰Îoy¿XRÐq–9+Ñë,Çö¥Kçg¸ÛS÷|¡íÐ14Eî;h ¤Çp“üŸ$Ÿ›¬ÞOsB*‰%=’ZTüäÈñ…ŠbÚO•†å%x+ŸðÏ“ØÞßµSļH•ÒþÔFÛÅ Š1Íu–¿pUñõF~TG¦‹¯Ì`ØËËžÃäZÖd)x´Ad‘ˆ­8SŒ;HÀþ\HÿQ%åQªŒ%ìKä£9Þ$Qf‹´ßú(N1m©ÇqÖVyÈÏÓB] é• û×ôŠ~­±ƒŒ5Öç¾&ˆo%*ö§Má¢ÕwGØÈ~"Ãî>Xú™»fñ2¬0ZÀù2x/F{ë‹…àTƒ/KÐ -zr.~G®ݤ÷« 눎²Rïö/$ìeJ…Nëâ[ét8ÉÜ kðm¾kebÇJ¿Ë/ª%üÀG{Û|J¥ ¨Ë ‡^ð Mt+œBŽ7T”·üÔ› C­žòš|ºž{W¼#Ša7Òò6) JSȧ@©¸~§É49þã] rLü™ÃWII¶3õSߤˆó¨§¡Ï‰ï¥u©ƒUÜñè§æ{™ÕØm júê8øž‡å>&xmX -!,l?KK@ù¹îTSÂâo(Óþ?ÝÈN;6%(ÀBª-—…R}Aè;*q–-d\:¸Ú3Î&n³Œ/v¦™.k“1qíC¥ª(Á‡ˆÚÇ5\ç1\ÃbýòFvßz×^‘\»_7ô£”bø¤î“¬ÑÆ©–hx6®fèXå{äGaêiAœLßÝáíIdï6ùÛêlØ·ˆÇA‡Í’O¬„¦ÂËßIÏ')¹?%ðEþ¬Kë"é?!&wyÖª±ËÀ>¼di üP€Yq{˜É…ïTOÄ1Osø‰v¦øLYz½¥lÐtò&[áóåX8)íÇ|òOŸÑ¯ÇqÜzMèÇšùl;z¶½KÞæD©Ä#¼ï5›ç1íóÓ>@ÀcêÂ]Ê[YhÜ>"&ž’jʦíM ?1äœæT]LRu$ì O õmÛBÏ%#PÑ.Ü>èâ­sZQŽT0ÓF¬8K— J¼KQYV‰d,V×ÏÄöíL²È*%w”Ï›ò1zöS—æ@ˆ²TFõn° 7tÎgÕ’2qíEcp”m`[=2PßžÅC¤‹ ²ê÷ ÜçÌêá[Çu K4Œè€-:²&¼hYô‘[aKä’êþÌ̲:ÆI2øY4™¹ò“ðР²év¢YS%FCïk^F\¸Û OªÉ[k—ÀôZaÏV7ÈyŸìkò¯'Æhš»~Çs„æ)Gò^•ÄpüQÂ3«Þ¥¼ÎÄÖôß«…çs÷(ߊáï{úîMf•ÁW´†A½™aÔ2·w0¯RÉXb,Êì`å{NíOzÁ'´"Ùï)z,º¿±j­§Ö“þ4ãkɽ# €äI󤶧Ҡb‡£ £æ­O'÷bƒšÊÕKO³ÿ·_§j·Ìqôí³ÇcáN¥ “5ÁêuÔζlµ ’žÃJ ¡ßvC²Š^f=·ŒpŒI§ ˆ¶ªÂÆ¡BU˜t6í¿%n×$o­µÆvj‰ßVg?yÿ4\jÛ–¾ܪáLL$öê­Â"óñF¯0Žæ¹Çe¨;=〫Y‰Á¤:Ú-EyIšÒjÑH†`m:PJgª#Ô¨‡ÿ")Šg •™0êÀùÒ¹"OÿÐj4ŒNÛðcq¬¶zŠÊ»O1|ªáì’4C`5Èúañ^b:Z%üDäùþáT"W³ähC2òø>;vX/ïŠ!F³ª!Ym¶SàÏ’n,7>ŒõÕ¨¹ËÐ(¥mpŽ*銩½5~2:$/]&¨õÓw©¸{ô©¡ê)¬1”#§ˆ5/‚7ó'º("¾¹Ö_ÝÈ1–-ÆÚç:RÇZiœàG¥ŠåEó9 ùš….½1s¬€ùÙpbŠÈÄE¿{l•—ÕÃŽƒz—€8Ouà±/ªm«õj¡ßS/h²Ðµ^p-ò’Liƒ7W=zÒô£Eºc&ñ¼ÚmoUa)µ2i{)´\†Ô’/u¬Hò5ÅDZÀ·Hê»Á?W/úä!í¡œÇКôõîØZÒW·–¦²õMÐ?/'L“§ŒÓÇ|¢iæJÇâ§ý{FÄÚñ«ó¥·çN~ª Ðö¢–["3qàœ&&Öï^ lb3áÞ±¯U_ˆá¥%3©‡›œš‰õÝ®áq4 %»Š ©?i8U{½µÿ1Ù°t±æxùµ$ßÝ‘4p]ÙÓø ûpøjØÎ¶œOÃSÕö[»ŒÊõýšrùЦûRp\BÂÅ]õô¾,zõ«¨ZJŽÖ­ú@¯Ä\’{rð¿þŠý cË¡<¤üÎpäë7ñ ¦48ck Üëå´zгæ»Œú{$ÛV1äTß‚’Œ™ò±eÔ_‡ -ÂiÈIíp\ÐA0o"Pé÷ù0‘´}(U³$zê Ð<ÚÁÿÊU(G_­ ?Q î7SÂvÀ¿ð¶&5Œ¬ÛªdÚgw²Hv+&ž±ÑIïÓR îuõµ þ£Ûtß—¢ó—ÜÝÓõr»“‡F¾µw«ÑÕŸÑ«JÈlaš5ÛÆŸ\}¦†•¤nzªm^ƒ‚Íô;06ÍÚ&ÇòCÔÝÏ&ƒß( œ NÄ( ¢yŒÔm£÷V>FXbql׿÷ÛÊùN)òhÝ‘`ÃT¥¥Ò|ŒÏ}Üü³þrb*º®ÉªÑïø}k ÖÑ!í®‚AHã÷$Öºº/\‡gÒAšN›oÚóÀ ŠèØ•qbÔ÷š-W¯…+àÇ Z¶ ׉hxƒ¦ÔÇÞíkø1îLR·ÉA™]cÀÚ¨ëñŒsG¸Õ(›‰×Á6VÌ ÁüÞ$;«Â%ŸŸ";|îﻌ#a˜h¤·Ð3E’Ëâ”Ô¯o˜}TxdØ 9«ÃÁ6¾LØô+»7y„Ñ–8ä¿X$91äã¨7¼±Í_y5d@æ›x‹Þð 9ÕÉ5ð¡Ú¸iÒü™äîÉÑ—hÅ=K …AhPÒ­ãóž_eÕ°ŽQbÓà’†CÖ%Æb¾˜°­\EÁ"¼\¯ÀI” JF’$Þò}œ®Â€¯ÔSêña.´ÐÇÛgžWàM}ålá'üË6=ûÓ©Ehéæº¾¬QFUÑYˆ «'cƶ.¶¾MΕL.¶¶^/Ú„— k'­óv‡ê‡½´Ë€Ÿ¦Âß{s_å]\òbìDs$MŠ’.9Rr–Ç ¨!? ‡R“GÁÈ| iç'/ó‰³*Yê¼±Çsôp‘¿~Õv‚|gÐW¯++ÏB’Ébsfõs—1ÉcÆr„æHZéÎr×tÁ«×ª³Éü•ŸªÌ©ŒÌÑêsб3dü¼ë¡ê'ÆÈöàµà•¢·Òs­¢¸I2&ù­énVñĶå—ÛŸT‘PbÀyfeŠýÞwBîÔô}LüQ«ÈO»¯‡3Ëz^ï ʪ^¶‰ ÍlUƒ|aA¤ÄÀ˜Çj¢_„³oä5DÕÑ¿¢Ýd‚™þžñ^èôæš!C•cð­ëΣí•Nd¶º)Zý¨!ü9ŽÏ!ª³EÊ>츺$š41°ÁsÒ¤Œô&cÕa`LîÄ„§cœ3þ Tßëƒ$Ó‰’]„„ƒL‹<Zw„tçÁ¢œÎU•ûsáY±Q5ÛvJ ëXh€†VaæñDISÞç`>ƒGá‚‚™ÜF>~U+Jy}A:gYVMy_I{f$¨Ž8Öä6…’ž‘^¬¯[]7t¸J¼ª2Ño+žÅ&è¦ét6™'¿×VÊA ˜‹û'çT'£PÉ#Ñ~œcÚÑ¿[áfï•by4‚Ï®éµ°Ø »lç¶7t©Šws±'÷ÔåïMà<ø:îGþõTN'b~zÑ_åGo´ö+:}¦€Æù>#y¶ù Î\¹ð¢TÈÚ4‰‹¾Nµv“zlSº ³#¡¦-Ñ“å¾Ó %áåŽb•|š†µ4Dc`9g8HÜ=Ë›¹¿ÎŽÚ?6w½c‰ýQr÷xÞÛ<‰ÓGÛŠg5ŸQX_0˜+ÓN*‡ø6„¿t²n….'ÎÅS‹•–@ szs4¥9ÙH;›Œ‡âǸ@ÿ#º ýqà}ë—Ì¢E×èj0«ùuÆ$:š­Võ'Ù…£dÙO–tϰʷ4>Ab ÅÎ&.jªÄïL í9_xÈñý^žŒp ¶».£W _‚™à=q·Ç8åp0ßÏþŸü!Þû; %%èv 9Ÿ:’y!ÌÇrÆ!Ѧhi]¹9¿Õ^¶h˜“ídMg›Ÿ@"p’\6;³Õlêä©n ì~©ùn9}…Ÿ½,,’ÔT±þ{æB²…¦gmU<Öœ]òesáPõïÚ9ÒtX7ã©’.Ÿë‘Uh»á­ i4Ͱdüé2³Ñ§ãÑB›:Š[Þzà”´ z4Cò dÜ==b¸û·hXîñƒý—šS,šÆçš«ƒxL$v1Û9ø”Ä!Ì §Œ}oÚ5°4°…é+ŽWÚ]œ²Ÿ•Ñà;el«˜²cF1ZÇ0àó€2°OJË]ÝÒÓºÛñ[-a±Kñ£_OvÞŒQ²±ÞM>öP¬[`ˆk ­Þˆ!)•AñgXl –ðõ¢ÈL΢oV“œ†øCŒ—ˆÙ j·xB3:Aj¾ñ ‹~+nºËn’µ¤ –¢JMáà”*°j%ÝV«j@„'G#iØå‚Ìéàĭλ-wÿüªU‰‰õßÊ\ÛW¦ùÞ õÈ©¾z¢bžmmÁŸª-ÂÓ7}ƒ÷ Ñ6ÌBò~Ôí[Qqæ¤qC¦ÍÞù÷Mï:Â.€þ_ä«ÀOÏpé99b~Ú ¢½˜I˜ GñÉÎ?40¼È³ŸÏµw¬^\ÒæòŽ@ú¿»ÀÜB—:½\àÓ vJÞoG—X:_Å|ºæˆ-ZÏ!—–ˆ°­Ý*íªšÊ¦ £À]$V5Ú蓰ʼn¿¥ì¨[ ·ŸÈ­r®Ýûaø~ÇLumàî|d¡(©vç‰o]31U“¨Å.Nê2¨€¥*â»_® 4î `ɱ“¸¥Z¥Œº-‹“ébƒþ©ÖÃܲ&öp™‰®€‚ î¼ðO0±D³Á—EñDðùCÍtßõÐ^t'ý!©ÞALòS|í2­)ÆW)Ö…ÁÆÒ„£Ú$4yà Š)}Ì!UÅK«ÎÇá… ™2ÞûFb( †¯œä…ï]Zodr0þ2bºŠ¯&¨]p¯Xz^¦7ì/ÛÂyA¿@þñ3…鱃íÚË­.Dç9C}VŸy”"­ õ¤Âgþ¹}$ÎjqŒ)´ƒ¥ø4Fòêj_† ôò®~¬ :t¢§Ø°x·\dS-’e!~«À$LñõQŸ®=IˆÅ]¹?85tmYu?Ð/@@ÇÄC ϲÍdÍ¥n¨ÑåëEïkIù:MwÙôéJæ+„ª;YéeR'í]Ó :‡¢óE j`Ù0³ž5X.­ÔÆîö£fÓŒ˜] úÍ^¹ªì'øËÙDe–i¼Ñ¸'ÃS›íÞ1Re/ñw½ƒG„-n5sï\eûN”ÞhkĭвDÕ<~²×»¿ÅÔIX“)ꩤöŽ´¨!^ žŽ–#¸½‘2ž[¾”¦Oy~z$ÉzRï$ÆDy{ºR òÁ ¡ü…:öàä,q‘Þ†„‡]( 4ŒÝìNy yØ­g#‚ìË|¤×Äås””8Ž¿Êê°‘ û¾Ïóéw’%–­¶ !“ÆEHaåùû¡æu×KžÆŠDaR¬äô†í°G‡÷§mÖ~]Áe¾0• œ0¾Î÷²iñ< '·}".Žã{„1’„U*<Ë€aqy¯¥å <Ó$v ÁþÒàÇÒº^./ê%]K_Á½wÏá0¦ZéY“ÇçIÞ¹§8îæìùn±Ìà”ô³‰Ò÷ŇÌÑþ³ói°€hŠGp†ïÂÄ׌VÑk42ƒá]:2‚1ÒšÅR[KÙ¢aâ‹z˜DzEÅ2w•”Œ·ÌâªJ)Û#hýÊçUf·mÕíµ3KMî,°Á–É#nð»{?&~ ôÅc©÷Ý…ó¯> üüM©5HgÿPZR,ŽBe«hEœhÚ!Í;óæ¥ G/³'¯Â-¿œ`F{eA‚ù8pÃAóUû§$êðæý/Ìχ@¯ ”SkddŠ\ŸÍä;fŽ$qyç±!ð¯¢Yë\·*3c{ôýyš2ŸEße ¨Ê›²:æµ=&sDæ¬Ýs,1C–óq0Àäˆk'g/¾8Õicb é /yXÜÙ)²C<"2u£ÚÊývѺS}•±dßËí"µ¼Ü`Ý  c“‡D"q·Õ¢\Ž–þtѪѦÅßl¡b¥!ážÅÍ®_¤ÛÖøoX›œ05è…8h^"DÔàBxmÀXcì5šœ Ým:þb[Gp+Ð2-v§pvÀ©I ŽáÌòˆ…˜Ú¢è4(øéô i²âÖªW0%ù]Q6Ñíû¶ET—ío-íu1" zëÈ:Á~qW7Uš°Ûfôšîç××àj¿š#ëÜ£#]é&rÇÓTΦçQK¡4Š“'…ñ‘Ûçìéq%ØçÄQœþóò±–Ëé¬ÕTV2 V*¯«À\0’úë”C8í6!½/gëãÄØ…QEe“s„ŒAÕŠ ›6ñ¸@ qIÇö±×70Ù¡õ¬ÁZðA—]w'«ê†ÚÔhT¯] *B~ƒ€&"^øL9Èò¿˜[÷޽¶rÔc’ã3@Q½ÌT ¬Ý+ Kÿ¹¾øâQ}œMþ2Æ«†}ÐÊ(rNÏ|ýŸ¢`lÃÀÐ;žñ5ûŠó?QÜŠ%äh6¾…åE˜ýÊDõ9 I£ÎC3Y¡Ó«çƒûaCŽi>ùÛ<;SSeUêÚdðîÙ¬¨šD;"¥ë†˜eêÎãQi¿~¬+‰ÁºÃÁ-UÛîPMå&ËGò¿þ«†’¨bÈt0-m§C;Ÿÿâ^MYy.]@ô§‡JK´~ä4ÔÚÓÏ€e•´ ‹+Ì!µVôeÁéf’=ͺÐh…o‘o•—è~:šp벊°”×Y^(oçqe’ßîÁ÷ÑÐcœ“µîudx¸ü6~öo/lš¦ýd3LþggöA]ú¢œŸû$ÀVqž· ³ÆkÚÀ›Ü¡x-µÞ˜džiÎ{Kùš>"i4¢Î޲ApX5z¯c‹ÂáXe3ô~ÐâÆ”Šð/–p°€HÕ²Òî×  %Ëõî­y09ú¡µ{þé ÂJýÜ0j³­Ùjç@æŸ(ýðÖ<É÷œÑ«`}ê[*Ú˜›×Ai¯4@‘þBÀWWŸ¤–¬q„ øaöžìáu)Œ…™‰ùÇ„NÔ$A¹ïÅçâb< †84Q×KÏs=ß9¢@—{ ÊÐ0Î|®¸€¸Q´ç’Qfb韺¬v=ˆäOå0ؘ±™¼'Ú¦ò“WœË ùª ûOjž¶ÊK¤#ö¾äÃ]]§9Ô*U]Ì ›µ.0°nrÓ”6Úg´Ü]l®¾ËÏŒ*‹¤ÇsÜ-äPzÕbÚJbÿTi}¶øxƒ]ÖØ¥Êžøå†¾‹¿èµõ¡ìБ¨: æ;(¯éà&Ï|IÝ3 Œ½‰#d7Çd}G+ux> Œ,•”Š¥e±É³Ê¢ú}ÎD¥[­åU#ø†Ýz/]5wÈتïçtÕgæ.\ÛŠÓàØýÔ‚óª;ìÐ 9gò–©I…Ú6Ôƒ©œ%[Ÿ‹>÷qá}ÎÜ;' É4/ lAr;ž Úá6yd•Wm>IP_Lw·ã~Ñ¢ Ú<ºpüÕÄ*gnyÊ~6Dê,'ùCoðô“»™–ƒ¯ rÕC=V˜ÉÐXÊ©ýåá6Ô7m·Gñƒ5ÿ0Z¹î7º"èz0‡Iޱoì ˆJ+•~mû1ÜH)gfäp~ñö«‡zu i*ÄèÑ“OÉ’ž{ðò…ÒÒøÃL»óÔšböÃik(F.M¸‚qÁÂÿ2ÎæEL·ʒ ÌvðÙe½#qIîz#•9Ok=PÈN¶ÚyzÛl X7¹‰ÅÅJ¤ÒSˆR¸vØm凓KÃ`›|“y«@ö`ù£$kßjº{8¨¥'G¶<¾TVæõ˜HMl÷û/ÂûµqœÈ`È=‘¥ÂK¨idT¢Ò²½ ‚Ð-â7|k`eÁ\\µÖÃfzõAÂòõ¼é3êa"Ÿ%Mõ~†ñ½÷Ú -Rú:G)s회š¦nöÚ/ç´]óujéªy¡Þ3÷ÉxÃ)vFG²`)ϙ͞¿2wxm¡áNÕ6Ì×¼0ö$³ Ü:)þS¡jÌ•ŸKü¸Œ‚EºEõ;ª!›àaKÆ—ï×g…¾Å)‹œôŒõî‘,ócúPÔï2Åî7Øú«ª’ªõõúUôð€µHJJ¼”8óÚdý°h% !{ÆêAî×±u/R¾Zäoâ+ш µ¹/ Ì;Bc„ñ=Zx4!ÃÐʉdäyr÷¯YµI Rµ¶ð¯æ—¿U*¡nîØû!s-žÒQ˜íÂÁáÙJ×úê/ObM‘#ÜÜêp£Ûy4ð“\ïª#Ʀ°¸~ÃMÛ ·€2ÒÍæQ)ݰ&òK×HટåïÜ*ËwTr@þ2“ƒ«²—Òé´˜¬¸ãÚÍ_ذ ¬ŒI˜óöõ,± W°_&Ï<¹GÙVáªX̤Ÿ¬3šÌ.¾iˆ¦ž˜žnÔŒîÊÁs€ s£ú1D~¿Ãu?ºD³«-ÁA0«Ç?ZZgªÌÆPè|þºFgÑ ü~•¡tOÒáÔ(8£Ð2p“$°„Ät]~2‰-"˜.ç€üz\6kįɲ=­þÐEíXIpî?æœñA 쨳ïÍ&0'S—[Õ—xl}q¿F‹7˜%"×MëS¼w ™£ Ç,ÈàVÅÃ>~=¤Â!ÌÆTÉV®®Å¬n½^áeƒ*³Ì‚ÅÎâ¨2+Á? G•S*"Ÿ€j8;朋Ç8·k46c©ÇRXì^2xˆKÚñ$Ê\p£ÞA…¶D/„O/ןùèv`*Ä.T4ŸÒuÒãš÷­×—ô×6ÛÉ'±­Ã„²?Ë:o÷–Ù*ë0¨Ççž4g£aÇ(ÅИrŒ[±È9ÔæŽâ†îhs—æË _;3Õwx,ë:ò6Í£Rñà„ôOlÙ±˜lÃÉá-cþ¢ïVF—©Pš7§³–H×x%°±Nr4bÞb”«³•o…í“sD•îç¬à þ_n>‹éj¢ ýÃÇ„‘c÷{ð¢ê# بöÐçØÇTU¢ ¼€óÁ¥“+@€“Éë–¥ÑÐz0ÎZ<\ˆÛ¼¹8oUh'ŽÛ.¯ ›€|š*¼á&íC´ï\©m½À+ëê? V'4#é#*§Èá’(¡S*‰óÁRÉ zÙ rË|ÍršHWìáuàe_&}H©þVŽ)œ}Õ(u[³‰õ‚ÔêµU–*­.y‰|ÚëÁÎRÌ€ úk³ê¥á0A§éX ~³ ŽCŠ;ž(Ê:ZXàɸ& †ÎøBMØcÃmç».Z'Ú?2Û¥z…:X® ( ß•ï1³Z–·¯Ü8Ï0`O*J#Å›Bì Þ$dP„PΈÂû±½ú¤BÞ$œ§eÿܪØ`&±ã5ç™ø'—ÈÆ‹y åã¡ð˜ê‘üûAòþCR\Âc¿š‰p|ÂÍÚ¢«ø¥Ð…ŽñX*¢Û!HDË\›×a¾~+C¹F¤œéƒ,,™w "_߈—ó_ý„×õÁ°ÆfS»1*¶BÆI ÖI#éìÁÔ¼öÒ &;‚ýËûüXîÕ‚¼A¼É.dÇ! ‚ޝò˧ï­ZnZ=(’ nt^·æ3—Îó°ÙÇ–DÌKn6¬-º¯jYçÂm˃RfÏmûQEßڭ׆Özz–ñÔ(¹ø…,‹ ÙÎhæ#lS)n7œ(“Oe^çÂÌe–)ùX(G 'ôÿñXL"\ZN¬Îv‡×C¬ Ë]æ9?Úú;-KK±³±×}Öa(£aoä›É‹Í‹@M€ž Ÿº§JªVdh"pø}Ç8Î{á¸uû_³qÑX¹S@f¨qÀíÁR XtšPô’$„'6‰ê¨ ¦±æ° µªErL·ç/ϳ©ÁжA‰ŠövšøqÍèèÞúýoïks¾IoºÀŪÇÒQ˜)íå‘ñïÏé=ðN¤jÊ¡'ô›Òµ¬c˜Ónà6hŸu³W©îì÷vC´“úH½“#” ¿Åó'ºÒž.®l™*ü¤›¬!&Z:¼kŒå²á]1Q\@¬;&Q¨BNÊ®~‚»Ùd••Dßù‹Nå|ùÛÈ`ˆTL[îl¿ÿ'.¥8õ¶™°ÆIéù>7”BOO8 ‘ÅŸBÁ€ÞâZÝ‘¯ršz¯‹4OZ5·ôr®z ËþÁ_\k¥·Ì!„ëq°ÆîˆÃC^º[=ÎØ°”ÂE+ú)áÞ~)óGBöƒ1Ц0á{™²fW¾þ¸çpãÐͧã‹rÓhâX( ïü…u¨âcÑY·á­ü½d*úQʸңì]´Se;li%át¨fZ÷®sþA° e8vÌ7þQ››—Ga€%WÄVvj( LN£ìÀ2,Ý~bQ˜º. íž±Çûw¿·ý<³#Ø©ˆVìBäžú [1¹Äüh K‹ •¸Ñ?î‰ «˜¶òs ®´0é®—…þž¢s^—MTÃ,Çÿ[ƒþ½ÐƒüwwLg»QÄxu4ñm»jÏkæÀ½z­ôRõzÑ¾Š¥¤bÙ'{ÛN6ލGz[éå‰# ø4'I„·?Ñ 8›_BÖ­–äÈmFç?ú_Î¥oÚ*|°‘&äÈ­>$ÜË!ñ1r+d"µÏû2òįÌ?ðr4‡o|v2¡‰§^§ß/t<º>^Û^˜Ó"l5Öð3 ‹t˜ßöÔ RY2¢0³k"H,ùo~\o¦Q¦sFU,ôZgíÁaO0Â-€‘sË·1uKíïö6bÑH@Ÿ) Ò1i=ÍqÛ»‘©Þ˜ÃÚ§–k%í²½ÕP yˆèÞ¦l¬¾ÎéÔõór¶€¾òå Þö~ÞüîÔâà_[ê„«Døc\n)ŸæGÓ ³‡¼ŽwpÞ™bêÊv“7ÙÌLjÊ…:Ÿy¿\ƒ1Ì^øìð¹ïý÷oô‹³$£¥ö Δ1Êçê÷:å‰ZJlj|+¿©o2Ðwñ^ŠffqYrg'ž™ `Ž]Í|kuòÚЄ¥çÍÍp…s5ŠÝ¿¶’èÊYqJ к³â",¤ˆl‡¦Þ0rã]­Á¬°CÆuäD)È—NÕª¶%±\¯¢—¨W/¬5¦Ä2~Œ´7²ÐD] Ð]D‡¥ˆò³ÝÊA¹\^gzœ_ö˸ª~<Ô öÜÁcíËo7n¬7Ò ðõF÷8¸§Jx¡ LüZìD®l˜žÒðñ‘QÞ±;¾6$b»‹Ë°b6>,÷ìÛkFoNÜv~tc} »/-oôêz·=TÖCÿ&#½ü–/¹B­ÞB,R<ï÷¯¯œÈÔ»FÞƒƒ·ELXJl_^Ö^ÈÊŽ‰ªD0N/£ã0“iRŽìÒ{´Ê—ä™ùÍ@ö÷¡1 –ȹ[í–äã—õ¨…ï;p·…jÖµ|%e‰"—¥ûW_-xÏR*Û.TƒµëA/5G=œÉ„ÝÓµã{ÉÌ¡’%µH¾mr}jÈS`,óÎÍØTRÊß»(ôƒ¸¼ès10F8åX‡M‡7ú^.……NLÞÌš×à‰Pz äþì,’ïð^¨¢,¹˜_0³OQž÷–ø‹½ﵘã¸5²R¾ÐFÏð"®Á×Gí[ñ÷ÜVpP€Î¶Ÿ”Ä”µc1µÄD¯¶:PŸæÓÉ2 k™š@ ´ (?3V&“ºÌwóR m»¦T‚œiºâÐdƬäóÜø«,<†u4ùÈR™®«Ði”¸Š?ŽrêÛôéˆüÍQ !„4º øL.Ï·Ó4¯(ý32¬ƒ&ÄË*F­f‚oÝ>ºq×íE<è}þ0l®+ŠG2oühÛ¡ çËíæB¾PtówìѬ\wPô¿3Эó…rú•d¤¢öLŵlQÉ@”±6 »ÏÞiUxÆÜk×ùÔÅ/z“iì—n*¨¥=¯{™ZôfAJÙ§ª÷ó7bi¢êŒs‰ÏûR3‘Á¥­e±(ïª{‚ÆÀ“ã´‚6:÷Ì͈æ&Xá²_ñsãH¨x/4ºÕQ'>ÍÞGÒà(¨æ?Ô¶&!¥Éèµ´êê»"ú,ÞªŽššÒNBÞ–øoXN11$æ ‹‹&‡zv«é„ÜZã¦Ééçöšž°ÿ—ØöɉõÊâ€êÇ”]¤oš"JÝ–ÏE5 ß' _NShlØÔÈÝ{ç6ÄÌ-‚Á„:ç+.Ü+M±%GÈõYã¶ÕDÑ&—â9ÿScú/(‡©hÙï©S>m•ÚÒO¨BÆŒ rFòÝ7wú@Çïûæ[iXÃÆFÀç0^LóMšìüÖeZ£[f> bOØš:g‰u§µú=Dþ\I+äÄ6£›£ùÆühj$‡î3»i¢’Vi8ºªê Ü)a ØYᲫ ?6@#äo;‰úÛa˲FÃÃi˜J}2Rï\IðŽ0¿é¤"¥XßÉŸÜCJ älâ r”üŠ|ÂÜ–gŸs†Í¶­Þo&¤lºÖV%Ë?øßöIø.Ôp’"ÜÏE à×àA>/[ †ùY†€s#<ޝ"â´4u²z°™m„mS¥3| NûQÚt„»t ˆÇXDì~žÕRÃg’×=Ñc,ª˜e§Ë*õ~%yS¸ib Vñ¾õ‡Ô5Ì%òeûÍSÓ…·¯Ó=¥QêŠXºˆ\©ÎTRÌ0šy¹O¨d4Þ‰Ft«ç‰ E ^ªŒ>Óû”'ÿ=ÔÝañ¤}H ŠQƒ „âž¶ùstE¶ó¹ÅŸ* WùX\ÄîD QL=Ó²ÞÍM𜠫–èc­ ½œ8<2NÿV9Ù"Þö  ‡ÂО‚úÝ•í¦‹½"tkÒ·ÊÄ—; C^_¨ü´#?wÍo<µsþmŒ~Ö¸õ4>`íȱ±:-Zžboì„×µ8Љl<1Sæhåu‰¤¢þ`ݾÈ.ÑÕ1à Ì[Î?ï*ñlǕ؃RmÅtñ€q1œI~°þÏ\ÿä+1zŸ]?'­èw•[68ࣕŒ5ǵÏQ·M–SØ‹g&rZ‹XSq»¥ ÿ’©âwHx±ÚþÙPšq¦M;=‡¥ÉÕÒze€O‡G#E#jÐÉU"3ÉxôüØùJ¤TÝ]1)ìqœ46ö=DŽN~{V¢Sßò¤ñ‹ŸñýëN©ä “}Bƒž„|tL¬î¼ml-Ú×"ó¬zåÕ—Ï8¹ÿ=„ÄÐö  MÝ\Û6«¼bÌV×1_h^Å{*€$Ké¬ã`«96|ž¯ ¿óÌJi-)ó(X=,ÛuŽ1)&•Ô}⋨þ°P¢Í»ï޽V:½Ù‚¦‚8ˆn –UT¶k ]–ÃBk…”¦*“ç0x·üOû"íUúíûûï’a‹ñE@ÅÖ“|X%º<ŠßR`0š+»u×D/úe&ØF,û•c• ·ïß«>"ÜBy@¼ùÒÃ52’Høð¿±HázÂo⸋»¢˜Ù÷¾ÏÍÑäó}ü!X¸P}É=ç{bJaÒ¸Ù©HX Ä=MJÁþÙ¬! í6‘Æk£€›×‡¤-B`Xí'ê^ÿiQ6Õ±s˜ÖΔ´¾ýÂ×ì±¼^ć)dPøQƒB‰" ­_)»£ä˜`)Tw»ÆÎ ÚÛXx…¬ÕÒK4â²ÁË}´ÍÓãȬ¨ KjËöHÜ>‹«˜!‘¡<Ë…]2®èêo߯~þ&Z3œ»ó;­ú1²=<ÓÕ!Ì$ïÉoTJÞ0–s ;Mî®´Ö uYü¤YÖ¥*%]…îV*¼í Jà—h޾€÷"G`uÅ#n…à!¤-‚”¤o*F1ëj«2ƒ2Yò}9_½êÚáWb®ÅÒŸˆ®éQÂE±…‰à(ïûÙð§(­·ê Pb¦±<ý« hÆÒÖÕ²=aÍl+žxWÇ .¬âƒü$÷àLHd [V¥¾n¸»Aί}`Q¢NŠEÇ-äGÝ꼎nV4r[“.èÇ]Ô}_:|a\ää •¹ÂM~PAüV/¶Qf-È6òÒ.A‰¥mê[7ò‚?9…ê’—G½õ±aÐx…Öx‘ŒqÙõ"T“Ð>@·–ò²íK¡P¡’¾ÌâuhàªýŸ´‘=.*½>WJU°zçìÆî«0Ò¬ÚOÈQì„Óx‚8ïJ±¤M´Ùg¸Ü8ªýû$û/êP“pbâûc¼:øOÝݾìîyF!‚¨sÉ´xrx-wnáŽ5wrÙ¡^ywûó¨Ö p~zCn˜`]Ê$hàùDû¦1­_œl²‘ò»ïhÑ„ßï l6°©ªlÀ9 Iz¼ Ì‚Eú/¦÷ àv–‰ß ¹”Júp^íåJuñJØâ”uÁCÒÞ¯†µ»­RŒ”yªI+÷å^]å³ʈ¯LÏ"»Éˆ’Ç,±Gõ¾ˆñ\µ‹1’ÈÂ’ø kò&p—-ê»Y šÝãoQ Q_6h>çvËØô^Ö‹ºÍ<Ò=¸ø²ÎM1pĶÁuô's+Ò2StÊùõ=®ÉÀ©OqÆŽƒ@ïØþú,óM)'ȶ‚ˆlon8/5®Pky[Ýå*¿âBoC2…µ2Uf­CÙAô(VüL÷@ª%c6‚§¤Ç£q’G›<›zãÉÖM5ÁN±±ç6£ŸÔ÷C£³d&5ñÈ¢t¨;c¦/EÕríuÿxI;õ4±‰¡‚’\ºrBÂM¨— ÇMº™”+€Í³œú,™ðöEiY¾øàRŸt¡våhvø‘sü¯ÜÔP^ó.BƒWe’ OÇðãŒ4X¶–d½¤!¾n™ð&¨¦jX½D\¼ÓúëÛ †ã¬ ´hÑ\Á×”ŠJ$_}a.Ú@ýÅj^쎕>DP·î¹…j?õç3Ç¿Õë\d–·¥Õ~ëÍÂ^ãHÒõ‹ºâQNŸ…âŽñaÞ¡ÉÇúX ðBË0ýÄÛ>¬ endstream endobj 726 0 obj << /Length1 2185 /Length2 17781 /Length3 0 /Length 19083 /Filter /FlateDecode >> stream xÚŒöPض€ ãnÁÆÝÝÝ-¸§Æ ®Á]CpHðàîN€`ÁÝ‚»»=fæÜ“¹÷ÿ«Þ+ª ¿åkïµvCMþ^ƒYÜl”;¸2³³° $•Õùllœ,llHÔÔš W;à?R$jm ³ ì ð/½¤3ÐÔõM&eêúf¦ v(¸ÙØ9ì<ì¼ll66þÿ1; ¤L?‚,Ê,°Ð‰Zìèé ²²v}Ëò?tæôv~~^¦¿Ýâö@g¹©@ÙÔÕhÿ–ÑÜÔ 6]=ÿW:!kWWGVVwwwS{°³•=Àäj Pº?-µ P1µþÝ 5@ÓäòXléênê ¼ ì@æ@—77  3à-7@C^  êtøÇXé&ÀŽÀÎÂþßpÿñþ+ÈáogSss°½£©ƒ'ÈÁ ` ²Te”X\=\™¦šÚ¹€ßüM?š‚ìLÍÞ þ.Ü #®0}ëï?ݹ˜;ƒ]]X\@vuÈúW˜·C–v°ÛÛ\]þªO ä 4;uOÖ¿¯ÕÖìîàýÏgKƒ…å_-X¸9²j9€œÜ€òRÿ±x!ý‘Y]Ülll¼ü èanÍúWpMOGàßJö¿Äoõûz;‚–o-}A–À·?HÞ.¦Wg7 ¯÷¿ÿ›ØÙ sW€Ð ä€ô'ú›hù¿Ý¼3È`Àö6xì¶¿~þûÉðm¶,ÀvžÌÿ¾\Ö÷’:ÚJòŒ7ü_•„ØàÍÌÉ`æàf°³qòxß>øþï(ïMAÿ©‚í¯¼ƒ%ÀÿO±o§ô?üÏíÓýg1èÿ;– ømbº?þ›Íüíûÿç1ÿÛåÿßtÿåÿeÀÿo=2nvvkéþRÿÿhMíAvžÿѿͫ›ëÛì+ƒß6ÀáÿšêÿYWe ÈÍþÿjå]Mßv@ÜÁÊr‘y-Þƒ\Í­ÿ•äZ-˜ÈøìúëA0³³±ýÝÛV™Û¾=.oóø· ø¶4ÿ;¥´ƒ9Øâ¯íâàæ˜:;›z"½]ñq¼ÙßÖÐèñ÷XYÀ®o.€·ö|–`g¤¿î“‡À*þ—èâ°Jü!^«äâ°Jý!~«ô‰— À*󇨬²ˆÀ*÷‡8¬òè-ŸÒz˧ü‡Þò©ü¡·|ªÿ%¾·|ïÿÐ[õ?ô–AãqX5ÿÐ[·Zè-ŸÎz˧û_âÓ™þ¡7Ùz«Åü¿Äõ–á푳ÿcý×=²Zü ßÎø_|»&Ö†èÁ[–ð/ý±çü ?þ+À_z°›ó¿üßL¬þ…oYÿ©ï­gkOGë·üÅ› ô/|kÖö_øÖ­Ý¿ð­]û?ÈþÖÜŸPÜo®o“ú/ý[·à?ÙßœÁÿKýV½ã¿ð­ÖuÂþV˜ËŸàðã¿*ç~3wy{ÿ8¼æŸ“|{]X]­ÿ:¬·j]ÝÁÿrx+Øí_øÖëÇá[¹îÿº‰7ï%ãx ïù§µ7W/ ó?±ÿ×Rš»9;¿}%ýýh¾mìÿðßß@ Ðial.lSÜvW%Näμ=&…¾23hÍùF¬%I­õÑçÉ8A}b»iþîñüCñÚ~DbfM±Ÿg'í@[èfÈNê\'7>´÷_±îÜûd=jûK—FBg·Õv*y‘ŸJ'™c´¢?MSç™eÍàSÀ¹2“ 0`žy O_ßLa挿’)$0"ùÅpxë¯sÄÞÏx­”ir¸tPèã“@_cŽLÐxKì}VÀ›ó..Xþ1ïÑ,T@–ƒÊ”ºÌŒÁ²Ç‘Q Rrhì­þ8²ÐÁ¾•›¦%úµ•T]ÒˆmìL¡ŠSÙj…åZÍi $Ùë°”Xi»Ñî¶´I%^䟬}Ìð’'U£fG¸®è t¡pæåä+¸ŸŽæ'|‘WĵÙx´$ÐyÂ{–'·cÃI¹ߟí'±Æ÷¦LD&–}ã…vKÖàx½úغ2x„â¾ãéz3¬hAñsÛ’\?kµÀY‹ù‡‚ß+Q”ǵÕ1W¨¢îI9jœw÷‚YímRz jðï>ÕKÝöùU1åÇÒo¢2†á舔°#`~—Ħ#xQçÀÌ*ª(<%™ô}ÏŸôÕáiúÚ—‹/ŽóžƒGe?:ƒ"’פµm9ÉmF雯‰®ØhªéÅC~)“A••âsr#’+» •]ÐàÈ+5j? 6oöÑ‘2O‚ñ«ïÜb@ëãíêšBu £ÜÜ©÷Ãõi¦a2×ûUðt~Y5øu7h”hÍ]%ÁÁ+ØeKÁ¥ótòÄ4ðb=ïrv6G·È|#˜7¾xo{ŠCP5Ù ÜÁEÐþô-œ*²1úpðÚ×"²éò¼ ü®¥}nËí¶ZÇSÿà®ðq\Ýñ¦ê|›Î/ô`+€œ£…~`h¬ªù-°:º‘˜—jæ¸.½ÀxŒÍö®RÜÜB÷2ë{†–¥±â•bÃñÉüs¬ ¤]LŒïI'Å¢}E¹1åb‘‡Ùä­#·ŠÁ ƒº§Kj2Õ¡€ëq­@/Mü§â –·eñšßÞŠ)²[Ä{„ ‘LúîºyÈ|lµ~Ĉ.#’fY‰ñzI|ËÌv]VM¿¾íCD?×öù—´ 8RbIç†Æ6´Ä}Sƒ@/)íš|Ä=™¨i¼yæ)ä)Þ»‰hÙ¡L:døžfïçüØ,ýv?çv€°g›·ì™.gd”/@Ã'^Ý ݱªø‚im\W¥3½ì´3Ú³L§SrJ‡l"äÊu‰3^íÈúNQÆz0dÆ´9±Œ[ ·¹ç•ž}¸½Ó¡ÔcõÍ®þŽ`‰Ï¸V¶ØÆfÜCRF³¬ï›EûGâ,šÔ$m<1_ ¾d¢¢¯-C®¹°ü–VVOp·«›ð.sˆ+Š$ö$qȾ×ä,ú’V+â9÷Ked#×ÐWBüÇI¥è&,¬ùÇ™H£ÀŠ\¿D;uFØÓþq¸¤}Ò§]"É pö µ)üa‘l¥×âÌ Ò§c¤ˆ¡Ëbº}èT‘u"r†˜À@"ZÂHê½È<•@<´Y^b¨é¯Ž"ïP/tœ±:ÙáÛ‡ U¼•«DzŸ .¡{G?¾nЊ¾§?´¾*Zq]œ÷ƒ*°aGQË®`æôMKùF¶¬‰„­áÆlˆÃp†iâÍTïO§Ýð«u7—l­iñc]go09ãô¬¾aáÝ1…®C¨‡ºòSr‘ÞÀ¥Š°”g3§‰ž\$'á\óðÓbëuän¥ù¼wÐ& ð÷Ì ]ò +Þµ~§¶OT#¯øD/W)|CÒãÚ~3Êz•g[3ÖÒ$ç= ýü&÷<…ª–cºÏ}mžBÍ[ù‡æjÉ’KBüF㈆õ8ÏËñð«x«|3¾“'¯0ßoóÛò›ÜÔ"s&£œYm”ÆÏÛ¢™Å«VËEÅ‚ÇÒÆ®«î´ÛûéöM¯!(¿óy®k qÉÑk‘ôÊ?$ò5ØÖ Çõª?^û^yÁ1ÊeŒødÈA·#¼>¹LÐÆi_ˆrjÙî'˜Y”£>&(1!daÎR~ÑPö5þÁ-T¹W.½ž1-kœSÜýx³Vx©&¶Ýð*zùñ=Û¹ÀÕ6\¿¼¶ë¿.ÚÉ•.Ù¦.K$ˆ|®gÿ÷2]kð÷ötÂq®÷S5^Óúì¿tO6ÇÎ!l5CîU½*1¢ß9Y †§ÍºåÊû¡˜TvŒÑCØ}0{"C\jªƒ–ØX4‡V6xA8ïÛ¯.âÂ?Ûî:¿|Ë ïdL¥¾àÍ B_0‘4 Z\Ûv¡23«zFqf䨥»ÑKÔ0Œ=x¯9ƒÚE 9‚ŵeÀ›ýÌwª\È~¶ ½èíü8@¦¹÷\W¼Š“´;zÊm=5“K¥‡±xx¬±(;õ à¢ñèG(…UPÁú‰R¡q9Z¹ß#“±Ÿfƒ¸ÔB3€%/Á:ëG¬m¾!ÊŠ{_3c.ÒX ?¼;!wšcëoŸ fí’×g¡fRIÈ#–Â⯤éeméþG Úq+…öî“E²ŸØpºypÕõ2Qöåhø­"‚ῊÜ/°€H‡t*S{åE¤÷×r…ö¤œé zNYqïŠZª[¡l"°A»M†å:j=žÆ<йì?ŒÅpä¼M<w1â<.«Œ­j¬>ôË7ºFœeTÇF…sÛ÷Qç‰o}ØŽ»ˆaXý95A^îG0Ÿ¶Ža|~.P¹Þ¹/zY¯}Ì&–ÊÞ¢ ÓÆêJBÁN ñG‚£ EgžüK£Ûî©itö "}w²ü{uU'Ýæ,f¼Ò° !P¾ååØtÒù3£ ~¿¤üÑÔÍB<MÌüëΫRjeß’¤‚%èkr°ÃÑxqÈ5>L޽¬™€QDáùï+"Ь½weblù%Þ!)±WÜ–{‚éÔðe¨ØÒæª 9Ë) ˜T ù|ü6N(¢OÇOšgzUkÀVt}­{¿%׬ޓ[á¸|ß“‘ÑiÀvmøl‰?oi»P©ýõDÆ´[UÀGóQÁWv?VÐl²…=N£_úʯ2~öp¢oÓÃ-Ë^ºÖ´Î[*„Ð!\ÿäð^¦9³Çð±~¶ÈÔëÔc·ÒºŸK±Þ×zñ½Útnj€6bV¶eŒ[0Û¬uô³[JpçfAë¬æ7ÅÐlGˆ›¥ÏÿÞKŠ™KÞalAË8SËoŠúÁŸ÷•RX@:â”/Œ¼¼úUdÀ©Yî“›KÅœ?-§`ÏÀq|Bâp¶úŽŠ+C¼:E)ÊO$BUô×LñÔ(ð;³¡SiÔ«Éô U:…Ø•¦«×!xÙ”àkSs3fÐå!¤{ÿxƒa:(ec;ì!åhÙÙïèR(–ÔŒ5e&!ä禲¡¹#]ᥠ|±hó¤h²Š1ä$.Q'‘­(ò£mÞ ZIõq”PGÒt—βÚÕò0?ë­9G?U¢³§ZÀÏ»C ›éœ ¾T‹p1ûØŠäJ>ÑÛÖG%ây"|ÈüÛg7²Lª“lYNâûKËiã0+kÏÖÊv¬Õ„ýì=Œ¨FžÌ½*†t·ïTÿê‘ÖZl¤VÒåÂÊ×¹6i4ô_Ïåö­½¡‹ÓÆi¡°ERùꦇÄswkÝc 3ÂwPP¿+?®¥¬q<' ì­_ιŒîáw¢ÚÖt}âÜlcÜc_½“RÏ]=ÑÍpf»'í ’h´g äýj…ûÑç^5—¸"äôi™ßVW¸i6»^H>PŠ¡™YÅC?QarQYÜ%³Ðò(¡÷IëßV/t´DdГN‘ÃÂêrA#dþ„DÆ´ÛÑ/Ì”LÅëu¸flf{FüQ4\ASÚ‹mMרJƒbUs¥Sºc:iÔr…ô©î‹^*2±î‰ &Fêbm¾ |ªãë¹PÿÏâyQ©‰Àé+ÃÊû›ômÄíNÜôW‰YQÜ>Š: ÿb×I~é; |úAÌÉ~‰-°éÆAˆåBe”Mª1‘Ð *ïõk†Êg%Úê)cöÇNMè ~hOG™È¦‹>‘uŒ³k´’Ð~J*­ô“ý§Ú;°q«É×µ§¤ªl+UyéWSâ€)ý%gèþƒ}îé/£ûž×^*œIŸòMõNå)( "J´:ܹd{æÂ>Ómld×ÎWâ_sAYé´Ã€ê`C¹Ÿ€ÖNhxÌÍî(e#•˦WgW"p΋¡¯X¥‹Åd¦ áhØêØŒ{]Lî)¹¿µ‹ìsëâüÚ.Å'^¦éï|ä·<3 üÓ‰Äð¾Æ¿ŠSǤ³9ØÂ„b9¥ˆ ÑKш¢„IϦKõ}é%@Û”ž·æ0 4‡¶n³.þ/Vó:°+„Òdê$xîИ‚Óôùxš2zkcŸºÙܘñ”Âá5SW‡cboIzÉíx¡ÇéîâÕh¸"&‹¶Ç¼¤ènù€:×ñû)ÒMª€ÏpÇÍtfr*üÇù˜òcW1NCÊqÙá ¸Ž·Dkµ˜m ‘¸¥9þCv:d›`o£÷b×s§Ó“º+V ÄÇrºŸoÍz€4‘%ï` .­õU‹·óµÕ(³ûÊJ‡ 91œxæuÕ,K~Ž > +c U?|yÚGßdñ«ÏzC!”¸=(ÚFÇS\Ó+…#¶àr&,{?‰{Ž»iƒ(Ç/÷‰ù^¹h*¥-Ti »d„ÔØÃlûkI„ý Y—\LP6ÁzùÎü‰m{»2ŽÀJÐä.ƾ8ï³)"ÁȧŒFyþ!&–ÛLÊÎ`U§ £5Óf_DaÛíœ.N}¹xýWjX¯òãI¦à'-™ª_Çkõ%ó­<æ®}t—]ä]µpjöû¾ôöÖˆ­XuûX-í vçõH‡D(2úLµìSÿˆwóu]µc‡î¬ÉÞ­—ù OëÕ8áòœ‚ã\±VW.LÕ¿v¶#ð³ºÓº—Ž-Ô\PvÚlÃIŽBŒ5?yFA&V†œ‹xÏ‘I`+rB÷3{aÑJ†Ä‡3%˜‘— ÉYê)‰Oø=;}ÚÅc;^b±Låp¸63EUX­pW:Q†6ÝøìÛW²q¯ÂoO‚®ûä¢Ï%ëÁnÞÈÇ$˜ù/ïÙ}qgAø4š¨¶Ý_ÉÏlõm#?@‘l÷—|!¦öNþhóvéÍäQèëug/ ÄýEz˜éXA­.ð¾©UÒ1¸JR•²ã ôb*|Üô’?–˜2ðݯïê'Ó¹„Û§y(”½\c³ —Äè •’2áœý£ä>WæHíª‘Ë·cááªi'fV¥EnGë×ÎlÛÏ#+'T3UT³jÔ@ ö@ +ðûê’,©sn<ˆs0ª|²8¤øýB†Qú:Ñà”=olJ_E%HŠˆd³g—Ì'ú›æ™â®÷d 7âÆΔ#|è'F®VϱbœUجØ_3'zdMmÉ׈e$Ì&Oï¢S"’ÎGÈ Š˜}J®Õµ•y-¨ÞÙÄÜ~w¯æ´”ÇÓQ³˜°Ü\ ºv%!™àŸú‡gïÝÔÅ9°o[м&–€êYë”÷ö[Ø«ªUP/ ¡øî=îªn *wh¶æ‘Yi¯Úߦ»ùËäzœøª8†òÇßqž»¸˜óŸÉ¸úú‰%P#ŽqOŒ½=2áCß„aW–™ÎZùW•ÕÇÓÞ¶D˸6»¸‡Ö)$i©”:Gø=IgóªK’wÛÓGj0Âß¶ ö°déÔAãòy“&ØKjÍ7 6ª¹¾mfTDꯕb¾³ù‘^磭ÆE6¸#)„£Ÿ?Áom?HŠ~èÃrBàÒhS]ÎCšm.TM€QרÏÍôLó#tû xC ײî{eÒÞ, @èlaqˆýÌ¡9Å%¨ì¸€ÏÞ÷+÷Ô'æÜaöŠ¡ì!3¯³ A(!d_ž‘ÜMÛ©Ž˜ÊûéñÙ‘»9Ä”=Ôý¨©Bë%§)âøÖ™®àcn’—ŸkÔqø#óûèŠEáijix^%'»†çTÓNòrÍ (Ô‹%mO" ]>Ý]Jâ*8ƒj@DB*+ûð«éDTõW%úûm¯6µšë—:ö” ­“hÙšG1%n¨kû9b´Ò^' †<;ÇÊÉÿÖ½Aÿ°ôÅ×Ïð»A4…ö ¿RÈ2qU›b1:mm0¤sZ³ƒw;RêAN#{aHÐ8›Û $VN"IgšEë‘ï‡à¬SZ jyþkŒ Ok­ßïvÜð¤¾J4!Ó{ W-ÚoäQ ”V%!Ùáð ýﮬ¢æOµEÛºË :Ú$ŒÇïehÇB¹(ö&°¨íçÐÔ‘îÿ&è»ÜñwN›\ágD®Ý֌ޥ)ÍÊUz °ŸeKHØß+4î€}$flB²°ñ‹ŽC>й à5›ç —öftâíRÉ'–=ö¼£,–CêîW„U³æeóm*#F…*¯PD™ê†¿øÁ†Q‘šŠ%¸bÝÿúªnŒ{MœýŒ¤ª §]¾W⇣ò­tµ8?0°I›ô{…µ‡•YPç‚@dAïå§ç Þ(xû­šœHZG<‡®õ®ñh{¾ð}jYZ ²MÕCÇ¡`7£)[ÅÑ´€?<ÝîѤ;65÷ w@ܘ¤§i3 hv–,ï  f0jªâ!)5èæp€“0^CcœÂ)– ¡Ž˜áûIŒ^{ˆfq÷‰·Þ; 4na9 fæö `x§Ò»6:NP§39pfà»Ül­šMG8<%5æë¤x:àÁ¬øj_0/+ÐTL‰Ô UÙϨ 3s±'Æ2Ü:ûù”á·šˆªˆ÷S[…Ùüº2¦m“ÿåššþd%=çý¥uVNôW®„il:G:l1¾Î$ ÜŸC·ö°£¨xº×wjcÎ|òE#¼Ê*m$¨_9Ð_£m˜µ( öˆ<ºWžJÑ•ññlhÁŠø6Ã` †å1§6Ÿ…qaK~–^qà-àõ³Õ÷Ï_&­„õ—Ä—Kàèjó_fÝM×9p«~ØL™ì®©¼Ì5_³†zPì6µ®å ~Bþ>?ÙNvíVLб™âdC´.Œ 8zÇvÅ<àý úìËkã ’nˆÃsݾ«V éO¸B¸GÝ1(&và1]Ôš­Ñ˜MÍÿ°¹š@ÑB¤¤›ý7º‡yoÖS<)- ,š)œ†VuZµÝcfP –ˆp‚Zj¬ÉÕ$:ýXšF¸I0% é9O€å·¾˜Ã—¿<í9Sœ…pJ:¹E´|çEY¬©s$«r[“d€³q,ŽÆ›þýçü·$d>s:‘ýIÅÆ»é Ëôvx—»áP`»„µ‡Vc\ã·OuуŇd0 ÀÇiçuŒ'¼WOÝHÔ¸T9ö÷Žf~XΟ+<®f)ákÎ$tBZ¸Š`Õ^3#­Çx q‘Èœ^ÔŽ¥©×Gd®+5l¦ŒìÉVÅû~醒 th@Zì€Í߉õö ±mä?BR~¹:‡áÔåçUë…ì¤ÿ¡ÈC\Én~¢‹øðÒ_½¸&ÎÐ@P}ÇG^>¨+HVÕf:`Tú*¹ô´›EØß¿z+Œ„V§Meü<#ÚÄ‡ïæµøÉ=§½NVgt8Þv¶/ÃÅç`Ã]Ñ¥‚#:%#ŠÌå@è Ÿ5ÉŽøZ¯ç4dÀÕçÙôt^…EÖºñÜÏÿPÐÊ#¦CÕAßÓmºg¯7<„V™ÑzmôwgÛ|ðËL³ìÐõŠ´ ŸÑt.^ÆÊŽº¼dDWÌ·cåcExõ³¼RŠÏXðíùmÏs˜Éß~)UHÿä!W,tTc·yêÚµ…àK¬Vã©_ÉíTüdhÑAqy1-ËK€sl¨—'“m¯»ˆ¸òå¸Kzùnni¹ÒãÀ^ñIßËÔ¯«ïê¶ÊàÐÁ2ë §É:V«!w?ÙÑá™Ãá8N"ÓO=C͹¹²>ð`TŸ;§â0O_èµCFä9ÅÃ8ã&¿œÏÖ¯N}j£µ' T 7%ÈW^ò—ÎTϾƒêŸB”›M­p“zþ "ÔúñëÄÝòn[þ$ºkqßdsð‡¢÷ÚÄÌv8úÏ”Ræ…ru!‰_áI¥+ˆƒ¡Š.Ðê%Îæ¨÷½<¡O}Œ^91Ã7õL¾>õsO8hZ•Tu‡ì£c#ûÚ×€{ÉfŠ ¤ë2˜@]€$æíGâah¥¤´Xi”ÒàI0|”¸õa@S·b=œ^Í´— Mç€SˆÀšvÙ2oTÚUY™°ì(íÁÏ3ºØ![òÏ ÉôF-<1ƒ$µ\ðûÞõš¢\¬»^¾–ûJtÔ]BtÀÇ6öx*G”°hÎ"õuN\>SG¿<À~ÆJãAÊ“™c±µÞM^tC ¦­£ˆå ü"–”|·î§-=÷:¢Œ ¢xã]BÎ+A¨…mZõ,4Ç{_Íâ¶r¯JXW†ï§š#=ØÇ±Î—{R“ìdö=Áa×NSÙ ó!'¹[ïT T!ÔX;®Õ•NˆûfðG†§¡V±Ê˜Õ}.ÖÕ8.9}¬}zP¼9‚ÒÙgØføÊ` Öm½ö¹šó8»”ªK^.ۧ”<¥B³½Ûlì/µì{»ÚØ[ΟؼsÃ…÷r?îç–Þ}0¼Æd×…že­‘+ôTn @| #Ñ æ5|±rCXÀkÄyõÖ¥S ±æ|zðx@¹‹sH¬aX}Û·~¶`¡MF23·Ââ0\nªÏAj4óGZn ~„xŠÍ€8êª5´ûöXÂiRÞÎ@á‚vÔHÁ‡õUCG0oÒ:HÛ¯ ™fRßí‡øµï0ä'cø‰®½'„IdqB“ÓËaöø2f§l¡x^Ú^'<^>7W©äÆ*u¥{®öT7J?ß0Nlámšïz”AG.߉–xð»m4iûR NwC"øKo˜ìª€=jÍmýœ¦^…Ií{Ÿ")>H.K(àÙ4Î·Š¡m_hNT- mÔAØrUÇæ‚³•|zÁÆpÆM 9î5ž Á);#‰‡L]RoT“3£mÆ]”Š=SÀÒÒ‡Î_ž¦Õß©ˆ­Yˆ§;ž!í)…ŒÃÄné‡Ð«_p]gC88=« ¨3u”œ0ÏÓ¥­46±@ÑéNšH¾˜­ïIßµñôƒõJIÕ§—ØõØš±} nO1‚†lÇ•…‡sqÖU—3Cë•* @¥å <Xî­s´ÚÖ>Œbûþ¬[ ItÖ>üR§‹ÅFüéþ"–<úãì Ć×ù ¤ š6m©¤öÌ/⫬|’ˆËÑätë+I*† r€º^¨®ÙÜzü ü”˜Åh†à%jyc$©aþ×ä(&4à.'ä6×|!CšˆC†A&2FÆRtÂMoÖF«4ÏNö{ðN»?ðß\ĵØûùñ4 ïÔN‰´1Œ8-ÜS§-qÜë_5QÌ“ªqûü(ü…Anq\Ü$„í9ԚơbNsžÄ=~¸Kèy±ö±ýùJ,Î0ŒL¤¼¼‡ÊHî„¿F÷~¸¾3\¢- êóâGÛ¬¦Ä¼&Š™uŒãÛž†ÑìÜœ ’nò¢²§ªŠW‡rÇ7vJ°1dž¥ÛÆ 2¬ ¤ sÞ(y°u¾˜ 3Á>sÊv0…ù¢ð[tbx™0Í[s*ðÍötÙ ëÊp2t*†d¤ë÷,œÓKº”‰/®\¶cLD¸lûÇÙfI¯Ðy±Ç{wÎN‡3¿Rq$5j¹e>/÷Ï-¿ÆÂFiV˜b„²!ßKU-鳓_$ð¥1rÊö(}Ë•Ea ,i½®   ÀP+ÄAýì¡–MtºÄÃ;eÉ–m[ú:^]] CRM•}£ÌŽÑ¶²Püâ–žZ’ñ©ÒÅ XÂîŠÐ5X*Ó/}º}ÏïÞÓÙ%eP…mXPùíe¥1•Ì‘!H¥TŠÒ$ï‚-ŸH9W¢¦k¸²Ùtü#ìôƒnÏõ¶ß¹©ô˜µæ†‡x8æŠ'ÕTœá!Û;Qlᬲÿ—º©¾&¦Ì°ŒûK²ôm7â¡‘¬ëηˆ y€(“‚AÈ5[æœ6åvË,¼Ì`v’QäXBkÍ3ˆëD¤ÌǪW†¹„½mMg˜>ú‰*YâžY‹bG­_ÁÊy?6]½s¯c‘²í—🛽hÜ'DñœÃK9,4ÖvL8É“‹ùÒ†^&+ å?¯ï ¸îqJsëÀŒpá÷4!?È«|}œŒÐ0DËàájŠƒFÉ; È3€‰éÖyØz¶î«ïô´¤¯¯çXsëeÖ¢ßÔùÒ„Åyé´é²Ì>È}ᢑK' Å¡Ù4í2C¢ð¸”P6ÁñIöuyX¿;BH䥹¹tİPºwü4,&ÇDdKéoÆÕiiˆ‚uAfÖ·½>¶jí<Ρxœ1Âw{`~ìê<€›^ј=/ˆCóBü9½ºoÕ²v^»Åœ–ûÑÓµõKK• GüoÿÞ÷µ€/¦ ‘âô•öŽ¥¶dÕœ'Ä]1šqÒä¼%Ž’=óÓ¡B.KÑŽK‚ÕÝ¥Ÿ)â-ȼŽ#ؾ¡à×É †¹@`ÀŸRz•À D9\ ÿ%û´»5rŒÑÃ`Ò\ñ÷sLg­Ç•ÀÚzþwàitÖ ¶·F£UQæÁª2ršøáôvžyPIàÏé‚§úûCh™ø“±Š ø“ŠA}2—ú.‰EÑótÝZäß)´v—WXê‡ò±Ÿ_¶öÞ—±’+R¼ ¸WdöÑt%V ø½„S£~ȵèROÌôk!Á.æˆê¶ú½ï:Ë5 í#AvÃ]Ag.bÿ%à A]ß:gØ*ž‚ ¦ø´Â0>/kúµ%•ÊÉ}Èàn©âxIÊcP ö…=î>‚ùC ¶+à@Ų‚D>¢IÜ ï;5DÇ4Ñè•šÈ ÄÞs»÷RÊýÍ?›w®C¢?0¹!Nu½ƒ)›-InݦÎ'hYÕaûpEÆl¤ûùÛ­w=1¸»^vü³ýA”j§G‰çvÁ°M-•Ü‡Æ ZŽ,‰ kQþÔëKƒ¦Ø3þd¥Ýñ/ÛuMŽ`aK< L!“d2UÉ€ªJ„® !€Á«qLåâ«kÉ-Ŷ`G:ôhKéa©E°•ꃜ"4ƒÛófhqËI2„º¨ˆX÷SW5ï‹wš‡yæC9dqÈ^¶¡¯¹®žñÓêOÓ»È]ñD…¡,×2!?i‰^Öt^®wŸW”´Ôõã[‘Ê´é¬ÃðXß#vœÈ¯üÅXüÎñ°!#ƒ>«OO;É{:È|lŸ=÷Nu^ú¡]8zŽh¢²XO<ìSÅ»ênëM™kW{2·÷ךç9ì4;¾g¡6þ*Ž +±/ÄÐ1¢C_ôé}ýHÎÒò¥˜hˆRØ(õOæ’í‚Ñ×FFê±÷=çñZÄpoC©x“eæËŽ'Ê. IÖƒ¿ü¶™<÷`_è>ˆ£>‰ù~šP™`ÐUÙûî¤ô;Oââúe@sÊ Ã>Äqû±!)Q³/_zÉ7—”¹Å~TwÎ¥Õz°†yÅke€éÚzŸÒä¶ÒäÀTô üö›¦%Îl‡½=Q,á‘—§*ÁçÜ+ÔŠZô•F?Iˆ·\‰ÁÙ¹\eð™ù©åw—¶Å2fs±ÐTÓA^¹,bgí‰8ÔÝDkЉÔÌZúÄG\3<×Ä„>zÁ<âòª«ß݆å²Rk›ˆ„­?©÷Õ¾èøF4ÊÝ`]™€©~!‰¦¤™ þê$V,6Ð3âx¥ëe£Ød!5|Þ7IÒ.H‡ú‘OÊЪn2i¬¯Í%Í„|.®ˆ-0*¶…ßk5¥Ûï è?ÒBì< ^©9\}½ø¹ ŒÈ,v·Nˆ©´h¨# Ï 4V•œøY²-QŒ{Ú° Â^ ÖÛ %îƒeGxí”}é]»‘Hدˆ .š›èNq&%ê{©°üç Ê­Ž`Ëá¬à,V0í6ú Ñ&Œ½F…EB¤r”8]z”xþñåù>§v?“\a úDÕG«#Kь҆a­ )¯BjB®Œ~éfÛòÉèŠg„!ŽËI•Z$µÓÕäÙiÈ$"¬=[äðr"E&‰Y.S« _/B±ãíU×e³‡ZõLúó÷¤®ï¢f‚è‚ÝX½Üí=½¤Ãè~‚®FkRÍÝjw°%H|³0›IجW®}¡˜± "&ê!Èy–X[t3O´ôk0˜b%o³OÓ3U° =\%WóZ ŠÃ9é—N¥ô/#ÿ©]5õ{6j6›-N½YˆÊŸ²({ºÆ¢û)=1“fé´Fþ›ž}„¿EíOföÕ<²2nS-?ö&ùž>:/àw¶(k‰ÛžT *ët„&pE`)„y›G¾ªñ4ëu¼ÐF\ÿ‘ Å_Òéß0ÄŸ”ôf€xbm³‰ÖÊ܃% ª_GІ*‡=­Ðiã.“Ÿ4yEyà˜ZÞáÚ‰(ãºåÓXúD-:JuÁ[ uÆ~é €Ji¾Æ úd×ÑDWä–Ö4!“ Þ§hF'‡™­V·iç¡ZÁZcwl鈒Q… ÙìGó~g^ú:;=ûŽã+†ì׈…êé©'CÏS­ñ¶Ïèmk[‚e¯ò%Azbö¨v÷zanì£DݸxVËð´_ÄK²&óä°Þã㑎· òg>c28ÖäWš¹Éô.SçZW²Rû„oýî¸ÅM¸ö«=ÓÀ¼¾˜ûi8—o ñä  1c®Ï­£/^¿ÓâXx}*N¥WO»ëÈaêU)äcOýs˜Öµ„$T|T˜¸çX‡ÞϹ©Z½f®#Ö_µ5«2.Å»q>1‰J¾p‘–UAOñÏ›`ì'Êdn‹fš¾ÃG ©@Ês 9‚àVÍ"¤Võž(NYº`…oOÀŸêè‹jŒ³ë4)¯åо~Ð| uÿtÊÚ*‚][c°»ÎQÀVlôõ¼…ó;¢b’ë´Ôx;Žj ó0'h‘Zò³²VÒáü5°âÝÝŒˆ†ZMS„íYŸhDhÅ ~ÌÞ *J¾ìÏ án»aßÕµ.¼-º×¯V»ž‘Rþo¸¨Ú&špiFι<ät“¨Œ½ãQ¥‡JkšiZtWÏ—ù‘³thñX‹óûP¸U$6<=M3ê]ax Q”ŠiqûoºZ ýCü¯E;&ÈOµ’Ô–@„#/ß(•=ƒ8®Á È–A7 €A89ItíÓ¼¹^c\ý:ÎRúOÜøGFûw“Å0‘:"´K6-~ áG¹ÏØá¸gDØá¬¶Ç'³È!ðëUŸÈ™~TÒó8;áFùræh]@Õ;òKïóüÒ?;Üdc߬/v¡w$¹¹y_Z²ØÐ†@>óÌû«`;C¤vuAY{á÷úô ¯]l|øÙ¥#pI2K,Àzä'›ê»ãæÜ®PN›R.#¢BHzr_꿤´9ün¡.zÞr…@ü ¥âÙ†¾7ØêwBÙ¦šðHnŸ˜~ø9.9úF¯å3Í­ ­FTôÖ6Ý·´[‹ƒûò[ mjøû¤•é†jôâ˜ú#ðäéÃgyñx¾ {:(Xýa=Mn8¦ôÅRS¼×‰|ùÁж@jéÒ—Ø@¢;8úÈ2å%‡µ æNu–ÍÃg-×jæQƒdÈoÂ; ØwßIÒÚ§ºiÕ0t‰ ^­dòX‘Rˆt“ïž@'R³›_Ó»ó»Ô8 #×±Pðs3ã%‘1 RÖèø§|Šþ‘ï¾#œfnf(Á8BEj~–¸ãáLN+eˆøè~+<0¹d(3¢²}!Ô¬zl(Éý¼|iÏî†þï5NÔ>û×Uz{ÝÄñ;\‰!ô@Ìï÷‰ŽÜàïÏ"K6‹zÞ5D]—Þ"_úÚê±"[·åTÀÃ``Koµ)82ú;ú‰öZùàÍÌ+kÚ3q&רMV ¬ôTˆÊ¾2]‹7vDZ)P¤‹ó+2^ar§ ½!‡j̸”eЉÅ¥ˆè—…BvŸ¨Ï”þÔbx×[¸RÚÕKwúR“Р¤Ý,ð!)TŠ!hÙ¢&è¹#1tÈu›³Ó/[P®g5_5=y$…aËã¿Wx•†áßÌ()« ÛÎw»ILà)“×9¾¶)içî)’ºýu·¨üe´$ ‰•õ;Ä©4Іö75Žˆ#Ò¨uÄÃ5¥ÜzK ŒóÆ/¾R+‰&\J©™å+±£ÛãSE†"÷¸¡¶ç›G6¨Z7­Útâážé+•‘ê­öÄMõ4´Ò ù¯c2ÄðRåϧÓú±"¸ºjŽ`á‘Rw?A~ßñ~”W"•“¯D´KzâÕD=È;ËoÐO­&½Ná®Î¨Œ4YÓÁ|øæ¤™Z›ÚÑùFøµPð¶{-…éaZ¥•KÄ軥V¯bòð–¿ß²´wœ·\d˜ä4zÅf"˜ŽÜDAX1Ä>¬ô°µÐŠõ8IoÔ¿h,Àje¨ê'ˬãë–lŽAñD–m!$ÝáFNè}ÕxbÓ*1׃Þ)½;תÏa4Íý2û³YNµ‚²CÄ‚líã'G¯Ôž`À/̽kOZ5sßnüX”ÂG¤¨<¶„G{ÚèóÍ€eD‹q›ÏÉh)YþdÎc¸¿æzoþ{ÂEÑ”öÅ=T!×ã¸c’~ÅzŸk¨SeõÀÜœÓu¡î2žœL$Ê/íL’mÙÌ 'R»è¦ÝýfàêÑmÿ#6 ïŽ^[àò¤ ÁØÒ"õ·Í<™ÚÕ«’³¹ì Ze@} Ê4Í+“½¬Æ â˜håþur †»¶z*Âø8æ%}J PæyµaB$›:îjqJòxó„^xÉ:~:úéjtAì‰R¦oÝ©“fé”Wb´Ã=]ÂsÕ~øÛI’ÿâ“4ºàV¶3G¿ó.è¨hvz,+—!ë¹úl§îc¬¯O±[ÓüRÞ±¹ª,…¹4<´(£yBÝ# …ë+εó~ᙟxϵŽÒ‰¥´Þi”0ÃQSp 3ÖDB¤m ]R:WNQg0qÎÔú©©X`O5väÈuf%ՠν˜‡¤º† ÁæS¨&Óô&/J%N\A:®Å0»N‚³yÝ:ºxă(ƒ?´œ úÙËçw°¡€†Ìl]1âUd•À½ÎGaÀórùúKäæw'Yð´WµVœOóªùE,Öt€c‰–„]DÛQJÉw¥¬Œ•¤Mº$f³ƒççáCé â»ÅBÉno¼ryh¸¤Z°‚«ôeƒ‡ªŠØÍ”‰¼Äx‰ÕlñHeO"ó`1hÃ>ú¡€Lø×§|EA˜öË“~]ÏíIW«([ŒϬ®)Fnú"ÆS> ¡ $­«ÞÐ’íÑ6¬ ÃÖ£ËåöцN}ëŠÐsI—Ûo¤VœïçcnUŽ.ùñ†¨¥¬º(Ðåûzß™òV›*ŠNë$T2ì™1žæ6 ¦>z éæ©«û€Óz« eƒ-Æ(º¯q^϶Ÿž÷˜ØÉ’q.(…}¶hòTbMAz–ãbþ¤“&2°9CþBSÁ†a=ÎýèÃ3ë_‘1­¥ à>–]Ì[sÖÌRÁ©kŒã¥¤—øíí3Aé?Â@{»*#@?Ÿ“Tû$#¼‚d[Ž¢è*‰N@‰†:[´R“½”Ep3†ÅdöL ie:£‚Á’Ït ‹ÂBÜCPd$ÆŽèg¹3&GH…ž¹íÙUL´ÉÅP‘Kú/RÉåxÙe•7½öðaéw®Ux0È“ÐÚ¾íÿ? þö²vèqšD€—êøv·V{sø¢ œ¸Ù…õ$<P-Äex·#^ÞQ4´6u,”AßbÉ{Ý=­}ô[ÈÅÉ09‹é;O$¶äòœ<4m¼\UÒ|$EW‹½bt5îLÉFw¦÷ÝHdŽp,ÔþôPàkú\ GÂ’µÙ­Ë»l•^ŽÐæ'MQhº¬YÚê>[ï½Ãþ.[2$tOì¯ÿa8tZƒŠ)/ºZ¹äó'ß¿m:¶Ñ(€câö“p‰ú­BnTüœñ_4Q9!ŒDÛ­{ø½fйªÀW‡ a@À]6f$‘¤‡©pëWTDª‡‹“%5Wƒ»§Ðûó´ztyð]¡ÂƒM†qÇE%}dIúe‚½Þµ^å6G²$Ó£þ‰3×avèîSàz±)öŠB…ÉSí2g´6cPf•ÌÕÜãŽÿÚDb3\lìÁéµ½õK,€¢ž‘…Lý»Ã<^ é§nG¨Rå‹(y?Ï(Ý3÷ˆÈ±å–âP#Yk~n ,&Hl¯l íû\¬Æ¿¿¯’^+‘ ïV§»ɆZŸ$+bÀ¥iÄ<ÄiƒŒzµ>ˆôé.¼4]$™’®åÏe–ëÜV–UðwhŸ¼½ZóªÈžêºSôý!cƒ·uŒbёɠ¦6;^Jê¼à´ïc—ãgÙo„9H°F¾O§I:’S=ßÕaÄôNа¸© &3GÉí(6Šfe½ÿ ˜cFž·‘ŒG«¡îX¸Å H¥ù>L ‰v7ÁôÙ¯rXÄ©Bh: ¶Œ®k&Ä£YrÞOÒè©G®mKúþòòùƶõ[Y‡¦÷Cùsºû~ùöQs)/ýãÓÄZb¿À¿+ø2Í ¡Ir ÅäRAuúb1pŠðØ$ŒÝpÝRË= •iÑíAž1”%§Ñ2~uMkvè‹C§ï6‚ì‡öë+ˆl"Kì¿AÊ÷ô¥8ˆi° ·Ç3uâD µöš«÷ÎúÀòÓ~è|^  YkôdŽ|Á6ŽÈ·Êß¼H Ú陋FÕ”üj qµD2-¸j¾ú¹ý3öŒO9¨ÇþÎ0×v)€WCx…+ŽÍ§\æJ–€,nÈ0ï88bë¨<àÑ[Ð}È›t…؉.jYvå=ˆI(c×øÌ±Êf°õ Þ—¯i²„n¯Ã¾´6ý—cw»]¦ã´÷Ê–J’”5g¸¼vø{ÚË;YžãÌ¢P(·¯Ã–ª+Íþh=uiËGgÕS?¯ò„}d]Í“wá襖!IäO÷Þ—‹¦åº5z*¬2Ïeþ6º/.$Ô%Å~eZT‘ÕDt°p’’&¡”÷ÌÔÓ4p„iÑoÑI¦—XGb·ít“œ±€]ôä[•¨€úÚ~b¼¦²Æ¢¦ýHúÂÚçî&HB ›Š­Š”ãfõ#îòöø:ª£ôöŠŽg\7=Ïð‰£}6^¤÷„&MVµß"LJ7µàû«+]»ÛoÛñìbEz%‰Nî˜YÞIñrv;+GÂò‚¼ÇÓÀˆ=Îq˜1ÅI¶ZÒR鯳¦±:»ûë^ñ$ûÛœEO¡·€«€&ì©$Ñúü¬cÆ>ÖPMC_pð@uÁ,GÈ»y¶ y©õÀªˆbãÅ(Ë©»“%“3ÿÊq¤Àí5rE[náT½ì  =Gw㺄\ 3 ¯Ëø®†lÜ:ÿ_¾ü!‡!”÷‹&zc|“u]yÃÃ$Yì÷7àþI~¶iŸU×3θWmp¡_¡ `ÁÁUÊŠêà!Þb2¿õÁgS‰‹$¥Ìtó%ûó+,+è/ùºÍG2D£cøîawÈŽª‚Ÿ!€áÿÏÌHY9fÆ]“œáyÎü¿p§ >2ʉÄ(¶x!7Nl!›2Zg5+ÞwøüÅtÍUÒ­9õMw×gçZ"T)ˆeˆEá¤èÃ/¹¶©Ä6$)Pñ#œâ•˯»Üz9]M¾RãѤ½¸Iâ ÛÜçÊ­—¾´ø†|~rš÷‰ÄƒÓó…z)kçîËy†ƒ W_^©d¯¦MööÂwb¼Þ7ßý1bšÔQ^à‚´Â×H`­Rµáºù)4#OÍX)© ËT“O/œWŸX_p^SV~óÆ3ˆƒÌ,þºEï¤Hô‹ÜBDmŽ(v7,‘’ìÃ2ëž GlÀ¸ÙçÈ‹c{3«ÄF;dk¢ÚýÒõZʰ@ÍBx Îm·(:ËŽôþžÛÇ;n£^"ÎÜ”^æù@rrF•·9gBGðÅ’M<èbµ: Qk@h\R|z¨>Øì™cù%ÕC²64 !Ú‰ìøù¹æ7ˆ]à.S°,ó‰]' ™ü –~]»Î­³EoHÏpƒyL6ÿi§[ܘCìnÞÚK‡^*v»¯•É{c†½^š¤¦Ôréèaè'=LË*+ªÜF€ð%æXå7°¸@œ²¼߈ðà©è}Ù„‘Dƒ©Ó;ý&ω ”‹n<üò?÷ŽóùuĆÄeÕv ¯Æø¸0ÈŠd.źë"­wçáÁOHãÞT÷0vèØ´Ÿ—·ä-P–Ÿ°¦ÌdPò¸úTF,õÉ\‘ú£€ÜNµQ‘t±êÍ‘|ÌhRJرkO]½r^2 è¢-$¦ÿ™øìÄ4Žªèþ${Ky\j×J|¦±Az6ï¹Ô¦xóúÎ$úGÄÝ ~Éx˜¸9Àñ¿K‚Òiº5WR`ît}1Q±¬Ê?iM¿Ù¸†n&z—ßËÚòF õŽ…âdyH·$Ó8·uA˜£Á]Vˆ¼Pš| ±¨'¿yË´Qw°4w–2­‘vv@jEg endstream endobj 728 0 obj << /Length1 1908 /Length2 13528 /Length3 0 /Length 14705 /Filter /FlateDecode >> stream xÚõPÊÖ ã.Á-ÀA‚»»w  .Cp'8ÁÝ!xpw îîîîA‚=ιrr¿ÿ¯z¯¦j¦×¶Þ«{íJ2%US;c ¤-˜…‘™ &¯*Ç `ffcdffE¢¤T­ÿ±#Qj@v¶¼Dˆ9Ào6q#ð[ ¼-@ÆÙÀÂ`áäeáâef°23óü'ÐΑ nôd gÈØÙ(ÅììÝAæà·}þ³И|°ððpÑÿ±:‚LŒlòF`  ÍÛŽ&FÖU;ìö?%hø-À`{^&&F#'F;GsÁôØ t:~šþ¢ P0²þ›#%@Íäô/‡ªØÅÈx3XƒL€¶No)ζ¦@GÀÛîUi9€¢=Ðö_Árÿ  üûp,Œ,ÿ-÷ïì¿ lÿN621±³±7²uÙšÌ@Ö@€¢¤#ØL0²5ý+ÐÈÚÉî-ßè‹ÈÚÈø-àïÖ’"Ê£7†ÿæçdâ²;1:¬ÿâÈôW™·c–°5³³±Ú‚þêOä4y;w7¦_®•­‹­ÇÈÖÔì/¦ÎöLê¶ g ´ø¿cÞLHÿØÌ`3337躚X0ýµš›=ðo'Ë_æ7^övö³7@/ðíÉÃÉè vtzyüéø_„ÄÂ0™€Æ@s-Ò?ÕßÌ@³á·ûw¹>3¿ÉÀü×ç¿+½7…™ÚÙZ»ýþ÷3)h‰I«ÊÐý›ò¢¢v®NV+3€……• Àõ¶ðúß:JF ÷ñG®´­™€ç_í¾ÓZþòo Ðü{@>þ·–‚Ý›rš„®ËÌÁlòöÅòÿYî§üÿSù_Uþ_…þ;’t¶¶þÛOó¯€ÿ¿‘ ÈÚíßoÊu¿M¼ÝÛ,ØþßPMà¿FWh r¶ù¿^i°ÑÛ4ˆØš¿)š‡‘ó_f“$Èhª›XüK4ÿ²«ÿ5nÖ [ ’è¯ÀÀÂÌü|o3fbõöˆ8½)óoðm„þw[ [;Ó¿f•ƒ`äèhä†ôvÕoˆàÁò6”¦@׿µ `b´µ¿¥Þ(zÌì‘þºWNn“ø_¦¿€IúÄ`’ÿñ˜ÿ‹xÞ|FÿEì¬oÈéíä@NVÿ„¼•6þ½¥›ü“Àþ†ÞÆøŸ‘g2ý²˜€À·ÌþoN³?à_NÐ?ð…™õ¹oØüø¶·ÅÀôG.ó1«?à‰?K½±°ù£·žmÿ€omÙýÃñ-öíà÷[›öÀ·¶þ€om9þßÚrúr˜Àÿ…oÓĶpþSüML`»?Þx8ÿßx|ùãÀÞÂ]ÿ€oõÜþ€oºÿ ÿGk&ÎŽŽoïîßo›ÿƒÿ~ä@W  Ò✠_ eu`ë}¥‘ Ãî+;jßUØ ‚æŽÁ—}e1þ‡k¶¼ð‘Ι½ð‡ ÌcÖ¢×+-\f+ýuÏ”p^ÜÅÚVX3ãmzÏ LßÇNrά{²:†l¶¦æ¸ç*.7ÂÓñè.wgÓ¥ø©ËïÊ,Îá©ëOQ Æ"Ãáñ¹¹ÙP ÛDÒÛÊE«D¦gÚ¥?8] ÆK>¤ô³rlõ-•ÐC‚6SˆŽŽPíeoÒ“º9 e 'Ó”;ÝøÑ4þ7­~4ÆN#ªB|Ò;WŸ®Î2´jß½NF?ÈÑ¿C®å¡Ö·kÑR”ÅîdÛ‘ï‘· ?¿ÃéÿÄÞd£b8 ƒ x«®Ý!¼Êkyr Ök€ödD>oîÂÓQ¨`¡Öô¯ŸZþ¡465&"_VJ cšc"„FýZȲ®Í_6X¬{ÜdÛo]~ëh«úÀ}Al GüÚeªˆàƒ ª'üNŒšR¨PŸ„ŠÁõÁ$B²ïÆì㧯d]ÃŽjŸ³óýnõ5z( ëYæï€“ºÅµÍ¤pä!®¨˜=}Þ-þ “ŽsñÎvÖL}"= jãÊfÈÜeK•×nô£¢í> &.o­‹¶³w÷-Jƒ¹ë7çû³•Ã…ÛÃ×3æ§@‘³ÝtÑîôÅ»’vnù}9®°T%|¿fk¶ãpåRcvá©f{T?.û|S?^vU+ë:§©L/^þgG‘©sÂÒdÃ÷Q%ÐÂeVÕ©©ïús7aÖ‚È2Ûž¡V~Ñÿ–2À3B0“òRû%¸[s@À2;´²¼†²¯&sÅþ’æQ¶ßK -DÉ;í¾zZöJòlZãQáÖ‹;-ñ¤ë(”–þ `°èzƒ¾Éÿ0ªƒóyõc7}eZrÓtÒÁ·g‹£ýöb€M¨ñW׳øo.ÁÑg'•bZƆ?‹ ­£ö7k¿±Â^¼® 6¯ñc&^P@3mG9ôp>RFÆš‚Q'4°ª“2¢KqœUËX0MèO‘Ì8S‚þ~R$¹|f[Ÿ‰¯';Ùe¤üé°ukeã…F‚ü($…´»¡c{&" Î”=¸X¬½Ha×%|šºƒœWEҡȾ/”…¼@;5ÿs|ƒÔ׌‘WsÃ_6­ýá¥FÔ$å<¯¹drõ’ é'×þÖÌÔV §æŒÍbÀÉ=–u­zÛÖ«q„•‚šöP4ù©á}õ©ý\ÂUñ„zÂîÚ’™bKM†J±²åìzçG±5ýºÄ繟iùÓ„5 Ì•ÁH~zè G¿ :~ã!;|·ù©H`jþ-a.ak¥á‘ƒÌ'úD3uªs+Χ`í:h)Mùyí{˜]mÔA#xòsºƒ™ÃÄìö|©Ñ¬/È~î ­çB²Í¢lð 8L¯Ô/ÈÔWwQÖU/Xl~9óC]jŒf$˜ÅY½"ܸƒ8Lš-–’vx?2¡C®Ç—xÚ‚ÛŽ‹§X(°à(Ð+²efަo䎤Ì¿¶ÑÅçµ¼Ÿ®Áº4)Çêzúà"¤á ðW )ÂÇ’­Bí¬£ý±0,åcIƒ?³%9 û¥¿YÍSF¯¶µFsš3®Îu„«NgÛµ¶€‡¨‰ÒK¹ÉSÖ¥&&éÑÉ(BœàñùB^*BÄ•ÆîÞº9Y­f® ê@¥¬ÞKc¾çÓkGŒ“íjª2Ž1ãåå³ Ë7ío†:¤×9q»m ¦Æ5ÚŸ¨'}ªãÜy&¬ØS'u' Ø´sOK‘É&Pe 4ÑžÁNûvˆŽankË´Ñ­úäx‚uTÐ:§«"“†*S¼ »gì.‹é—å †éó “gîš§åŸõ°•¬†'HVø_¡½«p¡J#IªÄâ-Çò#ýÂ\~’ 73س -ý0®¢6¹{ˆŸ?ssÖº¸¥Ÿ¾ìõà‡›/™œ2Š“vÚ¿Oï@QöÿA—§RŒQz¬/M«å­]$²¿þ+û R$B;+2îûb’Ÿ&’lkÛÜ;NR@aX!ß7—|×ÚøC@”?Iþ7E¹ôÃ-ÿð»‚#þµËK ½Ãã·mœÆw #˜#Tl¤&tKQ|Y'Ùº_Öp ’!±‰ø›kíÇ£Õ#QgSC· æ?¾,§%²Àóy"I_X«õ3¢‰GÛtÇ!®èÅzôŠ—èÒE†°9(§ﻈH³FhÙøø-™;´°Ƴ›Ùõ˜taÙnµœv´i¦—ˆ‘G+›¥Ä'WÍ.;=ߘ±K[=À¬Ôý}q¶`ó þ.Ó•²*¡p‹°ÚûÈ W˜w[Ÿü¶æíw0Ælo÷]•®\"ä]ë>‹ ªqTbÍVe˜Çá÷ÕG±#~òQ&0 ®^ ¨6Â+‰_é'æáÖ<8&h~·%Ž$ Òn,Avv è}¾ÊÛ5âéQÐ ÔÄqűC ”2Ú4X”>4êó|œè7—FCVÑ‹?Ê;ÔŒÑD×ïWq§æ[ÿœoÉNÐiø*mè{ÿhQýv¥š•½žºÔ96w™jÒPÞ­\¿Ó ‡m œÈ z7ߤ‘vøÀOÓ(ìÉŸ7¹žB¹†ä؉”9Ôj—'"·íç1™šÃ.ß%hjEÔî¡5»°J9[š‘RªªÖÖÌ+¢Î•‹éTÖÚ O¥Ÿ¶×}€È½þøÏ+éa¬ö§tì<¬9;üí¿sLQ…Åj¶~nbû•šê[$'tãšr qR/»ç@'?\‰ì—ñžÆôÍ çx+¦N+¾¦v:¬™<Ô®â±åu¸•}ÕxªQZôúrý}Ë ” ƒ»G‰WØýmCIÀåú0¶tØ5L¹u?\$–„áºÌæ[2ϹÏqU„HÇlPx›~riTLzÜ^šÂ¯ô6.î]$œ†‡-†_âj{Ê8£Èb£8¸á‡ï8{´jßX® ê]%åú />Z™;™V!e ŒR›?²¾'Å’E^^KðÐsÑË}"ÌÛµ6ŒVX|—«³+ë1¯§›ó9{ÎÑÿîö @H!‚!•]@o “œw)èˆäPÒÝy†®Ôh:ÑcÊl\Åô~=õ×ÚZ»1ßÙÙ¾P´†Örýב&, ž>ŽPÛ'ž=„Â;|]lÞ–Án~7;6³“±^Eµ1vØÀ6ÔvØÃöÄÂaÕF…§4‹iN#þ w|W+¨¡J¢x3uIÿ })‰‚|ñ@ÒLµ¥uªêNÿò4aÄÑ×mS‡!„#kB’> ®¹G`¯ åˆà>vbêLc¾@E‰H“FU¨X<×\¿Ã5…ÕTëÝxºrël™má‹ö ҆ϿôéI~`B„3“œþ EÇ.±0kǺn¥{ë«5CÀ„XL‘³`ñåyϳ°0*9ޱ:{²ç0æÀÃZ۲ˆ8XÍ$ÆãgÇW <cu¾Á5Ò”E°¥Qç6­J$Û t«òb’fý†wsÐK&j>\öéëom÷ãøMhò.¡el¾}6'lN‘EçdASˆØ#å„ OÏÅüçú}ÖØÖ³«ÔÙb#­%?8zß³®«¿‡wß^6*¡ ÿ*v¶Pr&±”jˆw±rQÔ㸣ÆF/÷ó¹l`ÏT¦‡ ”´ClvLŠ»éÓH“ö±Ræv_àÞ•5äÞ/ɉÃn –Iü”.0m<Š š*L;#:X Á¢Õ¡ð˜µ“Rô€ý.5UÑg aœ-«*53=€ÂàÞË¢à^a¢Ô`Æà 5¢õ*ÚW4*š+?–ŒG³×ß>f±êþ~nQjدݯºã]wV“а„‘–4粯µnIÈõï‡NÞ$bþE‘"mæÿ³r$˜l6UÓ‘4HW÷Ê`â6^VôAî/°ÎO¢ˆ©ÆI¹{uÁýýŠÎí„QÑÈ£¢Ãõ|¢Ž`ÞVb« }A‹9DñŽóiÿõ8yŸz‡JXn=àb¨š®‹GÑÙ5?/È’q×ëºÜÃÎj)sóú„ïKÿå—®wðü)¥¶þexÑÏiCéàÚ|Öƒ©ßÊ5ûê¼±Ñü9ˆÛ«O·;ëXdÚ×”}lŸý±)¢á?Œ}rgâ£áÝÖrMCb’H¢Æ+Ùö®cB±e yÈþ)¤Y•¿ei\í@j%: aÆê2Ô®|ŠÌE‰ {¾ðŽÇ;æðÑ›<'ú¹b#,­ý4šÎ¢’íÙ•Iv\Õ$h˜!wöÌþ[ïj&O޶6zûôTšïN`ê&bEà*²bØ"{øÛTUD^‘Vlɶ ¶š—g¶äÊý'â«ãñ<ËÄPr!»§ÎeL4üæxR†5Ög˜˜Ng’/¶Äš!ÔnÏ+Ñæ5é&žÍß®*Ï>ɱ‡ÓjÍ5ðµb¹mÃÍÝXþbÞ ge|øgú-Z†´>dÈó»@¤"\WlÝ„ ‘¥S¦±´æôË6Cöؤ8[zt® ½úšxò=¸üz=Á,›V‡àrÖoi²òE§î¾˜cU£ø©Ý#­ûq³²ß<óõX¤aTẌ,h¿3ÑM{qz<ׂQ…笂_nÍΕúu§Žc˯E=íð@˜sg4PVÈŸW€°Áí\üŸ¨ÂIòú2ƒ+à$”R¹Z±‡ÔÛí#ësz] ¦5·†`ZNUÏÝ·Aë÷&îŒQáÊþ:Šz™1ebãxËx©][¨gw;ßù¨13†B‹y}áI!ݸx8 Ÿ#Ðö¸¤Àœ·èH9´¡vùür|ƒ^ÄNÌ">b¯3}‰d´)™ÈùèCyñIKqGé¢ÍÕ¶^þ(Psrqg¹j„eHåOÒ®çy.>Í»JrÀ“Ü)cU/Nú«Oo 8© ?Ói"ÆsR°»¯•)¥™œ“?ÚPSºÌ“kY/Í5~бë±àÂ×.o…5òÌ»K_¾%_šï14´d6yDÞð‘òê¹[`“+?º·¦U¸ç5ù"µR¢>Å¾Ó å5…eÂ’³Êb!P“˜Ì¾w‹Ø's+£*v4æü[f™Öpmo)SqrW½jACCÏ}7…-æ_ñÚ&¥ÌÛýš·_íZ;(ŒØ<[ÇV…K¸¹?jôa× #6wÞÌú:¸"ö£“&˜G®zßsŽïSNÚ~ãå~# ŸÜðs„‡uB÷wf›X×®¶z¸áý6pfª0ɤ­USGh Î(œ’ÁÐDmùtD·ÞŠæ`–‚ùýÙ0 î{D™”x+ðJvDùÌ$ÙÅi×%ÕÅØ%z0 æ?ÕOÃÚLŒ‰P-„왟_ô+×FaÝ?ð†k^l;Ë[‚¦ðô 2áL÷x:åŠǫ́!EKg,lüÏÊËŒP;uŸZý­¹©zB:q*Ťu?à6ÖsP!MІÌh·>|fˆz:‘ŒÖIÚœPú–…˜kØ¢Á»á?ÒŸØd ˜}—†#T=ÑLûRöŽNò>— ç6Mß0Á‡’J’;WRÙ>1—¡ØŒ©X9%„ò³ªPï¶‘ï ì¤ÁÐ;øñl&G6diw›ªGdÿô#ù¨Zþc¦-›¢Çs>òlÿ\£½R”Šz!ÁNÖŸ’=8wyfFí% õ«€<´º‘Á¥±[›ñk_›Q"]ÞP²^ë÷öÛÖuJqÉi|_ýç–‚hWÖ â©æ+/Áuˆ)!y-á4;g:AÌ@¿×Y‰âµy³R-¶W u/|Åi5kì#þ‰†_ÜŽÙñ☲MÐsú²Ï ÄtÒÔI®: ÏÍÝåè ,M–uù•ÈÞÜäYúám¥‰{µÀ¼Øž°}úžô-1AQ‹',l´LjkÄHº7züÈ £^û¹.)ޤ¼ØVuåjÛÌÈW&U€‡Ê4œ$×£hyÎ žŒêÏ'É‘­Ä=Õ.Ý“ö97Â>×DQaŸ3b|´Fœ>•‡ {Z±G{¡ÆàÕ ƒb÷˜]·æ²Já]Pænúä­Œ‹fîè¤èúPSK\^çï%|°:Í´6‡Nµã?U2ñ#¦ÆœGß1BJùìrÛIHÓ»½¯_/7µqÖD>pÑW„Æžú‘ŒwÂt©ø¾cVÏkeÎÉç¤ô–SzFÍ ëENÈ?Ø÷ÜA×ç†ü`âàNÅAÁR“”Ò·Z0ô ÕË{ú½!Iˆ‰v¢Æö*"{$ɹ ˆl€GÑBåúå츸ÃŒ°š‘Ýâ—“põ캇¤®HB›oÇ;ÄC‰Ž/PŽ L„®Õýd¯.#Áûøíë¯_g-†Ñ£MùUxâb‘²¤•ŠýÀ%4’@zÓjÑÏO-!æ#?îSåðWÖ?5¦a/ùQ¼³Âzà8‚zùÌÙ÷¥åùú"ÈiG Ë7žÍa¹èe)\Ë…j¯ÎE½1hŒm-,蔥ê„ïnƒAh*âsqhp^w‡¯LGz_Ú0ØÑeÍzX] vðÐnÇZuðwõWˆÚåMÓ£ÄYMÆïcS:¿±_KÆ);ïY´É ×üèÈØpp§…”ò…£ø×,5‹ªÐŠ&ÙÞKWm ·m¦èàh[Kæ ‡ïŽ `~ðLmxY0Œ„,íkž¯Œåb”4_eìHwn€qà5ø5|C°Á¡åÑâK+¸£ÃËç…Dz¸N/¹òy{ñ±á@¨F—Vs]Ìæ‘\ *c‚‹ºB*–Æ.@Wexß1Ò„£EÁ=¶eÙ ÷]Ã*¢ß ´ÆÝ–¥æê„¬[þ¢y¹&S<Óõ ¦DîÓ=`ÕÿºžïÇ+à}йzåã˜"êk©àÜ1Ñ@á*óýÃ^lí„N¤ áø‚Iu|·ÜNÆ—šb>¿òxåä_zÝh_l ‰hÕ 3ÒY¬ÎA=6Ž1½(³™lñkKáäªÂ aþŸº£?ECÏ:ùàø— îÏ×R$UîÃÖ·Mù¢©Àm•4Þ)Ì:'!3C”¸ájÜtŽ÷å;MN%³Š´¢áÜ,ñ,6lpHƒ2í²ÝÀI/ CfŠS[Y€ .•7Âv£»ˆ¹ÄÇ⥭SÛ:9~çÜ\Uê¸N³M5Ìóv¯´Jk;iÄ´ÏÑOÏyLH|ɳ¤¿«R,¤ælD^Ía´t}öƹ}§ÝÓ}çùhMß#‘¤'|ÀÜü4Î_¬Àÿd½âFgkèbácSbüv^—ÒëL§äz5ãVŽ©ì­º1Ψã‰\eÍ~–.g6<[O¥‡ÖDj);£2L5vÞP«¹-”.ÝÊ>´&7tbæµ —¬"Dû ö¨²òÌ*¡VŠiªX¾àßxïÊe†T*)Fpå<VÏÔ ªåO=²CR2àƒ'ƒ«oIÖFËGðÙB¦ž$íç@jˆ¬gdª_Éߺj/i…V–’ýÈìOáÓCŒŒÑ*d/Wì5ÈîT?jƒR6DËóšx@°T¹7Ÿ ¯Ô³& áw]öÀŸVýw¬¶öµÆ‹F+ë`w|*6Z]Æ4a ì¿a’Sñ¹îua~ê?r(…qÑ÷¡äTTúŠ-áÝõ›"þ|=8Ï_ïRòù-WÕeÖ=8³+¬ªp¤¿o™Ý¹¯ò$I̪á?½Ój¹èšÐωE2èœ ÀMCgÑV¦×-óZ3÷,û=ÕÁäðEâú{?"ù¬LLc~ƒ:µrxÞì¡b¹¾áEx<)ËýÕ1AEã†ø˜wYÜ·0{P#¼–îr6 \‡à~­)mÎWÏ=*<‘ùLÄ…uÆñùß‘¦´N¾“w³/”3 ¤yö©*±žû¬Ü6ÀToSÓ{$éX¢_Ny´4ãn r8ÉÃx@d ¹_ ÉE)÷·JÒBv‡óÝŽº½B±õŠ|ëÀ²**Ìf`ƒºLÕØNYSðV•Æ/ïY¢å󞜾 »^„WO©½{çÚg„Éhôjp0´{Ƥ?s# RU÷!6Ñ}CAx¾ “÷ǰÅÙÑWP¸;¤ÅµÓ!j_Ì`´¿±±å âéÐI¶‹ B| >üR”ýo c}ýòÒ ¯=Ÿ%Óóé¯ò].«u·ùݽ£[îÎja~}>ÑÒš„gÁWÈ2¡ýƒ»îʧå‚ î°f:³YJåXï#c»u@y?•þÎ…–}jrqzâ2šdAYVu¿/©‘uïH…L‡ÇÍjEZ-)tršu°qLXÙœ'¿ÇT ŸÊ‹³EàC-½T‰ÝÏ;€5ݼAñ+­…[p9Oý>]ÆIñ¼V  "j[„bÛ‰kÛÛ¢U)¾ƒc{å û±‰,…Ú¼”¶.»iå3ıšiœãuƒRBŒ·+ô|¼ò>=KÍÞ'¼—ã±ò>@u%¤-ýÇ„0ª€-Z´Ã×ÊÃB˜jÂE¨U1˜›T‰2G‰\EñèÙðT„›ñ g(/Ró½zœµiO«CŽZt¡³ŽInË™ !£2à’JV±eÕ ÔC*'›ŽÕ’N7þD¡,>/ù®ÑnÝ&5ô²%8%xÚ-®¼–c*œX~ì÷6BN¾Oµ:C䆜h¼Ó'€––éÙDâ—;lÛa%Ô)‘÷ô™¸-ñÏ‚®†8·Ã†ùÕÊþQè+¿E ?¥9fßKÔë2¸ÿðì ÷—ÁϬJYÉ!LnÌBžªŽ­-—/® ³IÎ]™Ù›+3|ÞeØ«'\PåÕÇÉÞ9¡\"ï¨$G±¥îOm¢d¯Ž3í­Œr·Kөв8Û_ÇtŠRàè¤s ž/IÐ{*í‰ëv‚È3¤YCó–”?ÍÎ)@JIiàtÌBá¢'ЮJîîu]CHUxTFÞ ¶Ë]˜{îO1ç ]û\GˆßÌuŠî^¥£;o‡ícBkK.mþf²Ê•Û o½Ä72’*ç¤×qx=MtOuÀ—ÅÓ¶~ãÑÑoÓþ½POÖ)Ÿêé*Ä€©Ð`.ÐQ öý8-²\ß’Qìñõ}‹ÜøÅw7§WÀP˧ˆ¬ Qx–]këM‡Ú„yyd„ÜΗO^E`p»ëÖ¯Î`óQ˜î¾)$Ú8é¿äI€â«Ù™­Âf¤Ÿ§9AȨËþùŠª ï¶Eu}YŸ6êPPW;÷,~¹[Ôë×ùŠþªÇž–—ùO¸‡¼ç‚ûèšÿ A•*­´ìm ëÖ{Y¬o;ȵòk9ãß]äþº8N>+ÙÒ™s´vàlÌS:B[ÂÏÓkjË&ÂÒq“dŸ€Y\zOZqîM]¤½³ï—Âól@ý,Û`·³Vñ#Ú°o×azJuŒì½ê” ò„ë:ãCAâ~Ìõ‹Ž¥5õ´eúðfgŽR²wéBÁŠR`[kNv=à÷3>Ìl«?B6Ú¸:úçé4Û>fï-Kõ'ËǼª¬©ËŒ5º“ˆ fö­‘ ¬…ç’caz»¹@äKÞ–P’—‘•˜&¹_‚ÊaŽ çª _‹¾²×Í­Uõ0¤–£\ìë‰'-\ÈÝø†ùoð~FÙÀcFÔtÒÃ4 Ÿ#k4t­˜a«F|–Ñ¡wʵšŽ¯tlYÔÍ“«¯/‰-š uµNOÄ-"š°ñ?] š#ÁÞ>ñ6Nʵňªë¥Í\uŸø4³¨;“Ì—"‘¶„kš‹Ì¿W?¨?y xÊÈ$Lay®V§$q'\²ˆ<-¤P˜A5Ýý±Û—}ÕýþÉà ÕZšîƒp™òR\)97¯ã…›G9g ¤5¦ù”˜”Æ)1Ì®ò:&“vÙw1*®­œJö3¦J(6“+K†‚¶y‹=),Aw¹¬K«ÅUÖ½µ/ŸéÇû;…>¹×íW­w›|Wó&1ª'ìS_=š’ÆIâqœ“m"¥4_@ê—¤Œy¸˜%Çf[Ÿ3=1\!#ŠÆ ÿáÁ¼'$íK6ì‘kŸ ªHÈ(Ê7þï~üüìZûÙˆ#²°ª6žºœŒ’h@·3ÒMK(ï{íS²Óâ ñÝ* —Z¢$bk‰€AD4W*:øžæF·Å¹na{Írm;ãNnst ‹žêÚpÎÛkb[§ø[·´ä.rØŠ)þƒ°Í¯MîM_lnÙ]‰fóÞ~ÿœ‹$áÞñ*ع*¿F3öX¡ÉÏ n÷)„«~§•¢:pPš‘ùMœM5Éü"Gß] - «-–{º^ØZ§œ¬Å²L..&¤Šo‚ÍšåöÑ¥8èÒ#üÂ'ûׇÅmÀRXÀðôýzëÖ¤7 óöó«gq+ÜfÍ>‘uÎŽŸò~“ÍO£øÔ´ò*š|3“Þ=¶ ½¦Ã%(äÛ¼&÷âå%AoW˜qþ”´–@¦3ÔÙZ×uª­3ösþñÍŸGµM9Ošsš: HP¬Ú‹>‰èu8Þ³‡Qˆµ¼Ø:„*©9¶L:´¨‹²I†Ì“²rBÈNŽ1rßñ“¤ ŠÁˆ_ƒ]¯“…©­ŸtaJ×i*\[üTñ6¸d§·2>Èd ÒZô¤k5dÏ1ýí3Œªé£8¶O¸“Žý:Ü0eÆLE7[äî{¿ÿy3c p/ýý$ÿ¶?_ä=Á¥ph -O]ÃhÅ*?Ê­\¦ªMªÂ²l†Ê'PR°@:*s81C:Eø3^†}¶}‡ÆáëÊžšþŒv²‘hs¤&¶Õ6”8IÍË—ÙÇL=¢‹D äÃúäŠ-½bRÊ,÷É^umÖŽ ‰-Aí¼t>ê/áÅ¢k*q ‡èPSžw\_Ê`:î{ä^à,ö,ú\¡æF¹C@Úé AÒ±¯)söAžùåÌÎåJ@É$&ÚóÏû}µÉC˜×B!دPè51×—mß#㾜 as;LÉP²îgïQ¢#4ÔK6ØÕ®¯q%ñ¨É t >EQi ‰| `D„³µëôS<‘µ&ð>ÄHy6DÜ-È»6Ø(6`pM§À™Îg#»Z¡‚ ~ÎyaPE >—<ÙuÂ&8˜È­ÉÂ‘ó¿†ømrXGàò“A•¯+°u=Ä^Ì_•)¼ûŠE$“À !©éáøŸ[°cÁVÊß”ØêYN/ šV¬aŠøª‰Zèî‘IFýÔ°ò ]ýºæ¸jL ;™?˜'½˜|žê³*Ü;ÊÝŽ£Bê¢ÌoÔHôˆÖ6WbŒ·«bõ  ?l¯6`ûšHúù˜HüZö~þœ p®Ib¨;ä>ku‰ ¾x™µô6»xOܶ4gjšÑTÎbFõq›Èæ}ªƒà1uŸëE“'?7Ù…V6üúSºÜvdÊé¸)µsZ¤J¼Â±ýŸ¡/þqاAz  ù&×/îu™«õ^ÙÐyä™´0¿Oõƒü»Š­*²ú¿:ü ‚!J–—w£C7ùÙ¶]L³XQÐ%ƒÔÏ´<ì¨Ù¾Q¡÷1¨çûº§Ÿ^‚ä5xÛSX }¡3+(ȤQ5¤†ÝëŽô>q“X7ÕÑ Dle ¾_•0øþ’QãBŸ¥.QÙûòIR½5O‹txv}W%¬.õÚ¼ÿé ¼J‰P¿×±MÊÜÎ8Å$šöëÂ9nkε'Éz¿¢SÝ'ª‡¹JàoÇäùA Þžä#Kž0Ävji*B¼”JÛ”%ž7#Ku-å bd6ÒYhÇd›¹uÅb”¸¼AõýhY¿å-Œ)Hµ Wt*ïá—̬$EI\áI`¯øîd÷”ýER˜×ñùl3`ªåe§ZíQºÕeZB'C¡á®¾L8%¯GPÅ Õ-E/)“—*tlX*~kF|šôã) ‡Ø[ªe&£tz"ñ€sϱ±Ó¶@;éxY:‚ç̶ÏdDîX ò¢½uÃB!/&œ ¯cwÅ4aØâÊÐæ˜‹Ý³j2ÊòŽÇ™í¹ˆ6ë•~½¨ï‡>¦‰[,àº:&$åê›GÖžµwXzh¸`Øß ,™XÙsW.Y£Âî®ÖN?};"EÐ_î[i´c‰Ö—1eqÊ9&Á³93¿9Ú¸x¢Œ%¿3*Ÿ¤í?Sg‹Êâ¯ÀÈÛx‘ å®Âk§ Ó:¼ë‚Ï/6V$˜"Þ YŠ×מº¾üì×s~ß8‡Å(³qºz{y‰bcZ®y aOv§¾OrVI(Z&8Ÿ.˜ 8%CJ˽7Ö|å´æ‹DŒš}¬ãÁ¿ãqÀµ1/§¯frK ›Y¼z¶À¯wAíª Ëëîç] „£:….ÇÍÅí3Ë3ò¡ïÁ=F…˃M'u»¢šwWøð¦sl|ÂF;«hŸÒÈ ÌY¤/¯ƒÚ„dÇ}2>¥ÌQ¸ùaÄ®¦§AÖ´)LJ;Œ ¼ˆö®ÿ°kâö%בi †¼RFó ­§3Qèë¦ ’±Çþê°Ü¡J½:Õ6ùõîa e­|àìyi)ø µ—Ö¾–TBÉGÚF¦„æA‹zE.ü‘¬TDOW)"‘¯3c«p@úÊ·¿CR Æ3Þ¬qè™â5S:ü ©ŒíÉ0°ñ#S7ž)ÞV+FYõM8vSªˆ¹íüþø£*&iásÂSÀÜ“­œÀP0PÕ7‰²¨ô¤3-„»Ì2é 4|rØ ‘…Åñ)\ǧ s²Üt‘&ˆÙe™å.ô4#§ý=€’YçõïùM4ZÁIö'M«P˜Âz®¢hCgf­3jjiëæ$Œ+µËh4mFzë:੸{â+Dþ«T KÜïACc\ÑY3¶ßd™&‰k†ws)ŠJmg[~bo‡>J sú¡—j¼+, t¯3ùËfÔÜÃaUá‹ “ÿ¢üK›80*Ur»7ÛÉnJÚ.¸ÖS‹×ív„(Üœ'³–/ýÛÚõº€SÓ(,±îi›ÚØ_»à„(°“R‘=t˜–Aª“–¼C&´L'U·Ô`?JNžŸíý’­P·J¢…ºÓ %å’À~*eq"‹¬EL™FñáØ'ƒˆÊk6ªj?qŸ÷I>›·†øKVÎö/NpKÜmòýÕ@š õrP …åŠÝ»ÝÁÐZé-Ìséy ó¾¼<Æ.Pµúðg ûµ&ÿTk »Â]+OûDè2Æ‹iâ¤N®†¸Jöj‚Ч+Û‹û¬¹}Áýõs: Ôøõʬ¬Á€EÙ”q—¹§#ùµMÏ”§ÚK¬àרVÈO‘n[ÓÏ„ÏÁ!q¯}YU¨r$œ †µ´®ßý³¤§6(Cv¢Súaý³¬~ ž~s9iƸ|Ž FZË'b í[ÂÝú²I<_E5*Úªºb‹Ó«vÓàU+»¤µ^•aý€a“ñ.u47‡'CÂfÐL"­u‚Å^¡9=£)?5–ó™G:Ìÿë`›WkžTT}Z2—(²@%·0Ý\ãn ýÞ3k{؇€?’ óö]ãý6‰<ëî¦ÈÇC„{âÑØ}ÞÉ*ÄÜœq /7ßõ»±WSNæ øQ¥£´a¬ lÜ©¨wøùý8žböÄ%-£p†j¢üÂÌ8›ìN˜—µ<ѶÕ|·Îä î1’ QÝ!~œ&:Œß3ßÙ‰§G>8®‡çRjîýŒž*ãôác?%j¦‚±§@R¾°½[ÚÌ#YE~|XY‡¿¿õ[)J+¾RU¶`¬Ç·¥S¡©@# :sÈ cŸmCi ÷xWÝÉ%|+~[ø½¤™åmdü:ÞhõîîgѨä¢BÍÐÕ¤/˜Š.Vx¼ ±ÜFûw qòÈ#Ñ+šºNdefLÐÞn´.AB÷_šî[ õøt„öˆ>çpf¼ s&S—*ÇÒ\Ú}Ë Ë ¤ž^åN G¯‹ ÎïééÁîx……ùp2±?®qÇŽz¿~Ã!¼­ tY¡Ì!N¿ùÂ(e &]‰¯whÐ:Œ‹/®¸”cꊋ˜žï»ˆìÃXÙZƒ²"£ê„͇.›wW ûÀ¶dq…»Fà;çéÛD7ÌÐÕ8D©w¤§6õ(»bè\,¸[Þ*õ»9ÿPiQ¿×ÄôÿúAðî endstream endobj 730 0 obj << /Length1 1787 /Length2 10113 /Length3 0 /Length 11233 /Filter /FlateDecode >> stream xÚwuTÔ[.Ý­"ÍÒ0tK7ÒÝ5 0 1twH7ÒH§„”¤tƒ€t§´€=ç;Çï»÷»f­™ßóÖ~Þ½Ÿw¯ßÐR©j°Š[@ÍÁ2P{+] ©¤¡¨©ÉÁ`gç²³sbÐÒjB`¶à=´Ú`'gÔ^ðI'°ìÑ&e{ U‚Ú\l\^A>Avv';»À¡N‚)3Wˆ@ P€Úƒ1h%¡N+kØãJÿy0€|,¿Óâv`'ÈÌ d³Û=®2³h@A0Ìã¿J0¼´†ÁÙØÜÜÜ€fvÎ@¨“•# À ³¨ƒÁN®` À¯¶ÊfvàšbÐ4­!ι4 –073'0àÑ` í“\ì-ÀN€Çõòаý_ÁаþÞãŸrgÿ*±ÿlAíÌì= öVKˆ- "£„¹ÃXfö¿Íl¡ùf®f[3óÇ€ßäÍ2âj³ÇÿîÐäq€9!¶¿ºdûUæq£¥í-$¡vv`{˜3Æ/~R'0èqç=Øþ9â×öP7{¯±%ÄÞÂòW+.lZöG°¼ÔßQ&ŒmV`€‡ÿñ`Áް;Èší×"šàßNŽ_æÇ>|¼ ËÇVÀ>Kð㆗³™+srûxýéøo„ÁÁ°€€`s°Äãßêf°å_øQNw€û£9ì¿>ÿ<=êÌjoëñoøïƒfÓÒ–ÖÑgþ§éÜPw€+';€•“‹ ÀËÁààøüw!U3ÈßDþH•··„þâû¸Qÿáìú·þžFÀ×R†>  `øWï†ì<ì Ç/ŽÿoÕÿNù‰ýW•ÿ½ÿ/'[Ûß ÿ ù¿"Ìì ¶Ç4ŽT:šÏíµ€D•àI‚\É!°î¥² Ö Ãø){7I|Qê»=I>¹cª²ïz´"’#¡Ðg~ä×ú;»Ž*(¤eùè*»³Œ„?¿©ÈÙúª ¢L´K±Û†¥b*t4LÜÐ+èc6^=©h#0™í‘Àæñ›•Å€Õž˜“ê•ð ¶tpþ°n{%Öÿ‰¥02‡~眥pàj^1Á—æ…°ŸaK$À¥+©HJföh„óã¥|´Š‘ƒ›ÈØ4S°à,Vš º¥[ÀA¡µÜ·Ïl¾’ƒÞ)9†ãw“ÉaSš-¤wÊo^†æÊ¿“œÓ‰³Ú“ on<$þþ`¿%ÃolROŒ®w;“ô¶ŠƒÑﯩ ]¶ƒfÁDvBT‘êœ2}efOväÍ<Îðvh÷ÕÚìS_iMþVŽf3÷¤ úùüAPϤ«‘þIgùv¥GhݘÒs|‰®çáD½…ë—Q xñ}Ë áÍúp¥âà ­H"•˜ Ôr fÑí›I$‹¯ôt 9ƒ§†$Kw{xºA©ü¦£c캤% ì3øß£ÓçÝW€4„ÞôñG_á eªsÇËѰq>‰Q·'Ÿ`{ìkzSU—»¦öÕS¶±2R} 'ûî]¿…'€×‰ƒ3 *ˆA2Þá6@Šâ}úäBBA’Ü c¤3Y*éo?>Kl.ªBæÏ³¢9Op¼±-Ÿ[»0%áæ#ðÆpc}(ò©Š]ÝçÆöÅqdí‹LUœ›Jy£}¨p2è“Ö%›ÑÔt?˜–Hh1mëüYñEZ{û[nöûc>*в!ÆðË¢PV‚­UO«'.\<Ç­ÔVÜ$B Z ¤NÝþ ïµç~[©•(Å^ˆKÓ<ðOæí„\“w&x=âA3ñrï-jà£#tˆÚ\kɉCÁ’&‡ °vÙ÷ÜüÂŒzÈu讂OY7‹ˆ)ô^Æ¢G÷è Šçm˜ãk²¤D{pødTÚçö$ $¶3]#àx»Á樸äá\¹­¹•,S´á¾´“­(<Ê™&ÍI˜-ÞвÍnØú Ž“ÁÈ”ÅÒû[Üáð'çµuõšìÑÁ,LG!”¤ ªfÇþ© yhDδº,(–{‰þßÕ‚Ï&¾Ã‘@;€§;¯×ÔI²Q=c;9Ó÷9|$Fô.6k#ë•Õp“بðËocÎw-ä9pcv£¬ÜôMæUÅÕš0ÅÓE´¹,ÛöÒ+>'Ò\ËðE¯˜É¿Õ’ôÃíl@:ÓOÂÉ*rè\P磠~ç Ù7ÄÅ{¦`hwXn?<[Ðí%¸_¹î«_KSYlI/v'NÏ|Áš¿À͈64¡wuôg"™yŠ‹à×÷cΤ»{£J ­3¤pÕ4ø´}\½*¯šwºÂ­jE)ºp÷~}ÉZA†û°¶^ÉÑë Uí?KY¢Q0ãËOwŠ ŠûŸ¶<¹Qî®”$ò D^ ¬Ž yJ¦Ü­1}çæÉrç7 ?ªê*[þî÷©†Ýë¼ë›·­C;Yx‘‡rà×ßηžøÉm®R8÷C J&¶¡Ú›Åt4™[ƒ@zÀ]Gã†8Z󢻩”š}IjW15‚Ë·ý&EßÓè婨¡¦‚Û¨§tPÕñÕ<$Ëå¶Ü’W¨Ùžç–jìàZñ,â5AQ–1þaïèk¶Îî8bcBüA信כÐAœ3’–ÄÐ>]-T†~G‡;ާEDÿŒèîÅ’Lň‘íg{À¯U¾^‚pózÅgá„ý!§_{Hù?¾`'Ÿ»¨¼=R–Œ`˜²+˜º†ƒëz[Ãîyp\0a—9Ñi ©¹ÅÐ,Ö6µ>3)Ýv˸‘k§Ü“VÊä‹j:Ϧ­?žé“°Ý¦vÎ07r·#Ð=9yhsýÈùiæ%Ʋ¯4æC·:f'³¯U›Æö±”ŸûI§z'í {§½•¾mÖT2æœeJ?4ÙžÂË“lu }Vm^0fvOÔ÷‚¾ÎÕýNý† »Šå)2¿‰^㦽X »_øÌ­‹½4UèY­Ç„ê{§<5k‘¹Ñ‚G§ðSƒÑ¢yÌÜ+Ä|O%sC»'Ü8¦á5A‹Šlì03ÉféA–“UÖao+Y“¿9¾‹ÑÔóë½ZÙ‡r…Ày½%~r|¿F’ócÍâ’ᨺ'펾2oœèU­ VÄY§ea€ˆæ~SÈyvj Ö¬vá èb„ÊYç4+xª›|:oæ7î7ÒçCc‘ŸžÕ)ç] ”G°Ì,|èq:U3ÚÖýà9á™™ ?§2N”FÙË”=Òž™s.B´"'%\ÉÙ±k. Å2'@µöI¥ EýÔ˜L`q7áIcë c‘ß•óGÙoö•[æ¶Pgᚈù}éµÜ\<]ü÷þCy‰–Ku™‘{4sÙ¢Q:¼\SÆï£s”zÀ,A%Hö£!ÑD8,FDÔÄ» ¥x(c"@®zz„sÒe”5Üc1ïæc|Ó•A¡S’F ‘©t‹36ƒ‹±cͰ"LŸ;ÃØÃ»öÇw™k·N˜¦ ˆÔjå ®:©s}«áÃ|¢uéåëB3‹l°æ:_ìê¥C(ëç]⯛F0‹ö¹¸E× É¸ ê~W+«Á‹ëUŸl …ì=ò!1®›îCÔF‹„0Ÿ©rC‰ÍgÁÓ'±;^x¦öü›c´îgœÞ,ˆ²‡Œë åDÜKv´0?q?xëó¼00…ÜQŠÚŸa® Oz=’%7Ó‘¬Žsƒy<Ä}è;Κu‰açgôqs‡9A΄{¤¬ ñs-‹õé»´áÃkcCGz󲂎”f™¤‹%Ò¸Í1î8|TY*ì§’Í2ÕtóuÎË@¡ƒ¬²Î¦,ftnÊìùÜÈ™%|ŽP6"›«2U{\æüõ“sjº %fj¢h¼)'†W”Ú_åfªC®–6á$Ñô§S‚‘¥óÆü„sºFèÇkÈÂØnUãS>®Œ•¶²ÞH½o ð[ \\`2äž¶Pв²UkƒÂ‘gèÝœ¼KMËI£Š³§z ›(àE«!§ÅÚéÔz±[Ú*#7ŠKüBë-±ºÉ}ß3÷ÙìóÚƒñç?³×Á(3³‹Dò~îBS¬ +Ê1@ÿüÖ“$p΋ÃûðX6ŽëäàKÍûœçÓõ¶÷£’%»’!ŸØ™Ú4®CG{ùOÚ=…Âs ±\Kuê:¦ö:[Ä .w¸’‘.—pÔ” ó/VK¥ß[b}Yª²^IÖïÆ ¸¬nùªÇ¤4‰Á7«žAù¾Ø·~Eˆžu†>gHXé@ X¤óÌÿB ··‘ãeȤ{*àx¦ÊÜûÌmŸÆQü ¹aæœÇÈ3»ª¦Yj£ÜƒNm6 dfðGR3O¦WRuü/DЈùžÂÕ;=ÔÕåZ:Ψì<“Ž3DöàUyêÜžp¸:?èeèx2=šà$ɪ_ãšÍ¿‹sšÈLªôÁõUôµè¹¸­KzéJBE͇h'G%µv¸þ=À¦p¶ Ò:lò z«|Œ²Þ{Œ„ô×Håþ¦H[4K&gŸ»›ª˜ˆÈf¾¥±JÍM¬L©È §kÑ Í"…X4Õžì6ƒé¯ecG6vèEí×nßó¥ÜäÁõg4rµ…L°QJDf"Õ='PÝì„ ùwûª:8ódS‘wÃ@´onƒ{?¨ׄDæÍîaXyW¦ÔyÌ»V.­1¢j†­<ƒ,Ðx±\‡i uP ÌÏ¡!£”g퉸yI>kœ'>~‹ü~×ÐqÄÂå×4ˆÖ-¥3¯>o8OKŽ#!Ö,”ľŽl»<¼‚Ñ<àà ›*§ë5¼ Mα¢ûcŒ!ï ÂÑcÍr²q2­,z×ÏqûV‹I¼[á…²r±Û¦÷ÉŽú¢Ã—…z³Òº»K>vebjŒõÂV3IéWvoeßF´ËôèFÜC>žuå?ªq—î½—°j=ÎXSðQµÚ\HŽ©”X¿¾h‡·1sìÍ(&ÿ"ðý:÷ï=ÚÌygOó²BãhØbˆàƒQÖëyV eÂw¬m£^ÖâòÂUCyBJr'´¬"¶§ ä®SrÞUŠŠ¯°Ãm#©~Ö™1`GõÎ6#¸k¨ÆáçtA¤‰}õÄä‰ôÖì5ü³½Zñ¶R:°TìiSJâò¢sÚ"Z•œYÛ™²ÞTð8Øçs=”+W&$ô#›’ðü¡†tíÒeL¨âô'7õ+ÿ2Æò·å]{ »žá’€ê×pŽÔ°ñ,{/ѹ’*âWðXñpƒ³,‘#P~$$Ñw”iÔ¬Ò‰Ì6TòßIxJ‡Å>‘÷í€÷ëö×$®ž³°å¸ ‚ÝÍ‚m4ÄÔl›Î[©©Ñö)ÓÆ=8Õkv×_uð½R ­ÜøÊÒ{<·Æd¡ò25£ÆLc @LîyŒÙ~íåí\-[ÍdI*·éX(!‘\íVõ^§çr/6GJD B*E˜bÅ}7’!U,Ÿ“‹Ù{Sݻﰘ g~¨ÜÑztÀt*ûÈ>wúèɶG‚b)àÐJóÒï[|ÛÑ©ÑÚy•³[¸‰,¶wóªWœÁ[ÌÕ|õ˜™•Å¡Ö'Þ˜é9mlá0œe 1¬ƫUe«ã‰NJ¬…jôÔÕ=Ñò±‘¨N:™‚c_Ú¦Ì_“|.Ïž—÷W™sOŸë"¸ Åi`VáiÄ·Ÿkö‘ Å#j»a–ÅT¡Pqév&è²´wF$o/T„ xñËäøüè]Œ]â£Åâä1ˆpí XW4uÔÎ~|», RÛÎ"s;Qƒ÷_©dÝéxBÚ3åûàëÎÏxGwHÃËöÜ‚B´™Ú¤ŒœÚíÙª8 b›i•|ÍÅ‚ö&;Åë DrT«ÔkÙ5% Lhûå–(zQòõŒ¢‘¬_‡ªå³Ùal;Ú³×èM€úy 3E²§UødJI{>ç+j¤™[ª0Û&±gŠÃÝññ{¹ésû´¼œ´)ºÏõ[F¸xR¸¾Æ$N¤…]´{T8HÀvUšðcœwWØy”^o´ïÌ:„K‡´µ]ÎÞÙΨ—;‘?€ØJìÕîæúõé gðBu}d´?%¶:´›NFx›Ê»Ï¥¾éá]Y´qR¯­ãkm´g¨ðH £¶Ø¥ ´ÐøiÄ{=îïQãÌDB$K?“&bDO†r–.oÔ"8§/1oЉW| Ä>siùHéÕ/©ûžÅ7dк›´[nïQnn¦Y¤¿Ñ©½ÀR÷fŒ²ïýBä·(3ù¬ñ›ßvWÊD© ãi¿ð3%&áVŸI4ä ý˜EɸâŠF;\>wY ë²Ñ ñqíДèÍP°Ø®_Ã" rÑ´´í«__ŒöCš'mœ¡$ ÅíXÀæÓ2±Mq…hnɽ…»£ÌôdµßèÛ{83ãêWuÞô šæ¢QõÑÍáÌ,g$R¶ßÙ r¡¬‰¯ë={⇖´Ï(/?Ñw“|dn±Æ¯Ä;`6Af•át?—ö@-»Ž´+jçö;ü¹êÖ²l Oí‰7:ÓºZÊù®”²ù©ù %2¿…½Ï·%Wûú9è_׉Ér4­ºˆQ?I›!@F‹ä]ôyïŒ×¡Ú Òøx;Dù`Èѳ“ž.“‘Ž“é ÛÇ_J~éašõ’p>Kñ~iuùÅŒ)ªr•»e½U-öÞ8ºf,£_—×ù‘0 ã]Q´gù”{1ã¿øØ«—¢èÄX~_‰¸¿êÙAÙBšØ->oÕÌKëæöA7ŒhôÁ¬»iH3N„©ñN×ü8ÒÞ_Ú èÛçÑúJu³6][3Ÿ+²ÈŒ´LV"–M,VÖâÅÀ¬j}â˶á#wÓ»×&æœ3i‘mºStÁ§!^4®óÈ¢ðs}í…=¶þAKh|Ú^K_í g!‚³¬B]ò[³©Úg(UúÉßâÔðë=òU /ÌžP-¤J-qk¹ÚËÐ8‰Eº’F©† õ·2_Ú=™üܢফd._FþàF˜ðæŠK‡•1ˆo~@/N"JDôÊšÓ½˜UiúƒÔð£ˆhƒ?P§Ž1«)Z*—1`¤N/ó•Äë‰GìG3w”bý: .€ýä]ŽVG±¬/ÇUŸPÏ ±Òµ þ—5ZŸžf¶±¡. Úêu®þÓu·ìIM²pV§³nÔuó7Ǩ=ýs¦Ú‚ÈjK´‚Ô¯)EOl{GtFó“óµ¦Ð2û¾TvR;E%YR9[¤KÖݘ»YÕßâš‘¦Û|?¹‡Ä_±½×%\P¬]«-Ù9cÐtnî ÷'½C7ÕÐØVJ'uójøÝ°hû[]HCöǪ_¹ãtíË:Žå”fÈõ+íBG–Ò4˜R°k?¥’U:9;N­pcÒ#õîxïßh?þ‰Oõ¢4šÀ Ö!ü cG(Ý^8“º§ (¬íÄb”ü*ƶŽlrǶó«&{[¨¯KͽÝL”p¶ì³!É–tøa_Hb@á^“™$ä´wIîVoUa$–íxiÌœ²?ïCM|øªÅ_Ë©^„2œ'Þv9TÚ¼ÍíK;&yø¹mvHÏ;œtÚæa0ݱ£ªgmÁ ^fŸÜ§îÎìk! ràe†Œ®ñGÁ¼øŒÇ«ÎŸa²j÷.C‚RóúÉuj{7S;¢×YO†¹&nÐmS‹åñ™žï»Âkô¢¸|æºaäBÁèbW×AåÚ0£ñK!7ÆT&ê'8¤GŸ~Å Èh*ZZNÉ{%Rônºÿ\} Š;|rþ~ÓÃF=eÛ6A;6»AJwºVgŠh5Ëg¿wÉ'ùîh²}ee§¿÷lRÜC ¦#×F[[9/ÏÓßÝãªèßÖBu"f?æ2ž5‹FÚÃüÍM¦Š«ÛhpƒàÿÔk0£ì±ah‘¾i¡¡ÿ…ŒUBuê‡ø3Ÿ/ª=¾óDÐX¶oiO ïéÔIœÖd“®â¥£zN²2¿Ž(ºâ-ew· ¦úҪȷ@®®QúþhÃÊóÚêÕ— oÑÄkŒ(xÄùCV¯åÓù²ðóK)÷z.¬h Ú<{®D .rÄ5†ãµœ´*¤ “÷\¤ë<Ë ûÓU zË“]Iùµ8x¶"eþßSRü>=ð'›½J…ETô\ŒÝù8^ìv¸—ÉiA5 ­FT×Tð•3 ë)¦š~óO³`/•Ö©†'žÉÆÓÝ#É'ÃQZŸ:·bÄû)øÍö™8ñÇÑ“QÖ|•’iÆ I‹ûQ^Ê’l›VrÚÍm᳋‚×Q¨ç [^ïYR·$­¶ù)ܺ<Æ€&åÍML‚9AàŠð:S5ƒägdßGÑ¥˜moî˜+bŸ “}<ï$A+AfSРôOÍ"”¤Ì.I‚{‹¦ºÜJ… ¤Ü©&Ì5å5mc!$O®@­M}ÍQj MžpÇ–x0]ñÐÛÀžÎ|8–É×ozêÇÄ ĉ&Na”r§Uâ4^éÄâDZ—O¸Õ‘èª5l'KuZÇ"q—º*ûì‰b’x¶‚'±Åc}>„o~òªDM½$9dêîxšŽ"(KjÖè³BzÍŠH@x[8U:õtÞ‚‹«i2çn܇Ph†N¯à¹cöU¬éÀãÎitV3ÍAo@Fs}wªÌ‚•1¹Ra¶•R#"j\®Á9Á¡êU¸,2ž˜¾>_ ™Æ?ø†ö WõŠUñ5±\å¥û'ÿrSäĈiQKŒÅ%=â+£Ñ‰*¾Ø»§…£V`¦×ɘžŠËz QØYÏ1¢š¢Êï ºÓHû^_¡£‚gmºï ¤øgb-Ί•¡v³GG§"«õÏgñýŽ."ùÅ?3íºå P÷ê<ée×JB ¢äWì¸þF©Û3ÙðIeBÑœõ½©Jͦ!ïÍÝ"ÜFT%+"–’‚°øû\[ƒ‘‡(Í 9ûd*”ܶÂtÊNdºQ¯p«©Õn­L}ú’™_ÆÄD`ë+e(ºCËSmS+ü):÷h¯ðRÿTCÜ2ÝÔðJ¾ºIçBsØÔK•°Ò;)åXYN¿ ð2Ÿ‡Vå¶àÕeŽö™E\!ÇWKC—•mÓ8šB˜ÔËOvIèwdïKôÜfMœ¬¥¼È‚òÖÔ%)¦í§ƒD?a”uKrýñkŸ£RÃŒO¬Ä¸Éímš%.Hâ¤ù”V7Ò*úÞ6P…ø¬¿F”€P6ñËî_2»¼9@ñÊnÒUÛq<¤U>Ão! #8ë-­§KÄԭ܇Ù䬇v…ì1Éúõ¾‡Ê²²¸ß{HhmÇñ}ð…¶&³Œ‰;´¤áµr»ûYÅ—0 ly>-­~1C£èÓÉak‡u‰¡ï‘!C½õŠ™{^;eß0Žh=Šø²Bø3YÚÞw¿¬²b¼jœe5piͤ 7ÀJ—D÷hŸ¬O¶l˜uW=Ì«L‡«0¢ J24ϲ7X}˜³zˆºò†SÇx\çm1³Eý`¸ÓˆŸ³"à#Œòm6a{ÜÁC–„¼ûóÄÌài·„È:tïD†qš¥”eqí ðëÛÏÓAYÀ¡u<éú‡&&ñÕO ²ÔKv ?ÈiæI¡£æ ¬•Yü9ì@Å^e©%Aªóù‹üFü[À÷Ž›Æ$ö9Zôr²4P½[ëÌÎAB5„Œ›“7än Õš¸xÖP¹T ^ò Š£X`æ©zY0ßæGÙö8L’áñä`,׫±oâ-qrj5o‘L„èǰWh½çe­÷[rßqUÐNQg®’CÞ!•m˨oæñ¨âtEd½UÇ©ÓÙãâf—ö"x¾QŠ6?Ð9 €o¼—¢KFE¶œ;æ~Ùn2±VÕ ×ðœÎàãÅÀÂ\Ùºt’,Óî·t‹| l€¤Š”¯Š=ŸI{§S¿•/ðLDse8÷Ý$·órT]¾lQ—!b2Xæƶ×GtÕˆ6°ª±ä<™Ý4¯2UTk¦P%±—×3 v!}QÚÍ|ž}â7bú ‘*ÂYë W›íi84FÓ.Ûñùç(,Nªïb3˜Ê–#ÛJ"|H¨1Ü{ÇÞ ‡¼Rg¾3A>—Ý“à›½A::ôEÚ³7Á1)½&T~æ3<.'BDb¥Ñ嫹xj9'`¹` º×U¥UÃ6§ÖºªU´¢P.P;œ_R³‰öê½ÏÖ0&XãÏïOŸæ=åuUòc†»1iòír*Í&³ÿW[Îðö±—ÊÆ_RF¿žÑ¸¶ÊâÍ«~QØ\ÏÌ|\ac6-fõ¥2i$ U5– Ô„˜¢¯ÌY¦Ùù‚”‡ÞtN+µy6”­ýó¢$w'Fæ…‘8Ø`<YÞúfõUGE€Æ-M»ç¥ÿ*p¤ ÷ÿŽîÄÉ endstream endobj 732 0 obj << /Length1 1401 /Length2 6058 /Length3 0 /Length 7007 /Filter /FlateDecode >> stream xÚwT”[Û6R"ÀC7 ‚¤tw0À3À ]Ò ¡Ò©H(%]Ò " %!ÒÝ)~cœsÞóþÿZß·f­gž}ß×]{_×^ëaaÐÖ㑵ƒÛ@”à0$?/H×ÐÓã /$€Ç¢Eº@þ²ã±B<P8Lâ?ò0eS#Q@ 8 Põtø~ ~Q ÄÿÂ=$°ÔÐàTá0EîæëupD¢êüõ °Ûrüââ¢Ü¿ÂYWˆÔ 4ÀHGˆ+ª¢-ØЃÛB!Hߥ`—rD"Ý$øø¼½½yÁ®^¸‡ƒ47à E:ºÄà büлBþŒÆ‹Çè;B¿zp{¤7Ø  .P[ ñ„ÙA<Tu@OEÐrƒÀ~ƒÕ¸?›ðóòÿîOôÏDPد`°­-ÜÕ ó…Â{¨ ÐRRçEú ¹0Ìî'ì‚€£âÁ^`¨ ØøÕ:P’ÕÀ¨ ÿ̇°õ€º!¼¨ËÏù~¦Am³"ÌNîê !x?ûS€z@lQûîË÷çpapo˜ÿ_+{(ÌÎþçvžn|0¨»'DEáeÂûÇæA H $@܈­#ßÏú¾n_NþŸfÔ þnp7À5$jAýáù#À^éá ôÿOÇ¿Wxüü€Ô Ø@ 0¼²£ÌûßkÔù{@}3Š~üèçïï7 Ãìà0ß࿎˜OIÉDÍXëÏÈ;åäà>€??À# ÄÅÅQaq ðßi´ÁÐ?müG¨ ̈ÿîµMuìõ‡ìôÁü;—&E\ÀþÏÍA [ÔƒÿÿÌö_!ÿ?’ÿÌò¿òü¿;Ròtqùågÿ øü`W¨‹ïЏžH”4à()Àþjù­\ ˆÔÓõ¿½*H0J ²0—¿7ŠP‚ú@ì´¡H[Çß|ùm7ø©4( ¢ G@Þ-?ô_>”¼lQ÷EÊ_.J=ÿ.©³…Ûý”™€°öðûâP\üùQz´ƒøü¢1ÀÇ ƒ#Q!j¼@Àî÷óL…@Ÿê€¹@ì‘?]¿­ü¬¿Ïï§ù_Um==PNä/f ZúkýKéˆÄojn+îTÞrV)Kãͳü{~±5æ‰IO´0’õsž¿£úÍŒ£îrÖve”©Ú“%‘#4œ;gC>æY!s)ʹH4Åž%¹=žüþóÜÚá£hjÌÒíÝDZ"k3L3¶$£‰«ÑNÁÕò•‚ï­ˆUSñMÀ(:e1wˆbå¾5bsc¶E·|–1Xx n î9½0cäjkçX/®¬b9YX£ÅšïàFÍi±}xñªˆp2ú ZíHTE-Ç͵8ó×Ìoù1õ!Ï G¹0g¯§ûº¶<-NxåÏç}:„lIÖ ŽEcºíÈ&s°Xs…ôA$ù½‰ŒqV]6í“ß6ÛΪ3ô‹«okb.„YÑãØnCZÝS÷hÍåÕßõ9iMýèæXùàè{Ó#”+»Å=ÿ O£"”p¥RªñMêÀú„ÓG¥Ù4®s·AÃIÎÝêë·zÒ ¶[&ä›^Ð-ñpµzš^ó¬&ë±3c\ÑiìŸ'%m=ño‘D+¬Ek{Uí¤Z\³æ¼ýŠó¥]ˆ„ž³K-b4'0X·°ý—zÿ#”ÆëýŒëºá¬‰­S:Q¯Ÿ·ÌqË‹ Pàngðì ’"eS?)<äš%C2ÕM@GÖH-Ü]ôD„´Æ)מjZF!ë&g¥ˆßãNHÝ‘kÆN¸4ŽdRydÚ2Mº“Êæ‰…}YçíkËâ ¢1štÖmbé#M½pš ôGÕ£æ9L Ó¸^ä‰Ã˜iº€fñÔ‡G¾¿ðÇÈz%æ`læ¼G³L{?Ñïu·ÊŒ~ëdúÙ·–Ü›Z*£ C½ù}¯C˜åe0±#¡Ážü–OÌ\é¶²–LGùnKRÛMáz~9ei#åæ¶¡hÏŸ|sa£ë>Æ9Ý¡ƒýÕ¦š°ºFÇ–«Ö´ûêËõ` ×r6el:&có³Ð’ùeÇS …Õ×öóˆù‡@Ù%µý…†Ó±ÉÐiGÉæH­C bÒÀø†Ø/×V½¹ÇD»~"‘ÆJ]“ƒVMªÁ¡ë¥$Q& ¤Xs»Wc ?J#íO¹õŠYj1šÛ¯ÅûŽžÁM©:¾¨éÕ'½Œ©u+¼EÆw"&¦¥õLB¦°–sÓÜ š0ݰ>$–Ï+jÀôDkÖ¡·)Ù)O*É®ð©øZ¯‡Žb19Èä+C‘ôôº¬¢îÕëoDXïÜîF̽žGsVíß°¥  Ú}¦G¶ôüùÐù«jÙd«"ÒL^÷äWÎÚW¸í/.ZiØð¬!M£9ÞÛÎ…îŸäMd[Ö®@©»Ë&sb}AäpP9ÛŠßM,šIΕÌSs§KJ;wØù!\Ž#-Óý)%tiépüFTÀ'݃@f & %Ì^¿nõ×›Wµ.ï›rŸÒÎv>K]7µ›$e%: :”…fàÓSnÚô“ÌT§¥¿¬ƒQ}´˜i—ÖŽ L˱k«¥z]#7 êœñ™û{AÓ"º¬ éÙlû‚ôì8û1`î÷Ú—Ûä†ÞÓ >&ðØ~ôæÊ„Û¡ÔÛei*Pƒ’ƒZÌqÕ *E€y” úF(ÖÖÔAš>ï+¡„ufÈjÝ\µôi¡{[—¼ï ,—ÑŒk¿œêÍ;GS'»AGçÁ‘)] ¾ê'Ò¶W2Ôªìš'(žlºã- {w“f4Ë Çž$1_N ÷aèŒå*å®`ÂÆßXwíMaÔ4!†d8Šd“GZÎò 'Åmuž&ÈâG‘% 9N‹pµ6~jõR§Ñ•\žÎå‰Â˜J›h^å£S›ŽˆpäÓÞé&Sˆ•*ã>_#ñ¼Ò%Ӽタ¼ŠÐJM¼­é[ñþ@(“ÒÈL¤3ŠîÎMhæÖÞÆcăÓ;?’#ž&¾$óèO3üyäjí!ýòXŒÆPoðᡘ¿èÝ×C†[<ƒy¸–§g^!ùiŸlå3‹%ìPšù>Fèiß7Üì ~®bæÊ©»³°–>ogNwãëv§Œq<Öîj|ô©‚É+‚šO²•ëÌ=Uï v&c'ÚçêÅ€{œ]Kg<‘¯9’¬4×Þõ-h±9)>i³'ÒÌÚÀN/4þ5)Pp°üeßXQ—~Gb¹wØ”µÝì1•g•?Z©G…Qê'K~.YNöab>Ž#|XñˆÍ¤ºô᲎o7ñ9W……ª©bq× ØGÃV¸Év$uW?¶s‡qYþö›|uR™È‘ŸOõqø!‰›ïˆÒ»kÑ܈x‡~Ç?<ÖÙO+ê¯^„3íß¾ì¾ÁÉ-¢FÜãæðDæ“æ DB6I}±dNé«oÒ‰§ñáfm[62Êõ—D°˜¡¹fÿ2K—T‡zBLe/<Ɔc{òå Ù)Š!EaèÖaÿ:ÕÛ7Í[xVÏaXƒ{™ Õ[U,¯'Ð ý"´Ÿ’MÒ*¼hI^v7ež2uPgÛd!ì¾Uî•#«y×)ó¼ƒQz¹U6Ú7÷¤’â9¥‹/ñ¼^ÞÇ(K88ýÔç-¨sûÕAÉYav‚¾Þ^5õ`QnW†ƒ-eA·Úh»?ñG%.È]š¡—SÈÕ _â‹À9s½nß' À?=s(˜o¼@Ó⡲ôG¯e›¬iˆcK4“ª8H«!eg3‰ Æ»n.‹¨¾ÄÓiês»°ñÉ5Aì2¹¸×{Ö±õó¾]æ­Á—µS_•6«³ûSõÌâÕ¹ צ—\ÊøEùÏåÍÌ«X„g#|_s¬-ïÜ2¥1g Qºf^äë&O•¡Ž»—>Oí¬6ÍBß2ß×µüîê÷úȺÌí¢¦ŸXpÖÆ<Æ»Q»jØ$]’ÚšøY$k'?âßÉtWtymшÀPšî4=±=v|8ìZgq1~¿Îy¢.5ñžËÝm/ p´š”îUõÛxl³á: Y•¸E²êè»d ›´äª†¶1ã÷ŽÉΑkr0Føð ÀmýUÏ¢JÞðÙ»ä>Å•8œ0AC¨Ía,ˆ*›à}lÿUŠ0ý¾€SX&\Žš•”ÃTss#œò-=µ{ûª,^cR2ÒËÁ‚â©àÇè2í…yø;} 7t¿¬o¤Q¥„%æÙ€]Ú¶š0†TÅœ‹ U†™­ûx1)êvCF ÆMǘNñ2H'È»d«¥È™·K2‹N™NºS‚ŒªóM¥ÊI-gˆqˆ ®·óù"8hwàÁTgeù ¥”äO–¯Zí 7 Ò!•ªy¨·ÑB¨C´&‡¬æ™̸,l°Ç—†¥ÛwW"ã•mJ7éáuY*_„2 ×V#ïHò›%–#Ô- ’®¿µu~¥Ù1Ó_érb*s roûFæ@cËU\Ê?‘ ÷„§*ÇËÅ0<¥N#à­»#¾zŸ+úË„ƒ&žÅ1ê‚?PI‰ñó‰×Ì”Do³;ïMƒ7z°ñažþOÝ(Ã= Ÿ¼×iërwÙ°Ÿ²wz ÒÀ1Ax÷‹Ï·øÛ ÷Þ¾˜Q™äN½¼=h{ÆkSx‘ã·ííFڌ޸ÜÀŸC;ßõØ“J±H_¹µ§¸†§µ“‡a 4 äôŒå&ï»qºöÄùð*ÞéÊ;µÐºÌöÖ‘åü†£j³Õt“#ùcŠÎ­ÐYYsg©Íâ£2I/¨ˆZýeDñY„ˆ3/—Þ¼¼­¿QôíAók‰§d4ØäuK’|{•údp¤:4­º&–ç¸h.[²§”×áMÞ²@FâîQ´4Ùø=®3PK¿Š–ß0z/Ò$‡ús’ò8&¯Ež 5ýbAC—J³gŠZÈÉ9Óáœt«h³Á¤~‹ó³Ïµ¡¡…¤G¦.Vþì”F•ûaÐ|£Á[2‹ wMM–Óú¥åÆ-dú7Å3CæÔªS­Hî,ºD²÷‹QÆoKÓǪçÇ»Êì˜Ji¯u®¾K÷'Ff…niÒÞSðï‚ÕJÊß1%OI×<‘-/âkzbåk{ý¾û®2œë g›ï=¬«·ÅéPLAÊ–ÁNA ¢ÀÑc!ß7Üà;Hsê3t^9-'!±ªÀë Ø9)¨èX÷:³;×;,ÝúI}\òÕ¦ù¤ÓÔ¶Et‰öáÔiß v*µÍ•ô>7¦NÒ¶C,fß[Å•„Ç ½!Ü+E]”Ä׿èŦ³@mX¡Fu¤­±vOG˜>ć§bÄÛ«á\æ[Ä-aê#ÉݶG.¹gÌæx;Ç›¥7SK³²U¸ŸÅ)Õóq†|†\ÓK:™¢Í/Ëcñ‘:Q‘˜$õºÆÑHI®Ú{œËîwêžÙ?„d«zjµÚl™toîc~=pt>p)UDç,ç~óãÅQg4&H'÷žxPnkù1ï~þõƒŽäµDÂ!t:j8ç²tśΪ¹‰J;Ãt徯Aœ¦cP Æ´=}<‡6ÏO ³¿ßÜŒ~wÊÇÍ%Ëd1¦wªŠ{„oÌÆ®ÿÆM÷f̤´¥F¸îyÊÄÒûUXÈ+ƒZyánüÜ|³È2ù¨Î·Ä±Þ4ç<«¹V9"®ÃV^ÙéYÏ Õ^©ë½­'‰räz>©ÔδÔö¢Aº%¬–Þ‘óÓ1óÓÍ‚!QŠ_ÊDH½Ž^äKëŽ$]—ÀÙ’œ]Þ÷> ZWöÀWÍŽ żè^ Óú,!°”c–å(<êþ`‰¼÷“ 5 ©¼“¦¢ûÀGñnEÎŒ:×ö˜S7CíS™ŠéR%<¥äܵÓü«••ÉK.{˲0÷ z¾ÍÌxÞ» "ià"h{˜ë¾ýfÞ£-h©TŒ Áí£ ¥I>–o²ƒÈÞ9jͤ€úÓSÇŧ—dcX~­Uk²?of¬-½Ávˆ»Â£Ã1~9³0?YÂ.žyÖ$­àQÌŸ¸B⪥ÁtˆzÇ~1¢ÐóÆ?Lj£ÛÚ¬Ö;Y¿ùòݸ2›ºª¤ž y†@6ãg‘Ûã`»¡6¹BóoÃß `geØbÓl¾ÊõÑõþK Õ·jvL [̤8Årܼ˜eáÙ œO V¥‰3‘꺣‹˜bóÁs5Jwú²ñdóùvc2B7*ð6ψ HjÍ{ã—Þ€)¬ÜÆÜ;zÈÝByt…Þ^_ôƒ^N°A9H¤ˆ~šÙõøCȳòQXe.¡øKΕº!÷¾oÓñgíaAf+¬ï^œû²³‡»¯*hÑ(>Ñ;í º˜ú›XÊ2 i?»ã9ÂRϺc;`¬v™0Aç¹|{§{¨PŒà ±òÕޣב‰š–}ß@Š,Té_‡Œ« R¥õZÅ ÍZ•±[ó—fŒrr®*RG {¦˜‹5ª; ”‚&_Ðô&È;Û?.`³âÆà‚OÐ^„jêã »Yàâ3|0ÂVø‚]Md[¥SŒ>‘]ÛÝk$ÖàiíQ4/.ì[Ôµ[Ÿrkù¢¶bßW¾¢eÔ=©·¨¶%ÒÙî-‘YÕf×PŒ…0õ”Ôó`?êš¼ÇÚÊ̜ީc—å~YÕÊDH]5™·ó ÞTYœÈ‘¤Êª3ÉB©o#ô¡ŸN—QyÂä–ÙH]ô„^‰È÷iËøçûÖò[[\ñdÙ”>q…]òPÈ>¤¼ûãÍ÷>U—tDñ‹0%þFM™4€¢KÍ' Ça幃Þ`ø¡t«´û|ÁóýIÍ3_wåó^ãx:|»,°=¨s°ô²Çêîæ^³ÞµE…è]ÓŽ±Éµ ËVÂ3¢Ù'âõhgç¡ÃG‹Ì6LtÈvbõigo¢Uãn¤ œ*ôÞ¤;†ÃȾF¯zâGùç=h­"I×c2±©’…QØ–ÍÂôÈœÇ ŒÙð÷úŠã5îÇàÍçã6£NÛ[L–ÅŽ—:‰—ÞÛÇGoö çkarj.Ÿt"·Ô´MÞœc·qéTZ7†u»|ç³bï2KëêЗ;mËC^’ñúI|Ç>HãU•xÆÒŒ}ÃQÏ%ò󈔗ӾÇʨ-zc%•ßþæËÛ\+”KÍÛKa5í†Å2ý&É·¸Nå#ÌŸ­E<U®B}·­1T÷*/û©—5 >6#†pvŠ›wªÃ5ÃLŸËsúo˜}‹PŸ˜Æêp¶±;Wà5T?ox|ÿýÇâ8…‡» _ºâ#`£³#‡ãï§,õŒÄÂC¶'«GlGüa®Ô]%ô£Ð·²aûñä^ÝøÍ…òä—:Là#& fþé—ûúRcR[– c¾ÝÝÜGLÏ\üu+¬'êÅaø§¦þN„z¦oEk#Ìøz-ên„Ö;ØX ¢€H‰¸µDmú@¾ƒKºÍ¿cŒðÙó3‘¹ú‰(‘Rýç˜"ÒγqööÅKéÕXW$E˯öˈqœÌ‚¡>vÉqr¿ŸöçTX5zSò†FZ}²®ýÚÕ™ø endstream endobj 734 0 obj << /Length1 1406 /Length2 6162 /Length3 0 /Length 7128 /Filter /FlateDecode >> stream xÚx4\íÚ¶è½F¢×Aôè½÷AÆ c3:ÑkDÑ{DoQDI$z'B|“ä}Ï9ïùÿµ¾oÍZ{ösß×ÝžçºöÌÚì,úFü v[ˆ*ŽâJ”tŒ,„€ PD&`g7†¢`¿íì¦w$—ú„’;„BÛ”A(4PhzÀB"!1)!q)  Jþ D¸K”AžP;€Ž@‡ Ø•®>îPGºÎß·.07@HRRœïw8@ÁâƒàÊâ‚®ÁF0‚òùG ®Ž(”«”  ———È)€pwåæxAQŽCâî ±ü  rü5š;ÀØŠüã0BØ£¼@îÚƒ‚!p$:Änq «Œ4´z®ø°öà¯Í ý+Ý_Ñ¿AῃA`0ÂÅ÷ÂöP §ª-€òFñ@p»_@ ‰@ǃ$ØêŠB ¡°_3 þJƒÞf¸ÂÅG! ~õ§ u‡€Ñûî#ø×á:Ã^p¿¿WöP¸ý¯1ì<\MàP7ˆ†ò_´‰àß6 ”@Üo°£à¯Æ>®ßÎßfô ~®W€=z HÔ‚þ"ðC‚þ#VnHþi½O·ìù¸þ7àŸ¹thæB\ÿ&ú# (Œ¾ýŸéþ;äÿÇò_YþW¢ÿwGª0Øo?×Àÿã¹@a>!ÐÌõ@¡U ƒ@kþßP3Èéê@ì .ÿíÕ@ÐjP€; Í/t_xÿŠT…zCìô¡(°ãÖü±›üÒ ‡è#Ð_Otø_>´ÈÀÎè§MÍß.ZCÿ¬«#ì~‰MXT rwù Ï½ø ¡UiñþMf€ B‡Ð3ìî¿VH h‹Þ#4ÁÑö?&€ ê†AÀ¿ŽñãEÁîîhþfº£¿×¿åxCÀ ³°t˜Óë°ö‹z/þÏ£¸+«Ñ }Q¢(޹~ŽÚxYjSnŠíªî§ëÏ—ELÎúÓóì]Œy?êÎ ^NSÏCa¨ô­+ðç~?îv€0Ù!èÆÅÓ£×Éö I[b[r&›Í^…‹÷ˆl¾úRx݉Ü|(¹ pŸ‘²¤Ñ£ž)ävnc>µ`a[E Y<"#w·Ìð0Ö0¿Æ| ;Wl¥ýî³n—9´´ô.§¿/]ä¨@«·Z¬*‚‚–ÒW“%w8i€–*1G³ ‰Á¡(z¦T–šÀJ[äÁ±ŒõX|ùÇtA[ Gƒƒ®Rð½'#uÑY™Üžå#›lãï‚Dw›“¢ùjÒÙÙ«í0Ά2ö«E`y½ØÔLܺÎ7:Óˆ’Òs mÌÅÆX¼'¡"Ö_&î^<~–•($l•*“øôRQLÆä:lo¶xõ @AÇN¡¯¥Ëâ´ê1|Oàôe´Âœ9~òµù]ûPOä‚m‘j*8Á¼#kûíVb“†èÙ{2S1T­Ö¢Ë†;>7~:Ð0/[¿­SMú¡¼äük¼©I¾1Ùœ±ö&F†îm ©p… iRb ç½2ÆW‹•b#/dBšeR%‚€O>LÜR6؉'­]¿cÐóÇ:ÁÖý@PßZ+¯ó¡ãã]NMÔýhãvÂÕWE‹©àñÙå<ÅŸ&6¥OåÙ?ûwºyÒ°Ÿg®PõÒ5¸nór„±ãaCÆ›‰ÞÎÔMoõ†Ë3ì Û!5©Ö°"XEc¼h«ÒR?U´‰e?H»ý¤ß½gľñä;¡å¹ôý`Wë¯ ºû®?ÊÝ•ä$œóá’"ëU:A’~Ø„Q¦ÊD§äD ‰†áY¸†£}#ÁLNk‘º`Û’íis YÝ¥šëÁY/ÃEk-ƒ æ€/ø«(DU⇧¾ÈÇO‚æzbï|]µ{O¶7­ÌÜè•CtZp£,G4“XÄÏŒ˜ë«h_ ¯Û·Ü©j)C¨§úÑxOÑRnqvµ{Ðú·!ˆ.Î.Ít™ ³TRŽŠw3[â§1O~p¤¬gÀ˜Uo¨j“a: ½bR͵=,®à„)]XŠ‹>ôpá‡1xÚÏ ByíÇïæèlï2לÃäÀ<ËQ¬{UÖ†•_¬Ê]"6HßCK´Êõ§âX4îľž~ýcóî©!ÙOÔ´™tf×ÈaÆ€‡<×½rÏH Åô“9~þë§§ ‘Ϫ¥0¬ÔÎc oìJz¼Â)T’º™BiOÕštË¢éòÄO"¥Ö!ÊPSD]úÏÖÜ$¹žºf锜Z™á²|aýë%X+¾7¦fÑLîâx*¥Îaç(;ÐOËÛðåPçt8“S?³µ‡m*h\è[c–×ez-dQÛi ªû:sÏEB½$0Å ï ™èkÔÙûi•"é ÷F-ªÛóww<»ãÇ-ó[~Ì35k³ëåËogª‡F$“?XÖçŒÓ|9ü!Ð3q†¯Ÿ­žÕѤDGî¤n[n5Ù•g6LÜ“xŽF惾2`]$Y¾P7IÔú@$5Úøs„}k€ÎÇ 82´E;¬ž¨(>ýeŠ8üv˜aáe’¡ïKŠãcûo~‘ÖdÊŽOløef®)¦oÍ\¾é_ÈE Ûs*û,¯ÕØ ¼š~%of’H®…Ó‰»q†Ò~¹¥uußYO†f÷g…ü¬ ©ô#ŒoI¡òt™æ‹3æûLbq|7,ËEÜó˦±ù¯Óm!ÖslM±Ÿ¬È$`©ñMÈް°nÁ„µ5kî,ãÏoƒ@Dǘ«•{ u«ÔÁF¬ùÒñ_S¯<¬1Œ¢ D2ÅeÈ>xÂ?d¯ãWeÆ×Ž·³†Ož—QX âŽòøEMöÊçM§ñ>eÈ‚ߺ.ƒÆ\áƒÖë§?Íø•é–…`ì;²#¿—;È`´Ì­êR‡l|®4]Üí•eY|•›á#ÄÜ=²EåÃ’3IÅoô¢<{lJp ¿ÔI&¬±ôwY \Ïow'П·¸‹·wKÕ=LûÚÕ¿á9Ï$éLèCGÝ žäã*M§<8·Hv¢ÝÊ™:0 ³ª\ʶõUS’ceñ‡,y±|­M{6\d¨ÿ•íKS‹ÔMÇ{îÁŽ8•{ó_‹ì8+{?wÑó·4¾Æ¤ï°ÆD.tÑÇΤ!t¯~xE÷¶@›XbüÍÉÂ3ððqÃ8‚r³2&[[½è}«ÖÇ“ãÆ\îŒS<·\Þ¹` ŸÔ¾Ñ¶¢¼ì[6:#±×ùåëð€ä¦¸×ôœ'9ãµge(£ÒÁB;¹¥Zs*l ®P‹Ðð·çκf ovUç|U ¨Kûæ\÷¡oÅp—kqfÜZxžˆ©pu½ãÖ†;Fò æïŠ˜~·SvŸÖàs+UUX¾Ïs ÿäøEOfò}Þ' …yLoSTÀqï_/`%éôoÏ V1Ro£æÃ±®Ô!Y úJõßG)- ¾E=iMìˈÀ)A0òì¦KÆö»Ïh<ÍG8U›ìjQx;å· ÜæÃ½àµª™}}HØ«‘ SÖÞ7xˆ%|Þ¨ÏGœ´up>˜°èXÁ…ðï ^Çæ‰Çò¨ˆÞK·‹<,DÄ¥ùY)•˲ýÄR½íëÀ2ÅóÑŠ1ãóž_÷GðîhÑhâH"¾OËËÀaé™k5qˆÀlLÔó±žíZBmÓè''ïn®.\ˆ(a 1"+vÊÖâÇ me6¯ š  t®oÎú☆ððI˜¢>æ¡ñX S£¯¸¿0çïbŸÙ iå8WTŒÄ8-VàÓþ4åj¯W™Ý¢›â·Aefߨ}æïj¾n™7/¤+èAiøßv¾Àž¾Ýg™|¯1TùžÊû$W×jUžŠÒÓÚå Ï}w½i»1¸8üN!Ù–½d(O5ý޹Ôiç¦ì@{–Ïè²6£=æè3ª^É$P’“4/£U0ò6÷Ä¢B’CoÏV°¹VæÓFNß…‡Ç# Œ‹Ü·á{gãwêfŒÛSÈz3>h­knï}³V†–^[H!<ÿØ,ÜÃrH¹ly韑v÷»¨iضý¤IÌ–›~pÀùÕ”¿ÌMlúÿL¨ž¿~/îWd–äa S\ÀÆçdF^W… ¾¾n§ aQ2¥ÁñìÓ¤ý´ê†ôyÒ@o‚ª¥ôôƒ-ÃÀ‚4”aÎjk ¦+ƒ„Ð‘Ž¶‹X?èdcÖÅõhO3Q/_S»–|cs°¥0(R²f@õ­K‘Éôä Û¤JA+u‚“ ÁS+9@Å×ç~^8Õ6$¢"çEª{Ó]u÷Ÿ+f~ÝÈÞQ(­ _íp{=~0L¼òfyò~^ SdaÂÄžÐ+}û»ïoWóÍõ剬·ã0¼p/,±L\êö|ü‰°½¡öÇ3š“®@ïs5¶›<ú°¢­q€ü–±;#)M¥4Ç;UG3SÀ5µY‰!2w«ºíYhn1ó w” à nzá¾6”hå’_XxšåKnîïÕåÐpIÏ]z)kÎòÎ%r8$?£&6»a2URÿzñ\â½3ÍL"Ο‹]"P ÞVQiGŸ@qÿ>&J·¾èmLø5i³³‚†U$7ÎI`£QÁ—‹´x]È3\ÜÌøŽRë8ÆDÎ+°<ÉÚÝ+ަAÿ+c}…éçL“t»5ä7[ å¼)`⪠ÆùO|8]v2M¾Kº²Øtb–´/žnpëf«Õï¯âdÈcö•޾q²ª'‡‹˜ËjæûÊ-(ïÉè^„ßê°…1>ós£±µà’e]àùú´spÔ¹ÔGä±sñt­¾ÞC¯ìµÖraUDØAŸ@µm÷ÂO%‰j¨¨÷©Wðíj&™•éê¦#*çÌ×™ÍÙ™Íêþv5öؾ9ÿ²š´M Û,Mþhøø‡Èó³tWf˜Aõ‹dƒ/™Ñض«¥T‚®Ç·Ž_0'»uªNJ`ÛüœQ Kê‚oS¼Ç»)pÑŠóãð•~0Ó•‹ìr´n §®ßÎyyÈÉC}ífd| ~„z@?ë|$ˆ/W&ìBË;‹èb4j?DÖyë{ø%R#Û[Çk.ôsŸòò?¯*Ë7yš^«zjr¡ÏÚ¦5Á[Ñ>eÑ §Vp¥žáCíè鳴륜ñ$»É¹,4øba_îI?ž¡Úü¢0¯.UÿêŪ…:£­PrÃZ›ú€_³W耡µÅd-1Á 6ÕÒ÷iêÊ G¦tr®Gx>“é-”úËìª2m!=ýŠ‘¸g gùjZóúŽuOtë-›±5†l¶¢‚”ðŒ©}—§ìooÞ~0–{|ëñ}ô¯²ŠÐ¬&gûõêÛãÃÛ¸$!x‹JƒÈÖt…í @ÇMq‘ç¤[õGž«[]'ZÌürt¦—EäæâŸ•éY}—2£•¦$ódN'ÍÀ1_“Æ SdNº]bN/ ¿ª!-—Çb\¸Ó„¤ÞÁ:3±Úxš$3ióóÎu’hý›˜ ÷ ”¬LuÏz°­Vçk¢T½‚{m>Œ³ñ¢¯8õêøÖ£“óù¼Aí`ÌíÐ|ýdqŠóÌCÍWZËáþâñä3&é&nÖouÒ—RÓz<;†®N•žÔÉui†¶ &©²Š™Ôe7q1Ox?jL‡iY‡¦+&e¶ƒ‘ß–wC½šV«så,#^WbzKOsƒPÛâd¦kÃeu¼•dEM•Uo®ÅcêL!Y¯fËú}6?½MÆ3΋U½RswX3Á}K*:™Ëá_ßЃÿ$uI­|c^"7}‹(¿WÇóó — ª$t}@t8^?ÜͶ³ê3À1»®7ŸHåB,û2®êà¶¡e'ÍDB÷Ó½/ø?9C6ß¶ UQÌ¿‘`&9¤ø<Ë%5‰¯•; X§x˜yŸI+Ê!»¬ïkaOÙ& …|lŽqe `†tÆÊÞ¯åÿØ@+àSÁ»õ#刜ähâ€cŽ ë·’׳%m›¶tžŠ`Þ@•.^9ÂAÑâ(˜ä‰y‹¾ìÜá䶆ꦔ\*e>×ÈDo ÜOì$¬äbYô©BO\6ØÙìÒ¹¨ ¬sؼš3ôõc1u UÏ“’×sº$´vNsÄ"¤‘²„™÷èéÓ&Qœæ©vT’¼*⵺¸ø™v±~}VG±.-Ï#iïô’æ¶ÍÅQÙÑyÒ>µÀŒÀµH;ûÉì…p¥8ù–É’©òVÿ¹¸ªâîø['}ɵ£*Öìn‡dŘç±c} ú{q'ÒŠÖñzeÉ"ß»xïˆÔ…zÀÛ°ØšV4ú‰·nòlôp!?¿'`Î`{³ò8$€_’Ê@ðmÑg:HP®Ü|÷ÀàÖTMÃ-&ÒÇ ,«˜bÛƒ®Û×ßÚ¶*l¶„L^Œ¦õób“î zÊk,Çsj£h5ó–éɲë$j„,#B7Ì{â†FÌ<¢k´]Ÿì=Ò1U¥ŠÞŒñ:k|6“”µO (kN\¼m<AE6VÜ´æ;•G÷ú³–Ô9ÙK˜%È´¤šÖŽqÌÃŒ³ §ªãžGˆŠ;S­üL¾Çˆ§žôƒ¯Ò{ÌÿYôÞ-RÏ} ªE¶¾93ºëXr§å¡ØÄÝp ¾åIG#~³‡äñÄXcšw9›j·dJ7>zé~~^‚•KE³]艮èo„yõÚLD«cX´–E¢'†Y­?O~wpû) ¬µWéç’ve•ù9džÈvVCîÎ( o¯ÇÜÖû~¸ý˜|¿Ä5)ïy¥TCŒF)MëZ KÐ«æ¹ %^ÅÇ!£÷l¯ ~0M*iŸ'6S{gxÝþÔY̮ڼœÃAô„5lC%Yv4¿Qú16I¡çö æÅjcË]ð,®Õ~3†U-Ý„ÎéÙJn˜OÌÊÓ{FÊÃÎ ‘Úã¡ åkc;Öäò—¶¼›ÝzVó°jïOœb^Gëb毕H»”µ˜ôðh»#í³¹佬ì‹M3‡{,·ŸlÇ ©~ÿÆdM¢ âYy{`M/Ûsªš¡Qø–'!ïågãæåËaàÂ¥í½³ì[–Ù¾>ãI3lØ¡ÊÎ3¢év† ;¹úÂåýdp|Ìd»¢6d/«7}ä¿ôÝ´˜¬^âÿ~¥Ð«.=öK;xà£h+^cáðŽo=À‘/‹|¿ŸŠÏo—ý¡ÃccëFÏ(æÖŒÀsN½!*Ù"?€õÏhzÛ_ZϼJ¹Ë=“ÉïפßR£7{)LjXÚSOâýîë6>s”Aþ‰—¢ÃDâZûµÑu[n6ë\9,ÛöàÌWº¥6CÃgæ‘ÊN÷ðV´«{©³a“<®|„ãÍ ‘Ô XïP4ÊèüË[vÆà]®†Ë oÊYï 7xd¨@’D/xß.Ô KqÒáSÖ¶”œf|Ú´2xMwrPc#Ïsê;$ÐÒùâyÒb.­=a Ðò}¤K™¶yµ~N­²…Ç·1ž"“Ñ¡APpSòk‚L?JMÑ™,O6Ë EͽKf%é20k}ªw}:™xŸGÏ÷G«¸ùØ œRaÁqµòq~~œ"~gKf[œ<ÅânfýÙÅ»ƒ->QøÆŠjLª`ŽÜÕHLæ*‘)P¯+xC–“ê/>ŸÓ½¬tØö_WÕ—`J[P{b Äo¿Íq똱³ÝË =ÎòNΤËaÍ4ö÷/ed=ɼ†ˆÅFéKæ{yל¾sÔ*ûã~ì÷£ñîØ¨]åÈ"?~yþPÛS¶'ßCüîô›×ÓO‰±´ˆ_‚æI{i©0b}ÈC°;D«IÇá 7nAk^nmï4x)Å{ÃVùóã3ÖÍ„á/¢9r—ENÖä(ñÁ3«Úž’E?|³™s‡…Acg3¾þõ+U­ÓˆGKB!MS´Ž`™9~_¯@‘‰gKKVXƒÕ$ðD‡®Ý8ÓXžÑ0ûHîG1%R¦¯G Ì º)Yç€û3Ì/)ÈbL#ºmÅ(¿ÇÇ]Klš±tïVå‡áx†WŸ»Ó‡‰…„J†ï9fZ¬ž"/!8 —äk¼™DöKþeÒC×.UñÖ ýÌ…i‹év˜ q†ÎЋæm ‡Â”Ùï¯æÒ¦žc\½¼¤^éYˆ¸í+4ĤÆéŸòÖ>ÔtRYx9i" '6‰õ)ŠK¹üvø¢³Ík3»­gVÓ¥&+õiI®Fi+^˜¥¥Ã›õÒe‘…È'Óz[ Ù€¹W7Ô't(ÍÎmHXXþóØ‘Á¢Ï?£´âJ‹^4Ušn8j:Ò/Ý¥UçJóç)Îû±L˜%g7ȧƒyòŸH¿b8œ»õÎØØ$Ü:J“)Èr¬òÊéûÏÚO=g. ?ÆyîÕŽ ŽÒgfæÄJ‹ÆÄ-ÿhùÓÌ endstream endobj 736 0 obj << /Length1 2820 /Length2 20579 /Length3 0 /Length 22178 /Filter /FlateDecode >> stream xÚŒ÷PXÓ ãîî îîÜÝ!8 îNà’àîÁàÜÝ ,8 $p'»ûn²ßÿWÝ[TÁ<­O÷é>g ¡PÓd·t2Ê89º³p°² $•µ´8Øìì\¬ììœH44Z w{àÿäH4:@W7“£à’®@3w°LÊÌl¨ìäPð°pp8x9øÙÙœììÿ3trH™y‚,ʬ'G ¤“³+ÈÚÆœçô >æ¿Üâ@W…™#@ÙÌÝèÎhafÐt²Ý}þ‚^ØÆÝÝYÍËË‹ÕÌÁÕÉÕZ”àr·hÝ€®ž@KÀ¯’*fÀJcE¢hÙ€ÜþVh:Y¹{™¹`=Èèèvñp´ºÀÙšòJUg ã߯J0þi€ƒ•ãßpÿxÿ rüËÙÌÂÂÉÁÙÌÑäh °Ùª2J¬îÞîÌ3GË_†fönN`3O3½™9Øà/êfqu€¸Âês³p9»»±ºìÕÈö+ ¸ÍÒŽ–’N@Gw7¤_ü¤@®@ pß}Øþ9\;G'/G¿ÿ!+£¥Õ¯2,=œÙ´A.@y©lÀ"¤ß2k ;€‡Ÿ‹t½-lØ~%Ðòqþ¥äø%×àçìä °— YÁüÜÌ<wW`€ßŸŠÿ"$€%ÈÂ`´9"ýŽ­þÆàówy ÙÁãÇ`ÿõóï'#ð„Y:9Úûü6ÿëˆÙd$åÕÅU˜þ)ù_¥„„“7À…ÀÂÉÅàáâð ðþEÍ ô‹?<å­œ“wé„=ÿ™úÖƒðßX*Nà¹èùkvv ð/ŽÿÏÃþ—Ëÿ¿ÿåÿuÌÿ/#{û¿ôôüÿèÍ@ö>ÿX€çÖüÊNàMpü¿¦ºÀ¿Wh òpø¿Zyw3ð.ˆ;ZÛÿÛH› Èh©r·°ùk6þkÿÚ3{#PÍÉ ôëf°p°³ÿx¹,ìÀ·‡x$ÿRÁ»óߌҎN–¿–Œ“‡`æêjæƒÄž$N€x-Þ 1€ÕÑÉìW°rrEúu¤¼<6ñ_¢¿/€Mâ7â°IþFü6©ßHÀ&ý/âcOßoÄ`“ý8lr¿€Mþ7â°)üF`.Š¿˜‹Òoæ¢ü¹¨üF`.ªÿ"~0µßÌEý7sÑøÀ\4#0­ßÌEû7sÑùÀ\t#0½ßÌEÿ_$æbðýÌþE\`?3gð.ýºÿ'å34sÈÍîw³ÁÔÌÜÇ{šÿF`s3 ;7{37›¥œÜ¿Ä®ÀÕš»šYíVîˆyþÿ½©ÿF×añ/âg´p²é¿<¹I~×ókzÙ~Ân™¥“½ýŸÀðwP°ð?Iyé]<À·À¿QÀ¤ÁÓkoæðGpÁV¿£€-¬@ž„ý¥vòø3-ØÄúw°Þú×# üÓ\Îïæqƒ{bããltüÃ,ýÁämÿ€à£µû‚ûõ»^pcì-ño=¸»T¾­Ù~§âÇr/ÿï&€S;z8˜ÿºv­ÿ ~GØœ~“Çtú˃\¨óo58‡3ø±wüÏñssü#ýïéƒß6ðd‚õ?Lyÿ’œþVpcí=þ( ü…ˆÍåwpW]<œÜ–æ¿»~{þþ‡—À?Òÿáà‡øãœ8À­øŽìätýw4y~Ù=ÿ8<p7ðsú/opyÿg]8À¬~§?Tlî6®À?¦ Ü>w/§?À1<~Îù×7'7 '×?Ï<ž@0a¯?vÔûÎêóŸŸïoÎàH¾@׿üç °ðp û_¯4ø}øþëKè ´@ZYr² µýúéG8±ËÞ”È<Ížn:‹ßŠk§Ç| CmvȦë­xÊhÆú®4ýÍ«UòŸ~'mðíIêþO& ³{HË3xCÓE'â ƒ¤ˆ$,Z¯öýºøëÛA·Av+Ðä»xð£©bÿðõn¬X›_ÚS߯åUD~ª˜c‰ÓŽ}\º@S`ž³H@ çÎBŠÀˆuá¾ps;•7ýB®À„pÇUìg°Åùî~Ñw£J‹Ó­‡šÐ€€úkb–ÖOâ0Uÿ³_YIì¦Èç\vVˆÍ‰ArÿñnŠ3AC%y,|v{×٠ꀎ¶`½~Äì=MSgÆÎ'hŸ ˜¬¼¼dd U[KŒ÷G"ï"]™,•=ßëøøío¯ÀÜèŸÜ(žœ}œ6ô3´ÚADÚÁ]o‘Øúဣ Gr½Ïßã_d›UN]ï×o;}ê<ï½ï­Ù9T)ýÍ ¾(%»(³™f4ᦛû5b­@‡9âë^ÃQÂUí5V—Ëýg ƒt~ÅG_//’&ûäéys¬r[‹„3Ü*(´Œhæ$¾¼¢¥Ñ ÅzÁT¯Ö,k^ÍvÈœBN*GÜõšTE›'ÜÇ}¸xw‹û.ÀÆÙΪ%RŰ:›OâitìªV¦OÌZ#C±¼Á(j2^Xs^-¤µçý}U±ÈMÅŽáIÒŠQÕ›ô ƒù^ƒeŸ1ï‘ÚØõÃÁº´R† óGY´XM{í‹B”$aj÷] ›Ýý³f7K¶¬&?§âòWÇåÈ›6÷㌠y½Wn™gôvh]ÄÛׯIÙ=]GeuÝîŠw¶òc—êñç}Uyw”#dtÌVÛeã?=Ãú£TCæËhâ´C¶ý­ñ:­îz~ÌÆ°YKáÅO™¢óJҜƴnâÕÅŒQ®xÅ7òxáÅ|¯ð´øÄוUÕТY…ÞmÄÇÊ1Âõês…>&þÈÅÙ·Ô×»‘þìQIþéÏp‡óZ¼„ü§’í‚hMÞSy>Ÿ³zg7»¤\ÆÂ"÷…‡á)ª—~gjfî^ç'C÷™¹Ñ±ÔÕ±Ùb6×Ñ­æÙÛÏŒ+¤PÔAH–CŦÑÔµ0”°¬(Á` ÊüËr†wåþÚ³çCå'±Vøp÷•ØRMEî?0,ÓúJóEª²²y&¿ d"n.úfË×Kszõ’†·ƒ=‚É@99®Å1ãI¤½>#sT߯‘ì.=2ײQø u¶0Ÿƒ°ÿÃGc ±T–œ”œ«¾¼PxãlŠÇX(Fk¯»Ξn¶’ü¼V®îW•;¯ëø|×Ì|g9HŽ¢ZX·2.¾ÇH{‡èÓµTÜóDÊXŠ8Úvqît.Â-YàÆ{q Ä=ý˜8ä 2Ï“7ŠÈŽîõiý(ønâ+ªÕRAùúqLÒÞñeÉc™•õ)M·sÁ£0è’\•ŒžÎ¯üýâÇq4¯ÊgÍ}M`¿ÔËåø,ñNçôTÏ~ÙLuÄb™Ó|\{¶1ÌÛÞ´o%ypÈ'+/t)ñÕáhª~³2éQýfÛYº#Á?¦…x6²‹ÔÄF˜òu>ùnŒ}H̲À# 0å2ÖBCÊSóD¢%ª«Ûí=®J0ºÓÐȪ,–„1®åù)@u-~¶Í$6,qB}°>Ìpü*ñ£`)½.Ý>3tijĠl !‹kâ„VAxÊ"ž>(=T‚Ù.ºì€#pªRš2Ëã²cEë¡Üô\sÖØ” ¢‘>¥zžÎ!ãY‘]qg•N43[zKM…YPùÐ/Z“K–Síïë¼-1–‹Ec<½8º µÃ›@Àj!јҞ’ø…Ò( ²Jž‚& »½åY°=w¤Ÿ¸½MxÈ"÷Þ篴?Eg0_ç–ZîØóЙ›o¸0§ÊݲT“êù·UTï d¯`á]<&ÉZ†ë—”“¡º®{­,Ù ¡XáÎÞ0t¦bm·w¡uqœŒ7!q|ûà„¤qJŸzî'N4㦼Kj*ÀDÉm ÄðÇºÊÆ‚À*3ž[-¥\åèöÌS†Ô{Z·§ÐùþÖŽGäxˆ6K¿àD¶âõ=|Ü¿Œ 'ÜS²6F è»+Sÿ%îÈTæí޼*EOå³ïPÁpÿiVþâÙî¦LiSNÇ+ÇÉ5Õ¨Ao}qL÷)üŸ«Ík&-´‘ãaàXÝåIl\>?G’1²Cç»| j¯ª=UÁÖFä"y¿Å‡>$ êÞlÈåwÁãÊý½Íyhùùq™~3E7ÄEJi°óÓ;¿õ3Ó8I#–^ÉÄþŸCQe^|ÙZ²åèº ¨C£V 2–•§ŠøãŠ¶Þ½2À˜ˆ|Y„ Ì·éW«äü³ÿN‡kûÐnlëmèi†–SÑ“¤c·h‹Á‹ëH_‡+~¯¶Á‹€tEÞÒ‚lͶG·Àªè–©¡K×$[HÑö›#4ïÔ÷šaþÙV䟫Äzô.Y=F$¼­dÍ¥ŸX½t…Ã2œ˜{ñ‹%”ìì›üବ­Ÿ˜!íü+i?Í )˜1~X ¾"íö¤Zo=åÓ>µ8 œìo†¯„ k‰plUAŸÉ˜âˆÍ<(Ñý2Tù _¶ò¢³ŽRž®âÇ$ð²ŠÎ͇ã#‹N?Û÷¼¹‰ZŒÚ×MYí;¶ƒæ¤Úg’ì_eaðLâ+Q´ÿöU‹A8ùF×ýÖ+³@ïÔ=bs±øQÊ)ÜÈ—Qxýž°óoÙKøQGZ%Öö0Ø+qÚ?eŽjÅ(± úWaÇœ§lb—{ó§zË.õ¡øƒ¦“| ¾t)…‹5=@%á? ’)ÆÕÜ<è¾ÐLè%‡ÞÀP/Gâ› 8ï6Ê[fJL‘-)hÐCò²h1žqSdÇÍúèC˜Ò)7ý¤‡F®F¨=SÆ®T§²JÒ¢´"‰¥„Þ¥=ë•Ò&jt HŸ •q*‡@ð \ŠÙ0ðÓNà²I˜aX½½MM¢ÀoglºpÇhQŒÖc‡ôíäØ¤æ¥Æm x ÖÞä°Ýíðñü¤îâ®BÖ56Ê•ö˜=§ ´<ÔÚ7®D.H›¤ÇËèw5ÇÆ'ÙY“ºkßq|a@¶|Ä‹yKõ}LnR¨#HÍ«s´é² O²û9åé0¥]š9™rD,+')øv×\"ozjäé3¿ÿúšìtî—ó×Bír(HŽCÛpœ‘›µÞäzSp8ùb‚[¸Û˜m©{xîTdý[xb4m³w)Ö¡ÑšÝ@CßÌ<à$DX`lÓ†!íAêÚ–å! !tàT5”×óÆ×£(þ•ù[ĘADw£ÅІ©ë­kÏ *šüé1Ö{Â÷«m&¢˜Á¨šÇš–°×{úÔßÂLŠúªof> ÂFã}ëNÁ4Bþ¡e4##_£eç}‘ekmž+—d‰ÀJ/ˆÔ»s^™MÂ;•FSäìÒ]q-ŠX%j|äëͼêgœ8iaäšµÃëTÓÞÔvS0ò¥Ê].Ik]òçôg@ŠªÐŒËN°ÿ=5ŽOk‹D¤“’+jŸˆUOs5@æÇ`ãÍ[š{Æ4¬‡ŠwK·B¼,IH_‹æŽÌÒÇÙ7“Ë}­¹@À1g é‚e% dô®‘¹›/]÷ˆàÞ´™®xcE†(7ÒO¨M2­«‡ê$¹H\Hþ2ýí<ÇVì™i¿§z–`ôO?rÝ_æÔžN“Ýp K¼Rø?Ìk¬m³â¿ö3õØx1Ä$&o*½¦9jãê|ÿÆ×÷zÑÕ1$\E¼éø9fú*ãg¾Lµ]ÕG䨫.UÛî´N¢šÍÕ}¦Fx] ÑâŒ[¹ò¢NZ CÅôÔï½[ð —ú:—ãYü§=½?á,©”8ðİ•Gİ)³ÌK'Ô{ÑHλڬ,Zfæó\;k‘…­íßħ%ðè×*N‹kî]X"½Š, 2çY”sÛ y¼YÇ:f»Úi™°Ó!ÙðØ·þ˜ü³ féF·}ÊLòÞ«ûÚnUùÍ6>¬i6¿xc_K×IoT+â‚Î ò,>…Í٥ˡŸç{î5sÊwéòˆˆ}ýÛNÌ›Šç-ìÔÌÞ C,#±Ô÷õÿ(™ô%Þ•Ÿ¯¦EÕzÛ£QA=Ï\LRvÊ–(QtºL+ÇßÛ1ü¤Œè¥}—}ʶ¼:Àœ½*‰Ð7Ýlc.é3Ź\+'1¶ä¼i'îñ]oþ⬽/9ó*Î4_l£¡¡–;…+¤½Óí¥íÆmó×5 ¿=ž‘SB}µ1Åg©Úÿa,ÔE7&Ü,ኰv½?WÐ ŸÞ“Œ‘RYxŽ,ÝçèóŽ­€ŠükØô!ž8›Å t–×IÑ÷_•ÈÌp{™k­UéøqGŸF*ªk(ð‰¤Âé„HŸÃ8ð»áÙct„ßÍ †ö$eóU·|÷”SæAZs¯R)Õ‰“½œ§l³p“mô8î„ènÊf`K\Ð…§éÏ¿>ôòÈö ‡ù1LâͦŒ‘‰ÉM-Ó˜ì+µ(ýÈ@¼u&ž®:ªkx…áñVp©y!6o7­Ù2¼; êTfφæµ9Å®¬%¿á¨WâP9#èËÃ+†ÜF2wÍ߉§Ÿk¨Mëلïtµ ÷’ŠâQ·NL#ݧT#Õ†2í'Þßjù1¾f×Bž$£‘XÝËWÉGù(ËžœæLørö¬tј¬×Xºúå^*ÙLnOÔ,Ëõ÷ç¤ÅW„÷–]i½Éžµ<8 PÇíÙ<@Ü)+ ¦ 5Ô‹[åš^?ésæÂŒƒCLPæštu­Òñ€Q¶œµfR_]}D €êf¤¾»ôâÇ8icéÞA]OÇz…ýÚÍGâûŒ]ÀÈ]ÙU¨&/Þ}ôþ°è[o7d‚„¾–5F: Ü*\}žV–YúTdHd^å4”nÖ‚u^IÇÂó…^‰ “{2G'ƒøšßfÙó]‹·Ÿëò*Ë|ÕÕÇËÓ4?kìY2’Ø«œá/¿7Ƕ(Çòêô0,…& aß$à*6évèf;Ü T¿¼nð°ºÞ)Dº¤“GT)ìØÅv±­¸Ì`@{w’9ÿ‘)·¹@kx–tƵp§£œ—Vn&YR`ÉÁÖ¿ŸÏõ#ÖwÙ{Áˆ+×çfá/ô•Ö²Æ} oj½ÕŽàŒƒw¾,â÷né?è‡I'QþhM¦Æ³já#K[ÍÜ ÀlKÔÿêtyÀõ”M·Ã¤ôç»y“çýC@¦+q n, ‚ã4qžž ÚE°@PqÇ$$M éðYì»M~UòB²0ðoîÅ¥–1œ%E^¼Ež£¼ƒxü¸Õ5$DÄå/žà+³­Ï}« ¿¬I"7–®°]š{Äðæ‡&»ÔܰSU¬ÿrP7OÃ+b³mXºšçƒe®îžÐb<ï·8¨d=(º×–чŠ÷×nœ±„~êâ ^D Çîðz[ïpA\±X\PZY.< æþdoN…8{øÍÅ‚ó2ˆŠ•ôTyÙ0è Lɧ.;¡»ÊÈÚ!q/ù­cå!©od™S^&”M}dK²ñÇÄ,×a¿|OÍ|áÛVD¦à—ë|g9ʺŽåtC6×´è鉤ت)6Én \AúéJÙ8×Ij{é<UX/ÒÒ ¨ˆjüfx«%ˆ ‘­kKØA¶Í3ÎÇš]@´´‘’Œã¨äìu5pªJ¾EÓ sTB^«%vqÁó kxØT@ލÑaçiOí_ º;ewq¾èDR÷†˜uuÚ•{PlÈðô½<È|{Œ\¹ä~oZ6<,7¿Ko«Ô¡«5ó¾À%CécÜžÄC.€ìx£¼')y]U“|Ã>GéšIì–5¥)Y³%Ò7ç3†òh¸ð¸`,LÁRÂA]Ç£”üESžEôo1YþG„%U6–‚À7Ú ù÷ÐaTõ€éAëw›ÍŒ˜LeÕ¸ë2ºŽ–áÊÓúæjÐ-!Õž™b&ÖÊv<NN8_IÊòÞÎYå‡C¿Áß<“í]xZn:™ŒdÎÃȯJßµ¶5‚’æÇnƒNÏ[65‹Ta3u†+E?˜Ú9âäA—=¸#Ò³¼Úõ’,Ù„02såÝ]Ô»A Õme†ú$ ¡Šw¥~¥oZv`ª`"Q»EfSºàry„ÍB!4Êz5=LÜÍ8Э¤|W5|~eÞ\¢¬H˜fæg%¿ï8«êÔJìµhMzŕػ矠ÑåB*†yQI÷P޾©ù°ä$¿¤óz~Í´¤e=gh²iÐdrjNRóá9™§¨¶ŒN…ß ]9’žIZÐ3)zŒ2ºu¾â¼Õ¸oyÉkz^¯z€­Í£ƒÞQ´°­à* ±âDRIlä’”ŒRÅó¤Äié^ˆ0Kœ'ñÃyxPïˆn¾¥ PÚwôÈ) $(æ^ËÓ1œØbb-4 3?.£v¿­Œç8fm]žïµ˜}ªõûZ),œåyz·Þº‰7á»t!ü€< q™:2óaB`Âî AS0e¶yˆ{sÆX:µÏÑLÅRÎ)ÀH7• oinAôÃÆ.;t.æM ¹Z‘Db‹.#©äèPV´jî±fpâ {ÃQТÙ{üö©¥žv¸=ÍÐzž©”;–¾¨„…!¼–Þ,FüVyÉš÷~#máâÑ雃 _ák]Uèe‰Ó±xwÉq>½/íòlšcJýT¹ûHNFç¥Ô‡Š ¹ÇŒõÑ–2åB׳ÁGyÊÜÊ3«­èž„–y1\¾&ü-Æló'Yë°³\Ú¤rµïÖFZy,‚ÌŒ—“¢÷ zôñ´üC_ÁÃ@&õñƒè̬QcÁ¼½gÚõÊ“eì¼!tˆ;f»ï¬×W¡Y‹bÔÚ#=MþS,¿œ´Åý*n;\·¶ :jW¦,÷ÌŸû| ¡ ›´1Jºê ¨»J|I Õ Ö·A-Á៿'L&4S²Fö|z±DbHgýdÜAB¯ÃW» ä#©½±%rÈJ‡F© h¢+éÆájóÆ 6t|ûZ ó-*ŸðÄ1~Ã8í}T0Ï8MÙ¯_@:i°g–j‚vCb×]xU—ê¤A×m ‘+1 #xÿÑ´ŠøÏÙ7çïFe:zì^fg'¸\#iæÙý€_ÜÄ®0›öÞH©Ë¶ä·åZ&é|ªS¥ÿ£d49æõã-F c19K²ãTÏÏ÷Ì zåØpXObµ²*J*Œ†Áoé­P¾ÓÈ* #Ïô2iŸR´­ÐI§ HéJ”ôD*¢£NÞe°/eu™BÞÕhž´@¹öñ[ŸàÍ å»hÍ^Ôf©ÌëÈ+àkžU¹šÊ?WXlpâÄX]wÚWU+ÎUGksÖ³ó&‰ ¹÷9T’ â¨.å˜7V´j‚f€ƒÑžBZtþ÷ÍÝžÂ<áRjü¡„‘G?kiÓVá“Ûj“* D9“¾=êÖ C ?RAdf3I~XWö_lXQݨÑ‹\‡Íé Œ?Ê‘\†c]_÷wÏåb´rXó°¡U =ĈùuÅóú”*m·‚™¼˜{è»v¦µ™¼²»»ÃóÒôQE•§3!A\ ämf¬°‡Û.9Ô¤M§²d4W>r@k¦ >Äžµ ·êÕv| Ó¨ÃŬoCÑŽZ±æ öž2T¥Ä‘Kçy3=ï:(S¾bÞG‹â"g)ËA"ÅHí&ŸÉ~å+±e`!ÎÕX¡f‰C‡úõ~w9Çѧ$åJž C ™ý*=Nïb_Üé~9¬f 6uGvã^Óà½!ªFðË:Ò:þ.^ŃgÚ_„®@üQ´ªœ.Cã¥çY½i¬<ÌeWùKCY¹nóW#6>­ ·úÎ3‹JÉ.46A3Až!špnÌLûV@©ø\¸ÉWfR¡ŸÙ>Üy ²Oæ%QúÍf z[2dnyT¿&L¸KóÏ­Üú¼.t²´²âæÎ9êZ'¥‚3ë!fu&˜ŸòIomÇída‘ÆyfP‰ïYË -8²«`ÁQˆÜê«ø4QŸ7;}Vniô·6ÛæºO<ã£sCÝRªGÚ™$ ¶.Û¡.„[ìŸMB™<ÓÕæFW˜ß9>Q©?¬ŸPÝzÉJ“Œ$伤ƒ&XŸáÂc ýjnd©‰(WŒåß]+ ‘—Øi¿vjg/0áâV…”|Hú„õuÞc2è«ÑøQô&Î…ÆÝ@&£@ l,÷ˆÇ”Ë¢¡܆GÝG»XV»ÒÎ%™õº¤ä¤/_‘˜µÄløX™Ê|?’³blÞ'Ÿ®m~©G¥?h"héæ=Í¥ ·_Ȯފ>¥_œƒ€jV•·q9€œ½óà·;1U_Rc™¯©e2l&.a¥[lJºãŸ©TZã -ªÁV&ï$šó[­4ZˆaE^RÀ‹óéè´}e¦¦ïôë9Ÿ 2æ}£=NûVïç%]¥Ý…¸œIK×ùþ(×ï¶<ÍÖt)G&›ŽŠ„Ò žñ=Å"y’Tœ¥Ö®~Á0,9Úéü10"'éüÀ•ØE€èleÃë 8>6Û©í=ùΜ¹ze¼#íëš²¾5ªÂ£ÙtØgݯÜ}e}ï 3"K0.²ßx~þ4ìêŒÝ\ë'<ÛÖ S¤íŠ4ÅŒ9¾ìdUxH5€‚2yÒþ33RÎíŠ;×¶Â!¹v'Éì@úµR©fh»œ½œ» …œa&çþ§Qr|~W ¨uç,TŽ/wEœªÀ§óŽgôu*©7¡--; ÐJ‘ kWtË Š¬›î{GzqƒÉ¢ýp#RÕF\-1J5$ªTv2…38Í·µ3!ßD‚ý„«e,Ï„Q¢W Ua¸ÑùÞîLÇjIÅí,¢fÑ ð¼V{—Š!"}EåöjT\Û^]T¡©æ 3"—É…ŠÊ“^ÍáÑër.•²uç3íÉ:¼÷•ù8è±NV¿?†°w™ŠèGÛexKuü´AëRûƒú°á•é´{Tûx/´ Ib rddwi1)!Fµ(r‚Xb3ÂÚÞ¹ôÛÍìã›\i¢ÅBÁl¢#4ˆ ·ñ{zë¹”p+ÎÆ G¨+ alš¿O[uCb«*fÊÍ,uã¶®¾±èg4¾tO);Ø‹oæh¾›}B/¿KµNià Ÿ1]Д#@v‘bÔÙ¹æÙlrî}Ïh£Â[¢^nˆo®~Zžte~ hE¥àdFÐ ™~Þî{_uûìò«0»=N„sõâˆîÉqCl¾Î‡2™1mD“ß;4¿É³^dXZ°7%³ãæ§Ã¸:Õ §ö”Z÷Þ45ÓS±ˆ Ãü]@È#’’Ö½·½Ø[…¡ðÄOɦ¢xñ˜q«*ú„ .s˜€'Ñ/õ½Ç: Š€Ö¾»`ø 4Yç·=ͳÕ>ŸZƒ>´Ô:4ò4<ººg¼ˆbk+æ5ÒaåWÃ)5öØ1ÜãµXÔß™ÐT¸rÄ*ïNU2¥5Ãâù" Ûĵ]c³â -µâUÛ>åM =u Í <Îo AÛu³Õ监’ïÿйáÓ»“c-Js¦ÇWQì<†õ¹AÁÖ.j½½*@JZ*t²”§RgAšRh^‡{)ë&™Û÷VQôøéšEùg.N#†& ¤—Š)ö•P¹öJvIbªÑ\µy¹‰ˆmïnQú^k‰›j ¸$ex¨S 14¬«ë˜ÿuäâR‡ŠˆN{ÒÔZX¡J” Žuï\¯¶çi·–n×0’øhWVÙPÆ# J¥Y”g‚¦)mkÁãûÖœ»"73Gð}€¥Ž¤²ïU'_Y‰‚9–œN³²pÌкiú4—}ª ‡q¢yï+R%·!“]ÃRR—úVöc4~£oƒ”2×kæ”øïš¾m÷¦ÙÏ\¥Á Š#åõ;WÚyùWÊÐm­:’ʤÂè3ðßîg›Þ*Ò ÷ëÝÁªVgò{Oß\7Ò¡Dü%_c4Zä8!·1SŽ7·O…3æ†âãM43{9×…oyöÝlÀp ¸ª¡E”É`Hii̦bGa“±·_ |˜”=k‰„Ëh¹ çLˆ—hž€ ;(¯ªt^Ù.f;QžHLÖ}¦ ø!f~¾I-ÌiÝÝ7T¢Ô‘ÉïÒ’iÞSŸ¥H^½Ý¬—ÉLItAŽ5„ⲕ!xqæMÖX‡*RñÎyŸoô«2%fgà’è~P1kè9¯Î`TŽ—Ð®£·j™<¥gJG£Fv´ÕPfNg«î®7Z2ðÜŸí3dŠ$ˆÜ1ù.“éÐ.ªž \újiQ¬ÁØFæ^½! ¤ŠúQÂ'h1Ò>×Ôˆ'‹4 “2Bß™YÀì‹TR3€¦¶©P z*Z ïŦ†½ýrìÕs&­³YÑ'Ú‰T äÅ—åãÒ"ò«6Äv»±°¨5§G®í®£ÓÒÁÙ‰¼AÛËõRze«ï<Üøk鵋Ûs[桵˜4ÊIÜkU‘¤ôÌÝ0f½ô§ì¥G¶oJÈŒ‹øë»C_HDZœ¥xÎ4ûS†íD§oóxæÉOʱ#,oäi`}›ýea3¼•¾Ú$¡Çm´íLóg[säešPÌíœ8¿¦È²Z Qa¢ˆEc_%lBÌ1‹²N-î™Ê{ P6âtzþeì¶Y@Ä9ÎOŽ'S(è{({L>êä¯ZÒîœãC¯ïÖQ<ˆ°>öÎö*¶|Ì çÅP¨{À×(eŒMédg »}“¨Š ¶KAøö²“†&+9ZÈYóÙ^¦…ý±ÁB?J´·[µVÁ»Jtò ÏÜiHv†^¹-#Î n\´L‹k 3c è»u>aÔ»ŸÔ®õ('/A?T‚ay}ºHŠuTê •#°Z<àÄNA‚¤^sòÔ@†] ÖÊ4•5D,bT³íûìRÌi£ø¡§ÍÑÍ–´àœü#€Ã_¨5‹ï¢=°Â| ŸŠb%¯°RäCv¸[Sk@«‚«‹h±“`×þ¦×¤^‰q†–cp¨Ìçæ™Å]XP`ˆ5éO súTëQ¦^`scÞ(þ'¬¬eCkÛú6ŽØœI¦~|´µv÷…å×ÇCÐÊGuÊ3KròþÒDʾ–òŸÕ#uç¿s1'ØXèîk±«}Ä÷º'º2S%tŒNeÂC†0ÎmUËïºL`‡N3â­¸¥eâ–uv¶Kw‘Í(|ûByP4ÂíGöXÌæt¥;÷í%tq½QšL wÙ!HŠ?ìým¨.œÕ×ð«uL?Ï–¤nB'匤!úÊBHäj†ø¨#®æ©LŠÖ¦'bq²/mwOà Š‰6Ïsƒ`"ˆÖmãUþ›Å%n~jɺ´Þ›½qäqÔç\, ¿;ˆ9>Ûn¾/“û„ñvÔ!g1&]ÿdmd¶ÜÃt1Œy 7ŠJ¹–¤6êz‡½@\I{™6ñoøÀdÐA:˜{Òð®“XÞ´¤þÔ+âI–:o¡ Æ(<@Oˆúîô„9\læÞ”šgãÚ`ÇÀ·ˆë¦ç¤…Õ&<\ä¥CŒðŽÖ¦Ó¤Ø­E $†Œ®B†Þ÷ž`º;Þ@.K>’ÀþÙCfTݹ3FÐ)T³¶ç„Åoù‚7Ÿ~75Àç ®l²áÍíJá†ÄO‹>ƒ– %62ßj·feJÃê‘>úeG Lèû§¸i½¢Ç ù†¡9_^ø,{.fÄ`T+ëñÈ{CV€í˜™ÍÏ/â =+žXF¼Q˜ÙWÏ/™×“UÔ‹=Xwš†®D¸¸UJ±I¤®Ž@ ùÕÁöEyP2¯ÂWåÆ?ŸéuºsyLº}<,V 7$y¦‚ýÀMèXqõ0ü×P]lÅ…¯¤ã¡œ‰@2·»=§ñj–¤Ÿð‹ Lõ;W"ß/½8·¥úÐmÔ}FÃL97t>:"AåxC9Ù@ó!Œ*<^F`|vj%u%ôNÉàF&aóŽ_p¤ò¹øF¾§Bô½šÒåE  ì`ŽU±W-S¤ùa Ùá\ Ï °Éë™~:ßÕÆ¯†Ñšô3^öìe~~üÎ^/ꙡùŠ<éÁhˆÉ.£…¬ÙFcµ­Àœ‘r4àøU¬ê3FI94GÍ€(¦ÿžŸÉ±´hë›Zù°e‘mºéUëô®Q‚Þô5[þÇì}FT¦!«ù* Š RH9¢ÈB4&U¾ÊíÐÔý®/|è}βW¥=ÕŠÞA» 3!¨NiÌ%¸Å³¼ÈmïP2%ó–ÜÏeQ%n œ µWœ¼†bmq-îSB¹‹×þÍw—–8ð˲âýÄÁ¸w¸0¢³Å›pr:eÈ¡? . yÝ™õ4¤Ÿ‚_žnͯä2vŒ“ß^S‘ëú ºrŒ:V¥}çmô-Ì+íïüœU©W«{¹øm;FM­è£¦¸Rý¤_ýÊ\|4eÜ¢`u_^íûOç”XfÚ%©íØ#ÅPåeçpnÏZ=ZyÅM_¼Í¹ü šKB‚Ü¥üà*$\+Ñq‡&ÊM¶¢¿ì%»TÖ[ÛöǬÚàzä[Y0ËÁ &ál[AP« [°wŒbåì›S·çÕGÇO‘-º’‚þ°úÖ“Î&®_]ŸŒ´ óE‘¥HïV£Bƒ›5÷ƒØÂ÷]_\5gܬƒM‚g¸÷ù•¦Í(ãöDZµ›5ô´uÊíí f ã›¿¹ï[lÓ4¯5i¥Ýk­½2δíÖŸ³õ¡Ã§¶ƒã°^sú-( µuS¶þ€µºÀIbÄߘf'Ì~'§žŸ„§ó5£® ö]—Õ]ßü2Q }f!´ÔîZ cjßj5¶O"ýŽÛK?Êô¶Ü1€>íØN=·ÕN–ßG”S‰9âoÍ(œ=¤Ú {w¡ñ^|Ý›ÒÒqÞÑÏY®õ‰ <-Ç¡ˆâ†ù{OïøP y²à‡} ‚iMÇ ˜Ï«£üpËÔ?1©ØÛ)ÒॠO¨”¹w›†lÕÏ,Ò• %Ÿgʨ=¼¨m¸É☤v¹¨>…©Œ~3U¾¶Îz,<õÊØÕ"´].GÞ šsâÌ¢Sß·áá›Q¸kd ò¦)fâX¨Xª®ƒÌÛd*L€_ɆŸ=SñJ9N뾈WÙkR Â[%ÙïbèÛòZxäù¶-ZÚÕá¶°ïæ5ZTêêu»*ž\Ÿ™û[ói\ëRŠ+ÍpTÚ¶¹¥¤”µH#§¨ãPxí)2ü´}ËL`£p lÒ=­˜Ç÷q+}W ‰“áÝö ˆ:ìæA•b¹wlp´"ÖÁõ¬·L«µýEÐa}z¸£è¨âógßÛLÈ“§hª×"•ºŽUóLþœÃF¯Ð+ø_7ÐSíK£7íÑzPúùËgÜ3†*ñ]&ç^BsÄðu¦ŽZ>…z~ôj£wX‰±t ü>™j-ÆN1DW·BØ_Ö8à~1•Dˆä}IɇÄT‹¸Â>M:äX7¨*ö‘(ÝÎ`|ô”æÄ(_'~ÒüB…J;™ÝîG~ÕSŠsÝäÑ$\åg¸.J†œòuS”{ÇÈ‚N†¸œ=ZŸ~'Ž· xÃFʘM&;YÁ×UèZƒ¿Ô›0ÕšÉøÕ•î(î-‡Un͈-Á×ôÖ’ƒvç}p^¸?­°µñì=Ü›ÞUXMEë·š×ÄoÎÇ­xéÆP5 S®¿½^ÕÓáDóÿ&)òšOF50$ìþ‡M:K¡fÝ—£‰äBsIEeÏ ÖÒe —àHâ>gË YJØÐsùâÆ¢½gQ¡±y{t_2ñ©S+>¿ãä„EX (òU‰AEù;«í/h)†o„žg¶vYäì©•=fnhBf±yÇåúvÒ-O!E{ïökª[%Óñ(Cgð»¸dL×0çX5:ýJý¿=RÊ%DõGfû0ÓIÌ®>¼]NnÖm:T¦F¿{(;&™>«Ý†Fø-P†®Êl½L¶Ö ºoVõÍHÜÒði¾ãZÀËŒpšÏ¯pœkw]Âóõ¢sêÉ>7%$TtykUVŸÕ9¸žä«Ú¯œ–²oc͈ì[ÕLQŸU…B$y»ÖQ’…нshÀÎZÜ]Ê—ÜùfTE˜m±æ`Ë‘FtµS”-{(3-d¶-VXS{4¬%‘7¢páöÎûxþ#¾¿J?PåHÌèÅéõh‹¶z6±Õ:`ô)ѹX‡=5­¹!Ö©/|>œ·ÓT̼©}¿ÕdõýÍ7ò¨c÷êÖâš~ 0?E…‹£ñuÊ~—Á€ ¿,!tÕEãŒM?þ’Á^‡ ¢ìsÄO^Ø¥8ðÞÚèmpKs>JHè'Ád#h¶‰YPvFÅÔäöjmUSFWs4-ž½$‚5§þ¼7¹Ü¸>ÁÕÜ… ýÓÀÐWßjYØíç]ç gZ©¹+àa]{ªnmôQén­t†‚êfÍÞ,øí¶ÎDö{>Çc5ZY“¿¿ß|nØöS×®èýt ©»âÀ„†#·´‚˜§d$èÌ&侨-k_~Dh6 é’ñ†FÌÁÿý$D8Äd› LqÝ:ÚË}?Ö‰I ÚÊï×l]/Zçj®¤Mè+ºA¡Vtli?Æ0凩¨Ã-­»×%5sæGˆK5Ѩñªn(ß¡—ËŽå%<Û›r5C¯6óùó!ÜÜl£Ùк~ræšN!ÄnÒŽŸl›§+rkg¾”v—ÐןMÿàíSb4÷ã†\cv{(Á°;2’ê§¹²1q惱’…KÝ £–çN;K˜)ŠqbmЛãþåŽ/Îù/0~Æ;¥Wwv0©°£SÆô ®Ÿ7#öïUKÙÓ2IÙÊ£¬Ù…‰®úZ×ê$ꘟã%om&¼ŒÏª±! 0O×ýy¼¾µ$hØÜ`ÑŽ3ÉáÓ}R`àð„/4ï¶ùZhfËÿ<Èô4w ¥wѶgq ŠÒ®±Â¥”¹¾—X4ŸºrÕ²gŠUž®áQùz¯ÈûS¯×î‡PFåãÚͳâ›ä&l.Høkê6Ú JNÜç¤ê)”>ÓâÙ fý†;ª“¯àô¨-`D£.®Åµ˜˜¸û}\ˆ¥mjùª„²J—Mðü$Â?ðtÍ%Š¡úù#ܾg3þÄz„$T<[¥¡‘Uð„&©æ7ÏwX͹×Û=‡<¨о*6ƒØ{aZ°Åi~(kK* 鋯Pæ}è@½ ÿ¹Q&Øóû‘ÁGû/fzÙ—m]óe^¨ ^HøØ]蛦ó½“Èå^è!™¸ïWU5c°àܾ{ûÃKÇôé!&iË ~q/;\¦[È,UŽ*åS•©„ç‹}³ËxÍB 'õb­.r˜cMæ½,lÐ=#r+¡•±ÖᕇÞuw~zÐ~µ(Lõg#,Ô\“õ5X=Hy&æ¨I$õ÷¸„ƒÏ ö"b7p¸e°ä­Y'â#=#Jš=E§6»¾>jÄH†¹ ÷„0áѤ=¸|©ߢÕÕð ~Ñ µU©ŽiùQD ‹‰~ˆä.¬=åÏÖ6¼²ÃšÃæ›öixÉ-läþq;ÒüGQíôED{ä› ,Ûó·¹ÏîC¡ìPbtÇËoOL¾6Tk½¾ÂÁúò᜖ƒÚGÇ57óXÒÁ¿¹g­m4ûYôÚ¿qÜ®»Ôú’ÒˆXþ!lÇÂ'<-¸_ípOÜÕtôÓn5S˜.@mÉ ·Ž~{sÖ¶û^¦£"n(Ìî ăM,kêšv\3ú“ÅpL Ãñ݉+”B'Â(¿óuùWBš—Ø™eH–“rÉGt†ÈØuö×ßmwx™\å,'ÜMè²¾>¥êz¾­ñÖ’·²–ñ~:0K_¾´ÒD¾¿‹”c¹l5ªw îm6ó`Ôå®Ë;oc5ÕW{rI’¶ðÈi‰­“¹˜† Þc…C•~oÍF¥ÂØvå0î! !yTؾ÷QÖLJSà‘ðd}i•b“œ5WÆÜÛVVH9Ž7 œP3•¹ŸáÇŸ(Ûˆ{ô!ònyõXvŠÄ®HÒg²¤ü"9P KxÌT#6îaçMºKÌr7ŽjXõz¬‹Øý0‡ôáã`¤îéäÍ£–½œ¸l*º¬þx_†Q]2Ãý²äÌŠt::ALœÜf«.EŠÌ® s¨3Êõé¦ä'‘¸Q†zñç’Y?5±-ô{©Jc3Uã.* Ýv™*-ýsM[±3>bö!‘\&œÓ0£ìöukSbq8fj‘ì¤èÙpå°Ùˆ‡3#à&jÎJy ©È¨ùù2 è”®{-òÏ ™ULôœ`.-4ª¹³IÛS¯_Å­–‘Jª±pm›ü?ªUëC±ñöÌò]®ÿ@]³®¿Å;©Ë³Þ*ˆÓ8 ’q”„:Ûß³ÐIQ°åÚñ_£ðè6hðÔG¢þ¦wlC@f0nŒ•äÂè¦^dº%…ĉäŒ`ªDi.àRa¾Â›5i‹.Òÿã è˜qq,«œw€Í4ç]û3Üö…RSSRkâb·Xñó #†eC‘á“àøÈ;­Ã—µ K¯åc¾úmæ#˜šãD“aL¬î©Ô%òžóµ»oߎØíULu)ÛY›„E¤2†FÇ•= Åzc=j`όҭT3²!8†s~ôͺK" †°uò¤=:~ZnÐb0–&áF}øì»“û = ø±mçšL^¥¶Ç1à‚Vž €1–+£`ÎáËØâÂûTøIÂSyë¿3kãÜxYmÚÌÕÜV=Qš‡ø3¬GI¼*úÊ>;N$wi 6¤Ïg¯ªÚ\7}þ] O”¿cpu‡É‚•Ê‘„réojx‹2áÎe0.{ù2„lƺjAü…25W«ÈŽ·ügóðTZwl×#â>½á¬Š° » øÁ±¬¬ ÖW4ÏÔü²À­Û5<Ž!ŸDËf{í3ǃóÊõû÷¯–dx$þßþd1y‚Á-¶&GªÂ|Î5þr’Q HŽ’{ü=±|í°~²ÈÌ0á¦à1»û# Џ‹õj.’ï¾ 0U9öS–0/º›pMÈ{¾ðôéßMjŸc⪤¬¬ìTŸiòqðÞ‘Õ(£Nô/Þ¶–X‚óØý[#Î`rÛ«"äúÜU# 4˜\XÓ})HÔM$à¯dE±n¯åäïà Ëtž¤Å\b7ó<ûNóª.>§JW¾ÀÛKK)—Xµòrk|øhÚƒdØ>–¶xlÜ ä´B<y¸™M2m961Ql8ðQŽlÇK•È ¡…JB­—ÝlÒ/æ¦'Iº,ŽZµ£ç/° £.¥ïpìŶ8çZŽž’l¯çSÎ+ÜáÝŠw ~<Ëå¥çv\ïÓL÷#¯ŸPòÅœÄw–¾Á6ži;EägÜþ4uR HJÌH†rKúrIŽÜ1Ï? I¯TŸO›+’!öPékªO ÂĹ®ò7q*’¥ÛÉž ‰ ™`a!Ô°+s¦DÔY{Ìòj_ï:Š4ràÉñ3˜ç·hEo^"/c8X廵䪞nˆ1–WcÑy…™G‚…o3Ð1Áº?\GX¦´Vaˆ£â•¤b]¦éÓ±Lÿ1,A${/~qÄ{9Ÿ!6¶ém‡`%UÝ›—é'dHn “Ò öÂåÖàó‰ˆ`šZ€ð´$ª`q(/NÊç®Ö|46tè?¶‘„æéïY Ú<ÆH¿¡’DµB‰*×81Œ ‰g­¦Q0¡Dha]¥?‡>&ž3i¬ÒÈéWÇrUò¿$ÝšÀÍ…ZBdÑ%?­Û[v¢¤Žû‹ÇÂÕ2Å$ä±'ÖÔ•6s‹)‚g!\¡œ¢¶‚Í„‘R;«g°|ƒ»G[ñ‚û´!ð;и'8¸ ÝÁ†Á>Šqç?1YÔNƒkßÜÕ¨”—ø”5–Ç Ô?j™Zö¢ÙÖ½·ÞÖ¸qVâ ]³ Ø øü¶tðó 0”±è]ä²±[“·&cÊRgÖì.ÿe•J•ÌËÛå6¡áx¬»µ†+޶¸rc¢­UqÛPç‰,º‚l1ª¦ uœ_t®Â(Áù†§]SJ^ë «¡ª|ÙY[L–1 ˜ ðh3BÐo†n%Í¥¥úoûY¿Þšic(ˆ¦âCmçI…­WWiûè†ÛLVôªÈhЖ›H6’ OO-ÓIó|Ä™Ý )zZQû¬ZDן´sù¹hb÷ú³«Ó–â\8UÈzKë+¹sA#,óøË£ î—‘Z„–rœåeÚÜâq ÎNÜÖ-ªÑ¡C×U²êÁ-„ã& ’ÛÙÄžø$¡¬œe‹l‚¡þ­"HÇ5·²á€…¥6Aï$pUR ö0(g;úç«,P#åÎoÎMÄPº|yÁv/n%1ª2œ©eÎÓÓ‚·Ü{ØÙy^Ôã®Ñ)b™Œ.BLgP°±^eß…3RúšyÚAh°¹ÈqŒGý›ç„,(ŸAïÐ ·þöÂdä{ÿ^y>zÄm€¶Ð±~ÃVË`âjR§›œPLkç¢|ÎÙ>gMsʲZ¿€§Nv**¢3ä;"sû•gp‡Ÿ{nRöòw¨ä)šQ}´Y<²Š'B}8g¬ õ•† ®+]üw2\èøt!:Ÿ[—ëýî:F æ¤j¯ ³”í25¸N¶+ŽÑƒ'L2üRÆ™!Ýܦx ¾y3~-Õs9_óå‚o>W”„pó£ÆQçú…— @çJê±µJ¶5GžüGï%{‹ºÂ¨ üí°P³Ü¦ÔLgI7h]o•ýÙ]ï‹-W>_½HL.© ôRL>äyœÖ8¤Þ×s£BWsG—ìß÷W¾UÌJIç¨ã¤lÑ®¹|’— Ûƒ¤žnÁ7‰ÞõüwØIï £“£®Ó¦eš¸…^—ZÓÜÁ ßFÉ LIW„çÁ³¬M ‡ö¸|R.§Eë4ÑG/m÷ÓrÁ%ôåz+~äcÛS¤›0íˆä·íªGï÷R–Ÿœ±ÃúÕ ¢^à˜(6q»`HÒ«üõª”[UÖßt%3ôfö ®78I5’/Ø_ë]Z ü\Ür¡…k±–ÌÅÿžrj¨™«÷\+Ù¹¡eÚÇì÷1à'¢w)XÚñnå· FWtü{±æ ŠÝóéåõý:4Û©?æ)þH€¢_Òi7X9{†‡1™ð»d5O+û`=Þ‹L:»À¶¤y©'€êÍô=âŠÛ„X”E‘0ô 8ºÐvS$sÊbl­çaüãg >ÊHŸbB‚dpŠ'ƒ{žk„R~¾£èŒ3j” bC¡ÜUH”k›FÎÑÓ’I§ w"qxEbýHTë#¡Î v²rÉTUº3oŸjG £,<ÖX<hܵpßE‹]Ë{†3Ö&Ù£¼ØÌÌ‚ Lû8*¾°|ÿ Èölø œõžZÇQ!À5”î+]À^E=ý_½ÞHÛ~wÑ;Ó–iwaH“ô6Ih¦ªsöa¾ôÄ〹 Ê:>U*¬žÎæ1?º&¢‡£OÙÌÁðDWDGvw‹|DièùòÃà|*áãh4Èýùv('/mò‘!LûĦìÔkö^F£C_hrû|W 褵>£ “[·]sWû9N×ʳŠ.ÑDú›ièúv/bŒ«€òº-0Ô§Ã$O8NVÙͲ2’ãð×gxëk\ý‚9IMÌ~ï¯ÎY˜G%«yoýWܸ÷»ÇnR|¡«æÉœd”º¤Àp³×E&~{„˜qpÊù­á¶`†ûl–ÁÁ혯´Ç¢•VoÈ\lvBà„Ä$  ÝUôV±¥¤Sý”ùJB)û­úûQàª*  ql‡ ;)CƒÜ= ÃbGþæàš´Â€ÜÝl¬Ì¬4"Õ°íUŸFÙj±¡hÏ"iíéɪDGS¯NkЏ…åHÀvK…Eþ7Êñ´”¡Ùœ È”ºsÁO…v¦µêò8ƒ—k¿Þ€?¹yb&ê‹5ýì:khÊÉtnAËî?â>n¤íJM7[-Þ1î£çœ%.Aá#Êm·Õlh­€ã×1d7ë JoŒá7mNĘÐX/úi5PnAÎéßàae%À5=+eׇ2ÄóNÔà‘*!Ž-|¼'o<“ˆ¯Ò•°dDu=},$FC¢qÜqãÉuúŸéÏò@©ï?¼Êò²=K gt°µÞ`âfîÍûŠA øaQT¿ß+‚@“¤ôt7Þˆ8Òл*ÍPTÚO+ø Yžý0g¤òîÅå˜Ó“ã¼ÊšG ˆƒ•'«_óFC `xõj4ÎÌ\Sh“R¾XYþÉ—: On\éø0øæ ™¤í…Âf’w³I­*e|Ü1Ö' ª´ú¿^¥_ÅA½‰øUaz7™w¼fÃOš9:öøá”¾—J Î5¥ö8®s;‹«Dÿ’‡òô>H²Ÿ*‡(ê,ýê ¬|—)†¿ý7†,#¶B& …µê¸Ž½³yøûÄ–ÿ­p̨d¿ÉH´¿=+@íZù—Š:§1Ù±häWa’)‚-hžÎøµ puÆ2³r¤ƒæØ”é6Pû™ÏÉ‚: R¹rê@DQܽ^ Í,Ò•¾VõÒ?ÀlÁžìdÿ–½ÄÄõÃ¥uBò´Y íUj„]®]¡p_Ô{zöuÊ3…Ç`®Oåt ³7º´zØ Ä¯}Å$k/w§gNÑä«6ð:ûd¶(Øœ0ëºwI”Oü™§PŽ?qiüb 镊efŽ,5O û˜Ôð^‡áÓþI(´XôïöÜZÄùžYW`í ´f—ï (h·“Y ïÏq¸¤LË·ý-ò•] £0ÔéD.â7þ\ÈÞm0TÀ„39©žò;&‘ožZÎÑlµÂ×X2æ¦7ä½fü¼ào%dèFÄ羽E.[¶xˆ_g<ŠØÛçæÃBâYDÎ$}iÛ%Êpx󘫬æ|LðÅñœ?2×ã 4|éá^r½#ÈÊW¯”zE"ZÚhLpRìCõîÁÊ–CŠû¬ã‘Y0¦†)2„Câ!¤w]žõQÈ+?Ú.¥}Èþ‡æÛ¨b§mÿ"&5¥tl’o`M²QòÄ/„\.ZŒ×ü£ÉÇb©äxªòÓ¿>sèÝu©W ÌÃÛ¸}oÅéÒ9{Ì23Ðfo_»²%ßë‹y0‰:öJ·çÔœ¡hòI½Ú;J" +ééâŠu–¶7Å]T/ûTJÅŽ [ƒÿ•lWßM”ÂŽBÜàgkÈΙ ÌC cS4;ü ¬]¼ôDmsBüûß,vG5/ÚíïÚˆAžHo¯Ÿ$ì—úPU20`1Àd—¶Scl•!ÜVä|õÀ˜íTú½ÒüTÄ.òËj~xIe¼§¥J²‚ùÀœ'Âò?.wÇ.0dÓ@ï-F9`Êqá|Ф©+x =”±?Îûl ±«ÈjxÅËž3õÓ¸7_è¶¼KØ6EÎh'ÃDkX¼RlÄÈH-V¨Yð¡ó-ñ `¥õn­ÑÔÓQKlP–+l㉯DÖ‹„kôå†PI:o]º-Há{o‡’PTåþðDaŠØÅöë(M¹®Knî(_»Õƒ6ËŠ<Á ¾×R‘¼àoâvè…ÆLÑÒ#ûǸ:àÝÕÉ™S@±¸áœ?'ª¥½¾olJ,.RæGÊ|Ó>S{ï'Ð9<‡RèÏÞn= øð$ο*C¦f“‡çSöÂðºwàˆ7},××ö&sdþ›•aº´À0;¾ãØ82pÔ;ضTÙ¼;ßzW®§ì"uÂÎ4nYLºrå ?L)¤rîç6­¼ãxSSôÀÅiì )dsx"‚‰K’¿<ÁæãÄRøô¾° ºúþRGMW“Jâ‹,eÇTÊg˜NšüªVzÙjë–ÒÞ|—gšLϯqØkÓ:tª)ÁÇäEoÊ4È"Þâ®OÜŽ=ÿ÷QÕ úÖ ^Ø=sÛèÝv5Ø.Ã%Æ Â3§?L ¬F† j(BAêŒ6vÓU9)îº8[Õ W«ä'Ÿ3®]ìN6†ƒ&O«É ¢4“tÇUXÆ¿•¯`èv6…Í8eO«ØµõñK±`y«l~÷0ªÎ¶!â+ýÿпŽ8-[>vµ­ñê ³$þÒ}î47K®EtTþõr•7îÄ/OâZ¡eûŸmèZÆAbØ÷sxr·¦ + 0¯©lbº ñ!^IX>nÔŽy£n]°»òV˜¿þ °¹„û%Ίï®Ù†4m.Ö]TÞæì•b±£¹h¬ù-ìHÙÕ.GSð¼5#î×”PÈý§j¼ã‹câ‰á˜Ïºäö½Ÿ{‰Óyr$Ý€»ã›YO«÷ݸ4ER@[ÄK ’dVzi1¡Áv7»(êUÎ"¥âŒÆc@l%·a1sL„jƒLHlv¯UMÅgIiN&¼I±· ìɼȳ¼Ó”ˆœ% @Ø{êâ¢Òæ‡RÃÛBSŠÚ=@ÿb™f3œÃQ¨òŒ‡I5ÍZ êú‡<¸Y€Ö0Ì('îŒæ&- ×0M>¦>± ÚbýE2X`à#’‚þЈ¦á³ßLß´ÚZe9Q endstream endobj 738 0 obj << /Length1 2227 /Length2 13718 /Length3 0 /Length 15037 /Filter /FlateDecode >> stream xÚ·P\ݶ¨‹»Cpi4¸»»»Kpw—à.!¸»‡àîNp÷àN° !¹ýËÙÉ>ïUÝ[]E÷7æð5Æ\5¹ª“˜…“PÚÉÄÄÆÌÊPÒÔä°²r0³²²#QSkÚ€ìÿŠ‘¨µ®n6NŽü(H¸MA`™¤)¬§ääw·°qظùÙxøYY쬬|ÿ£èäÊ4õ°±(1änHÔNÎÞ®6VÖ p˜ÿù  5§°ñññ0þmsºÚ˜›:”LAÖ@pDsS{€†“¹ äý_.h­A g~OOOfS7f'W+a:F€§ È tºz- P6uþS35@ÓÚÆí¹†“%ÈÓÔ ìmÌŽn` wG  + !§Pq:þ£¬ø#àßÞØ˜Ùþãî_ë¿Ù8þmljnîäàlêèmãh°´±T¤™A^ F€©£Å_ЦönN`{SS{S3°Âß™›¤ÅÔ¦àÿ-ÏÍÜÕÆäÆìfcÿW‰,¹wYÊÑBÂÉÁèrCú+?IW 9¸íÞ,ÿ‹Ôˆ‡À"ý›Ø,2¿‰À"÷›À8‚ÒoGPþMà*ÿ!^pÕßÄ`QÿM࿉À¢ù›Àõiý&ptíߎ ÷âçbú›À¹˜ý&°¦ùˆ|±9üÖþëɱXüàÿ@pº– 8_«?ìÎú·spÂÖÞÎÖà+÷·Xfó‚3µûÁ©Úÿà\~#8³?\/§ßÁÀºà÷ÒÇàLƒmÁïG{ %è·”í_é?›ý1¸·Îà}vú£à7#‹Ëï.‚5\Ü@ÀÿrÇÁ÷¯ô¿Ý±±Ûâú‚{àöä¹lÌì~WÇ nŒ›½©›õfà˜¿‚¯µ+ðÏŠÁ6î¿SGùûåçfîäú§¸Ç 8¼çod÷ÉëGñþÁ=õùÿksÍÝ]Á=ý}µ‚×úøï×$è4GZ]r2µmí|¬#òd:ø"4O} “NÇä»êÚåþŒŸBW›¼íú –2Ö±±'E{/ºFöê{ÖÖÑž¤Öñâ÷Ã8Q}ö iewxºøLìó "1“¦è¡ß«‹Ÿvtd”iìC~Z@¸AݧïR;qµ\s(·¾LÍÀ¨Ö›ó]j1&ëÕ³¾Ulèy8ªgPë³lSͱr¹8 &·y—k½íU, Îð£I·f#î½SCÒKu·©Ü7È’R±+æ ì¾0'ã!À\p¥EN†áêù'Q·4hgòõå4ž§†;—ór¥¬÷tZz‡’ܾ¹ÄBN'ªB(2­Æ)ód)úêÆÐ2H‰÷oÆá-˜«:´Šæù¦ÖJ(Ó yÉQÓ4üYLÓÊ:Šq+O(FÈæ8y¥´Q…3”² ›çás7º ø&ˆ’ÈK(ŠíŒcæÃ© ÔgçÍðÓg­†nPÆÜã½Ê絕¬Ï©8T¡Ò×/pæV½;и²«p{œ(fxÞFµÓÃ]H‡ ÂÔëCþš?)3ïøV1eÆçJe"Ý»°UÆRŸóìúpwѶùØo˜Ä/~ } ÷Ž* Mh!±°ñ4p:2¤¥0>wuçq4{´‡|ÿ4µ¡¯^­·QƒÆXñ‹÷¾î¸}9¥¸€´Ž÷3ª‡4s»W?ÎF ÞôÑœy”‚ÁÜIwõ³í]5RÈÆ7Ô†mÍl&kÛÖô˜ÞüK §“fæCó…^DO3V¤vø0¬ï3ŠôS ¿”7ÒÄrpXÅ~ã8<õt`ÿÓï,›-7‹ÅàR%¶så.¸i„q-'%4M?+?Ã\­ï>g~ ĹÄKt®W¿Ä̆a« æ'ÐVr=ØÿÝ䋺т7™„'‚wGdüÖ(ÚJó/{µš•4Ò A‰‡}ƒjÁU맺Âɾ^¤qàÑ Œ·½'’—¡Gq;f4\Ís¦ŸeËšZ§scÿÐÖ¬7¼ƒÚ‚« ®í‡ ièõwS½ZðXâîˆün'G$Õ¡#Þ)©1–>䔯¥a›úîÛú‡ÚZRcyÏžÕ¯LwÄ¢ïáö'P¸Í«6€ýS9†tdõSŒÉžzÕÔ_¥Ýºn`×IV/Ã¥mpyÜ ©—çÞ“‘íGȯW8kH„VQñu|1QÕ(+aÃx’Ÿú?>EF!šS£Ô·®d¬{×ÊK}ò=M¾ÀÜ3<22’Ç? kq”;düªáÃë ¾ÎÒq.dس_Jès\Ž ã°Ê/§äæW ÂïmR ˜c:w¯—¼Ò~Gä¦ñé£ÀO/¤ùšªiÔš·Î i7HíÞ"“?Œ$Æî±nžäP›©>ÈÊèåƒæMQCÐOÞ­ã)fÛR¿ZVeö99׀˂_‹u=ßÜè.Çaý) ”k/P·?˜¯4+'ì8i¢@BtÞúœÐqW!—bÄ?þFůÇÙèë¬2æ‘û-a¶§™Éù,_;—pCñã‚…¼|JÝà5ëÅÝ­î‡Òë1ç‡<ƒ/ ÛÍlRØ1÷c2#ê•Ò’·÷H¬šï P`ä|ɸm… ž¡&=£WǺJzÖ¢:&†x GÓ_»á¦×ϱ‡žÖø}ŸKq>¡ßçµGˆØË6vfÐݤñ&¨ÔX:è:2F&MŸØNCǗ겱ù¹2f¨Kƒ–r!þâåK˜ÎE2ReI,Õ¹UÓ-IÚ9òYâsœð.#dí÷9c#a~Ž¿AgÌw^¦*õ¢yõ#½,ç” àĺŒ•ç)ÞÉ,Ìšé¯Ä‘¨S=œÌêów÷9î÷Ëùn5€ éÊ„›‰ÉO˜ì¾y[@p·c0 yüN ¨{¿aâI8Ïš@5&gm8U§lè½Gðc_ßmùñËùÍ. ¾8 R·3Åûè’ ÊEyóSDéœR½\§8„±ôÒ/Ø/ó»eðtg ¯VR£XæêiVíG·OyŒÆÒYEN~ØîûU_qÔä˜ÌßP¹Õ¦îÀ¨_Ž|ÂHš˜b>ñ8»i3ÌÉ|›~¯ñ ]›)I"ÚZsÄK )…Du\\Œ=}|™Â«~©”K¸ ÏÊÎq˜´eWgTdW£øÌ_YެHF»¶@¡8°€ò‹4X(ú{®†«í FÊ7äW_h~‡_¾y«ÛxNªz»¶ÙèÁQ›„7oŒ¸l?UÍt|Ì |•iRmÙ\1â4PJ}wÑô³ ò¾:2ñÈÛŒ;¸¸ÿÃÈÞL‰¬õb:ò À–¯ÙÇj”9c´ÿ†¥ý+§4Ù~fqtaqÉú6Z²ÏË ÿ´øËG~ý­ž]˜4^Z$ÑÏMAfðm[Ò!é”x$B€µ¯{Cu‘l$óbÓŸçý’]ZH`²ñ_ù¹È¾ uIC6¹ÝÄ=b+]¿½Ûʘ$’ #ŸψFs6J†Äü‘>¬.™ïWHLãÜðµ:–&äŒm~Ü%´ Ã1b+yðËãd4µúvƒ iøÌôN]ÄqT²ìFŠ(—1˜mºïWï;Re´ü‘8È0 Í{BzÃýsä`A8¶µ¼¬;d@áà(LyûERirÜþ\¡Z~îÅ.|Ý[Äé÷kÙ32ùl°•4ð¬ä]L×@·s_~Y& À#¶úûöxÀ-™–öÝèØ ýU¿þ:)>>*îò‹’²ge@¨~¯‚þiQ±ÇpacývB4zìºÞó>Ÿ=ðA±gGrå*ÓIJÅ#²Bgˆ|Z#×ò{5\^+'@õ.pû”yj¢/2¿õó#Ûâ*GEuŸOÒ†r›ŒÝ×R$˯»© V?¨žsýZ?ú›Ã ÝTTRRŸ7‰¼x÷mTËø»vŸ÷Y¬k Ñ™gÐÛ¬ªÚò]?Mè}ܼvè~ÆÎ¥Ú¸L· Ú1ª5$Z÷‘ÂÝr…&–å‹Õ'åŒX =œ>È H ¡Žõv}ô Ux]O0§ª1MEiÞ^©àëF0ðà Ây×à¤c¸Ÿ>‘ï/ä, *«ÂƒŒ©Ý< Ñ¥Ûy$K¥Q"Bydóº©qg];ÜŽ\å µÒ¨žõ[Gâíe¶š¸jgÝ0ÒåœÔDôÑŒ»·G—¨—sŸWÚ—h¨Èy£¸tÆw㬿¶žö©¯•mE¾m/‹¡ª‡Äžˆ¾÷+WèU}Âàc‰Ä¸ ¬gÒÙý’“’s‘9w‰e”¶‰£¿/ÇÄW´4—¯Z€MlšôQîZoï«+Y%šŠR=׆ë¯Jò è<«©Ý™@/FÿPÆï븅™Ò²ŽR]¤-™º¤’Oóh†ùa¯öT4¨X;Ë]ÌzÂþAXùõfZ/rø¾cìæØÄ›&‘¬[üLÈ`Tà C`ð"Ú€ê\ÐÕ'£?e¾7„ÔJDƃ!µæ¤ðäkÈõ–?cŸb1ù{ú÷}Ì·Å(ˆIéé ƒžðï·$x*-Eýdõê0•zÍØácpç÷©Ù \‹¹ö ÂhSñõ­öèܵZ5zíWŸÞV—?:SÃÀ_ Õý04â·c á›õÀrÌ5x¸C½û’fGž^sä˜ó|Ï>"ª”H‡í1ë¿ÀåÃá°³’yÃ2|_^û¹* Ñ=ê6 çdFÆòOæ¼"1‰39˜±¤:æT¨”ë呺`­Íp_*G6ÚÒql=Ð+fX¸ñæ9O‘…ìm€9»eïöûtWYè‡Úˆ"Ó9ÿƒ0üã~t׆¤€ït(•†‚T)°×µìîMÅD‚¯‚7ËʪØ~…b£?díŠ'‘™áUõª‡gçIUÊ;ºÄÕ³‰éª?9UhŸÖ \kü< N0R#e‹u÷aT¤&Qó€t´Hô­ñ¸·«"ºœÙX‰rœ0 ƒêåÝê¨Ð{hYl¥]!¬ñº^M¡ÑèêÝ0uTóÐWݰ^y%ÑMJ]‚$z<¬L)ظ ,?Û3#îëÇOÊ™Å[á~XtóÜÑŒ£©üTª?ÙúJ'&[Mª¢4Or¶¢ôs}_nÉ&\©Éoœ}Ùíë‡ß¶‹Ü' #ve¦kN±o|(Hõ2nÀ#‰T«Ö™å`ƒÏ¤µ/ß;C%‰>œõ RY6c’N=š5dN%®QÏQ•|“,¸P¿'ù¢²# Ûše(Ù_Ó¯K&Ãr1ZØ‹vß§p‰1r_]Wl²´3&b¥f<.‡ôõ ¬ã‹‹jmG{K¥1mºÕŠ ‘Ã`;¨Õ§ÿäGµ1d…ò² g™g1S›Ý•º[ÊÏòw^¨úyy¡QO¼ßedª7CnÏ_OÛCLŠ.®g…Ýnö75RÁ”×^OQÆŒõ›¾mñ]þ`ó;@ÁÞvö@[üòÛe’Vã{]6‚}¡ÖŸÖ4<î·•02wÚåÇbÆ }ƒJ?ž¾îô…e¡X#  dhGF_–Süç𯭷šböŸYCÇŠÍWçêÎR„ÑC!šï¸#»è¶}ÕÄ“«t (·$å8lC~o?F²(Bçµkéb2Ÿ@,™D'RDÃb¨¼{ÙißÓm7%ô³)†IMF‘u¬&³kc$lAžAN”3öæ0Âì‡5Ÿzô÷Ã5á¡u!þˆÃ„þ*ÀæñQ´`ËSj®ªrt%§°%S꜇AȤi§_“d6},’¥0/ ˆýc¡4ð 6ºE.ë–‹N£Sw•ÌC9º’6Š(>WÓãàÝ5hÌ¶Ä ú1ôí"ÿû‚}«gê/$$ͯOÓqXÕ“ïª ç;}®â?ÚWDR›•À8¿ZålñÈ Ñu¾ÖìhGÍ*t¯ü Q1*H?Š]@%ò0‰®üáa2ဎ4©›oÝZþš&ìŠ[ßÃÂ$bÓ¸S–8ß¡2?\y¤F‰BŸÄ¹§"ë/eÔ,P‚cž–PÙü¡]ÌJyÑ€âÙu/ J1NEóõÊFMY£:ç§Ô¿±éf¨°ÏFöFh6òS{É-¨SœŽ4ï¡!˜‘uüH·€8]>þ4êg ÄÀßDíõÿ†–%÷Ø®4}‡P8’¢³xMÎÀ¤_u¶Íh±UámYPîà±eBü)CBd²†äÔ¸B`˜­#[…Uw±£½é÷VUÙ¤]Ã]Ü—Š1çj1e^ñaaÿ¶EèÙÝá3«‘6ÆÂbª}Pr¤¦Š#ˆ ˆ{Y‰Bw"dø!È¥ó@2Þ’uÜÁO„d07Ó83áÐÁQÖdO,LlÓa.³ii£:ÉôãUa*Äq쥭¥ã¤ÖÊzFì€DnV›i¨…%vãhð° âÆc}cy{MÕ…XŠJYÕÈx5,Øâ騣¾õ¡Œ]3BÂð³Ç¯¼ ­Ôs.ˆÍë.MœzþWó±e0YžNu…Eï.7‚¼œi×÷¹œp´!)æ]Án›ì§¾4ìÅ :ìE†¦\äIê™!=Ä„´è.ò'EŽ4åEÒÖªÖû’×kÍê‰øLÝ¡5m„7'‡1¡G"ˆA7¥‹Å¼/0dÑäiŒãӸȡ•ÓÊxÄ Г1 qxÓÃý\Kdý”ñžíð':ÔzöQݸxü,ÁÂ5úåÀé>_eÊ|ß¹ ÿqïG+$ìtk–°B”~) =‚œ»ýø‚|K¦÷2”Í•k¤Ô’´®•Õ—îmñQYc¹ÊRºÏ#›Šêø»ôñõD-°jýVcºµî™ÚŒ3)*¨?|"ù ø%´˜‚Óc£­¤õ“Gà@‡þÈ=9,ÒÁâäå˶žè£btŽïûIíöD† ø˜/Êôz¸I .6†—,FŠt{¤ÑÑ$‰¼·Ù…n##N›°ãQ3j|mš@¾sŽk"oÃ#Ø,›ö»²¾`θF^‚·?}O~`ê”Þ«.ÅŠ.†‹”¶'@VDôŽ‚¶>”Q:4. Þ¤7íÃL%%j[ì#äZlߟïJé%見*²(CeG‹Ùû’…fó\îÉB1-àb©sCŸf„P³ÇJ…iåzUkªs[àqêÀücªP|½—Å\4×—¿Ç‚"Pì¹ßcúÑPÕ_þšžÞÎk\à®À.{#|Ík,Šº}ÕH—}V1Öʰàã#Ñmؤ¶CmK5d©’µ×÷ý°×FÀH¨¬â{' ĸTåÙN˜ •†ó""‘f/ü5……ÙEALj ™ô;5ý[uéÄé€É”š$žØtÅ ÉÛ%ÇRnx•òW™¹=ª]É©wdjG¼n‚Ê’ÜéVüµÊ)åþ ¼ S]îIþE¦ûz­ºgæ?É RQÈn@|O=˜kî]ÔªíîH‘ΰ¼âûøòuرZ÷ñ•™ÅÙ7Žb‹4'ŒNº+œ€»:†e±¢àõ©“é¹NÎíµ$Ǭ¦Jïû-¯ê]]pz?}:ú½dëù´}gÔ‰ùR)fùÖÉЬÓL™ìwh&§UàU­Ñ®èÞÑZoîôüàå¨8,õkÑÄ13{(òkÖ)îçWг—ì£å3½eÍ aE1DmuôìT_‰TXfÏãá/î°\ Žâ›®L½—’…ýê¯@¬ºÄ0>Z¡ÊoÇ%KÏœšÜAÇLW²ù=ı4ÖDÐÒ e_ÖpW1®`mÍ}_‡dµ–1\ùvç?géc0”Ãyª (TwU<ÏÊͤèÜ1¿ƒöÔúrL=£ÑëYŒÓÍ’ëõ‡SPŒ)¡ûbkßu\•ÛT«[h!,F4tä—ƒl/æË©Ãëàò 12c©\ ¬(éß Û÷ùv‹—yxv&iA¸v±اÌìlïÝ<4+Þ¶§»6–„ …%ç‹ml KA9ÌU‚κCRŠäŸøjj¾ìur©‰´_oß&€>õ¶@šg',;´Î…x™ ô×|Ú“Eø†#&˜¼Q`h·M6=ê}•8 ý ¾Vz¹ˆ·ìx“ÑßÉë Û*:Bçèt…jèA ÞQKƒ ‚ã•=ðQŒ³vY.µ úšŒÔMD>Q·’Ír9t÷yu¥-¬þ±é[]“¹ q}¶9@¹_Ðàv-÷æ—ŒMµwB¸ìÉ:¹ŒA©êHÁ1rç<ÔÝÙ2¢rJ¯¯|p†Ô›FjºH}U±J³d½0?/föD¾ÞhŸ‘ëy—A‡âã§1¦gÀÝÀÔ)±“ɽÁšðG…z´DA$¯‹*õÀކâåé]_Ò: œk”#iî/è¹ ûÄ>œÑ-{nñŽ»J8È"±;Óû¢ð K2ó©7¼áy&?.,X ñDÄd %U4.IÃyîH*w7Èä¾dz˹Z‰é´" ÿ€XÞPX&Ó±Y€/“J¡[Œ÷eÏ Q/t0 óÈÁ²îvЙ«ñä(»\ÂI„´þÎò¬-ª ˜+Ö"L˜ÜEE’½lq™á¯ hýª%´×²èöЬ䇿œ³vø1ˆ}ɰ ±(‰Ó¿‘¾žãHŠÖ»çmÍD©´+È|F›*pæ@l6³¢÷XG²QWüúî-GXF2É!É’Aó‹{õ3BNO+b¸E5b’°q#žz@€Íö§%²L¬B«›ã¾M«£Nf]Ùé¡.‚zKÆ•ÑÏ(X•À+ôÖŽTå2Lbº8ß²øò ìv2ˆæ‰†ÇO'ⳓAQ©õYö¶×™ydËI'6~‹Ø~õõRbÖs'¶ÈæA³R8W]Çø«[l¨zÕK­TÄx}M§¾'ÁbQÒ–1ÐsD¥âã|ëÅoë[ב}R^ÂkWz’¤È‡É–Hô§M@ÓúmU§R•™ˆtÆ_æ%ù¨ž.{ylÁ‹ —1w)ºÊéÚYsž‚ yõÕ¡!9ŸŸ*áHôB®R‚¾Ç7B—5¥(üDéÅvþúÊŽø¤B N’]M »º~§£r×3%ùÛó•­ñ¦žce?2}±öŒ ÁcޙצÂ)ø/Xø³78ÎŽË>ºË¢[\Š´"®vŸ¾žÿj†éF*“)ÚÎp‹Hð0{§G&ð^Øû%¡Ý91ÿéÛŒ?oÌ;rÒqVöZö¶Œ>7ãÁ[Ò¬Ÿ±†¢Kk°’p-ëö‘ïT?¯Ï$Ž,{q¯ðT¤DÿZ‘‹Ùí’ ž±<™±¸û*S%ÐTÄ,†ÙÝès4¦ yEA?ð KxõEÇî~máp麬†Õz!rÉíH@éɪ†xáD6§3·@&ÏhìÑ%f…ß]䤥tü5Þ,òL!ч,¹È¯Œ|7dÖ õùú0 ´¡«ÖÀÌWûξNC‚_ ’ªgÖŽdYÕýØÝ'&®ÚfÎGKäOS¡€äì0£¬S«gè¾ù$8µÝ­ýWŸWœéc%D÷ñ’~½KáÝéÁd_Uœv…RDcƒƒ¢LAÕ7â¨ìq[_¶Ëo5>X"Ä Ô§r,Ô QÞòo‡÷£œé=¤¦\„0™œà¥ŽáÚ:;Á& ÒÂ~{§~'8@¹9VõmÒáQ¸ÌrM|áÀ•!¬j8d\ ›³]´¸PªÙ|%ùˆ-ªhIà ±ÀzZ\©p[Ó Ú„•=jó]‘’Ó¦ÜàŸ8ÌO="î‡O%‰‹ífü~Fxv®%3)Ú3½Ê7]±¹ UŸoã#m4?bW%<°t~Üe[Á®7s£qE2o¼o›PÂ,1Úz"¤=¿{ÜЭѤôT¡´£¥°.Ú8_|²Í Ë‘ë,¤ kÕåok¹ Ø["šÄóŠS´i¾×½}&MÍàѤÃÓ)ºM ˜ȹ1@ê{ïEPíÂÔ*Ä×gk™#„YOû|Á·tÇ@ÿ0G_ä¥nÇÒ4mÒ ‰ BÛMY%‘ ¹´†&ÁÃï¾¥·÷4ËMÀ_·ŒØf.oJ°‚š—šû¬G:ö.6逥:o†( uЇÊÀ¢Š´„5W®|¸Ô©T0U_0Õi_¡iKai%"¬TùåršGñÓaÏõ=s´z¨kÅA[Žå¯µ©Ý‚Im¢ørý2•F‰›*yÑjs¡£¼{AØ#¾*¼¸À·äF½ïô(èîÕ¯]ÕR—‡î9_³Ú*Å=Ý\Ô=X¼/2W3L]{}ÌlÝ{¬º˜˜O8ÀhËù|lšÇЂ•Ày_oɹPLɼÝNG”Œ#q¦µÅ'HªüÑ7y&ô}Õ‘\LK»=0äÓðƒÏ’èǃa8#áML¯JñUíò8MˆÑêëþ:x¿rÀ3‘2kÝõU=ôpûÏ`;¿[T=£JgàÂZ•žrrU÷QÒPµrÖ=rMî eÁw>Ç…ÝÖ&ðSX¢ü©†‚§“‹iÅßD~™·íà8¹ÂVz‹Ø Ü©—ŽJVÄ×KZÜÄ"lB†¹¼†5 ÖH.hwé£sÃç~Àó¡(hr-‘·LÜé­œR}äVqÑ>OWüð͇'=ž]&Ò¸Ã]iËSøa'§¯}LãW’$3uЂÐ=Ëœ/z222µ 2S§aLX·šƒv.|§}þ0Έ“y,z3œGù¯xäm%ʉ¾{ª9š¶z\±öÍÇ ’†…?ÛI åçeùi¦ü¬.:ÐÂ霻<ˉqßìPæVB6Â%ÌÆ°ú¼$ÉÙ‘ƒ¾%PK…[â….Cï6äMùÓ›ÄäþLe¢!üÉ,-ŒN2Ùkj§0ð)°‚„Û¦ËTéTSé¿I©ó¦IhèèWÝY3¡ZûÚÒåeè–:ú¡™( ~q¶ÝámfÂ×E>_6<Î\€—wiyCÕšøŒçyw.Êe‹Í›çøÖ+i៧öÙáíÖi…QÅgz’økß_ƒ}D1EZ‘]¦´_xÖöR oX(,½F²=W%íôð·Û²Ëö«ÙäkDeÈÒ u‰`dqÒº­‚ZÛ"•´n³¾+ÀûnaxÁåB™×˜Y0¿½§ú>J 3¬úùzßÝè±Rk—ûã!ÙÚê—SL1ù#|)Ñ{¨r ö€”!ÄÞj-?úMé¢Óœ\ú^§e‚CjXåˆ@NFÿœ@o·oNº'þœ|^˜Ù–õ1Ü’ÛÇÎZÇ7RI3Ÿ…C¾|(áõ›””æíj+'URøU¶ …lb&KýΜÖTiÈhEsïmvȺ';†ðwqú9`'t î—’WNƒj·u#ðœD`CSpU i}Ò©k8G`]v¥JV=ãÝc"›3 í{˜²p§ÏÖlËç[?ûâLõir=.Ô½`$Ègòé3A7=/w®Œ ]Ü©]õÓhxTø49i•X<ôEKº ¯ÔXȃ*ë+&×Xµß¨™z„"‡gs•¼å̪bR˜ÓÍŠv˜<çø¾­ô"£_s¾_Rª¬Šô–³À¨‡V›'݇$@¥nä«þ‰¹£_c•¥;>xv$_W*?É“"ãR3g“sϽé"¸ I?»÷Gãf³’ WÒ ÅšT‰QK»'6$šÑè36Ÿ±'¼Eêäø$/3ã®Ác¦qX‘˜ôlÍudus˜Ò#Î\èÝ_Ïœ‰ÆúÖO4gïP!{1~™wcXr'átÉ>.Ó~å²õ¶(gq<ÉÒÒ…ÒÆŠB”øž­XÞÖ´öPR?s±TRñÝ‘”rï^w•Ö« S7èu¢*ˆý|KP-á¤l;'ž‚ó”jn"ï Ev0Qç7w¹7×û]ýúˆ/mhOå'TØ%å/žËX1ö7lqt¨„ŒØ?}êoæýfK’XVw~ªä#ŸgóËVP ÁÎY‹NÖYpõRGÁBšÈßD†Ò†ó{¨ƒ —uñÅp§»Â2‘O†µW;¬w¨Ùòx¥…N ßÕ 3ÆýEò#^yÕÍ`sËÒfÊ# v3µ$VæµK‘ª™[¯PóàùÑWíÑ©.³–·g”çz¸U£ b·¢Ã˜~òé¶iX¿R‡Á%žïä=«ã«AÓ;Hu!(Y^A8g¯é‚0Wº/*HŽ¿ýàüH°Û+˜‹— >üyÇ‚ºþþƒ©E¶è;wª›(%%4ã瘲7Ø£ºƒäh¹†$Ȇã(g'ýo½°Ÿï68ºv÷åW šE?W}%*<Ðz•u@;ñl™‘gÑÙÖÀ†âyÇyVC¶ºœÈv–”ݽ}ò°gB»ÒÔrIbQ›ƒi+GQ¬²áíQ¬mÛC;‰¬~2(Ƕ”.«nNzãë·²}R’— •¾-³KXØFÙ)ùY+­î“Ä›vÔ·¤°•W=›G\¤ˆ^5pÍ*èvP‡2HÛªƒ8ª+lºŒ¶hó¢1Èlx¯¹ÒÒS&8Abuê1γêZÛtõV =F1 Ÿ Å[w§¥ð~>£í:~…ÿÞ}Lj^“wè?¨ˆ±dŸ;/ä}ulY'ü6ùú—ÆEá èV9¨ð‰ 7üÊëö¢Í§±Èç‰Õ%êZ¬d>-nû0}@‰N}ÿÁ\à w‹À=ä Ùÿ¨šÛaÏKú¨àÎñ›¯' fÙ­m[ wÔ§¹^„ȜҜ—¡Ó‘¹À $÷ô/Ìo޲7y^ë\Ø€þ[~sæÊË Öe–>i]þAjgmS¦¿@£(°h81xOÌäCºwºDUÎüfÝ Æƒd)ZuyQcm½°×ÀP?[Âï¬Ø¥æO.èR[+0ú5? ñŸ°;Q‹çeîof1R‘w¼#ïݨù‰WÁë=* 4üÁ9å‡Öµ×<{ŸÝp±;oY=ÝP÷ÞR¨ã]B~w´…pâ£~{çÙ•+GûˆF ×ôøÖ«….0Õ¬MF-öýë)ž‡$èDd竾hd®|»™Vý†:ú>ƒ6ì¹À÷ÞO´ZŒÆC˜IC,XžÍ„ñ2ù*î SŸá6J;6%wRZuž]ÄsÏ`Dû´NÄöG±o ¹í5Ö²sôÔ^ë$§Ÿ54Æiª£½+Â`êúú {–Hrƒ,7t㻼ù¢ÎŒƒH¸õΤb;"®iâ÷ެ׆ƹ75¿Ì{"Ï “fZ¼JˆƒRï-Zðœkf|ì®_ïŠsú SÆíç˼öÛ„pšíú7Ö^8^_ÎÓ}ÔŠF†ëàOÙŽqñ¥\ç¢n„sHõ“Ø>~T{Hœ°=lt"<ƒ”„sºv/_y>nüðlwôCê`ÆÂDO >0×¼oJÔé|˜R;!W¸~§ð£‘¬¿Ë¤e·>ým»ÔJ9àã ÷Onø ,Šç!N#2óàälGi‰Î7‘XTƒ  ®ž±cás¶l™ê€Í]TVýo²ÛÒÛ¬ÐòÔqës‡›ý>ÀâÀ7ÄFDøªŒÄzÔ&3Uíºß¶GSD®“Þö6Ö´±ñûžùŸìˆÓ¨åjµx¾EÍÿ¥ m?dõ«5½p!TâçÐ qu©ô%­†Øüi63óEŸ¿Ð­Û’^î±OA¤P½–°ÁÔz¦JŽçhÈùA`Ù¨òµò9*úÍ€Þp¿]ž¸4{Yý’qVÙ3ñL7kÕW|3£–t­X„CX@Ó—åeÆûq1ˆëÀ…›I‹ƒï*~'ns½Ë‹[òhDº¸✋gS³”ÅöiaºŸ V¾l|øÅÕ3#lôe¼ØF‡y¬'?Y™çHQ["»¸¹ÃDÿ2¤kùgøžåZö6»IÆ^¯ ~oòðyüP¬keñ€“×2O“!.z°>ÒÄ$Ö|þ'HbxA&Ýw¶‚_½}oõ Ÿ¤iWw]C¸Þ`öGÇœväl²„e úºIÑ«t½ÙÌ7üŒÚ•³a—nxµGv°^¿•@°_ÆòÚ½ÎhŒXöN‘†CD¼é9£õ ,²î©/ì¯ëcÞIøÙ ™ ²((PǶ¤¾×€E£ä÷Àÿ³²`Éà*3U¹O€áÍò>äý†V¾öNŽ#í\óIByª„ŠúÝZÁ†Ø$®›£EŠpŒ&ˆfkÇ)çØ˜Ð¡aþ¹Ìä'´hè)JXjuI›EÅC<õ›ø²¢¨¨_jùìW1+›£¹½´¨ÎO|ôë:ÈQéÇÊ¿eQhC¼‡£Rkîo„2€¶:våæˆÿt»ŽÊ+1š,Pü¡üYöVéÃe¦eúc×ÈÌ}F± @èû ñj9,ÙJê'´pìmÞÉ÷2Ìp¤”‹Î\î§G~0þRÕ”N·çߟ°#«!°Ú•ç|"ßZê­7=j?Nwd6/…`ðâü÷>Çýšì«*à§”.gL¨1›ú ÃÁê¶q)ÜTùš¡N‰ýv?‚s`ùЙb†\Ž#4Àñ"v4æÝvÎMÅüû-¼¢Ëiû Y Þª´ŸÓÄ_Gë¨Î\Jnx›·& `ߤœÀõMà'¼n¢óʬNù"zÞaðZæ£B”LJ6»´ ¨uœŽ2aNjÄ`ÒÏ4Ñ…y…Ïq¦ë#gx…/µçn§‘òÍ %aî-›cô6&k<®|Ê^-(ˆ‘¸#|K¾y}D :JßðìvÒá©»‹ŽÈáJ µW"ÉV ¡]$Gœrä¹#ááF”µ‹¢†w¬kHçš±æxŠ“N¸ìE6yöÉ`áèUŠ;Þà0|–bÚJOæÅN„é’Dt…›OlÇ”³G+:Vi¦î ]Æ¬Ž kÓùþ¾rÇÉpFg,Ÿ2XGuqÂ#žµ-<âæÇú;É·éY<°:ynn‘p¹»·Ö•¯puˆ^‚Ë þÞ<ÇÕP¶>ºÀ1küÔhê~nÜmÊ„Ž¯ ôÒñFs•ªÏäáµK ¹ï©ýEpª[+dýx_G›ÜvâÖ¾7¹Ë‹îœÐ¯bá|¨ÙKÉ"é4¿âØÆÒ¡Ö6Nï$ižNšFë¥Ó [m;°N²RŸåº?c>g)„2HûX*ièè9ÿR°å.wÓ{Bç+x8õ>öWà·êe.”¢ñQÓœ¸Eë÷JXÉmltétož!î^ІJ±ð¾{Œ…·I:VDc޼™Apý¸a0ˆìéHæ’å÷×ÞYÓŒ¬Ùÿ?Kºg¾ endstream endobj 703 0 obj << /Type /ObjStm /N 100 /First 918 /Length 3482 /Filter /FlateDecode >> stream xÚí[Ys¹~÷¯ÐãLÝ¢µoUÔT…02ÃH€0&iÀǶÃÀüúûI¶Û[ˆ“vݪbI­å|g“ΑÝq62ÁœLJ‡Z2¥éY1mèY3ƒ¶s†YïQ[æ¢FíXµgQÔIaDǹB+=(*/ÑLꀵ^1i{ͤ“ ä×Xî-“Á×;&#L‰@ËS2êŽó‘XÃPL ‚VV‹ ˜r“ƒfÊ[@ÃT :Á2AÕÇ´ 6ðÑ2=¦µˆ"„• Ó–Ä’éD0BÞª$´ކ ÓÑSeFÇEǰÑ3 43FA12cµbT;C< 4Px†‡Æ½0ÌHã!š Ê¢á˜5–J°'š<ù¤ò;^’®$†$õB$/ cUêè–††!Ñë5õx´£FdÁkLT’…h¨¡Y”Vw<8ˆ&÷ ¦àÅCÃR( ÐÂB¿´VŠ ¨ÓÁôÀÒ-åh9AСG)Ì=©´ó€Keȃ,u9b„ü륱@æ¡éZWÃÿ¤†0b[jŽA,©É)¦JmaF'iת½³‘ÑÁ ‹* A- HxZä‚F¡e )i4µ °4†Z<K­@-òe›¨x/:Öú­% SÁ·ÑòXi¡ø´*µÈó5™ªÆ„x±ž©ˆ ” ‡÷Dž÷ïwøÉ÷Ëšñ½Á`8éðã«÷“ôü¸7øÜᆣózÄÞ ì]ñ®Ã_Ôgö ©Ì¾*² ¿"-Ú+5æí±û÷?füáÉñ‡ì~e¿ýÖÁß1½¬4°f˜>Vr-¢õ-!:QÁ›çˆ.T°Ãz)Û´¢Ò¦¡Y*)ÍZLݦŽU0 Í_9µ^µº%H+mªÕ¾Â&]iZ”¡ ®¡Zå*§7¨Ö¶„)BEûn )]…óa½¹v q\TÁ7T+låÌÕÊ–0Që0W­‰¶ÂÙ³^ÎØ¦wU˜;­ ¦Br±SÂ9]áäczSIÖbÊ–6'âtECµNWHkv«Zc+Ä–¤Õ• ¼V´©Må|§ »©?­ÇT-a*Sá3ÇÔª’qƒj[:ŒÔUlXSÉÊ‹ ªmks ]™Æ!d¤¬ù®ß)wT­•ªòȈ‘Š¢V)©A"V!ûX‹§lKxZCÖ‚gdeƒÞIÈœá)…Y𴨮—O·„›ÜsžŒ8ÐwŒ'N‚‡†«ÕziÉ~”@Fñ,üÔ µ“dr†çC]Á ®Bf¿“´n†‡Èc†ó¶ò›U[ê´´Õ3œÃNŒ;†3®Âå2Á!VµN»–à´­paMpÁÊžeaBWÑØ†ëONeZBC€Àµ2Ã)ìB¹[Ljy®À lB³“¼ g¢ª´Ì¶3{Ðï$yšÁឪÏp '[òJÜë‘ê,ŸBíneÃÍP…¢JG0îÖt¸ÎLgi®Ç3-m£lWð mÁ¸“Ûþ OYدà!f7Ùç O"ûÅ_NH¿¯-û•40á]“ê…KÄCöù)¾`üôÍß, æ•`ƒ«~ÿÝ6s†ƒI‚:°–…<÷À[æK±Ÿ¾cË!}y—Û*}mGmPâG£áÙq ©?zxÀøIýmÂÒ][Ùw·–Ò$|‚u•-ecZšt¼Æ¥ÇöðnÜ,§=0šù«éÚ¨VÓwѪtgâ¹ÌS2h³Ýœ©Ñö¥, ÍQºø,P»KÙä-—Ë ­K™{²èÂÍ„¦<09ŒD’$ÍÓ) •L«)禑t’éäu™r.³N°®PÏóR)ÕB—KÄ›jXm/( „‹ÝR˃^ÃÞ^6} LÕflÍgæqƒÊ\„§¦šdr;•äuŠ…ŸŸ–>?5º¦‚&DLv¥ šzr©®w)šôì‹h/Ò*zŽÈé¼+$u«F™H$ y«9Kdy¥Lä›c ×±¶é£V¸ÈT'Ös™{¼¥_Âñ”År$… ¸±§ï%0#:t0O;YÉY  ÕŽ~ª’®Œ—¾´¶PGŠ"‹Ê }š‡jO¿:J"=t¹ÕPA"V¬Ñh7ì—z¬ªæ4Š)ìâìÈAnÿŸÛíöOTÈÝàf¹’NZIšÑ¾š–w J]5åIŽÚ›Ê`"µ‰5úñ„…´’~OÏãp´@•­Ü?¥Mi1ýžóìÜžÏ2éÙ4f4(ÌZ×sx“²Plp–$Ð’”ŸJzβRú¦rº”úê@Y¤ 5Àÿhv¬Ò;IÂ(ÝvÞVô^„ó¤¦4!À"pN’"©tÄ(™ÃJGƒ3i^L:tª4séÂÜV„ÓÔFS"ú:/&¢d§TKr«¦}©wÁê‘ÊÜ“­’ÖÍææqc‰ƒ¡Xi>–5”Û¥$¯›_zé ù°Ÿz—“á(_)Ÿv/0òüѳÇ{Ïþ³ÿäÁ©Tèw?Ž™É3<~coïYÍî)zÿƒ¾[Þ¤«ïø¬Æ¥ÔEÌÜï^>ª{?Mè5Ühëök&pëžÔ¯`˜Øá§e¶ h|êŽènú ßãø>Èçüþˆò?ùcþ„?åÏøÁù É_ñ×¼Ëßó3~6ìüœ×<‘ãøüõð÷µæ†W#þ‘⟾_~ª¼ÇÿË?ó>¿à>è j>äC”—ü²õ†çü ñ1×_1wÜûÆ'|òiT×|òÏ_ñ¯üþçÿòëÑð׬£ƒ$£w…pÍ^ü¢a³Î÷_þùèéCèüÉ¡ëu®霎~ s}ÎïI3ÕºW ¥kÙTzQ¢°Dí==9Ímð"-§)×’DÎn#‘ÛHtôüðñÉ£$Q\/ŠS軘vLd¶Hm#Ðó—‡ONö!ЋM>gÄT ï"ÐlŸ»¸QœuÛü¯ÆF¾°ÕOùþ76|w<ÆŸyw‚Íÿ~Ô=û\Oúõ‡É´=JgÀôT8^\tgC}qÞâõ W_®ºýr^¤£œý-Žî¨$üÔÊè³³äËU=žôÀÇ—«á¤>ßO3§yrzš÷çÎ|]ô²óãhÜ'¾o|()³•Ãï¿~õøücƒ¿ë™¿k׊{\ãí«î±È-¦1`ÑÎ×€µv¼Ñ©¿¢Þ­Îü§§û‡ÇB½Ç7í?7=ó%½ºy‡%Î4¼y>„NŸ@ŸMµ¨ÊY í'Î57UZ–ËÊJªZÔÓV‘äå«¿¿þ;ééäd“¦Tù4½h]CQR.(ŠgŠRJmRÔ5'Uv±¬‘("©àjp^ÆgÃQ½Vz«(tpðæ¯SÊŽ7zM‰«1Ò¡7; =ÞdW†¹ÙºãnQ¸­"ÒÞó“ƒý—$Ü›†Æ™Óëïôª´·sé°?ncØhê÷W8¢>z£³~}6¼ü>Zo«õ`ÿðùÞSˆ·ÙMvcz½øn¼Ãx{`6îΗ#/‚mFﻣ{ëY®×Çàóa¿¹³Pœ‚oýí¬ß½Hçõü°þ8ª»[ ¿ýz<žŸÝƒ«‹÷`®÷qðÃpLz›†åËþÕ8Åæ…ï€öûÆX¬· GÇ/O_$×ÙŒ]ñCÿëîì97Ňk/coVñ‡õQ÷¦‰Óm²`‰õVX4À†(Ôø%˜:!úƒî¸N?¹®Üì•þaƒHòƒÞhù4Nÿ呿ž _ ÂyÍäöü,ß—ù‰ËüØÐà‡fìÜ}ùŽ·„®äÍÑÕöèK÷±ep}cpaná‹w§epû?0 ÑM ~°˜ª/s³ê•jÙÐE^¹œÙ.óo¾KDhŸÕ r‰#½â©&näÈ/s¤·çh9‹[ægÅy)G™ñcš‹-(h9ïZfgÕuS=¶áÍ·QÆRZ´Œ¾â¾z]5áE ÆYеËì¬x¯Þì+îìu?ÖcÄ×áEëžG)5E–¿zçcö6™€•—zl~ç'¦ôîE©kïnC^ÅLYÅDƒ~ )uyΆEín¡ó÷mL«B[Úù’€ºôçÈ|; Sh—k[0­)u~GJ;{{ _hú¯/r;èPž£¹=FÌ&6B—:ómrœf&§ÌdÞC61Lþ:42¿F,]žM·wÀ(z7N”ºðí FÑ¡ wÀ(z7e?˜˜Ÿ­(»%f¥¹5†•…FљͷötQKµÑ¥Ž·Ç°…o'K]°\Áö¥ßßAŽâ«6~Cá?ÚEwNüЦ¡š.'Tô?йÎ:a嵯ëhê&ãºIT–³.NÏŽé>/ûÚO÷É0Œ*›¬œ¯ôïÄÙèÅ‘ìTyråèEåø­õn:¹ S#N½´øÙÕ¤ûï¸Ä$ú=%#RPJÿ¯œž2qDØéâÞ× Êä=¦| m3ÎKjz4ª¿¦ÿvnÆ®¼Ú‡ùj{ÝjWh?¥wL§<Öÿè: u endstream endobj 780 0 obj << /Producer (pdfTeX-1.40.15) /Creator (TeX) /CreationDate (D:20141009153843+02'00') /ModDate (D:20141009153843+02'00') /Trapped /False /PTEX.Fullbanner (This is pdfTeX, Version 3.14159265-2.6-1.40.15 (TeX Live 2014/Debian) kpathsea version 6.2.0) >> endobj 745 0 obj << /Type /ObjStm /N 81 /First 712 /Length 2740 /Filter /FlateDecode >> stream xÚ•ZÛŽÛF}Ÿ¯à£ý0pß» ¼ãØ1Ö7x’}I–zÆ\K¤BRã™|ýV‘Õâ¥[Ì&@"’UuªÎ©êfKaeÆ2aòL9øÐ7>y&dž m3É5|ÊLæðL›±ð©3-À®xfإ͌ãWBÊÌBŒ›ƒk!t–3ð"Ë-Äó<ã Ê9fä<ãB¨L0ÎÀ˜¤p!2®¤»â9Di®2ž¸È\H¨SƒÝÉBE"¹ƒ´Ü)G ›c€E;b¡#&V€c±`æŠ0I>˜O ÕP“r®¡& :pòA®ÀÙrðQàl-– Îë‘àœc=’e’ ¨YPŽ)$|¸Ë$ "ïLJ Μòfà¬8e©!…¥Q. ä· –tF^YèÌ­¡YÑà¬y¦xÎPB: $´ÀBi:§\˜L!*ö ˆæpá2•weáF£Ö°L÷áÀ_+àBd:G˜ƒ-²FeF|¢3c¡±Ä49hŒý°‚ÃÐ Y¯,Œ—EN”w Ãaœ1- ;É!D:™ã•9eÑGgN[Œ2™39úØÌÙþ‰Ëœ3öÊB—üsõÃW/~)»½‡Ö(˜èÏW/^b»†ËOEã«®s¼ÿñÇ™?;ûCåS«êSãúÕÑß}ðNÀp÷ºlZ¼•Ãí»bzwSŸçš/R‚Tç”r5%Ÿ¦L–­ X:_ÃÒv†¥XÐü3–^Å’3,žÂÛ ù b XTåkl‘š·è=Ô¥R¬Ô¨¶’«Ñ3µUJm5ª-ó5,9S;Y—Õ–zk¦¶J©-Gµ%_ÃùK¦Ô–£ÚbUm>Ç’ ,1j/Ô|1†hªK¤¢åÍÓÑCn‘ÒWŒ<ø:Ù ѦÂhaS¢°°Å"%éòµQÃ7Ø$%OG³9VˆÊg.Íòs4³«Ñ3ò<5\ldÅÔ*–˜b¥ë[Êø ¾õ§X©³sƒyîV±f[ KŒ¾?ÏX:ÕG‡ºÑjŒ^[~<¼lHm=µs™Ã¨Q+¨™eÊ‘¼[I†”Î$ v#]§×¢íT:ªÍWÕæ³%:8q>jÏWµç3íyJ{>jÏVµg3íyJ{6jÏ.hOÑ)µÇ³g–À– =› }8vÓÐç!ɇâàÛì·g×üy6ì`Ù³kñ<ËÅp%]²çÙ°‘Ã5<·Á܇úÈVÊ.¢ée&.Á]Q¨zŽ¿Ðƒ¦kƒG7ntÈæÀË,³!(šâl9ÆæC,j(³2rxcÀ Ô*!ð&XW:¥T´Eé:Ç™“` G¸BŠmáð†x‹oòe>„E[”Ê9Q’@Iqj–äxC•H ¤ñ“o¨ ÀJFüPM0Åé4ºS­()Eü$RR)…†I¤¤Éé†ïà³l€ú,‘M!!C0 'ŽB!Ÿ0Š ùÍòq!*ÒQѧC>aîòÉ*ðÑŒdVÀGsjd0DMîp¬›eP4EÙ4ðÑ"À¼ @@HKªC+¼¡ùÕÎm ÀZGCX´Åù€PNáO˜tÀ kœ:m4Ö"¢)Je À&èhŒ  oˆ™A6¡|³-‹=zÝžŽ˜““0`?îý#_]Ÿ¿<=ÖVÆM]mý±›Ò ½S¯¢ëwþÁ÷ >×§®¬0\È1¼kÊ/øüP¥ ODámuW7‡¢+ë õrKÊ8\‚ˆ5hüšAñºÉÍÄMSvå¶lèQßáßÜÞb5´j^Õß«}]Õ‹j7¤m»b¿˜ šóŸš¦nÐú3x 6Á)ÏO w”?`’À!lž¯}Ñš^ÿø­p™È±óáWô~Ýø~P^ÕÛÆôZáƒwåÖW­Ç®R PØ5Í÷Çß<”þ;”^4o|ב ·]Ñt~‡µ÷Ÿ}±ó hÙ´¸'Ûnä—|zNñïr‘–FÚÒpXZH–ÎuvøU·ÿsÔD*¤“¯¥÷ª~Tîÿ–cø¤„1‰þ‹ýô+[@¤’èW Ko];œ¤ú?ó>eêËÕß( }1°†Ê¤oÔ–ö>KïtkòôêN+å¤/ŸÖò6'ký¤mÞÒ8Zú¥ÎÒs6þé­ïã*ô+X3mÿw,Ó_7á —½¸cß¾¾ÇŸ4ïabmø½N°{<¼M~ãìGÚŽÿ·ìÞ¿¯wñkëƒ7bÿ¨Þ° endstream endobj 781 0 obj << /Type /XRef /Index [0 782] /Size 782 /W [1 3 1] /Root 779 0 R /Info 780 0 R /ID [<8A86ACC0802D1F8AFE54B46DB11F107F> <8A86ACC0802D1F8AFE54B46DB11F107F>] /Length 1903 /Filter /FlateDecode >> stream xÚ%—Yh]×…÷:Wײl9’-[²åI²${˃$O²ÆkK–lDz-y’Iñ H- -MžJã’‡ŽBÛ´yiÓ†PÒ°¡”„Ý´4-~ $…æ-ÐÒ‡C´iÚ‡BIï·üò±÷ÚçÞ³‡õÿû?!„ð©Bh ÅÏë¨^ EMõnã/êÝ"Ï€s Ûn¹»Àh M£Ö.Ò­‚5 ¬M`XšÁðh­`#ØÚÀf°´ƒ°l`;Øv‚]`7èÝ`è½ ìû@ý`?8‚Cà0 Íò¾ °Ô3`¶ÞMã`ÌkàX)‚jk@3Ø6ƒ°Dp²Ž´ì§Á2o;Ž‚cà8'ÀC í§<¿ÑúÔb4V°ì·™¸×ë‰OÔ»åÝ 0‰6‰æå×ÀI´š÷å˜B;‰æ cùM§ÑN£y'g€wèš_yœE»ˆæ½?G»ŽæC9¼‹h>­ ‡%–Pú/y´'Ð|¾6æe´;h>ø+à*Ú]4;‚ƒjºŽvÍVY78ͺ n¡±§¥Íu,¡5¢Ùu>-ŸùZ4Ûñ àiØ¢wßfÛÞ«t±rª‡Úç¾Í &¡áñT¿ß§P¥K,$¢,5òÊÇÐ’D¼%¾$pA—ÖÓ%˜‘—6Ð%Àá—Zèt‰LéˆÉZ]ø¶ð¶]hDmò+måÝhþ?Ït]BuhdĹ¥´h^*gžúÐHP%9'á—´Ͷð6áµÄ+cYŠP þ«¸Í»‹ÇÓ!4o.im šeFÛ‰F²LÄj:ŠæòYµé8Ú‘·J—øM'èîø ɉHNXUèÞí¤ŠÇY[HS û¿à?uÍ* ¿â®“‘-ï8"z’VO×ýQ‘ƒä0¸æfœê“»n*Ìß…<µe…k¿·æZU¸óÙ ½úkM ªðŧ=Ý+t׃°Ná+[üܰ ´*|mÖšÝÔ¦ðÍ!wɵv…|ÞÝí`›Â˯¸Û ºÀ…׆ü¶«tqD­[áÂÏí{A¯Âïz¬a™µ¶Oáᯬ € ï5º{pð™|•σ9´#`Páo—ýÜ8 Žƒ£ ·x࿸Fk Kú™N€I0*µ>gm Œƒ 0 jÒ® =΀ÓRÿ—¬Í€Yð88+˜óÀ9pœ—fŸµ6Ç\®Óš¥‹ðÀ%à3Z–>²vøá«Ò½G'íu8ë-JO=o͉ñ&X·¥gžô€3á°"=h°FäåEZ÷Á]éû½¸G\´V¥Ÿ¼ˆ– ©xÉ"¯)U¤×ûÝmU€¯R£ôÖ£Ÿ­ø4'²™R³ô·Åpä0¥é/ß°Ö ìÌbH_JmÒßßö(³3ùJ©Cúן<° `½´Cúßkä02—œ¹ÈCJÝ*Ö-{>JU\ï©OEÇÇÀ˜rÓ!Я¢wÄ™»KVQPqè¯¸Ž”¡tDÅØ=p8‘¬"îs¥3Ÿø‘Q€×(S”¦À¤Š+?ôh ¸òÀp¤¥i+ Åk䥳*žÌÖðI¦Èx#a®4§âé÷<Š ¹ÙEö÷¹Ò‚Н>ð(6#‰$ %q•+-ªx0ïG|(Þÿ½­²¤â»{<ÊåÊ¥.ßâÑÚ}/¾îÖª*Ãÿ )DîîÈÅë–úé¿­qiÆ5Lœê!r#Ƶ*^}èQ®ÏجâµÜ傌›@‹Š7¬µƒ6o~Ù]î·Ø¡âáSîn\r‘{0vªøóœ HúqèRñÁË~¸ô¾`­D°WÅ~kmðõÔ¯Š­qaÄ!@ª²þøÊ:Uiÿ§5®§¼LËÐQUºÚ<àT5O‹[(Ž—c`PF*ÁHé©õâ)À§µ^äÖ³€[(žç.‰dÑH2Š$ÕHÕ/¿|\WÀUp P FJ¿xÜ·€3¬Jßw¼»v¢_Iº‰TZÑÞ ÈŠ÷õUöÃTUod ªL±E¶-ðK¦rËO™‚ ã’Ü pDÆ%™j)SSg§\’©‘2%v¦>ÈX%wl‘±J¦ˆÉ$S…gj†L‘ñKîØ"c•ÜpDÆ%y/À ƒd;bE•ãAÕ_/xmN¾¼üuB­’qI¶°E¦.É>ẋÁ UjŸøFTùúÝUå¥wÝSåͪ[㪼?îÖ„&¾åÖ¤žûž[55¼õ¬['ÕðÑûnRµé—nM©Ú÷©[Óª>ÓéÎÉ+À×ç–9·|OÕ?~†GJ–P²„’%”,¡d %K(YBÉJ \bà—¸ÄÀ¥¿lü)ão¬`àÒ5&.ý±â²—¸ÄM%.1W‰K \ú+ÆŸ-¸ÄÀ傪o/ÕOáÝçÃÿ­O6þ endstream endobj startxref 381579 %%EOF gss-1.0.3/doc/version.texi0000644000000000000000000000014212415507663012331 00000000000000@set UPDATED 9 October 2014 @set UPDATED-MONTH October 2014 @set EDITION 1.0.3 @set VERSION 1.0.3 gss-1.0.3/doc/asciidoc.conf0000664000000000000000000000633712012453517012403 00000000000000# # asciidoc.conf # # Asciidoc global configuration file. # Contains backend independent configuration settings that are applied to all # AsciiDoc documents. # [miscellaneous] tabsize=8 textwidth=70 newline=\r\n [glossary] empty= amp=& lt=< gt=> brvbar=| [titles] underlines="==","--","~~","^^","++" subs=specialcharacters,quotes,replacements,macros,glossary # The title cannot start or end with characters that could match a table ruler, # consequently the title must be 2 or more chars. blocktitle=^\.(?P[^\s\.\-~_].*[^\-~_])$ [specialcharacters] &=& <=< >=> [quotes] *=strong '=emphasis `=monospaced [specialwords] strongwords=^\s*NOTE: ^\s*TODO: ^\s*TIP: ^\s*IMPORTANT: ^\s*WARNING: [replacements] \(C\)=© \(TM\)=™ # Paragraphs. [paradef-default] delimiter=(?P<text>\S.*) section=paragraph [paradef-indented] delimiter=(?P<text>\s+.*) section=indentedparagraph presubs=specialcharacters options=listelement [macros] # Inline macros. # Note backslash prefix required for escape processing. [\\]?(?P<name>\w(\w|-)*?):(?P<target>\S*?)(\[(?P<caption>.*?)\])= # Anchor: [[id,xreflabel]] [\\]?\[\[(?P<caption>[\w"].*?)\]\]=anchor2 # Link: <<id,text>> [\\]?<<(?P<caption>[\w"].*?)>>=xref2 # Block macros. ^(?P<name>\w(\w|-)*?)::(?P<target>\S*?)(\[(?P<caption>.*?)\])$=# # Builtin macros. ^(?P<name>\w(\w|-)*?)::(?P<target>\S*?)(\[(?P<caption>.*?)\])$=+ # Delimited blocks. [blockdef-comment] delimiter=^/{3,} options=skip [blockdef-sidebar] delimiter=^\*{3,}(\[(?P<args>.*)\])?\**$ section=sidebarblock options=section,argsline [blockdef-custom] delimiter=^\+{3,}(\[(?P<args>.*)\])?\+*$ section=customblock presubs=macros,glossary [blockdef-verbatim] delimiter=^-{3,}(\[(?P<args>.*)\])?-*$ section=verbatimblock presubs=specialcharacters [blockdef-indented] delimiter=^\.{3,}(\[(?P<args>.*)\])?\.*$ section=indentedblock presubs=specialcharacters [blockdef-quote] delimiter=^_{3,}(\[(?P<args>.*)\])?_*$ section=quoteblock options=section,argsline # Lists. [listdef-itemized] type=simple delimiter=^\s*- {1,}(?P<text>.+)$ listtag=ilist itemtag=ilistitem texttag=ilisttext [listdef-ordered] type=simple delimiter=^\s*\d*\. {1,}(?P<text>.+)$ listtag=olist itemtag=olistitem texttag=olisttext [listdef-variable] type=variable delimiter=^\s*(?P<text>[\S].*)::$ listtag=vlist itemtag=vlistitem texttag=vlisttext entrytag=vlistentry termtag=vlistterm [listdef-qanda] # Question and Answer list. type=variable delimiter=^\s*(?P<text>[\S].*)\?\?$ listtag=qlist itemtag=qlistitem texttag=qlisttext entrytag=qlistentry termtag=qlistterm # Bibliography list. [listdef-bibliography] type=simple delimiter=^\+ {1,}(?P<text>.+)$ listtag=blist itemtag=blistitem texttag=blisttext # Glossary list. [listdef-glossary] type=variable delimiter=^(?P<text>[\S].*):-$ listtag=glist itemtag=glistitem texttag=glisttext entrytag=glistentry termtag=glistterm # Alternative list syntaxes. [listdef-itemized2] type=simple delimiter=^\s*\* {1,}(?P<text>.+)$ listtag=ilist itemtag=ilistitem texttag=ilisttext [listdef-ordered2] type=simple delimiter=^\s*[.a-z]\. {1,}(?P<text>.+)$ listtag=olist2 itemtag=olistitem texttag=olisttext # Tables. [tabledef-default] fillchar=- format=fixed [tabledef-csv] fillchar=~ format=csv [tabledef-dsv] fillchar=_ format=dsv �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gss-1.0.3/doc/gss.texi������������������������������������������������������������������������������0000664�0000000�0000000�00000215315�12415506237�011450� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������\input texinfo @c -*- mode: texinfo; coding: us-ascii; -*- @c This file is part of the GNU Generic Security Service Library. @c See below for copyright and license. @setfilename gss.info @include version.texi @settitle GNU Generic Security Service Library @finalout @c Unify some of the indices. @syncodeindex tp fn @syncodeindex pg fn @syncodeindex vr fn @copying This manual is last updated @value{UPDATED} for version @value{VERSION} of GNU GSS. Copyright @copyright{} 2003-2014 Simon Josefsson. @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 GNU Libraries @direntry * gss: (gss). Generic Security Service API Library @end direntry @titlepage @title GNU Generic Security Service Library @subtitle GSS-API Library for the GNU system @subtitle for version @value{VERSION}, @value{UPDATED} @author Simon Josefsson @page @vskip 0pt plus 1filll @insertcopying @end titlepage @contents @ifnottex @node Top @top GNU Generic Security Service Library @insertcopying @end ifnottex @menu * Introduction:: How to use this manual. * Preparation:: What you should do before using the library. * Standard GSS API:: Reference documentation for the Standard API. * Extended GSS API:: Non-standard functions. * Invoking gss:: Command line interface to the library. * Acknowledgements:: Whom to blame. Appendices * Criticism of GSS:: Why you maybe shouldn't use GSS. * Copying Information:: How you can copy and share GSS. Indices * Concept Index:: Index of concepts and programs. * API Index:: Index of functions, variables and data types. @end menu @c ********************************************************** @c ******************* Introduction *********************** @c ********************************************************** @node Introduction @chapter Introduction GSS is an implementation of the Generic Security Service Application Program Interface (GSS-API). GSS-API is used by network servers to provide security services, e.g., to authenticate SMTP/IMAP clients against SMTP/IMAP servers. GSS consists of a library and a manual. GSS is developed for the GNU/Linux system, but runs on over 20 platforms including most major Unix platforms and Windows, and many kind of devices including iPAQ handhelds and S/390 mainframes. GSS is a GNU project, and is licensed under the GNU General Public License version 3 or later. @menu * Getting Started:: * Features:: * GSS-API Overview:: * Supported Platforms:: * Commercial Support:: * Downloading and Installing:: * Bug Reports:: * Contributing:: * Planned Features:: @end menu @node Getting Started @section Getting Started This manual documents the GSS programming interface. All functions and data types provided by the library are explained. The reader is assumed to possess basic familiarity with GSS-API and network programming in C or C++. For general GSS-API information, and some programming examples, there is a guide available online at @url{http://docs.sun.com/db/doc/816-1331}. This manual can be used in several ways. If read from the beginning to the end, it gives a good introduction into the library and how it can be used in an application. Forward references are included where necessary. Later on, the manual can be used as a reference manual to get just the information needed about any particular interface of the library. Experienced programmers might want to start looking at the examples at the end of the manual, and then only read up those parts of the interface which are unclear. @node Features @section Features GSS might have a couple of advantages over other libraries doing a similar job. @table @asis @item It's Free Software Anybody can use, modify, and redistribute it under the terms of the GNU General Public License version 3 or later. @item It's thread-safe No global variables are used and multiple library handles and session handles may be used in parallell. @item It's internationalized It handles non-ASCII names and user visible strings used in the library (e.g., error messages) can be translated into the users' language. @item It's portable It should work on all Unix like operating systems, including Windows. @end table @node GSS-API Overview @section GSS-API Overview This section describes GSS-API from a protocol point of view. The Generic Security Service Application Programming Interface provides security services to calling applications. It allows a communicating application to authenticate the user associated with another application, to delegate rights to another application, and to apply security services such as confidentiality and integrity on a per-message basis. There are four stages to using the GSS-API: @enumerate @item The application acquires a set of credentials with which it may prove its identity to other processes. The application's credentials vouch for its global identity, which may or may not be related to any local username under which it may be running. @item A pair of communicating applications establish a joint security context using their credentials. The security context is a pair of GSS-API data structures that contain shared state information, which is required in order that per-message security services may be provided. Examples of state that might be shared between applications as part of a security context are cryptographic keys, and message sequence numbers. As part of the establishment of a security context, the context initiator is authenticated to the responder, and may require that the responder is authenticated in turn. The initiator may optionally give the responder the right to initiate further security contexts, acting as an agent or delegate of the initiator. This transfer of rights is termed delegation, and is achieved by creating a set of credentials, similar to those used by the initiating application, but which may be used by the responder. To establish and maintain the shared information that makes up the security context, certain GSS-API calls will return a token data structure, which is an opaque data type that may contain cryptographically protected data. The caller of such a GSS-API routine is responsible for transferring the token to the peer application, encapsulated if necessary in an application- application protocol. On receipt of such a token, the peer application should pass it to a corresponding GSS-API routine which will decode the token and extract the information, updating the security context state information accordingly. @item Per-message services are invoked to apply either: integrity and data origin authentication, or confidentiality, integrity and data origin authentication to application data, which are treated by GSS-API as arbitrary octet-strings. An application transmitting a message that it wishes to protect will call the appropriate GSS-API routine (gss_get_mic or gss_wrap) to apply protection, specifying the appropriate security context, and send the resulting token to the receiving application. The receiver will pass the received token (and, in the case of data protected by gss_get_mic, the accompanying message-data) to the corresponding decoding routine (gss_verify_mic or gss_unwrap) to remove the protection and validate the data. @item At the completion of a communications session (which may extend across several transport connections), each application calls a GSS-API routine to delete the security context. Multiple contexts may also be used (either successively or simultaneously) within a single communications association, at the option of the applications. @end enumerate @node Supported Platforms @section Supported Platforms GSS has at some point in time been tested on the following platforms. @enumerate @item Debian GNU/Linux 3.0 (Woody) @cindex Debian GCC 2.95.4 and GNU Make. This is the main development platform. @code{alphaev67-unknown-linux-gnu}, @code{alphaev6-unknown-linux-gnu}, @code{arm-unknown-linux-gnu}, @code{hppa-unknown-linux-gnu}, @code{hppa64-unknown-linux-gnu}, @code{i686-pc-linux-gnu}, @code{ia64-unknown-linux-gnu}, @code{m68k-unknown-linux-gnu}, @code{mips-unknown-linux-gnu}, @code{mipsel-unknown-linux-gnu}, @code{powerpc-unknown-linux-gnu}, @code{s390-ibm-linux-gnu}, @code{sparc-unknown-linux-gnu}. @item Debian GNU/Linux 2.1 @cindex Debian GCC 2.95.1 and GNU Make. @code{armv4l-unknown-linux-gnu}. @item Tru64 UNIX @cindex Tru64 Tru64 UNIX C compiler and Tru64 Make. @code{alphaev67-dec-osf5.1}, @code{alphaev68-dec-osf5.1}. @item SuSE Linux 7.1 @cindex SuSE GCC 2.96 and GNU Make. @code{alphaev6-unknown-linux-gnu}, @code{alphaev67-unknown-linux-gnu}. @item SuSE Linux 7.2a @cindex SuSE Linux GCC 3.0 and GNU Make. @code{ia64-unknown-linux-gnu}. @item RedHat Linux 7.2 @cindex RedHat GCC 2.96 and GNU Make. @code{alphaev6-unknown-linux-gnu}, @code{alphaev67-unknown-linux-gnu}, @code{ia64-unknown-linux-gnu}. @item RedHat Linux 8.0 @cindex RedHat GCC 3.2 and GNU Make. @code{i686-pc-linux-gnu}. @item RedHat Advanced Server 2.1 @cindex RedHat Advanced Server GCC 2.96 and GNU Make. @code{i686-pc-linux-gnu}. @item Slackware Linux 8.0.01 @cindex RedHat GCC 2.95.3 and GNU Make. @code{i686-pc-linux-gnu}. @item Mandrake Linux 9.0 @cindex Mandrake GCC 3.2 and GNU Make. @code{i686-pc-linux-gnu}. @item IRIX 6.5 @cindex IRIX MIPS C compiler, IRIX Make. @code{mips-sgi-irix6.5}. @item AIX 4.3.2 @cindex AIX IBM C for AIX compiler, AIX Make. @code{rs6000-ibm-aix4.3.2.0}. @item Microsoft Windows 2000 (Cygwin) @cindex Windows GCC 3.2, GNU make. @code{i686-pc-cygwin}. @item HP-UX 11 @cindex HP-UX HP-UX C compiler and HP Make. @code{ia64-hp-hpux11.22}, @code{hppa2.0w-hp-hpux11.11}. @item SUN Solaris 2.8 @cindex Solaris Sun WorkShop Compiler C 6.0 and SUN Make. @code{sparc-sun-solaris2.8}. @item NetBSD 1.6 @cindex NetBSD GCC 2.95.3 and GNU Make. @code{alpha-unknown-netbsd1.6}, @code{i386-unknown-netbsdelf1.6}. @item OpenBSD 3.1 and 3.2 @cindex OpenBSD GCC 2.95.3 and GNU Make. @code{alpha-unknown-openbsd3.1}, @code{i386-unknown-openbsd3.1}. @item FreeBSD 4.7 @cindex FreeBSD GCC 2.95.4 and GNU Make. @code{alpha-unknown-freebsd4.7}, @code{i386-unknown-freebsd4.7}. @item Cross compiled to uClinux/uClibc on Motorola Coldfire. @cindex Motorola Coldfire @cindex uClinux @cindex uClibc GCC 3.4 and GNU Make @code{m68k-uclinux-elf}. @end enumerate If you use GSS on, or port GSS to, a new platform please report it to the author. @node Commercial Support @section Commercial Support Commercial support is available for users of GNU GSS. The kind of support that can be purchased may include: @itemize @item Implement new features. Such as a new GSS-API mechanism. @item Port GSS to new platforms. This could include porting to an embedded platforms that may need memory or size optimization. @item Integrating GSS as a security environment in your existing project. @item System design of components related to GSS-API. @end itemize If you are interested, please write to: @verbatim Simon Josefsson Datakonsult AB Hagagatan 24 113 47 Stockholm Sweden E-mail: simon@josefsson.org @end verbatim If your company provides support related to GNU GSS and would like to be mentioned here, contact the author (@pxref{Bug Reports}). @node Downloading and Installing @section Downloading and Installing @cindex Installation @cindex Download The package can be downloaded from several places, including: @url{ftp://ftp.gnu.org/gnu/gss/} The latest version is stored in a file, e.g., @samp{gss-@value{VERSION}.tar.gz} where the @samp{@value{VERSION}} indicate the highest version number. The package is then extracted, configured and built like many other packages that use Autoconf. For detailed information on configuring and building it, refer to the @file{INSTALL} file that is part of the distribution archive. Here is an example terminal session that downloads, configures, builds and installs the package. You will need a few basic tools, such as @samp{sh}, @samp{make} and @samp{cc}. @example $ wget -q ftp://ftp.gnu.org/gnu/gss/gss-@value{VERSION}.tar.gz $ tar xfz gss-@value{VERSION}.tar.gz $ cd gss-@value{VERSION}/ $ ./configure ... $ make ... $ make install ... @end example After that GSS should be properly installed and ready for use. @node Bug Reports @section Bug Reports @cindex Reporting Bugs If you think you have found a bug in GSS, please investigate it and report it. @itemize @bullet @item Please make sure that the bug is really in GSS, and preferably also check that it hasn't already been fixed in the latest version. @item You have to send us a test case that makes it possible for us to reproduce the bug. @item You also have to explain what is wrong; if you get a crash, or if the results printed are not good and in that case, in what way. Make sure that the bug report includes all information you would need to fix this kind of bug for someone else. @end itemize Please make an effort to produce a self-contained report, with something definite that can be tested or debugged. Vague queries or piecemeal messages are difficult to act on and don't help the development effort. If your bug report is good, we will do our best to help you to get a corrected version of the software; if the bug report is poor, we won't do anything about it (apart from asking you to send better bug reports). If you think something in this manual is unclear, or downright incorrect, or if the language needs to be improved, please also send a note. Send your bug report to: @center @samp{bug-gss@@gnu.org} @node Contributing @section Contributing @cindex Contributing @cindex Hacking If you want to submit a patch for inclusion -- from solve a typo you discovered, up to adding support for a new feature -- you should submit it as a bug report (@pxref{Bug Reports}). There are some things that you can do to increase the chances for it to be included in the official package. Unless your patch is very small (say, under 10 lines) we require that you assign the copyright of your work to the Free Software Foundation. This is to protect the freedom of the project. If you have not already signed papers, we will send you the necessary information when you submit your contribution. For contributions that doesn't consist of actual programming code, the only guidelines are common sense. Use it. For code contributions, a number of style guides will help you: @itemize @bullet @item Coding Style. Follow the GNU Standards document (@pxref{top, GNU Coding Standards,, standards}). If you normally code using another coding standard, there is no problem, but you should use @samp{indent} to reformat the code (@pxref{top, GNU Indent,, indent}) before submitting your work. @item Use the unified diff format @samp{diff -u}. @item Return errors. No reason whatsoever should abort the execution of the library. Even memory allocation errors, e.g. when malloc return NULL, should work although result in an error code. @item Design with thread safety in mind. Don't use global variables. Don't even write to per-handle global variables unless the documented behaviour of the function you write is to write to the per-handle global variable. @item Avoid using the C math library. It causes problems for embedded implementations, and in most situations it is very easy to avoid using it. @item Document your functions. Use comments before each function headers, that, if properly formatted, are extracted into Texinfo manuals and GTK-DOC web pages. @item Supply a ChangeLog and NEWS entries, where appropriate. @end itemize @node Planned Features @section Planned Features @cindex Todo list @cindex Future goals This is also known as the ``todo list''. If you like to start working on anything, please let me know so work duplication can be avoided. @itemize @item Support non-blocking mode. This would be an API extension. It could work by forking a process and interface to it, or by using a user-specific daemon. E.g., h = START(accept_sec_context(...)), FINISHED(h), ret = FINISH(h), ABORT(h). @item Support loadable modules via dlopen, a'la Solaris GSS. @item Port to Cyclone? CCured? @end itemize @c ********************************************************** @c ******************* Preparation ************************ @c ********************************************************** @node Preparation @chapter Preparation To use GSS, you have to perform some changes to your sources and the build system. The necessary changes are small and explained in the following sections. At the end of this chapter, it is described how the library is initialized, and how the requirements of the library are verified. A faster way to find out how to adapt your application for use with GSS may be to look at the examples at the end of this manual. @menu * Header:: * Initialization:: * Version Check:: * Building the source:: * Out of Memory handling:: @end menu @node Header @section Header @cindex Header files All standard interfaces (data types and functions) of the official GSS API are defined in the header file @file{gss/api.h}. The file is taken verbatim from the RFC (after correcting a few typos) where it is known as @file{gssapi.h}. However, to be able to co-exist gracefully with other GSS-API implementation, the name @file{gssapi.h} was changed. The header file @file{gss.h} includes @file{gss/api.h}, and declares a few non-standard extensions (by including @file{gss/ext.h}), takes care of including header files related to all supported mechanisms (e.g., @file{gss/krb5.h}) and finally adds C++ namespace protection of all definitions. Therefore, including @file{gss.h} in your project is recommended over @file{gss/api.h}. If using @file{gss.h} instead of @file{gss/api.h} causes problems, it should be regarded a bug. You must include either file in all programs using the library, either directly or through some other header file, like this: @example #include <gss.h> @end example The name space of GSS is @code{gss_*} for function names, @code{gss_*} for data types and @code{GSS_*} for other symbols. In addition the same name prefixes with one prepended underscore are reserved for internal use and should never be used by an application. Each supported GSS mechanism may want to expose mechanism specific functionality, and can do so through one or more header files under the @file{gss/} directory. The Kerberos 5 mechanism uses the file @file{gss/krb5.h}, but again, it is included (with C++ namespace fixes) from @file{gss.h}. @node Initialization @section Initialization GSS does not need to be initialized before it can be used. In order to take advantage of the internationalisation features in GSS, e.g. translated error messages, the application must set the current locale using @code{setlocale()} before calling, e.g., @code{gss_display_status()}. This is typically done in @code{main()} as in the following example. @example #include <gss.h> #include <locale.h> ... setlocale (LC_ALL, ""); @end example @node Version Check @section Version Check It is often desirable to check that the version of GSS used is indeed one which fits all requirements. Even with binary compatibility new features may have been introduced but due to problem with the dynamic linker an old version is actually used. So you may want to check that the version is okay right after program startup. The function is called @code{gss_check_version()} and is described formally in @xref{Extended GSS API}. The normal way to use the function is to put something similar to the following early in your @code{main()}: @example #include <gss.h> ... if (!gss_check_version (GSS_VERSION)) @{ printf ("gss_check_version() failed:\n" "Header file incompatible with shared library.\n"); exit(EXIT_FAILURE); @} @end example @node Building the source @section Building the source @cindex Compiling your application If you want to compile a source file that includes the @file{gss.h} header file, you must make sure that the compiler can find it in the directory hierarchy. This is accomplished by adding the path to the directory in which the header file is located to the compilers include file search path (via the @option{-I} option). However, the path to the include file is determined at the time the source is configured. To solve this problem, GSS uses the external package @command{pkg-config} that knows the path to the include file and other configuration options. The options that need to be added to the compiler invocation at compile time are output by the @option{--cflags} option to @command{pkg-config gss}. The following example shows how it can be used at the command line: @example gcc -c foo.c `pkg-config gss --cflags` @end example Adding the output of @samp{pkg-config gss --cflags} to the compilers command line will ensure that the compiler can find the @file{gss.h} header file. A similar problem occurs when linking the program with the library. Again, the compiler has to find the library files. For this to work, the path to the library files has to be added to the library search path (via the @option{-L} option). For this, the option @option{--libs} to @command{pkg-config gss} can be used. For convenience, this option also outputs all other options that are required to link the program with the GSS libarary (for instance, the @samp{-lshishi} option). The example shows how to link @file{foo.o} with GSS into a program @command{foo}. @example gcc -o foo foo.o `pkg-config gss --libs` @end example Of course you can also combine both examples to a single command by specifying both options to @command{pkg-config}: @example gcc -o foo foo.c `pkg-config gss --cflags --libs` @end example @node Out of Memory handling @section Out of Memory handling @cindex Out of Memory handling @cindex Memory allocation failure The GSS API does not have a standard error code for the out of memory error condition. This library will return @code{GSS_S_FAILURE} and set @code{minor_status} to ENOMEM. @c ********************************************************** @c ************** Generic Security Services **************** @c ********************************************************** @node Standard GSS API @chapter Standard GSS API @menu * Simple Data Types:: About integers, strings, OIDs, and OID sets. * Complex Data Types:: About credentials, contexts, names, etc. * Optional Parameters:: What value to use when you don't want one. * Error Handling:: How errors in GSS are reported and handled. * Credential Management:: Standard GSS credential functions. * Context-Level Routines:: Standard GSS context functions. * Per-Message Routines:: Standard GSS per-message functions. * Name Manipulation:: Standard GSS name manipulation functions. * Miscellaneous Routines:: Standard miscellaneous functions. * SASL GS2 Routines:: Standard SASL GS2 related functions. @end menu @node Simple Data Types @section Simple Data Types The following conventions are used by the GSS-API C-language bindings: @subsection Integer types GSS-API uses the following integer data type: @verbatim OM_uint32 32-bit unsigned integer @end verbatim @subsection String and similar data Many of the GSS-API routines take arguments and return values that describe contiguous octet-strings. All such data is passed between the GSS-API and the caller using the @code{gss_buffer_t} data type. This data type is a pointer to a buffer descriptor, which consists of a length field that contains the total number of bytes in the datum, and a value field which contains a pointer to the actual datum: @verbatim typedef struct gss_buffer_desc_struct { size_t length; void *value; } gss_buffer_desc, *gss_buffer_t; @end verbatim Storage for data returned to the application by a GSS-API routine using the @code{gss_buffer_t} conventions is allocated by the GSS-API routine. The application may free this storage by invoking the @code{gss_release_buffer} routine. Allocation of the @code{gss_buffer_desc} object is always the responsibility of the application; unused @code{gss_buffer_desc} objects may be initialized to the value @code{GSS_C_EMPTY_BUFFER}. @subsubsection Opaque data types Certain multiple-word data items are considered opaque data types at the GSS-API, because their internal structure has no significance either to the GSS-API or to the caller. Examples of such opaque data types are the input_token parameter to @code{gss_init_sec_context} (which is opaque to the caller), and the input_message parameter to @code{gss_wrap} (which is opaque to the GSS-API). Opaque data is passed between the GSS-API and the application using the @code{gss_buffer_t} datatype. @subsubsection Character strings Certain multiple-word data items may be regarded as simple ISO Latin-1 character strings. Examples are the printable strings passed to @code{gss_import_name} via the input_name_buffer parameter. Some GSS-API routines also return character strings. All such character strings are passed between the application and the GSS-API implementation using the @code{gss_buffer_t} datatype, which is a pointer to a @code{gss_buffer_desc} object. When a @code{gss_buffer_desc} object describes a printable string, the length field of the @code{gss_buffer_desc} should only count printable characters within the string. In particular, a trailing NUL character should NOT be included in the length count, nor should either the GSS-API implementation or the application assume the presence of an uncounted trailing NUL. @subsection Object Identifiers @anchor{Object Identifiers} Certain GSS-API procedures take parameters of the type @code{gss_OID}, or Object identifier. This is a type containing ISO-defined tree- structured values, and is used by the GSS-API caller to select an underlying security mechanism and to specify namespaces. A value of type @code{gss_OID} has the following structure: @verbatim typedef struct gss_OID_desc_struct { OM_uint32 length; void *elements; } gss_OID_desc, *gss_OID; @end verbatim The elements field of this structure points to the first byte of an octet string containing the ASN.1 BER encoding of the value portion of the normal BER TLV encoding of the @code{gss_OID}. The length field contains the number of bytes in this value. For example, the @code{gss_OID} value corresponding to @code{iso(1) identified-organization(3) icd-ecma(12) member-company(2) dec(1011) cryptoAlgorithms(7) DASS(5)}, meaning the DASS X.509 authentication mechanism, has a length field of 7 and an elements field pointing to seven octets containing the following octal values: 53,14,2,207,163,7,5. GSS-API implementations should provide constant @code{gss_OID} values to allow applications to request any supported mechanism, although applications are encouraged on portability grounds to accept the default mechanism. @code{gss_OID} values should also be provided to allow applications to specify particular name types (see section 3.10). Applications should treat @code{gss_OID_desc} values returned by GSS-API routines as read-only. In particular, the application should not attempt to deallocate them with free(). @subsection Object Identifier Sets Certain GSS-API procedures take parameters of the type @code{gss_OID_set}. This type represents one or more object identifiers (@pxref{Object Identifiers}). A @code{gss_OID_set} object has the following structure: @verbatim typedef struct gss_OID_set_desc_struct { size_t count; gss_OID elements; } gss_OID_set_desc, *gss_OID_set; @end verbatim The count field contains the number of OIDs within the set. The elements field is a pointer to an array of @code{gss_OID_desc} objects, each of which describes a single OID. @code{gss_OID_set} values are used to name the available mechanisms supported by the GSS-API, to request the use of specific mechanisms, and to indicate which mechanisms a given credential supports. All OID sets returned to the application by GSS-API are dynamic objects (the @code{gss_OID_set_desc}, the "elements" array of the set, and the "elements" array of each member OID are all dynamically allocated), and this storage must be deallocated by the application using the @code{gss_release_oid_set} routine. @node Complex Data Types @section Complex Data Types @subsection Credentials A credential handle is a caller-opaque atomic datum that identifies a GSS-API credential data structure. It is represented by the caller- opaque type @code{gss_cred_id_t}. GSS-API credentials can contain mechanism-specific principal authentication data for multiple mechanisms. A GSS-API credential is composed of a set of credential-elements, each of which is applicable to a single mechanism. A credential may contain at most one credential-element for each supported mechanism. A credential-element identifies the data needed by a single mechanism to authenticate a single principal, and conceptually contains two credential-references that describe the actual mechanism-specific authentication data, one to be used by GSS-API for initiating contexts, and one to be used for accepting contexts. For mechanisms that do not distinguish between acceptor and initiator credentials, both references would point to the same underlying mechanism-specific authentication data. Credentials describe a set of mechanism-specific principals, and give their holder the ability to act as any of those principals. All principal identities asserted by a single GSS-API credential should belong to the same entity, although enforcement of this property is an implementation-specific matter. The GSS-API does not make the actual credentials available to applications; instead a credential handle is used to identify a particular credential, held internally by GSS-API. The combination of GSS-API credential handle and mechanism identifies the principal whose identity will be asserted by the credential when used with that mechanism. The @code{gss_init_sec_context} and @code{gss_accept_sec_context} routines allow the value @code{GSS_C_NO_CREDENTIAL} to be specified as their credential handle parameter. This special credential-handle indicates a desire by the application to act as a default principal. @subsection Contexts The @code{gss_ctx_id_t} data type contains a caller-opaque atomic value that identifies one end of a GSS-API security context. The security context holds state information about each end of a peer communication, including cryptographic state information. @subsection Authentication tokens A token is a caller-opaque type that GSS-API uses to maintain synchronization between the context data structures at each end of a GSS-API security context. The token is a cryptographically protected octet-string, generated by the underlying mechanism at one end of a GSS-API security context for use by the peer mechanism at the other end. Encapsulation (if required) and transfer of the token are the responsibility of the peer applications. A token is passed between the GSS-API and the application using the @code{gss_buffer_t} conventions. @subsection Interprocess tokens Certain GSS-API routines are intended to transfer data between processes in multi-process programs. These routines use a caller-opaque octet-string, generated by the GSS-API in one process for use by the GSS-API in another process. The calling application is responsible for transferring such tokens between processes in an OS-specific manner. Note that, while GSS-API implementors are encouraged to avoid placing sensitive information within interprocess tokens, or to cryptographically protect them, many implementations will be unable to avoid placing key material or other sensitive data within them. It is the application's responsibility to ensure that interprocess tokens are protected in transit, and transferred only to processes that are trustworthy. An interprocess token is passed between the GSS-API and the application using the @code{gss_buffer_t} conventions. @subsection Names A name is used to identify a person or entity. GSS-API authenticates the relationship between a name and the entity claiming the name. Since different authentication mechanisms may employ different namespaces for identifying their principals, GSSAPI's naming support is necessarily complex in multi-mechanism environments (or even in some single-mechanism environments where the underlying mechanism supports multiple namespaces). Two distinct representations are defined for names: @itemize @item An internal form. This is the GSS-API "native" format for names, represented by the implementation-specific @code{gss_name_t} type. It is opaque to GSS-API callers. A single @code{gss_name_t} object may contain multiple names from different namespaces, but all names should refer to the same entity. An example of such an internal name would be the name returned from a call to the @code{gss_inquire_cred} routine, when applied to a credential containing credential elements for multiple authentication mechanisms employing different namespaces. This @code{gss_name_t} object will contain a distinct name for the entity for each authentication mechanism. For GSS-API implementations supporting multiple namespaces, objects of type @code{gss_name_t} must contain sufficient information to determine the namespace to which each primitive name belongs. @item Mechanism-specific contiguous octet-string forms. A format capable of containing a single name (from a single namespace). Contiguous string names are always accompanied by an object identifier specifying the namespace to which the name belongs, and their format is dependent on the authentication mechanism that employs the name. Many, but not all, contiguous string names will be printable, and may therefore be used by GSS-API applications for communication with their users. @end itemize Routines (@code{gss_import_name} and @code{gss_display_name}) are provided to convert names between contiguous string representations and the internal @code{gss_name_t} type. @code{gss_import_name} may support multiple syntaxes for each supported namespace, allowing users the freedom to choose a preferred name representation. @code{gss_display_name} should use an implementation-chosen printable syntax for each supported name-type. If an application calls @code{gss_display_name}, passing the internal name resulting from a call to @code{gss_import_name}, there is no guarantee the resulting contiguous string name will be the same as the original imported string name. Nor do name-space identifiers necessarily survive unchanged after a journey through the internal name-form. An example of this might be a mechanism that authenticates X.500 names, but provides an algorithmic mapping of Internet DNS names into X.500. That mechanism's implementation of @code{gss_import_name} might, when presented with a DNS name, generate an internal name that contained both the original DNS name and the equivalent X.500 name. Alternatively, it might only store the X.500 name. In the latter case, @code{gss_display_name} would most likely generate a printable X.500 name, rather than the original DNS name. The process of authentication delivers to the context acceptor an internal name. Since this name has been authenticated by a single mechanism, it contains only a single name (even if the internal name presented by the context initiator to @code{gss_init_sec_context} had multiple components). Such names are termed internal mechanism names, or "MN"s and the names emitted by @code{gss_accept_sec_context} are always of this type. Since some applications may require MNs without wanting to incur the overhead of an authentication operation, a second function, @code{gss_canonicalize_name}, is provided to convert a general internal name into an MN. Comparison of internal-form names may be accomplished via the @code{gss_compare_name} routine, which returns true if the two names being compared refer to the same entity. This removes the need for the application program to understand the syntaxes of the various printable names that a given GSS-API implementation may support. Since GSS-API assumes that all primitive names contained within a given internal name refer to the same entity, @code{gss_compare_name} can return true if the two names have at least one primitive name in common. If the implementation embodies knowledge of equivalence relationships between names taken from different namespaces, this knowledge may also allow successful comparison of internal names containing no overlapping primitive elements. When used in large access control lists, the overhead of invoking @code{gss_import_name} and @code{gss_compare_name} on each name from the ACL may be prohibitive. As an alternative way of supporting this case, GSS-API defines a special form of the contiguous string name which may be compared directly (e.g. with memcmp()). Contiguous names suitable for comparison are generated by the @code{gss_export_name} routine, which requires an MN as input. Exported names may be re- imported by the @code{gss_import_name} routine, and the resulting internal name will also be an MN. The @code{gss_OID} constant @code{GSS_C_NT_EXPORT_NAME} indentifies the "export name" type, and the value of this constant is given in Appendix A. Structurally, an exported name object consists of a header containing an OID identifying the mechanism that authenticated the name, and a trailer containing the name itself, where the syntax of the trailer is defined by the individual mechanism specification. The precise format of an export name is defined in the language-independent GSS-API specification [GSSAPI]. Note that the results obtained by using @code{gss_compare_name} will in general be different from those obtained by invoking @code{gss_canonicalize_name} and @code{gss_export_name}, and then comparing the exported names. The first series of operation determines whether two (unauthenticated) names identify the same principal; the second whether a particular mechanism would authenticate them as the same principal. These two operations will in general give the same results only for MNs. The @code{gss_name_t} datatype should be implemented as a pointer type. To allow the compiler to aid the application programmer by performing type-checking, the use of (void *) is discouraged. A pointer to an implementation-defined type is the preferred choice. Storage is allocated by routines that return @code{gss_name_t} values. A procedure, @code{gss_release_name}, is provided to free storage associated with an internal-form name. @subsection Channel Bindings GSS-API supports the use of user-specified tags to identify a given context to the peer application. These tags are intended to be used to identify the particular communications channel that carries the context. Channel bindings are communicated to the GSS-API using the following structure: @verbatim typedef struct gss_channel_bindings_struct { OM_uint32 initiator_addrtype; gss_buffer_desc initiator_address; OM_uint32 acceptor_addrtype; gss_buffer_desc acceptor_address; gss_buffer_desc application_data; } *gss_channel_bindings_t; @end verbatim The initiator_addrtype and acceptor_addrtype fields denote the type of addresses contained in the initiator_address and acceptor_address buffers. The address type should be one of the following: @verbatim GSS_C_AF_UNSPEC Unspecified address type GSS_C_AF_LOCAL Host-local address type GSS_C_AF_INET Internet address type (e.g. IP) GSS_C_AF_IMPLINK ARPAnet IMP address type GSS_C_AF_PUP pup protocols (eg BSP) address type GSS_C_AF_CHAOS MIT CHAOS protocol address type GSS_C_AF_NS XEROX NS address type GSS_C_AF_NBS nbs address type GSS_C_AF_ECMA ECMA address type GSS_C_AF_DATAKIT datakit protocols address type GSS_C_AF_CCITT CCITT protocols GSS_C_AF_SNA IBM SNA address type GSS_C_AF_DECnet DECnet address type GSS_C_AF_DLI Direct data link interface address type GSS_C_AF_LAT LAT address type GSS_C_AF_HYLINK NSC Hyperchannel address type GSS_C_AF_APPLETALK AppleTalk address type GSS_C_AF_BSC BISYNC 2780/3780 address type GSS_C_AF_DSS Distributed system services address type GSS_C_AF_OSI OSI TP4 address type GSS_C_AF_X25 X.25 GSS_C_AF_NULLADDR No address specified @end verbatim Note that these symbols name address families rather than specific addressing formats. For address families that contain several alternative address forms, the initiator_address and acceptor_address fields must contain sufficient information to determine which address form is used. When not otherwise specified, addresses should be specified in network byte-order (that is, native byte-ordering for the address family). Conceptually, the GSS-API concatenates the initiator_addrtype, initiator_address, acceptor_addrtype, acceptor_address and application_data to form an octet string. The mechanism calculates a MIC over this octet string, and binds the MIC to the context establishment token emitted by @code{gss_init_sec_context}. The same bindings are presented by the context acceptor to @code{gss_accept_sec_context}, and a MIC is calculated in the same way. The calculated MIC is compared with that found in the token, and if the MICs differ, @code{gss_accept_sec_context} will return a @code{GSS_S_BAD_BINDINGS} error, and the context will not be established. Some mechanisms may include the actual channel binding data in the token (rather than just a MIC); applications should therefore not use confidential data as channel-binding components. Individual mechanisms may impose additional constraints on addresses and address types that may appear in channel bindings. For example, a mechanism may verify that the initiator_address field of the channel bindings presented to @code{gss_init_sec_context} contains the correct network address of the host system. Portable applications should therefore ensure that they either provide correct information for the address fields, or omit addressing information, specifying @code{GSS_C_AF_NULLADDR} as the address-types. @node Optional Parameters @section Optional Parameters Various parameters are described as optional. This means that they follow a convention whereby a default value may be requested. The following conventions are used for omitted parameters. These conventions apply only to those parameters that are explicitly documented as optional. @itemize @item gss_buffer_t types. Specify GSS_C_NO_BUFFER as a value. For an input parameter this signifies that default behavior is requested, while for an output parameter it indicates that the information that would be returned via the parameter is not required by the application. @item Integer types (input). Individual parameter documentation lists values to be used to indicate default actions. @item Integer types (output). Specify NULL as the value for the pointer. @item Pointer types. Specify NULL as the value. @item Object IDs. Specify GSS_C_NO_OID as the value. @item Object ID Sets. Specify GSS_C_NO_OID_SET as the value. @item Channel Bindings. Specify GSS_C_NO_CHANNEL_BINDINGS to indicate that channel bindings are not to be used. @end itemize @node Error Handling @section Error Handling @cindex status codes @cindex mechanism status codes Every GSS-API routine returns two distinct values to report status information to the caller: GSS status codes and Mechanism status codes. @subsection GSS status codes GSS-API routines return GSS status codes as their @code{OM_uint32} function value. These codes indicate errors that are independent of the underlying mechanism(s) used to provide the security service. The errors that can be indicated via a GSS status code are either generic API routine errors (errors that are defined in the GSS-API specification) or calling errors (errors that are specific to these language bindings). A GSS status code can indicate a single fatal generic API error from the routine and a single calling error. In addition, supplementary status information may be indicated via the setting of bits in the supplementary info field of a GSS status code. These errors are encoded into the 32-bit GSS status code as follows: @verbatim MSB LSB |------------------------------------------------------------| | Calling Error | Routine Error | Supplementary Info | |------------------------------------------------------------| Bit 31 24 23 16 15 0 @end verbatim Hence if a GSS-API routine returns a GSS status code whose upper 16 bits contain a non-zero value, the call failed. If the calling error field is non-zero, the invoking application's call of the routine was erroneous. Calling errors are defined in table 3-1. If the routine error field is non-zero, the routine failed for one of the routine- specific reasons listed below in table 3-2. Whether or not the upper 16 bits indicate a failure or a success, the routine may indicate additional information by setting bits in the supplementary info field of the status code. The meaning of individual bits is listed below in table 3-3. @vindex GSS_S_... @verbatim Table 3-1 Calling Errors Name Value in field Meaning ---- -------------- ------- GSS_S_CALL_INACCESSIBLE_READ 1 A required input parameter could not be read GSS_S_CALL_INACCESSIBLE_WRITE 2 A required output parameter could not be written. GSS_S_CALL_BAD_STRUCTURE 3 A parameter was malformed @end verbatim @verbatim Table 3-2 Routine Errors Name Value in field Meaning ---- -------------- ------- GSS_S_BAD_MECH 1 An unsupported mechanism was requested GSS_S_BAD_NAME 2 An invalid name was supplied GSS_S_BAD_NAMETYPE 3 A supplied name was of an unsupported type GSS_S_BAD_BINDINGS 4 Incorrect channel bindings were supplied GSS_S_BAD_STATUS 5 An invalid status code was supplied GSS_S_BAD_MIC GSS_S_BAD_SIG 6 A token had an invalid MIC GSS_S_NO_CRED 7 No credentials were supplied, or the credentials were unavailable or inaccessible. GSS_S_NO_CONTEXT 8 No context has been established GSS_S_DEFECTIVE_TOKEN 9 A token was invalid GSS_S_DEFECTIVE_CREDENTIAL 10 A credential was invalid GSS_S_CREDENTIALS_EXPIRED 11 The referenced credentials have expired GSS_S_CONTEXT_EXPIRED 12 The context has expired GSS_S_FAILURE 13 Miscellaneous failure (see text) GSS_S_BAD_QOP 14 The quality-of-protection requested could not be provided GSS_S_UNAUTHORIZED 15 The operation is forbidden by local security policy GSS_S_UNAVAILABLE 16 The operation or option is unavailable GSS_S_DUPLICATE_ELEMENT 17 The requested credential element already exists GSS_S_NAME_NOT_MN 18 The provided name was not a mechanism name @end verbatim @verbatim Table 3-3 Supplementary Status Bits Name Bit Number Meaning ---- ---------- ------- GSS_S_CONTINUE_NEEDED 0 (LSB) Returned only by gss_init_sec_context or gss_accept_sec_context. The routine must be called again to complete its function. See routine documentation for detailed description GSS_S_DUPLICATE_TOKEN 1 The token was a duplicate of an earlier token GSS_S_OLD_TOKEN 2 The token's validity period has expired GSS_S_UNSEQ_TOKEN 3 A later token has already been processed GSS_S_GAP_TOKEN 4 An expected per-message token was not received @end verbatim The routine documentation also uses the name GSS_S_COMPLETE, which is a zero value, to indicate an absence of any API errors or supplementary information bits. @findex GSS_CALLING_ERROR @findex GSS_ROUTINE_ERROR @findex GSS_SUPPLEMENTARY_INFO @findex GSS_ERROR All GSS_S_xxx symbols equate to complete @code{OM_uint32} status codes, rather than to bitfield values. For example, the actual value of the symbol @code{GSS_S_BAD_NAMETYPE} (value 3 in the routine error field) is 3<<16. The macros @code{GSS_CALLING_ERROR}, @code{GSS_ROUTINE_ERROR} and @code{GSS_SUPPLEMENTARY_INFO} are provided, each of which takes a GSS status code and removes all but the relevant field. For example, the value obtained by applying @code{GSS_ROUTINE_ERROR} to a status code removes the calling errors and supplementary info fields, leaving only the routine errors field. The values delivered by these macros may be directly compared with a @code{GSS_S_xxx} symbol of the appropriate type. The macro @code{GSS_ERROR} is also provided, which when applied to a GSS status code returns a non-zero value if the status code indicated a calling or routine error, and a zero value otherwise. All macros defined by GSS-API evaluate their argument(s) exactly once. A GSS-API implementation may choose to signal calling errors in a platform-specific manner instead of, or in addition to the routine value; routine errors and supplementary info should be returned via major status values only. The GSS major status code @code{GSS_S_FAILURE} is used to indicate that the underlying mechanism detected an error for which no specific GSS status code is defined. The mechanism-specific status code will provide more details about the error. In addition to the explicit major status codes for each API function, the code @code{GSS_S_FAILURE} may be returned by any routine, indicating an implementation-specific or mechanism-specific error condition, further details of which are reported via the @code{minor_status} parameter. @subsection Mechanism-specific status codes GSS-API routines return a minor_status parameter, which is used to indicate specialized errors from the underlying security mechanism. This parameter may contain a single mechanism-specific error, indicated by a @code{OM_uint32} value. The minor_status parameter will always be set by a GSS-API routine, even if it returns a calling error or one of the generic API errors indicated above as fatal, although most other output parameters may remain unset in such cases. However, output parameters that are expected to return pointers to storage allocated by a routine must always be set by the routine, even in the event of an error, although in such cases the GSS-API routine may elect to set the returned parameter value to NULL to indicate that no storage was actually allocated. Any length field associated with such pointers (as in a @code{gss_buffer_desc} structure) should also be set to zero in such cases. @node Credential Management @section Credential Management @verbatim GSS-API Credential-management Routines Routine Function ------- -------- gss_acquire_cred Assume a global identity; Obtain a GSS-API credential handle for pre-existing credentials. gss_add_cred Construct credentials incrementally. gss_inquire_cred Obtain information about a credential. gss_inquire_cred_by_mech Obtain per-mechanism information about a credential. gss_release_cred Discard a credential handle. @end verbatim @include texi/gss_acquire_cred.texi @include texi/gss_add_cred.texi @include texi/gss_inquire_cred.texi @include texi/gss_inquire_cred_by_mech.texi @include texi/gss_release_cred.texi @node Context-Level Routines @section Context-Level Routines @verbatim GSS-API Context-Level Routines Routine Function ------- -------- gss_init_sec_context Initiate a security context with a peer application. gss_accept_sec_context Accept a security context initiated by a peer application. gss_delete_sec_context Discard a security context. gss_process_context_token Process a token on a security context from a peer application. gss_context_time Determine for how long a context will remain valid. gss_inquire_context Obtain information about a security context. gss_wrap_size_limit Determine token-size limit for gss_wrap on a context. gss_export_sec_context Transfer a security context to another process. gss_import_sec_context Import a transferred context. @end verbatim @include texi/gss_init_sec_context.texi @include texi/gss_accept_sec_context.texi @include texi/gss_delete_sec_context.texi @include texi/gss_process_context_token.texi @include texi/gss_context_time.texi @include texi/gss_inquire_context.texi @include texi/gss_wrap_size_limit.texi @include texi/gss_export_sec_context.texi @include texi/gss_import_sec_context.texi @node Per-Message Routines @section Per-Message Routines @verbatim GSS-API Per-message Routines Routine Function ------- -------- gss_get_mic Calculate a cryptographic message integrity code (MIC) for a message; integrity service. gss_verify_mic Check a MIC against a message; verify integrity of a received message. gss_wrap Attach a MIC to a message, and optionally encrypt the message content. confidentiality service gss_unwrap Verify a message with attached MIC, and decrypt message content if necessary. @end verbatim @include texi/gss_get_mic.texi @include texi/gss_verify_mic.texi @include texi/gss_wrap.texi @include texi/gss_unwrap.texi @node Name Manipulation @section Name Manipulation @verbatim GSS-API Name manipulation Routines Routine Function ------- -------- gss_import_name Convert a contiguous string name to internal-form. gss_display_name Convert internal-form name to text. gss_compare_name Compare two internal-form names. gss_release_name Discard an internal-form name. gss_inquire_names_for_mech List the name-types supported by. the specified mechanism. gss_inquire_mechs_for_name List mechanisms that support the specified name-type. gss_canonicalize_name Convert an internal name to an MN. gss_export_name Convert an MN to export form. gss_duplicate_name Create a copy of an internal name. @end verbatim @include texi/gss_import_name.texi @include texi/gss_display_name.texi @include texi/gss_compare_name.texi @include texi/gss_release_name.texi @include texi/gss_inquire_names_for_mech.texi @include texi/gss_inquire_mechs_for_name.texi @include texi/gss_canonicalize_name.texi @include texi/gss_export_name.texi @include texi/gss_duplicate_name.texi @node Miscellaneous Routines @section Miscellaneous Routines @verbatim GSS-API Miscellaneous Routines Routine Function ------- -------- gss_add_oid_set_member Add an object identifier to a set. gss_display_status Convert a GSS-API status code to text. gss_indicate_mechs Determine available underlying authentication mechanisms. gss_release_buffer Discard a buffer. gss_release_oid_set Discard a set of object identifiers. gss_create_empty_oid_set Create a set containing no object identifiers. gss_test_oid_set_member Determines whether an object identifier is a member of a set. gss_encapsulate_token Encapsulate a context token. gss_decapsulate_token Decapsulate a context token. gss_oid_equal Compare two OIDs for equality. @end verbatim @include texi/gss_add_oid_set_member.texi @include texi/gss_display_status.texi @include texi/gss_indicate_mechs.texi @include texi/gss_release_buffer.texi @include texi/gss_release_oid_set.texi @include texi/gss_create_empty_oid_set.texi @include texi/gss_test_oid_set_member.texi @include texi/gss_encapsulate_token.texi @include texi/gss_decapsulate_token.texi @include texi/gss_oid_equal.texi @node SASL GS2 Routines @section SASL GS2 Routines @include texi/gss_inquire_mech_for_saslname.texi @include texi/gss_inquire_saslname_for_mech.texi @c ********************************************************** @c ************** Generic Security Services **************** @c ********************************************************** @node Extended GSS API @chapter Extended GSS API None of the following functions are standard GSS API functions. As such, they are not declared in @file{gss/api.h}, but rather in @file{gss/ext.h} (which is included from @file{gss.h}). @xref{Header}. @include texi/gss_check_version.texi @include texi/gss_userok.texi @c ********************************************************** @c ********************* Invoking gss ********************* @c ********************************************************** @node Invoking gss @chapter Invoking gss @pindex gss @cindex invoking @command{gss} @cindex command line @majorheading Name GNU GSS (gss) -- Command line interface to the GSS Library. @majorheading Description @code{gss} is the main program of GNU GSS. Mandatory or optional arguments to long options are also mandatory or optional for any corresponding short options. @majorheading Commands @code{gss} recognizes these commands: @verbatim -l, --list-mechanisms List information about supported mechanisms in a human readable format. -m, --major=LONG Describe a `major status' error code value. -a, --accept-sec-context Accept a security context as server. -i, --init-sec-context=MECH Initialize a security context as client. MECH is the SASL name of mechanism, use -l to list supported mechanisms. -n, --server-name=SERVICE@HOSTNAME For -i, set the name of the remote host. For example, "imap@mail.example.com". @end verbatim @majorheading Other Options These are some standard parameters. @verbatim -h, --help Print help and exit -V, --version Print version and exit -q, --quiet Silent operation (default=off) @end verbatim @majorheading Examples To list the supported mechanisms, use @code{gss -l} like this: @verbatim $ src/gss -l Found 1 supported mechanisms. Mechanism 0: Mechanism name: Kerberos V5 Mechanism description: Kerberos V5 GSS-API mechanism SASL Mechanism name: GS2-KRB5 $ @end verbatim To initialize a Kerberos V5 security context, use the @code{--init-sec-context} parameter. Kerberos V5 needs to know the name of the remote entity, so you need to supply the @code{--server-name} parameter as well. That will provide the name of the server. For example, use @code{imap@@mail.example.com} to setup a security context with the @code{imap} service on the host @code{mail.example.com}. The Kerberos V5 client will use your ticket-granting ticket (which needs to be available) and acquire a server ticket for the service. The KDC must know about the server for this to work. The tool will print the GSS-API context tokens base64 encoded on standard output. @verbatim $ gss -i GS2-KRB5 -n host@interop.josefsson.org Context token (protection is available): YIICIQYJKoZIhvcSAQICAQBuggIQMIICDKADAgEFoQMCAQ6iBwMFACAAAACjggEYYYIBFDCCARCgAwIBBaEXGxVpbnRlcm9wLmpvc2Vmc3Nvbi5vcmeiKDAmoAMCAQGhHzAdGwRob3N0GxVpbnRlcm9wLmpvc2Vmc3Nvbi5vcmejgcUwgcKgAwIBEqKBugSBt0zqTh6tBBKV2BwDjQg6H4abEaPshPa0o3tT/TH9U7BaSw/M9ugYYqpHAhOitVjcQidhG2FdSl1n3FOgDBufHHO+gHOW0Y1XHc2QtEdkg1xYF2J4iR1vNQB14kXDM78pogCsfvfLnjsEESKWoeKRGOYWPRx0ksLJDnl/e5tXecZTjhJ3hLrFNBEWRmpIOakTAPnL+Xzz6xcnLHMLLnhZ5VcHqtIMm5p9IDWsP0juIncJ6tO8hjMA2qSB2jCB16ADAgESooHPBIHMWSeRBgV80gh/6hNNMr00jTVwCs5TEAIkljvjOfyPmNBzIFWoG+Wj5ZKOBdizdi7vYbJ2s8b1iSsq/9YEZSqaTxul+5aNrclKoJ7J/IW4kTuMklHcQf/A16TeZFsm9TdfE+x8+PjbOBFtKYXT8ODT8LLicNNiDbWW0meY7lsktXAVpZiUds4wTZ1W5bOSEGY7+mxAWrAlTnNwNAt1J2MHZnfGJFJDLJZldXoyG8OwHyp4h1nBhgzC5BfAmL85QJVxxgVfiHhM5oT9mE1O Input context token: @end verbatim The tool is waiting for the final Kerberos V5 context token from the server. Note the status text informing you that message protection is available. To accept a Kerberos V5 context, the process is similar. The server needs to know its name, so that it can find the host key from (typically) @code{/etc/shishi/shishi.keys}. Once started it will wait for a context token from the client. Below we'll paste in the token printed above. @verbatim $ gss -a -n host@interop.josefsson.org Importing name "host@interop.josefsson.org"... Acquiring credentials... Input context token: YIICIQYJKoZIhvcSAQICAQBuggIQMIICDKADAgEFoQMCAQ6iBwMFACAAAACjggEYYYIBFDCCARCgAwIBBaEXGxVpbnRlcm9wLmpvc2Vmc3Nvbi5vcmeiKDAmoAMCAQGhHzAdGwRob3N0GxVpbnRlcm9wLmpvc2Vmc3Nvbi5vcmejgcUwgcKgAwIBEqKBugSBt0zqTh6tBBKV2BwDjQg6H4abEaPshPa0o3tT/TH9U7BaSw/M9ugYYqpHAhOitVjcQidhG2FdSl1n3FOgDBufHHO+gHOW0Y1XHc2QtEdkg1xYF2J4iR1vNQB14kXDM78pogCsfvfLnjsEESKWoeKRGOYWPRx0ksLJDnl/e5tXecZTjhJ3hLrFNBEWRmpIOakTAPnL+Xzz6xcnLHMLLnhZ5VcHqtIMm5p9IDWsP0juIncJ6tO8hjMA2qSB2jCB16ADAgESooHPBIHMWSeRBgV80gh/6hNNMr00jTVwCs5TEAIkljvjOfyPmNBzIFWoG+Wj5ZKOBdizdi7vYbJ2s8b1iSsq/9YEZSqaTxul+5aNrclKoJ7J/IW4kTuMklHcQf/A16TeZFsm9TdfE+x8+PjbOBFtKYXT8ODT8LLicNNiDbWW0meY7lsktXAVpZiUds4wTZ1W5bOSEGY7+mxAWrAlTnNwNAt1J2MHZnfGJFJDLJZldXoyG8OwHyp4h1nBhgzC5BfAmL85QJVxxgVfiHhM5oT9mE1O Context has been accepted. Final context token: YHEGCSqGSIb3EgECAgIAb2IwYKADAgEFoQMCAQ+iVDBSoAMCARKhAwIBAKJGBESy1Zoy9DrG+DuV/6aWmAp79s9d+ofGXC/WKOzRuxAqo98vMRWbsbILW8z9aF1th4GZz0kjFz/hZAmnWyomZ9JiP3yQvg== $ @end verbatim Returning to the client, you may now cut'n'paste the final context token as shown by the server. The client has then authenticated the server as well. The output from the client is shown below. @verbatim YHEGCSqGSIb3EgECAgIAb2IwYKADAgEFoQMCAQ+iVDBSoAMCARKhAwIBAKJGBESy1Zoy9DrG+DuV/6aWmAp79s9d+ofGXC/WKOzRuxAqo98vMRWbsbILW8z9aF1th4GZz0kjFz/hZAmnWyomZ9JiP3yQvg== Context has been initialized. $ @end verbatim @c ********************************************************** @c ******************* Acknowledgements ******************* @c ********************************************************** @node Acknowledgements @chapter Acknowledgements This manual borrows text from RFC 2743 and RFC 2744 that describe GSS API formally. @c ********************************************************** @c ******************* Appendices ************************* @c ********************************************************** @node Criticism of GSS @appendix Criticism of GSS The author has doubts whether GSS is the best solution for free software projects looking for a implementation agnostic security framework. We express these doubts in this section, so that the reader can judge for herself if any of the potential problems discussed here are relevant for their project, or if the benefit outweigh the problems. We are aware that some of the opinions are highly subjective, but we offer them in the hope they can serve as anecdotal evidence. GSS can be criticized on several levels. We start with the actual implementation. GSS does not appear to be designed by experienced C programmers. While generally this may be a good thing (C is not the best language), but since they defined the API in C, it is unfortunate. The primary evidence of this is the major_status and minor_status error code solution. It is a complicated way to describe error conditions, but what makes matters worse, the error condition is separated; half of the error condition is in the function return value and the other half is in the first argument to the function, which is always a pointer to an integer. (The pointer is not even allowed to be @code{NULL}, if the application doesn't care about the minor error code.) This makes the API unreadable, and difficult to use. A better solutions would be to return a struct containing the entire error condition, which can be accessed using macros, although we acknowledge that the C language used at the time GSS was designed may not have allowed this (this may in fact be the reason the awkward solution was chosen). Instead, the return value could have been passed back to callers using a pointer to a struct, accessible using various macros, and the function could have a void prototype. The fact that minor_status is placed first in the parameter list increases the pain it is to use the API. Important parameters should be placed first. A better place for minor_status (if it must be present at all) would have been last in the prototypes. Another evidence of the C inexperience are the memory management issues; GSS provides functions to deallocate data stored within, e.g., @code{gss_buffer_t} but the caller is responsible of deallocating the structure pointed at by the @code{gss_buffer_t} (i.e., the @code{gss_buffer_desc}) itself. Memory management issues are error prone, and this division easily leads to memory leaks (or worse). Instead, the API should be the sole owner of all @code{gss_ctx_id_t}, @code{gss_cred_id_t}, and @code{gss_buffer_t} structures: they should be allocated by the library, and deallocated (using the utility functions defined for this purpose) by the library. TBA: specification is unclear how memory for OIDs are managed. For example, who is responsible for deallocate potentially newly allocated OIDs returned as @code{actual_mechs} in @code{gss_acquire_cred}? Further, are OIDs deeply copied into OID sets? In other words, if I add an OID into an OID set, and modify the original OID, will the OID in the OID set be modified too? Another illustrating example is the sample GSS header file given in the RFC, which contains: @example /* * We have included the xom.h header file. Verify that OM_uint32 * is defined correctly. */ #if sizeof(gss_uint32) != sizeof(OM_uint32) #error Incompatible definition of OM_uint32 from xom.h #endif @end example The C pre-processor does not know about the @code{sizeof} function, so it is treated as an identifier, which maps to 0. Thus, the expression does not check that the size of @code{OM_uint32} is correct. It checks whether the expression @code{0 != 0} holds. TBA: thread issues TBA: multiple mechanisms in a GSS library TBA: high-level design criticism. TBA: no credential forwarding. TBA: internationalization TBA: dynamically generated OIDs and memory deallocation issue. I.e., should gss_import_name or gss_duplicate_name allocate memory and copy the OID provided, or simply copy the pointer? If the former, who would deallocate that memory? If the latter, the application may deallocate or modify the OID, which seem unwanted. TBA: krb5: no way to access authorization-data TBA: krb5: firewall/pre-IP: iakerb status? TBA: krb5: single-DES only TBA: the API may block, unusable in select() based servers. Especially if the servers contacted is decided by the, yet unauthenticated, remote client. TBA: krb5: no support for GSS_C_PROT_READY_FLAG. We support it anyway, though. TBA: krb5: gssapi-cfx differ from rfc 1964 in the reply token in that the latter require presence of sequence numbers whereas the former doesn't. Finally we note that few free security applications uses GSS, perhaps the only major exception to this are Kerberos 5 implementations. While not substantial evidence, this do suggest that the GSS may not be the simplest solution available to solve actual problems, since otherwise more projects would have chosen to take advantage of the work that went into GSS instead of using another framework (or designing their own solution). Our conclusion is that free software projects that are looking for a security framework should evaluate carefully whether GSS actually is the best solution before using it. In particular it is recommended to compare GSS with the Simple Authentication and Security Layer (SASL) framework, which in several situations provide the same feature as GSS does. The most compelling argument for SASL over GSS is, as its acronym suggest, Simple, whereas GSS is far from it. However, that said, for free software projects that wants to support Kerberos 5, we do acknowledge that no other framework provides a more portable and interoperable interface into the Kerberos 5 system. If your project needs to use Kerberos 5 specifically, we do recommend you to use GSS instead of the Kerberos 5 implementation specific APIs. @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 API Index @unnumbered API Index @printindex fn @bye �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gss-1.0.3/config.h.in�������������������������������������������������������������������������������0000644�0000000�0000000�00000052033�12415507620�011226� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* config.h.in. Generated from configure.ac by autoheader. */ /* Define to 1 if translation of program messages to the user's native language is requested. */ #undef ENABLE_NLS /* Define to a C preprocessor expression that evaluates to 1 or 0, depending whether the gnulib module fscanf shall be considered present. */ #undef GNULIB_FSCANF /* Define to a C preprocessor expression that evaluates to 1 or 0, depending whether the gnulib module scanf shall be considered present. */ #undef GNULIB_SCANF /* Define to a C preprocessor expression that evaluates to 1 or 0, depending whether the gnulib module strerror shall be considered present. */ #undef GNULIB_STRERROR /* Define to 1 when the gnulib module getopt-gnu should be tested. */ #undef GNULIB_TEST_GETOPT_GNU /* Define to 1 when the gnulib module memchr should be tested. */ #undef GNULIB_TEST_MEMCHR /* Define to 1 when the gnulib module strerror should be tested. */ #undef GNULIB_TEST_STRERROR /* Define to 1 when the gnulib module strverscmp should be tested. */ #undef GNULIB_TEST_STRVERSCMP /* Define to 1 if you have the <bp-sym.h> header file. */ #undef HAVE_BP_SYM_H /* Define to 1 if you have the Mac OS X function CFLocaleCopyCurrent in the CoreFoundation framework. */ #undef HAVE_CFLOCALECOPYCURRENT /* Define to 1 if you have the Mac OS X function CFPreferencesCopyAppValue in the CoreFoundation framework. */ #undef HAVE_CFPREFERENCESCOPYAPPVALUE /* Define if the GNU dcgettext() function is already present or preinstalled. */ #undef HAVE_DCGETTEXT /* 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 `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 declaration of `strerror_r', and to 0 if you don't. */ #undef HAVE_DECL_STRERROR_R /* 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 if the GNU gettext() function is already present or preinstalled. */ #undef HAVE_GETTEXT /* Define if you have the iconv() function and it works. */ #undef HAVE_ICONV /* Define to 1 if you have the <inttypes.h> header file. */ #undef HAVE_INTTYPES_H /* Define if you have the libshishi library. */ #undef HAVE_LIBSHISHI /* Define to 1 if mmap()'s MAP_ANONYMOUS flag is available after including config.h and <sys/mman.h>. */ #undef HAVE_MAP_ANONYMOUS /* Define to 1 if you have the <memory.h> header file. */ #undef HAVE_MEMORY_H /* Define to 1 if you have the `mprotect' function. */ #undef HAVE_MPROTECT /* Define to 1 on MSVC platforms that have the "invalid parameter handler" concept. */ #undef HAVE_MSVC_INVALID_PARAMETER_HANDLER /* Define to 1 if chdir is declared even after undefining macros. */ #undef HAVE_RAW_DECL_CHDIR /* Define to 1 if chown is declared even after undefining macros. */ #undef HAVE_RAW_DECL_CHOWN /* Define to 1 if dprintf is declared even after undefining macros. */ #undef HAVE_RAW_DECL_DPRINTF /* Define to 1 if dup is declared even after undefining macros. */ #undef HAVE_RAW_DECL_DUP /* 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 fdatasync is declared even after undefining macros. */ #undef HAVE_RAW_DECL_FDATASYNC /* Define to 1 if ffsl is declared even after undefining macros. */ #undef HAVE_RAW_DECL_FFSL /* Define to 1 if ffsll is declared even after undefining macros. */ #undef HAVE_RAW_DECL_FFSLL /* Define to 1 if fpurge is declared even after undefining macros. */ #undef HAVE_RAW_DECL_FPURGE /* Define to 1 if fseeko is declared even after undefining macros. */ #undef HAVE_RAW_DECL_FSEEKO /* Define to 1 if fsync is declared even after undefining macros. */ #undef HAVE_RAW_DECL_FSYNC /* Define to 1 if ftello is declared even after undefining macros. */ #undef HAVE_RAW_DECL_FTELLO /* 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 getdelim is declared even after undefining macros. */ #undef HAVE_RAW_DECL_GETDELIM /* 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 getline is declared even after undefining macros. */ #undef HAVE_RAW_DECL_GETLINE /* 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 gets is declared even after undefining macros. */ #undef HAVE_RAW_DECL_GETS /* Define to 1 if getusershell is declared even after undefining macros. */ #undef HAVE_RAW_DECL_GETUSERSHELL /* Define to 1 if group_member is declared even after undefining macros. */ #undef HAVE_RAW_DECL_GROUP_MEMBER /* Define to 1 if isatty is declared even after undefining macros. */ #undef HAVE_RAW_DECL_ISATTY /* 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 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 pclose is declared even after undefining macros. */ #undef HAVE_RAW_DECL_PCLOSE /* Define to 1 if pipe is declared even after undefining macros. */ #undef HAVE_RAW_DECL_PIPE /* Define to 1 if pipe2 is declared even after undefining macros. */ #undef HAVE_RAW_DECL_PIPE2 /* Define to 1 if popen is declared even after undefining macros. */ #undef HAVE_RAW_DECL_POPEN /* Define to 1 if pread is declared even after undefining macros. */ #undef HAVE_RAW_DECL_PREAD /* Define to 1 if pwrite is declared even after undefining macros. */ #undef HAVE_RAW_DECL_PWRITE /* 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 renameat is declared even after undefining macros. */ #undef HAVE_RAW_DECL_RENAMEAT /* Define to 1 if rmdir is declared even after undefining macros. */ #undef HAVE_RAW_DECL_RMDIR /* Define to 1 if sethostname is declared even after undefining macros. */ #undef HAVE_RAW_DECL_SETHOSTNAME /* 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 snprintf is declared even after undefining macros. */ #undef HAVE_RAW_DECL_SNPRINTF /* 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 strerror_r is declared even after undefining macros. */ #undef HAVE_RAW_DECL_STRERROR_R /* 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 strtok_r is declared even after undefining macros. */ #undef HAVE_RAW_DECL_STRTOK_R /* 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 tmpfile is declared even after undefining macros. */ #undef HAVE_RAW_DECL_TMPFILE /* 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 usleep is declared even after undefining macros. */ #undef HAVE_RAW_DECL_USLEEP /* Define to 1 if vdprintf is declared even after undefining macros. */ #undef HAVE_RAW_DECL_VDPRINTF /* Define to 1 if vsnprintf is declared even after undefining macros. */ #undef HAVE_RAW_DECL_VSNPRINTF /* 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 `strerror_r' function. */ #undef HAVE_STRERROR_R /* 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 you have the `strverscmp' function. */ #undef HAVE_STRVERSCMP /* Define to 1 if you have the <sys/mman.h> header file. */ #undef HAVE_SYS_MMAN_H /* Define to 1 if you have the <sys/socket.h> header file. */ #undef HAVE_SYS_SOCKET_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 if you have the 'wchar_t' type. */ #undef HAVE_WCHAR_T /* Define to 1 if you have the <winsock2.h> header file. */ #undef HAVE_WINSOCK2_H /* Define to 1 if the system has the type `_Bool'. */ #undef HAVE__BOOL /* Define to 1 if you have the `_set_invalid_parameter_handler' function. */ #undef HAVE__SET_INVALID_PARAMETER_HANDLER /* Define to the sub-directory in which libtool stores uninstalled libraries. */ #undef LT_OBJDIR /* Define to a substitute value for mmap()'s MAP_ANONYMOUS flag. */ #undef MAP_ANONYMOUS /* 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 /* Gettext translation domain suffix. */ #undef PO_SUFFIX /* Define to 1 if strerror(0) does not return a message implying success. */ #undef REPLACE_STRERROR_0 /* Define to 1 if you have the ANSI C header files. */ #undef STDC_HEADERS /* Define to 1 if strerror_r returns char *. */ #undef STRERROR_R_CHAR_P /* Define to 1 if you want Kerberos 5 mech. */ #undef USE_KERBEROS5 /* Enable extensions on AIX 3, Interix. */ #ifndef _ALL_SOURCE # undef _ALL_SOURCE #endif /* Enable general extensions on OS X. */ #ifndef _DARWIN_C_SOURCE # undef _DARWIN_C_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 X/Open extensions if necessary. HP-UX 11.11 defines mbstate_t only if _XOPEN_SOURCE is defined to 500, regardless of whether compiling with -Ae or -D_HPUX_SOURCE=1. */ #ifndef _XOPEN_SOURCE # undef _XOPEN_SOURCE #endif /* Enable general extensions on Solaris. */ #ifndef __EXTENSIONS__ # undef __EXTENSIONS__ #endif /* Version number of package */ #undef VERSION /* Define to 1 if on MINIX. */ #undef _MINIX /* Define to 1 to make NetBSD features available. MINIX 3 needs this. */ #undef _NETBSD_SOURCE /* The _Noreturn keyword of C11. */ #if ! (defined _Noreturn \ || (defined __STDC_VERSION__ && 201112 <= __STDC_VERSION__)) # if (3 <= __GNUC__ || (__GNUC__ == 2 && 8 <= __GNUC_MINOR__) \ || 0x5110 <= __SUNPRO_C) # define _Noreturn __attribute__ ((__noreturn__)) # elif defined _MSC_VER && 1200 <= _MSC_VER # define _Noreturn __declspec (noreturn) # else # define _Noreturn # endif #endif /* 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 rpl_ if the getopt replacement functions and variables should be used. */ #undef __GETOPT_PREFIX /* Please see the Gnulib manual for how to use these macros. Suppress extern inline with HP-UX cc, as it appears to be broken; see <http://lists.gnu.org/archive/html/bug-texinfo/2013-02/msg00030.html>. Suppress extern inline with Sun C in standards-conformance mode, as it mishandles inline functions that call each other. E.g., for 'inline void f (void) { } inline void g (void) { f (); }', c99 incorrectly complains 'reference to static identifier "f" in extern inline function'. This bug was observed with Sun C 5.12 SunOS_i386 2011/11/16. Suppress the use of extern inline on problematic Apple configurations. OS X 10.8 and earlier mishandle it; see, e.g., <http://lists.gnu.org/archive/html/bug-gnulib/2012-12/msg00023.html>. OS X 10.9 has a macro __header_inline indicating the bug is fixed for C and for clang but remains for g++; see <http://trac.macports.org/ticket/41033>. Perhaps Apple will fix this some day. */ #if (defined __APPLE__ \ && (defined __header_inline \ ? (defined __cplusplus && defined __GNUC_STDC_INLINE__ \ && ! defined __clang__) \ : ((! defined _DONT_USE_CTYPE_INLINE_ \ && (defined __GNUC__ || defined __cplusplus)) \ || (defined _FORTIFY_SOURCE && 0 < _FORTIFY_SOURCE \ && defined __GNUC__ && ! defined __cplusplus)))) # define _GL_EXTERN_INLINE_APPLE_BUG #endif #if ((__GNUC__ \ ? defined __GNUC_STDC_INLINE__ && __GNUC_STDC_INLINE__ \ : (199901L <= __STDC_VERSION__ \ && !defined __HP_cc \ && !(defined __SUNPRO_C && __STDC__))) \ && !defined _GL_EXTERN_INLINE_APPLE_BUG) # define _GL_INLINE inline # define _GL_EXTERN_INLINE extern inline # define _GL_EXTERN_INLINE_IN_USE #elif (2 < __GNUC__ + (7 <= __GNUC_MINOR__) && !defined __STRICT_ANSI__ \ && !defined _GL_EXTERN_INLINE_APPLE_BUG) # if defined __GNUC_GNU_INLINE__ && __GNUC_GNU_INLINE__ /* __gnu_inline__ suppresses a GCC 4.2 diagnostic. */ # define _GL_INLINE extern inline __attribute__ ((__gnu_inline__)) # else # define _GL_INLINE extern inline # endif # define _GL_EXTERN_INLINE extern # define _GL_EXTERN_INLINE_IN_USE #else # define _GL_INLINE static _GL_UNUSED # define _GL_EXTERN_INLINE static _GL_UNUSED #endif #if 4 < __GNUC__ + (6 <= __GNUC_MINOR__) # if defined __GNUC_STDC_INLINE__ && __GNUC_STDC_INLINE__ # define _GL_INLINE_HEADER_CONST_PRAGMA # else # define _GL_INLINE_HEADER_CONST_PRAGMA \ _Pragma ("GCC diagnostic ignored \"-Wsuggest-attribute=const\"") # endif /* Suppress GCC's bogus "no previous prototype for 'FOO'" and "no previous declaration for 'FOO'" diagnostics, when FOO is an inline function in the header; see <http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54113>. */ # define _GL_INLINE_HEADER_BEGIN \ _Pragma ("GCC diagnostic push") \ _Pragma ("GCC diagnostic ignored \"-Wmissing-prototypes\"") \ _Pragma ("GCC diagnostic ignored \"-Wmissing-declarations\"") \ _GL_INLINE_HEADER_CONST_PRAGMA # define _GL_INLINE_HEADER_END \ _Pragma ("GCC diagnostic pop") #else # define _GL_INLINE_HEADER_BEGIN # define _GL_INLINE_HEADER_END #endif /* A replacement for va_copy, if needed. */ #define gl_va_copy(a,b) ((a) = (b)) /* 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 Mac OS 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 `int' if <sys/types.h> does not define. */ #undef mode_t /* Define to `int' if <sys/types.h> does not define. */ #undef pid_t /* 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 signed type of the same size as size_t. */ #undef ssize_t /* 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 /* gcc supports the "unused" attribute on possibly unused labels, and g++ has since version 4.5. Note to support C++ as well as C, _GL_UNUSED_LABEL should be used with a trailing ; */ #if !defined __cplusplus || __GNUC__ > 4 \ || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5) # define _GL_UNUSED_LABEL _GL_UNUSED #else # define _GL_UNUSED_LABEL #endif /* The __pure__ attribute was added in gcc 2.96. */ #if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) # define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__)) #else # define _GL_ATTRIBUTE_PURE /* empty */ #endif /* The __const__ attribute was added in gcc 2.95. */ #if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 95) # define _GL_ATTRIBUTE_CONST __attribute__ ((__const__)) #else # define _GL_ATTRIBUTE_CONST /* empty */ #endif /* Define as a macro for copying va_list variables. */ #undef va_copy �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gss-1.0.3/configure.ac������������������������������������������������������������������������������0000644�0000000�0000000�00000012633�12415507051�011471� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������dnl Process this file with autoconf to produce a configure script. # Copyright (C) 2003-2014 Simon Josefsson # # This file is part of the Generic Security Service (GSS). # # GSS 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. # # GSS 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 GSS; if not, see http://www.gnu.org/licenses or write to # the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, # Boston, MA 02110-1301, USA. AC_PREREQ(2.61) AC_INIT([GNU Generic Security Service], [1.0.3], [bug-gss@gnu.org], [gss]) AC_CONFIG_AUX_DIR([build-aux]) AC_CONFIG_MACRO_DIR([m4]) AC_CONFIG_HEADERS(config.h) AM_INIT_AUTOMAKE([1.10 -Wall -Wno-override]) AM_SILENT_RULES([yes]) # Library code modified: REVISION++ # Interfaces changed/added/removed: CURRENT++ REVISION=0 # Interfaces added: AGE++ # Interfaces removed: AGE=0 AC_SUBST(LT_CURRENT, 3) AC_SUBST(LT_REVISION, 3) AC_SUBST(LT_AGE, 0) # Checks for programs. AC_PROG_CC gl_EARLY libgl_EARLY srcgl_EARLY AM_PROG_AR LT_INIT([win32-dll]) AM_MISSING_PROG(PERL, perl, $missing_dir) AM_MISSING_PROG(HELP2MAN, help2man, $missing_dir) # Used when creating libgss-XX.def. DLL_VERSION=`expr ${LT_CURRENT} - ${LT_AGE}` AC_SUBST(DLL_VERSION) # Internationalization. AM_GNU_GETTEXT([external]) AM_GNU_GETTEXT_VERSION([0.19.2]) # For gnulib stuff. gl_INIT libgl_INIT srcgl_INIT # For gss.h. VERSION_MAJOR=`echo $PACKAGE_VERSION | sed 's/\(.*\)\..*\..*/\1/g'` VERSION_MINOR=`echo $PACKAGE_VERSION | sed 's/.*\.\(.*\)\..*/\1/g'` VERSION_PATCH=`echo $PACKAGE_VERSION | sed 's/.*\..*\.\(.*\)/\1/g'` AC_SUBST(VERSION_MAJOR) AC_SUBST(VERSION_MINOR) AC_SUBST(VERSION_PATCH) VERSION_NUMBER=`printf "0x%02x%02x%02x" $VERSION_MAJOR $VERSION_MINOR $VERSION_PATCH` AC_SUBST(VERSION_NUMBER) # Test for Shishi. AC_ARG_ENABLE(kerberos5, AC_HELP_STRING([--disable-kerberos5], [disable Kerberos V5 mechanism unconditionally]), kerberos5=$enableval) if test "$kerberos5" != "no" ; then AC_LIB_HAVE_LINKFLAGS(shishi,, [#include <shishi.h>], [shishi_key_timestamp (0);]) if test "$ac_cv_libshishi" = yes; then AC_DEFINE([USE_KERBEROS5], 1, [Define to 1 if you want Kerberos 5 mech.]) INCLUDE_GSS_KRB5='# include <gss/krb5.h>' INCLUDE_GSS_KRB5_EXT='# include <gss/krb5-ext.h>' kerberos5=yes else kerberos5=no fi fi AC_MSG_CHECKING([if the Kerberos V5 mechanism should be supported]) AC_MSG_RESULT($kerberos5) AM_CONDITIONAL(KRB5, test "$kerberos5" = "yes") AC_SUBST(INCLUDE_GSS_KRB5) AC_SUBST(INCLUDE_GSS_KRB5_EXT) # Check for gtk-doc. GTK_DOC_CHECK(1.1) sj_PO_SUFFIX($DLL_VERSION) 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" # Ignore errors in system headers nw="$nw -Wc++-compat" # We don't care much about C++ compilers nw="$nw -Wconversion" # Too many warnings for now nw="$nw -Wsign-conversion" # Too many warnings for now nw="$nw -Wcast-qual" # Too many warnings for now nw="$nw -Wtraditional" # Warns on #elif which we use often nw="$nw -Wunreachable-code" # False positive on strcmp nw="$nw -Wpadded" # Standard GSS-API headers are unpadded nw="$nw -Wtraditional-conversion" # Too many warnings for now nw="$nw -Wsuggest-attribute=pure" # Is it worth using attributes? nw="$nw -Wsuggest-attribute=const" # Is it worth using attributes? 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-unused-parameter]) gl_WARN_ADD([-Wno-stack-protector]) # Some functions cannot be protected gl_WARN_ADD([-Wno-array-bounds]) # gcc-4.6 meta.c false positive gl_WARN_ADD([-fdiagnostics-show-option]) fi AC_CONFIG_FILES([ Makefile doc/Makefile doc/cyclo/Makefile doc/reference/Makefile doc/reference/version.xml gl/Makefile gss.pc lib/Makefile lib/gl/Makefile lib/headers/gss.h lib/krb5/Makefile po/Makefile.in po/Makevars src/Makefile src/gl/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} C flags: ${CFLAGS} Warning flags: errors: ${WERROR_CFLAGS} warnings: ${WARN_CFLAGS} Library types: Shared=${enable_shared}, Static=${enable_static} Valgrind: ${VALGRIND} Version script: $have_ld_version_script I18n domain suffix: ${PO_SUFFIX:-none} Kerberos V5: $kerberos5 LDADD: $LTLIBSHISHI ]) �����������������������������������������������������������������������������������������������������gss-1.0.3/.clcopying��������������������������������������������������������������������������������0000664�0000000�0000000�00000000305�12415506237�011173� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ ----- Copyright (C) 2003-2014 Simon Josefsson Copying and distribution of this file, with or without modification, are permitted provided the copyright notice and this notice are preserved. ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gss-1.0.3/maint.mk����������������������������������������������������������������������������������0000644�0000000�0000000�00000173367�12415470476�010672� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# -*-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-2014 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 # Helper variables. _empty = _sp = $(_empty) $(_empty) # _equal,S1,S2 # ------------ # If S1 == S2, return S1, otherwise the empty string. _equal = $(and $(findstring $(1),$(2)),$(findstring $(2),$(1))) # member-check,VARIABLE,VALID-VALUES # ---------------------------------- # Check that $(VARIABLE) is in the space-separated list of VALID-VALUES, and # return it. Die otherwise. member-check = \ $(strip \ $(if $($(1)), \ $(if $(findstring $(_sp),$($(1))), \ $(error invalid $(1): '$($(1))', expected $(2)), \ $(or $(findstring $(_sp)$($(1))$(_sp),$(_sp)$(2)$(_sp)), \ $(error invalid $(1): '$($(1))', expected $(2)))), \ $(error $(1) undefined))) # 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 \ && printf %s --rsyncable) GZIP_ENV = '--no-name --best $(gzip_rsyncable)' GIT = git VC = $(GIT) VC_LIST = $(srcdir)/$(_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. _sc_excl = \ $(or $(exclude_file_name_regexp--$@),^$$) 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)|$(_sc_excl))' \ $(_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 # If RELEASE_TYPE is undefined, but RELEASE is, use its second word. # But overwrite VERSION. ifdef RELEASE VERSION := $(word 1, $(RELEASE)) RELEASE_TYPE ?= $(word 2, $(RELEASE)) endif # Validate and return $(RELEASE_TYPE), or die. RELEASE_TYPES = alpha beta stable release-type = $(call member-check,RELEASE_TYPE,$(RELEASE_TYPES)) # 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)) url_dir_list ?= $(if $(call _equal,$(gnu_rel_host),ftp.gnu.org), \ http://ftpmirror.gnu.org/$(PACKAGE), \ ftp://$(gnu_rel_host)/gnu/$(PACKAGE)) # Override this in cfg.mk if you are using a different format in your # NEWS file. today = $(shell date +%Y-%m-%d) # Select which lines of NEWS are searched for $(news-check-regexp). # This is a sed line number spec. The default says that we search # lines 1..10 of NEWS for $(news-check-regexp). # If you want to search only line 3 or only lines 20-22, use "3" or "20,22". news-check-lines-spec ?= 1,10 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. ## ## --------------- ## ifneq ($(_gl-Makefile),) _cfg_mk := $(wildcard $(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) ifeq ($(shell $(VC_LIST) >/dev/null 2>&1; echo $$?),0) local-checks-available += $(syntax-check-rules) else local-checks-available += no-vc-detected no-vc-detected: @echo "No version control files detected; skipping syntax check" endif .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) endif # _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. # # exclude # # Regular expression (ERE) denoting lines to ignore that matched # a prohibit construct. For example, this can be used to exclude # comments that mention why the nearby code uses an alternative # construct instead of the simpler prohibited construct. # # in_vc_files | in_files # # grep-E-style regexp selecting the files to check. For in_vc_files, # the regexp is used to select matching files from the list of all # version-controlled files; for in_files, it's from the names printed # by "find $(srcdir)". When neither is specified, use all 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. # # Finally, you may exempt files based on an ERE matching file names. # For example, to exempt from the sc_space_tab check all files with the # .diff suffix, set this Make variable: # # exclude_file_name_regexp--sc_space_tab = \.diff$ # # Note that while this functionality is mostly inherited via VC_LIST_EXCEPT, # when filtering by name via in_files, we explicitly filter out matching # names here as well. # Initialize each, so that envvar settings cannot interfere. export require = export prohibit = export exclude = export in_vc_files = export in_files = export containing = export non_containing = export halt = export with_grep_options = # By default, _sc_search_regexp does not ignore case. export ignore_case = _ignore_case = $$(test -n "$$ignore_case" && printf %s -i || :) define _sc_say_and_exit dummy=; : so we do not need a semicolon before each use; \ { printf '%s\n' "$(ME): $$msg" 1>&2; exit 1; }; endef 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 -z "$$prohibit" && test -n "$$exclude" \ && { msg='Use of exclude requires a prohibit pattern' \ $(_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" \ | grep -Ev '$(_sc_excl)'); \ 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 \ | grep -vE "$${exclude:-^$$}" \ && { 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: @$(srcdir)/$(_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. sp_ = strcmp *\(.+\) sc_prohibit_strcmp: @prohibit='! *strcmp *\(|\<$(sp_) *[!=]=|[!=]= *$(sp_)' \ exclude='# *define STRN?EQ\(' \ halt='replace strcmp calls above with STREQ/STRNEQ' \ $(_sc_search_regexp) # Really. You don't want to use this function. # It may fail to NUL-terminate the destination, # and always NUL-pads out to the specified length. sc_prohibit_strncpy: @prohibit='\<strncpy *\(' \ halt='do not use strncpy, period' \ $(_sc_search_regexp) # 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|error) ?\(-?[0-9]+[,)]' \ exclude='exit \(77\)|error ?\(((0|77),|[^,]*)' \ 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 '\.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 name, with no enclosing <> 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 '\.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)? *\(|_quoting_options\>)' \ $(_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_cloexec_without_use: @h='cloexec.h' re='\<(set_cloexec_flag|dup_cloexec) *\(' \ $(_sc_header_without_use) sc_prohibit_posixver_without_use: @h='posixver.h' re='\<posix2_version *\(' $(_sc_header_without_use) sc_prohibit_same_without_use: @h='same.h' re='\<same_name *\(' $(_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))\>|\<(invalid_arg|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|file_name)' \ $(_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|(FCHMOD|FCHOWN|STAT)AT_INLINE)\>' \ $(_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) # 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) # Don't include stdio--.h unless you use one of its functions. sc_prohibit_stdio--_without_use: @h='stdio--.h' re='\<((f(re)?|p)open|tmpfile) *\(' \ $(_sc_header_without_use) # Don't include stdio-safer.h unless you use one of its functions. sc_prohibit_stdio-safer_without_use: @h='stdio-safer.h' re='\<((f(re)?|p)open|tmpfile)_safer *\(' \ $(_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 ([A-Z]\w+)\(/ and print $1' lib/intprops.h|fmt _intprops_names = \ TYPE_IS_INTEGER TYPE_TWOS_COMPLEMENT TYPE_ONES_COMPLEMENT \ TYPE_SIGNED_MAGNITUDE TYPE_SIGNED TYPE_MINIMUM TYPE_MAXIMUM \ INT_BITS_STRLEN_BOUND INT_STRLEN_BOUND INT_BUFSIZE_BOUND \ INT_ADD_RANGE_OVERFLOW INT_SUBTRACT_RANGE_OVERFLOW \ INT_NEGATE_RANGE_OVERFLOW INT_MULTIPLY_RANGE_OVERFLOW \ INT_DIVIDE_RANGE_OVERFLOW INT_REMAINDER_RANGE_OVERFLOW \ INT_LEFT_SHIFT_RANGE_OVERFLOW INT_ADD_OVERFLOW INT_SUBTRACT_OVERFLOW \ INT_NEGATE_OVERFLOW INT_MULTIPLY_OVERFLOW INT_DIVIDE_OVERFLOW \ INT_REMAINDER_OVERFLOW INT_LEFT_SHIFT_OVERFLOW _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) _stddef_syms_re = NULL|offsetof|ptrdiff_t|size_t|wchar_t # Prohibit the inclusion of stddef.h without an actual use. sc_prohibit_stddef_without_use: @h='stddef.h' \ re='\<($(_stddef_syms_re))\>' \ $(_sc_header_without_use) _de1 = dirfd|(close|(fd)?open|read|rewind|seek|tell)dir(64)?(_r)? _de2 = (versionsort|struct dirent|getdirentries|alphasort|scandir(at)?)(64)? _de3 = MAXNAMLEN|DIR|ino_t|d_ino|d_fileno|d_namlen _dirent_syms_re = $(_de1)|$(_de2)|$(_de3) # Prohibit the inclusion of dirent.h without an actual use. sc_prohibit_dirent_without_use: @h='dirent.h' \ re='\<($(_dirent_syms_re))\>' \ $(_sc_header_without_use) # Prohibit the inclusion of verify.h without an actual use. sc_prohibit_verify_without_use: @h='verify.h' \ re='\<(verify(true|expr)?|static_assert) *\(' \ $(_sc_header_without_use) # Don't include xfreopen.h unless you use one of its functions. sc_prohibit_xfreopen_without_use: @h='xfreopen.h' re='\<xfreopen *\(' $(_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 *\(.*\);' \ in_vc_files='\.c$$' \ containing='\<main *(' \ halt='the above files do not call set_program_name' \ $(_sc_search_regexp) # Ensure that each .c file containing a "main" function also # calls bindtextdomain. sc_bindtextdomain: @require='bindtextdomain *\(' \ in_vc_files='\.c$$' \ containing='\<main *(' \ halt='the above files do not call bindtextdomain' \ $(_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_trailing_blank: @prohibit='[ ]$$' \ halt='found trailing blank(s)' \ exclude='^Binary file .* matches$$' \ $(_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) # A regexp matching function names like "error" that may be used # to emit translatable messages. _gl_translatable_diag_func_re ?= error # 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: @prohibit='\<$(_gl_translatable_diag_func_re) *\([^"]*"[^"]*[a-z]{3}' \ exclude='(_|ngettext ?)\(' \ halt='found unmarked diagnostic(s)' \ $(_sc_search_regexp) # 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=$$(printf '%s\n' \ 'do not test the above HAVE_<header>_H symbol(s);' \ ' with the corresponding gnulib module, they are always true') \ $(_sc_search_regexp) sc_prohibit_defined_have_decl_tests: @prohibit='(#[ ]*ifn?def|\<defined)\>[ (]+HAVE_DECL_' \ halt='HAVE_DECL macros are always defined' \ $(_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. # The exempted names below are defined only conditionally in gnulib, # and hence sometimes must/may be defined in application code. gl_extract_significant_defines_ = \ /^\# *define ([^_ (][^ (]*)(\s*\(|\s+\w+)/\ && $$2 !~ /(?:rpl_|_used_without_)/\ && $$1 !~ /^(?:NSIG|ENODATA)$$/\ && $$1 !~ /^(?:SA_RESETHAND|SA_RESTART)$$/\ 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 \ test -f $$f \ && perl -lne '$(gl_extract_significant_defines_)' $$f; \ done; \ ) | sort -u \ | $(SED) 's/^/^ *# *(define|undef) */;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 -E -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's @acronym{}. # http://lists.gnu.org/archive/html/bug-gnulib/2010-03/msg00321.html 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. # In addition, while the code below detects both blank lines and a missing # newline at EOF, the above detects only the former. # # 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 does not end in exactly one newline byte. # I.e., warn if there are blank lines (2 or more newlines), or if the # last byte is not a newline. However, currently we don't complain # about any file that contains exactly one byte. # 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... # require_exactly_one_NL_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" \ || substr ($$last_two_bytes,1) ne "\n") \ and (print $$f), $$fail=1; \ } \ END { exit defined $$fail } sc_prohibit_empty_lines_at_EOF: @perl -le '$(require_exactly_one_NL_at_EOF_)' $$($(VC_LIST_EXCEPT)) \ || { echo '$(ME): empty line(s) or no newline at EOF' \ 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) # Perl block to convert a match to FILE_NAME:LINENO:TEST, # that is shared by two definitions below. perl_filename_lineno_text_ = \ -e ' {' \ -e ' $$n = ($$` =~ tr/\n/\n/ + 1);' \ -e ' ($$v = $$&) =~ s/\n/\\n/g;' \ -e ' print "$$ARGV:$$n:$$v\n";' \ -e ' }' prohibit_doubled_word_RE_ ?= \ /\b(then?|[iao]n|i[fst]|but|f?or|at|and|[dt]o)\s+\1\b/gims prohibit_doubled_word_ = \ -e 'while ($(prohibit_doubled_word_RE_))' \ $(perl_filename_lineno_text_) # Define this to a regular expression that matches # any filename:dd:match lines you want to ignore. # The default is to ignore no matches. ignore_doubled_word_match_RE_ ?= ^$$ sc_prohibit_doubled_word: @perl -n -0777 $(prohibit_doubled_word_) $$($(VC_LIST_EXCEPT)) \ | grep -vE '$(ignore_doubled_word_match_RE_)' \ | grep . && { echo '$(ME): doubled words' 1>&2; exit 1; } || : # A regular expression matching undesirable combinations of words like # "can not"; this matches them even when the two words appear on different # lines, but not when there is an intervening delimiter like "#" or "*". # Similarly undesirable, "See @xref{...}", since an @xref should start # a sentence. Explicitly prohibit any prefix of "see" or "also". # Also prohibit a prefix matching "\w+ +". # @pxref gets the same see/also treatment and should be parenthesized; # presume it must *not* start a sentence. bad_xref_re_ ?= (?:[\w,:;] +|(?:see|also)\s+)\@xref\{ bad_pxref_re_ ?= (?:[.!?]|(?:see|also))\s+\@pxref\{ prohibit_undesirable_word_seq_RE_ ?= \ /(?:\bcan\s+not\b|$(bad_xref_re_)|$(bad_pxref_re_))/gims prohibit_undesirable_word_seq_ = \ -e 'while ($(prohibit_undesirable_word_seq_RE_))' \ $(perl_filename_lineno_text_) # Define this to a regular expression that matches # any filename:dd:match lines you want to ignore. # The default is to ignore no matches. ignore_undesirable_word_sequence_RE_ ?= ^$$ sc_prohibit_undesirable_word_seq: @perl -n -0777 $(prohibit_undesirable_word_seq_) \ $$($(VC_LIST_EXCEPT)) \ | grep -vE '$(ignore_undesirable_word_sequence_RE_)' | grep . \ && { echo '$(ME): undesirable word sequence' >&2; exit 1; } || : # Except for shell files and for loops, double semicolon is probably a mistake sc_prohibit_double_semicolon: @prohibit='; *;[ {} \]*(/[/*]|$$)' \ in_vc_files='\.[chly]$$' \ exclude='\bfor *\(.*\)' \ halt="Double semicolon detected" \ $(_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) # Avoid a test bashism. sc_prohibit_test_double_equal: @prohibit='(\<test| \[+) .+ == ' \ containing='#! */bin/[a-z]*sh' \ halt='use "test x = x", not "test x =''= x"' \ $(_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: @prohibit='^ *static.*struct option ' \ exclude='const struct option|struct option const' \ halt='add "const" to the above declarations' \ $(_sc_search_regexp) 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. # However, there is still one case in which @VAR@ use is not just # legitimate, but actually required: when augmenting an automake-defined # variable with a prefix. For example, gettext uses this: # MAKEINFO = env LANG= LC_MESSAGES= LC_ALL= LANGUAGE= @MAKEINFO@ # otherwise, makeinfo would put German or French (current locale) # navigation hints in the otherwise-English documentation. # # 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 '/\@\w+\@/' \ -e ' && !/(\w+)\s+=.*\@\1\@$$/' \ -e ''$(_makefile_at_at_check_exceptions) \ -e 'and (print "$$ARGV:$$.: $$_"), $$m=1; END {exit !$$m}' \ $$($(VC_LIST_EXCEPT) | grep -E '(^|/)(Makefile\.am|[^/]+\.mk)$$') \ && { echo '$(ME): use $$(...), not @...@' 1>&2; exit 1; } || : news-check: NEWS $(AM_V_GEN)if $(SED) -n $(news-check-lines-spec)p $< \ | 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 _() (more specifically, files that # match $(_gl_translatable_string_re)) are listed in po/POTFILES.in. po_file ?= $(srcdir)/po/POTFILES.in generated_files ?= $(srcdir)/lib/*.[ch] _gl_translatable_string_re ?= \b(N?_|gettext *)\([^)"]*("|$$) 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)) $(generated_files); 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 '$(_gl_translatable_string_re)' $$files \ | $(SED) 's|^$(_dot_escaped_srcdir)/||' | 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 = '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, # i.e., when pkg-M.N.tar.xz already exists (either in "." or in ../release) # and is read-only. writable-files: $(AM_V_GEN)if test -d $(release_archive_dir); then \ for file in $(DIST_ARCHIVES); do \ for p in ./ $(release_archive_dir)/; do \ test -e $$p$$file || continue; \ test -w $$p$$file \ || { echo ERROR: $$p$$file is not writable; fail=1; }; \ done; \ done; \ test "$$fail" && exit 1 || : ; \ else :; \ fi v_etc_file = $(gnulib_dir)/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) \ 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" # Fix syntax-highlighters " _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 # BRE regex of file contents to identify a test script. _test_script_regex ?= \<init\.sh\> # In tests, use "compare expected actual", not the reverse. sc_prohibit_reversed_compare_failure: @prohibit='\<compare [^ ]+ ([^ ]*exp|/dev/null)' \ containing='$(_test_script_regex)' \ halt='reversed compare arguments' \ $(_sc_search_regexp) # #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) # Even if you use pathmax.h to guarantee that PATH_MAX is defined, it might # not be constant, or might overflow a stack. In general, use PATH_MAX as # a limit, not an array or alloca size. sc_prohibit_path_max_allocation: @prohibit='(\balloca *\([^)]*|\[[^]]*)\bPATH_MAX' \ halt='Avoid stack allocations of size PATH_MAX' \ $(_sc_search_regexp) sc_vulnerable_makefile_CVE-2009-4029: @prohibit='perm -777 -exec chmod a\+rwx|chmod 777 \$$\(distdir\)' \ in_files='(^|/)Makefile\.in$$' \ halt=$$(printf '%s\n' \ 'the above files are vulnerable; beware of running' \ ' "make dist*" rules, and upgrade to fixed automake' \ ' see http://bugzilla.redhat.com/542609 for details') \ $(_sc_search_regexp) sc_vulnerable_makefile_CVE-2012-3386: @prohibit='chmod a\+w \$$\(distdir\)' \ in_files='(^|/)Makefile\.in$$' \ halt=$$(printf '%s\n' \ 'the above files are vulnerable; beware of running' \ ' "make distcheck", and upgrade to fixed automake' \ ' see http://bugzilla.redhat.com/CVE-2012-3386 for details') \ $(_sc_search_regexp) vc-diff-check: $(AM_V_GEN)(unset CDPATH; cd $(srcdir) && $(VC) diff) > vc-diffs || : $(AM_V_at)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 || git rev-parse --short=10 HEAD; } ) bootstrap-tools ?= autoconf,automake,gnulib gpgv = $$(gpgv2 --version >/dev/null && echo gpgv2 || echo gpgv) # 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 ?= \ $$(cd $(srcdir) \ && git cat-file tag v$(VERSION) \ | $(gpgv) --status-fd 1 --keyring /dev/null - - 2>/dev/null \ | awk '/^\[GNUPG:\] ERRSIG / {print $$3; exit}') translation_project_ ?= coordinator@translationproject.org # Make info-gnu the default only for a stable release. announcement_Cc_stable = $(translation_project_), $(PACKAGE_BUGREPORT) announcement_mail_headers_stable = \ To: info-gnu@gnu.org \ Cc: $(announcement_Cc_) \ Mail-Followup-To: $(PACKAGE_BUGREPORT) announcement_Cc_alpha = $(translation_project_) announcement_mail_headers_alpha = \ To: $(PACKAGE_BUGREPORT) \ Cc: $(announcement_Cc_) announcement_mail_Cc_beta = $(announcement_mail_Cc_alpha) announcement_mail_headers_beta = $(announcement_mail_headers_alpha) announcement_mail_Cc_ ?= $(announcement_mail_Cc_$(release-type)) announcement_mail_headers_ ?= $(announcement_mail_headers_$(release-type)) announcement: NEWS ChangeLog $(rel-files) # Not $(AM_V_GEN) since the output of this command serves as # announcement message: it would start with " GEN announcement". $(AM_V_at)$(srcdir)/$(_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) \ --srcdir=$(srcdir) \ --news=$(srcdir)/NEWS \ --bootstrap-tools=$(bootstrap-tools) \ $$(case ,$(bootstrap-tools), in (*,gnulib,*) \ echo --gnulib-version=$(gnulib-version);; esac) \ --no-print-checksums \ $(addprefix --url-dir=, $(url_dir_list)) .PHONY: release-commit release-commit: $(AM_V_GEN)cd $(srcdir) \ && $(_build-aux)/do-release-commit-and-tag \ -C $(abs_builddir) $(RELEASE) ## ---------------- ## ## Updating files. ## ## ---------------- ## ftp-gnu = ftp://ftp.gnu.org/gnu www-gnu = http://www.gnu.org upload_dest_dir_ ?= $(PACKAGE) upload_command = \ $(srcdir)/$(_build-aux)/gnupload $(GNUPLOADFLAGS) \ --to $(gnu_rel_host):$(upload_dest_dir_) \ $(rel-files) emit_upload_commands: @echo ===================================== @echo ===================================== @echo '$(upload_command)' @echo '# send the ~/announce-$(my_distdir) e-mail' @echo ===================================== @echo ===================================== .PHONY: upload upload: $(AM_V_GEN)$(upload_command) define emit-commit-log printf '%s\n' 'maint: 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: $(AM_V_GEN)if test -d $(srcdir)/.git \ && git --version >/dev/null 2>&1; 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 submodule-checks ?= no-submodule-changes public-submodule-commit # Ensure that each sub-module commit we're using is public. # Without this, it is too easy to tag and release code that # cannot be built from a fresh clone. .PHONY: public-submodule-commit public-submodule-commit: $(AM_V_GEN)if test -d $(srcdir)/.git \ && git --version >/dev/null 2>&1; then \ cd $(srcdir) && \ git submodule --quiet foreach \ 'test "$$(git rev-parse "$$sha1")" \ = "$$(git merge-base origin "$$sha1")"' \ || { echo '$(ME): found non-public submodule commit' >&2; \ exit 1; }; \ else \ : ; \ fi # This rule has a high enough utility/cost ratio that it should be a # dependent of "check" by default. However, some of us do occasionally # commit a temporary change that deliberately points to a non-public # submodule commit, and want to be able to use rules like "make check". # In that case, run e.g., "make check gl_public_submodule_commit=" # to disable this test. gl_public_submodule_commit ?= public-submodule-commit check: $(gl_public_submodule_commit) .PHONY: alpha beta stable release ALL_RECURSIVE_TARGETS += alpha beta stable alpha beta stable: $(local-check) writable-files $(submodule-checks) $(AM_V_GEN)test $@ = stable \ && { echo $(VERSION) | grep -E '^[0-9]+(\.[0-9]+)+$$' \ || { echo "invalid version string: $(VERSION)" 1>&2; exit 1;};}\ || : $(AM_V_at)$(MAKE) vc-diff-check $(AM_V_at)$(MAKE) news-check $(AM_V_at)$(MAKE) distcheck $(AM_V_at)$(MAKE) dist $(AM_V_at)$(MAKE) $(release-prep-hook) RELEASE_TYPE=$@ $(AM_V_at)$(MAKE) -s emit_upload_commands RELEASE_TYPE=$@ release: $(AM_V_GEN)$(MAKE) _version $(AM_V_GEN)$(MAKE) $(release-type) # Override this in cfg.mk if you follow different procedures. release-prep-hook ?= release-prep gl_noteworthy_news_ = * Noteworthy changes in release ?.? (????-??-??) [?] .PHONY: release-prep release-prep: $(AM_V_GEN)$(MAKE) --no-print-directory -s announcement \ > ~/announce-$(my_distdir) $(AM_V_at)if test -d $(release_archive_dir); then \ ln $(rel-files) $(release_archive_dir); \ chmod a-w $(rel-files); \ fi $(AM_V_at)echo $(VERSION) > $(prev_version_file) $(AM_V_at)$(MAKE) update-NEWS-hash $(AM_V_at)perl -pi \ -e '$$. == 3 and print "$(gl_noteworthy_news_)\n\n\n"' \ $(srcdir)/NEWS $(AM_V_at)msg=$$($(emit-commit-log)) || exit 1; \ cd $(srcdir) && $(VC) commit -m "$$msg" -a # 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: $(AM_V_GEN)test -z "$(manual_title)" \ && { echo define manual_title in cfg.mk 1>&2; exit 1; } || : $(AM_V_at)cd '$(srcdir)/doc'; \ $(SHELL) ../$(_build-aux)/gendocs.sh $(gendocs_options_) \ -o '$(abs_builddir)/doc/manual' \ --email $(PACKAGE_BUGREPORT) $(PACKAGE) \ "$(PACKAGE_NAME) - $(manual_title)" $(AM_V_at)echo " *** Upload the doc/manual directory to web-cvs." .PHONY: web-manual-update web-manual-update: $(AM_V_GEN)cd $(srcdir) \ && $(_build-aux)/gnu-web-doc-update -C $(abs_builddir) # 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 # Some projects carry local adjustments for gnulib modules via patches in # a gnulib patch directory whose default name is gl/ (defined in bootstrap # via local_gl_dir=gl). Those patches become stale as the originals evolve # in gnulib. Use this rule to refresh any stale patches. It applies each # patch to the original in $(gnulib_dir) and uses the temporary result to # generate a fuzz-free .diff file. If you customize the name of your local # gnulib patch directory via bootstrap.conf, this rule detects that name. # Run this from a non-VPATH (i.e., srcdir) build directory. .PHONY: refresh-gnulib-patches refresh-gnulib-patches: gl=gl; \ if test -f bootstrap.conf; then \ t=$$(perl -lne '/^\s*local_gl_dir=(\S+)/ and $$d=$$1;' \ -e 'END{defined $$d and print $$d}' bootstrap.conf); \ test -n "$$t" && gl=$$t; \ fi; \ for diff in $$(cd $$gl; git ls-files | grep '\.diff$$'); do \ b=$$(printf %s "$$diff"|$(SED) 's/\.diff$$//'); \ VERSION_CONTROL=none \ patch "$(gnulib_dir)/$$b" "$$gl/$$diff" || exit 1; \ ( cd $(gnulib_dir) || exit 1; \ git diff "$$b" > "../$$gl/$$diff"; \ git checkout $$b ) || exit 1; \ done # 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//;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: $(AM_V_GEN)grep -l -w Copyright \ $$(export VC_LIST_EXCEPT_DEFAULT=COPYING && $(VC_LIST_EXCEPT)) \ | $(update-copyright-env) xargs $(srcdir)/$(_build-aux)/$@ # This tight_scope test is skipped with a warning if $(_gl_TS_headers) is not # overridden and $(_gl_TS_dir)/Makefile.am does not mention noinst_HEADERS. # NOTE: to override any _gl_TS_* default value, you must # define the variable(s) using "export" in cfg.mk. _gl_TS_dir ?= src ALL_RECURSIVE_TARGETS += sc_tight_scope sc_tight_scope: tight-scope.mk @fail=0; \ if ! grep '^ *export _gl_TS_headers *=' $(srcdir)/cfg.mk \ > /dev/null \ && ! grep -w noinst_HEADERS $(srcdir)/$(_gl_TS_dir)/Makefile.am \ > /dev/null 2>&1; then \ echo '$(ME): skipping $@'; \ else \ $(MAKE) -s -C $(_gl_TS_dir) \ -f Makefile \ -f $(abs_top_srcdir)/cfg.mk \ -f $(abs_top_builddir)/$< \ _gl_tight_scope \ || fail=1; \ fi; \ rm -f $<; \ exit $$fail tight-scope.mk: $(ME) @rm -f $@ $@-t @perl -ne '/^# TS-start/.../^# TS-end/ and print' $(srcdir)/$(ME) > $@-t @chmod a=r $@-t && mv $@-t $@ ifeq (a,b) # TS-start # Most functions should have static scope. # Any that don't must be marked with 'extern', but 'main' # and 'usage' are exceptions: they're always extern, but # do not need to be marked. Symbols matching '__.*' are # reserved by the compiler, so are automatically excluded below. _gl_TS_unmarked_extern_functions ?= main usage _gl_TS_function_match ?= /^(?:$(_gl_TS_extern)) +.*?(\S+) *\(/ # If your project uses a macro like "XTERN", then put # the following in cfg.mk to override this default: # export _gl_TS_extern = extern|XTERN _gl_TS_extern ?= extern # The second nm|grep checks for file-scope variables with 'extern' scope. # Without gnulib's progname module, you might put program_name here. # Symbols matching '__.*' are reserved by the compiler, # so are automatically excluded below. _gl_TS_unmarked_extern_vars ?= # NOTE: the _match variables are perl expressions -- not mere regular # expressions -- so that you can extend them to match other patterns # and easily extract matched variable names. # For example, if your project declares some global variables via # a macro like this: GLOBAL(type, var_name, initializer), then you # can override this definition to automatically extract those names: # export _gl_TS_var_match = \ # /^(?:$(_gl_TS_extern)) .*?\**(\w+)(\[.*?\])?;/ || /\bGLOBAL\(.*?,\s*(.*?),/ _gl_TS_var_match ?= /^(?:$(_gl_TS_extern)) .*?(\w+)(\[.*?\])?;/ # The names of object files in (or relative to) $(_gl_TS_dir). _gl_TS_obj_files ?= *.$(OBJEXT) # Files in which to search for the one-line style extern declarations. # $(_gl_TS_dir)-relative. _gl_TS_headers ?= $(noinst_HEADERS) _gl_TS_other_headers ?= *.h .PHONY: _gl_tight_scope _gl_tight_scope: $(bin_PROGRAMS) t=exceptions-$$$$; \ trap 's=$$?; rm -f $$t; exit $$s' 0; \ for sig in 1 2 3 13 15; do \ eval "trap 'v=`expr $$sig + 128`; (exit $$v); exit $$v' $$sig"; \ done; \ src=`for f in $(SOURCES); do \ test -f $$f && d= || d=$(srcdir)/; echo $$d$$f; done`; \ hdr=`for f in $(_gl_TS_headers); do \ test -f $$f && d= || d=$(srcdir)/; echo $$d$$f; done`; \ ( printf '^%s$$\n' '__.*' $(_gl_TS_unmarked_extern_functions); \ grep -h -A1 '^extern .*[^;]$$' $$src \ | grep -vE '^(extern |--)' | $(SED) 's/ .*//'; \ perl -lne \ '$(_gl_TS_function_match) and print "^$$1\$$"' $$hdr; \ ) | sort -u > $$t; \ nm -e $(_gl_TS_obj_files)|$(SED) -n 's/.* T //p'|grep -Ev -f $$t \ && { echo the above functions should have static scope >&2; \ exit 1; } || : ; \ ( printf '^%s$$\n' '__.*' $(_gl_TS_unmarked_extern_vars); \ perl -lne '$(_gl_TS_var_match) and print "^$$1\$$"' \ $$hdr $(_gl_TS_other_headers) \ ) | sort -u > $$t; \ nm -e $(_gl_TS_obj_files) | $(SED) -n 's/.* [BCDGRS] //p' \ | sort -u | grep -Ev -f $$t \ && { echo the above variables should have static scope >&2; \ exit 1; } || : # TS-end endif �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gss-1.0.3/cfg.mk������������������������������������������������������������������������������������0000664�0000000�0000000�00000007131�12415507544�010301� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright (C) 2006-2014 Simon Josefsson # # This file is part of the Generic Security Service (GSS). # # GSS 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. # # GSS 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 GSS; if not, see http://www.gnu.org/licenses or write to # the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, # Boston, MA 02110-1301, USA. WFLAGS ?= --enable-gcc-warnings ADDFLAGS ?= CFGFLAGS ?= --enable-gtk-doc --enable-gtk-doc-pdf $(ADDFLAGS) $(WFLAGS) INDENT_SOURCES = `find . -name \*.[ch] -o -name gss.h.in | grep -v -e ^./build-aux/ -e ^./lib/gl/ -e ^./gl/ -e ^./src/gl/` ifeq ($(.DEFAULT_GOAL),abort-due-to-no-makefile) .DEFAULT_GOAL := bootstrap endif local-checks-to-skip = sc_copyright_check sc_immutable_NEWS \ sc_makefile_at_at_check sc_prohibit_strcmp sc_require_config_h \ sc_require_config_h_first exclude_file_name_regexp--sc_unmarked_diagnostics = ^src/gss.c VC_LIST_ALWAYS_EXCLUDE_REGEX = ^maint.mk|GNUmakefile|gtk-doc.make|po/.*.po.in|doc/fdl-1.3.texi|doc/gendocs_template|m4/pkg.m4|build-aux/|((lib/|src/)?gl)/.*$$ update-copyright-env = UPDATE_COPYRIGHT_HOLDER="Simon Josefsson" UPDATE_COPYRIGHT_USE_INTERVALS=2 UPDATE_COPYRIGHT_FORCE=1 gtk-doc.make: gtkdocize doc/Makefile.gdoc: printf "gdoc_MANS =\ngdoc_TEXINFOS =\n" > doc/Makefile.gdoc autoreconf: gtk-doc.make doc/Makefile.gdoc for f in po/*.po.in; do \ cp $$f `echo $$f | sed 's/.in//'`; \ done mv build-aux/config.rpath build-aux/config.rpath- test -f ./configure || autoreconf --install mv build-aux/config.rpath- build-aux/config.rpath update-po: refresh-po for f in `ls po/*.po | grep -v quot.po`; do \ cp $$f $$f.in; \ done git add po/*.po.in git commit -m "Sync with TP." po/LINGUAS po/*.po.in bootstrap: autoreconf ./configure $(CFGFLAGS) # Code Coverage web-coverage: rm -fv `find $(htmldir)/coverage -type f | grep -v CVS` cp -rv doc/coverage/* $(htmldir)/coverage/ upload-web-coverage: cd $(htmldir) && \ cvs commit -m "Update." coverage # Release ChangeLog: git2cl > ChangeLog cat .clcopying >> ChangeLog tag = $(PACKAGE)-`echo $(VERSION) | sed 's/\./-/g'` htmldir = ../www-$(PACKAGE) release: prepare upload2 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 -s -m $(VERSION) $(tag) upload2: git push git push --tags build-aux/gnupload --to ftp.gnu.org:gss $(distdir).tar.gz 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/*.devhelp2 doc/reference/html/*.css $(htmldir)/reference/ cp -v doc/cyclo/cyclo-$(PACKAGE).html $(htmldir)/cyclo/ upload-web: cd $(htmldir) && cvs commit -m "Update." manual/ reference/ cyclo/ review-diff: git diff `git describe --abbrev=0`.. \ | grep -v -e ^index -e '^diff --git' \ | filterdiff -p 1 -x 'build-aux/*' -x 'gl/*' -x 'lib/gl/*' -x 'src/gl/*' -x 'po/*' -x 'maint.mk' -x '.gitignore' -x '.x-sc*' -x ChangeLog -x GNUmakefile \ | less ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gss-1.0.3/lib/��������������������������������������������������������������������������������������0000755�0000000�0000000�00000000000�12415510376�010030� 5����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������gss-1.0.3/lib/misc.c��������������������������������������������������������������������������������0000664�0000000�0000000�00000023645�12415506237�011064� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* misc.c --- Implementation of GSS-API Miscellaneous functions. * Copyright (C) 2003-2014 Simon Josefsson * * This file is part of the Generic Security Service (GSS). * * GSS 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. * * GSS 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 GSS; if not, see http://www.gnu.org/licenses or write to * the Free Software Foundation, Inc., 51 Franklin Street, Fifth * Floor, Boston, MA 02110-1301, USA. * */ #include "internal.h" /* _gss_indicate_mechs1 */ #include "meta.h" /** * gss_create_empty_oid_set: * @minor_status: (integer, modify) Mechanism specific status code. * @oid_set: (Set of Object IDs, modify) The empty object identifier * set. The routine will allocate the gss_OID_set_desc object, * which the application must free after use with a call to * gss_release_oid_set(). * * Create an object-identifier set containing no object identifiers, * to which members may be subsequently added using the * gss_add_oid_set_member() routine. These routines are intended to * be used to construct sets of mechanism object identifiers, for * input to gss_acquire_cred. * * Return value: * * `GSS_S_COMPLETE`: Successful completion. **/ OM_uint32 gss_create_empty_oid_set (OM_uint32 * minor_status, gss_OID_set * oid_set) { if (minor_status) *minor_status = 0; *oid_set = malloc (sizeof (**oid_set)); if (!*oid_set) { if (minor_status) *minor_status = ENOMEM; return GSS_S_FAILURE; } (*oid_set)->count = 0; (*oid_set)->elements = NULL; return GSS_S_COMPLETE; } /* * gss_copy_oid: * @minor_status: (integer, modify) Mechanism specific status code. * @src_oid: (Object ID, read) The object identifier to copy. * @dest_oid: (Object ID, modify) The resultant copy of @src_oid. * Storage associated with this name must be freed by the * application, but gss_release_oid() cannot be used generally as it * deallocate the oid structure itself too. * * Make an exact copy of the given OID, that shares no memory areas * with the original. * * WARNING: This function is a GNU GSS specific extension, and is not * part of the official GSS API. * * Return value: * * `GSS_S_COMPLETE`: Successful completion. **/ static OM_uint32 _gss_copy_oid (OM_uint32 * minor_status, const gss_OID src_oid, gss_OID dest_oid) { if (minor_status) *minor_status = 0; if (!src_oid) return GSS_S_FAILURE | GSS_S_CALL_INACCESSIBLE_READ; if (src_oid->length == 0 || src_oid->elements == NULL) return GSS_S_FAILURE | GSS_S_CALL_BAD_STRUCTURE; dest_oid->length = src_oid->length; dest_oid->elements = malloc (src_oid->length); if (!dest_oid->elements) { if (minor_status) *minor_status = ENOMEM; return GSS_S_FAILURE; } memcpy (dest_oid->elements, src_oid->elements, src_oid->length); return GSS_S_COMPLETE; } /** * gss_add_oid_set_member: * @minor_status: (integer, modify) Mechanism specific status code. * @member_oid: (Object ID, read) The object identifier to copied into * the set. * @oid_set: (Set of Object ID, modify) The set in which the object * identifier should be inserted. * * Add an Object Identifier to an Object Identifier set. This routine * is intended for use in conjunction with gss_create_empty_oid_set * when constructing a set of mechanism OIDs for input to * gss_acquire_cred. The oid_set parameter must refer to an OID-set * that was created by GSS-API (e.g. a set returned by * gss_create_empty_oid_set()). GSS-API creates a copy of the * member_oid and inserts this copy into the set, expanding the * storage allocated to the OID-set's elements array if necessary. * The routine may add the new member OID anywhere within the elements * array, and implementations should verify that the new member_oid is * not already contained within the elements array; if the member_oid * is already present, the oid_set should remain unchanged. * * Return value: * * `GSS_S_COMPLETE`: Successful completion. **/ OM_uint32 gss_add_oid_set_member (OM_uint32 * minor_status, const gss_OID member_oid, gss_OID_set * oid_set) { OM_uint32 major_stat; int present; if (!member_oid || member_oid->length == 0 || member_oid->elements == NULL) { if (minor_status) *minor_status = 0; return GSS_S_FAILURE; } major_stat = gss_test_oid_set_member (minor_status, member_oid, *oid_set, &present); if (GSS_ERROR (major_stat)) return major_stat; if (present) { if (minor_status) *minor_status = 0; return GSS_S_COMPLETE; } if ((*oid_set)->count + 1 == 0) /* integer overflow */ { if (minor_status) *minor_status = 0; return GSS_S_FAILURE; } (*oid_set)->count++; { gss_OID tmp; tmp = realloc ((*oid_set)->elements, (*oid_set)->count * sizeof (*(*oid_set)->elements)); if (!tmp) { if (minor_status) *minor_status = ENOMEM; return GSS_S_FAILURE; } (*oid_set)->elements = tmp; } major_stat = _gss_copy_oid (minor_status, member_oid, (*oid_set)->elements + ((*oid_set)->count - 1)); if (GSS_ERROR (major_stat)) return major_stat; return GSS_S_COMPLETE; } /** * gss_test_oid_set_member: * @minor_status: (integer, modify) Mechanism specific status code. * @member: (Object ID, read) The object identifier whose presence is * to be tested. * @set: (Set of Object ID, read) The Object Identifier set. * @present: (Boolean, modify) Non-zero if the specified OID is a * member of the set, zero if not. * * Interrogate an Object Identifier set to determine whether a * specified Object Identifier is a member. This routine is intended * to be used with OID sets returned by gss_indicate_mechs(), * gss_acquire_cred(), and gss_inquire_cred(), but will also work with * user-generated sets. * * Return value: * * `GSS_S_COMPLETE`: Successful completion. **/ OM_uint32 gss_test_oid_set_member (OM_uint32 * minor_status, const gss_OID member, const gss_OID_set set, int *present) { gss_OID cur; size_t i; if (minor_status) *minor_status = 0; *present = 0; if (member == GSS_C_NO_OID) return GSS_S_COMPLETE; for (i = 0, cur = set->elements; i < set->count; i++, cur++) { if (cur->length == member->length && memcmp (cur->elements, member->elements, member->length) == 0) { *present = 1; return GSS_S_COMPLETE; } } return GSS_S_COMPLETE; } /** * gss_release_oid_set: * @minor_status: (integer, modify) Mechanism specific status code. * @set: (Set of Object IDs, modify) The storage associated with the * gss_OID_set will be deleted. * * Free storage associated with a GSSAPI-generated gss_OID_set object. * The set parameter must refer to an OID-set that was returned from a * GSS-API routine. gss_release_oid_set() will free the storage * associated with each individual member OID, the OID set's elements * array, and the gss_OID_set_desc. * * The gss_OID_set parameter is set to GSS_C_NO_OID_SET on successful * completion of this routine. * * Return value: * * `GSS_S_COMPLETE`: Successful completion. **/ OM_uint32 gss_release_oid_set (OM_uint32 * minor_status, gss_OID_set * set) { gss_OID cur; size_t i; if (minor_status) *minor_status = 0; if (!set || *set == GSS_C_NO_OID_SET) return GSS_S_COMPLETE; for (i = 0, cur = (*set)->elements; i < (*set)->count; i++, cur++) free (cur->elements); free ((*set)->elements); free (*set); *set = GSS_C_NO_OID_SET; return GSS_S_COMPLETE; } /** * gss_indicate_mechs: * @minor_status: (integer, modify) Mechanism specific status code. * @mech_set: (set of Object IDs, modify) Set of * implementation-supported mechanisms. The returned gss_OID_set * value will be a dynamically-allocated OID set, that should be * released by the caller after use with a call to * gss_release_oid_set(). * * Allows an application to determine which underlying security * mechanisms are available. * * Return value: * * `GSS_S_COMPLETE`: Successful completion. **/ OM_uint32 gss_indicate_mechs (OM_uint32 * minor_status, gss_OID_set * mech_set) { OM_uint32 maj_stat; maj_stat = gss_create_empty_oid_set (minor_status, mech_set); if (GSS_ERROR (maj_stat)) return maj_stat; maj_stat = _gss_indicate_mechs1 (minor_status, mech_set); if (GSS_ERROR (maj_stat)) { gss_release_oid_set (NULL, mech_set); return maj_stat; } if (minor_status) *minor_status = 0; return GSS_S_COMPLETE; } /** * gss_release_buffer: * @minor_status: (integer, modify) Mechanism specific status code. * @buffer: (buffer, modify) The storage associated with the buffer * will be deleted. The gss_buffer_desc object will not be freed, * but its length field will be zeroed. * * Free storage associated with a buffer. The storage must have been * allocated by a GSS-API routine. In addition to freeing the * associated storage, the routine will zero the length field in the * descriptor to which the buffer parameter refers, and * implementations are encouraged to additionally set the pointer * field in the descriptor to NULL. Any buffer object returned by a * GSS-API routine may be passed to gss_release_buffer (even if there * is no storage associated with the buffer). * * Return value: * * `GSS_S_COMPLETE`: Successful completion. **/ OM_uint32 gss_release_buffer (OM_uint32 * minor_status, gss_buffer_t buffer) { if (minor_status) *minor_status = 0; if (buffer != GSS_C_NO_BUFFER) { free (buffer->value); buffer->value = NULL; buffer->length = 0; } return GSS_S_COMPLETE; } �������������������������������������������������������������������������������������������gss-1.0.3/lib/meta.h��������������������������������������������������������������������������������0000664�0000000�0000000�00000011367�12415506237�011062� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* meta.h --- Prototypes for internally visible symbols from meta.c. * Copyright (C) 2003-2014 Simon Josefsson * * This file is part of the Generic Security Service (GSS). * * GSS 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. * * GSS 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 GSS; if not, see http://www.gnu.org/licenses or write to * the Free Software Foundation, Inc., 51 Franklin Street, Fifth * Floor, Boston, MA 02110-1301, USA. * */ #ifndef META_H #define META_H #include <gss/api.h> #define MAX_NT 5 typedef struct _gss_mech_api_struct { gss_OID mech; const char *sasl_name; const char *mech_name; const char *mech_description; gss_OID name_types[MAX_NT]; OM_uint32 (*init_sec_context) (OM_uint32 * minor_status, const gss_cred_id_t initiator_cred_handle, gss_ctx_id_t * context_handle, const gss_name_t target_name, const gss_OID mech_type, OM_uint32 req_flags, OM_uint32 time_req, const gss_channel_bindings_t input_chan_bindings, const gss_buffer_t input_token, gss_OID * actual_mech_type, gss_buffer_t output_token, OM_uint32 * ret_flags, OM_uint32 * time_rec); OM_uint32 (*canonicalize_name) (OM_uint32 * minor_status, const gss_name_t input_name, const gss_OID mech_type, gss_name_t * output_name); OM_uint32 (*export_name) (OM_uint32 * minor_status, const gss_name_t input_name, gss_buffer_t exported_name); OM_uint32 (*wrap) (OM_uint32 * minor_status, const gss_ctx_id_t context_handle, int conf_req_flag, gss_qop_t qop_req, const gss_buffer_t input_message_buffer, int *conf_state, gss_buffer_t output_message_buffer); OM_uint32 (*unwrap) (OM_uint32 * minor_status, const gss_ctx_id_t context_handle, const gss_buffer_t input_message_buffer, gss_buffer_t output_message_buffer, int *conf_state, gss_qop_t * qop_state); OM_uint32 (*get_mic) (OM_uint32 * minor_status, const gss_ctx_id_t context_handle, gss_qop_t qop_req, const gss_buffer_t message_buffer, gss_buffer_t message_token); OM_uint32 (*verify_mic) (OM_uint32 * minor_status, const gss_ctx_id_t context_handle, const gss_buffer_t message_buffer, const gss_buffer_t token_buffer, gss_qop_t * qop_state); OM_uint32 (*display_status) (OM_uint32 * minor_status, OM_uint32 status_value, int status_type, const gss_OID mech_type, OM_uint32 * message_context, gss_buffer_t status_string); OM_uint32 (*acquire_cred) (OM_uint32 * minor_status, const gss_name_t desired_name, OM_uint32 time_req, const gss_OID_set desired_mechs, gss_cred_usage_t cred_usage, gss_cred_id_t * output_cred_handle, gss_OID_set * actual_mechs, OM_uint32 * time_rec); OM_uint32 (*release_cred) (OM_uint32 * minor_status, gss_cred_id_t * cred_handle); OM_uint32 (*accept_sec_context) (OM_uint32 * minor_status, gss_ctx_id_t * context_handle, const gss_cred_id_t acceptor_cred_handle, const gss_buffer_t input_token_buffer, const gss_channel_bindings_t input_chan_bindings, gss_name_t * src_name, gss_OID * mech_type, gss_buffer_t output_token, OM_uint32 * ret_flags, OM_uint32 * time_rec, gss_cred_id_t * delegated_cred_handle); OM_uint32 (*delete_sec_context) (OM_uint32 * minor_status, gss_ctx_id_t * context_handle, gss_buffer_t output_token); OM_uint32 (*context_time) (OM_uint32 * minor_status, const gss_ctx_id_t context_handle, OM_uint32 * time_rec); OM_uint32 (*inquire_cred) (OM_uint32 * minor_status, const gss_cred_id_t cred_handle, gss_name_t * name, OM_uint32 * lifetime, gss_cred_usage_t * cred_usage, gss_OID_set * mechanisms); OM_uint32 (*inquire_cred_by_mech) (OM_uint32 * minor_status, const gss_cred_id_t cred_handle, const gss_OID mech_type, gss_name_t * name, OM_uint32 * initiator_lifetime, OM_uint32 * acceptor_lifetime, gss_cred_usage_t * cred_usage); } _gss_mech_api_desc, *_gss_mech_api_t; _gss_mech_api_t _gss_find_mech (const gss_OID oid); _gss_mech_api_t _gss_find_mech_no_default (const gss_OID oid); _gss_mech_api_t _gss_find_mech_by_saslname (const gss_buffer_t sasl_mech_name); OM_uint32 _gss_indicate_mechs1 (OM_uint32 * minor_status, gss_OID_set * mech_set); #endif /* META_H */ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gss-1.0.3/lib/obsolete.c����������������������������������������������������������������������������0000664�0000000�0000000�00000004242�12415506237�011735� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* obsolete.c --- Obsolete GSS-API v1 compatibility mappings. * Copyright (C) 2003-2014 Simon Josefsson * * This file is part of the Generic Security Service (GSS). * * GSS 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. * * GSS 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 GSS; if not, see http://www.gnu.org/licenses or write to * the Free Software Foundation, Inc., 51 Franklin Street, Fifth * Floor, Boston, MA 02110-1301, USA. * */ #include "internal.h" OM_uint32 gss_sign (OM_uint32 * minor_status, gss_ctx_id_t context_handle, int qop_req, gss_buffer_t message_buffer, gss_buffer_t message_token) { return gss_get_mic (minor_status, context_handle, (gss_qop_t) qop_req, message_buffer, message_token); } OM_uint32 gss_verify (OM_uint32 * minor_status, gss_ctx_id_t context_handle, gss_buffer_t message_buffer, gss_buffer_t token_buffer, int *qop_state) { return gss_verify_mic (minor_status, context_handle, message_buffer, token_buffer, (gss_qop_t *) qop_state); } OM_uint32 gss_seal (OM_uint32 * minor_status, gss_ctx_id_t context_handle, int conf_req_flag, int qop_req, gss_buffer_t input_message_buffer, int *conf_state, gss_buffer_t output_message_buffer) { return gss_wrap (minor_status, context_handle, conf_req_flag, (gss_qop_t) qop_req, input_message_buffer, conf_state, output_message_buffer); } OM_uint32 gss_unseal (OM_uint32 * minor_status, gss_ctx_id_t context_handle, gss_buffer_t input_message_buffer, gss_buffer_t output_message_buffer, int *conf_state, int *qop_state) { return gss_unwrap (minor_status, context_handle, input_message_buffer, output_message_buffer, conf_state, (gss_qop_t *) qop_state); } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gss-1.0.3/lib/Makefile.am���������������������������������������������������������������������������0000664�0000000�0000000�00000004000�12415506237�012001� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������## Process this file with automake to produce Makefile.in # Copyright (C) 2003-2014 Simon Josefsson # # This file is part of the Generic Security Service (GSS). # # GSS 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. # # GSS 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 GSS; if not, see http://www.gnu.org/licenses or write to # the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, # Boston, MA 02110-1301, USA. SUBDIRS = gl AM_CFLAGS = $(WARN_CFLAGS) $(WERROR_CFLAGS) AM_CPPFLAGS = -I$(top_srcdir)/lib/gl \ -I$(top_builddir)/lib/headers -I$(top_srcdir)/lib/headers lib_LTLIBRARIES = libgss.la include_HEADERS = headers/gss.h gssincludedir=$(includedir)/gss gssinclude_HEADERS = headers/gss/api.h headers/gss/ext.h libgss_la_SOURCES = libgss.map \ internal.h \ meta.h meta.c \ context.c cred.c error.c misc.c msg.c name.c obsolete.c oid.c \ asn1.c ext.c version.c \ saslname.c libgss_la_LIBADD = @LTLIBINTL@ gl/libgnu.la libgss_la_LDFLAGS = -no-undefined \ -version-info $(LT_CURRENT):$(LT_REVISION):$(LT_AGE) if HAVE_LD_VERSION_SCRIPT libgss_la_LDFLAGS += -Wl,--version-script=$(srcdir)/libgss.map else libgss_la_LDFLAGS += -export-symbols-regex '^(gss|GSS).*' endif if HAVE_LD_OUTPUT_DEF libgss_la_LDFLAGS += -Wl,--output-def,libgss-$(DLL_VERSION).def defexecdir = $(bindir) defexec_DATA = libgss-$(DLL_VERSION).def DISTCLEANFILES = $(defexec_DATA) endif if KRB5 SUBDIRS += krb5 gssinclude_HEADERS += headers/gss/krb5.h headers/gss/krb5-ext.h libgss_la_LIBADD += krb5/libgss-shishi.la endif localedir = $(datadir)/locale DEFS = -DLOCALEDIR=\"$(localedir)\" @DEFS@ gss-1.0.3/lib/meta.c��������������������������������������������������������������������������������0000664�0000000�0000000�00000006462�12415506237�011055� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* meta.c --- Implementation of function selection depending on mechanism. * Copyright (C) 2003-2014 Simon Josefsson * * This file is part of the Generic Security Service (GSS). * * GSS 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. * * GSS 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 GSS; if not, see http://www.gnu.org/licenses or write to * the Free Software Foundation, Inc., 51 Franklin Street, Fifth * Floor, Boston, MA 02110-1301, USA. * */ #include "internal.h" #include "meta.h" #ifdef USE_KERBEROS5 # include <gss/krb5.h> # include "krb5/protos.h" #endif static _gss_mech_api_desc _gss_mech_apis[] = { #ifdef USE_KERBEROS5 { &GSS_KRB5_static, "GS2-KRB5", "Kerberos V5", N_("Kerberos V5 GSS-API mechanism"), { /* Mandatory name-types. */ &GSS_KRB5_NT_PRINCIPAL_NAME_static, &GSS_C_NT_HOSTBASED_SERVICE_static, &GSS_C_NT_EXPORT_NAME_static}, gss_krb5_init_sec_context, gss_krb5_canonicalize_name, gss_krb5_export_name, gss_krb5_wrap, gss_krb5_unwrap, gss_krb5_get_mic, gss_krb5_verify_mic, gss_krb5_display_status, gss_krb5_acquire_cred, gss_krb5_release_cred, gss_krb5_accept_sec_context, gss_krb5_delete_sec_context, gss_krb5_context_time, gss_krb5_inquire_cred, gss_krb5_inquire_cred_by_mech}, #endif { NULL, NULL, NULL, NULL, { NULL, NULL, NULL}, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL, NULL} }; _gss_mech_api_t _gss_find_mech_no_default (const gss_OID oid) { size_t i; for (i = 0; _gss_mech_apis[i].mech; i++) if (gss_oid_equal (oid, _gss_mech_apis[i].mech)) return &_gss_mech_apis[i]; return NULL; } _gss_mech_api_t _gss_find_mech (const gss_OID oid) { _gss_mech_api_t p = _gss_find_mech_no_default (oid); if (!p && _gss_mech_apis[0].mech) /* FIXME. When we support more than one mechanism, make it possible to configure the default mechanism. */ return &_gss_mech_apis[0]; return p; } _gss_mech_api_t _gss_find_mech_by_saslname (const gss_buffer_t sasl_mech_name) { size_t i; if (sasl_mech_name == NULL || sasl_mech_name->value == NULL || sasl_mech_name->length == 0) return NULL; for (i = 0; _gss_mech_apis[i].mech; i++) if (strlen (_gss_mech_apis[i].sasl_name) == sasl_mech_name->length && memcmp (_gss_mech_apis[i].sasl_name, sasl_mech_name->value, sasl_mech_name->length) == 0) return &_gss_mech_apis[i]; return NULL; } OM_uint32 _gss_indicate_mechs1 (OM_uint32 * minor_status, gss_OID_set * mech_set) { OM_uint32 maj_stat; int i; for (i = 0; _gss_mech_apis[i].mech; i++) { maj_stat = gss_add_oid_set_member (minor_status, _gss_mech_apis[i].mech, mech_set); if (GSS_ERROR (maj_stat)) return maj_stat; } if (minor_status) *minor_status = 0; return GSS_S_COMPLETE; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gss-1.0.3/lib/cred.c��������������������������������������������������������������������������������0000664�0000000�0000000�00000054557�12415506237�011054� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* cred.c --- Implementation of GSS-API Credential Management functions. * Copyright (C) 2003-2014 Simon Josefsson * * This file is part of the Generic Security Service (GSS). * * GSS 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. * * GSS 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 GSS; if not, see http://www.gnu.org/licenses or write to * the Free Software Foundation, Inc., 51 Franklin Street, Fifth * Floor, Boston, MA 02110-1301, USA. * */ #include "internal.h" /* _gss_find_mech */ #include "meta.h" /** * gss_acquire_cred: * @minor_status: (integer, modify) Mechanism specific status code. * @desired_name: (gss_name_t, read) Name of principal whose * credential should be acquired. * @time_req: (Integer, read, optional) Number of seconds that * credentials should remain valid. Specify GSS_C_INDEFINITE to * request that the credentials have the maximum permitted lifetime. * @desired_mechs: (Set of Object IDs, read, optional) Set of * underlying security mechanisms that may be used. * GSS_C_NO_OID_SET may be used to obtain an implementation-specific * default. * @cred_usage: (gss_cred_usage_t, read) GSS_C_BOTH - Credentials may * be used either to initiate or accept security contexts. * GSS_C_INITIATE - Credentials will only be used to initiate * security contexts. GSS_C_ACCEPT - Credentials will only be used * to accept security contexts. * @output_cred_handle: (gss_cred_id_t, modify) The returned * credential handle. Resources associated with this credential * handle must be released by the application after use with a call * to gss_release_cred(). * @actual_mechs: (Set of Object IDs, modify, optional) The set of * mechanisms for which the credential is valid. Storage associated * with the returned OID-set must be released by the application * after use with a call to gss_release_oid_set(). Specify NULL if * not required. * @time_rec: (Integer, modify, optional) Actual number of seconds for * which the returned credentials will remain valid. If the * implementation does not support expiration of credentials, the * value GSS_C_INDEFINITE will be returned. Specify NULL if not * required. * * Allows an application to acquire a handle for a pre-existing * credential by name. GSS-API implementations must impose a local * access-control policy on callers of this routine to prevent * unauthorized callers from acquiring credentials to which they are * not entitled. This routine is not intended to provide a "login to * the network" function, as such a function would involve the * creation of new credentials rather than merely acquiring a handle * to existing credentials. Such functions, if required, should be * defined in implementation-specific extensions to the API. * * If desired_name is GSS_C_NO_NAME, the call is interpreted as a * request for a credential handle that will invoke default behavior * when passed to gss_init_sec_context() (if cred_usage is * GSS_C_INITIATE or GSS_C_BOTH) or gss_accept_sec_context() (if * cred_usage is GSS_C_ACCEPT or GSS_C_BOTH). * * Mechanisms should honor the desired_mechs parameter, and return a * credential that is suitable to use only with the requested * mechanisms. An exception to this is the case where one underlying * credential element can be shared by multiple mechanisms; in this * case it is permissible for an implementation to indicate all * mechanisms with which the credential element may be used. If * desired_mechs is an empty set, behavior is undefined. * * This routine is expected to be used primarily by context acceptors, * since implementations are likely to provide mechanism-specific ways * of obtaining GSS-API initiator credentials from the system login * process. Some implementations may therefore not support the * acquisition of GSS_C_INITIATE or GSS_C_BOTH credentials via * gss_acquire_cred for any name other than GSS_C_NO_NAME, or a name * produced by applying either gss_inquire_cred to a valid credential, * or gss_inquire_context to an active context. * * If credential acquisition is time-consuming for a mechanism, the * mechanism may choose to delay the actual acquisition until the * credential is required (e.g. by gss_init_sec_context or * gss_accept_sec_context). Such mechanism-specific implementation * decisions should be invisible to the calling application; thus a * call of gss_inquire_cred immediately following the call of * gss_acquire_cred must return valid credential data, and may * therefore incur the overhead of a deferred credential acquisition. * * Return value: * * `GSS_S_COMPLETE`: Successful completion. * * `GSS_S_BAD_MECH`: Unavailable mechanism requested. * * `GSS_S_BAD_NAMETYPE`: Type contained within desired_name parameter * is not supported. * * `GSS_S_BAD_NAME`: Value supplied for desired_name parameter is ill * formed. * * `GSS_S_CREDENTIALS_EXPIRED`: The credentials could not be acquired * Because they have expired. * * `GSS_S_NO_CRED`: No credentials were found for the specified name. **/ OM_uint32 gss_acquire_cred (OM_uint32 * minor_status, const gss_name_t desired_name, OM_uint32 time_req, const gss_OID_set desired_mechs, gss_cred_usage_t cred_usage, gss_cred_id_t * output_cred_handle, gss_OID_set * actual_mechs, OM_uint32 * time_rec) { _gss_mech_api_t mech = NULL; OM_uint32 maj_stat; if (!output_cred_handle) return GSS_S_NO_CRED | GSS_S_CALL_INACCESSIBLE_WRITE; if (desired_mechs != GSS_C_NO_OID_SET) { size_t i; /* Is the desired_mechs an "OR" or "AND" list? I.e., if the OID set contain several OIDs, MUST the credential work with all of them? Or just any of them? The specification isn't entirely clear on this, to me. This implement an OR list, chosing the first mechanism in the OID set we support. We need more information in meta.c to implement AND lists. */ for (i = 0; mech == NULL && i < desired_mechs->count; i++) mech = _gss_find_mech ((&desired_mechs->elements)[i]); } else mech = _gss_find_mech (GSS_C_NO_OID); if (mech == NULL) { if (minor_status) *minor_status = 0; return GSS_S_BAD_MECH; } *output_cred_handle = calloc (sizeof (**output_cred_handle), 1); if (!*output_cred_handle) { if (minor_status) *minor_status = ENOMEM; return GSS_S_FAILURE; } (*output_cred_handle)->mech = mech->mech; maj_stat = mech->acquire_cred (minor_status, desired_name, time_req, desired_mechs, cred_usage, output_cred_handle, actual_mechs, time_rec); if (GSS_ERROR (maj_stat)) { free (*output_cred_handle); *output_cred_handle = GSS_C_NO_CREDENTIAL; return maj_stat; } return GSS_S_COMPLETE; } /** * gss_add_cred: * @minor_status: (integer, modify) Mechanism specific status code. * @input_cred_handle: (gss_cred_id_t, read, optional) The credential * to which a credential-element will be added. If * GSS_C_NO_CREDENTIAL is specified, the routine will compose the * new credential based on default behavior (see text). * Note that, while the credential-handle is not modified by * gss_add_cred(), the underlying credential will be modified if * output_credential_handle is NULL. * @desired_name: (gss_name_t, read.) Name of principal whose * credential should be acquired. * @desired_mech: (Object ID, read) Underlying security mechanism with * which the credential may be used. * @cred_usage: (gss_cred_usage_t, read) GSS_C_BOTH - Credential may * be used either to initiate or accept security contexts. * GSS_C_INITIATE - Credential will only be used to initiate * security contexts. GSS_C_ACCEPT - Credential will only be used * to accept security contexts. * @initiator_time_req: (Integer, read, optional) number of seconds * that the credential should remain valid for initiating security * contexts. This argument is ignored if the composed credentials * are of type GSS_C_ACCEPT. Specify GSS_C_INDEFINITE to request * that the credentials have the maximum permitted initiator * lifetime. * @acceptor_time_req: (Integer, read, optional) number of seconds * that the credential should remain valid for accepting security * contexts. This argument is ignored if the composed credentials * are of type GSS_C_INITIATE. Specify GSS_C_INDEFINITE to request * that the credentials have the maximum permitted initiator * lifetime. * @output_cred_handle: (gss_cred_id_t, modify, optional) The returned * credential handle, containing the new credential-element and all * the credential-elements from input_cred_handle. If a valid * pointer to a gss_cred_id_t is supplied for this parameter, * gss_add_cred creates a new credential handle containing all * credential-elements from the input_cred_handle and the newly * acquired credential-element; if NULL is specified for this * parameter, the newly acquired credential-element will be added to * the credential identified by input_cred_handle. The resources * associated with any credential handle returned via this parameter * must be released by the application after use with a call to * gss_release_cred(). * @actual_mechs: (Set of Object IDs, modify, optional) The complete * set of mechanisms for which the new credential is valid. Storage * for the returned OID-set must be freed by the application after * use with a call to gss_release_oid_set(). Specify NULL if not * required. * @initiator_time_rec: (Integer, modify, optional) Actual number of * seconds for which the returned credentials will remain valid for * initiating contexts using the specified mechanism. If the * implementation or mechanism does not support expiration of * credentials, the value GSS_C_INDEFINITE will be returned. Specify * NULL if not required * @acceptor_time_rec: (Integer, modify, optional) Actual number of * seconds for which the returned credentials will remain valid for * accepting security contexts using the specified mechanism. If * the implementation or mechanism does not support expiration of * credentials, the value GSS_C_INDEFINITE will be returned. Specify * NULL if not required * * Adds a credential-element to a credential. The credential-element is * identified by the name of the principal to which it refers. GSS-API * implementations must impose a local access-control policy on callers * of this routine to prevent unauthorized callers from acquiring * credential-elements to which they are not entitled. This routine is * not intended to provide a "login to the network" function, as such a * function would involve the creation of new mechanism-specific * authentication data, rather than merely acquiring a GSS-API handle to * existing data. Such functions, if required, should be defined in * implementation-specific extensions to the API. * * If desired_name is GSS_C_NO_NAME, the call is interpreted as a * request to add a credential element that will invoke default behavior * when passed to gss_init_sec_context() (if cred_usage is * GSS_C_INITIATE or GSS_C_BOTH) or gss_accept_sec_context() (if * cred_usage is GSS_C_ACCEPT or GSS_C_BOTH). * * This routine is expected to be used primarily by context acceptors, * since implementations are likely to provide mechanism-specific ways * of obtaining GSS-API initiator credentials from the system login * process. Some implementations may therefore not support the * acquisition of GSS_C_INITIATE or GSS_C_BOTH credentials via * gss_acquire_cred for any name other than GSS_C_NO_NAME, or a name * produced by applying either gss_inquire_cred to a valid credential, * or gss_inquire_context to an active context. * * If credential acquisition is time-consuming for a mechanism, the * mechanism may choose to delay the actual acquisition until the * credential is required (e.g. by gss_init_sec_context or * gss_accept_sec_context). Such mechanism-specific implementation * decisions should be invisible to the calling application; thus a call * of gss_inquire_cred immediately following the call of gss_add_cred * must return valid credential data, and may therefore incur the * overhead of a deferred credential acquisition. * * This routine can be used to either compose a new credential * containing all credential-elements of the original in addition to the * newly-acquire credential-element, or to add the new credential- * element to an existing credential. If NULL is specified for the * output_cred_handle parameter argument, the new credential-element * will be added to the credential identified by input_cred_handle; if a * valid pointer is specified for the output_cred_handle parameter, a * new credential handle will be created. * * If GSS_C_NO_CREDENTIAL is specified as the input_cred_handle, * gss_add_cred will compose a credential (and set the * output_cred_handle parameter accordingly) based on default behavior. * That is, the call will have the same effect as if the application had * first made a call to gss_acquire_cred(), specifying the same usage * and passing GSS_C_NO_NAME as the desired_name parameter to obtain an * explicit credential handle embodying default behavior, passed this * credential handle to gss_add_cred(), and finally called * gss_release_cred() on the first credential handle. * * If GSS_C_NO_CREDENTIAL is specified as the input_cred_handle * parameter, a non-NULL output_cred_handle must be supplied. * * Return value: * * `GSS_S_COMPLETE`: Successful completion. * * `GSS_S_BAD_MECH`: Unavailable mechanism requested. * * `GSS_S_BAD_NAMETYPE`: Type contained within desired_name parameter * is not supported. * * `GSS_S_BAD_NAME`: Value supplied for desired_name parameter is * ill-formed. * * `GSS_S_DUPLICATE_ELEMENT`: The credential already contains an * element for the requested mechanism with overlapping usage and * validity period. * * `GSS_S_CREDENTIALS_EXPIRED`: The required credentials could not be * added because they have expired. * * `GSS_S_NO_CRED`: No credentials were found for the specified name. **/ OM_uint32 gss_add_cred (OM_uint32 * minor_status, const gss_cred_id_t input_cred_handle, const gss_name_t desired_name, const gss_OID desired_mech, gss_cred_usage_t cred_usage, OM_uint32 initiator_time_req, OM_uint32 acceptor_time_req, gss_cred_id_t * output_cred_handle, gss_OID_set * actual_mechs, OM_uint32 * initiator_time_rec, OM_uint32 * acceptor_time_rec) { return GSS_S_UNAVAILABLE; } /** * gss_inquire_cred: * @minor_status: (integer, modify) Mechanism specific status code. * @cred_handle: (gss_cred_id_t, read) A handle that refers to the * target credential. Specify GSS_C_NO_CREDENTIAL to inquire about * the default initiator principal. * @name: (gss_name_t, modify, optional) The name whose identity the * credential asserts. Storage associated with this name should be * freed by the application after use with a call to * gss_release_name(). Specify NULL if not required. * @lifetime: (Integer, modify, optional) The number of seconds for * which the credential will remain valid. If the credential has * expired, this parameter will be set to zero. If the * implementation does not support credential expiration, the value * GSS_C_INDEFINITE will be returned. Specify NULL if not required. * @cred_usage: (gss_cred_usage_t, modify, optional) How the * credential may be used. One of the following: GSS_C_INITIATE, * GSS_C_ACCEPT, GSS_C_BOTH. Specify NULL if not required. * @mechanisms: (gss_OID_set, modify, optional) Set of mechanisms * supported by the credential. Storage associated with this OID * set must be freed by the application after use with a call to * gss_release_oid_set(). Specify NULL if not required. * * Obtains information about a credential. * * Return value: * * `GSS_S_COMPLETE`: Successful completion. * * `GSS_S_NO_CRED`: The referenced credentials could not be accessed. * * `GSS_S_DEFECTIVE_CREDENTIAL`: The referenced credentials were invalid. * * `GSS_S_CREDENTIALS_EXPIRED`: The referenced credentials have * expired. If the lifetime parameter was not passed as NULL, it will * be set to 0. **/ OM_uint32 gss_inquire_cred (OM_uint32 * minor_status, const gss_cred_id_t cred_handle, gss_name_t * name, OM_uint32 * lifetime, gss_cred_usage_t * cred_usage, gss_OID_set * mechanisms) { gss_cred_id_t credh = cred_handle; _gss_mech_api_t mech; OM_uint32 maj_stat; if (cred_handle == GSS_C_NO_CREDENTIAL) { maj_stat = gss_acquire_cred (minor_status, GSS_C_NO_NAME, GSS_C_INDEFINITE, GSS_C_NO_OID_SET, GSS_C_INITIATE, &credh, NULL, NULL); if (GSS_ERROR (maj_stat)) return maj_stat; } mech = _gss_find_mech (credh->mech); if (mech == NULL) { if (minor_status) *minor_status = 0; return GSS_S_BAD_MECH; } maj_stat = mech->inquire_cred (minor_status, credh, name, lifetime, cred_usage, mechanisms); if (cred_handle == GSS_C_NO_CREDENTIAL) gss_release_cred (NULL, &credh); return maj_stat; } /** * gss_inquire_cred_by_mech: * @minor_status: (Integer, modify) Mechanism specific status code. * @cred_handle: (gss_cred_id_t, read) A handle that refers to the * target credential. Specify GSS_C_NO_CREDENTIAL to inquire about * the default initiator principal. * @mech_type: (gss_OID, read) The mechanism for which information * should be returned. * @name: (gss_name_t, modify, optional) The name whose identity the * credential asserts. Storage associated with this name must be * freed by the application after use with a call to * gss_release_name(). Specify NULL if not required. * @initiator_lifetime: (Integer, modify, optional) The number of * seconds for which the credential will remain capable of * initiating security contexts under the specified mechanism. If * the credential can no longer be used to initiate contexts, or if * the credential usage for this mechanism is GSS_C_ACCEPT, this * parameter will be set to zero. If the implementation does not * support expiration of initiator credentials, the value * GSS_C_INDEFINITE will be returned. Specify NULL if not required. * @acceptor_lifetime: (Integer, modify, optional) The number of * seconds for which the credential will remain capable of accepting * security contexts under the specified mechanism. If the * credential can no longer be used to accept contexts, or if the * credential usage for this mechanism is GSS_C_INITIATE, this * parameter will be set to zero. If the implementation does not * support expiration of acceptor credentials, the value * GSS_C_INDEFINITE will be returned. Specify NULL if not required. * @cred_usage: (gss_cred_usage_t, modify, optional) How the * credential may be used with the specified mechanism. One of the * following: GSS_C_INITIATE, GSS_C_ACCEPT, GSS_C_BOTH. Specify NULL * if not required. * * Obtains per-mechanism information about a credential. * * Return value: * * `GSS_S_COMPLETE`: Successful completion. * * `GSS_S_NO_CRED`: The referenced credentials could not be accessed. * * `GSS_S_DEFECTIVE_CREDENTIAL`: The referenced credentials were invalid. * * `GSS_S_CREDENTIALS_EXPIRED`: The referenced credentials have * expired. If the lifetime parameter was not passed as NULL, it will * be set to 0. **/ OM_uint32 gss_inquire_cred_by_mech (OM_uint32 * minor_status, const gss_cred_id_t cred_handle, const gss_OID mech_type, gss_name_t * name, OM_uint32 * initiator_lifetime, OM_uint32 * acceptor_lifetime, gss_cred_usage_t * cred_usage) { _gss_mech_api_t mech; gss_cred_id_t credh = cred_handle; OM_uint32 maj_stat; if (mech_type == GSS_C_NO_OID) { if (minor_status) *minor_status = 0; return GSS_S_BAD_MECH; } mech = _gss_find_mech (mech_type); if (mech == NULL) { if (minor_status) *minor_status = 0; return GSS_S_BAD_MECH; } if (cred_handle == GSS_C_NO_CREDENTIAL) { maj_stat = gss_acquire_cred (minor_status, GSS_C_NO_NAME, GSS_C_INDEFINITE, /* FIXME: We should create an OID set with mech_type and pass it as desired_mechs. Maybe even check actual_mechs too. */ GSS_C_NO_OID_SET, GSS_C_INITIATE, &credh, NULL, NULL); if (GSS_ERROR (maj_stat)) return maj_stat; } maj_stat = mech->inquire_cred_by_mech (minor_status, credh, mech_type, name, initiator_lifetime, acceptor_lifetime, cred_usage); if (cred_handle == GSS_C_NO_CREDENTIAL) gss_release_cred (NULL, &credh); return maj_stat; } /** * gss_release_cred: * @minor_status: (Integer, modify) Mechanism specific status code. * @cred_handle: (gss_cred_id_t, modify, optional) Opaque handle * identifying credential to be released. If GSS_C_NO_CREDENTIAL is * supplied, the routine will complete successfully, but will do * nothing. * * Informs GSS-API that the specified credential handle is no longer * required by the application, and frees associated resources. The * cred_handle is set to GSS_C_NO_CREDENTIAL on successful completion * of this call. * * Return value: * * `GSS_S_COMPLETE`: Successful completion. * * `GSS_S_NO_CRED`: Credentials could not be accessed. **/ OM_uint32 gss_release_cred (OM_uint32 * minor_status, gss_cred_id_t * cred_handle) { _gss_mech_api_t mech; OM_uint32 maj_stat; if (!cred_handle) { if (minor_status) *minor_status = 0; return GSS_S_NO_CRED | GSS_S_CALL_INACCESSIBLE_READ; } if (*cred_handle == GSS_C_NO_CREDENTIAL) { if (minor_status) *minor_status = 0; return GSS_S_COMPLETE; } mech = _gss_find_mech ((*cred_handle)->mech); if (mech == NULL) { if (minor_status) *minor_status = 0; return GSS_S_DEFECTIVE_CREDENTIAL; } maj_stat = mech->release_cred (minor_status, cred_handle); free (*cred_handle); *cred_handle = GSS_C_NO_CREDENTIAL; if (GSS_ERROR (maj_stat)) return maj_stat; return GSS_S_COMPLETE; } �������������������������������������������������������������������������������������������������������������������������������������������������gss-1.0.3/lib/name.c��������������������������������������������������������������������������������0000664�0000000�0000000�00000044616�12415506237�011052� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* name.c --- Implementation of GSS-API Name Manipulation functions. * Copyright (C) 2003-2014 Simon Josefsson * * This file is part of the Generic Security Service (GSS). * * GSS 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. * * GSS 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 GSS; if not, see http://www.gnu.org/licenses or write to * the Free Software Foundation, Inc., 51 Franklin Street, Fifth * Floor, Boston, MA 02110-1301, USA. * */ #include "internal.h" /* _gss_find_mech */ #include "meta.h" /** * gss_import_name: * @minor_status: (Integer, modify) Mechanism specific status code. * @input_name_buffer: (buffer, octet-string, read) Buffer containing * contiguous string name to convert. * @input_name_type: (Object ID, read, optional) Object ID specifying * type of printable name. Applications may specify either * GSS_C_NO_OID to use a mechanism-specific default printable * syntax, or an OID recognized by the GSS-API implementation to * name a specific namespace. * @output_name: (gss_name_t, modify) Returned name in internal form. * Storage associated with this name must be freed by the * application after use with a call to gss_release_name(). * * Convert a contiguous string name to internal form. In general, the * internal name returned (via the @output_name parameter) will not * be an MN; the exception to this is if the @input_name_type * indicates that the contiguous string provided via the * @input_name_buffer parameter is of type GSS_C_NT_EXPORT_NAME, in * which case the returned internal name will be an MN for the * mechanism that exported the name. * * Return value: * * `GSS_S_COMPLETE`: Successful completion. * * `GSS_S_BAD_NAMETYPE`: The input_name_type was unrecognized. * * `GSS_S_BAD_NAME`: The input_name parameter could not be interpreted * as a name of the specified type. * * `GSS_S_BAD_MECH`: The input name-type was GSS_C_NT_EXPORT_NAME, but * the mechanism contained within the input-name is not supported. **/ OM_uint32 gss_import_name (OM_uint32 * minor_status, const gss_buffer_t input_name_buffer, const gss_OID input_name_type, gss_name_t * output_name) { if (!output_name) { if (minor_status) *minor_status = 0; return GSS_S_BAD_NAME | GSS_S_CALL_INACCESSIBLE_WRITE; } *output_name = malloc (sizeof (**output_name)); if (!*output_name) { if (minor_status) *minor_status = ENOMEM; return GSS_S_FAILURE; } (*output_name)->length = input_name_buffer->length; (*output_name)->value = malloc (input_name_buffer->length); if (!(*output_name)->value) { free (*output_name); if (minor_status) *minor_status = ENOMEM; return GSS_S_FAILURE; } memcpy ((*output_name)->value, input_name_buffer->value, input_name_buffer->length); (*output_name)->type = input_name_type; if (minor_status) *minor_status = 0; return GSS_S_COMPLETE; } /** * gss_display_name: * @minor_status: (Integer, modify) Mechanism specific status code. * @input_name: (gss_name_t, read) Name to be displayed. * @output_name_buffer: (buffer, character-string, modify) Buffer to * receive textual name string. The application must free storage * associated with this name after use with a call to * gss_release_buffer(). * @output_name_type: (Object ID, modify, optional) The type of the * returned name. The returned gss_OID will be a pointer into * static storage, and should be treated as read-only by the caller * (in particular, the application should not attempt to free * it). Specify NULL if not required. * * Allows an application to obtain a textual representation of an * opaque internal-form name for display purposes. The syntax of a * printable name is defined by the GSS-API implementation. * * If input_name denotes an anonymous principal, the implementation * should return the gss_OID value GSS_C_NT_ANONYMOUS as the * output_name_type, and a textual name that is syntactically distinct * from all valid supported printable names in output_name_buffer. * * If input_name was created by a call to gss_import_name, specifying * GSS_C_NO_OID as the name-type, implementations that employ lazy * conversion between name types may return GSS_C_NO_OID via the * output_name_type parameter. * * Return value: * * `GSS_S_COMPLETE`: Successful completion. * * `GSS_S_BAD_NAME`: @input_name was ill-formed. **/ OM_uint32 gss_display_name (OM_uint32 * minor_status, const gss_name_t input_name, gss_buffer_t output_name_buffer, gss_OID * output_name_type) { if (!input_name) { if (minor_status) *minor_status = 0; return GSS_S_BAD_NAME; } output_name_buffer->length = input_name->length; output_name_buffer->value = malloc (input_name->length + 1); if (!output_name_buffer->value) { if (minor_status) *minor_status = ENOMEM; return GSS_S_FAILURE; } if (input_name->value) memcpy (output_name_buffer->value, input_name->value, input_name->length); if (output_name_type) *output_name_type = input_name->type; if (minor_status) *minor_status = 0; return GSS_S_COMPLETE; } /** * gss_compare_name: * @minor_status: (Integer, modify) Mechanism specific status code. * @name1: (gss_name_t, read) Internal-form name. * @name2: (gss_name_t, read) Internal-form name. * @name_equal: (boolean, modify) Non-zero - names refer to same * entity. Zero - names refer to different entities (strictly, the * names are not known to refer to the same identity). * * Allows an application to compare two internal-form names to * determine whether they refer to the same entity. * * If either name presented to gss_compare_name denotes an anonymous * principal, the routines should indicate that the two names do not * refer to the same identity. * * Return value: * * `GSS_S_COMPLETE`: Successful completion. * * `GSS_S_BAD_NAMETYPE`: The two names were of incomparable types. * * `GSS_S_BAD_NAME`: One or both of name1 or name2 was ill-formed. **/ OM_uint32 gss_compare_name (OM_uint32 * minor_status, const gss_name_t name1, const gss_name_t name2, int *name_equal) { if (minor_status) *minor_status = 0; if (!name1 || !name2) return GSS_S_BAD_NAME | GSS_S_CALL_INACCESSIBLE_READ; if (!gss_oid_equal (name1->type, name2->type)) return GSS_S_BAD_NAMETYPE; if (name_equal) *name_equal = (name1->length == name2->length) && memcmp (name1->value, name2->value, name1->length) == 0; return GSS_S_COMPLETE; } /** * gss_release_name: * @minor_status: (Integer, modify) Mechanism specific status code. * @name: (gss_name_t, modify) The name to be deleted. * * Free GSSAPI-allocated storage associated with an internal-form * name. The name is set to GSS_C_NO_NAME on successful completion of * this call. * * Return value: * * `GSS_S_COMPLETE`: Successful completion. * * `GSS_S_BAD_NAME`: The name parameter did not contain a valid name. **/ OM_uint32 gss_release_name (OM_uint32 * minor_status, gss_name_t * name) { if (minor_status) *minor_status = 0; if (!name) return GSS_S_BAD_NAME | GSS_S_CALL_INACCESSIBLE_READ; if (*name != GSS_C_NO_NAME) { if ((*name)->value) free ((*name)->value); free (*name); *name = GSS_C_NO_NAME; } return GSS_S_COMPLETE; } /** * gss_inquire_names_for_mech: * @minor_status: (Integer, modify) Mechanism specific status code. * @mechanism: (gss_OID, read) The mechanism to be interrogated. * @name_types: (gss_OID_set, modify) Set of name-types supported by * the specified mechanism. The returned OID set must be freed by * the application after use with a call to gss_release_oid_set(). * * Returns the set of nametypes supported by the specified mechanism. * * Return value: * * `GSS_S_COMPLETE`: Successful completion. **/ OM_uint32 gss_inquire_names_for_mech (OM_uint32 * minor_status, const gss_OID mechanism, gss_OID_set * name_types) { OM_uint32 maj_stat; _gss_mech_api_t mech; int i; mech = _gss_find_mech (mechanism); maj_stat = gss_create_empty_oid_set (minor_status, name_types); if (maj_stat != GSS_S_COMPLETE) return maj_stat; for (i = 0; mech->name_types[i]; i++) { maj_stat = gss_add_oid_set_member (minor_status, mech->name_types[i], name_types); if (maj_stat != GSS_S_COMPLETE) { gss_release_oid_set (minor_status, name_types); return maj_stat; } } if (minor_status) *minor_status = 0; return GSS_S_COMPLETE; } /* Add mechanism MECH to OID set MECH_TYPES if mechanism MECH support the NAME_TYPE name type. */ static OM_uint32 _gss_inquire_mechs_for_name3 (OM_uint32 * minor_status, gss_OID mech, gss_OID name_type, gss_OID_set * mech_types) { gss_OID_set oids; int supported; OM_uint32 maj_stat; maj_stat = gss_inquire_names_for_mech (minor_status, mech, &oids); if (GSS_ERROR (maj_stat)) return maj_stat; maj_stat = gss_test_oid_set_member (minor_status, name_type, oids, &supported); gss_release_oid_set (minor_status, &oids); if (GSS_ERROR (maj_stat)) return maj_stat; if (supported) { maj_stat = gss_add_oid_set_member (minor_status, mech, mech_types); if (GSS_ERROR (maj_stat)) return maj_stat; } if (minor_status) *minor_status = 0; return GSS_S_COMPLETE; } /* Iterate over SUPPORTED_MECH_TYPES and invoke gss_inquire_mechs_for_name3 on each type, thus adding all mechanism OIDs, that support the NAME_TYPE name type, to OUT_MECH_TYPES. */ static OM_uint32 _gss_inquire_mechs_for_name2 (OM_uint32 * minor_status, gss_OID name_type, gss_OID_set * out_mech_types, gss_OID_set supported_mech_types) { OM_uint32 maj_stat; size_t i; for (i = 0; i < supported_mech_types->count; i++) { maj_stat = _gss_inquire_mechs_for_name3 (minor_status, &(supported_mech_types->elements)[i], name_type, out_mech_types); if (GSS_ERROR (maj_stat)) return maj_stat; } if (minor_status) *minor_status = 0; return GSS_S_COMPLETE; } /* List all supported mechanisms, and invoke gss_inquire_mechs_for_name2, thus adding all mechanism OIDs, that support the NAME_TYPE name type, to OUT_MECH_TYPES. */ static OM_uint32 _gss_inquire_mechs_for_name1 (OM_uint32 * minor_status, gss_OID name_type, gss_OID_set * out_mech_types) { OM_uint32 maj_stat; gss_OID_set supported_mech_types; maj_stat = gss_indicate_mechs (minor_status, &supported_mech_types); if (GSS_ERROR (maj_stat)) return maj_stat; maj_stat = _gss_inquire_mechs_for_name2 (minor_status, name_type, out_mech_types, supported_mech_types); gss_release_oid_set (minor_status, &supported_mech_types); if (GSS_ERROR (maj_stat)) return maj_stat; if (minor_status) *minor_status = 0; return GSS_S_COMPLETE; } /** * gss_inquire_mechs_for_name: * @minor_status: (Integer, modify) Mechanism specific status code. * @input_name: (gss_name_t, read) The name to which the inquiry * relates. * @mech_types: (gss_OID_set, modify) Set of mechanisms that may * support the specified name. The returned OID set must be freed * by the caller after use with a call to gss_release_oid_set(). * * Returns the set of mechanisms supported by the GSS-API * implementation that may be able to process the specified name. * * Each mechanism returned will recognize at least one element within * the name. It is permissible for this routine to be implemented * within a mechanism-independent GSS-API layer, using the type * information contained within the presented name, and based on * registration information provided by individual mechanism * implementations. This means that the returned mech_types set may * indicate that a particular mechanism will understand the name when * in fact it would refuse to accept the name as input to * gss_canonicalize_name, gss_init_sec_context, gss_acquire_cred or * gss_add_cred (due to some property of the specific name, as opposed * to the name type). Thus this routine should be used only as a * prefilter for a call to a subsequent mechanism-specific routine. * * Return value: * * `GSS_S_COMPLETE`: Successful completion. * * `GSS_S_BAD_NAME`: The input_name parameter was ill-formed. * * `GSS_S_BAD_NAMETYPE`: The input_name parameter contained an invalid * or unsupported type of name. **/ OM_uint32 gss_inquire_mechs_for_name (OM_uint32 * minor_status, const gss_name_t input_name, gss_OID_set * mech_types) { OM_uint32 maj_stat; if (input_name == GSS_C_NO_NAME) { if (minor_status) *minor_status = 0; return GSS_S_BAD_NAME | GSS_S_CALL_INACCESSIBLE_READ; } maj_stat = gss_create_empty_oid_set (minor_status, mech_types); if (GSS_ERROR (maj_stat)) return maj_stat; maj_stat = _gss_inquire_mechs_for_name1 (minor_status, input_name->type, mech_types); if (GSS_ERROR (maj_stat)) { gss_release_oid_set (minor_status, mech_types); return maj_stat; } if (minor_status) *minor_status = 0; return GSS_S_COMPLETE; } /** * gss_export_name: * @minor_status: (Integer, modify) Mechanism specific status code. * @input_name: (gss_name_t, read) The MN to be exported. * @exported_name: (gss_buffer_t, octet-string, modify) The canonical * contiguous string form of @input_name. Storage associated with * this string must freed by the application after use with * gss_release_buffer(). * * To produce a canonical contiguous string representation of a * mechanism name (MN), suitable for direct comparison (e.g. with * memcmp) for use in authorization functions (e.g. matching entries * in an access-control list). The @input_name parameter must specify * a valid MN (i.e. an internal name generated by * gss_accept_sec_context() or by gss_canonicalize_name()). * * Return value: * * `GSS_S_COMPLETE`: Successful completion. * * `GSS_S_NAME_NOT_MN`: The provided internal name was not a mechanism * name. * * `GSS_S_BAD_NAME`: The provided internal name was ill-formed. * * `GSS_S_BAD_NAMETYPE`: The internal name was of a type not supported * by the GSS-API implementation. **/ OM_uint32 gss_export_name (OM_uint32 * minor_status, const gss_name_t input_name, gss_buffer_t exported_name) { OM_uint32 maj_stat; gss_OID_set mechs; _gss_mech_api_t mech; maj_stat = gss_inquire_mechs_for_name (minor_status, input_name, &mechs); if (GSS_ERROR (maj_stat)) return maj_stat; if (mechs->count == 0) { if (minor_status) *minor_status = 0; return GSS_S_BAD_NAMETYPE; } /* We just select a random mechanism that support this name-type. I'm not sure how we can be more predicatable, given the definition of this function. */ mech = _gss_find_mech (mechs->elements); if (mech == NULL) { if (minor_status) *minor_status = 0; return GSS_S_BAD_MECH; } return mech->export_name (minor_status, input_name, exported_name); } /** * gss_canonicalize_name: * @minor_status: (Integer, modify) Mechanism specific status code. * @input_name: (gss_name_t, read) The name for which a canonical form * is desired. * @mech_type: (Object ID, read) The authentication mechanism for * which the canonical form of the name is desired. The desired * mechanism must be specified explicitly; no default is provided. * @output_name: (gss_name_t, modify) The resultant canonical name. * Storage associated with this name must be freed by the * application after use with a call to gss_release_name(). * * Generate a canonical mechanism name (MN) from an arbitrary internal * name. The mechanism name is the name that would be returned to a * context acceptor on successful authentication of a context where * the initiator used the input_name in a successful call to * gss_acquire_cred, specifying an OID set containing @mech_type as * its only member, followed by a call to gss_init_sec_context(), * specifying @mech_type as the authentication mechanism. * * Return value: * * `GSS_S_COMPLETE`: Successful completion. **/ OM_uint32 gss_canonicalize_name (OM_uint32 * minor_status, const gss_name_t input_name, const gss_OID mech_type, gss_name_t * output_name) { _gss_mech_api_t mech; mech = _gss_find_mech (mech_type); if (mech == NULL) { if (minor_status) *minor_status = 0; return GSS_S_BAD_MECH; } return mech->canonicalize_name (minor_status, input_name, mech_type, output_name); } /** * gss_duplicate_name: * @minor_status: (Integer, modify) Mechanism specific status code. * @src_name: (gss_name_t, read) Internal name to be duplicated. * @dest_name: (gss_name_t, modify) The resultant copy of @src_name. * Storage associated with this name must be freed by the application * after use with a call to gss_release_name(). * * Create an exact duplicate of the existing internal name @src_name. * The new @dest_name will be independent of src_name (i.e. @src_name * and @dest_name must both be released, and the release of one shall * not affect the validity of the other). * * Return value: * * `GSS_S_COMPLETE`: Successful completion. * * `GSS_S_BAD_NAME`: The src_name parameter was ill-formed. **/ OM_uint32 gss_duplicate_name (OM_uint32 * minor_status, const gss_name_t src_name, gss_name_t * dest_name) { if (src_name == GSS_C_NO_NAME) { if (minor_status) *minor_status = 0; return GSS_S_BAD_NAME; } if (!dest_name) { if (minor_status) *minor_status = 0; return GSS_S_FAILURE | GSS_S_CALL_INACCESSIBLE_WRITE; } *dest_name = malloc (sizeof (**dest_name)); if (!*dest_name) { if (minor_status) *minor_status = ENOMEM; return GSS_S_FAILURE; } (*dest_name)->type = src_name->type; (*dest_name)->length = src_name->length; (*dest_name)->value = malloc (src_name->length + 1); if (!(*dest_name)->value) { free (*dest_name); if (minor_status) *minor_status = ENOMEM; return GSS_S_FAILURE; } memcpy ((*dest_name)->value, src_name->value, src_name->length); (*dest_name)->value[src_name->length] = '\0'; if (minor_status) *minor_status = 0; return GSS_S_COMPLETE; } ������������������������������������������������������������������������������������������������������������������gss-1.0.3/lib/krb5/���������������������������������������������������������������������������������0000755�0000000�0000000�00000000000�12415510376�010673� 5����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������gss-1.0.3/lib/krb5/k5internal.h���������������������������������������������������������������������0000664�0000000�0000000�00000002737�12415506237�013054� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* k5internal.h --- Internal header file for Kerberos 5 GSS. * Copyright (C) 2003-2014 Simon Josefsson * * This file is part of the Generic Security Service (GSS). * * GSS 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. * * GSS 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 GSS; if not, see http://www.gnu.org/licenses or write to * the Free Software Foundation, Inc., 51 Franklin Street, Fifth * Floor, Boston, MA 02110-1301, USA. * */ #include "internal.h" #include "protos.h" #include <shishi.h> typedef struct _gss_krb5_cred_struct { Shishi *sh; gss_name_t peerptr; /* For user-to-user, we could have a Shishi_tkt here too. */ Shishi_key *key; } _gss_krb5_cred_desc, *_gss_krb5_cred_t; typedef struct _gss_krb5_ctx_struct { Shishi *sh; Shishi_ap *ap; Shishi_tkt *tkt; Shishi_key *key; gss_name_t peerptr; int acceptor; uint32_t acceptseqnr; uint32_t initseqnr; OM_uint32 flags; int reqdone; int repdone; } _gss_krb5_ctx_desc, *_gss_krb5_ctx_t; OM_uint32 gss_krb5_tktlifetime (Shishi_tkt * tkt); ���������������������������������gss-1.0.3/lib/krb5/utils.c��������������������������������������������������������������������������0000664�0000000�0000000�00000002454�12415506237�012127� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* krb5/utils.c --- Kerberos 5 GSS-API helper functions. * Copyright (C) 2003-2014 Simon Josefsson * * This file is part of the Generic Security Service (GSS). * * GSS 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. * * GSS 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 GSS; if not, see http://www.gnu.org/licenses or write to * the Free Software Foundation, Inc., 51 Franklin Street, Fifth * Floor, Boston, MA 02110-1301, USA. * */ /* Get specification. */ #include "k5internal.h" /* Return number of seconds left of ticket lifetime, or 0 if ticket has expired, or GSS_C_INDEFINITE if ticket is NULL. */ OM_uint32 gss_krb5_tktlifetime (Shishi_tkt * tkt) { time_t now, end; if (!tkt) return GSS_C_INDEFINITE; if (!shishi_tkt_valid_now_p (tkt)) return 0; now = time (NULL); end = shishi_tkt_endctime (tkt); return end - now; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gss-1.0.3/lib/krb5/checksum.c�����������������������������������������������������������������������0000664�0000000�0000000�00000021227�12415506237�012570� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* krb5/checksum.c --- (Un)pack checksum fields in Krb5 GSS contexts. * Copyright (C) 2003-2014 Simon Josefsson * * This file is part of the Generic Security Service (GSS). * * GSS 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. * * GSS 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 GSS; if not, see http://www.gnu.org/licenses or write to * the Free Software Foundation, Inc., 51 Franklin Street, Fifth * Floor, Boston, MA 02110-1301, USA. * */ /* Get GSS API. */ #include "k5internal.h" /* Get specification. */ #include "checksum.h" static void pack_uint32 (OM_uint32 i, char *buf) { buf[0] = i & 0xFF; buf[1] = (i >> 8) & 0xFF; buf[2] = (i >> 16) & 0xFF; buf[3] = (i >> 24) & 0xFF; } static int hash_cb (OM_uint32 * minor_status, gss_ctx_id_t * context_handle, const gss_channel_bindings_t input_chan_bindings, char **out) { gss_ctx_id_t ctx = *context_handle; _gss_krb5_ctx_t k5 = ctx->krb5; char *buf, *p; size_t len; int res; if (input_chan_bindings->initiator_address.length > UINT32_MAX || input_chan_bindings->acceptor_address.length > UINT32_MAX || input_chan_bindings->application_data.length > UINT32_MAX) return GSS_S_BAD_BINDINGS; len = sizeof (OM_uint32) * 5 + input_chan_bindings->initiator_address.length + input_chan_bindings->acceptor_address.length + input_chan_bindings->application_data.length; p = buf = malloc (len); if (!buf) { if (minor_status) *minor_status = ENOMEM; return GSS_S_FAILURE; } pack_uint32 (input_chan_bindings->initiator_addrtype, p); p += sizeof (OM_uint32); pack_uint32 (input_chan_bindings->initiator_address.length, p); p += sizeof (OM_uint32); if (input_chan_bindings->initiator_address.length > 0) { memcpy (p, input_chan_bindings->initiator_address.value, input_chan_bindings->initiator_address.length); p += input_chan_bindings->initiator_address.length; } pack_uint32 (input_chan_bindings->acceptor_addrtype, p); p += sizeof (OM_uint32); pack_uint32 (input_chan_bindings->acceptor_address.length, p); p += sizeof (OM_uint32); if (input_chan_bindings->acceptor_address.length > 0) { memcpy (p, input_chan_bindings->acceptor_address.value, input_chan_bindings->acceptor_address.length); p += input_chan_bindings->acceptor_address.length; } pack_uint32 (input_chan_bindings->application_data.length, p); p += sizeof (OM_uint32); if (input_chan_bindings->application_data.length > 0) memcpy (p, input_chan_bindings->application_data.value, input_chan_bindings->application_data.length); res = shishi_md5 (k5->sh, buf, len, out); free (buf); if (res != SHISHI_OK) return GSS_S_FAILURE; return GSS_S_COMPLETE; } /* Create the checksum value field from input parameters. */ OM_uint32 _gss_krb5_checksum_pack (OM_uint32 * minor_status, const gss_cred_id_t initiator_cred_handle, gss_ctx_id_t * context_handle, const gss_channel_bindings_t input_chan_bindings, OM_uint32 req_flags, char **data, size_t * datalen) { char *p; *datalen = 24; p = *data = malloc (*datalen); if (!p) { if (minor_status) *minor_status = ENOMEM; return GSS_S_FAILURE; } /* * RFC 1964 / gssapi-cfx: * * The checksum value field's format is as follows: * * Byte Name Description * 0..3 Lgth Number of bytes in Bnd field; * Currently contains hex 10 00 00 00 * (16, represented in little-endian form) */ memcpy (&p[0], "\x10\x00\x00\x00", 4); /* length of Bnd */ /* * 4..19 Bnd MD5 hash of channel bindings, taken over all non-null * components of bindings, in order of declaration. * Integer fields within channel bindings are represented * in little-endian order for the purposes of the MD5 * calculation. * * In computing the contents of the "Bnd" field, the following detailed * points apply: * * (1) Each integer field shall be formatted into four bytes, using * little-endian byte ordering, for purposes of MD5 hash * computation. * * (2) All input length fields within gss_buffer_desc elements of a * gss_channel_bindings_struct, even those which are zero-valued, * shall be included in the hash calculation; the value elements of * gss_buffer_desc elements shall be dereferenced, and the * resulting data shall be included within the hash computation, * only for the case of gss_buffer_desc elements having non-zero * length specifiers. * * (3) If the caller passes the value GSS_C_NO_BINDINGS instead of * a valid channel bindings structure, the Bnd field shall be set * to 16 zero-valued bytes. * */ if (input_chan_bindings != GSS_C_NO_CHANNEL_BINDINGS) { char *md5hash; int res; res = hash_cb (minor_status, context_handle, input_chan_bindings, &md5hash); if (res != GSS_S_COMPLETE) { free (p); return res; } memcpy (&p[4], md5hash, 16); free (md5hash); } else memset (&p[4], 0, 16); /* * 20..23 Flags Bit vector of context-establishment flags, * with values consistent with RFC-1509, p. 41: * GSS_C_DELEG_FLAG: 1 * GSS_C_MUTUAL_FLAG: 2 * GSS_C_REPLAY_FLAG: 4 * GSS_C_SEQUENCE_FLAG: 8 * GSS_C_CONF_FLAG: 16 * GSS_C_INTEG_FLAG: 32 * The resulting bit vector is encoded into bytes 20..23 * in little-endian form. */ req_flags &= /* GSS_C_DELEG_FLAG | */ GSS_C_MUTUAL_FLAG | GSS_C_REPLAY_FLAG | GSS_C_SEQUENCE_FLAG | GSS_C_CONF_FLAG | GSS_C_INTEG_FLAG; p[20] = req_flags & 0xFF; p[21] = (req_flags >> 8) & 0xFF; p[22] = (req_flags >> 16) & 0xFF; p[23] = (req_flags >> 24) & 0xFF; /* * 24..25 DlgOpt The delegation option identifier (=1) in * little-endian order [optional]. This field * and the next two fields are present if and * only if GSS_C_DELEG_FLAG is set as described * in section 4.1.1.1. * 26..27 Dlgth The length of the Deleg field in little- * endian order [optional]. * 28..(n-1) Deleg A KRB_CRED message (n = Dlgth + 28) * [optional]. * n..last Exts Extensions [optional]. * */ if (req_flags & GSS_C_DELEG_FLAG) { /* XXX We don't support credential delegation yet. We should not fail here, as GSS_C_DELEG_FLAG is masked out above, and in context.c. */ } return GSS_S_COMPLETE; } OM_uint32 _gss_krb5_checksum_parse (OM_uint32 * minor_status, gss_ctx_id_t * context_handle, const gss_channel_bindings_t input_chan_bindings) { gss_ctx_id_t ctx = *context_handle; _gss_krb5_ctx_t k5 = ctx->krb5; char *out = NULL; size_t len = 0; int rc; char *md5hash; if (shishi_ap_authenticator_cksumtype (k5->ap) != 0x8003) { if (minor_status) *minor_status = GSS_KRB5_S_G_VALIDATE_FAILED; return GSS_S_FAILURE; } rc = shishi_ap_authenticator_cksumdata (k5->ap, out, &len); if (rc != SHISHI_TOO_SMALL_BUFFER) return GSS_S_FAILURE; out = malloc (len); if (!out) { if (minor_status) *minor_status = ENOMEM; return GSS_S_FAILURE; } rc = shishi_ap_authenticator_cksumdata (k5->ap, out, &len); if (rc != SHISHI_OK) { free (out); return GSS_S_FAILURE; } if (memcmp (out, "\x10\x00\x00\x00", 4) != 0) { free (out); return GSS_S_DEFECTIVE_TOKEN; } if (input_chan_bindings != GSS_C_NO_CHANNEL_BINDINGS) { rc = hash_cb (minor_status, context_handle, input_chan_bindings, &md5hash); if (rc != GSS_S_COMPLETE) { free (out); return GSS_S_DEFECTIVE_TOKEN; } rc = memcmp (&out[4], md5hash, 16); free (md5hash); } else { char zeros[16]; memset (&zeros[0], 0, sizeof zeros); rc = memcmp (&out[4], zeros, 16); } free (out); if (rc != 0) return GSS_S_DEFECTIVE_TOKEN; return GSS_S_COMPLETE; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gss-1.0.3/lib/krb5/Makefile.am����������������������������������������������������������������������0000664�0000000�0000000�00000002473�12415506237�012660� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������## Process this file with automake to produce Makefile.in # Copyright (C) 2003-2014 Simon Josefsson # # This file is part of the Generic Security Service (GSS). # # GSS 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. # # GSS 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 GSS; if not, see http://www.gnu.org/licenses or write to # the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, # Boston, MA 02110-1301, USA. AM_CFLAGS = $(WARN_CFLAGS) $(WERROR_CFLAGS) AM_CPPFLAGS = -I$(top_srcdir)/lib/gl \ -I$(top_srcdir)/lib \ -I$(top_builddir)/lib/headers -I$(top_srcdir)/lib/headers noinst_LTLIBRARIES = libgss-shishi.la libgss_shishi_la_SOURCES = k5internal.h protos.h \ context.c checksum.c checksum.h error.c name.c cred.c msg.c oid.c \ utils.c libgss_shishi_la_LIBADD = @LTLIBINTL@ @LTLIBSHISHI@ localedir = $(datadir)/locale DEFS = -DLOCALEDIR=\"$(localedir)\" @DEFS@ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gss-1.0.3/lib/krb5/cred.c���������������������������������������������������������������������������0000664�0000000�0000000�00000013503�12415506237�011701� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* krb5/cred.c --- Kerberos 5 GSS-API credential management functions. * Copyright (C) 2003-2014 Simon Josefsson * * This file is part of the Generic Security Service (GSS). * * GSS 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. * * GSS 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 GSS; if not, see http://www.gnu.org/licenses or write to * the Free Software Foundation, Inc., 51 Franklin Street, Fifth * Floor, Boston, MA 02110-1301, USA. * */ /* Get specification. */ #include "k5internal.h" static OM_uint32 acquire_cred1 (OM_uint32 * minor_status, const gss_name_t desired_name, OM_uint32 time_req, const gss_OID_set desired_mechs, gss_cred_usage_t cred_usage, gss_cred_id_t * output_cred_handle, gss_OID_set * actual_mechs, OM_uint32 * time_rec) { gss_name_t name = desired_name; _gss_krb5_cred_t k5 = (*output_cred_handle)->krb5; OM_uint32 maj_stat; if (desired_name == GSS_C_NO_NAME) { gss_buffer_desc buf = { 4, (char *) "host" }; maj_stat = gss_import_name (minor_status, &buf, GSS_C_NT_HOSTBASED_SERVICE, &name); if (GSS_ERROR (maj_stat)) return maj_stat; } maj_stat = gss_krb5_canonicalize_name (minor_status, name, GSS_KRB5, &k5->peerptr); if (GSS_ERROR (maj_stat)) return maj_stat; if (k5->peerptr == GSS_C_NO_NAME) { maj_stat = gss_release_name (minor_status, &name); if (GSS_ERROR (maj_stat)) return maj_stat; return GSS_S_BAD_NAME; } if (shishi_init_server (&k5->sh) != SHISHI_OK) return GSS_S_FAILURE; { char *p; p = malloc (k5->peerptr->length + 1); if (!p) { if (minor_status) *minor_status = ENOMEM; return GSS_S_FAILURE; } memcpy (p, k5->peerptr->value, k5->peerptr->length); p[k5->peerptr->length] = 0; k5->key = shishi_hostkeys_for_serverrealm (k5->sh, p, NULL); free (p); } if (!k5->key) { if (minor_status) *minor_status = GSS_KRB5_S_KG_KEYTAB_NOMATCH; return GSS_S_NO_CRED; } if (time_rec) *time_rec = GSS_C_INDEFINITE; return GSS_S_COMPLETE; } OM_uint32 gss_krb5_acquire_cred (OM_uint32 * minor_status, const gss_name_t desired_name, OM_uint32 time_req, const gss_OID_set desired_mechs, gss_cred_usage_t cred_usage, gss_cred_id_t * output_cred_handle, gss_OID_set * actual_mechs, OM_uint32 * time_rec) { OM_uint32 maj_stat; gss_cred_id_t p = *output_cred_handle; p->krb5 = calloc (sizeof (*p->krb5), 1); if (!p->krb5) { if (minor_status) *minor_status = ENOMEM; return GSS_S_FAILURE; } if (actual_mechs) { maj_stat = gss_create_empty_oid_set (minor_status, actual_mechs); if (GSS_ERROR (maj_stat)) { free (p->krb5); return maj_stat; } maj_stat = gss_add_oid_set_member (minor_status, GSS_KRB5, actual_mechs); if (GSS_ERROR (maj_stat)) { free (p->krb5); return maj_stat; } } maj_stat = acquire_cred1 (minor_status, desired_name, time_req, desired_mechs, cred_usage, &p, actual_mechs, time_rec); if (GSS_ERROR (maj_stat)) { if (actual_mechs) gss_release_oid_set (NULL, actual_mechs); free (p->krb5); return maj_stat; } if (minor_status) *minor_status = 0; return GSS_S_COMPLETE; } static OM_uint32 inquire_cred (OM_uint32 * minor_status, const gss_cred_id_t cred_handle, gss_name_t * name, OM_uint32 * lifetime, gss_cred_usage_t * cred_usage, gss_OID_set * mechanisms) { OM_uint32 maj_stat; if (cred_handle == GSS_C_NO_CREDENTIAL) return GSS_S_NO_CRED; if (mechanisms) { maj_stat = gss_create_empty_oid_set (minor_status, mechanisms); if (GSS_ERROR (maj_stat)) return maj_stat; maj_stat = gss_add_oid_set_member (minor_status, GSS_KRB5, mechanisms); if (GSS_ERROR (maj_stat)) return maj_stat; } if (name) { maj_stat = gss_duplicate_name (minor_status, cred_handle->krb5->peerptr, name); if (GSS_ERROR (maj_stat)) return maj_stat; } if (cred_usage) *cred_usage = GSS_C_BOTH; if (lifetime) *lifetime = GSS_C_INDEFINITE; if (minor_status) *minor_status = 0; return GSS_S_COMPLETE; } OM_uint32 gss_krb5_inquire_cred (OM_uint32 * minor_status, const gss_cred_id_t cred_handle, gss_name_t * name, OM_uint32 * lifetime, gss_cred_usage_t * cred_usage, gss_OID_set * mechanisms) { return inquire_cred (minor_status, cred_handle, name, lifetime, cred_usage, mechanisms); } OM_uint32 gss_krb5_inquire_cred_by_mech (OM_uint32 * minor_status, const gss_cred_id_t cred_handle, const gss_OID mech_type, gss_name_t * name, OM_uint32 * initiator_lifetime, OM_uint32 * acceptor_lifetime, gss_cred_usage_t * cred_usage) { OM_uint32 maj_stat; maj_stat = inquire_cred (minor_status, cred_handle, name, initiator_lifetime, cred_usage, NULL); if (acceptor_lifetime) *acceptor_lifetime = *initiator_lifetime; return maj_stat; } OM_uint32 gss_krb5_release_cred (OM_uint32 * minor_status, gss_cred_id_t * cred_handle) { _gss_krb5_cred_t k5 = (*cred_handle)->krb5; if (k5->peerptr != GSS_C_NO_NAME) gss_release_name (NULL, &k5->peerptr); shishi_key_done (k5->key); shishi_done (k5->sh); free (k5); if (minor_status) *minor_status = 0; return GSS_S_COMPLETE; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gss-1.0.3/lib/krb5/name.c���������������������������������������������������������������������������0000664�0000000�0000000�00000010127�12415506237�011703� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* krb5/name.c --- Implementation of Kerberos 5 GSS-API Name functions. * Copyright (C) 2003-2014 Simon Josefsson * * This file is part of the Generic Security Service (GSS). * * GSS 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. * * GSS 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 GSS; if not, see http://www.gnu.org/licenses or write to * the Free Software Foundation, Inc., 51 Franklin Street, Fifth * Floor, Boston, MA 02110-1301, USA. * */ /* Get specification. */ #include "k5internal.h" OM_uint32 gss_krb5_canonicalize_name (OM_uint32 * minor_status, const gss_name_t input_name, const gss_OID mech_type, gss_name_t * output_name) { OM_uint32 maj_stat; if (minor_status) *minor_status = 0; /* We consider (a zero terminated) GSS_KRB5_NT_PRINCIPAL_NAME the canonical mechanism name type. Convert everything into it. */ if (gss_oid_equal (input_name->type, GSS_C_NT_EXPORT_NAME)) { if (input_name->length > 15) { *output_name = malloc (sizeof (**output_name)); if (!*output_name) { if (minor_status) *minor_status = ENOMEM; return GSS_S_FAILURE; } (*output_name)->type = GSS_KRB5_NT_PRINCIPAL_NAME; (*output_name)->length = input_name->length - 15; (*output_name)->value = malloc ((*output_name)->length + 1); if (!(*output_name)->value) { free (*output_name); if (minor_status) *minor_status = ENOMEM; return GSS_S_FAILURE; } memcpy ((*output_name)->value, input_name->value + 15, (*output_name)->length); (*output_name)->value[(*output_name)->length] = '\0'; } else { return GSS_S_BAD_NAME; } } else if (gss_oid_equal (input_name->type, GSS_C_NT_HOSTBASED_SERVICE)) { char *p; /* We don't support service-names without hostname part because we can't compute a canonicalized name of the local host. Calling gethostname does not give a canonicalized name. */ if (!memchr (input_name->value, '@', input_name->length)) { *minor_status = GSS_KRB5_S_G_BAD_SERVICE_NAME; return GSS_S_COMPLETE; } /* We don't do DNS name canoncalization since that is insecure. */ maj_stat = gss_duplicate_name (minor_status, input_name, output_name); if (GSS_ERROR (maj_stat)) return maj_stat; (*output_name)->type = GSS_KRB5_NT_PRINCIPAL_NAME; p = memchr ((*output_name)->value, '@', (*output_name)->length); if (p) *p = '/'; } else if (gss_oid_equal (input_name->type, GSS_KRB5_NT_PRINCIPAL_NAME)) { maj_stat = gss_duplicate_name (minor_status, input_name, output_name); if (GSS_ERROR (maj_stat)) return maj_stat; } else { *output_name = GSS_C_NO_NAME; return GSS_S_BAD_NAMETYPE; } return GSS_S_COMPLETE; } #define TOK_LEN 2 #define MECH_OID_LEN_LEN 2 #define MECH_OID_ASN1_LEN_LEN 2 #define NAME_LEN_LEN 4 OM_uint32 gss_krb5_export_name (OM_uint32 * minor_status, const gss_name_t input_name, gss_buffer_t exported_name) { size_t msglen = input_name->length & 0xFFFFFFFF; size_t len = TOK_LEN + MECH_OID_LEN_LEN + MECH_OID_ASN1_LEN_LEN + GSS_KRB5->length + NAME_LEN_LEN + msglen; char *p; exported_name->length = len; p = exported_name->value = malloc (len); if (!p) { if (minor_status) *minor_status = ENOMEM; return GSS_S_FAILURE; } sprintf (p, "\x04\x01\x01\x0B\x06\x09%s", (char *) GSS_KRB5->elements); p[2] = '\0'; p += 15; *p++ = (msglen >> 24) & 0xFF; *p++ = (msglen >> 16) & 0xFF; *p++ = (msglen >> 8) & 0xFF; *p++ = msglen & 0xFF; memcpy (p, input_name->value, msglen); if (minor_status) *minor_status = 0; return GSS_S_COMPLETE; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gss-1.0.3/lib/krb5/context.c������������������������������������������������������������������������0000664�0000000�0000000�00000033555�12415506237�012461� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* krb5/context.c --- Implementation of Kerberos 5 GSS Context functions. * Copyright (C) 2003-2014 Simon Josefsson * * This file is part of the Generic Security Service (GSS). * * GSS 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. * * GSS 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 GSS; if not, see http://www.gnu.org/licenses or write to * the Free Software Foundation, Inc., 51 Franklin Street, Fifth * Floor, Boston, MA 02110-1301, USA. * */ /* Get specification. */ #include "k5internal.h" /* Get checksum (un)packers. */ #include "checksum.h" #define TOK_LEN 2 #define TOK_AP_REQ "\x01\x00" #define TOK_AP_REP "\x02\x00" /* Request part of gss_krb5_init_sec_context. Assumes that context_handle is valid, and has krb5 specific structure, and that output_token is valid and cleared. */ static OM_uint32 init_request (OM_uint32 * minor_status, const gss_cred_id_t initiator_cred_handle, gss_ctx_id_t * context_handle, const gss_name_t target_name, const gss_OID mech_type, OM_uint32 req_flags, OM_uint32 time_req, const gss_channel_bindings_t input_chan_bindings, const gss_buffer_t input_token, gss_OID * actual_mech_type, gss_buffer_t output_token, OM_uint32 * ret_flags, OM_uint32 * time_rec) { gss_ctx_id_t ctx = *context_handle; _gss_krb5_ctx_t k5 = ctx->krb5; char *cksum, *der; size_t cksumlen, derlen; int rc; OM_uint32 maj_stat; Shishi_tkts_hint hint; /* Get service ticket. */ maj_stat = gss_krb5_canonicalize_name (minor_status, target_name, GSS_C_NO_OID, &k5->peerptr); if (GSS_ERROR (maj_stat)) return maj_stat; memset (&hint, 0, sizeof (hint)); hint.server = k5->peerptr->value; hint.endtime = time_req; k5->tkt = shishi_tkts_get (shishi_tkts_default (k5->sh), &hint); if (!k5->tkt) { if (minor_status) *minor_status = GSS_KRB5_S_KG_CCACHE_NOMATCH; return GSS_S_NO_CRED; } /* Create Authenticator checksum field. */ maj_stat = _gss_krb5_checksum_pack (minor_status, initiator_cred_handle, context_handle, input_chan_bindings, req_flags, &cksum, &cksumlen); if (GSS_ERROR (maj_stat)) return maj_stat; /* Create AP-REQ in output_token. */ rc = shishi_ap_tktoptionsraw (k5->sh, &k5->ap, k5->tkt, SHISHI_APOPTIONS_MUTUAL_REQUIRED, 0x8003, cksum, cksumlen); free (cksum); if (rc != SHISHI_OK) return GSS_S_FAILURE; rc = shishi_authenticator_seqnumber_get (k5->sh, shishi_ap_authenticator (k5->ap), &k5->initseqnr); if (rc != SHISHI_OK) return GSS_S_FAILURE; rc = shishi_ap_req_der (k5->ap, &der, &derlen); if (rc != SHISHI_OK) return GSS_S_FAILURE; rc = _gss_encapsulate_token_prefix (TOK_AP_REQ, TOK_LEN, der, derlen, GSS_KRB5->elements, GSS_KRB5->length, &output_token->value, &output_token->length); free (der); if (rc != 0) return GSS_S_FAILURE; if (req_flags & GSS_C_MUTUAL_FLAG) return GSS_S_CONTINUE_NEEDED; return GSS_S_COMPLETE; } /* Reply part of gss_krb5_init_sec_context. Assumes that context_handle is valid, and has krb5 specific structure, and that output_token is valid and cleared. */ static OM_uint32 init_reply (OM_uint32 * minor_status, const gss_cred_id_t initiator_cred_handle, gss_ctx_id_t * context_handle, const gss_name_t target_name, const gss_OID mech_type, OM_uint32 req_flags, OM_uint32 time_req, const gss_channel_bindings_t input_chan_bindings, const gss_buffer_t input_token, gss_OID * actual_mech_type, gss_buffer_t output_token, OM_uint32 * ret_flags, OM_uint32 * time_rec) { gss_ctx_id_t ctx = *context_handle; _gss_krb5_ctx_t k5 = ctx->krb5; OM_uint32 tmp_min_stat; gss_buffer_desc data; int rc; if (gss_decapsulate_token (input_token, GSS_KRB5, &data) != GSS_S_COMPLETE) return GSS_S_DEFECTIVE_TOKEN; if (data.length < TOK_LEN) { gss_release_buffer (&tmp_min_stat, &data); return GSS_S_DEFECTIVE_TOKEN; } if (memcmp (data.value, TOK_AP_REP, TOK_LEN) != 0) { gss_release_buffer (&tmp_min_stat, &data); return GSS_S_DEFECTIVE_TOKEN; } rc = shishi_ap_rep_der_set (k5->ap, (char *) data.value + TOK_LEN, data.length - TOK_LEN); gss_release_buffer (&tmp_min_stat, &data); if (rc != SHISHI_OK) return GSS_S_DEFECTIVE_TOKEN; rc = shishi_ap_rep_verify (k5->ap); if (rc != SHISHI_OK) return GSS_S_DEFECTIVE_TOKEN; rc = shishi_encapreppart_seqnumber_get (k5->sh, shishi_ap_encapreppart (k5->ap), &k5->acceptseqnr); if (rc != SHISHI_OK) { /* A strict 1964 implementation would return GSS_S_DEFECTIVE_TOKEN here. gssapi-cfx permit absent sequence number, though. */ k5->acceptseqnr = 0; } return GSS_S_COMPLETE; } /* Initiates the establishment of a krb5 security context between the application and a remote peer. Assumes that context_handle and output_token are valid and cleared. */ OM_uint32 gss_krb5_init_sec_context (OM_uint32 * minor_status, const gss_cred_id_t initiator_cred_handle, gss_ctx_id_t * context_handle, const gss_name_t target_name, const gss_OID mech_type, OM_uint32 req_flags, OM_uint32 time_req, const gss_channel_bindings_t input_chan_bindings, const gss_buffer_t input_token, gss_OID * actual_mech_type, gss_buffer_t output_token, OM_uint32 * ret_flags, OM_uint32 * time_rec) { gss_ctx_id_t ctx = *context_handle; _gss_krb5_ctx_t k5 = ctx->krb5; OM_uint32 maj_stat; int rc; if (minor_status) *minor_status = 0; if (initiator_cred_handle) { /* We only support the default initiator. See k5internal.h for adding a Shishi_tkt to the credential structure. I'm not sure what the use would be -- user-to-user authentication perhaps? Later: if you have tickets for foo@BAR and bar@FOO, it may be useful to call gss_acquire_cred first to chose which one to initiate the context with. Not many applications need this. */ return GSS_S_NO_CRED; } if (target_name == NULL) { return GSS_S_BAD_NAME; } if (k5 == NULL) { k5 = ctx->krb5 = calloc (sizeof (*k5), 1); if (!k5) { if (minor_status) *minor_status = ENOMEM; return GSS_S_FAILURE; } rc = shishi_init (&k5->sh); if (rc != SHISHI_OK) return GSS_S_FAILURE; } if (!k5->reqdone) { maj_stat = init_request (minor_status, initiator_cred_handle, context_handle, target_name, mech_type, req_flags, time_req, input_chan_bindings, input_token, actual_mech_type, output_token, ret_flags, time_rec); if (GSS_ERROR (maj_stat)) return maj_stat; k5->flags = req_flags & ( /* GSS_C_DELEG_FLAG | */ GSS_C_MUTUAL_FLAG | GSS_C_REPLAY_FLAG | GSS_C_SEQUENCE_FLAG | GSS_C_CONF_FLAG | GSS_C_INTEG_FLAG); /* PROT_READY is not mentioned in 1964/gssapi-cfx but we support it anyway. */ k5->flags |= GSS_C_PROT_READY_FLAG; if (ret_flags) *ret_flags = k5->flags; k5->key = shishi_ap_key (k5->ap); k5->reqdone = 1; } else if (k5->reqdone && k5->flags & GSS_C_MUTUAL_FLAG && !k5->repdone) { maj_stat = init_reply (minor_status, initiator_cred_handle, context_handle, target_name, mech_type, req_flags, time_req, input_chan_bindings, input_token, actual_mech_type, output_token, ret_flags, time_rec); if (GSS_ERROR (maj_stat)) return maj_stat; if (ret_flags) *ret_flags = k5->flags; k5->repdone = 1; } else maj_stat = GSS_S_FAILURE; if (time_rec) *time_rec = gss_krb5_tktlifetime (k5->tkt); return maj_stat; } /* Allows a remotely initiated security context between the application and a remote peer to be established, using krb5. Assumes context_handle is valid. */ OM_uint32 gss_krb5_accept_sec_context (OM_uint32 * minor_status, gss_ctx_id_t * context_handle, const gss_cred_id_t acceptor_cred_handle, const gss_buffer_t input_token_buffer, const gss_channel_bindings_t input_chan_bindings, gss_name_t * src_name, gss_OID * mech_type, gss_buffer_t output_token, OM_uint32 * ret_flags, OM_uint32 * time_rec, gss_cred_id_t * delegated_cred_handle) { gss_buffer_desc in; gss_ctx_id_t cx; _gss_krb5_ctx_t cxk5; _gss_krb5_cred_t crk5; OM_uint32 tmp_min_stat; int rc; if (minor_status) *minor_status = 0; if (ret_flags) *ret_flags = 0; if (!acceptor_cred_handle) /* XXX support GSS_C_NO_CREDENTIAL: acquire_cred() default server */ return GSS_S_NO_CRED; if (*context_handle) return GSS_S_FAILURE; crk5 = acceptor_cred_handle->krb5; cx = calloc (sizeof (*cx), 1); if (!cx) { if (minor_status) *minor_status = ENOMEM; return GSS_S_FAILURE; } cxk5 = calloc (sizeof (*cxk5), 1); if (!cxk5) { free (cx); if (minor_status) *minor_status = ENOMEM; return GSS_S_FAILURE; } cx->mech = GSS_KRB5; cx->krb5 = cxk5; /* XXX cx->peer?? */ *context_handle = cx; cxk5->sh = crk5->sh; cxk5->key = crk5->key; cxk5->acceptor = 1; rc = shishi_ap (cxk5->sh, &cxk5->ap); if (rc != SHISHI_OK) return GSS_S_FAILURE; rc = gss_decapsulate_token (input_token_buffer, GSS_KRB5, &in); if (rc != GSS_S_COMPLETE) return GSS_S_BAD_MIC; if (in.length < TOK_LEN) { gss_release_buffer (&tmp_min_stat, &in); return GSS_S_BAD_MIC; } if (memcmp (in.value, TOK_AP_REQ, TOK_LEN) != 0) { gss_release_buffer (&tmp_min_stat, &in); return GSS_S_BAD_MIC; } rc = shishi_ap_req_der_set (cxk5->ap, (char *) in.value + TOK_LEN, in.length - TOK_LEN); gss_release_buffer (&tmp_min_stat, &in); if (rc != SHISHI_OK) return GSS_S_FAILURE; rc = shishi_ap_req_process (cxk5->ap, crk5->key); if (rc != SHISHI_OK) { if (minor_status) *minor_status = GSS_KRB5_S_G_VALIDATE_FAILED; return GSS_S_FAILURE; } rc = shishi_authenticator_seqnumber_get (cxk5->sh, shishi_ap_authenticator (cxk5->ap), &cxk5->initseqnr); if (rc != SHISHI_OK) return GSS_S_FAILURE; rc = _gss_krb5_checksum_parse (minor_status, context_handle, input_chan_bindings); if (rc != GSS_S_COMPLETE) return GSS_S_FAILURE; cxk5->tkt = shishi_ap_tkt (cxk5->ap); cxk5->key = shishi_ap_key (cxk5->ap); if (shishi_apreq_mutual_required_p (crk5->sh, shishi_ap_req (cxk5->ap))) { Shishi_asn1 aprep; char *der; size_t len; rc = shishi_ap_rep_asn1 (cxk5->ap, &aprep); if (rc != SHISHI_OK) { printf ("Error creating AP-REP: %s\n", shishi_strerror (rc)); return GSS_S_FAILURE; } rc = shishi_encapreppart_seqnumber_get (cxk5->sh, shishi_ap_encapreppart (cxk5->ap), &cxk5->acceptseqnr); if (rc != SHISHI_OK) { /* A strict 1964 implementation would return GSS_S_DEFECTIVE_TOKEN here. gssapi-cfx permit absent sequence number, though. */ cxk5->acceptseqnr = 0; } rc = shishi_asn1_to_der (crk5->sh, aprep, &der, &len); if (rc != SHISHI_OK) { printf ("Error der encoding aprep: %s\n", shishi_strerror (rc)); return GSS_S_FAILURE; } rc = _gss_encapsulate_token_prefix (TOK_AP_REP, TOK_LEN, der, len, GSS_KRB5->elements, GSS_KRB5->length, &output_token->value, &output_token->length); if (rc != 0) return GSS_S_FAILURE; if (ret_flags) *ret_flags = GSS_C_MUTUAL_FLAG; } else { output_token->value = NULL; output_token->length = 0; } if (src_name) { gss_name_t p; p = malloc (sizeof (*p)); if (!p) { if (minor_status) *minor_status = ENOMEM; return GSS_S_FAILURE; } rc = shishi_encticketpart_client (cxk5->sh, shishi_tkt_encticketpart (cxk5->tkt), &p->value, &p->length); if (rc != SHISHI_OK) return GSS_S_FAILURE; p->type = GSS_KRB5_NT_PRINCIPAL_NAME; *src_name = p; } /* PROT_READY is not mentioned in 1964/gssapi-cfx but we support it anyway. */ if (ret_flags) *ret_flags |= GSS_C_PROT_READY_FLAG; if (minor_status) *minor_status = 0; return GSS_S_COMPLETE; } /* Delete a krb5 security context. Assumes context_handle is valid. Should only delete krb5 specific part of context. */ OM_uint32 gss_krb5_delete_sec_context (OM_uint32 * minor_status, gss_ctx_id_t * context_handle, gss_buffer_t output_token) { _gss_krb5_ctx_t k5 = (*context_handle)->krb5; if (k5->peerptr != GSS_C_NO_NAME) gss_release_name (NULL, &k5->peerptr); if (k5->ap) shishi_ap_done (k5->ap); if (!k5->acceptor) shishi_done (k5->sh); free (k5); if (minor_status) *minor_status = 0; return GSS_S_COMPLETE; } /* Determines the number of seconds for which the specified krb5 context will remain valid. Assumes context_handle is valid. */ OM_uint32 gss_krb5_context_time (OM_uint32 * minor_status, const gss_ctx_id_t context_handle, OM_uint32 * time_rec) { _gss_krb5_ctx_t k5 = context_handle->krb5; if (time_rec) { *time_rec = gss_krb5_tktlifetime (k5->tkt); if (*time_rec == 0) { if (minor_status) *minor_status = 0; return GSS_S_CONTEXT_EXPIRED; } } if (minor_status) *minor_status = 0; return GSS_S_COMPLETE; } ���������������������������������������������������������������������������������������������������������������������������������������������������gss-1.0.3/lib/krb5/checksum.h�����������������������������������������������������������������������0000664�0000000�0000000�00000002455�12415506237�012577� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* krb5/checksum.h --- (Un)pack checksum fields in Krb5 GSS contexts. * Copyright (C) 2003-2014 Simon Josefsson * * This file is part of the Generic Security Service (GSS). * * GSS 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. * * GSS 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 GSS; if not, see http://www.gnu.org/licenses or write to * the Free Software Foundation, Inc., 51 Franklin Street, Fifth * Floor, Boston, MA 02110-1301, USA. * */ OM_uint32 _gss_krb5_checksum_pack (OM_uint32 * minor_status, const gss_cred_id_t initiator_cred_handle, gss_ctx_id_t * context_handle, const gss_channel_bindings_t input_chan_bindings, OM_uint32 req_flags, char **data, size_t * datalen); OM_uint32 _gss_krb5_checksum_parse (OM_uint32 * minor_status, gss_ctx_id_t * context_handle, const gss_channel_bindings_t input_chan_bindings); �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gss-1.0.3/lib/krb5/msg.c����������������������������������������������������������������������������0000664�0000000�0000000�00000030727�12415506237�011561� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* krb5/msg.c --- Implementation of Kerberos 5 GSS-API Per-Message functions. * Copyright (C) 2003-2014 Simon Josefsson * * This file is part of the Generic Security Service (GSS). * * GSS 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. * * GSS 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 GSS; if not, see http://www.gnu.org/licenses or write to * the Free Software Foundation, Inc., 51 Franklin Street, Fifth * Floor, Boston, MA 02110-1301, USA. * */ /* Get specification. */ #include "k5internal.h" #define TOK_LEN 2 #define TOK_WRAP "\x02\x01" #define C2I(buf) ((buf[0] & 0xFF) | \ ((buf[1] & 0xFF) << 8) | \ ((buf[2] & 0xFF) << 16) | \ ((buf[3] & 0xFF) << 24)) OM_uint32 gss_krb5_get_mic (OM_uint32 * minor_status, const gss_ctx_id_t context_handle, gss_qop_t qop_req, const gss_buffer_t message_buffer, gss_buffer_t message_token) { return GSS_S_UNAVAILABLE; } OM_uint32 gss_krb5_verify_mic (OM_uint32 * minor_status, const gss_ctx_id_t context_handle, const gss_buffer_t message_buffer, const gss_buffer_t token_buffer, gss_qop_t * qop_state) { return GSS_S_UNAVAILABLE; } OM_uint32 gss_krb5_wrap (OM_uint32 * minor_status, const gss_ctx_id_t context_handle, int conf_req_flag, gss_qop_t qop_req, const gss_buffer_t input_message_buffer, int *conf_state, gss_buffer_t output_message_buffer) { _gss_krb5_ctx_t k5 = context_handle->krb5; size_t padlength; gss_buffer_desc data; char *p; size_t tmplen; int rc; switch (shishi_key_type (k5->key)) { /* XXX implement other checksums */ case SHISHI_DES_CBC_MD5: { char header[8]; char seqno[8]; char *eseqno; char *cksum; char confounder[8]; /* Typical data: ;; 02 01 00 00 ff ff ff ff 0c 22 1f 79 59 3d 00 cb ;; d5 78 2f fb 50 d2 b8 59 fb b4 e0 9b d0 a2 fa dc ;; 01 00 20 00 04 04 04 04 Translates into: ;; HEADER ENCRYPTED SEQ.NUMBER ;; DES-MAC-MD5 CKSUM CONFOUNDER ;; PADDED DATA */ padlength = 8 - input_message_buffer->length % 8; data.length = 4 * 8 + input_message_buffer->length + padlength; p = malloc (data.length); if (!p) { if (minor_status) *minor_status = ENOMEM; return GSS_S_FAILURE; } /* XXX encrypt data iff confidential option chosen */ /* Setup header and confounder */ memcpy (header, TOK_WRAP, 2); /* TOK_ID: Wrap 0201 */ memcpy (header + 2, "\x00\x00", 2); /* SGN_ALG: DES-MAC-MD5 */ memcpy (header + 4, "\xFF\xFF", 2); /* SEAL_ALG: none */ memcpy (header + 6, "\xFF\xFF", 2); /* filler */ rc = shishi_randomize (k5->sh, 0, confounder, 8); if (rc != SHISHI_OK) return GSS_S_FAILURE; /* Compute checksum over header, confounder, input string, and pad */ memcpy (p, header, 8); memcpy (p + 8, confounder, 8); memcpy (p + 16, input_message_buffer->value, input_message_buffer->length); memset (p + 16 + input_message_buffer->length, (int) padlength, padlength); rc = shishi_checksum (k5->sh, k5->key, 0, SHISHI_RSA_MD5_DES_GSS, p, 16 + input_message_buffer->length + padlength, &cksum, &tmplen); if (rc != SHISHI_OK || tmplen != 8) return GSS_S_FAILURE; /* seq_nr */ if (k5->acceptor) { seqno[0] = k5->acceptseqnr & 0xFF; seqno[1] = k5->acceptseqnr >> 8 & 0xFF; seqno[2] = k5->acceptseqnr >> 16 & 0xFF; seqno[3] = k5->acceptseqnr >> 24 & 0xFF; memset (seqno + 4, 0xFF, 4); } else { seqno[0] = k5->initseqnr & 0xFF; seqno[1] = k5->initseqnr >> 8 & 0xFF; seqno[2] = k5->initseqnr >> 16 & 0xFF; seqno[3] = k5->initseqnr >> 24 & 0xFF; memset (seqno + 4, 0, 4); } rc = shishi_encrypt_iv_etype (k5->sh, k5->key, 0, SHISHI_DES_CBC_NONE, cksum, 8, seqno, 8, &eseqno, &tmplen); if (rc != SHISHI_OK || tmplen != 8) return GSS_S_FAILURE; /* put things in place */ memcpy (p, header, 8); memcpy (p + 8, eseqno, 8); free (eseqno); memcpy (p + 16, cksum, 8); free (cksum); memcpy (p + 24, confounder, 8); memcpy (p + 32, input_message_buffer->value, input_message_buffer->length); memset (p + 32 + input_message_buffer->length, (int) padlength, padlength); data.value = p; rc = gss_encapsulate_token (&data, GSS_KRB5, output_message_buffer); if (rc != GSS_S_COMPLETE) return GSS_S_FAILURE; if (k5->acceptor) k5->acceptseqnr++; else k5->initseqnr++; } break; case SHISHI_DES3_CBC_HMAC_SHA1_KD: { char *tmp; padlength = 8 - input_message_buffer->length % 8; data.length = 8 + 8 + 20 + 8 + input_message_buffer->length + padlength; p = malloc (data.length); if (!p) { if (minor_status) *minor_status = ENOMEM; return GSS_S_FAILURE; } /* XXX encrypt data iff confidential option chosen */ /* Compute checksum over header, confounder, input string, and pad */ memcpy (p, TOK_WRAP, 2); /* TOK_ID: Wrap */ memcpy (p + 2, "\x04\x00", 2); /* SGN_ALG: 3DES */ memcpy (p + 4, "\xFF\xFF", 2); /* SEAL_ALG: none */ memcpy (p + 6, "\xFF\xFF", 2); /* filler */ rc = shishi_randomize (k5->sh, 0, p + 8, 8); if (rc != SHISHI_OK) return GSS_S_FAILURE; memcpy (p + 16, input_message_buffer->value, input_message_buffer->length); memset (p + 16 + input_message_buffer->length, (int) padlength, padlength); rc = shishi_checksum (k5->sh, k5->key, SHISHI_KEYUSAGE_GSS_R2, SHISHI_HMAC_SHA1_DES3_KD, p, 16 + input_message_buffer->length + padlength, &tmp, &tmplen); if (rc != SHISHI_OK || tmplen != 20) return GSS_S_FAILURE; memcpy (p + 16, tmp, tmplen); memcpy (p + 36, p + 8, 8); /* seq_nr */ if (k5->acceptor) { (p + 8)[0] = k5->acceptseqnr & 0xFF; (p + 8)[1] = k5->acceptseqnr >> 8 & 0xFF; (p + 8)[2] = k5->acceptseqnr >> 16 & 0xFF; (p + 8)[3] = k5->acceptseqnr >> 24 & 0xFF; memset (p + 8 + 4, 0xFF, 4); } else { (p + 8)[0] = k5->initseqnr & 0xFF; (p + 8)[1] = k5->initseqnr >> 8 & 0xFF; (p + 8)[2] = k5->initseqnr >> 16 & 0xFF; (p + 8)[3] = k5->initseqnr >> 24 & 0xFF; memset (p + 8 + 4, 0, 4); } rc = shishi_encrypt_iv_etype (k5->sh, k5->key, 0, SHISHI_DES3_CBC_NONE, p + 16, 8, /* cksum */ p + 8, 8, &tmp, &tmplen); if (rc != SHISHI_OK || tmplen != 8) return GSS_S_FAILURE; memcpy (p + 8, tmp, tmplen); free (tmp); memcpy (p + 8 + 8 + 20 + 8, input_message_buffer->value, input_message_buffer->length); memset (p + 8 + 8 + 20 + 8 + input_message_buffer->length, (int) padlength, padlength); data.value = p; rc = gss_encapsulate_token (&data, GSS_KRB5, output_message_buffer); if (rc != GSS_S_COMPLETE) return GSS_S_FAILURE; if (k5->acceptor) k5->acceptseqnr++; else k5->initseqnr++; break; } default: return GSS_S_FAILURE; } return GSS_S_COMPLETE; } OM_uint32 gss_krb5_unwrap (OM_uint32 * minor_status, const gss_ctx_id_t context_handle, const gss_buffer_t input_message_buffer, gss_buffer_t output_message_buffer, int *conf_state, gss_qop_t * qop_state) { _gss_krb5_ctx_t k5 = context_handle->krb5; gss_buffer_desc tok; char *data; OM_uint32 sgn_alg, seal_alg; size_t tmplen; int rc; rc = gss_decapsulate_token (input_message_buffer, GSS_KRB5, &tok); if (rc != GSS_S_COMPLETE) return GSS_S_BAD_MIC; if (tok.length < 8) return GSS_S_BAD_MIC; if (memcmp (tok.value, TOK_WRAP, TOK_LEN) != 0) return GSS_S_BAD_MIC; data = tok.value; sgn_alg = data[2] & 0xFF; sgn_alg |= data[3] << 8 & 0xFF00; seal_alg = data[4] & 0xFF; seal_alg |= data[5] << 8 & 0xFF00; if (conf_state != NULL) *conf_state = seal_alg == 0xFFFF; if (memcmp (data + 6, "\xFF\xFF", 2) != 0) return GSS_S_BAD_MIC; switch (sgn_alg) { /* XXX implement other checksums */ case 0: /* DES-MD5 */ { size_t padlen; char *pt; char header[8]; char encseqno[8]; char seqno[8]; char cksum[8]; char confounder[8]; char *tmp; uint32_t seqnr; size_t outlen, i; /* Typical data: ;; 02 01 00 00 ff ff ff ff 0c 22 1f 79 59 3d 00 cb ;; d5 78 2f fb 50 d2 b8 59 fb b4 e0 9b d0 a2 fa dc ;; 01 00 20 00 04 04 04 04 Translates into: ;; HEADER ENCRYPTED SEQ.NUMBER ;; DES-MAC-MD5 CKSUM CONFOUNDER ;; PADDED DATA */ if (tok.length < 5 * 8) return GSS_S_BAD_MIC; memcpy (header, data, 8); memcpy (encseqno, data + 8, 8); memcpy (cksum, data + 16, 8); memcpy (confounder, data + 24, 8); pt = data + 32; /* XXX decrypt data iff confidential option chosen */ rc = shishi_decrypt_iv_etype (k5->sh, k5->key, 0, SHISHI_DES_CBC_NONE, cksum, 8, encseqno, 8, &tmp, &outlen); if (rc != SHISHI_OK) return GSS_S_FAILURE; if (outlen != 8) return GSS_S_BAD_MIC; memcpy (seqno, tmp, 8); free (tmp); if (memcmp (seqno + 4, k5->acceptor ? "\x00\x00\x00\x00" : "\xFF\xFF\xFF\xFF", 4) != 0) return GSS_S_BAD_MIC; seqnr = C2I (seqno); if (seqnr != (k5->acceptor ? k5->initseqnr : k5->acceptseqnr)) return GSS_S_BAD_MIC; if (k5->acceptor) k5->initseqnr++; else k5->acceptseqnr++; /* Check pad */ padlen = data[tok.length - 1]; if (padlen > 8) return GSS_S_BAD_MIC; for (i = 1; i <= padlen; i++) if (data[tok.length - i] != (int) padlen) return GSS_S_BAD_MIC; /* Write header and confounder next to data */ memcpy (data + 16, header, 8); memcpy (data + 24, confounder, 8); /* Checksum header + confounder + data + pad */ rc = shishi_checksum (k5->sh, k5->key, 0, SHISHI_RSA_MD5_DES_GSS, data + 16, tok.length - 16, &tmp, &tmplen); if (rc != SHISHI_OK || tmplen != 8) return GSS_S_FAILURE; memcpy (data + 8, tmp, tmplen); /* Compare checksum */ if (tmplen != 8 || memcmp (cksum, data + 8, 8) != 0) return GSS_S_BAD_MIC; /* Copy output data */ output_message_buffer->length = tok.length - 8 - 8 - 8 - 8 - padlen; output_message_buffer->value = malloc (output_message_buffer->length); if (!output_message_buffer->value) { if (minor_status) *minor_status = ENOMEM; return GSS_S_FAILURE; } memcpy (output_message_buffer->value, pt, tok.length - 4 * 8 - padlen); } break; case 4: /* 3DES */ { size_t padlen; char *p; char *t; char cksum[20]; size_t outlen, i; uint32_t seqnr; if (tok.length < 8 + 8 + 20 + 8 + 8) return GSS_S_BAD_MIC; memcpy (cksum, data + 8 + 8, 20); /* XXX decrypt data iff confidential option chosen */ p = data + 8; rc = shishi_decrypt_iv_etype (k5->sh, k5->key, 0, SHISHI_DES3_CBC_NONE, cksum, 8, p, 8, &t, &outlen); if (rc != SHISHI_OK || outlen != 8) return GSS_S_FAILURE; memcpy (p, t, 8); free (t); if (memcmp (p + 4, k5->acceptor ? "\x00\x00\x00\x00" : "\xFF\xFF\xFF\xFF", 4) != 0) return GSS_S_BAD_MIC; seqnr = C2I (p); if (seqnr != (k5->acceptor ? k5->initseqnr : k5->acceptseqnr)) return GSS_S_BAD_MIC; if (k5->acceptor) k5->initseqnr++; else k5->acceptseqnr++; /* Check pad */ padlen = data[tok.length - 1]; if (padlen > 8) return GSS_S_BAD_MIC; for (i = 1; i <= padlen; i++) if (data[tok.length - i] != (int) padlen) return GSS_S_BAD_MIC; /* Write header next to confounder */ memcpy (data + 8 + 20, data, 8); /* Checksum header + confounder + data + pad */ rc = shishi_checksum (k5->sh, k5->key, SHISHI_KEYUSAGE_GSS_R2, SHISHI_HMAC_SHA1_DES3_KD, data + 20 + 8, tok.length - 20 - 8, &t, &tmplen); if (rc != SHISHI_OK || tmplen != 20) return GSS_S_FAILURE; memcpy (data + 8 + 8, t, tmplen); free (t); /* Compare checksum */ if (tmplen != 20 || memcmp (cksum, data + 8 + 8, 20) != 0) return GSS_S_BAD_MIC; /* Copy output data */ output_message_buffer->length = tok.length - 8 - 20 - 8 - 8 - padlen; output_message_buffer->value = malloc (output_message_buffer->length); if (!output_message_buffer->value) { if (minor_status) *minor_status = ENOMEM; return GSS_S_FAILURE; } memcpy (output_message_buffer->value, data + 20 + 8 + 8 + 8, tok.length - 20 - 8 - 8 - 8 - padlen); } break; default: return GSS_S_FAILURE; } return GSS_S_COMPLETE; } �����������������������������������������gss-1.0.3/lib/krb5/protos.h�������������������������������������������������������������������������0000664�0000000�0000000�00000011047�12415506237�012320� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* protos.h --- Export Kerberos 5 GSS functions to core GSS library. * Copyright (C) 2003-2014 Simon Josefsson * * This file is part of the Generic Security Service (GSS). * * GSS 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. * * GSS 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 GSS; if not, see http://www.gnu.org/licenses or write to * the Free Software Foundation, Inc., 51 Franklin Street, Fifth * Floor, Boston, MA 02110-1301, USA. * */ /* See context.c. */ extern OM_uint32 gss_krb5_init_sec_context (OM_uint32 * minor_status, const gss_cred_id_t initiator_cred_handle, gss_ctx_id_t * context_handle, const gss_name_t target_name, const gss_OID mech_type, OM_uint32 req_flags, OM_uint32 time_req, const gss_channel_bindings_t input_chan_bindings, const gss_buffer_t input_token, gss_OID * actual_mech_type, gss_buffer_t output_token, OM_uint32 * ret_flags, OM_uint32 * time_rec); extern OM_uint32 gss_krb5_accept_sec_context (OM_uint32 * minor_status, gss_ctx_id_t * context_handle, const gss_cred_id_t acceptor_cred_handle, const gss_buffer_t input_token_buffer, const gss_channel_bindings_t input_chan_bindings, gss_name_t * src_name, gss_OID * mech_type, gss_buffer_t output_token, OM_uint32 * ret_flags, OM_uint32 * time_rec, gss_cred_id_t * delegated_cred_handle); extern OM_uint32 gss_krb5_delete_sec_context (OM_uint32 * minor_status, gss_ctx_id_t * context_handle, gss_buffer_t output_token); extern OM_uint32 gss_krb5_context_time (OM_uint32 * minor_status, const gss_ctx_id_t context_handle, OM_uint32 * time_rec); /* See cred.c. */ extern OM_uint32 gss_krb5_acquire_cred (OM_uint32 * minor_status, const gss_name_t desired_name, OM_uint32 time_req, const gss_OID_set desired_mechs, gss_cred_usage_t cred_usage, gss_cred_id_t * output_cred_handle, gss_OID_set * actual_mechs, OM_uint32 * time_rec); extern OM_uint32 gss_krb5_inquire_cred (OM_uint32 * minor_status, const gss_cred_id_t cred_handle, gss_name_t * name, OM_uint32 * lifetime, gss_cred_usage_t * cred_usage, gss_OID_set * mechanisms); extern OM_uint32 gss_krb5_inquire_cred_by_mech (OM_uint32 * minor_status, const gss_cred_id_t cred_handle, const gss_OID mech_type, gss_name_t * name, OM_uint32 * initiator_lifetime, OM_uint32 * acceptor_lifetime, gss_cred_usage_t * cred_usage); extern OM_uint32 gss_krb5_release_cred (OM_uint32 * minor_status, gss_cred_id_t * cred_handle); /* See error.c. */ extern OM_uint32 gss_krb5_display_status (OM_uint32 * minor_status, OM_uint32 status_value, int status_type, const gss_OID mech_type, OM_uint32 * message_context, gss_buffer_t status_string); /* See msg.c. */ extern OM_uint32 gss_krb5_get_mic (OM_uint32 * minor_status, const gss_ctx_id_t context_handle, gss_qop_t qop_req, const gss_buffer_t message_buffer, gss_buffer_t message_token); extern OM_uint32 gss_krb5_verify_mic (OM_uint32 * minor_status, const gss_ctx_id_t context_handle, const gss_buffer_t message_buffer, const gss_buffer_t token_buffer, gss_qop_t * qop_state); extern OM_uint32 gss_krb5_unwrap (OM_uint32 * minor_status, const gss_ctx_id_t context_handle, const gss_buffer_t input_message_buffer, gss_buffer_t output_message_buffer, int *conf_state, gss_qop_t * qop_state); extern OM_uint32 gss_krb5_wrap (OM_uint32 * minor_status, const gss_ctx_id_t context_handle, int conf_req_flag, gss_qop_t qop_req, const gss_buffer_t input_message_buffer, int *conf_state, gss_buffer_t output_message_buffer); /* See name.c. */ extern OM_uint32 gss_krb5_canonicalize_name (OM_uint32 * minor_status, const gss_name_t input_name, const gss_OID mech_type, gss_name_t * output_name); extern OM_uint32 gss_krb5_export_name (OM_uint32 * minor_status, const gss_name_t input_name, gss_buffer_t exported_name); �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gss-1.0.3/lib/krb5/oid.c����������������������������������������������������������������������������0000664�0000000�0000000�00000007006�12415506237�011540� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* krb5/oid.c --- Definition of static Kerberos 5 GSS-API OIDs. * Copyright (C) 2003-2014 Simon Josefsson * * This file is part of the Generic Security Service (GSS). * * GSS 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. * * GSS 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 GSS; if not, see http://www.gnu.org/licenses or write to * the Free Software Foundation, Inc., 51 Franklin Street, Fifth * Floor, Boston, MA 02110-1301, USA. * */ /* Get specification. */ #include "k5internal.h" /* * Upon advancement to the level of Proposed Standard RFC, the * Kerberos V5 GSS-API mechanism will be identified by an Object * Identifier having the value: * * {iso(1) member-body(2) United States(840) mit(113554) infosys(1) * gssapi(2) krb5(2)} */ gss_OID_desc GSS_KRB5_static = { 9, (void *) "\x2a\x86\x48\x86\xf7\x12\x01\x02\x02" }; gss_OID GSS_KRB5 = &GSS_KRB5_static; /* * This name form shall be represented by the Object Identifier * {iso(1) member-body(2) United States(840) mit(113554) infosys(1) * gssapi(2) generic(1) user_name(1)}. The recommended symbolic name * for this type is "GSS_KRB5_NT_USER_NAME". */ gss_OID_desc GSS_KRB5_NT_USER_NAME_static = { 10, (void *) "\x2a\x86\x48\x86\xf7\x12\x01\x02\x01\x01" }; gss_OID GSS_KRB5_NT_USER_NAME = &GSS_KRB5_NT_USER_NAME_static; /* * This name form shall be represented by the Object Identifier * {iso(1) member-body(2) United States(840) mit(113554) infosys(1) * gssapi(2) generic(1) service_name(4)}. The previously recommended * symbolic name for this type is * "GSS_KRB5_NT_HOSTBASED_SERVICE_NAME". The currently preferred * symbolic name for this type is "GSS_C_NT_HOSTBASED_SERVICE". */ gss_OID GSS_KRB5_NT_HOSTBASED_SERVICE_NAME = &GSS_C_NT_HOSTBASED_SERVICE_static; /* * This name form shall be represented by the Object Identifier * {iso(1) member-body(2) United States(840) mit(113554) infosys(1) * gssapi(2) krb5(2) krb5_name(1)}. The recommended symbolic name for * this type is "GSS_KRB5_NT_PRINCIPAL_NAME". */ gss_OID_desc GSS_KRB5_NT_PRINCIPAL_NAME_static = { 10, (void *) "\x2a\x86\x48\x86\xf7\x12\x01\x02\x02\x01" }; gss_OID GSS_KRB5_NT_PRINCIPAL_NAME = &GSS_KRB5_NT_PRINCIPAL_NAME_static; /* * This name form shall be represented by the Object Identifier * {iso(1) member-body(2) United States(840) mit(113554) infosys(1) * gssapi(2) generic(1) machine_uid_name(2)}. The recommended * symbolic name for this type is "GSS_KRB5_NT_MACHINE_UID_NAME". */ gss_OID_desc GSS_KRB5_NT_MACHINE_UID_NAME_static = { 10, (void *) "\x2a\x86\x48\x86\xf7\x12\x01\x02\x02\x02" }; gss_OID GSS_KRB5_NT_MACHINE_UID_NAME = &GSS_KRB5_NT_MACHINE_UID_NAME_static; /* * This name form shall be represented by the Object Identifier * {iso(1) member-body(2) United States(840) mit(113554) infosys(1) * gssapi(2) generic(1) string_uid_name(3)}. The recommended symbolic * name for this type is "GSS_KRB5_NT_STRING_UID_NAME". */ gss_OID_desc GSS_KRB5_NT_STRING_UID_NAME_static = { 10, (void *) "\x2a\x86\x48\x86\xf7\x12\x01\x02\x01\x03" }; gss_OID GSS_KRB5_NT_STRING_UID_NAME = &GSS_KRB5_NT_STRING_UID_NAME_static; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gss-1.0.3/lib/krb5/Makefile.in����������������������������������������������������������������������0000644�0000000�0000000�00000104067�12415507621�012667� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Makefile.in generated by automake 1.14.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 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) 2003-2014 Simon Josefsson # # This file is part of the Generic Security Service (GSS). # # GSS 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. # # GSS 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 GSS; if not, see http://www.gnu.org/licenses or write to # the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, # Boston, MA 02110-1301, USA. VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = lib/krb5 DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(top_srcdir)/build-aux/depcomp ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/src/gl/m4/base64.m4 \ $(top_srcdir)/src/gl/m4/errno_h.m4 \ $(top_srcdir)/src/gl/m4/error.m4 \ $(top_srcdir)/src/gl/m4/getopt.m4 \ $(top_srcdir)/src/gl/m4/gnulib-comp.m4 \ $(top_srcdir)/src/gl/m4/memchr.m4 \ $(top_srcdir)/src/gl/m4/mmap-anon.m4 \ $(top_srcdir)/src/gl/m4/msvc-inval.m4 \ $(top_srcdir)/src/gl/m4/msvc-nothrow.m4 \ $(top_srcdir)/src/gl/m4/nocrash.m4 \ $(top_srcdir)/src/gl/m4/off_t.m4 \ $(top_srcdir)/src/gl/m4/ssize_t.m4 \ $(top_srcdir)/src/gl/m4/stdarg.m4 \ $(top_srcdir)/src/gl/m4/stdbool.m4 \ $(top_srcdir)/src/gl/m4/stdio_h.m4 \ $(top_srcdir)/src/gl/m4/strerror.m4 \ $(top_srcdir)/src/gl/m4/sys_socket_h.m4 \ $(top_srcdir)/src/gl/m4/sys_types_h.m4 \ $(top_srcdir)/src/gl/m4/unistd_h.m4 \ $(top_srcdir)/src/gl/m4/version-etc.m4 \ $(top_srcdir)/lib/gl/m4/absolute-header.m4 \ $(top_srcdir)/lib/gl/m4/extensions.m4 \ $(top_srcdir)/lib/gl/m4/gnulib-comp.m4 \ $(top_srcdir)/lib/gl/m4/include_next.m4 \ $(top_srcdir)/lib/gl/m4/ld-output-def.m4 \ $(top_srcdir)/lib/gl/m4/stddef_h.m4 \ $(top_srcdir)/lib/gl/m4/string_h.m4 \ $(top_srcdir)/lib/gl/m4/strverscmp.m4 \ $(top_srcdir)/lib/gl/m4/warn-on-use.m4 \ $(top_srcdir)/gl/m4/00gnulib.m4 \ $(top_srcdir)/gl/m4/autobuild.m4 \ $(top_srcdir)/gl/m4/gnulib-common.m4 \ $(top_srcdir)/gl/m4/gnulib-comp.m4 \ $(top_srcdir)/gl/m4/ld-version-script.m4 \ $(top_srcdir)/gl/m4/manywarnings.m4 \ $(top_srcdir)/gl/m4/valgrind-tests.m4 \ $(top_srcdir)/gl/m4/warnings.m4 \ $(top_srcdir)/m4/extern-inline.m4 $(top_srcdir)/m4/gettext.m4 \ $(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \ $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.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/nls.m4 \ $(top_srcdir)/m4/pkg.m4 $(top_srcdir)/m4/po-suffix.m4 \ $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \ $(top_srcdir)/m4/wchar_t.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 = LTLIBRARIES = $(noinst_LTLIBRARIES) libgss_shishi_la_DEPENDENCIES = am_libgss_shishi_la_OBJECTS = context.lo checksum.lo error.lo name.lo \ cred.lo msg.lo oid.lo utils.lo libgss_shishi_la_OBJECTS = $(am_libgss_shishi_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = 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) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libgss_shishi_la_SOURCES) DIST_SOURCES = $(libgss_shishi_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ ARFLAGS = @ARFLAGS@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CONFIG_INCLUDE = @CONFIG_INCLUDE@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = -DLOCALEDIR=\"$(localedir)\" @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DLL_VERSION = @DLL_VERSION@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EMULTIHOP_HIDDEN = @EMULTIHOP_HIDDEN@ EMULTIHOP_VALUE = @EMULTIHOP_VALUE@ ENOLINK_HIDDEN = @ENOLINK_HIDDEN@ ENOLINK_VALUE = @ENOLINK_VALUE@ EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@ EOVERFLOW_VALUE = @EOVERFLOW_VALUE@ ERRNO_H = @ERRNO_H@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GETOPT_H = @GETOPT_H@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GNULIB_CHDIR = @GNULIB_CHDIR@ GNULIB_CHOWN = @GNULIB_CHOWN@ GNULIB_CLOSE = @GNULIB_CLOSE@ GNULIB_DPRINTF = @GNULIB_DPRINTF@ GNULIB_DUP = @GNULIB_DUP@ GNULIB_DUP2 = @GNULIB_DUP2@ GNULIB_DUP3 = @GNULIB_DUP3@ GNULIB_ENVIRON = @GNULIB_ENVIRON@ GNULIB_EUIDACCESS = @GNULIB_EUIDACCESS@ GNULIB_FACCESSAT = @GNULIB_FACCESSAT@ GNULIB_FCHDIR = @GNULIB_FCHDIR@ GNULIB_FCHOWNAT = @GNULIB_FCHOWNAT@ GNULIB_FCLOSE = @GNULIB_FCLOSE@ GNULIB_FDATASYNC = @GNULIB_FDATASYNC@ GNULIB_FDOPEN = @GNULIB_FDOPEN@ GNULIB_FFLUSH = @GNULIB_FFLUSH@ GNULIB_FFSL = @GNULIB_FFSL@ GNULIB_FFSLL = @GNULIB_FFSLL@ GNULIB_FGETC = @GNULIB_FGETC@ GNULIB_FGETS = @GNULIB_FGETS@ GNULIB_FOPEN = @GNULIB_FOPEN@ GNULIB_FPRINTF = @GNULIB_FPRINTF@ GNULIB_FPRINTF_POSIX = @GNULIB_FPRINTF_POSIX@ GNULIB_FPURGE = @GNULIB_FPURGE@ GNULIB_FPUTC = @GNULIB_FPUTC@ GNULIB_FPUTS = @GNULIB_FPUTS@ GNULIB_FREAD = @GNULIB_FREAD@ GNULIB_FREOPEN = @GNULIB_FREOPEN@ GNULIB_FSCANF = @GNULIB_FSCANF@ GNULIB_FSEEK = @GNULIB_FSEEK@ GNULIB_FSEEKO = @GNULIB_FSEEKO@ GNULIB_FSYNC = @GNULIB_FSYNC@ GNULIB_FTELL = @GNULIB_FTELL@ GNULIB_FTELLO = @GNULIB_FTELLO@ GNULIB_FTRUNCATE = @GNULIB_FTRUNCATE@ GNULIB_FWRITE = @GNULIB_FWRITE@ GNULIB_GETC = @GNULIB_GETC@ GNULIB_GETCHAR = @GNULIB_GETCHAR@ GNULIB_GETCWD = @GNULIB_GETCWD@ GNULIB_GETDELIM = @GNULIB_GETDELIM@ GNULIB_GETDOMAINNAME = @GNULIB_GETDOMAINNAME@ GNULIB_GETDTABLESIZE = @GNULIB_GETDTABLESIZE@ GNULIB_GETGROUPS = @GNULIB_GETGROUPS@ GNULIB_GETHOSTNAME = @GNULIB_GETHOSTNAME@ GNULIB_GETLINE = @GNULIB_GETLINE@ GNULIB_GETLOGIN = @GNULIB_GETLOGIN@ GNULIB_GETLOGIN_R = @GNULIB_GETLOGIN_R@ GNULIB_GETPAGESIZE = @GNULIB_GETPAGESIZE@ GNULIB_GETUSERSHELL = @GNULIB_GETUSERSHELL@ GNULIB_GL_SRCGL_UNISTD_H_GETOPT = @GNULIB_GL_SRCGL_UNISTD_H_GETOPT@ GNULIB_GROUP_MEMBER = @GNULIB_GROUP_MEMBER@ GNULIB_ISATTY = @GNULIB_ISATTY@ GNULIB_LCHOWN = @GNULIB_LCHOWN@ GNULIB_LINK = @GNULIB_LINK@ GNULIB_LINKAT = @GNULIB_LINKAT@ GNULIB_LSEEK = @GNULIB_LSEEK@ GNULIB_MBSCASECMP = @GNULIB_MBSCASECMP@ GNULIB_MBSCASESTR = @GNULIB_MBSCASESTR@ GNULIB_MBSCHR = @GNULIB_MBSCHR@ GNULIB_MBSCSPN = @GNULIB_MBSCSPN@ GNULIB_MBSLEN = @GNULIB_MBSLEN@ GNULIB_MBSNCASECMP = @GNULIB_MBSNCASECMP@ GNULIB_MBSNLEN = @GNULIB_MBSNLEN@ GNULIB_MBSPBRK = @GNULIB_MBSPBRK@ GNULIB_MBSPCASECMP = @GNULIB_MBSPCASECMP@ GNULIB_MBSRCHR = @GNULIB_MBSRCHR@ GNULIB_MBSSEP = @GNULIB_MBSSEP@ GNULIB_MBSSPN = @GNULIB_MBSSPN@ GNULIB_MBSSTR = @GNULIB_MBSSTR@ GNULIB_MBSTOK_R = @GNULIB_MBSTOK_R@ GNULIB_MEMCHR = @GNULIB_MEMCHR@ GNULIB_MEMMEM = @GNULIB_MEMMEM@ GNULIB_MEMPCPY = @GNULIB_MEMPCPY@ GNULIB_MEMRCHR = @GNULIB_MEMRCHR@ GNULIB_OBSTACK_PRINTF = @GNULIB_OBSTACK_PRINTF@ GNULIB_OBSTACK_PRINTF_POSIX = @GNULIB_OBSTACK_PRINTF_POSIX@ GNULIB_PCLOSE = @GNULIB_PCLOSE@ GNULIB_PERROR = @GNULIB_PERROR@ GNULIB_PIPE = @GNULIB_PIPE@ GNULIB_PIPE2 = @GNULIB_PIPE2@ GNULIB_POPEN = @GNULIB_POPEN@ GNULIB_PREAD = @GNULIB_PREAD@ GNULIB_PRINTF = @GNULIB_PRINTF@ GNULIB_PRINTF_POSIX = @GNULIB_PRINTF_POSIX@ GNULIB_PUTC = @GNULIB_PUTC@ GNULIB_PUTCHAR = @GNULIB_PUTCHAR@ GNULIB_PUTS = @GNULIB_PUTS@ GNULIB_PWRITE = @GNULIB_PWRITE@ GNULIB_RAWMEMCHR = @GNULIB_RAWMEMCHR@ GNULIB_READ = @GNULIB_READ@ GNULIB_READLINK = @GNULIB_READLINK@ GNULIB_READLINKAT = @GNULIB_READLINKAT@ GNULIB_REMOVE = @GNULIB_REMOVE@ GNULIB_RENAME = @GNULIB_RENAME@ GNULIB_RENAMEAT = @GNULIB_RENAMEAT@ GNULIB_RMDIR = @GNULIB_RMDIR@ GNULIB_SCANF = @GNULIB_SCANF@ GNULIB_SETHOSTNAME = @GNULIB_SETHOSTNAME@ GNULIB_SLEEP = @GNULIB_SLEEP@ GNULIB_SNPRINTF = @GNULIB_SNPRINTF@ GNULIB_SPRINTF_POSIX = @GNULIB_SPRINTF_POSIX@ GNULIB_STDIO_H_NONBLOCKING = @GNULIB_STDIO_H_NONBLOCKING@ GNULIB_STDIO_H_SIGPIPE = @GNULIB_STDIO_H_SIGPIPE@ GNULIB_STPCPY = @GNULIB_STPCPY@ GNULIB_STPNCPY = @GNULIB_STPNCPY@ GNULIB_STRCASESTR = @GNULIB_STRCASESTR@ GNULIB_STRCHRNUL = @GNULIB_STRCHRNUL@ GNULIB_STRDUP = @GNULIB_STRDUP@ GNULIB_STRERROR = @GNULIB_STRERROR@ GNULIB_STRERROR_R = @GNULIB_STRERROR_R@ GNULIB_STRNCAT = @GNULIB_STRNCAT@ GNULIB_STRNDUP = @GNULIB_STRNDUP@ GNULIB_STRNLEN = @GNULIB_STRNLEN@ GNULIB_STRPBRK = @GNULIB_STRPBRK@ GNULIB_STRSEP = @GNULIB_STRSEP@ GNULIB_STRSIGNAL = @GNULIB_STRSIGNAL@ GNULIB_STRSTR = @GNULIB_STRSTR@ GNULIB_STRTOK_R = @GNULIB_STRTOK_R@ GNULIB_STRVERSCMP = @GNULIB_STRVERSCMP@ GNULIB_SYMLINK = @GNULIB_SYMLINK@ GNULIB_SYMLINKAT = @GNULIB_SYMLINKAT@ GNULIB_TMPFILE = @GNULIB_TMPFILE@ GNULIB_TTYNAME_R = @GNULIB_TTYNAME_R@ GNULIB_UNISTD_H_NONBLOCKING = @GNULIB_UNISTD_H_NONBLOCKING@ GNULIB_UNISTD_H_SIGPIPE = @GNULIB_UNISTD_H_SIGPIPE@ GNULIB_UNLINK = @GNULIB_UNLINK@ GNULIB_UNLINKAT = @GNULIB_UNLINKAT@ GNULIB_USLEEP = @GNULIB_USLEEP@ GNULIB_VASPRINTF = @GNULIB_VASPRINTF@ GNULIB_VDPRINTF = @GNULIB_VDPRINTF@ GNULIB_VFPRINTF = @GNULIB_VFPRINTF@ GNULIB_VFPRINTF_POSIX = @GNULIB_VFPRINTF_POSIX@ GNULIB_VFSCANF = @GNULIB_VFSCANF@ GNULIB_VPRINTF = @GNULIB_VPRINTF@ GNULIB_VPRINTF_POSIX = @GNULIB_VPRINTF_POSIX@ GNULIB_VSCANF = @GNULIB_VSCANF@ GNULIB_VSNPRINTF = @GNULIB_VSNPRINTF@ GNULIB_VSPRINTF_POSIX = @GNULIB_VSPRINTF_POSIX@ GNULIB_WRITE = @GNULIB_WRITE@ GREP = @GREP@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ HAVE_CHOWN = @HAVE_CHOWN@ HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@ HAVE_DECL_FCHDIR = @HAVE_DECL_FCHDIR@ HAVE_DECL_FDATASYNC = @HAVE_DECL_FDATASYNC@ HAVE_DECL_FPURGE = @HAVE_DECL_FPURGE@ HAVE_DECL_FSEEKO = @HAVE_DECL_FSEEKO@ HAVE_DECL_FTELLO = @HAVE_DECL_FTELLO@ HAVE_DECL_GETDELIM = @HAVE_DECL_GETDELIM@ HAVE_DECL_GETDOMAINNAME = @HAVE_DECL_GETDOMAINNAME@ HAVE_DECL_GETLINE = @HAVE_DECL_GETLINE@ HAVE_DECL_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_OBSTACK_PRINTF = @HAVE_DECL_OBSTACK_PRINTF@ HAVE_DECL_SETHOSTNAME = @HAVE_DECL_SETHOSTNAME@ HAVE_DECL_SNPRINTF = @HAVE_DECL_SNPRINTF@ HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@ HAVE_DECL_STRERROR_R = @HAVE_DECL_STRERROR_R@ HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@ HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@ HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@ HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@ HAVE_DECL_TTYNAME_R = @HAVE_DECL_TTYNAME_R@ HAVE_DECL_VSNPRINTF = @HAVE_DECL_VSNPRINTF@ HAVE_DPRINTF = @HAVE_DPRINTF@ HAVE_DUP2 = @HAVE_DUP2@ HAVE_DUP3 = @HAVE_DUP3@ HAVE_EUIDACCESS = @HAVE_EUIDACCESS@ HAVE_FACCESSAT = @HAVE_FACCESSAT@ HAVE_FCHDIR = @HAVE_FCHDIR@ HAVE_FCHOWNAT = @HAVE_FCHOWNAT@ HAVE_FDATASYNC = @HAVE_FDATASYNC@ HAVE_FFSL = @HAVE_FFSL@ HAVE_FFSLL = @HAVE_FFSLL@ HAVE_FSEEKO = @HAVE_FSEEKO@ HAVE_FSYNC = @HAVE_FSYNC@ HAVE_FTELLO = @HAVE_FTELLO@ HAVE_FTRUNCATE = @HAVE_FTRUNCATE@ 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_GROUP_MEMBER = @HAVE_GROUP_MEMBER@ HAVE_LCHOWN = @HAVE_LCHOWN@ HAVE_LIBSHISHI = @HAVE_LIBSHISHI@ HAVE_LINK = @HAVE_LINK@ HAVE_LINKAT = @HAVE_LINKAT@ HAVE_MBSLEN = @HAVE_MBSLEN@ HAVE_MEMCHR = @HAVE_MEMCHR@ HAVE_MEMPCPY = @HAVE_MEMPCPY@ HAVE_MSVC_INVALID_PARAMETER_HANDLER = @HAVE_MSVC_INVALID_PARAMETER_HANDLER@ HAVE_OS_H = @HAVE_OS_H@ HAVE_PCLOSE = @HAVE_PCLOSE@ HAVE_PIPE = @HAVE_PIPE@ HAVE_PIPE2 = @HAVE_PIPE2@ HAVE_POPEN = @HAVE_POPEN@ HAVE_PREAD = @HAVE_PREAD@ HAVE_PWRITE = @HAVE_PWRITE@ HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@ HAVE_READLINK = @HAVE_READLINK@ HAVE_READLINKAT = @HAVE_READLINKAT@ HAVE_RENAMEAT = @HAVE_RENAMEAT@ HAVE_SETHOSTNAME = @HAVE_SETHOSTNAME@ HAVE_SLEEP = @HAVE_SLEEP@ 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_STRVERSCMP = @HAVE_STRVERSCMP@ HAVE_SYMLINK = @HAVE_SYMLINK@ HAVE_SYMLINKAT = @HAVE_SYMLINKAT@ HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@ HAVE_UNISTD_H = @HAVE_UNISTD_H@ HAVE_UNLINKAT = @HAVE_UNLINKAT@ HAVE_USLEEP = @HAVE_USLEEP@ HAVE_VASPRINTF = @HAVE_VASPRINTF@ HAVE_VDPRINTF = @HAVE_VDPRINTF@ HAVE_WCHAR_T = @HAVE_WCHAR_T@ HAVE_WINSOCK2_H = @HAVE_WINSOCK2_H@ HAVE__BOOL = @HAVE__BOOL@ HELP2MAN = @HELP2MAN@ HTML_DIR = @HTML_DIR@ INCLUDE_GSS_KRB5 = @INCLUDE_GSS_KRB5@ INCLUDE_GSS_KRB5_EXT = @INCLUDE_GSS_KRB5_EXT@ 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@ INTLLIBS = @INTLLIBS@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBSHISHI = @LIBSHISHI@ LIBSHISHI_PREFIX = @LIBSHISHI_PREFIX@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBOBJS = @LTLIBOBJS@ LTLIBSHISHI = @LTLIBSHISHI@ LT_AGE = @LT_AGE@ LT_CURRENT = @LT_CURRENT@ LT_REVISION = @LT_REVISION@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = @NEXT_AS_FIRST_DIRECTIVE_ERRNO_H@ NEXT_AS_FIRST_DIRECTIVE_GETOPT_H = @NEXT_AS_FIRST_DIRECTIVE_GETOPT_H@ NEXT_AS_FIRST_DIRECTIVE_STDARG_H = @NEXT_AS_FIRST_DIRECTIVE_STDARG_H@ NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@ NEXT_AS_FIRST_DIRECTIVE_STDIO_H = @NEXT_AS_FIRST_DIRECTIVE_STDIO_H@ NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H@ NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@ NEXT_ERRNO_H = @NEXT_ERRNO_H@ NEXT_GETOPT_H = @NEXT_GETOPT_H@ NEXT_STDARG_H = @NEXT_STDARG_H@ NEXT_STDDEF_H = @NEXT_STDDEF_H@ NEXT_STDIO_H = @NEXT_STDIO_H@ NEXT_STRING_H = @NEXT_STRING_H@ NEXT_SYS_TYPES_H = @NEXT_SYS_TYPES_H@ NEXT_UNISTD_H = @NEXT_UNISTD_H@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ PKG_CONFIG = @PKG_CONFIG@ PMCCABE = @PMCCABE@ POSUB = @POSUB@ PO_SUFFIX = @PO_SUFFIX@ PRAGMA_COLUMNS = @PRAGMA_COLUMNS@ PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@ RANLIB = @RANLIB@ REPLACE_CHOWN = @REPLACE_CHOWN@ REPLACE_CLOSE = @REPLACE_CLOSE@ REPLACE_DPRINTF = @REPLACE_DPRINTF@ REPLACE_DUP = @REPLACE_DUP@ REPLACE_DUP2 = @REPLACE_DUP2@ REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@ REPLACE_FCLOSE = @REPLACE_FCLOSE@ REPLACE_FDOPEN = @REPLACE_FDOPEN@ REPLACE_FFLUSH = @REPLACE_FFLUSH@ REPLACE_FOPEN = @REPLACE_FOPEN@ REPLACE_FPRINTF = @REPLACE_FPRINTF@ REPLACE_FPURGE = @REPLACE_FPURGE@ REPLACE_FREOPEN = @REPLACE_FREOPEN@ REPLACE_FSEEK = @REPLACE_FSEEK@ REPLACE_FSEEKO = @REPLACE_FSEEKO@ REPLACE_FTELL = @REPLACE_FTELL@ REPLACE_FTELLO = @REPLACE_FTELLO@ REPLACE_FTRUNCATE = @REPLACE_FTRUNCATE@ REPLACE_GETCWD = @REPLACE_GETCWD@ REPLACE_GETDELIM = @REPLACE_GETDELIM@ REPLACE_GETDOMAINNAME = @REPLACE_GETDOMAINNAME@ REPLACE_GETDTABLESIZE = @REPLACE_GETDTABLESIZE@ REPLACE_GETGROUPS = @REPLACE_GETGROUPS@ REPLACE_GETLINE = @REPLACE_GETLINE@ REPLACE_GETLOGIN_R = @REPLACE_GETLOGIN_R@ REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@ REPLACE_ISATTY = @REPLACE_ISATTY@ REPLACE_LCHOWN = @REPLACE_LCHOWN@ REPLACE_LINK = @REPLACE_LINK@ REPLACE_LINKAT = @REPLACE_LINKAT@ REPLACE_LSEEK = @REPLACE_LSEEK@ REPLACE_MEMCHR = @REPLACE_MEMCHR@ REPLACE_MEMMEM = @REPLACE_MEMMEM@ REPLACE_NULL = @REPLACE_NULL@ REPLACE_OBSTACK_PRINTF = @REPLACE_OBSTACK_PRINTF@ REPLACE_PERROR = @REPLACE_PERROR@ REPLACE_POPEN = @REPLACE_POPEN@ REPLACE_PREAD = @REPLACE_PREAD@ REPLACE_PRINTF = @REPLACE_PRINTF@ REPLACE_PWRITE = @REPLACE_PWRITE@ REPLACE_READ = @REPLACE_READ@ REPLACE_READLINK = @REPLACE_READLINK@ REPLACE_REMOVE = @REPLACE_REMOVE@ REPLACE_RENAME = @REPLACE_RENAME@ REPLACE_RENAMEAT = @REPLACE_RENAMEAT@ REPLACE_RMDIR = @REPLACE_RMDIR@ REPLACE_SLEEP = @REPLACE_SLEEP@ REPLACE_SNPRINTF = @REPLACE_SNPRINTF@ REPLACE_SPRINTF = @REPLACE_SPRINTF@ REPLACE_STDIO_READ_FUNCS = @REPLACE_STDIO_READ_FUNCS@ REPLACE_STDIO_WRITE_FUNCS = @REPLACE_STDIO_WRITE_FUNCS@ REPLACE_STPNCPY = @REPLACE_STPNCPY@ REPLACE_STRCASESTR = @REPLACE_STRCASESTR@ REPLACE_STRCHRNUL = @REPLACE_STRCHRNUL@ REPLACE_STRDUP = @REPLACE_STRDUP@ REPLACE_STRERROR = @REPLACE_STRERROR@ REPLACE_STRERROR_R = @REPLACE_STRERROR_R@ REPLACE_STRNCAT = @REPLACE_STRNCAT@ REPLACE_STRNDUP = @REPLACE_STRNDUP@ REPLACE_STRNLEN = @REPLACE_STRNLEN@ REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@ REPLACE_STRSTR = @REPLACE_STRSTR@ REPLACE_STRTOK_R = @REPLACE_STRTOK_R@ REPLACE_SYMLINK = @REPLACE_SYMLINK@ REPLACE_TMPFILE = @REPLACE_TMPFILE@ REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@ REPLACE_UNLINK = @REPLACE_UNLINK@ REPLACE_UNLINKAT = @REPLACE_UNLINKAT@ REPLACE_USLEEP = @REPLACE_USLEEP@ REPLACE_VASPRINTF = @REPLACE_VASPRINTF@ REPLACE_VDPRINTF = @REPLACE_VDPRINTF@ REPLACE_VFPRINTF = @REPLACE_VFPRINTF@ REPLACE_VPRINTF = @REPLACE_VPRINTF@ REPLACE_VSNPRINTF = @REPLACE_VSNPRINTF@ REPLACE_VSPRINTF = @REPLACE_VSPRINTF@ REPLACE_WRITE = @REPLACE_WRITE@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STDARG_H = @STDARG_H@ STDBOOL_H = @STDBOOL_H@ STDDEF_H = @STDDEF_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@ USE_NLS = @USE_NLS@ VALGRIND = @VALGRIND@ VERSION = @VERSION@ VERSION_MAJOR = @VERSION_MAJOR@ VERSION_MINOR = @VERSION_MINOR@ VERSION_NUMBER = @VERSION_NUMBER@ VERSION_PATCH = @VERSION_PATCH@ WARN_CFLAGS = @WARN_CFLAGS@ WERROR_CFLAGS = @WERROR_CFLAGS@ WINDOWS_64_BIT_OFF_T = @WINDOWS_64_BIT_OFF_T@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gl_LIBOBJS = @gl_LIBOBJS@ gl_LTLIBOBJS = @gl_LTLIBOBJS@ gltests_LIBOBJS = @gltests_LIBOBJS@ gltests_LTLIBOBJS = @gltests_LTLIBOBJS@ gltests_WITNESS = @gltests_WITNESS@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ libgl_LIBOBJS = @libgl_LIBOBJS@ libgl_LTLIBOBJS = @libgl_LTLIBOBJS@ libgltests_LIBOBJS = @libgltests_LIBOBJS@ libgltests_LTLIBOBJS = @libgltests_LTLIBOBJS@ libgltests_WITNESS = @libgltests_WITNESS@ localedir = $(datadir)/locale localstatedir = @localstatedir@ 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@ srcgl_LIBOBJS = @srcgl_LIBOBJS@ srcgl_LTLIBOBJS = @srcgl_LTLIBOBJS@ srcgltests_LIBOBJS = @srcgltests_LIBOBJS@ srcgltests_LTLIBOBJS = @srcgltests_LTLIBOBJS@ srcgltests_WITNESS = @srcgltests_WITNESS@ 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/gl \ -I$(top_srcdir)/lib \ -I$(top_builddir)/lib/headers -I$(top_srcdir)/lib/headers noinst_LTLIBRARIES = libgss-shishi.la libgss_shishi_la_SOURCES = k5internal.h protos.h \ context.c checksum.c checksum.h error.c name.c cred.c msg.c oid.c \ utils.c libgss_shishi_la_LIBADD = @LTLIBINTL@ @LTLIBSHISHI@ 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 lib/krb5/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu lib/krb5/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-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libgss-shishi.la: $(libgss_shishi_la_OBJECTS) $(libgss_shishi_la_DEPENDENCIES) $(EXTRA_libgss_shishi_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libgss_shishi_la_OBJECTS) $(libgss_shishi_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/checksum.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/context.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cred.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/error.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/msg.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/name.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/oid.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/utils.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ 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: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am check check-am clean clean-generic \ clean-libtool clean-noinstLTLIBRARIES cscopelist-am ctags \ ctags-am 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 tags-am 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: �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gss-1.0.3/lib/krb5/error.c��������������������������������������������������������������������������0000664�0000000�0000000�00000011303�12415506237�012111� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* krb5/error.c --- Kerberos 5 GSS-API error handling functionality. * Copyright (C) 2003-2014 Simon Josefsson * * This file is part of the Generic Security Service (GSS). * * GSS 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. * * GSS 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 GSS; if not, see http://www.gnu.org/licenses or write to * the Free Software Foundation, Inc., 51 Franklin Street, Fifth * Floor, Boston, MA 02110-1301, USA. * */ /* Get specification. */ #include "k5internal.h" struct gss_status_codes { gss_uint32 err; const char *name; const char *text; }; static struct gss_status_codes gss_krb5_errors[] = { /* 4.1.1. Non-Kerberos-specific codes */ {GSS_KRB5_S_G_BAD_SERVICE_NAME, "GSS_KRB5_S_G_BAD_SERVICE_NAME", N_("No @ in SERVICE-NAME name string")}, {GSS_KRB5_S_G_BAD_STRING_UID, "GSS_KRB5_S_G_BAD_STRING_UID", N_("STRING-UID-NAME contains nondigits")}, {GSS_KRB5_S_G_NOUSER, "GSS_KRB5_S_G_NOUSER", N_("UID does not resolve to username")}, {GSS_KRB5_S_G_VALIDATE_FAILED, "GSS_KRB5_S_G_VALIDATE_FAILED", N_("Validation error")}, {GSS_KRB5_S_G_BUFFER_ALLOC, "GSS_KRB5_S_G_BUFFER_ALLOC", N_("Couldn't allocate gss_buffer_t data")}, {GSS_KRB5_S_G_BAD_MSG_CTX, "GSS_KRB5_S_G_BAD_MSG_CTX", N_("Message context invalid")}, {GSS_KRB5_S_G_WRONG_SIZE, "GSS_KRB5_S_G_WRONG_SIZE", N_("Buffer is the wrong size")}, {GSS_KRB5_S_G_BAD_USAGE, "GSS_KRB5_S_G_BAD_USAGE", N_("Credential usage type is unknown")}, {GSS_KRB5_S_G_UNKNOWN_QOP, "GSS_KRB5_S_G_UNKNOWN_QOP", N_("Unknown quality of protection specified")}, /* 4.1.2. Kerberos-specific-codes */ {GSS_KRB5_S_KG_CCACHE_NOMATCH, "GSS_KRB5_S_KG_CCACHE_NOMATCH", N_("Principal in credential cache does not match desired name")}, {GSS_KRB5_S_KG_KEYTAB_NOMATCH, "GSS_KRB5_S_KG_KEYTAB_NOMATCH", N_("No principal in keytab matches desired name")}, {GSS_KRB5_S_KG_TGT_MISSING, "GSS_KRB5_S_KG_TGT_MISSING", N_("Credential cache has no TGT")}, {GSS_KRB5_S_KG_NO_SUBKEY, "GSS_KRB5_S_KG_NO_SUBKEY", N_("Authenticator has no subkey")}, {GSS_KRB5_S_KG_CONTEXT_ESTABLISHED, "GSS_KRB5_S_KG_CONTEXT_ESTABLISHED", N_("Context is already fully established")}, {GSS_KRB5_S_KG_BAD_SIGN_TYPE, "GSS_KRB5_S_KG_BAD_SIGN_TYPE", N_("Unknown signature type in token")}, {GSS_KRB5_S_KG_BAD_LENGTH, "GSS_KRB5_S_KG_BAD_LENGTH", N_("Invalid field length in token")}, {GSS_KRB5_S_KG_CTX_INCOMPLETE, "GSS_KRB5_S_KG_CTX_INCOMPLETE", N_("Attempt to use incomplete security context")} }; OM_uint32 gss_krb5_display_status (OM_uint32 * minor_status, OM_uint32 status_value, int status_type, const gss_OID mech_type, OM_uint32 * message_context, gss_buffer_t status_string) { if (minor_status) *minor_status = 0; switch (status_value) { case 0: status_string->value = strdup (_("No krb5 error")); if (!status_string->value) { if (minor_status) *minor_status = ENOMEM; return GSS_S_FAILURE; } status_string->length = strlen (status_string->value); break; /* 4.1.1. Non-Kerberos-specific codes */ case GSS_KRB5_S_G_BAD_SERVICE_NAME: case GSS_KRB5_S_G_BAD_STRING_UID: case GSS_KRB5_S_G_NOUSER: case GSS_KRB5_S_G_VALIDATE_FAILED: case GSS_KRB5_S_G_BUFFER_ALLOC: case GSS_KRB5_S_G_BAD_MSG_CTX: case GSS_KRB5_S_G_WRONG_SIZE: case GSS_KRB5_S_G_BAD_USAGE: case GSS_KRB5_S_G_UNKNOWN_QOP: /* 4.1.2. Kerberos-specific-codes */ case GSS_KRB5_S_KG_CCACHE_NOMATCH: case GSS_KRB5_S_KG_KEYTAB_NOMATCH: case GSS_KRB5_S_KG_TGT_MISSING: case GSS_KRB5_S_KG_NO_SUBKEY: case GSS_KRB5_S_KG_CONTEXT_ESTABLISHED: case GSS_KRB5_S_KG_BAD_SIGN_TYPE: case GSS_KRB5_S_KG_BAD_LENGTH: case GSS_KRB5_S_KG_CTX_INCOMPLETE: status_string->value = strdup (_(gss_krb5_errors[status_value - 1].text)); if (!status_string->value) { if (minor_status) *minor_status = ENOMEM; return GSS_S_FAILURE; } status_string->length = strlen (status_string->value); break; default: status_string->value = strdup (_("Unknown krb5 error")); if (!status_string->value) { if (minor_status) *minor_status = ENOMEM; return GSS_S_FAILURE; } status_string->length = strlen (status_string->value); break; } return GSS_S_COMPLETE; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gss-1.0.3/lib/context.c�����������������������������������������������������������������������������0000664�0000000�0000000�00000137457�12415506237�011624� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* context.c --- Implementation of GSS-API Context functions. * Copyright (C) 2003-2014 Simon Josefsson * * This file is part of the Generic Security Service (GSS). * * GSS 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. * * GSS 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 GSS; if not, see http://www.gnu.org/licenses or write to * the Free Software Foundation, Inc., 51 Franklin Street, Fifth * Floor, Boston, MA 02110-1301, USA. * */ #include "internal.h" /* _gss_find_mech */ #include "meta.h" /** * gss_init_sec_context: * @minor_status: (integer, modify) Mechanism specific status code. * @initiator_cred_handle: (gss_cred_id_t, read, optional) Handle for * credentials claimed. Supply GSS_C_NO_CREDENTIAL to act as a * default initiator principal. If no default initiator is defined, * the function will return GSS_S_NO_CRED. * @context_handle: (gss_ctx_id_t, read/modify) Context handle for new * context. Supply GSS_C_NO_CONTEXT for first call; use value * returned by first call in continuation calls. Resources * associated with this context-handle must be released by the * application after use with a call to gss_delete_sec_context(). * @target_name: (gss_name_t, read) Name of target. * @mech_type: (OID, read, optional) Object ID of desired * mechanism. Supply GSS_C_NO_OID to obtain an implementation * specific default. * @req_flags: (bit-mask, read) Contains various independent flags, * each of which requests that the context support a specific * service option. Symbolic names are provided for each flag, and * the symbolic names corresponding to the required flags should be * logically-ORed together to form the bit-mask value. See below * for the flags. * @time_req: (Integer, read, optional) Desired number of seconds for * which context should remain valid. Supply 0 to request a default * validity period. * @input_chan_bindings: (channel bindings, read, optional) * Application-specified bindings. Allows application to securely * bind channel identification information to the security context. * Specify GSS_C_NO_CHANNEL_BINDINGS if channel bindings are not * used. * @input_token: (buffer, opaque, read, optional) Token received from * peer application. Supply GSS_C_NO_BUFFER, or a pointer to a * buffer containing the value GSS_C_EMPTY_BUFFER on initial call. * @actual_mech_type: (OID, modify, optional) Actual mechanism used. * The OID returned via this parameter will be a pointer to static * storage that should be treated as read-only; In particular the * application should not attempt to free it. Specify NULL if not * required. * @output_token: (buffer, opaque, modify) Token to be sent to peer * application. If the length field of the returned buffer is zero, * no token need be sent to the peer application. Storage * associated with this buffer must be freed by the application * after use with a call to gss_release_buffer(). * @ret_flags: (bit-mask, modify, optional) Contains various * independent flags, each of which indicates that the context * supports a specific service option. Specify NULL if not * required. Symbolic names are provided for each flag, and the * symbolic names corresponding to the required flags should be * logically-ANDed with the ret_flags value to test whether a given * option is supported by the context. See below for the flags. * @time_rec: (Integer, modify, optional) Number of seconds for which * the context will remain valid. If the implementation does not * support context expiration, the value GSS_C_INDEFINITE will be * returned. Specify NULL if not required. * * Initiates the establishment of a security context between the * application and a remote peer. Initially, the input_token * parameter should be specified either as GSS_C_NO_BUFFER, or as a * pointer to a gss_buffer_desc object whose length field contains the * value zero. The routine may return a output_token which should be * transferred to the peer application, where the peer application * will present it to gss_accept_sec_context. If no token need be * sent, gss_init_sec_context will indicate this by setting the length * field of the output_token argument to zero. To complete the context * establishment, one or more reply tokens may be required from the * peer application; if so, gss_init_sec_context will return a status * containing the supplementary information bit GSS_S_CONTINUE_NEEDED. * In this case, gss_init_sec_context should be called again when the * reply token is received from the peer application, passing the * reply token to gss_init_sec_context via the input_token parameters. * * Portable applications should be constructed to use the token length * and return status to determine whether a token needs to be sent or * waited for. Thus a typical portable caller should always invoke * gss_init_sec_context within a loop: * * --------------------------------------------------- * int context_established = 0; * gss_ctx_id_t context_hdl = GSS_C_NO_CONTEXT; * ... * input_token->length = 0; * * while (!context_established) { * maj_stat = gss_init_sec_context(&min_stat, * cred_hdl, * &context_hdl, * target_name, * desired_mech, * desired_services, * desired_time, * input_bindings, * input_token, * &actual_mech, * output_token, * &actual_services, * &actual_time); * if (GSS_ERROR(maj_stat)) { * report_error(maj_stat, min_stat); * }; * * if (output_token->length != 0) { * send_token_to_peer(output_token); * gss_release_buffer(&min_stat, output_token) * }; * if (GSS_ERROR(maj_stat)) { * * if (context_hdl != GSS_C_NO_CONTEXT) * gss_delete_sec_context(&min_stat, * &context_hdl, * GSS_C_NO_BUFFER); * break; * }; * * if (maj_stat & GSS_S_CONTINUE_NEEDED) { * receive_token_from_peer(input_token); * } else { * context_established = 1; * }; * }; * --------------------------------------------------- * * Whenever the routine returns a major status that includes the value * GSS_S_CONTINUE_NEEDED, the context is not fully established and the * following restrictions apply to the output parameters: * * - The value returned via the time_rec parameter is undefined unless * the accompanying ret_flags parameter contains the bit * GSS_C_PROT_READY_FLAG, indicating that per-message services may be * applied in advance of a successful completion status, the value * returned via the actual_mech_type parameter is undefined until the * routine returns a major status value of GSS_S_COMPLETE. * * - The values of the GSS_C_DELEG_FLAG, GSS_C_MUTUAL_FLAG, * GSS_C_REPLAY_FLAG, GSS_C_SEQUENCE_FLAG, GSS_C_CONF_FLAG, * GSS_C_INTEG_FLAG and GSS_C_ANON_FLAG bits returned via the * ret_flags parameter should contain the values that the * implementation expects would be valid if context establishment were * to succeed. In particular, if the application has requested a * service such as delegation or anonymous authentication via the * req_flags argument, and such a service is unavailable from the * underlying mechanism, gss_init_sec_context should generate a token * that will not provide the service, and indicate via the ret_flags * argument that the service will not be supported. The application * may choose to abort the context establishment by calling * gss_delete_sec_context (if it cannot continue in the absence of the * service), or it may choose to transmit the token and continue * context establishment (if the service was merely desired but not * mandatory). * * - The values of the GSS_C_PROT_READY_FLAG and GSS_C_TRANS_FLAG bits * within ret_flags should indicate the actual state at the time * gss_init_sec_context returns, whether or not the context is fully * established. * * - GSS-API implementations that support per-message protection are * encouraged to set the GSS_C_PROT_READY_FLAG in the final ret_flags * returned to a caller (i.e. when accompanied by a GSS_S_COMPLETE * status code). However, applications should not rely on this * behavior as the flag was not defined in Version 1 of the GSS-API. * Instead, applications should determine what per-message services * are available after a successful context establishment according to * the GSS_C_INTEG_FLAG and GSS_C_CONF_FLAG values. * * - All other bits within the ret_flags argument should be set to * zero. * * If the initial call of gss_init_sec_context() fails, the * implementation should not create a context object, and should leave * the value of the context_handle parameter set to GSS_C_NO_CONTEXT * to indicate this. In the event of a failure on a subsequent call, * the implementation is permitted to delete the "half-built" security * context (in which case it should set the context_handle parameter * to GSS_C_NO_CONTEXT), but the preferred behavior is to leave the * security context untouched for the application to delete (using * gss_delete_sec_context). * * During context establishment, the informational status bits * GSS_S_OLD_TOKEN and GSS_S_DUPLICATE_TOKEN indicate fatal errors, * and GSS-API mechanisms should always return them in association * with a routine error of GSS_S_FAILURE. This requirement for * pairing did not exist in version 1 of the GSS-API specification, so * applications that wish to run over version 1 implementations must * special-case these codes. * * The `req_flags` values: * * `GSS_C_DELEG_FLAG`:: * - True - Delegate credentials to remote peer. * - False - Don't delegate. * * `GSS_C_MUTUAL_FLAG`:: * - True - Request that remote peer authenticate itself. * - False - Authenticate self to remote peer only. * * `GSS_C_REPLAY_FLAG`:: * - True - Enable replay detection for messages protected with * gss_wrap or gss_get_mic. * - False - Don't attempt to detect replayed messages. * * `GSS_C_SEQUENCE_FLAG`:: * - True - Enable detection of out-of-sequence protected messages. * - False - Don't attempt to detect out-of-sequence messages. * * `GSS_C_CONF_FLAG`:: * - True - Request that confidentiality service be made available * (via gss_wrap). * - False - No per-message confidentiality service is required. * * `GSS_C_INTEG_FLAG`:: * - True - Request that integrity service be made available (via * gss_wrap or gss_get_mic). * - False - No per-message integrity service is required. * * `GSS_C_ANON_FLAG`:: * - True - Do not reveal the initiator's identity to the acceptor. * - False - Authenticate normally. * * The `ret_flags` values: * * `GSS_C_DELEG_FLAG`:: * - True - Credentials were delegated to the remote peer. * - False - No credentials were delegated. * * `GSS_C_MUTUAL_FLAG`:: * - True - The remote peer has authenticated itself. * - False - Remote peer has not authenticated itself. * * `GSS_C_REPLAY_FLAG`:: * - True - replay of protected messages will be detected. * - False - replayed messages will not be detected. * * `GSS_C_SEQUENCE_FLAG`:: * - True - out-of-sequence protected messages will be detected. * - False - out-of-sequence messages will not be detected. * * `GSS_C_CONF_FLAG`:: * - True - Confidentiality service may be invoked by calling gss_wrap * routine. * - False - No confidentiality service (via gss_wrap) * available. gss_wrap will provide message encapsulation, data-origin * authentication and integrity services only. * * `GSS_C_INTEG_FLAG`:: * - True - Integrity service may be invoked by calling either * gss_get_mic or gss_wrap routines. * - False - Per-message integrity service unavailable. * * `GSS_C_ANON_FLAG`:: * - True - The initiator's identity has not been revealed, and will * not be revealed if any emitted token is passed to the acceptor. * - False - The initiator's identity has been or will be * authenticated normally. * * `GSS_C_PROT_READY_FLAG`:: * - True - Protection services (as specified by the states of the * GSS_C_CONF_FLAG and GSS_C_INTEG_FLAG) are available for use if the * accompanying major status return value is either GSS_S_COMPLETE or * GSS_S_CONTINUE_NEEDED. * - False - Protection services (as specified by the states of the * GSS_C_CONF_FLAG and GSS_C_INTEG_FLAG) are available only if the * accompanying major status return value is GSS_S_COMPLETE. * * `GSS_C_TRANS_FLAG`:: * - True - The resultant security context may be transferred to other * processes via a call to gss_export_sec_context(). * - False - The security context is not transferable. * * All other bits should be set to zero. * * Return value: * * `GSS_S_COMPLETE`: Successful completion. * * `GSS_S_CONTINUE_NEEDED`: Indicates that a token from the peer * application is required to complete the context, and that * gss_init_sec_context must be called again with that token. * * `GSS_S_DEFECTIVE_TOKEN`: Indicates that consistency checks * performed on the input_token failed. * * `GSS_S_DEFECTIVE_CREDENTIAL`: Indicates that consistency checks * performed on the credential failed. * * `GSS_S_NO_CRED`: The supplied credentials were not valid for * context initiation, or the credential handle did not reference any * credentials. * * `GSS_S_CREDENTIALS_EXPIRED`: The referenced credentials have * expired. * * `GSS_S_BAD_BINDINGS`: The input_token contains different channel * bindings to those specified via the input_chan_bindings parameter. * * `GSS_S_BAD_SIG`: The input_token contains an invalid MIC, or a MIC * that could not be verified. * * `GSS_S_OLD_TOKEN`: The input_token was too old. This is a fatal * error during context establishment. * * `GSS_S_DUPLICATE_TOKEN`: The input_token is valid, but is a * duplicate of a token already processed. This is a fatal error * during context establishment. * * `GSS_S_NO_CONTEXT`: Indicates that the supplied context handle did * not refer to a valid context. * * `GSS_S_BAD_NAMETYPE`: The provided target_name parameter contained * an invalid or unsupported type of name. * * `GSS_S_BAD_NAME`: The provided target_name parameter was * ill-formed. * * `GSS_S_BAD_MECH`: The specified mechanism is not supported by the * provided credential, or is unrecognized by the implementation. **/ OM_uint32 gss_init_sec_context (OM_uint32 * minor_status, const gss_cred_id_t initiator_cred_handle, gss_ctx_id_t * context_handle, const gss_name_t target_name, const gss_OID mech_type, OM_uint32 req_flags, OM_uint32 time_req, const gss_channel_bindings_t input_chan_bindings, const gss_buffer_t input_token, gss_OID * actual_mech_type, gss_buffer_t output_token, OM_uint32 * ret_flags, OM_uint32 * time_rec) { OM_uint32 maj_stat; _gss_mech_api_t mech; int freecontext = 0; if (output_token) { output_token->length = 0; output_token->value = NULL; } if (ret_flags) *ret_flags = 0; if (!context_handle) { if (minor_status) *minor_status = 0; return GSS_S_NO_CONTEXT | GSS_S_CALL_INACCESSIBLE_READ; } if (output_token == GSS_C_NO_BUFFER) { if (minor_status) *minor_status = 0; return GSS_S_FAILURE | GSS_S_CALL_BAD_STRUCTURE; } if (*context_handle == GSS_C_NO_CONTEXT) mech = _gss_find_mech (mech_type); else mech = _gss_find_mech ((*context_handle)->mech); if (mech == NULL) { if (minor_status) *minor_status = 0; return GSS_S_BAD_MECH; } if (actual_mech_type) *actual_mech_type = mech->mech; if (*context_handle == GSS_C_NO_CONTEXT) { *context_handle = calloc (sizeof (**context_handle), 1); if (!*context_handle) { if (minor_status) *minor_status = ENOMEM; return GSS_S_FAILURE; } (*context_handle)->mech = mech->mech; freecontext = 1; } maj_stat = mech->init_sec_context (minor_status, initiator_cred_handle, context_handle, target_name, mech_type, req_flags, time_req, input_chan_bindings, input_token, actual_mech_type, output_token, ret_flags, time_rec); if (GSS_ERROR (maj_stat) && freecontext) { free (*context_handle); *context_handle = GSS_C_NO_CONTEXT; } return maj_stat; } /** * gss_accept_sec_context: * @minor_status: (Integer, modify) Mechanism specific status code. * @context_handle: (gss_ctx_id_t, read/modify) Context handle for new * context. Supply GSS_C_NO_CONTEXT for first call; use value * returned in subsequent calls. Once gss_accept_sec_context() has * returned a value via this parameter, resources have been assigned * to the corresponding context, and must be freed by the * application after use with a call to gss_delete_sec_context(). * @acceptor_cred_handle: (gss_cred_id_t, read) Credential handle * claimed by context acceptor. Specify GSS_C_NO_CREDENTIAL to * accept the context as a default principal. If * GSS_C_NO_CREDENTIAL is specified, but no default acceptor * principal is defined, GSS_S_NO_CRED will be returned. * @input_token_buffer: (buffer, opaque, read) Token obtained from * remote application. * @input_chan_bindings: (channel bindings, read, optional) * Application- specified bindings. Allows application to securely * bind channel identification information to the security context. * If channel bindings are not used, specify * GSS_C_NO_CHANNEL_BINDINGS. * @src_name: (gss_name_t, modify, optional) Authenticated name of * context initiator. After use, this name should be deallocated by * passing it to gss_release_name(). If not required, specify NULL. * @mech_type: (Object ID, modify, optional) Security mechanism used. * The returned OID value will be a pointer into static storage, and * should be treated as read-only by the caller (in particular, it * does not need to be freed). If not required, specify NULL. * @output_token: (buffer, opaque, modify) Token to be passed to peer * application. If the length field of the returned token buffer is * 0, then no token need be passed to the peer application. If a * non- zero length field is returned, the associated storage must * be freed after use by the application with a call to * gss_release_buffer(). * @ret_flags: (bit-mask, modify, optional) Contains various * independent flags, each of which indicates that the context * supports a specific service option. If not needed, specify NULL. * Symbolic names are provided for each flag, and the symbolic names * corresponding to the required flags should be logically-ANDed * with the ret_flags value to test whether a given option is * supported by the context. See below for the flags. * @time_rec: (Integer, modify, optional) Number of seconds for which * the context will remain valid. Specify NULL if not required. * @delegated_cred_handle: (gss_cred_id_t, modify, optional * credential) Handle for credentials received from context * initiator. Only valid if deleg_flag in ret_flags is true, in * which case an explicit credential handle (i.e. not * GSS_C_NO_CREDENTIAL) will be returned; if deleg_flag is false, * gss_accept_sec_context() will set this parameter to * GSS_C_NO_CREDENTIAL. If a credential handle is returned, the * associated resources must be released by the application after * use with a call to gss_release_cred(). Specify NULL if not * required. * * Allows a remotely initiated security context between the * application and a remote peer to be established. The routine may * return a output_token which should be transferred to the peer * application, where the peer application will present it to * gss_init_sec_context. If no token need be sent, * gss_accept_sec_context will indicate this by setting the length * field of the output_token argument to zero. To complete the * context establishment, one or more reply tokens may be required * from the peer application; if so, gss_accept_sec_context will * return a status flag of GSS_S_CONTINUE_NEEDED, in which case it * should be called again when the reply token is received from the * peer application, passing the token to gss_accept_sec_context via * the input_token parameters. * * Portable applications should be constructed to use the token length * and return status to determine whether a token needs to be sent or * waited for. Thus a typical portable caller should always invoke * gss_accept_sec_context within a loop: * * --------------------------------------------------- * gss_ctx_id_t context_hdl = GSS_C_NO_CONTEXT; * * do { * receive_token_from_peer(input_token); * maj_stat = gss_accept_sec_context(&min_stat, * &context_hdl, * cred_hdl, * input_token, * input_bindings, * &client_name, * &mech_type, * output_token, * &ret_flags, * &time_rec, * &deleg_cred); * if (GSS_ERROR(maj_stat)) { * report_error(maj_stat, min_stat); * }; * if (output_token->length != 0) { * send_token_to_peer(output_token); * * gss_release_buffer(&min_stat, output_token); * }; * if (GSS_ERROR(maj_stat)) { * if (context_hdl != GSS_C_NO_CONTEXT) * gss_delete_sec_context(&min_stat, * &context_hdl, * GSS_C_NO_BUFFER); * break; * }; * } while (maj_stat & GSS_S_CONTINUE_NEEDED); * --------------------------------------------------- * * * Whenever the routine returns a major status that includes the value * GSS_S_CONTINUE_NEEDED, the context is not fully established and the * following restrictions apply to the output parameters: * * The value returned via the time_rec parameter is undefined Unless the * accompanying ret_flags parameter contains the bit * GSS_C_PROT_READY_FLAG, indicating that per-message services may be * applied in advance of a successful completion status, the value * returned via the mech_type parameter may be undefined until the * routine returns a major status value of GSS_S_COMPLETE. * * The values of the GSS_C_DELEG_FLAG, * GSS_C_MUTUAL_FLAG,GSS_C_REPLAY_FLAG, GSS_C_SEQUENCE_FLAG, * GSS_C_CONF_FLAG,GSS_C_INTEG_FLAG and GSS_C_ANON_FLAG bits returned * via the ret_flags parameter should contain the values that the * implementation expects would be valid if context establishment were * to succeed. * * The values of the GSS_C_PROT_READY_FLAG and GSS_C_TRANS_FLAG bits * within ret_flags should indicate the actual state at the time * gss_accept_sec_context returns, whether or not the context is fully * established. * * Although this requires that GSS-API implementations set the * GSS_C_PROT_READY_FLAG in the final ret_flags returned to a caller * (i.e. when accompanied by a GSS_S_COMPLETE status code), applications * should not rely on this behavior as the flag was not defined in * Version 1 of the GSS-API. Instead, applications should be prepared to * use per-message services after a successful context establishment, * according to the GSS_C_INTEG_FLAG and GSS_C_CONF_FLAG values. * * All other bits within the ret_flags argument should be set to zero. * While the routine returns GSS_S_CONTINUE_NEEDED, the values returned * via the ret_flags argument indicate the services that the * implementation expects to be available from the established context. * * If the initial call of gss_accept_sec_context() fails, the * implementation should not create a context object, and should leave * the value of the context_handle parameter set to GSS_C_NO_CONTEXT to * indicate this. In the event of a failure on a subsequent call, the * implementation is permitted to delete the "half-built" security * context (in which case it should set the context_handle parameter to * GSS_C_NO_CONTEXT), but the preferred behavior is to leave the * security context (and the context_handle parameter) untouched for the * application to delete (using gss_delete_sec_context). * * During context establishment, the informational status bits * GSS_S_OLD_TOKEN and GSS_S_DUPLICATE_TOKEN indicate fatal errors, and * GSS-API mechanisms should always return them in association with a * routine error of GSS_S_FAILURE. This requirement for pairing did not * exist in version 1 of the GSS-API specification, so applications that * wish to run over version 1 implementations must special-case these * codes. * * The `ret_flags` values: * * `GSS_C_DELEG_FLAG`:: * - True - Delegated credentials are available via the * delegated_cred_handle parameter. * - False - No credentials were delegated. * * `GSS_C_MUTUAL_FLAG`:: * - True - Remote peer asked for mutual authentication. * - False - Remote peer did not ask for mutual authentication. * * `GSS_C_REPLAY_FLAG`:: * - True - replay of protected messages will be detected. * - False - replayed messages will not be detected. * * `GSS_C_SEQUENCE_FLAG`:: * - True - out-of-sequence protected messages will be detected. * - False - out-of-sequence messages will not be detected. * * `GSS_C_CONF_FLAG`:: * - True - Confidentiality service may be invoked by calling the * gss_wrap routine. * - False - No confidentiality service (via gss_wrap) * available. gss_wrap will provide message encapsulation, data-origin * authentication and integrity services only. * * `GSS_C_INTEG_FLAG`:: * - True - Integrity service may be invoked by calling either * gss_get_mic or gss_wrap routines. * - False - Per-message integrity service unavailable. * * `GSS_C_ANON_FLAG`:: * - True - The initiator does not wish to be authenticated; the * src_name parameter (if requested) contains an anonymous internal * name. * - False - The initiator has been authenticated normally. * * `GSS_C_PROT_READY_FLAG`:: * - True - Protection services (as specified by the states of the * GSS_C_CONF_FLAG and GSS_C_INTEG_FLAG) are available if the * accompanying major status return value is either GSS_S_COMPLETE or * GSS_S_CONTINUE_NEEDED. * - False - Protection services (as specified by the states of the * GSS_C_CONF_FLAG and GSS_C_INTEG_FLAG) are available only if the * accompanying major status return value is GSS_S_COMPLETE. * * `GSS_C_TRANS_FLAG`:: * - True - The resultant security context may be transferred to other * processes via a call to gss_export_sec_context(). * - False - The security context is not transferable. * * All other bits should be set to zero. * * Return value: * * `GSS_S_CONTINUE_NEEDED`: Indicates that a token from the peer * application is required to complete the context, and that * gss_accept_sec_context must be called again with that token. * * `GSS_S_DEFECTIVE_TOKEN`: Indicates that consistency checks * performed on the input_token failed. * * `GSS_S_DEFECTIVE_CREDENTIAL`: Indicates that consistency checks * performed on the credential failed. * * `GSS_S_NO_CRED`: The supplied credentials were not valid for * context acceptance, or the credential handle did not reference any * credentials. * * `GSS_S_CREDENTIALS_EXPIRED`: The referenced credentials have * expired. * * `GSS_S_BAD_BINDINGS`: The input_token contains different channel * bindings to those specified via the input_chan_bindings parameter. * * `GSS_S_NO_CONTEXT`: Indicates that the supplied context handle did * not refer to a valid context. * * `GSS_S_BAD_SIG`: The input_token contains an invalid MIC. * * `GSS_S_OLD_TOKEN`: The input_token was too old. This is a fatal * error during context establishment. * * `GSS_S_DUPLICATE_TOKEN`: The input_token is valid, but is a * duplicate of a token already processed. This is a fatal error * during context establishment. * * `GSS_S_BAD_MECH`: The received token specified a mechanism that is * not supported by the implementation or the provided credential. **/ OM_uint32 gss_accept_sec_context (OM_uint32 * minor_status, gss_ctx_id_t * context_handle, const gss_cred_id_t acceptor_cred_handle, const gss_buffer_t input_token_buffer, const gss_channel_bindings_t input_chan_bindings, gss_name_t * src_name, gss_OID * mech_type, gss_buffer_t output_token, OM_uint32 * ret_flags, OM_uint32 * time_rec, gss_cred_id_t * delegated_cred_handle) { _gss_mech_api_t mech; if (!context_handle) { if (minor_status) *minor_status = 0; return GSS_S_NO_CONTEXT | GSS_S_CALL_INACCESSIBLE_READ; } if (*context_handle == GSS_C_NO_CONTEXT) { char *oid; size_t oidlen; gss_OID_desc oidbuf; int rc; rc = _gss_decapsulate_token (input_token_buffer->value, input_token_buffer->length, &oid, &oidlen, NULL, NULL); if (rc != 0) { if (minor_status) *minor_status = 0; return GSS_S_DEFECTIVE_TOKEN; } oidbuf.elements = oid; oidbuf.length = oidlen; mech = _gss_find_mech_no_default (&oidbuf); } else mech = _gss_find_mech_no_default ((*context_handle)->mech); if (mech == NULL) { if (minor_status) *minor_status = 0; return GSS_S_BAD_MECH; } if (mech_type) *mech_type = mech->mech; return mech->accept_sec_context (minor_status, context_handle, acceptor_cred_handle, input_token_buffer, input_chan_bindings, src_name, mech_type, output_token, ret_flags, time_rec, delegated_cred_handle); } /** * gss_delete_sec_context: * @minor_status: (Integer, modify) Mechanism specific status code. * @context_handle: (gss_ctx_id_t, modify) Context handle identifying * context to delete. After deleting the context, the GSS-API will * set this context handle to GSS_C_NO_CONTEXT. * @output_token: (buffer, opaque, modify, optional) Token to be sent * to remote application to instruct it to also delete the context. * It is recommended that applications specify GSS_C_NO_BUFFER for * this parameter, requesting local deletion only. If a buffer * parameter is provided by the application, the mechanism may * return a token in it; mechanisms that implement only local * deletion should set the length field of this token to zero to * indicate to the application that no token is to be sent to the * peer. * * Delete a security context. gss_delete_sec_context will delete the * local data structures associated with the specified security * context, and may generate an output_token, which when passed to the * peer gss_process_context_token will instruct it to do likewise. If * no token is required by the mechanism, the GSS-API should set the * length field of the output_token (if provided) to zero. No further * security services may be obtained using the context specified by * context_handle. * * In addition to deleting established security contexts, * gss_delete_sec_context must also be able to delete "half-built" * security contexts resulting from an incomplete sequence of * gss_init_sec_context()/gss_accept_sec_context() calls. * * The output_token parameter is retained for compatibility with * version 1 of the GSS-API. It is recommended that both peer * applications invoke gss_delete_sec_context passing the value * GSS_C_NO_BUFFER for the output_token parameter, indicating that no * token is required, and that gss_delete_sec_context should simply * delete local context data structures. If the application does pass * a valid buffer to gss_delete_sec_context, mechanisms are encouraged * to return a zero-length token, indicating that no peer action is * necessary, and that no token should be transferred by the * application. * * Return value: * * `GSS_S_COMPLETE`: Successful completion. * * `GSS_S_NO_CONTEXT`: No valid context was supplied. **/ OM_uint32 gss_delete_sec_context (OM_uint32 * minor_status, gss_ctx_id_t * context_handle, gss_buffer_t output_token) { _gss_mech_api_t mech; OM_uint32 ret; if (!context_handle) { if (minor_status) *minor_status = 0; return GSS_S_NO_CONTEXT | GSS_S_CALL_INACCESSIBLE_READ; } if (*context_handle == GSS_C_NO_CONTEXT) { if (minor_status) *minor_status = 0; return GSS_S_NO_CONTEXT | GSS_S_CALL_BAD_STRUCTURE; } if (output_token != GSS_C_NO_BUFFER) { output_token->length = 0; output_token->value = NULL; } mech = _gss_find_mech ((*context_handle)->mech); if (mech == NULL) { if (minor_status) *minor_status = 0; return GSS_S_BAD_MECH; } ret = mech->delete_sec_context (NULL, context_handle, output_token); free (*context_handle); *context_handle = GSS_C_NO_CONTEXT; return ret; } /** * gss_process_context_token: * @minor_status: (Integer, modify) Implementation specific status code. * @context_handle: (gss_ctx_id_t, read) Context handle of context on * which token is to be processed * @token_buffer: (buffer, opaque, read) Token to process. * * Provides a way to pass an asynchronous token to the security * service. Most context-level tokens are emitted and processed * synchronously by gss_init_sec_context and gss_accept_sec_context, * and the application is informed as to whether further tokens are * expected by the GSS_C_CONTINUE_NEEDED major status bit. * Occasionally, a mechanism may need to emit a context-level token at * a point when the peer entity is not expecting a token. For * example, the initiator's final call to gss_init_sec_context may * emit a token and return a status of GSS_S_COMPLETE, but the * acceptor's call to gss_accept_sec_context may fail. The acceptor's * mechanism may wish to send a token containing an error indication * to the initiator, but the initiator is not expecting a token at * this point, believing that the context is fully established. * Gss_process_context_token provides a way to pass such a token to * the mechanism at any time. * * Return value: * * `GSS_S_COMPLETE`: Successful completion. * * `GSS_S_DEFECTIVE_TOKEN`: Indicates that consistency checks * performed on the token failed. * * `GSS_S_NO_CONTEXT`: The context_handle did not refer to a valid * context. **/ OM_uint32 gss_process_context_token (OM_uint32 * minor_status, const gss_ctx_id_t context_handle, const gss_buffer_t token_buffer) { return GSS_S_FAILURE; } /** * gss_context_time: * @minor_status: (Integer, modify) Implementation specific status * code. * @context_handle: (gss_ctx_id_t, read) Identifies the context to be * interrogated. * @time_rec: (Integer, modify) Number of seconds that the context * will remain valid. If the context has already expired, zero will * be returned. * * Determines the number of seconds for which the specified context * will remain valid. * * Return value: * * `GSS_S_COMPLETE`: Successful completion. * * `GSS_S_CONTEXT_EXPIRED`: The context has already expired. * * `GSS_S_NO_CONTEXT`: The context_handle parameter did not identify a * valid context **/ OM_uint32 gss_context_time (OM_uint32 * minor_status, const gss_ctx_id_t context_handle, OM_uint32 * time_rec) { _gss_mech_api_t mech; if (context_handle == GSS_C_NO_CONTEXT) { if (minor_status) *minor_status = 0; return GSS_S_NO_CONTEXT | GSS_S_CALL_BAD_STRUCTURE; } mech = _gss_find_mech (context_handle->mech); if (mech == NULL) { if (minor_status) *minor_status = 0; return GSS_S_BAD_MECH; } return mech->context_time (minor_status, context_handle, time_rec); } /** * gss_inquire_context: * @minor_status: (Integer, modify) Mechanism specific status code. * @context_handle: (gss_ctx_id_t, read) A handle that refers to the * security context. * @src_name: (gss_name_t, modify, optional) The name of the context * initiator. If the context was established using anonymous * authentication, and if the application invoking * gss_inquire_context is the context acceptor, an anonymous name * will be returned. Storage associated with this name must be * freed by the application after use with a call to * gss_release_name(). Specify NULL if not required. * @targ_name: (gss_name_t, modify, optional) The name of the context * acceptor. Storage associated with this name must be freed by the * application after use with a call to gss_release_name(). If the * context acceptor did not authenticate itself, and if the * initiator did not specify a target name in its call to * gss_init_sec_context(), the value GSS_C_NO_NAME will be returned. * Specify NULL if not required. * @lifetime_rec: (Integer, modify, optional) The number of seconds * for which the context will remain valid. If the context has * expired, this parameter will be set to zero. If the * implementation does not support context expiration, the value * GSS_C_INDEFINITE will be returned. Specify NULL if not required. * @mech_type: (gss_OID, modify, optional) The security mechanism * providing the context. The returned OID will be a pointer to * static storage that should be treated as read-only by the * application; in particular the application should not attempt to * free it. Specify NULL if not required. * @ctx_flags: (bit-mask, modify, optional) Contains various * independent flags, each of which indicates that the context * supports (or is expected to support, if ctx_open is false) a * specific service option. If not needed, specify NULL. Symbolic * names are provided for each flag, and the symbolic names * corresponding to the required flags should be logically-ANDed * with the ret_flags value to test whether a given option is * supported by the context. See below for the flags. * @locally_initiated: (Boolean, modify) Non-zero if the invoking * application is the context initiator. Specify NULL if not * required. * @open: (Boolean, modify) Non-zero if the context is fully * established; Zero if a context-establishment token is expected * from the peer application. Specify NULL if not required. * * Obtains information about a security context. The caller must * already have obtained a handle that refers to the context, although * the context need not be fully established. * * The `ctx_flags` values: * * `GSS_C_DELEG_FLAG`:: * - True - Credentials were delegated from the initiator to the * acceptor. * - False - No credentials were delegated. * * `GSS_C_MUTUAL_FLAG`:: * - True - The acceptor was authenticated to the initiator. * - False - The acceptor did not authenticate itself. * * `GSS_C_REPLAY_FLAG`:: * - True - replay of protected messages will be detected. * - False - replayed messages will not be detected. * * `GSS_C_SEQUENCE_FLAG`:: * - True - out-of-sequence protected messages will be detected. * - False - out-of-sequence messages will not be detected. * * `GSS_C_CONF_FLAG`:: * - True - Confidentiality service may be invoked by calling gss_wrap * routine. * - False - No confidentiality service (via gss_wrap) * available. gss_wrap will provide message encapsulation, data-origin * authentication and integrity services only. * * `GSS_C_INTEG_FLAG`:: * - True - Integrity service may be invoked by calling either * gss_get_mic or gss_wrap routines. * - False - Per-message integrity service unavailable. * * `GSS_C_ANON_FLAG`:: * - True - The initiator's identity will not be revealed to the * acceptor. The src_name parameter (if requested) contains an * anonymous internal name. * - False - The initiator has been authenticated normally. * * `GSS_C_PROT_READY_FLAG`:: * - True - Protection services (as specified by the states of the * GSS_C_CONF_FLAG and GSS_C_INTEG_FLAG) are available for use. * - False - Protection services (as specified by the states of the * GSS_C_CONF_FLAG and GSS_C_INTEG_FLAG) are available only if the * context is fully established (i.e. if the open parameter is * non-zero). * * `GSS_C_TRANS_FLAG`:: * - True - The resultant security context may be transferred to other * processes via a call to gss_export_sec_context(). * - False - The security context is not transferable. * * Return value: * * `GSS_S_COMPLETE`: Successful completion. * * `GSS_S_NO_CONTEXT`: The referenced context could not be accessed. **/ OM_uint32 gss_inquire_context (OM_uint32 * minor_status, const gss_ctx_id_t context_handle, gss_name_t * src_name, gss_name_t * targ_name, OM_uint32 * lifetime_rec, gss_OID * mech_type, OM_uint32 * ctx_flags, int *locally_initiated, int *open) { return GSS_S_FAILURE; } /** * gss_wrap_size_limit: * @minor_status: (Integer, modify) Mechanism specific status code. * @context_handle: (gss_ctx_id_t, read) A handle that refers to the * security over which the messages will be sent. * @conf_req_flag: (Boolean, read) Indicates whether gss_wrap will be * asked to apply confidentiality protection in addition to * integrity protection. See the routine description for gss_wrap * for more details. * @qop_req: (gss_qop_t, read) Indicates the level of protection that * gss_wrap will be asked to provide. See the routine description * for gss_wrap for more details. * @req_output_size: (Integer, read) The desired maximum size for * tokens emitted by gss_wrap. * @max_input_size: (Integer, modify) The maximum input message size * that may be presented to gss_wrap in order to guarantee that the * emitted token shall be no larger than req_output_size bytes. * * Allows an application to determine the maximum message size that, * if presented to gss_wrap with the same conf_req_flag and qop_req * parameters, will result in an output token containing no more than * req_output_size bytes. * * This call is intended for use by applications that communicate over * protocols that impose a maximum message size. It enables the * application to fragment messages prior to applying protection. * * GSS-API implementations are recommended but not required to detect * invalid QOP values when gss_wrap_size_limit() is called. This * routine guarantees only a maximum message size, not the * availability of specific QOP values for message protection. * * Successful completion of this call does not guarantee that gss_wrap * will be able to protect a message of length max_input_size bytes, * since this ability may depend on the availability of system * resources at the time that gss_wrap is called. However, if the * implementation itself imposes an upper limit on the length of * messages that may be processed by gss_wrap, the implementation * should not return a value via max_input_bytes that is greater than * this length. * * Return value: * * `GSS_S_COMPLETE`: Successful completion. * * `GSS_S_NO_CONTEXT`: The referenced context could not be accessed. * * `GSS_S_CONTEXT_EXPIRED`: The context has expired. * * `GSS_S_BAD_QOP`: The specified QOP is not supported by the * mechanism. **/ OM_uint32 gss_wrap_size_limit (OM_uint32 * minor_status, const gss_ctx_id_t context_handle, int conf_req_flag, gss_qop_t qop_req, OM_uint32 req_output_size, OM_uint32 * max_input_size) { return GSS_S_FAILURE; } /** * gss_export_sec_context: * @minor_status: (Integer, modify) Mechanism specific status code. * @context_handle: (gss_ctx_id_t, modify) Context handle identifying * the context to transfer. * @interprocess_token: (buffer, opaque, modify) Token to be * transferred to target process. Storage associated with this * token must be freed by the application after use with a call to * gss_release_buffer(). * * Provided to support the sharing of work between multiple processes. * This routine will typically be used by the context-acceptor, in an * application where a single process receives incoming connection * requests and accepts security contexts over them, then passes the * established context to one or more other processes for message * exchange. gss_export_sec_context() deactivates the security context * for the calling process and creates an interprocess token which, * when passed to gss_import_sec_context in another process, will * re-activate the context in the second process. Only a single * instantiation of a given context may be active at any one time; a * subsequent attempt by a context exporter to access the exported * security context will fail. * * The implementation may constrain the set of processes by which the * interprocess token may be imported, either as a function of local * security policy, or as a result of implementation decisions. For * example, some implementations may constrain contexts to be passed * only between processes that run under the same account, or which * are part of the same process group. * * The interprocess token may contain security-sensitive information * (for example cryptographic keys). While mechanisms are encouraged * to either avoid placing such sensitive information within * interprocess tokens, or to encrypt the token before returning it to * the application, in a typical object-library GSS-API implementation * this may not be possible. Thus the application must take care to * protect the interprocess token, and ensure that any process to * which the token is transferred is trustworthy. * * If creation of the interprocess token is successful, the * implementation shall deallocate all process-wide resources * associated with the security context, and set the context_handle to * GSS_C_NO_CONTEXT. In the event of an error that makes it * impossible to complete the export of the security context, the * implementation must not return an interprocess token, and should * strive to leave the security context referenced by the * context_handle parameter untouched. If this is impossible, it is * permissible for the implementation to delete the security context, * providing it also sets the context_handle parameter to * GSS_C_NO_CONTEXT. * * Return value: * * `GSS_S_COMPLETE`: Successful completion. * * `GSS_S_CONTEXT_EXPIRED`: The context has expired. * * `GSS_S_NO_CONTEXT`: The context was invalid. * * `GSS_S_UNAVAILABLE`: The operation is not supported. **/ OM_uint32 gss_export_sec_context (OM_uint32 * minor_status, gss_ctx_id_t * context_handle, gss_buffer_t interprocess_token) { return GSS_S_UNAVAILABLE; } /** * gss_import_sec_context: * @minor_status: (Integer, modify) Mechanism specific status code. * @interprocess_token: (buffer, opaque, modify) Token received from * exporting process * @context_handle: (gss_ctx_id_t, modify) Context handle of newly * reactivated context. Resources associated with this context * handle must be released by the application after use with a call * to gss_delete_sec_context(). * * Allows a process to import a security context established by * another process. A given interprocess token may be imported only * once. See gss_export_sec_context. * * Return value: * * `GSS_S_COMPLETE`: Successful completion. * * `GSS_S_NO_CONTEXT`: The token did not contain a valid context * reference. * * `GSS_S_DEFECTIVE_TOKEN`: The token was invalid. * * `GSS_S_UNAVAILABLE`: The operation is unavailable. * * `GSS_S_UNAUTHORIZED`: Local policy prevents the import of this * context by the current process. **/ OM_uint32 gss_import_sec_context (OM_uint32 * minor_status, const gss_buffer_t interprocess_token, gss_ctx_id_t * context_handle) { return GSS_S_UNAVAILABLE; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gss-1.0.3/lib/saslname.c����������������������������������������������������������������������������0000664�0000000�0000000�00000011373�12415506237�011727� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* saslname.c --- Implementation of the SASL GS2 interfaces. * Copyright (C) 2010-2014 Simon Josefsson * * This file is part of the Generic Security Service (GSS). * * GSS 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. * * GSS 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 GSS; if not, see http://www.gnu.org/licenses or write to * the Free Software Foundation, Inc., 51 Franklin Street, Fifth * Floor, Boston, MA 02110-1301, USA. * */ #include "internal.h" /* _gss_find_mech* */ #include "meta.h" static OM_uint32 dup_data (OM_uint32 * minor_status, gss_buffer_t out, const char *str, int translate) { if (!out) return GSS_S_COMPLETE; if (translate) out->value = strdup (_(str)); else out->value = strdup (str); if (!out->value) { if (minor_status) *minor_status = ENOMEM; return GSS_S_FAILURE; } out->length = strlen (str); return GSS_S_COMPLETE; } /** * gss_inquire_saslname_for_mech: * @minor_status: (Integer, modify) Mechanism specific status code. * @desired_mech: (OID, read) Identifies the GSS-API mechanism to query. * @sasl_mech_name: (buffer, character-string, modify, optional) * Buffer to receive SASL mechanism name. The application must free * storage associated with this name after use with a call to * gss_release_buffer(). * @mech_name: (buffer, character-string, modify, optional) Buffer to * receive human readable mechanism name. The application must free * storage associated with this name after use with a call to * gss_release_buffer(). * @mech_description: (buffer, character-string, modify, optional) * Buffer to receive description of mechanism. The application must * free storage associated with this name after use with a call to * gss_release_buffer(). * * Output the SASL mechanism name of a GSS-API mechanism. It also * returns a name and description of the mechanism in a user friendly * form. * * Returns: * * `GSS_S_COMPLETE`: Successful completion. * * `GSS_S_BAD_MECH`: The @desired_mech OID is unsupported. **/ OM_uint32 gss_inquire_saslname_for_mech (OM_uint32 * minor_status, const gss_OID desired_mech, gss_buffer_t sasl_mech_name, gss_buffer_t mech_name, gss_buffer_t mech_description) { _gss_mech_api_t m; if (!desired_mech) { if (minor_status) *minor_status = 0; return GSS_S_CALL_INACCESSIBLE_READ; } m = _gss_find_mech_no_default (desired_mech); if (!m) { if (minor_status) *minor_status = 0; return GSS_S_BAD_MECH; } bindtextdomain (PACKAGE PO_SUFFIX, LOCALEDIR); if (dup_data (minor_status, sasl_mech_name, m->sasl_name, 0) != GSS_S_COMPLETE) return GSS_S_FAILURE; if (dup_data (minor_status, mech_name, m->mech_name, 0) != GSS_S_COMPLETE) { if (sasl_mech_name) free (sasl_mech_name->value); return GSS_S_FAILURE; } if (dup_data (minor_status, mech_description, m->mech_description, 1) != GSS_S_COMPLETE) { if (sasl_mech_name) free (sasl_mech_name->value); if (mech_name) free (mech_name->value); return GSS_S_FAILURE; } return GSS_S_COMPLETE; } /** * gss_inquire_mech_for_saslname: * @minor_status: (Integer, modify) Mechanism specific status code. * @sasl_mech_name: (buffer, character-string, read) Buffer with SASL * mechanism name. * @mech_type: (OID, modify, optional) Actual mechanism used. The OID * returned via this parameter will be a pointer to static storage * that should be treated as read-only; In particular the * application should not attempt to free it. Specify NULL if not * required. * * Output GSS-API mechanism OID of mechanism associated with given * @sasl_mech_name. * * Returns: * * `GSS_S_COMPLETE`: Successful completion. * * `GSS_S_BAD_MECH`: There is no GSS-API mechanism known as @sasl_mech_name. **/ OM_uint32 gss_inquire_mech_for_saslname (OM_uint32 * minor_status, const gss_buffer_t sasl_mech_name, gss_OID * mech_type) { _gss_mech_api_t m; if (!sasl_mech_name) { if (minor_status) *minor_status = 0; return GSS_S_CALL_INACCESSIBLE_READ; } m = _gss_find_mech_by_saslname (sasl_mech_name); if (!m) { if (minor_status) *minor_status = 0; return GSS_S_BAD_MECH; } if (mech_type) *mech_type = m->mech; return GSS_S_COMPLETE; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gss-1.0.3/lib/internal.h����������������������������������������������������������������������������0000664�0000000�0000000�00000004013�12415506237�011736� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* internal.h --- Internal header file for GSS. * Copyright (C) 2003-2014 Simon Josefsson * * This file is part of the Generic Security Service (GSS). * * GSS 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. * * GSS 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 GSS; if not, see http://www.gnu.org/licenses or write to * the Free Software Foundation, Inc., 51 Franklin Street, Fifth * Floor, Boston, MA 02110-1301, USA. * */ #ifndef _INTERNAL_H #define _INTERNAL_H #include "config.h" #include <stdio.h> #include <stdlib.h> #include <stdarg.h> #include <ctype.h> #include <string.h> #include <time.h> #include <errno.h> /* Get i18n. */ #include <gettext.h> #define _(String) dgettext (PACKAGE PO_SUFFIX, String) #define gettext_noop(String) String #define N_(String) gettext_noop (String) /* Get specification. */ #include <gss.h> typedef struct gss_name_struct { size_t length; char *value; gss_OID type; } gss_name_desc; typedef struct gss_cred_id_struct { gss_OID mech; #ifdef USE_KERBEROS5 struct _gss_krb5_cred_struct *krb5; #endif } gss_cred_id_desc; typedef struct gss_ctx_id_struct { gss_OID mech; #ifdef USE_KERBEROS5 struct _gss_krb5_ctx_struct *krb5; #endif } gss_ctx_id_desc; /* asn1.c */ extern OM_uint32 _gss_encapsulate_token_prefix (const char *prefix, size_t prefixlen, const char *in, size_t inlen, const char *oid, OM_uint32 oidlen, void **out, size_t * outlen); extern int _gss_decapsulate_token (const char *in, size_t inlen, char **oid, size_t * oidlen, char **out, size_t * outlen); #endif /* _INTERNAL_H */ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gss-1.0.3/lib/libgss.map����������������������������������������������������������������������������0000664�0000000�0000000�00000005523�12415506237�011742� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright (C) 2009-2014 Simon Josefsson # # This file is part of the Generic Security Service (GSS). # # GSS 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. # # GSS 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 GSS; if not, see http://www.gnu.org/licenses or write to # the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, # Boston, MA 02110-1301, USA. GSS_1.0.0 { global: # Standard interfaces RFC 2744: GSS_C_NT_ANONYMOUS; GSS_C_NT_EXPORT_NAME; GSS_C_NT_HOSTBASED_SERVICE; GSS_C_NT_HOSTBASED_SERVICE_X; GSS_C_NT_MACHINE_UID_NAME; GSS_C_NT_STRING_UID_NAME; GSS_C_NT_USER_NAME; gss_accept_sec_context; gss_acquire_cred; gss_add_cred; gss_add_oid_set_member; gss_canonicalize_name; gss_compare_name; gss_context_time; gss_create_empty_oid_set; gss_delete_sec_context; gss_display_name; gss_display_status; gss_duplicate_name; gss_export_name; gss_export_sec_context; gss_get_mic; gss_import_name; gss_import_sec_context; gss_indicate_mechs; gss_init_sec_context; gss_inquire_context; gss_inquire_cred; gss_inquire_cred_by_mech; gss_inquire_mechs_for_name; gss_inquire_names_for_mech; gss_process_context_token; gss_release_buffer; gss_release_cred; gss_release_name; gss_release_oid_set; gss_seal; gss_sign; gss_test_oid_set_member; gss_unseal; gss_unwrap; gss_verify; gss_verify_mic; gss_wrap; gss_wrap_size_limit; # SASL GS2 interfaces RFC 5801: gss_inquire_mech_for_saslname; gss_inquire_saslname_for_mech; # GNU GSS extensions: GSS_C_NT_ANONYMOUS_static; GSS_C_NT_EXPORT_NAME_static; GSS_C_NT_HOSTBASED_SERVICE_X_static; GSS_C_NT_HOSTBASED_SERVICE_static; GSS_C_NT_MACHINE_UID_NAME_static; GSS_C_NT_STRING_UID_NAME_static; GSS_C_NT_USER_NAME_static; gss_check_version; gss_decapsulate_token; gss_encapsulate_token; gss_oid_equal; gss_userok; # Kerberos V5 standard interface: GSS_KRB5_NT_HOSTBASED_SERVICE_NAME; GSS_KRB5_NT_MACHINE_UID_NAME; GSS_KRB5_NT_PRINCIPAL_NAME; GSS_KRB5_NT_STRING_UID_NAME; GSS_KRB5_NT_USER_NAME; # GNU GSS Kerberos V5 extensions: GSS_KRB5; GSS_KRB5_NT_MACHINE_UID_NAME_static; GSS_KRB5_NT_PRINCIPAL_NAME_static; GSS_KRB5_NT_STRING_UID_NAME_static; GSS_KRB5_NT_USER_NAME_static; GSS_KRB5_static; local: *; }; �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������gss-1.0.3/lib/gl/�����������������������������������������������������������������������������������0000755�0000000�0000000�00000000000�12415510376�010432� 5����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������gss-1.0.3/lib/gl/strverscmp.c�����������������������������������������������������������������������0000644�0000000�0000000�00000007457�12415470501�012736� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Compare strings while treating digits characters numerically. Copyright (C) 1997, 2000, 2002, 2004, 2006, 2009-2014 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 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/>. */ #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 �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gss-1.0.3/lib/gl/Makefile.am������������������������������������������������������������������������0000644�0000000�0000000�00000026242�12415470501�012407� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������## DO NOT EDIT! GENERATED AUTOMATICALLY! ## Process this file with automake to produce Makefile.in. # Copyright (C) 2002-2014 Free Software Foundation, Inc. # # 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 3 of the License, or # (at your option) any later version. # # This 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 file. If not, see <http://www.gnu.org/licenses/>. # # 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=lib/gl/override --lib=libgnu --source-base=lib/gl --m4-base=lib/gl/m4 --doc-base=doc --tests-base=lib/gl/tests --aux-dir=build-aux --avoid=xalloc-die --no-conditional-dependencies --libtool --macro-prefix=libgl --no-vc-files gettext-h lib-msvc-compat strverscmp AUTOMAKE_OPTIONS = 1.9.6 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 = $(libgl_LTLIBOBJS) libgnu_la_DEPENDENCIES = $(libgl_LTLIBOBJS) EXTRA_libgnu_la_SOURCES = libgnu_la_LDFLAGS = $(AM_LDFLAGS) libgnu_la_LDFLAGS += -no-undefined libgnu_la_LDFLAGS += $(LTLIBINTL) ## begin gnulib module absolute-header # Use this preprocessor expression to decide whether #include_next works. # Do not rely on a 'configure'-time test for this, since the expression # might appear in an installed header, which is used by some other compiler. HAVE_INCLUDE_NEXT = (__GNUC__ || 60000000 <= __DECC_VER) ## end gnulib module absolute-header ## begin gnulib module gettext-h libgnu_la_SOURCES += gettext.h ## end gnulib module gettext-h ## begin gnulib module snippet/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/snippet/arg-nonnull.h, except that it has the copyright header cut # off. arg-nonnull.h: $(top_srcdir)/build-aux/snippet/arg-nonnull.h $(AM_V_GEN)rm -f $@-t $@ && \ sed -n -e '/GL_ARG_NONNULL/,$$p' \ < $(top_srcdir)/build-aux/snippet/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/snippet/arg-nonnull.h ## end gnulib module snippet/arg-nonnull ## begin gnulib module snippet/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/snippet/c++defs.h, except that it has the copyright header cut off. c++defs.h: $(top_srcdir)/build-aux/snippet/c++defs.h $(AM_V_GEN)rm -f $@-t $@ && \ sed -n -e '/_GL_CXXDEFS/,$$p' \ < $(top_srcdir)/build-aux/snippet/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/snippet/c++defs.h ## end gnulib module snippet/c++defs ## begin gnulib module snippet/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/snippet/warn-on-use.h, except that it has the copyright header cut # off. warn-on-use.h: $(top_srcdir)/build-aux/snippet/warn-on-use.h $(AM_V_GEN)rm -f $@-t $@ && \ sed -n -e '/^.ifndef/,$$p' \ < $(top_srcdir)/build-aux/snippet/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/snippet/warn-on-use.h ## end gnulib module snippet/warn-on-use ## 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. if GL_GENERATE_STDDEF_H stddef.h: stddef.in.h $(top_builddir)/config.status $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ sed -e 's|@''GUARD_PREFIX''@|GL_LIBGL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|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 $@ else stddef.h: $(top_builddir)/config.status rm -f $@ endif MOSTLYCLEANFILES += stddef.h stddef.h-t EXTRA_DIST += stddef.in.h ## end gnulib module stddef ## 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 $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ sed -e 's|@''GUARD_PREFIX''@|GL_LIBGL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_STRING_H''@|$(NEXT_STRING_H)|g' \ -e 's/@''GNULIB_FFSL''@/$(GNULIB_FFSL)/g' \ -e 's/@''GNULIB_FFSLL''@/$(GNULIB_FFSLL)/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_STRERROR_R''@/$(GNULIB_STRERROR_R)/g' \ -e 's/@''GNULIB_STRSIGNAL''@/$(GNULIB_STRSIGNAL)/g' \ -e 's/@''GNULIB_STRVERSCMP''@/$(GNULIB_STRVERSCMP)/g' \ < $(srcdir)/string.in.h | \ sed -e 's|@''HAVE_FFSL''@|$(HAVE_FFSL)|g' \ -e 's|@''HAVE_FFSLL''@|$(HAVE_FFSLL)|g' \ -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_STRERROR_R''@|$(HAVE_DECL_STRERROR_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_STRCHRNUL''@|$(REPLACE_STRCHRNUL)|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_STRERROR_R''@|$(REPLACE_STRERROR_R)|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 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; \ : ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gss-1.0.3/lib/gl/dummy.c����������������������������������������������������������������������������0000644�0000000�0000000�00000003254�12415470500�011647� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* A dummy file, to prevent empty libraries from breaking builds. Copyright (C) 2004, 2007, 2009-2014 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/>. */ /* 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 ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gss-1.0.3/lib/gl/stddef.in.h������������������������������������������������������������������������0000644�0000000�0000000�00000005232�12415470501�012376� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* A substitute for POSIX 2008 <stddef.h>, for platforms that have issues. Copyright (C) 2009-2014 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 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 @PRAGMA_COLUMNS@ #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 _@GUARD_PREFIX@_STDDEF_H && defined _GL_STDDEF_WINT_T) # ifdef __need_wint_t # undef _@GUARD_PREFIX@_STDDEF_H # define _GL_STDDEF_WINT_T # endif # @INCLUDE_NEXT@ @NEXT_STDDEF_H@ # endif #else /* Normal invocation convention. */ # ifndef _@GUARD_PREFIX@_STDDEF_H /* The include_next requires a split double-inclusion guard. */ # @INCLUDE_NEXT@ @NEXT_STDDEF_H@ # ifndef _@GUARD_PREFIX@_STDDEF_H # define _@GUARD_PREFIX@_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 /* _@GUARD_PREFIX@_STDDEF_H */ # endif /* _@GUARD_PREFIX@_STDDEF_H */ #endif /* __need_XXX */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gss-1.0.3/lib/gl/string.in.h������������������������������������������������������������������������0000644�0000000�0000000�00000116461�12415470501�012442� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* A GNU-like <string.h>. Copyright (C) 1995-1996, 2001-2014 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/>. */ #ifndef _@GUARD_PREFIX@_STRING_H #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ /* The include_next requires a split double-inclusion guard. */ #@INCLUDE_NEXT@ @NEXT_STRING_H@ #ifndef _@GUARD_PREFIX@_STRING_H #define _@GUARD_PREFIX@_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 /* The __attribute__ feature is available in gcc versions 2.5 and later. The attribute __pure__ was added in gcc 2.96. */ #if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) # define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__)) #else # define _GL_ATTRIBUTE_PURE /* empty */ #endif /* NetBSD 5.0 declares strsignal in <unistd.h>, not in <string.h>. */ /* But in any case avoid namespace pollution on glibc systems. */ #if (@GNULIB_STRSIGNAL@ || defined GNULIB_POSIXCHECK) && defined __NetBSD__ \ && ! defined __GLIBC__ # 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. */ /* Find the index of the least-significant set bit. */ #if @GNULIB_FFSL@ # if !@HAVE_FFSL@ _GL_FUNCDECL_SYS (ffsl, int, (long int i)); # endif _GL_CXXALIAS_SYS (ffsl, int, (long int i)); _GL_CXXALIASWARN (ffsl); #elif defined GNULIB_POSIXCHECK # undef ffsl # if HAVE_RAW_DECL_FFSL _GL_WARN_ON_USE (ffsl, "ffsl is not portable - use the ffsl module"); # endif #endif /* Find the index of the least-significant set bit. */ #if @GNULIB_FFSLL@ # if !@HAVE_FFSLL@ _GL_FUNCDECL_SYS (ffsll, int, (long long int i)); # endif _GL_CXXALIAS_SYS (ffsll, int, (long long int i)); _GL_CXXALIASWARN (ffsll); #elif defined GNULIB_POSIXCHECK # undef ffsll # if HAVE_RAW_DECL_FFSLL _GL_WARN_ON_USE (ffsll, "ffsll is not portable - use the ffsll module"); # endif #endif /* 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) _GL_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) _GL_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) && !defined __UCLIBC__) \ && (__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) _GL_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) _GL_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) _GL_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) && !defined __UCLIBC__) \ && (__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) _GL_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) && !defined __UCLIBC__) \ && (__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) # undef stpncpy # 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 @REPLACE_STRCHRNUL@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define strchrnul rpl_strchrnul # endif _GL_FUNCDECL_RPL (strchrnul, char *, (const char *__s, int __c_in) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (strchrnul, char *, (const char *str, int ch)); # else # if ! @HAVE_STRCHRNUL@ _GL_FUNCDECL_SYS (strchrnul, char *, (char const *__s, int __c_in) _GL_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)); # endif # if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ && (__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 defined __cplusplus && defined GNULIB_NAMESPACE && defined strdup /* strdup exists as a function and as a macro. Get rid of the macro. */ # undef strdup # endif # 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) _GL_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) _GL_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) _GL_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) && !defined __UCLIBC__) \ && (__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) _GL_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) && !defined __UCLIBC__) \ && (__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) _GL_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) _GL_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) && !defined __UCLIBC__) \ && (__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_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (mbslen, size_t, (const char *string)); # else _GL_FUNCDECL_SYS (mbslen, size_t, (const char *string) _GL_ATTRIBUTE_PURE _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_ATTRIBUTE_PURE _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_ATTRIBUTE_PURE _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_ATTRIBUTE_PURE _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 || defined __INTERIX # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define mbsrchr rpl_mbsrchr /* avoid collision with system function */ # endif _GL_FUNCDECL_RPL (mbsrchr, char *, (const char *string, int c) _GL_ATTRIBUTE_PURE _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_ATTRIBUTE_PURE _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_ATTRIBUTE_PURE _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_ATTRIBUTE_PURE _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_ATTRIBUTE_PURE _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. If the two match, return a pointer to the first byte after this prefix in STRING. Otherwise, return NULL. Note: This function may, in multibyte locales, return non-NULL 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_ATTRIBUTE_PURE _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_ATTRIBUTE_PURE _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_ATTRIBUTE_PURE _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_ATTRIBUTE_PURE _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_ATTRIBUTE_PURE _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_ATTRIBUTE_PURE _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 /* Map any int, typically from errno, into an error message. Multithread-safe. Uses the POSIX declaration, not the glibc declaration. */ #if @GNULIB_STRERROR_R@ # if @REPLACE_STRERROR_R@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef strerror_r # define strerror_r rpl_strerror_r # endif _GL_FUNCDECL_RPL (strerror_r, int, (int errnum, char *buf, size_t buflen) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (strerror_r, int, (int errnum, char *buf, size_t buflen)); # else # if !@HAVE_DECL_STRERROR_R@ _GL_FUNCDECL_SYS (strerror_r, int, (int errnum, char *buf, size_t buflen) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (strerror_r, int, (int errnum, char *buf, size_t buflen)); # endif # if @HAVE_DECL_STRERROR_R@ _GL_CXXALIASWARN (strerror_r); # endif #elif defined GNULIB_POSIXCHECK # undef strerror_r # if HAVE_RAW_DECL_STRERROR_R _GL_WARN_ON_USE (strerror_r, "strerror_r is unportable - " "use gnulib module strerror_r-posix for portability"); # endif #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_ATTRIBUTE_PURE _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 /* _@GUARD_PREFIX@_STRING_H */ #endif /* _@GUARD_PREFIX@_STRING_H */ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gss-1.0.3/lib/gl/Makefile.in������������������������������������������������������������������������0000644�0000000�0000000�00000137512�12415507621�012427� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Makefile.in generated by automake 1.14.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # Copyright (C) 2002-2014 Free Software Foundation, Inc. # # This file is 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 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 file. If not, see <http://www.gnu.org/licenses/>. # # 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=lib/gl/override --lib=libgnu --source-base=lib/gl --m4-base=lib/gl/m4 --doc-base=doc --tests-base=lib/gl/tests --aux-dir=build-aux --avoid=xalloc-die --no-conditional-dependencies --libtool --macro-prefix=libgl --no-vc-files gettext-h lib-msvc-compat strverscmp VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = lib/gl DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(top_srcdir)/build-aux/depcomp $(noinst_HEADERS) ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/src/gl/m4/base64.m4 \ $(top_srcdir)/src/gl/m4/errno_h.m4 \ $(top_srcdir)/src/gl/m4/error.m4 \ $(top_srcdir)/src/gl/m4/getopt.m4 \ $(top_srcdir)/src/gl/m4/gnulib-comp.m4 \ $(top_srcdir)/src/gl/m4/memchr.m4 \ $(top_srcdir)/src/gl/m4/mmap-anon.m4 \ $(top_srcdir)/src/gl/m4/msvc-inval.m4 \ $(top_srcdir)/src/gl/m4/msvc-nothrow.m4 \ $(top_srcdir)/src/gl/m4/nocrash.m4 \ $(top_srcdir)/src/gl/m4/off_t.m4 \ $(top_srcdir)/src/gl/m4/ssize_t.m4 \ $(top_srcdir)/src/gl/m4/stdarg.m4 \ $(top_srcdir)/src/gl/m4/stdbool.m4 \ $(top_srcdir)/src/gl/m4/stdio_h.m4 \ $(top_srcdir)/src/gl/m4/strerror.m4 \ $(top_srcdir)/src/gl/m4/sys_socket_h.m4 \ $(top_srcdir)/src/gl/m4/sys_types_h.m4 \ $(top_srcdir)/src/gl/m4/unistd_h.m4 \ $(top_srcdir)/src/gl/m4/version-etc.m4 \ $(top_srcdir)/lib/gl/m4/absolute-header.m4 \ $(top_srcdir)/lib/gl/m4/extensions.m4 \ $(top_srcdir)/lib/gl/m4/gnulib-comp.m4 \ $(top_srcdir)/lib/gl/m4/include_next.m4 \ $(top_srcdir)/lib/gl/m4/ld-output-def.m4 \ $(top_srcdir)/lib/gl/m4/stddef_h.m4 \ $(top_srcdir)/lib/gl/m4/string_h.m4 \ $(top_srcdir)/lib/gl/m4/strverscmp.m4 \ $(top_srcdir)/lib/gl/m4/warn-on-use.m4 \ $(top_srcdir)/gl/m4/00gnulib.m4 \ $(top_srcdir)/gl/m4/autobuild.m4 \ $(top_srcdir)/gl/m4/gnulib-common.m4 \ $(top_srcdir)/gl/m4/gnulib-comp.m4 \ $(top_srcdir)/gl/m4/ld-version-script.m4 \ $(top_srcdir)/gl/m4/manywarnings.m4 \ $(top_srcdir)/gl/m4/valgrind-tests.m4 \ $(top_srcdir)/gl/m4/warnings.m4 \ $(top_srcdir)/m4/extern-inline.m4 $(top_srcdir)/m4/gettext.m4 \ $(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \ $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.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/nls.m4 \ $(top_srcdir)/m4/pkg.m4 $(top_srcdir)/m4/po-suffix.m4 \ $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \ $(top_srcdir)/m4/wchar_t.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) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = libgnu_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(libgnu_la_LDFLAGS) $(LDFLAGS) -o $@ AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = 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) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libgnu_la_SOURCES) $(EXTRA_libgnu_la_SOURCES) DIST_SOURCES = $(libgnu_la_SOURCES) $(EXTRA_libgnu_la_SOURCES) RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac HEADERS = $(noinst_HEADERS) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ distdir am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(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@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ ARFLAGS = @ARFLAGS@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CONFIG_INCLUDE = @CONFIG_INCLUDE@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DLL_VERSION = @DLL_VERSION@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EMULTIHOP_HIDDEN = @EMULTIHOP_HIDDEN@ EMULTIHOP_VALUE = @EMULTIHOP_VALUE@ ENOLINK_HIDDEN = @ENOLINK_HIDDEN@ ENOLINK_VALUE = @ENOLINK_VALUE@ EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@ EOVERFLOW_VALUE = @EOVERFLOW_VALUE@ ERRNO_H = @ERRNO_H@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GETOPT_H = @GETOPT_H@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GNULIB_CHDIR = @GNULIB_CHDIR@ GNULIB_CHOWN = @GNULIB_CHOWN@ GNULIB_CLOSE = @GNULIB_CLOSE@ GNULIB_DPRINTF = @GNULIB_DPRINTF@ GNULIB_DUP = @GNULIB_DUP@ GNULIB_DUP2 = @GNULIB_DUP2@ GNULIB_DUP3 = @GNULIB_DUP3@ GNULIB_ENVIRON = @GNULIB_ENVIRON@ GNULIB_EUIDACCESS = @GNULIB_EUIDACCESS@ GNULIB_FACCESSAT = @GNULIB_FACCESSAT@ GNULIB_FCHDIR = @GNULIB_FCHDIR@ GNULIB_FCHOWNAT = @GNULIB_FCHOWNAT@ GNULIB_FCLOSE = @GNULIB_FCLOSE@ GNULIB_FDATASYNC = @GNULIB_FDATASYNC@ GNULIB_FDOPEN = @GNULIB_FDOPEN@ GNULIB_FFLUSH = @GNULIB_FFLUSH@ GNULIB_FFSL = @GNULIB_FFSL@ GNULIB_FFSLL = @GNULIB_FFSLL@ GNULIB_FGETC = @GNULIB_FGETC@ GNULIB_FGETS = @GNULIB_FGETS@ GNULIB_FOPEN = @GNULIB_FOPEN@ GNULIB_FPRINTF = @GNULIB_FPRINTF@ GNULIB_FPRINTF_POSIX = @GNULIB_FPRINTF_POSIX@ GNULIB_FPURGE = @GNULIB_FPURGE@ GNULIB_FPUTC = @GNULIB_FPUTC@ GNULIB_FPUTS = @GNULIB_FPUTS@ GNULIB_FREAD = @GNULIB_FREAD@ GNULIB_FREOPEN = @GNULIB_FREOPEN@ GNULIB_FSCANF = @GNULIB_FSCANF@ GNULIB_FSEEK = @GNULIB_FSEEK@ GNULIB_FSEEKO = @GNULIB_FSEEKO@ GNULIB_FSYNC = @GNULIB_FSYNC@ GNULIB_FTELL = @GNULIB_FTELL@ GNULIB_FTELLO = @GNULIB_FTELLO@ GNULIB_FTRUNCATE = @GNULIB_FTRUNCATE@ GNULIB_FWRITE = @GNULIB_FWRITE@ GNULIB_GETC = @GNULIB_GETC@ GNULIB_GETCHAR = @GNULIB_GETCHAR@ GNULIB_GETCWD = @GNULIB_GETCWD@ GNULIB_GETDELIM = @GNULIB_GETDELIM@ GNULIB_GETDOMAINNAME = @GNULIB_GETDOMAINNAME@ GNULIB_GETDTABLESIZE = @GNULIB_GETDTABLESIZE@ GNULIB_GETGROUPS = @GNULIB_GETGROUPS@ GNULIB_GETHOSTNAME = @GNULIB_GETHOSTNAME@ GNULIB_GETLINE = @GNULIB_GETLINE@ GNULIB_GETLOGIN = @GNULIB_GETLOGIN@ GNULIB_GETLOGIN_R = @GNULIB_GETLOGIN_R@ GNULIB_GETPAGESIZE = @GNULIB_GETPAGESIZE@ GNULIB_GETUSERSHELL = @GNULIB_GETUSERSHELL@ GNULIB_GL_SRCGL_UNISTD_H_GETOPT = @GNULIB_GL_SRCGL_UNISTD_H_GETOPT@ GNULIB_GROUP_MEMBER = @GNULIB_GROUP_MEMBER@ GNULIB_ISATTY = @GNULIB_ISATTY@ GNULIB_LCHOWN = @GNULIB_LCHOWN@ GNULIB_LINK = @GNULIB_LINK@ GNULIB_LINKAT = @GNULIB_LINKAT@ GNULIB_LSEEK = @GNULIB_LSEEK@ GNULIB_MBSCASECMP = @GNULIB_MBSCASECMP@ GNULIB_MBSCASESTR = @GNULIB_MBSCASESTR@ GNULIB_MBSCHR = @GNULIB_MBSCHR@ GNULIB_MBSCSPN = @GNULIB_MBSCSPN@ GNULIB_MBSLEN = @GNULIB_MBSLEN@ GNULIB_MBSNCASECMP = @GNULIB_MBSNCASECMP@ GNULIB_MBSNLEN = @GNULIB_MBSNLEN@ GNULIB_MBSPBRK = @GNULIB_MBSPBRK@ GNULIB_MBSPCASECMP = @GNULIB_MBSPCASECMP@ GNULIB_MBSRCHR = @GNULIB_MBSRCHR@ GNULIB_MBSSEP = @GNULIB_MBSSEP@ GNULIB_MBSSPN = @GNULIB_MBSSPN@ GNULIB_MBSSTR = @GNULIB_MBSSTR@ GNULIB_MBSTOK_R = @GNULIB_MBSTOK_R@ GNULIB_MEMCHR = @GNULIB_MEMCHR@ GNULIB_MEMMEM = @GNULIB_MEMMEM@ GNULIB_MEMPCPY = @GNULIB_MEMPCPY@ GNULIB_MEMRCHR = @GNULIB_MEMRCHR@ GNULIB_OBSTACK_PRINTF = @GNULIB_OBSTACK_PRINTF@ GNULIB_OBSTACK_PRINTF_POSIX = @GNULIB_OBSTACK_PRINTF_POSIX@ GNULIB_PCLOSE = @GNULIB_PCLOSE@ GNULIB_PERROR = @GNULIB_PERROR@ GNULIB_PIPE = @GNULIB_PIPE@ GNULIB_PIPE2 = @GNULIB_PIPE2@ GNULIB_POPEN = @GNULIB_POPEN@ GNULIB_PREAD = @GNULIB_PREAD@ GNULIB_PRINTF = @GNULIB_PRINTF@ GNULIB_PRINTF_POSIX = @GNULIB_PRINTF_POSIX@ GNULIB_PUTC = @GNULIB_PUTC@ GNULIB_PUTCHAR = @GNULIB_PUTCHAR@ GNULIB_PUTS = @GNULIB_PUTS@ GNULIB_PWRITE = @GNULIB_PWRITE@ GNULIB_RAWMEMCHR = @GNULIB_RAWMEMCHR@ GNULIB_READ = @GNULIB_READ@ GNULIB_READLINK = @GNULIB_READLINK@ GNULIB_READLINKAT = @GNULIB_READLINKAT@ GNULIB_REMOVE = @GNULIB_REMOVE@ GNULIB_RENAME = @GNULIB_RENAME@ GNULIB_RENAMEAT = @GNULIB_RENAMEAT@ GNULIB_RMDIR = @GNULIB_RMDIR@ GNULIB_SCANF = @GNULIB_SCANF@ GNULIB_SETHOSTNAME = @GNULIB_SETHOSTNAME@ GNULIB_SLEEP = @GNULIB_SLEEP@ GNULIB_SNPRINTF = @GNULIB_SNPRINTF@ GNULIB_SPRINTF_POSIX = @GNULIB_SPRINTF_POSIX@ GNULIB_STDIO_H_NONBLOCKING = @GNULIB_STDIO_H_NONBLOCKING@ GNULIB_STDIO_H_SIGPIPE = @GNULIB_STDIO_H_SIGPIPE@ GNULIB_STPCPY = @GNULIB_STPCPY@ GNULIB_STPNCPY = @GNULIB_STPNCPY@ GNULIB_STRCASESTR = @GNULIB_STRCASESTR@ GNULIB_STRCHRNUL = @GNULIB_STRCHRNUL@ GNULIB_STRDUP = @GNULIB_STRDUP@ GNULIB_STRERROR = @GNULIB_STRERROR@ GNULIB_STRERROR_R = @GNULIB_STRERROR_R@ GNULIB_STRNCAT = @GNULIB_STRNCAT@ GNULIB_STRNDUP = @GNULIB_STRNDUP@ GNULIB_STRNLEN = @GNULIB_STRNLEN@ GNULIB_STRPBRK = @GNULIB_STRPBRK@ GNULIB_STRSEP = @GNULIB_STRSEP@ GNULIB_STRSIGNAL = @GNULIB_STRSIGNAL@ GNULIB_STRSTR = @GNULIB_STRSTR@ GNULIB_STRTOK_R = @GNULIB_STRTOK_R@ GNULIB_STRVERSCMP = @GNULIB_STRVERSCMP@ GNULIB_SYMLINK = @GNULIB_SYMLINK@ GNULIB_SYMLINKAT = @GNULIB_SYMLINKAT@ GNULIB_TMPFILE = @GNULIB_TMPFILE@ GNULIB_TTYNAME_R = @GNULIB_TTYNAME_R@ GNULIB_UNISTD_H_NONBLOCKING = @GNULIB_UNISTD_H_NONBLOCKING@ GNULIB_UNISTD_H_SIGPIPE = @GNULIB_UNISTD_H_SIGPIPE@ GNULIB_UNLINK = @GNULIB_UNLINK@ GNULIB_UNLINKAT = @GNULIB_UNLINKAT@ GNULIB_USLEEP = @GNULIB_USLEEP@ GNULIB_VASPRINTF = @GNULIB_VASPRINTF@ GNULIB_VDPRINTF = @GNULIB_VDPRINTF@ GNULIB_VFPRINTF = @GNULIB_VFPRINTF@ GNULIB_VFPRINTF_POSIX = @GNULIB_VFPRINTF_POSIX@ GNULIB_VFSCANF = @GNULIB_VFSCANF@ GNULIB_VPRINTF = @GNULIB_VPRINTF@ GNULIB_VPRINTF_POSIX = @GNULIB_VPRINTF_POSIX@ GNULIB_VSCANF = @GNULIB_VSCANF@ GNULIB_VSNPRINTF = @GNULIB_VSNPRINTF@ GNULIB_VSPRINTF_POSIX = @GNULIB_VSPRINTF_POSIX@ GNULIB_WRITE = @GNULIB_WRITE@ GREP = @GREP@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ HAVE_CHOWN = @HAVE_CHOWN@ HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@ HAVE_DECL_FCHDIR = @HAVE_DECL_FCHDIR@ HAVE_DECL_FDATASYNC = @HAVE_DECL_FDATASYNC@ HAVE_DECL_FPURGE = @HAVE_DECL_FPURGE@ HAVE_DECL_FSEEKO = @HAVE_DECL_FSEEKO@ HAVE_DECL_FTELLO = @HAVE_DECL_FTELLO@ HAVE_DECL_GETDELIM = @HAVE_DECL_GETDELIM@ HAVE_DECL_GETDOMAINNAME = @HAVE_DECL_GETDOMAINNAME@ HAVE_DECL_GETLINE = @HAVE_DECL_GETLINE@ HAVE_DECL_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_OBSTACK_PRINTF = @HAVE_DECL_OBSTACK_PRINTF@ HAVE_DECL_SETHOSTNAME = @HAVE_DECL_SETHOSTNAME@ HAVE_DECL_SNPRINTF = @HAVE_DECL_SNPRINTF@ HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@ HAVE_DECL_STRERROR_R = @HAVE_DECL_STRERROR_R@ HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@ HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@ HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@ HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@ HAVE_DECL_TTYNAME_R = @HAVE_DECL_TTYNAME_R@ HAVE_DECL_VSNPRINTF = @HAVE_DECL_VSNPRINTF@ HAVE_DPRINTF = @HAVE_DPRINTF@ HAVE_DUP2 = @HAVE_DUP2@ HAVE_DUP3 = @HAVE_DUP3@ HAVE_EUIDACCESS = @HAVE_EUIDACCESS@ HAVE_FACCESSAT = @HAVE_FACCESSAT@ HAVE_FCHDIR = @HAVE_FCHDIR@ HAVE_FCHOWNAT = @HAVE_FCHOWNAT@ HAVE_FDATASYNC = @HAVE_FDATASYNC@ HAVE_FFSL = @HAVE_FFSL@ HAVE_FFSLL = @HAVE_FFSLL@ HAVE_FSEEKO = @HAVE_FSEEKO@ HAVE_FSYNC = @HAVE_FSYNC@ HAVE_FTELLO = @HAVE_FTELLO@ HAVE_FTRUNCATE = @HAVE_FTRUNCATE@ 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_GROUP_MEMBER = @HAVE_GROUP_MEMBER@ HAVE_LCHOWN = @HAVE_LCHOWN@ HAVE_LIBSHISHI = @HAVE_LIBSHISHI@ HAVE_LINK = @HAVE_LINK@ HAVE_LINKAT = @HAVE_LINKAT@ HAVE_MBSLEN = @HAVE_MBSLEN@ HAVE_MEMCHR = @HAVE_MEMCHR@ HAVE_MEMPCPY = @HAVE_MEMPCPY@ HAVE_MSVC_INVALID_PARAMETER_HANDLER = @HAVE_MSVC_INVALID_PARAMETER_HANDLER@ HAVE_OS_H = @HAVE_OS_H@ HAVE_PCLOSE = @HAVE_PCLOSE@ HAVE_PIPE = @HAVE_PIPE@ HAVE_PIPE2 = @HAVE_PIPE2@ HAVE_POPEN = @HAVE_POPEN@ HAVE_PREAD = @HAVE_PREAD@ HAVE_PWRITE = @HAVE_PWRITE@ HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@ HAVE_READLINK = @HAVE_READLINK@ HAVE_READLINKAT = @HAVE_READLINKAT@ HAVE_RENAMEAT = @HAVE_RENAMEAT@ HAVE_SETHOSTNAME = @HAVE_SETHOSTNAME@ HAVE_SLEEP = @HAVE_SLEEP@ 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_STRVERSCMP = @HAVE_STRVERSCMP@ HAVE_SYMLINK = @HAVE_SYMLINK@ HAVE_SYMLINKAT = @HAVE_SYMLINKAT@ HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@ HAVE_UNISTD_H = @HAVE_UNISTD_H@ HAVE_UNLINKAT = @HAVE_UNLINKAT@ HAVE_USLEEP = @HAVE_USLEEP@ HAVE_VASPRINTF = @HAVE_VASPRINTF@ HAVE_VDPRINTF = @HAVE_VDPRINTF@ HAVE_WCHAR_T = @HAVE_WCHAR_T@ HAVE_WINSOCK2_H = @HAVE_WINSOCK2_H@ HAVE__BOOL = @HAVE__BOOL@ HELP2MAN = @HELP2MAN@ HTML_DIR = @HTML_DIR@ INCLUDE_GSS_KRB5 = @INCLUDE_GSS_KRB5@ INCLUDE_GSS_KRB5_EXT = @INCLUDE_GSS_KRB5_EXT@ 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@ INTLLIBS = @INTLLIBS@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBSHISHI = @LIBSHISHI@ LIBSHISHI_PREFIX = @LIBSHISHI_PREFIX@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBOBJS = @LTLIBOBJS@ LTLIBSHISHI = @LTLIBSHISHI@ LT_AGE = @LT_AGE@ LT_CURRENT = @LT_CURRENT@ LT_REVISION = @LT_REVISION@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = @NEXT_AS_FIRST_DIRECTIVE_ERRNO_H@ NEXT_AS_FIRST_DIRECTIVE_GETOPT_H = @NEXT_AS_FIRST_DIRECTIVE_GETOPT_H@ NEXT_AS_FIRST_DIRECTIVE_STDARG_H = @NEXT_AS_FIRST_DIRECTIVE_STDARG_H@ NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@ NEXT_AS_FIRST_DIRECTIVE_STDIO_H = @NEXT_AS_FIRST_DIRECTIVE_STDIO_H@ NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H@ NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@ NEXT_ERRNO_H = @NEXT_ERRNO_H@ NEXT_GETOPT_H = @NEXT_GETOPT_H@ NEXT_STDARG_H = @NEXT_STDARG_H@ NEXT_STDDEF_H = @NEXT_STDDEF_H@ NEXT_STDIO_H = @NEXT_STDIO_H@ NEXT_STRING_H = @NEXT_STRING_H@ NEXT_SYS_TYPES_H = @NEXT_SYS_TYPES_H@ NEXT_UNISTD_H = @NEXT_UNISTD_H@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ PKG_CONFIG = @PKG_CONFIG@ PMCCABE = @PMCCABE@ POSUB = @POSUB@ PO_SUFFIX = @PO_SUFFIX@ PRAGMA_COLUMNS = @PRAGMA_COLUMNS@ PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@ RANLIB = @RANLIB@ REPLACE_CHOWN = @REPLACE_CHOWN@ REPLACE_CLOSE = @REPLACE_CLOSE@ REPLACE_DPRINTF = @REPLACE_DPRINTF@ REPLACE_DUP = @REPLACE_DUP@ REPLACE_DUP2 = @REPLACE_DUP2@ REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@ REPLACE_FCLOSE = @REPLACE_FCLOSE@ REPLACE_FDOPEN = @REPLACE_FDOPEN@ REPLACE_FFLUSH = @REPLACE_FFLUSH@ REPLACE_FOPEN = @REPLACE_FOPEN@ REPLACE_FPRINTF = @REPLACE_FPRINTF@ REPLACE_FPURGE = @REPLACE_FPURGE@ REPLACE_FREOPEN = @REPLACE_FREOPEN@ REPLACE_FSEEK = @REPLACE_FSEEK@ REPLACE_FSEEKO = @REPLACE_FSEEKO@ REPLACE_FTELL = @REPLACE_FTELL@ REPLACE_FTELLO = @REPLACE_FTELLO@ REPLACE_FTRUNCATE = @REPLACE_FTRUNCATE@ REPLACE_GETCWD = @REPLACE_GETCWD@ REPLACE_GETDELIM = @REPLACE_GETDELIM@ REPLACE_GETDOMAINNAME = @REPLACE_GETDOMAINNAME@ REPLACE_GETDTABLESIZE = @REPLACE_GETDTABLESIZE@ REPLACE_GETGROUPS = @REPLACE_GETGROUPS@ REPLACE_GETLINE = @REPLACE_GETLINE@ REPLACE_GETLOGIN_R = @REPLACE_GETLOGIN_R@ REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@ REPLACE_ISATTY = @REPLACE_ISATTY@ REPLACE_LCHOWN = @REPLACE_LCHOWN@ REPLACE_LINK = @REPLACE_LINK@ REPLACE_LINKAT = @REPLACE_LINKAT@ REPLACE_LSEEK = @REPLACE_LSEEK@ REPLACE_MEMCHR = @REPLACE_MEMCHR@ REPLACE_MEMMEM = @REPLACE_MEMMEM@ REPLACE_NULL = @REPLACE_NULL@ REPLACE_OBSTACK_PRINTF = @REPLACE_OBSTACK_PRINTF@ REPLACE_PERROR = @REPLACE_PERROR@ REPLACE_POPEN = @REPLACE_POPEN@ REPLACE_PREAD = @REPLACE_PREAD@ REPLACE_PRINTF = @REPLACE_PRINTF@ REPLACE_PWRITE = @REPLACE_PWRITE@ REPLACE_READ = @REPLACE_READ@ REPLACE_READLINK = @REPLACE_READLINK@ REPLACE_REMOVE = @REPLACE_REMOVE@ REPLACE_RENAME = @REPLACE_RENAME@ REPLACE_RENAMEAT = @REPLACE_RENAMEAT@ REPLACE_RMDIR = @REPLACE_RMDIR@ REPLACE_SLEEP = @REPLACE_SLEEP@ REPLACE_SNPRINTF = @REPLACE_SNPRINTF@ REPLACE_SPRINTF = @REPLACE_SPRINTF@ REPLACE_STDIO_READ_FUNCS = @REPLACE_STDIO_READ_FUNCS@ REPLACE_STDIO_WRITE_FUNCS = @REPLACE_STDIO_WRITE_FUNCS@ REPLACE_STPNCPY = @REPLACE_STPNCPY@ REPLACE_STRCASESTR = @REPLACE_STRCASESTR@ REPLACE_STRCHRNUL = @REPLACE_STRCHRNUL@ REPLACE_STRDUP = @REPLACE_STRDUP@ REPLACE_STRERROR = @REPLACE_STRERROR@ REPLACE_STRERROR_R = @REPLACE_STRERROR_R@ REPLACE_STRNCAT = @REPLACE_STRNCAT@ REPLACE_STRNDUP = @REPLACE_STRNDUP@ REPLACE_STRNLEN = @REPLACE_STRNLEN@ REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@ REPLACE_STRSTR = @REPLACE_STRSTR@ REPLACE_STRTOK_R = @REPLACE_STRTOK_R@ REPLACE_SYMLINK = @REPLACE_SYMLINK@ REPLACE_TMPFILE = @REPLACE_TMPFILE@ REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@ REPLACE_UNLINK = @REPLACE_UNLINK@ REPLACE_UNLINKAT = @REPLACE_UNLINKAT@ REPLACE_USLEEP = @REPLACE_USLEEP@ REPLACE_VASPRINTF = @REPLACE_VASPRINTF@ REPLACE_VDPRINTF = @REPLACE_VDPRINTF@ REPLACE_VFPRINTF = @REPLACE_VFPRINTF@ REPLACE_VPRINTF = @REPLACE_VPRINTF@ REPLACE_VSNPRINTF = @REPLACE_VSNPRINTF@ REPLACE_VSPRINTF = @REPLACE_VSPRINTF@ REPLACE_WRITE = @REPLACE_WRITE@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STDARG_H = @STDARG_H@ STDBOOL_H = @STDBOOL_H@ STDDEF_H = @STDDEF_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@ USE_NLS = @USE_NLS@ VALGRIND = @VALGRIND@ VERSION = @VERSION@ VERSION_MAJOR = @VERSION_MAJOR@ VERSION_MINOR = @VERSION_MINOR@ VERSION_NUMBER = @VERSION_NUMBER@ VERSION_PATCH = @VERSION_PATCH@ WARN_CFLAGS = @WARN_CFLAGS@ WERROR_CFLAGS = @WERROR_CFLAGS@ WINDOWS_64_BIT_OFF_T = @WINDOWS_64_BIT_OFF_T@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gl_LIBOBJS = @gl_LIBOBJS@ gl_LTLIBOBJS = @gl_LTLIBOBJS@ gltests_LIBOBJS = @gltests_LIBOBJS@ gltests_LTLIBOBJS = @gltests_LTLIBOBJS@ gltests_WITNESS = @gltests_WITNESS@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ libgl_LIBOBJS = @libgl_LIBOBJS@ libgl_LTLIBOBJS = @libgl_LTLIBOBJS@ libgltests_LIBOBJS = @libgltests_LIBOBJS@ libgltests_LTLIBOBJS = @libgltests_LTLIBOBJS@ libgltests_WITNESS = @libgltests_WITNESS@ localedir = @localedir@ localstatedir = @localstatedir@ 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@ srcgl_LIBOBJS = @srcgl_LIBOBJS@ srcgl_LTLIBOBJS = @srcgl_LTLIBOBJS@ srcgltests_LIBOBJS = @srcgltests_LIBOBJS@ srcgltests_LTLIBOBJS = @srcgltests_LTLIBOBJS@ srcgltests_WITNESS = @srcgltests_WITNESS@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AUTOMAKE_OPTIONS = 1.9.6 gnits SUBDIRS = noinst_HEADERS = noinst_LIBRARIES = noinst_LTLIBRARIES = libgnu.la EXTRA_DIST = m4/gnulib-cache.m4 \ $(top_srcdir)/build-aux/snippet/arg-nonnull.h \ $(top_srcdir)/build-aux/snippet/c++defs.h \ $(top_srcdir)/build-aux/snippet/warn-on-use.h stddef.in.h \ string.in.h strverscmp.c # 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 warn-on-use.h $(STDDEF_H) \ string.h SUFFIXES = MOSTLYCLEANFILES = core *.stackdump arg-nonnull.h arg-nonnull.h-t \ c++defs.h c++defs.h-t warn-on-use.h warn-on-use.h-t stddef.h \ stddef.h-t string.h string.h-t MOSTLYCLEANDIRS = CLEANFILES = DISTCLEANFILES = MAINTAINERCLEANFILES = AM_CPPFLAGS = AM_CFLAGS = libgnu_la_SOURCES = gettext.h dummy.c libgnu_la_LIBADD = $(libgl_LTLIBOBJS) libgnu_la_DEPENDENCIES = $(libgl_LTLIBOBJS) EXTRA_libgnu_la_SOURCES = strverscmp.c libgnu_la_LDFLAGS = $(AM_LDFLAGS) -no-undefined $(LTLIBINTL) # Use this preprocessor expression to decide whether #include_next works. # Do not rely on a 'configure'-time test for this, since the expression # might appear in an installed header, which is used by some other compiler. HAVE_INCLUDE_NEXT = (__GNUC__ || 60000000 <= __DECC_VER) 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/gl/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnits lib/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)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libgnu.la: $(libgnu_la_OBJECTS) $(libgnu_la_DEPENDENCIES) $(EXTRA_libgnu_la_DEPENDENCIES) $(AM_V_CCLD)$(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@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(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. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done 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: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: -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: $(am__recursive_targets) all check install install-am \ install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ check-am clean clean-generic clean-libtool \ clean-noinstLIBRARIES clean-noinstLTLIBRARIES cscopelist-am \ ctags ctags-am 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-am uninstall uninstall-am # The arg-nonnull.h that gets inserted into generated .h files is the same as # build-aux/snippet/arg-nonnull.h, except that it has the copyright header cut # off. arg-nonnull.h: $(top_srcdir)/build-aux/snippet/arg-nonnull.h $(AM_V_GEN)rm -f $@-t $@ && \ sed -n -e '/GL_ARG_NONNULL/,$$p' \ < $(top_srcdir)/build-aux/snippet/arg-nonnull.h \ > $@-t && \ mv $@-t $@ # The c++defs.h that gets inserted into generated .h files is the same as # build-aux/snippet/c++defs.h, except that it has the copyright header cut off. c++defs.h: $(top_srcdir)/build-aux/snippet/c++defs.h $(AM_V_GEN)rm -f $@-t $@ && \ sed -n -e '/_GL_CXXDEFS/,$$p' \ < $(top_srcdir)/build-aux/snippet/c++defs.h \ > $@-t && \ mv $@-t $@ # The warn-on-use.h that gets inserted into generated .h files is the same as # build-aux/snippet/warn-on-use.h, except that it has the copyright header cut # off. warn-on-use.h: $(top_srcdir)/build-aux/snippet/warn-on-use.h $(AM_V_GEN)rm -f $@-t $@ && \ sed -n -e '/^.ifndef/,$$p' \ < $(top_srcdir)/build-aux/snippet/warn-on-use.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. @GL_GENERATE_STDDEF_H_TRUE@stddef.h: stddef.in.h $(top_builddir)/config.status @GL_GENERATE_STDDEF_H_TRUE@ $(AM_V_GEN)rm -f $@-t $@ && \ @GL_GENERATE_STDDEF_H_TRUE@ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ @GL_GENERATE_STDDEF_H_TRUE@ sed -e 's|@''GUARD_PREFIX''@|GL_LIBGL|g' \ @GL_GENERATE_STDDEF_H_TRUE@ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ @GL_GENERATE_STDDEF_H_TRUE@ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ @GL_GENERATE_STDDEF_H_TRUE@ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ @GL_GENERATE_STDDEF_H_TRUE@ -e 's|@''NEXT_STDDEF_H''@|$(NEXT_STDDEF_H)|g' \ @GL_GENERATE_STDDEF_H_TRUE@ -e 's|@''HAVE_WCHAR_T''@|$(HAVE_WCHAR_T)|g' \ @GL_GENERATE_STDDEF_H_TRUE@ -e 's|@''REPLACE_NULL''@|$(REPLACE_NULL)|g' \ @GL_GENERATE_STDDEF_H_TRUE@ < $(srcdir)/stddef.in.h; \ @GL_GENERATE_STDDEF_H_TRUE@ } > $@-t && \ @GL_GENERATE_STDDEF_H_TRUE@ mv $@-t $@ @GL_GENERATE_STDDEF_H_FALSE@stddef.h: $(top_builddir)/config.status @GL_GENERATE_STDDEF_H_FALSE@ rm -f $@ # 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 $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ sed -e 's|@''GUARD_PREFIX''@|GL_LIBGL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_STRING_H''@|$(NEXT_STRING_H)|g' \ -e 's/@''GNULIB_FFSL''@/$(GNULIB_FFSL)/g' \ -e 's/@''GNULIB_FFSLL''@/$(GNULIB_FFSLL)/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_STRERROR_R''@/$(GNULIB_STRERROR_R)/g' \ -e 's/@''GNULIB_STRSIGNAL''@/$(GNULIB_STRSIGNAL)/g' \ -e 's/@''GNULIB_STRVERSCMP''@/$(GNULIB_STRVERSCMP)/g' \ < $(srcdir)/string.in.h | \ sed -e 's|@''HAVE_FFSL''@|$(HAVE_FFSL)|g' \ -e 's|@''HAVE_FFSLL''@|$(HAVE_FFSLL)|g' \ -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_STRERROR_R''@|$(HAVE_DECL_STRERROR_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_STRCHRNUL''@|$(REPLACE_STRCHRNUL)|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_STRERROR_R''@|$(REPLACE_STRERROR_R)|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 $@ 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: ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gss-1.0.3/lib/gl/gettext.h��������������������������������������������������������������������������0000644�0000000�0000000�00000010333�12415470501�012202� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Convenience header for conditional use of GNU <libintl.h>. Copyright (C) 1995-1998, 2000-2002, 2004-2006, 2009-2014 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/>. */ #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 && !defined __UCLIBC__) || _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 /* Prefer gnulib's setlocale override over libintl's setlocale override. */ #ifdef GNULIB_defined_setlocale # undef setlocale # define setlocale rpl_setlocale #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 #endif /* _LIBGETTEXT_H */ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gss-1.0.3/lib/gl/m4/��������������������������������������������������������������������������������0000755�0000000�0000000�00000000000�12415510376�010752� 5����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������gss-1.0.3/lib/gl/m4/warn-on-use.m4������������������������������������������������������������������0000644�0000000�0000000�00000004154�12415470501�013306� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# warn-on-use.m4 serial 5 dnl Copyright (C) 2010-2014 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. # # It is generally safe to assume declarations for functions declared # in the intersection of C89 and C11 (such as printf) 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 dnl FIXME: gl_Symbol must be used unquoted until we can assume dnl autoconf 2.64 or newer. 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 ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gss-1.0.3/lib/gl/m4/include_next.m4�����������������������������������������������������������������0000644�0000000�0000000�00000020773�12415470501�013621� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# include_next.m4 serial 23 dnl Copyright (C) 2006-2014 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__'. dnl dnl PRAGMA_COLUMNS can be used in files that override system header files, so dnl as to avoid compilation errors on HP NonStop systems when the gnulib file dnl is included by a system header file that does a "#pragma COLUMNS 80" (which dnl has the effect of truncating the lines of that file and all files that it dnl includes to 80 columns) and the gnulib file has lines longer than 80 dnl columns. 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" dnl We intentionally avoid using AC_LANG_SOURCE here. AC_COMPILE_IFELSE([AC_LANG_DEFINES_PROVIDED[#include <conftest.h>]], [gl_cv_have_include_next=yes], [CPPFLAGS="$gl_save_CPPFLAGS -Iconftestd1a -Iconftestd2" AC_COMPILE_IFELSE([AC_LANG_DEFINES_PROVIDED[#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]) AC_CACHE_CHECK([whether system header files limit the line length], [gl_cv_pragma_columns], [dnl HP NonStop systems, which define __TANDEM, have this misfeature. AC_EGREP_CPP([choke me], [ #ifdef __TANDEM choke me #endif ], [gl_cv_pragma_columns=yes], [gl_cv_pragma_columns=no]) ]) if test $gl_cv_pragma_columns = yes; then PRAGMA_COLUMNS="#pragma COLUMNS 10000" else PRAGMA_COLUMNS= fi AC_SUBST([PRAGMA_COLUMNS]) ]) # 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. # # This macro also checks whether each header exists, by invoking # AC_CHECK_HEADERS_ONCE or AC_CHECK_HEADERS on each argument. AC_DEFUN([gl_CHECK_NEXT_HEADERS], [ gl_NEXT_HEADERS_INTERNAL([$1], [check]) ]) # gl_NEXT_HEADERS(HEADER1 HEADER2 ...) # ------------------------------------ # Like gl_CHECK_NEXT_HEADERS, except do not check whether the headers exist. # This is suitable for headers like <stddef.h> that are standardized by C89 # and therefore can be assumed to exist. AC_DEFUN([gl_NEXT_HEADERS], [ gl_NEXT_HEADERS_INTERNAL([$1], [assume]) ]) # The guts of gl_CHECK_NEXT_HEADERS and gl_NEXT_HEADERS. AC_DEFUN([gl_NEXT_HEADERS_INTERNAL], [ AC_REQUIRE([gl_INCLUDE_NEXT]) AC_REQUIRE([AC_CANONICAL_HOST]) m4_if([$2], [check], [AC_CHECK_HEADERS_ONCE([$1]) ]) dnl FIXME: gl_next_header and gl_header_exists must be used unquoted dnl until we can assume autoconf 2.64 or newer. 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]), [m4_if([$2], [check], [AS_VAR_PUSHDEF([gl_header_exists], [ac_cv_header_]m4_defn([gl_HEADER_NAME])) if test AS_VAR_GET(gl_header_exists) = yes; then AS_VAR_POPDEF([gl_header_exists]) ]) gl_ABSOLUTE_HEADER_ONE(gl_HEADER_NAME) AS_VAR_COPY([gl_header], [gl_cv_absolute_]AS_TR_SH(gl_HEADER_NAME)) AS_VAR_SET(gl_next_header, ['"'$gl_header'"']) m4_if([$2], [check], [else AS_VAR_SET(gl_next_header, ['<'gl_HEADER_NAME'>']) fi ]) ]) 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])]) ]) # Autoconf 2.68 added warnings for our use of AC_COMPILE_IFELSE; # this fallback is safe for all earlier autoconf versions. m4_define_default([AC_LANG_DEFINES_PROVIDED]) �����gss-1.0.3/lib/gl/m4/extensions.m4�������������������������������������������������������������������0000644�0000000�0000000�00000012237�12415470501�013333� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 13 -*- Autoconf -*- # Enable extensions on systems that normally disable them. # Copyright (C) 2003, 2006-2014 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 git # Autoconf. Perhaps we can remove this once we can assume Autoconf # 2.70 or later everywhere, but since 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_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.]) AC_DEFINE([_NETBSD_SOURCE], [1], [Define to 1 to make NetBSD features available. MINIX 3 needs this.]) fi dnl Use a different key than __EXTENSIONS__, as that name broke existing dnl configure.ac when using autoheader 2.62. AH_VERBATIM([USE_SYSTEM_EXTENSIONS], [/* Enable extensions on AIX 3, Interix. */ #ifndef _ALL_SOURCE # undef _ALL_SOURCE #endif /* Enable general extensions on OS X. */ #ifndef _DARWIN_C_SOURCE # undef _DARWIN_C_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 X/Open extensions if necessary. HP-UX 11.11 defines mbstate_t only if _XOPEN_SOURCE is defined to 500, regardless of whether compiling with -Ae or -D_HPUX_SOURCE=1. */ #ifndef _XOPEN_SOURCE # undef _XOPEN_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([_DARWIN_C_SOURCE]) AC_DEFINE([_GNU_SOURCE]) AC_DEFINE([_POSIX_PTHREAD_SEMANTICS]) AC_DEFINE([_TANDEM_SOURCE]) AC_CACHE_CHECK([whether _XOPEN_SOURCE should be defined], [ac_cv_should_define__xopen_source], [ac_cv_should_define__xopen_source=no AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[ #include <wchar.h> mbstate_t x;]])], [], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[ #define _XOPEN_SOURCE 500 #include <wchar.h> mbstate_t x;]])], [ac_cv_should_define__xopen_source=yes])])]) test $ac_cv_should_define__xopen_source = yes && AC_DEFINE([_XOPEN_SOURCE], [500]) ])# 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]) ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gss-1.0.3/lib/gl/m4/absolute-header.m4��������������������������������������������������������������0000644�0000000�0000000�00000010347�12415470500�014177� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# absolute-header.m4 serial 16 dnl Copyright (C) 2006-2014 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 Derek Price. # gl_ABSOLUTE_HEADER(HEADER1 HEADER2 ...) # --------------------------------------- # Find the absolute name of a header file, testing first if the header exists. # If the header were sys/inttypes.h, this macro would define # ABSOLUTE_SYS_INTTYPES_H to the '""' quoted absolute name of sys/inttypes.h # in config.h # (e.g. '#define ABSOLUTE_SYS_INTTYPES_H "///usr/include/sys/inttypes.h"'). # 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_ABSOLUTE_HEADER], [AC_REQUIRE([AC_CANONICAL_HOST]) AC_LANG_PREPROC_REQUIRE()dnl dnl FIXME: gl_absolute_header and ac_header_exists must be used unquoted dnl until we can assume autoconf 2.64 or newer. m4_foreach_w([gl_HEADER_NAME], [$1], [AS_VAR_PUSHDEF([gl_absolute_header], [gl_cv_absolute_]m4_defn([gl_HEADER_NAME]))dnl AC_CACHE_CHECK([absolute name of <]m4_defn([gl_HEADER_NAME])[>], m4_defn([gl_absolute_header]), [AS_VAR_PUSHDEF([ac_header_exists], [ac_cv_header_]m4_defn([gl_HEADER_NAME]))dnl AC_CHECK_HEADERS_ONCE(m4_defn([gl_HEADER_NAME]))dnl if test AS_VAR_GET(ac_header_exists) = yes; then gl_ABSOLUTE_HEADER_ONE(m4_defn([gl_HEADER_NAME])) fi AS_VAR_POPDEF([ac_header_exists])dnl ])dnl AC_DEFINE_UNQUOTED(AS_TR_CPP([ABSOLUTE_]m4_defn([gl_HEADER_NAME])), ["AS_VAR_GET(gl_absolute_header)"], [Define this to an absolute name of <]m4_defn([gl_HEADER_NAME])[>.]) AS_VAR_POPDEF([gl_absolute_header])dnl ])dnl ])# gl_ABSOLUTE_HEADER # gl_ABSOLUTE_HEADER_ONE(HEADER) # ------------------------------ # Like gl_ABSOLUTE_HEADER, except that: # - it assumes that the header exists, # - it uses the current CPPFLAGS, # - it does not cache the result, # - it is silent. AC_DEFUN([gl_ABSOLUTE_HEADER_ONE], [ AC_REQUIRE([AC_CANONICAL_HOST]) AC_LANG_CONFTEST([AC_LANG_SOURCE([[#include <]]m4_dquote([$1])[[>]])]) 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 changequote(,) case "$host_os" in mingw*) dnl For the sake of native Windows compilers (excluding gcc), dnl treat backslash as a directory separator, like /. dnl Actually, these compilers use a double-backslash as dnl directory separator, inside the dnl # line "filename" dnl directives. gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac dnl A sed expression that turns a string into a basic regular dnl expression, for use within "/.../". gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo '$1' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' changequote([,]) 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_cv_absolute_]AS_TR_SH([[$1]]), [`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&AS_MESSAGE_LOG_FD | sed -n "$gl_absolute_header_sed"`]) ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gss-1.0.3/lib/gl/m4/string_h.m4���������������������������������������������������������������������0000644�0000000�0000000�00000012714�12415470501�012751� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Configure a GNU-like replacement for <string.h>. # Copyright (C) 2007-2014 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 21 # 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_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> ]], [ffsl ffsll memmem mempcpy memrchr rawmemchr stpcpy stpncpy strchrnul strdup strncat strndup strnlen strpbrk strsep strcasestr strtok_r strerror_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_FFSL=0; AC_SUBST([GNULIB_FFSL]) GNULIB_FFSLL=0; AC_SUBST([GNULIB_FFSLL]) 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_STRERROR_R=0; AC_SUBST([GNULIB_STRERROR_R]) 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_FFSL=1; AC_SUBST([HAVE_FFSL]) HAVE_FFSLL=1; AC_SUBST([HAVE_FFSLL]) 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_STRERROR_R=1; AC_SUBST([HAVE_DECL_STRERROR_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_STRCHRNUL=0; AC_SUBST([REPLACE_STRCHRNUL]) REPLACE_STRERROR=0; AC_SUBST([REPLACE_STRERROR]) REPLACE_STRERROR_R=0; AC_SUBST([REPLACE_STRERROR_R]) 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]) ]) ����������������������������������������������������gss-1.0.3/lib/gl/m4/gnulib-comp.m4������������������������������������������������������������������0000644�0000000�0000000�00000021127�12415470502�013347� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# DO NOT EDIT! GENERATED AUTOMATICALLY! # Copyright (C) 2002-2014 Free Software Foundation, Inc. # # 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 3 of the License, or # (at your option) any later version. # # This 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 file. If not, see <http://www.gnu.org/licenses/>. # # 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 that use version control, 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([libgl_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([gl_PROG_AR_RANLIB]) # Code from module absolute-header: # Code from module extensions: AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) # Code from module extern-inline: # Code from module gettext-h: # Code from module include_next: # Code from module lib-msvc-compat: # Code from module snippet/arg-nonnull: # Code from module snippet/c++defs: # Code from module snippet/warn-on-use: # Code from module stddef: # Code from module string: # Code from module strverscmp: ]) # This macro should be invoked from ./configure.ac, in the section # "Check for header files, types and library functions". AC_DEFUN([libgl_INIT], [ AM_CONDITIONAL([GL_COND_LIBTOOL], [true]) gl_cond_libtool=true gl_m4_base='lib/gl/m4' m4_pushdef([AC_LIBOBJ], m4_defn([libgl_LIBOBJ])) m4_pushdef([AC_REPLACE_FUNCS], m4_defn([libgl_REPLACE_FUNCS])) m4_pushdef([AC_LIBSOURCES], m4_defn([libgl_LIBSOURCES])) m4_pushdef([libgl_LIBSOURCES_LIST], []) m4_pushdef([libgl_LIBSOURCES_DIR], []) gl_COMMON gl_source_base='lib/gl' AC_REQUIRE([gl_EXTERN_INLINE]) AC_SUBST([LIBINTL]) AC_SUBST([LTLIBINTL]) gl_LD_OUTPUT_DEF gl_STDDEF_H gl_HEADER_STRING_H gl_FUNC_STRVERSCMP if test $HAVE_STRVERSCMP = 0; then AC_LIBOBJ([strverscmp]) gl_PREREQ_STRVERSCMP fi gl_STRING_MODULE_INDICATOR([strverscmp]) # End of code from modules m4_ifval(libgl_LIBSOURCES_LIST, [ m4_syscmd([test ! -d ]m4_defn([libgl_LIBSOURCES_DIR])[ || for gl_file in ]libgl_LIBSOURCES_LIST[ ; do if test ! -r ]m4_defn([libgl_LIBSOURCES_DIR])[/$gl_file ; then echo "missing file ]m4_defn([libgl_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([libgl_LIBSOURCES_DIR]) m4_popdef([libgl_LIBSOURCES_LIST]) m4_popdef([AC_LIBSOURCES]) m4_popdef([AC_REPLACE_FUNCS]) m4_popdef([AC_LIBOBJ]) AC_CONFIG_COMMANDS_PRE([ libgl_libobjs= libgl_ltlibobjs= if test -n "$libgl_LIBOBJS"; then # Remove the extension. sed_drop_objext='s/\.o$//;s/\.obj$//' for i in `for i in $libgl_LIBOBJS; do echo "$i"; done | sed -e "$sed_drop_objext" | sort | uniq`; do libgl_libobjs="$libgl_libobjs $i.$ac_objext" libgl_ltlibobjs="$libgl_ltlibobjs $i.lo" done fi AC_SUBST([libgl_LIBOBJS], [$libgl_libobjs]) AC_SUBST([libgl_LTLIBOBJS], [$libgl_ltlibobjs]) ]) gltests_libdeps= gltests_ltlibdeps= m4_pushdef([AC_LIBOBJ], m4_defn([libgltests_LIBOBJ])) m4_pushdef([AC_REPLACE_FUNCS], m4_defn([libgltests_REPLACE_FUNCS])) m4_pushdef([AC_LIBSOURCES], m4_defn([libgltests_LIBSOURCES])) m4_pushdef([libgltests_LIBSOURCES_LIST], []) m4_pushdef([libgltests_LIBSOURCES_DIR], []) gl_COMMON gl_source_base='lib/gl/tests' changequote(,)dnl libgltests_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([libgltests_WITNESS]) gl_module_indicator_condition=$libgltests_WITNESS m4_pushdef([gl_MODULE_INDICATOR_CONDITION], [$gl_module_indicator_condition]) m4_popdef([gl_MODULE_INDICATOR_CONDITION]) m4_ifval(libgltests_LIBSOURCES_LIST, [ m4_syscmd([test ! -d ]m4_defn([libgltests_LIBSOURCES_DIR])[ || for gl_file in ]libgltests_LIBSOURCES_LIST[ ; do if test ! -r ]m4_defn([libgltests_LIBSOURCES_DIR])[/$gl_file ; then echo "missing file ]m4_defn([libgltests_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([libgltests_LIBSOURCES_DIR]) m4_popdef([libgltests_LIBSOURCES_LIST]) m4_popdef([AC_LIBSOURCES]) m4_popdef([AC_REPLACE_FUNCS]) m4_popdef([AC_LIBOBJ]) AC_CONFIG_COMMANDS_PRE([ libgltests_libobjs= libgltests_ltlibobjs= if test -n "$libgltests_LIBOBJS"; then # Remove the extension. sed_drop_objext='s/\.o$//;s/\.obj$//' for i in `for i in $libgltests_LIBOBJS; do echo "$i"; done | sed -e "$sed_drop_objext" | sort | uniq`; do libgltests_libobjs="$libgltests_libobjs $i.$ac_objext" libgltests_ltlibobjs="$libgltests_ltlibobjs $i.lo" done fi AC_SUBST([libgltests_LIBOBJS], [$libgltests_libobjs]) AC_SUBST([libgltests_LTLIBOBJS], [$libgltests_ltlibobjs]) ]) ]) # Like AC_LIBOBJ, except that the module name goes # into libgl_LIBOBJS instead of into LIBOBJS. AC_DEFUN([libgl_LIBOBJ], [ AS_LITERAL_IF([$1], [libgl_LIBSOURCES([$1.c])])dnl libgl_LIBOBJS="$libgl_LIBOBJS $1.$ac_objext" ]) # Like AC_REPLACE_FUNCS, except that the module name goes # into libgl_LIBOBJS instead of into LIBOBJS. AC_DEFUN([libgl_REPLACE_FUNCS], [ m4_foreach_w([gl_NAME], [$1], [AC_LIBSOURCES(gl_NAME[.c])])dnl AC_CHECK_FUNCS([$1], , [libgl_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([libgl_LIBSOURCES], [ m4_foreach([_gl_NAME], [$1], [ m4_if(_gl_NAME, [alloca.c], [], [ m4_define([libgl_LIBSOURCES_DIR], [lib/gl]) m4_append([libgl_LIBSOURCES_LIST], _gl_NAME, [ ]) ]) ]) ]) # Like AC_LIBOBJ, except that the module name goes # into libgltests_LIBOBJS instead of into LIBOBJS. AC_DEFUN([libgltests_LIBOBJ], [ AS_LITERAL_IF([$1], [libgltests_LIBSOURCES([$1.c])])dnl libgltests_LIBOBJS="$libgltests_LIBOBJS $1.$ac_objext" ]) # Like AC_REPLACE_FUNCS, except that the module name goes # into libgltests_LIBOBJS instead of into LIBOBJS. AC_DEFUN([libgltests_REPLACE_FUNCS], [ m4_foreach_w([gl_NAME], [$1], [AC_LIBSOURCES(gl_NAME[.c])])dnl AC_CHECK_FUNCS([$1], , [libgltests_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([libgltests_LIBSOURCES], [ m4_foreach([_gl_NAME], [$1], [ m4_if(_gl_NAME, [alloca.c], [], [ m4_define([libgltests_LIBSOURCES_DIR], [lib/gl/tests]) m4_append([libgltests_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([libgl_FILE_LIST], [ build-aux/snippet/arg-nonnull.h build-aux/snippet/c++defs.h build-aux/snippet/warn-on-use.h lib/dummy.c lib/gettext.h lib/stddef.in.h lib/string.in.h lib/strverscmp.c m4/00gnulib.m4 m4/absolute-header.m4 m4/extensions.m4 m4/extern-inline.m4 m4/gnulib-common.m4 m4/include_next.m4 m4/ld-output-def.m4 m4/stddef_h.m4 m4/string_h.m4 m4/strverscmp.m4 m4/warn-on-use.m4 m4/wchar_t.m4 ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gss-1.0.3/lib/gl/m4/ld-output-def.m4����������������������������������������������������������������0000644�0000000�0000000�00000002036�12415470501�013621� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# ld-output-def.m4 serial 2 dnl Copyright (C) 2008-2014 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_LD_OUTPUT_DEF() # ------------- # Check if linker supports -Wl,--output-def and define automake # conditional HAVE_LD_OUTPUT_DEF if it is. AC_DEFUN([gl_LD_OUTPUT_DEF], [ AC_CACHE_CHECK([if gcc/ld supports -Wl,--output-def], [gl_cv_ld_output_def], [if test "$enable_shared" = no; then gl_cv_ld_output_def="not needed, shared libraries are disabled" else gl_ldflags_save=$LDFLAGS LDFLAGS="-Wl,--output-def,conftest.def" AC_LINK_IFELSE([AC_LANG_PROGRAM([])], [gl_cv_ld_output_def=yes], [gl_cv_ld_output_def=no]) rm -f conftest.def LDFLAGS="$gl_ldflags_save" fi]) AM_CONDITIONAL([HAVE_LD_OUTPUT_DEF], test "x$gl_cv_ld_output_def" = "xyes") ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gss-1.0.3/lib/gl/m4/strverscmp.m4�������������������������������������������������������������������0000644�0000000�0000000�00000001206�12415470501�013336� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# strverscmp.m4 serial 8 dnl Copyright (C) 2002, 2005-2014 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_CHECK_FUNCS([strverscmp]) if test $ac_cv_func_strverscmp = no; then HAVE_STRVERSCMP=0 fi ]) # Prerequisites of lib/strverscmp.c. AC_DEFUN([gl_PREREQ_STRVERSCMP], [ : ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gss-1.0.3/lib/gl/m4/gnulib-cache.m4�����������������������������������������������������������������0000644�0000000�0000000�00000003763�12415470501�013461� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright (C) 2002-2014 Free Software Foundation, Inc. # # 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 3 of the License, or # (at your option) any later version. # # This 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 file. If not, see <http://www.gnu.org/licenses/>. # # 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 that use version control, this file is meant to be put under # version control, like the configure.ac and various Makefile.am files. # Specification in the form of a command-line invocation: # gnulib-tool --import --dir=. --local-dir=lib/gl/override --lib=libgnu --source-base=lib/gl --m4-base=lib/gl/m4 --doc-base=doc --tests-base=lib/gl/tests --aux-dir=build-aux --avoid=xalloc-die --no-conditional-dependencies --libtool --macro-prefix=libgl --no-vc-files gettext-h lib-msvc-compat strverscmp # Specification in the form of a few gnulib-tool.m4 macro invocations: gl_LOCAL_DIR([lib/gl/override]) gl_MODULES([ gettext-h lib-msvc-compat strverscmp ]) gl_AVOID([xalloc-die]) gl_SOURCE_BASE([lib/gl]) gl_M4_BASE([lib/gl/m4]) gl_PO_BASE([]) gl_DOC_BASE([doc]) gl_TESTS_BASE([lib/gl/tests]) gl_LIB([libgnu]) gl_MAKEFILE_NAME([]) gl_LIBTOOL gl_MACRO_PREFIX([libgl]) gl_PO_DOMAIN([]) gl_WITNESS_C_MACRO([]) gl_VC_FILES([false]) �������������gss-1.0.3/lib/gl/m4/stddef_h.m4���������������������������������������������������������������������0000644�0000000�0000000�00000002755�12415470501�012720� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������dnl A placeholder for POSIX 2008 <stddef.h>, for platforms that have issues. # stddef_h.m4 serial 4 dnl Copyright (C) 2009-2014 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]) STDDEF_H= 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 AC_SUBST([STDDEF_H]) AM_CONDITIONAL([GL_GENERATE_STDDEF_H], [test -n "$STDDEF_H"]) if test -n "$STDDEF_H"; then gl_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]) ]) �������������������gss-1.0.3/lib/msg.c���������������������������������������������������������������������������������0000664�0000000�0000000�00000025751�12415506237�010717� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* msg.c --- Implementation of GSS-API Per-Message functions. * Copyright (C) 2003-2014 Simon Josefsson * * This file is part of the Generic Security Service (GSS). * * GSS 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. * * GSS 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 GSS; if not, see http://www.gnu.org/licenses or write to * the Free Software Foundation, Inc., 51 Franklin Street, Fifth * Floor, Boston, MA 02110-1301, USA. * */ #include "internal.h" /* _gss_find_mech */ #include "meta.h" /** * gss_get_mic: * @minor_status: (Integer, modify) Mechanism specific status code. * @context_handle: (gss_ctx_id_t, read) Identifies the context on * which the message will be sent. * @qop_req: (gss_qop_t, read, optional) Specifies requested quality * of protection. Callers are encouraged, on portability grounds, * to accept the default quality of protection offered by the chosen * mechanism, which may be requested by specifying GSS_C_QOP_DEFAULT * for this parameter. If an unsupported protection strength is * requested, gss_get_mic will return a major_status of * GSS_S_BAD_QOP. * @message_buffer: (buffer, opaque, read) Message to be protected. * @message_token: (buffer, opaque, modify) Buffer to receive token. The * application must free storage associated with this buffer after * use with a call to gss_release_buffer(). * * Generates a cryptographic MIC for the supplied message, and places * the MIC in a token for transfer to the peer application. The * qop_req parameter allows a choice between several cryptographic * algorithms, if supported by the chosen mechanism. * * Since some application-level protocols may wish to use tokens * emitted by gss_wrap() to provide "secure framing", implementations * must support derivation of MICs from zero-length messages. * * Return value: * * `GSS_S_COMPLETE`: Successful completion. * * `GSS_S_CONTEXT_EXPIRED`: The context has already expired. * * `GSS_S_NO_CONTEXT`: The context_handle parameter did not identify a * valid context. * * `GSS_S_BAD_QOP`: The specified QOP is not supported by the * mechanism. **/ OM_uint32 gss_get_mic (OM_uint32 * minor_status, const gss_ctx_id_t context_handle, gss_qop_t qop_req, const gss_buffer_t message_buffer, gss_buffer_t message_token) { _gss_mech_api_t mech; if (!context_handle) { if (minor_status) *minor_status = 0; return GSS_S_NO_CONTEXT; } mech = _gss_find_mech (context_handle->mech); if (mech == NULL) { if (minor_status) *minor_status = 0; return GSS_S_BAD_MECH; } return mech->get_mic (minor_status, context_handle, qop_req, message_buffer, message_token); } /** * gss_verify_mic: * @minor_status: (Integer, modify) Mechanism specific status code. * @context_handle: (gss_ctx_id_t, read) Identifies the context on * which the message arrived. * @message_buffer: (buffer, opaque, read) Message to be verified. * @token_buffer: (buffer, opaque, read) Token associated with * message. * @qop_state: (gss_qop_t, modify, optional) Quality of protection * gained from MIC Specify NULL if not required. * * Verifies that a cryptographic MIC, contained in the token * parameter, fits the supplied message. The qop_state parameter * allows a message recipient to determine the strength of protection * that was applied to the message. * * Since some application-level protocols may wish to use tokens * emitted by gss_wrap() to provide "secure framing", implementations * must support the calculation and verification of MICs over * zero-length messages. * * Return value: * * `GSS_S_COMPLETE`: Successful completion. * * `GSS_S_DEFECTIVE_TOKEN`: The token failed consistency checks. * * `GSS_S_BAD_SIG`: The MIC was incorrect. * * `GSS_S_DUPLICATE_TOKEN`: The token was valid, and contained a * correct MIC for the message, but it had already been processed. * * `GSS_S_OLD_TOKEN`: The token was valid, and contained a correct MIC * for the message, but it is too old to check for duplication. * * `GSS_S_UNSEQ_TOKEN`: The token was valid, and contained a correct * MIC for the message, but has been verified out of sequence; a later * token has already been received. * * `GSS_S_GAP_TOKEN`: The token was valid, and contained a correct MIC * for the message, but has been verified out of sequence; an earlier * expected token has not yet been received. * * `GSS_S_CONTEXT_EXPIRED`: The context has already expired. * * `GSS_S_NO_CONTEXT`: The context_handle parameter did not identify a * valid context. **/ OM_uint32 gss_verify_mic (OM_uint32 * minor_status, const gss_ctx_id_t context_handle, const gss_buffer_t message_buffer, const gss_buffer_t token_buffer, gss_qop_t * qop_state) { _gss_mech_api_t mech; if (!context_handle) { if (minor_status) *minor_status = 0; return GSS_S_NO_CONTEXT; } mech = _gss_find_mech (context_handle->mech); if (mech == NULL) { if (minor_status) *minor_status = 0; return GSS_S_BAD_MECH; } return mech->verify_mic (minor_status, context_handle, message_buffer, token_buffer, qop_state); } /** * gss_wrap: * @minor_status: (Integer, modify) Mechanism specific status code. * @context_handle: (gss_ctx_id_t, read) Identifies the context on * which the message will be sent. * @conf_req_flag: (boolean, read) Non-zero - Both confidentiality and * integrity services are requested. Zero - Only integrity service is * requested. * @qop_req: (gss_qop_t, read, optional) Specifies required quality of * protection. A mechanism-specific default may be requested by * setting qop_req to GSS_C_QOP_DEFAULT. If an unsupported * protection strength is requested, gss_wrap will return a * major_status of GSS_S_BAD_QOP. * @input_message_buffer: (buffer, opaque, read) Message to be * protected. * @conf_state: (boolean, modify, optional) Non-zero - * Confidentiality, data origin authentication and integrity * services have been applied. Zero - Integrity and data origin * services only has been applied. Specify NULL if not required. * @output_message_buffer: (buffer, opaque, modify) Buffer to receive * protected message. Storage associated with this message must be * freed by the application after use with a call to * gss_release_buffer(). * * Attaches a cryptographic MIC and optionally encrypts the specified * input_message. The output_message contains both the MIC and the * message. The qop_req parameter allows a choice between several * cryptographic algorithms, if supported by the chosen mechanism. * * Since some application-level protocols may wish to use tokens * emitted by gss_wrap() to provide "secure framing", implementations * must support the wrapping of zero-length messages. * * Return value: * * `GSS_S_COMPLETE`: Successful completion. * * `GSS_S_CONTEXT_EXPIRED`: The context has already expired. * * `GSS_S_NO_CONTEXT`: The context_handle parameter did not identify a * valid context. * * `GSS_S_BAD_QOP`: The specified QOP is not supported by the * mechanism. **/ OM_uint32 gss_wrap (OM_uint32 * minor_status, const gss_ctx_id_t context_handle, int conf_req_flag, gss_qop_t qop_req, const gss_buffer_t input_message_buffer, int *conf_state, gss_buffer_t output_message_buffer) { _gss_mech_api_t mech; if (!context_handle) { if (minor_status) *minor_status = 0; return GSS_S_NO_CONTEXT; } mech = _gss_find_mech (context_handle->mech); if (mech == NULL) { if (minor_status) *minor_status = 0; return GSS_S_BAD_MECH; } return mech->wrap (minor_status, context_handle, conf_req_flag, qop_req, input_message_buffer, conf_state, output_message_buffer); } /** * gss_unwrap: * @minor_status: (Integer, modify) Mechanism specific status code. * @context_handle: (gss_ctx_id_t, read) Identifies the context on * which the message arrived. * @input_message_buffer: (buffer, opaque, read) Protected message. * @output_message_buffer: (buffer, opaque, modify) Buffer to receive * unwrapped message. Storage associated with this buffer must be * freed by the application after use use with a call to * gss_release_buffer(). * @conf_state: (boolean, modify, optional) Non-zero - Confidentiality * and integrity protection were used. Zero - Integrity service only * was used. Specify NULL if not required. * @qop_state: (gss_qop_t, modify, optional) Quality of protection * provided. Specify NULL if not required. * * Converts a message previously protected by gss_wrap back to a * usable form, verifying the embedded MIC. The conf_state parameter * indicates whether the message was encrypted; the qop_state * parameter indicates the strength of protection that was used to * provide the confidentiality and integrity services. * * Since some application-level protocols may wish to use tokens * emitted by gss_wrap() to provide "secure framing", implementations * must support the wrapping and unwrapping of zero-length messages. * * Return value: * * `GSS_S_COMPLETE`: Successful completion. * * `GSS_S_DEFECTIVE_TOKEN`: The token failed consistency checks. * * `GSS_S_BAD_SIG`: The MIC was incorrect. * * `GSS_S_DUPLICATE_TOKEN`: The token was valid, and contained a * correct MIC for the message, but it had already been processed. * * `GSS_S_OLD_TOKEN`: The token was valid, and contained a correct MIC * for the message, but it is too old to check for duplication. * * `GSS_S_UNSEQ_TOKEN`: The token was valid, and contained a correct * MIC for the message, but has been verified out of sequence; a later * token has already been received. * * `GSS_S_GAP_TOKEN`: The token was valid, and contained a correct MIC * for the message, but has been verified out of sequence; an earlier * expected token has not yet been received. * * `GSS_S_CONTEXT_EXPIRED`: The context has already expired. * * `GSS_S_NO_CONTEXT`: The context_handle parameter did not identify a * valid context. **/ OM_uint32 gss_unwrap (OM_uint32 * minor_status, const gss_ctx_id_t context_handle, const gss_buffer_t input_message_buffer, gss_buffer_t output_message_buffer, int *conf_state, gss_qop_t * qop_state) { _gss_mech_api_t mech; if (!context_handle) { if (minor_status) *minor_status = 0; return GSS_S_NO_CONTEXT; } mech = _gss_find_mech (context_handle->mech); if (mech == NULL) { if (minor_status) *minor_status = 0; return GSS_S_BAD_MECH; } return mech->unwrap (minor_status, context_handle, input_message_buffer, output_message_buffer, conf_state, qop_state); } �����������������������gss-1.0.3/lib/asn1.c��������������������������������������������������������������������������������0000664�0000000�0000000�00000016545�12415506237�010774� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* asn1.c --- Wrapper around pseudo-ASN.1 token format. * Copyright (C) 2003-2014 Simon Josefsson * * This file is part of the Generic Security Service (GSS). * * GSS 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. * * GSS 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 GSS; if not, see http://www.gnu.org/licenses or write to * the Free Software Foundation, Inc., 51 Franklin Street, Fifth * Floor, Boston, MA 02110-1301, USA. * */ #include "internal.h" /* * The following two functions borrowed from libtasn.1, under LGPL. * Copyright (C) 2002 Fabio Fiorina. */ static void _gss_asn1_length_der (size_t len, unsigned char *ans, size_t * ans_len) { size_t k; unsigned char temp[sizeof (len)]; if (len < 128) { if (ans != NULL) ans[0] = (unsigned char) len; *ans_len = 1; } else { 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]; } } } static size_t _gss_asn1_get_length_der (const char *der, size_t der_len, size_t * len) { size_t ans; size_t k, punt; *len = 0; if (der_len <= 0) return 0; if (!(der[0] & 128)) { /* short form */ *len = 1; return (unsigned char) der[0]; } else { /* Long form */ k = (unsigned char) der[0] & 0x7F; punt = 1; if (k) { /* definite length method */ ans = 0; while (punt <= k && punt < der_len) { size_t last = ans; ans = ans * 256 + (unsigned char) der[punt++]; if (ans < last) /* we wrapped around, no bignum support... */ return -2; } } else { /* indefinite length method */ ans = -1; } *len = punt; return ans; } } OM_uint32 _gss_encapsulate_token_prefix (const char *prefix, size_t prefixlen, const char *in, size_t inlen, const char *oid, OM_uint32 oidlen, void **out, size_t * outlen) { size_t oidlenlen; size_t asn1len, asn1lenlen; unsigned char *p; if (prefix == NULL) prefixlen = 0; _gss_asn1_length_der (oidlen, NULL, &oidlenlen); asn1len = 1 + oidlenlen + oidlen + prefixlen + inlen; _gss_asn1_length_der (asn1len, NULL, &asn1lenlen); *outlen = 1 + asn1lenlen + asn1len; p = *out = malloc (*outlen); if (!p) return -1; *p++ = '\x60'; _gss_asn1_length_der (asn1len, p, &asn1lenlen); p += asn1lenlen; *p++ = '\x06'; _gss_asn1_length_der (oidlen, p, &oidlenlen); p += oidlenlen; memcpy (p, oid, oidlen); p += oidlen; if (prefixlen > 0) { memcpy (p, prefix, prefixlen); p += prefixlen; } memcpy (p, in, inlen); return 0; } /** * gss_encapsulate_token: * @input_token: (buffer, opaque, read) Buffer with GSS-API context token data. * @token_oid: (Object ID, read) Object identifier of token. * @output_token: (buffer, opaque, modify) Encapsulated token data; * caller must release with gss_release_buffer(). * * Add the mechanism-independent token header to GSS-API context token * data. This is used for the initial token of a GSS-API context * establishment sequence. It incorporates an identifier of the * mechanism type to be used on that context, and enables tokens to be * interpreted unambiguously at GSS-API peers. See further section * 3.1 of RFC 2743. This function is standardized in RFC 6339. * * Returns: * * `GSS_S_COMPLETE`: Indicates successful completion, and that output * parameters holds correct information. * * `GSS_S_FAILURE`: Indicates that encapsulation failed for reasons * unspecified at the GSS-API level. **/ extern OM_uint32 gss_encapsulate_token (gss_const_buffer_t input_token, gss_const_OID token_oid, gss_buffer_t output_token) { int rc; if (!input_token) return GSS_S_CALL_INACCESSIBLE_READ; if (!token_oid) return GSS_S_CALL_INACCESSIBLE_READ; if (!output_token) return GSS_S_CALL_INACCESSIBLE_WRITE; rc = _gss_encapsulate_token_prefix (NULL, 0, input_token->value, input_token->length, token_oid->elements, token_oid->length, &output_token->value, &output_token->length); if (rc != 0) return GSS_S_FAILURE; return GSS_S_COMPLETE; } int _gss_decapsulate_token (const char *in, size_t inlen, char **oid, size_t * oidlen, char **out, size_t * outlen) { size_t i; size_t asn1lenlen; if (inlen-- == 0) return -1; if (*in++ != '\x60') return -1; i = inlen; asn1lenlen = _gss_asn1_get_length_der (in, inlen, &i); if (inlen < i) return -1; inlen -= i; in += i; if (inlen != asn1lenlen) return -1; if (inlen-- == 0) return -1; if (*in++ != '\x06') return -1; i = inlen; asn1lenlen = _gss_asn1_get_length_der (in, inlen, &i); if (inlen < i) return -1; inlen -= i; in += i; if (inlen < asn1lenlen) return -1; *oidlen = asn1lenlen; *oid = (char *) in; inlen -= asn1lenlen; in += asn1lenlen; if (outlen) *outlen = inlen; if (out) *out = (char *) in; return 0; } /** * gss_decapsulate_token: * @input_token: (buffer, opaque, read) Buffer with GSS-API context token. * @token_oid: (Object ID, read) Expected object identifier of token. * @output_token: (buffer, opaque, modify) Decapsulated token data; * caller must release with gss_release_buffer(). * * Remove the mechanism-independent token header from an initial * GSS-API context token. Unwrap a buffer in the * mechanism-independent token format. This is the reverse of * gss_encapsulate_token(). The translation is loss-less, all data is * preserved as is. This function is standardized in RFC 6339. * * Return value: * * `GSS_S_COMPLETE`: Indicates successful completion, and that output * parameters holds correct information. * * `GSS_S_DEFECTIVE_TOKEN`: Means that the token failed consistency * checks (e.g., OID mismatch or ASN.1 DER length errors). * * `GSS_S_FAILURE`: Indicates that decapsulation failed for reasons * unspecified at the GSS-API level. **/ OM_uint32 gss_decapsulate_token (gss_const_buffer_t input_token, gss_const_OID token_oid, gss_buffer_t output_token) { gss_OID_desc tmpoid; char *oid = NULL, *out = NULL; size_t oidlen = 0, outlen = 0; if (!input_token) return GSS_S_CALL_INACCESSIBLE_READ; if (!token_oid) return GSS_S_CALL_INACCESSIBLE_READ; if (!output_token) return GSS_S_CALL_INACCESSIBLE_WRITE; if (_gss_decapsulate_token ((char *) input_token->value, input_token->length, &oid, &oidlen, &out, &outlen) != 0) return GSS_S_DEFECTIVE_TOKEN; tmpoid.length = oidlen; tmpoid.elements = oid; if (!gss_oid_equal (token_oid, &tmpoid)) return GSS_S_DEFECTIVE_TOKEN; output_token->length = outlen; output_token->value = malloc (outlen); if (!output_token->value) return GSS_S_FAILURE; memcpy (output_token->value, out, outlen); return GSS_S_COMPLETE; } �����������������������������������������������������������������������������������������������������������������������������������������������������������gss-1.0.3/lib/ext.c���������������������������������������������������������������������������������0000664�0000000�0000000�00000003216�12415506237�010721� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* ext.c --- Implementation of GSS specific extensions. * Copyright (C) 2003-2014 Simon Josefsson * * This file is part of the Generic Security Service (GSS). * * GSS 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. * * GSS 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 GSS; if not, see http://www.gnu.org/licenses or write to * the Free Software Foundation, Inc., 51 Franklin Street, Fifth * Floor, Boston, MA 02110-1301, USA. * */ #include "internal.h" /** * gss_userok: * @name: (gss_name_t, read) Name to be compared. * @username: Zero terminated string with username. * * Compare the username against the output from gss_export_name() * invoked on @name, after removing the leading OID. This answers the * question whether the particular mechanism would authenticate them * as the same principal * * WARNING: This function is a GNU GSS specific extension, and is not * part of the official GSS API. * * Return value: Returns 0 if the names match, non-0 otherwise. **/ int gss_userok (const gss_name_t name, const char *username) { /* FIXME: Call gss_export_name, then remove OID. */ return name->length == strlen (username) && memcmp (name->value, username, name->length) == 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gss-1.0.3/lib/headers/������������������������������������������������������������������������������0000755�0000000�0000000�00000000000�12415510376�011443� 5����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������gss-1.0.3/lib/headers/gss/��������������������������������������������������������������������������0000755�0000000�0000000�00000000000�12415510376�012237� 5����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������gss-1.0.3/lib/headers/gss/krb5-ext.h����������������������������������������������������������������0000664�0000000�0000000�00000003042�12415506237�013773� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* gss/krb5-ext.h --- Header file for Kerberos 5 GSS-API mechanism. * Copyright (C) 2003-2014 Simon Josefsson * * This file is part of the Generic Security Service (GSS). * * GSS 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. * * GSS 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 GSS; if not, see http://www.gnu.org/licenses or write to * the Free Software Foundation, Inc., 51 Franklin Street, Fifth * Floor, Boston, MA 02110-1301, USA. * */ /* * This file contains GNU GSS specific Kerberos V5 related GSS-API * mechanism prototypes. See gss/krb5.h for official prototypes. * */ #ifndef GSS_KRB5_EXT_H # define GSS_KRB5_EXT_H extern gss_OID GSS_KRB5; /* Static symbols for other gss_OID types. These are useful in static declarations. */ extern gss_OID_desc GSS_KRB5_static; extern gss_OID_desc GSS_KRB5_NT_USER_NAME_static; extern gss_OID_desc GSS_KRB5_NT_HOSTBASED_SERVICE_NAME_static; extern gss_OID_desc GSS_KRB5_NT_PRINCIPAL_NAME_static; extern gss_OID_desc GSS_KRB5_NT_MACHINE_UID_NAME_static; extern gss_OID_desc GSS_KRB5_NT_STRING_UID_NAME_static; #endif /* GSS_KRB5_EXT_H */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gss-1.0.3/lib/headers/gss/api.h���������������������������������������������������������������������0000664�0000000�0000000�00000047675�12415506237�013127� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* api.h --- Header file for GSS-API. * Copyright (C) 2003-2014 Simon Josefsson * * This file is part of the Generic Security Service (GSS). * * GSS 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. * * GSS 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 GSS; if not, see http://www.gnu.org/licenses or write to * the Free Software Foundation, Inc., 51 Franklin Street, Fifth * Floor, Boston, MA 02110-1301, USA. * */ /* * This file was extracted by Simon Josefsson, for the GSS project, * from RFC 2744, written by John Wray. It has been changed slightly. * We believe using code from RFCs is within acceptable use. */ #ifndef GSSAPI_H_ #define GSSAPI_H_ /* * First, include stddef.h to get size_t defined. */ #include <stddef.h> /* * Now define the three implementation-dependent types. */ typedef struct gss_ctx_id_struct *gss_ctx_id_t; typedef struct gss_cred_id_struct *gss_cred_id_t; typedef struct gss_name_struct *gss_name_t; /* * The following type must be defined as the smallest natural * unsigned integer supported by the platform that has at least * 32 bits of precision. */ #include <limits.h> #if USHRT_MAX >= 4294967295 typedef unsigned short gss_uint32; #elif UINT_MAX >= 4294967295 typedef unsigned int gss_uint32; #else /* unsigned long's must be at least 32 bits according to K&R */ typedef unsigned long gss_uint32; #endif /* * We don't use X/Open definitions, so roll our own. */ typedef gss_uint32 OM_uint32; typedef struct gss_OID_desc_struct { OM_uint32 length; void *elements; } gss_OID_desc, *gss_OID; typedef struct gss_OID_set_desc_struct { size_t count; gss_OID elements; } gss_OID_set_desc, *gss_OID_set; typedef struct gss_buffer_desc_struct { size_t length; void *value; } gss_buffer_desc, *gss_buffer_t; typedef struct gss_channel_bindings_struct { OM_uint32 initiator_addrtype; gss_buffer_desc initiator_address; OM_uint32 acceptor_addrtype; gss_buffer_desc acceptor_address; gss_buffer_desc application_data; } *gss_channel_bindings_t; /* * For now, define a QOP-type as an OM_uint32 */ typedef OM_uint32 gss_qop_t; typedef int gss_cred_usage_t; /* * Flag bits for context-level services. */ #define GSS_C_DELEG_FLAG 1 #define GSS_C_MUTUAL_FLAG 2 #define GSS_C_REPLAY_FLAG 4 #define GSS_C_SEQUENCE_FLAG 8 #define GSS_C_CONF_FLAG 16 #define GSS_C_INTEG_FLAG 32 #define GSS_C_ANON_FLAG 64 #define GSS_C_PROT_READY_FLAG 128 #define GSS_C_TRANS_FLAG 256 /* * Credential usage options */ #define GSS_C_BOTH 0 #define GSS_C_INITIATE 1 #define GSS_C_ACCEPT 2 /* * Status code types for gss_display_status */ #define GSS_C_GSS_CODE 1 #define GSS_C_MECH_CODE 2 /* * The constant definitions for channel-bindings address families */ #define GSS_C_AF_UNSPEC 0 #define GSS_C_AF_LOCAL 1 #define GSS_C_AF_INET 2 #define GSS_C_AF_IMPLINK 3 #define GSS_C_AF_PUP 4 #define GSS_C_AF_CHAOS 5 #define GSS_C_AF_NS 6 #define GSS_C_AF_NBS 7 #define GSS_C_AF_ECMA 8 #define GSS_C_AF_DATAKIT 9 #define GSS_C_AF_CCITT 10 #define GSS_C_AF_SNA 11 #define GSS_C_AF_DECnet 12 #define GSS_C_AF_DLI 13 #define GSS_C_AF_LAT 14 #define GSS_C_AF_HYLINK 15 #define GSS_C_AF_APPLETALK 16 #define GSS_C_AF_BSC 17 #define GSS_C_AF_DSS 18 #define GSS_C_AF_OSI 19 #define GSS_C_AF_X25 21 #define GSS_C_AF_NULLADDR 255 /* * Various Null values */ #define GSS_C_NO_NAME ((gss_name_t) 0) #define GSS_C_NO_BUFFER ((gss_buffer_t) 0) #define GSS_C_NO_OID ((gss_OID) 0) #define GSS_C_NO_OID_SET ((gss_OID_set) 0) #define GSS_C_NO_CONTEXT ((gss_ctx_id_t) 0) #define GSS_C_NO_CREDENTIAL ((gss_cred_id_t) 0) #define GSS_C_NO_CHANNEL_BINDINGS ((gss_channel_bindings_t) 0) #define GSS_C_EMPTY_BUFFER {0, NULL} /* * Some alternate names for a couple of the above * values. These are defined for V1 compatibility. */ #define GSS_C_NULL_OID GSS_C_NO_OID #define GSS_C_NULL_OID_SET GSS_C_NO_OID_SET /* * Define the default Quality of Protection for per-message * services. Note that an implementation that offers multiple * levels of QOP may define GSS_C_QOP_DEFAULT to be either zero * (as done here) to mean "default protection", or to a specific * explicit QOP value. However, a value of 0 should always be * interpreted by a GSS-API implementation as a request for the * default protection level. */ #define GSS_C_QOP_DEFAULT 0 /* * Expiration time of 2^32-1 seconds means infinite lifetime for a * credential or security context */ #define GSS_C_INDEFINITE 0xfffffffful /* * The implementation must reserve static storage for a * gss_OID_desc object containing the value * {10, (void *)"\x2a\x86\x48\x86\xf7\x12" * "\x01\x02\x01\x01"}, * corresponding to an object-identifier value of * {iso(1) member-body(2) United States(840) mit(113554) * infosys(1) gssapi(2) generic(1) user_name(1)}. The constant * GSS_C_NT_USER_NAME should be initialized to point * to that gss_OID_desc. */ extern gss_OID GSS_C_NT_USER_NAME; /* * The implementation must reserve static storage for a * gss_OID_desc object containing the value * {10, (void *)"\x2a\x86\x48\x86\xf7\x12" * "\x01\x02\x01\x02"}, * corresponding to an object-identifier value of * {iso(1) member-body(2) United States(840) mit(113554) * infosys(1) gssapi(2) generic(1) machine_uid_name(2)}. * The constant GSS_C_NT_MACHINE_UID_NAME should be * initialized to point to that gss_OID_desc. */ extern gss_OID GSS_C_NT_MACHINE_UID_NAME; /* * The implementation must reserve static storage for a * gss_OID_desc object containing the value * {10, (void *)"\x2a\x86\x48\x86\xf7\x12" * "\x01\x02\x01\x03"}, * corresponding to an object-identifier value of * {iso(1) member-body(2) United States(840) mit(113554) * infosys(1) gssapi(2) generic(1) string_uid_name(3)}. * The constant GSS_C_NT_STRING_UID_NAME should be * initialized to point to that gss_OID_desc. */ extern gss_OID GSS_C_NT_STRING_UID_NAME; /* * The implementation must reserve static storage for a * gss_OID_desc object containing the value * {6, (void *)"\x2b\x06\x01\x05\x06\x02"}, * corresponding to an object-identifier value of * {iso(1) org(3) dod(6) internet(1) security(5) * nametypes(6) gss-host-based-services(2)). The constant * GSS_C_NT_HOSTBASED_SERVICE_X should be initialized to point * to that gss_OID_desc. This is a deprecated OID value, and * implementations wishing to support hostbased-service names * should instead use the GSS_C_NT_HOSTBASED_SERVICE OID, * defined below, to identify such names; * GSS_C_NT_HOSTBASED_SERVICE_X should be accepted a synonym * for GSS_C_NT_HOSTBASED_SERVICE when presented as an input * parameter, but should not be emitted by GSS-API * implementations */ extern gss_OID GSS_C_NT_HOSTBASED_SERVICE_X; /* * The implementation must reserve static storage for a * gss_OID_desc object containing the value * {10, (void *)"\x2a\x86\x48\x86\xf7\x12" * "\x01\x02\x01\x04"}, corresponding to an * object-identifier value of {iso(1) member-body(2) * Unites States(840) mit(113554) infosys(1) gssapi(2) * generic(1) service_name(4)}. The constant * GSS_C_NT_HOSTBASED_SERVICE should be initialized * to point to that gss_OID_desc. */ extern gss_OID GSS_C_NT_HOSTBASED_SERVICE; /* * The implementation must reserve static storage for a * gss_OID_desc object containing the value * {6, (void *)"\x2b\x06\01\x05\x06\x03"}, * corresponding to an object identifier value of * {1(iso), 3(org), 6(dod), 1(internet), 5(security), * 6(nametypes), 3(gss-anonymous-name)}. The constant * and GSS_C_NT_ANONYMOUS should be initialized to point * to that gss_OID_desc. */ extern gss_OID GSS_C_NT_ANONYMOUS; /* * The implementation must reserve static storage for a * gss_OID_desc object containing the value * {6, (void *)"\x2b\x06\x01\x05\x06\x04"}, * corresponding to an object-identifier value of * {1(iso), 3(org), 6(dod), 1(internet), 5(security), * 6(nametypes), 4(gss-api-exported-name)}. The constant * GSS_C_NT_EXPORT_NAME should be initialized to point * to that gss_OID_desc. */ extern gss_OID GSS_C_NT_EXPORT_NAME; /* Major status codes */ #define GSS_S_COMPLETE 0 /* * Some "helper" definitions to make the status code macros obvious. */ #define GSS_C_CALLING_ERROR_OFFSET 24 #define GSS_C_ROUTINE_ERROR_OFFSET 16 #define GSS_C_SUPPLEMENTARY_OFFSET 0 #define GSS_C_CALLING_ERROR_MASK 0377ul #define GSS_C_ROUTINE_ERROR_MASK 0377ul #define GSS_C_SUPPLEMENTARY_MASK 0177777ul /* * The macros that test status codes for error conditions. * Note that the GSS_ERROR() macro has changed slightly from * the V1 GSS-API so that it now evaluates its argument * only once. */ #define GSS_CALLING_ERROR(x) \ (x & (GSS_C_CALLING_ERROR_MASK << GSS_C_CALLING_ERROR_OFFSET)) #define GSS_ROUTINE_ERROR(x) \ (x & (GSS_C_ROUTINE_ERROR_MASK << GSS_C_ROUTINE_ERROR_OFFSET)) #define GSS_SUPPLEMENTARY_INFO(x) \ (x & (GSS_C_SUPPLEMENTARY_MASK << GSS_C_SUPPLEMENTARY_OFFSET)) #define GSS_ERROR(x) \ (x & ((GSS_C_CALLING_ERROR_MASK << GSS_C_CALLING_ERROR_OFFSET) | \ (GSS_C_ROUTINE_ERROR_MASK << GSS_C_ROUTINE_ERROR_OFFSET))) /* * Now the actual status code definitions */ /* * Calling errors: */ #define GSS_S_CALL_INACCESSIBLE_READ (1ul << GSS_C_CALLING_ERROR_OFFSET) #define GSS_S_CALL_INACCESSIBLE_WRITE (2ul << GSS_C_CALLING_ERROR_OFFSET) #define GSS_S_CALL_BAD_STRUCTURE (3ul << GSS_C_CALLING_ERROR_OFFSET) /* * Routine errors: */ #define GSS_S_BAD_MECH (1ul << GSS_C_ROUTINE_ERROR_OFFSET) #define GSS_S_BAD_NAME (2ul << GSS_C_ROUTINE_ERROR_OFFSET) #define GSS_S_BAD_NAMETYPE (3ul << GSS_C_ROUTINE_ERROR_OFFSET) #define GSS_S_BAD_BINDINGS (4ul << GSS_C_ROUTINE_ERROR_OFFSET) #define GSS_S_BAD_STATUS (5ul << GSS_C_ROUTINE_ERROR_OFFSET) #define GSS_S_BAD_SIG (6ul << GSS_C_ROUTINE_ERROR_OFFSET) #define GSS_S_BAD_MIC GSS_S_BAD_SIG #define GSS_S_NO_CRED (7ul << GSS_C_ROUTINE_ERROR_OFFSET) #define GSS_S_NO_CONTEXT (8ul << GSS_C_ROUTINE_ERROR_OFFSET) #define GSS_S_DEFECTIVE_TOKEN (9ul << GSS_C_ROUTINE_ERROR_OFFSET) #define GSS_S_DEFECTIVE_CREDENTIAL (10ul << GSS_C_ROUTINE_ERROR_OFFSET) #define GSS_S_CREDENTIALS_EXPIRED (11ul << GSS_C_ROUTINE_ERROR_OFFSET) #define GSS_S_CONTEXT_EXPIRED (12ul << GSS_C_ROUTINE_ERROR_OFFSET) #define GSS_S_FAILURE (13ul << GSS_C_ROUTINE_ERROR_OFFSET) #define GSS_S_BAD_QOP (14ul << GSS_C_ROUTINE_ERROR_OFFSET) #define GSS_S_UNAUTHORIZED (15ul << GSS_C_ROUTINE_ERROR_OFFSET) #define GSS_S_UNAVAILABLE (16ul << GSS_C_ROUTINE_ERROR_OFFSET) #define GSS_S_DUPLICATE_ELEMENT (17ul << GSS_C_ROUTINE_ERROR_OFFSET) #define GSS_S_NAME_NOT_MN (18ul << GSS_C_ROUTINE_ERROR_OFFSET) /* * Supplementary info bits: */ #define GSS_S_CONTINUE_NEEDED (1ul << (GSS_C_SUPPLEMENTARY_OFFSET + 0)) #define GSS_S_DUPLICATE_TOKEN (1ul << (GSS_C_SUPPLEMENTARY_OFFSET + 1)) #define GSS_S_OLD_TOKEN (1ul << (GSS_C_SUPPLEMENTARY_OFFSET + 2)) #define GSS_S_UNSEQ_TOKEN (1ul << (GSS_C_SUPPLEMENTARY_OFFSET + 3)) #define GSS_S_GAP_TOKEN (1ul << (GSS_C_SUPPLEMENTARY_OFFSET + 4)) /* * Finally, function prototypes for the GSS-API routines. */ OM_uint32 gss_acquire_cred (OM_uint32 * minor_status, const gss_name_t desired_name, OM_uint32 time_req, const gss_OID_set desired_mechs, gss_cred_usage_t cred_usage, gss_cred_id_t * output_cred_handle, gss_OID_set * actual_mechs, OM_uint32 * time_rec); OM_uint32 gss_release_cred (OM_uint32 * minor_status, gss_cred_id_t * cred_handle); OM_uint32 gss_init_sec_context (OM_uint32 * minor_status, const gss_cred_id_t initiator_cred_handle, gss_ctx_id_t * context_handle, const gss_name_t target_name, const gss_OID mech_type, OM_uint32 req_flags, OM_uint32 time_req, const gss_channel_bindings_t input_chan_bindings, const gss_buffer_t input_token, gss_OID * actual_mech_type, gss_buffer_t output_token, OM_uint32 * ret_flags, OM_uint32 * time_rec); OM_uint32 gss_accept_sec_context (OM_uint32 * minor_status, gss_ctx_id_t * context_handle, const gss_cred_id_t acceptor_cred_handle, const gss_buffer_t input_token_buffer, const gss_channel_bindings_t input_chan_bindings, gss_name_t * src_name, gss_OID * mech_type, gss_buffer_t output_token, OM_uint32 * ret_flags, OM_uint32 * time_rec, gss_cred_id_t * delegated_cred_handle); OM_uint32 gss_process_context_token (OM_uint32 * minor_status, const gss_ctx_id_t context_handle, const gss_buffer_t token_buffer); OM_uint32 gss_delete_sec_context (OM_uint32 * minor_status, gss_ctx_id_t * context_handle, gss_buffer_t output_token); OM_uint32 gss_context_time (OM_uint32 * minor_status, const gss_ctx_id_t context_handle, OM_uint32 * time_rec); OM_uint32 gss_get_mic (OM_uint32 * minor_status, const gss_ctx_id_t context_handle, gss_qop_t qop_req, const gss_buffer_t message_buffer, gss_buffer_t message_token); OM_uint32 gss_verify_mic (OM_uint32 * minor_status, const gss_ctx_id_t context_handle, const gss_buffer_t message_buffer, const gss_buffer_t token_buffer, gss_qop_t * qop_state); OM_uint32 gss_wrap (OM_uint32 * minor_status, const gss_ctx_id_t context_handle, int conf_req_flag, gss_qop_t qop_req, const gss_buffer_t input_message_buffer, int *conf_state, gss_buffer_t output_message_buffer); OM_uint32 gss_unwrap (OM_uint32 * minor_status, const gss_ctx_id_t context_handle, const gss_buffer_t input_message_buffer, gss_buffer_t output_message_buffer, int *conf_state, gss_qop_t * qop_state); OM_uint32 gss_display_status (OM_uint32 * minor_status, OM_uint32 status_value, int status_type, const gss_OID mech_type, OM_uint32 * message_context, gss_buffer_t status_string); OM_uint32 gss_indicate_mechs (OM_uint32 * minor_status, gss_OID_set * mech_set); OM_uint32 gss_compare_name (OM_uint32 * minor_status, const gss_name_t name1, const gss_name_t name2, int *name_equal); OM_uint32 gss_display_name (OM_uint32 * minor_status, const gss_name_t input_name, gss_buffer_t output_name_buffer, gss_OID * output_name_type); OM_uint32 gss_import_name (OM_uint32 * minor_status, const gss_buffer_t input_name_buffer, const gss_OID input_name_type, gss_name_t * output_name); OM_uint32 gss_export_name (OM_uint32 * minor_status, const gss_name_t input_name, gss_buffer_t exported_name); OM_uint32 gss_release_name (OM_uint32 * minor_status, gss_name_t * name); OM_uint32 gss_release_buffer (OM_uint32 * minor_status, gss_buffer_t buffer); OM_uint32 gss_release_oid_set (OM_uint32 * minor_status, gss_OID_set * set); OM_uint32 gss_inquire_cred (OM_uint32 * minor_status, const gss_cred_id_t cred_handle, gss_name_t * name, OM_uint32 * lifetime, gss_cred_usage_t * cred_usage, gss_OID_set * mechanisms); OM_uint32 gss_inquire_context (OM_uint32 * minor_status, const gss_ctx_id_t context_handle, gss_name_t * src_name, gss_name_t * targ_name, OM_uint32 * lifetime_rec, gss_OID * mech_type, OM_uint32 * ctx_flags, int *locally_initiated, int *open); OM_uint32 gss_wrap_size_limit (OM_uint32 * minor_status, const gss_ctx_id_t context_handle, int conf_req_flag, gss_qop_t qop_req, OM_uint32 req_output_size, OM_uint32 * max_input_size); OM_uint32 gss_add_cred (OM_uint32 * minor_status, const gss_cred_id_t input_cred_handle, const gss_name_t desired_name, const gss_OID desired_mech, gss_cred_usage_t cred_usage, OM_uint32 initiator_time_req, OM_uint32 acceptor_time_req, gss_cred_id_t * output_cred_handle, gss_OID_set * actual_mechs, OM_uint32 * initiator_time_rec, OM_uint32 * acceptor_time_rec); OM_uint32 gss_inquire_cred_by_mech (OM_uint32 * minor_status, const gss_cred_id_t cred_handle, const gss_OID mech_type, gss_name_t * name, OM_uint32 * initiator_lifetime, OM_uint32 * acceptor_lifetime, gss_cred_usage_t * cred_usage); OM_uint32 gss_export_sec_context (OM_uint32 * minor_status, gss_ctx_id_t * context_handle, gss_buffer_t interprocess_token); OM_uint32 gss_import_sec_context (OM_uint32 * minor_status, const gss_buffer_t interprocess_token, gss_ctx_id_t * context_handle); OM_uint32 gss_create_empty_oid_set (OM_uint32 * minor_status, gss_OID_set * oid_set); OM_uint32 gss_add_oid_set_member (OM_uint32 * minor_status, const gss_OID member_oid, gss_OID_set * oid_set); OM_uint32 gss_test_oid_set_member (OM_uint32 * minor_status, const gss_OID member, const gss_OID_set set, int *present); OM_uint32 gss_inquire_names_for_mech (OM_uint32 * minor_status, const gss_OID mechanism, gss_OID_set * name_types); OM_uint32 gss_inquire_mechs_for_name (OM_uint32 * minor_status, const gss_name_t input_name, gss_OID_set * mech_types); OM_uint32 gss_canonicalize_name (OM_uint32 * minor_status, const gss_name_t input_name, const gss_OID mech_type, gss_name_t * output_name); OM_uint32 gss_duplicate_name (OM_uint32 * minor_status, const gss_name_t src_name, gss_name_t * dest_name); /* * The following routines are obsolete variants of gss_get_mic, * gss_verify_mic, gss_wrap and gss_unwrap. They should be * provided by GSS-API V2 implementations for backwards * compatibility with V1 applications. Distinct entrypoints * (as opposed to #defines) should be provided, both to allow * GSS-API V1 applications to link against GSS-API V2 implementations, * and to retain the slight parameter type differences between the * obsolete versions of these routines and their current forms. */ OM_uint32 gss_sign (OM_uint32 * minor_status, gss_ctx_id_t context_handle, int qop_req, gss_buffer_t message_buffer, gss_buffer_t message_token); OM_uint32 gss_verify (OM_uint32 * minor_status, gss_ctx_id_t context_handle, gss_buffer_t message_buffer, gss_buffer_t token_buffer, int *qop_state); OM_uint32 gss_seal (OM_uint32 * minor_status, gss_ctx_id_t context_handle, int conf_req_flag, int qop_req, gss_buffer_t input_message_buffer, int *conf_state, gss_buffer_t output_message_buffer); OM_uint32 gss_unseal (OM_uint32 * minor_status, gss_ctx_id_t context_handle, gss_buffer_t input_message_buffer, gss_buffer_t output_message_buffer, int *conf_state, int *qop_state); /* RFC 5801 SASL GS2 interfaces. */ OM_uint32 gss_inquire_saslname_for_mech (OM_uint32 * minor_status, const gss_OID desired_mech, gss_buffer_t sasl_mech_name, gss_buffer_t mech_name, gss_buffer_t mech_description); OM_uint32 gss_inquire_mech_for_saslname (OM_uint32 * minor_status, const gss_buffer_t sasl_mech_name, gss_OID * mech_type); /* RFC 5587 const typedefs. */ typedef const gss_buffer_desc *gss_const_buffer_t; typedef const struct gss_channel_bindings_struct *gss_const_channel_bindings_t; typedef const struct gss_ctx_id_struct *gss_const_ctx_id_t; typedef const struct gss_cred_id_struct *gss_const_cred_id_t; typedef const struct gss_name_struct *gss_const_name_t; typedef const gss_OID_desc *gss_const_OID; typedef const gss_OID_set_desc *gss_const_OID_set; /* RFC 6339 interfaces. */ extern int gss_oid_equal (gss_const_OID first_oid, gss_const_OID second_oid); OM_uint32 gss_encapsulate_token (gss_const_buffer_t input_token, gss_const_OID token_oid, gss_buffer_t output_token); OM_uint32 gss_decapsulate_token (gss_const_buffer_t input_token, gss_const_OID token_oid, gss_buffer_t output_token); #endif /* GSSAPI_H_ */ �������������������������������������������������������������������gss-1.0.3/lib/headers/gss/ext.h���������������������������������������������������������������������0000664�0000000�0000000�00000003141�12415506237�013132� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* ext.h --- Header file for non-standard GSS-API functions. * Copyright (C) 2003-2014 Simon Josefsson * * This file is part of the Generic Security Service (GSS). * * GSS 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. * * GSS 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 GSS; if not, see http://www.gnu.org/licenses or write to * the Free Software Foundation, Inc., 51 Franklin Street, Fifth * Floor, Boston, MA 02110-1301, USA. * */ #ifndef GSS_EXT_H_ #define GSS_EXT_H_ /* Get size_t. */ #include <stddef.h> /* See version.c. */ extern const char *gss_check_version (const char *req_version); /* See ext.c. */ extern int gss_userok (const gss_name_t name, const char *username); /* Static versions of the public OIDs for use, e.g., in static variable initalization. See oid.c. */ extern gss_OID_desc GSS_C_NT_USER_NAME_static; extern gss_OID_desc GSS_C_NT_MACHINE_UID_NAME_static; extern gss_OID_desc GSS_C_NT_STRING_UID_NAME_static; extern gss_OID_desc GSS_C_NT_HOSTBASED_SERVICE_X_static; extern gss_OID_desc GSS_C_NT_HOSTBASED_SERVICE_static; extern gss_OID_desc GSS_C_NT_ANONYMOUS_static; extern gss_OID_desc GSS_C_NT_EXPORT_NAME_static; #endif �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gss-1.0.3/lib/headers/gss/krb5.h��������������������������������������������������������������������0000664�0000000�0000000�00000010207�12415506237�013176� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* gss/krb5.h --- Header file for Kerberos 5 GSS-API mechanism. * Copyright (C) 2003-2014 Simon Josefsson * * This file is part of the Generic Security Service (GSS). * * GSS 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. * * GSS 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 GSS; if not, see http://www.gnu.org/licenses or write to * the Free Software Foundation, Inc., 51 Franklin Street, Fifth * Floor, Boston, MA 02110-1301, USA. * */ /* * This file contains official Kerberos V5 GSS-API mechanism related * prototypes defined as in RFC 1964 and RFC 4121. For GNU GSS * specific extensions, see gss/krb5-ext.h. * */ #ifndef GSS_KRB5_H # define GSS_KRB5_H /* 4.1.1. Non-Kerberos-specific codes */ #define GSS_KRB5_S_G_BAD_SERVICE_NAME 1 /* "No @ in SERVICE-NAME name string" */ #define GSS_KRB5_S_G_BAD_STRING_UID 2 /* "STRING-UID-NAME contains nondigits" */ #define GSS_KRB5_S_G_NOUSER 3 /* "UID does not resolve to username" */ #define GSS_KRB5_S_G_VALIDATE_FAILED 4 /* "Validation error" */ #define GSS_KRB5_S_G_BUFFER_ALLOC 5 /* "Couldn't allocate gss_buffer_t data" */ #define GSS_KRB5_S_G_BAD_MSG_CTX 6 /* "Message context invalid" */ #define GSS_KRB5_S_G_WRONG_SIZE 7 /* "Buffer is the wrong size" */ #define GSS_KRB5_S_G_BAD_USAGE 8 /* "Credential usage type is unknown" */ #define GSS_KRB5_S_G_UNKNOWN_QOP 9 /* "Unknown quality of protection specified" */ /* 4.1.2. Kerberos-specific-codes */ #define GSS_KRB5_S_KG_CCACHE_NOMATCH 10 /* "Principal in credential cache does not match desired name" */ #define GSS_KRB5_S_KG_KEYTAB_NOMATCH 11 /* "No principal in keytab matches desired name" */ #define GSS_KRB5_S_KG_TGT_MISSING 12 /* "Credential cache has no TGT" */ #define GSS_KRB5_S_KG_NO_SUBKEY 13 /* "Authenticator has no subkey" */ #define GSS_KRB5_S_KG_CONTEXT_ESTABLISHED 14 /* "Context is already fully established" */ #define GSS_KRB5_S_KG_BAD_SIGN_TYPE 15 /* "Unknown signature type in token" */ #define GSS_KRB5_S_KG_BAD_LENGTH 16 /* "Invalid field length in token" */ #define GSS_KRB5_S_KG_CTX_INCOMPLETE 17 /* "Attempt to use incomplete security context" */ /* * This name form shall be represented by the Object Identifier * {iso(1) member-body(2) United States(840) mit(113554) infosys(1) * gssapi(2) generic(1) user_name(1)}. The recommended symbolic name * for this type is "GSS_KRB5_NT_USER_NAME". */ extern gss_OID GSS_KRB5_NT_USER_NAME; /* * This name form shall be represented by the Object Identifier * {iso(1) member-body(2) United States(840) mit(113554) infosys(1) * gssapi(2) generic(1) service_name(4)}. The previously recommended * symbolic name for this type is * "GSS_KRB5_NT_HOSTBASED_SERVICE_NAME". The currently preferred * symbolic name for this type is "GSS_C_NT_HOSTBASED_SERVICE". */ extern gss_OID GSS_KRB5_NT_HOSTBASED_SERVICE_NAME; /* * This name form shall be represented by the Object Identifier * {iso(1) member-body(2) United States(840) mit(113554) infosys(1) * gssapi(2) krb5(2) krb5_name(1)}. The recommended symbolic name for * this type is "GSS_KRB5_NT_PRINCIPAL_NAME". */ extern gss_OID GSS_KRB5_NT_PRINCIPAL_NAME; /* * This name form shall be represented by the Object Identifier * {iso(1) member-body(2) United States(840) mit(113554) infosys(1) * gssapi(2) generic(1) machine_uid_name(2)}. The recommended * symbolic name for this type is "GSS_KRB5_NT_MACHINE_UID_NAME". */ extern gss_OID GSS_KRB5_NT_MACHINE_UID_NAME; /* * This name form shall be represented by the Object Identifier * {iso(1) member-body(2) United States(840) mit(113554) infosys(1) * gssapi(2) generic(1) string_uid_name(3)}. The recommended symbolic * name for this type is "GSS_KRB5_NT_STRING_UID_NAME". */ extern gss_OID GSS_KRB5_NT_STRING_UID_NAME; #endif /* GSS_KRB5_H */ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gss-1.0.3/lib/headers/gss.h�������������������������������������������������������������������������0000644�0000000�0000000�00000004707�12415507641�012341� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* gss.h --- Header file for GSSLib. -*- c -*- * Copyright (C) 2003-2014 Simon Josefsson * * This file is part of the Generic Security Service (GSS). * * GSS 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. * * GSS 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 GSS; if not, see http://www.gnu.org/licenses or write to * the Free Software Foundation, Inc., 51 Franklin Street, Fifth * Floor, Boston, MA 02110-1301, USA. * */ #ifndef _GSS_H #define _GSS_H # ifdef __cplusplus extern "C" { # endif /** * GSS_VERSION * * Pre-processor symbol with a string that describe the header file * version number. Used together with gss_check_version() to verify * header file and run-time library consistency. */ # define GSS_VERSION "1.0.3" /** * GSS_VERSION_MAJOR * * Pre-processor symbol with a decimal value that describe the major * level of the header file version number. For example, when the * header version is 1.2.3 this symbol will be 1. */ # define GSS_VERSION_MAJOR 1 /** * GSS_VERSION_MINOR * * Pre-processor symbol with a decimal value that describe the minor * level of the header file version number. For example, when the * header version is 1.2.3 this symbol will be 2. */ # define GSS_VERSION_MINOR 0 /** * GSS_VERSION_PATCH * * Pre-processor symbol with a decimal value that describe the patch * level of the header file version number. For example, when the * header version is 1.2.3 this symbol will be 3. */ # define GSS_VERSION_PATCH 3 /** * GSS_VERSION_NUMBER * * Pre-processor symbol with a hexadecimal value describing the * header file version number. For example, when the header version * is 1.2.3 this symbol will have the value 0x010203. */ # define GSS_VERSION_NUMBER 0x010003 # include <gss/api.h> # include <gss/ext.h> /* *INDENT-OFF* */ # include <gss/krb5.h> # include <gss/krb5-ext.h> /* *INDENT-ON* */ # ifdef __cplusplus } # endif #endif /* _GSS_H */ ���������������������������������������������������������gss-1.0.3/lib/headers/gss.h.in����������������������������������������������������������������������0000664�0000000�0000000�00000004765�12415506237�012754� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* gss.h --- Header file for GSSLib. -*- c -*- * Copyright (C) 2003-2014 Simon Josefsson * * This file is part of the Generic Security Service (GSS). * * GSS 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. * * GSS 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 GSS; if not, see http://www.gnu.org/licenses or write to * the Free Software Foundation, Inc., 51 Franklin Street, Fifth * Floor, Boston, MA 02110-1301, USA. * */ #ifndef _GSS_H #define _GSS_H # ifdef __cplusplus extern "C" { # endif /** * GSS_VERSION * * Pre-processor symbol with a string that describe the header file * version number. Used together with gss_check_version() to verify * header file and run-time library consistency. */ # define GSS_VERSION "@VERSION@" /** * GSS_VERSION_MAJOR * * Pre-processor symbol with a decimal value that describe the major * level of the header file version number. For example, when the * header version is 1.2.3 this symbol will be 1. */ # define GSS_VERSION_MAJOR @VERSION_MAJOR@ /** * GSS_VERSION_MINOR * * Pre-processor symbol with a decimal value that describe the minor * level of the header file version number. For example, when the * header version is 1.2.3 this symbol will be 2. */ # define GSS_VERSION_MINOR @VERSION_MINOR@ /** * GSS_VERSION_PATCH * * Pre-processor symbol with a decimal value that describe the patch * level of the header file version number. For example, when the * header version is 1.2.3 this symbol will be 3. */ # define GSS_VERSION_PATCH @VERSION_PATCH@ /** * GSS_VERSION_NUMBER * * Pre-processor symbol with a hexadecimal value describing the * header file version number. For example, when the header version * is 1.2.3 this symbol will have the value 0x010203. */ # define GSS_VERSION_NUMBER @VERSION_NUMBER@ # include <gss/api.h> # include <gss/ext.h> /* *INDENT-OFF* */ @INCLUDE_GSS_KRB5@ @INCLUDE_GSS_KRB5_EXT@ /* *INDENT-ON* */ # ifdef __cplusplus } # endif #endif /* _GSS_H */ �����������gss-1.0.3/lib/oid.c���������������������������������������������������������������������������������0000664�0000000�0000000�00000013772�12415506237�010704� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* oid.c --- Definition of static GSS-API OIDs. * Copyright (C) 2003-2014 Simon Josefsson * * This file is part of the Generic Security Service (GSS). * * GSS 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. * * GSS 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 GSS; if not, see http://www.gnu.org/licenses or write to * the Free Software Foundation, Inc., 51 Franklin Street, Fifth * Floor, Boston, MA 02110-1301, USA. * */ #include "internal.h" /* * The implementation must reserve static storage for a * gss_OID_desc object containing the value * {10, (void *)"\x2a\x86\x48\x86\xf7\x12" * "\x01\x02\x01\x01"}, * corresponding to an object-identifier value of * {iso(1) member-body(2) United States(840) mit(113554) * infosys(1) gssapi(2) generic(1) user_name(1)}. The constant * GSS_C_NT_USER_NAME should be initialized to point * to that gss_OID_desc. */ gss_OID_desc GSS_C_NT_USER_NAME_static = { 10, (void *) "\x2a\x86\x48\x86\xf7\x12\x01\x02\x01\x01" }; gss_OID GSS_C_NT_USER_NAME = &GSS_C_NT_USER_NAME_static; /* * The implementation must reserve static storage for a * gss_OID_desc object containing the value * {10, (void *)"\x2a\x86\x48\x86\xf7\x12" * "\x01\x02\x01\x02"}, * corresponding to an object-identifier value of * {iso(1) member-body(2) United States(840) mit(113554) * infosys(1) gssapi(2) generic(1) machine_uid_name(2)}. * The constant GSS_C_NT_MACHINE_UID_NAME should be * initialized to point to that gss_OID_desc. */ gss_OID_desc GSS_C_NT_MACHINE_UID_NAME_static = { 10, (void *) "\x2a\x86\x48\x86\xf7\x12\x01\x02\x01\x02" }; gss_OID GSS_C_NT_MACHINE_UID_NAME = &GSS_C_NT_MACHINE_UID_NAME_static; /* * The implementation must reserve static storage for a * gss_OID_desc object containing the value * {10, (void *)"\x2a\x86\x48\x86\xf7\x12" * "\x01\x02\x01\x03"}, * corresponding to an object-identifier value of * {iso(1) member-body(2) United States(840) mit(113554) * infosys(1) gssapi(2) generic(1) string_uid_name(3)}. * The constant GSS_C_NT_STRING_UID_NAME should be * initialized to point to that gss_OID_desc. */ gss_OID_desc GSS_C_NT_STRING_UID_NAME_static = { 10, (void *) "\x2a\x86\x48\x86\xf7\x12\x01\x02\x01\x03" }; gss_OID GSS_C_NT_STRING_UID_NAME = &GSS_C_NT_STRING_UID_NAME_static; /* * The implementation must reserve static storage for a * gss_OID_desc object containing the value * {6, (void *)"\x2b\x06\x01\x05\x06\x02"}, * corresponding to an object-identifier value of * {iso(1) org(3) dod(6) internet(1) security(5) * nametypes(6) gss-host-based-services(2)). The constant * GSS_C_NT_HOSTBASED_SERVICE_X should be initialized to point * to that gss_OID_desc. This is a deprecated OID value, and * implementations wishing to support hostbased-service names * should instead use the GSS_C_NT_HOSTBASED_SERVICE OID, * defined below, to identify such names; * GSS_C_NT_HOSTBASED_SERVICE_X should be accepted a synonym * for GSS_C_NT_HOSTBASED_SERVICE when presented as an input * parameter, but should not be emitted by GSS-API * implementations */ gss_OID_desc GSS_C_NT_HOSTBASED_SERVICE_X_static = { 6, (void *) "\x2b\x06\x01\x05\x06\x02" }; gss_OID GSS_C_NT_HOSTBASED_SERVICE_X = &GSS_C_NT_HOSTBASED_SERVICE_X_static; /* * The implementation must reserve static storage for a * gss_OID_desc object containing the value * {10, (void *)"\x2a\x86\x48\x86\xf7\x12" * "\x01\x02\x01\x04"}, corresponding to an * object-identifier value of {iso(1) member-body(2) * Unites States(840) mit(113554) infosys(1) gssapi(2) * generic(1) service_name(4)}. The constant * GSS_C_NT_HOSTBASED_SERVICE should be initialized * to point to that gss_OID_desc. */ gss_OID_desc GSS_C_NT_HOSTBASED_SERVICE_static = { 10, (void *) "\x2a\x86\x48\x86\xf7\x12\x01\x02\x01\x04" }; gss_OID GSS_C_NT_HOSTBASED_SERVICE = &GSS_C_NT_HOSTBASED_SERVICE_static; /* * The implementation must reserve static storage for a * gss_OID_desc object containing the value * {6, (void *)"\x2b\x06\01\x05\x06\x03"}, * corresponding to an object identifier value of * {1(iso), 3(org), 6(dod), 1(internet), 5(security), * 6(nametypes), 3(gss-anonymous-name)}. The constant * and GSS_C_NT_ANONYMOUS should be initialized to point * to that gss_OID_desc. */ gss_OID_desc GSS_C_NT_ANONYMOUS_static = { 6, (void *) "\x2b\x06\01\x05\x06\x03" }; gss_OID GSS_C_NT_ANONYMOUS = &GSS_C_NT_ANONYMOUS_static; /* * The implementation must reserve static storage for a * gss_OID_desc object containing the value * {6, (void *)"\x2b\x06\x01\x05\x06\x04"}, * corresponding to an object-identifier value of * {1(iso), 3(org), 6(dod), 1(internet), 5(security), * 6(nametypes), 4(gss-api-exported-name)}. The constant * GSS_C_NT_EXPORT_NAME should be initialized to point * to that gss_OID_desc. */ gss_OID_desc GSS_C_NT_EXPORT_NAME_static = { 6, (void *) "\x2b\x06\x01\x05\x06\x04" }; gss_OID GSS_C_NT_EXPORT_NAME = &GSS_C_NT_EXPORT_NAME_static; /** * gss_oid_equal: * @first_oid: (Object ID, read) First Object identifier. * @second_oid: (Object ID, read) First Object identifier. * * Compare two OIDs for equality. The comparison is "deep", i.e., the * actual byte sequences of the OIDs are compared instead of just the * pointer equality. This function is standardized in RFC 6339. * * Return value: Returns boolean value true when the two OIDs are * equal, otherwise false. **/ int gss_oid_equal (gss_const_OID first_oid, gss_const_OID second_oid) { return first_oid && second_oid && first_oid->length == second_oid->length && memcmp (first_oid->elements, second_oid->elements, second_oid->length) == 0; } ������gss-1.0.3/lib/Makefile.in���������������������������������������������������������������������������0000644�0000000�0000000�00000132241�12415507621�012017� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Makefile.in generated by automake 1.14.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 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) 2003-2014 Simon Josefsson # # This file is part of the Generic Security Service (GSS). # # GSS 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. # # GSS 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 GSS; if not, see http://www.gnu.org/licenses or write to # the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, # Boston, MA 02110-1301, USA. VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ @HAVE_LD_VERSION_SCRIPT_TRUE@am__append_1 = -Wl,--version-script=$(srcdir)/libgss.map @HAVE_LD_VERSION_SCRIPT_FALSE@am__append_2 = -export-symbols-regex '^(gss|GSS).*' @HAVE_LD_OUTPUT_DEF_TRUE@am__append_3 = -Wl,--output-def,libgss-$(DLL_VERSION).def @KRB5_TRUE@am__append_4 = krb5 @KRB5_TRUE@am__append_5 = headers/gss/krb5.h headers/gss/krb5-ext.h @KRB5_TRUE@am__append_6 = krb5/libgss-shishi.la subdir = lib DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(top_srcdir)/build-aux/depcomp $(am__gssinclude_HEADERS_DIST) \ $(include_HEADERS) ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/src/gl/m4/base64.m4 \ $(top_srcdir)/src/gl/m4/errno_h.m4 \ $(top_srcdir)/src/gl/m4/error.m4 \ $(top_srcdir)/src/gl/m4/getopt.m4 \ $(top_srcdir)/src/gl/m4/gnulib-comp.m4 \ $(top_srcdir)/src/gl/m4/memchr.m4 \ $(top_srcdir)/src/gl/m4/mmap-anon.m4 \ $(top_srcdir)/src/gl/m4/msvc-inval.m4 \ $(top_srcdir)/src/gl/m4/msvc-nothrow.m4 \ $(top_srcdir)/src/gl/m4/nocrash.m4 \ $(top_srcdir)/src/gl/m4/off_t.m4 \ $(top_srcdir)/src/gl/m4/ssize_t.m4 \ $(top_srcdir)/src/gl/m4/stdarg.m4 \ $(top_srcdir)/src/gl/m4/stdbool.m4 \ $(top_srcdir)/src/gl/m4/stdio_h.m4 \ $(top_srcdir)/src/gl/m4/strerror.m4 \ $(top_srcdir)/src/gl/m4/sys_socket_h.m4 \ $(top_srcdir)/src/gl/m4/sys_types_h.m4 \ $(top_srcdir)/src/gl/m4/unistd_h.m4 \ $(top_srcdir)/src/gl/m4/version-etc.m4 \ $(top_srcdir)/lib/gl/m4/absolute-header.m4 \ $(top_srcdir)/lib/gl/m4/extensions.m4 \ $(top_srcdir)/lib/gl/m4/gnulib-comp.m4 \ $(top_srcdir)/lib/gl/m4/include_next.m4 \ $(top_srcdir)/lib/gl/m4/ld-output-def.m4 \ $(top_srcdir)/lib/gl/m4/stddef_h.m4 \ $(top_srcdir)/lib/gl/m4/string_h.m4 \ $(top_srcdir)/lib/gl/m4/strverscmp.m4 \ $(top_srcdir)/lib/gl/m4/warn-on-use.m4 \ $(top_srcdir)/gl/m4/00gnulib.m4 \ $(top_srcdir)/gl/m4/autobuild.m4 \ $(top_srcdir)/gl/m4/gnulib-common.m4 \ $(top_srcdir)/gl/m4/gnulib-comp.m4 \ $(top_srcdir)/gl/m4/ld-version-script.m4 \ $(top_srcdir)/gl/m4/manywarnings.m4 \ $(top_srcdir)/gl/m4/valgrind-tests.m4 \ $(top_srcdir)/gl/m4/warnings.m4 \ $(top_srcdir)/m4/extern-inline.m4 $(top_srcdir)/m4/gettext.m4 \ $(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \ $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.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/nls.m4 \ $(top_srcdir)/m4/pkg.m4 $(top_srcdir)/m4/po-suffix.m4 \ $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \ $(top_srcdir)/m4/wchar_t.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__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(defexecdir)" \ "$(DESTDIR)$(gssincludedir)" "$(DESTDIR)$(includedir)" LTLIBRARIES = $(lib_LTLIBRARIES) libgss_la_DEPENDENCIES = gl/libgnu.la $(am__append_6) am_libgss_la_OBJECTS = meta.lo context.lo cred.lo error.lo misc.lo \ msg.lo name.lo obsolete.lo oid.lo asn1.lo ext.lo version.lo \ saslname.lo libgss_la_OBJECTS = $(am_libgss_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = libgss_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(libgss_la_LDFLAGS) $(LDFLAGS) -o $@ AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = 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) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libgss_la_SOURCES) DIST_SOURCES = $(libgss_la_SOURCES) RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac DATA = $(defexec_DATA) am__gssinclude_HEADERS_DIST = headers/gss/api.h headers/gss/ext.h \ headers/gss/krb5.h headers/gss/krb5-ext.h HEADERS = $(gssinclude_HEADERS) $(include_HEADERS) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ distdir am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DIST_SUBDIRS = gl krb5 DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ ARFLAGS = @ARFLAGS@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CONFIG_INCLUDE = @CONFIG_INCLUDE@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = -DLOCALEDIR=\"$(localedir)\" @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DLL_VERSION = @DLL_VERSION@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EMULTIHOP_HIDDEN = @EMULTIHOP_HIDDEN@ EMULTIHOP_VALUE = @EMULTIHOP_VALUE@ ENOLINK_HIDDEN = @ENOLINK_HIDDEN@ ENOLINK_VALUE = @ENOLINK_VALUE@ EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@ EOVERFLOW_VALUE = @EOVERFLOW_VALUE@ ERRNO_H = @ERRNO_H@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GETOPT_H = @GETOPT_H@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GNULIB_CHDIR = @GNULIB_CHDIR@ GNULIB_CHOWN = @GNULIB_CHOWN@ GNULIB_CLOSE = @GNULIB_CLOSE@ GNULIB_DPRINTF = @GNULIB_DPRINTF@ GNULIB_DUP = @GNULIB_DUP@ GNULIB_DUP2 = @GNULIB_DUP2@ GNULIB_DUP3 = @GNULIB_DUP3@ GNULIB_ENVIRON = @GNULIB_ENVIRON@ GNULIB_EUIDACCESS = @GNULIB_EUIDACCESS@ GNULIB_FACCESSAT = @GNULIB_FACCESSAT@ GNULIB_FCHDIR = @GNULIB_FCHDIR@ GNULIB_FCHOWNAT = @GNULIB_FCHOWNAT@ GNULIB_FCLOSE = @GNULIB_FCLOSE@ GNULIB_FDATASYNC = @GNULIB_FDATASYNC@ GNULIB_FDOPEN = @GNULIB_FDOPEN@ GNULIB_FFLUSH = @GNULIB_FFLUSH@ GNULIB_FFSL = @GNULIB_FFSL@ GNULIB_FFSLL = @GNULIB_FFSLL@ GNULIB_FGETC = @GNULIB_FGETC@ GNULIB_FGETS = @GNULIB_FGETS@ GNULIB_FOPEN = @GNULIB_FOPEN@ GNULIB_FPRINTF = @GNULIB_FPRINTF@ GNULIB_FPRINTF_POSIX = @GNULIB_FPRINTF_POSIX@ GNULIB_FPURGE = @GNULIB_FPURGE@ GNULIB_FPUTC = @GNULIB_FPUTC@ GNULIB_FPUTS = @GNULIB_FPUTS@ GNULIB_FREAD = @GNULIB_FREAD@ GNULIB_FREOPEN = @GNULIB_FREOPEN@ GNULIB_FSCANF = @GNULIB_FSCANF@ GNULIB_FSEEK = @GNULIB_FSEEK@ GNULIB_FSEEKO = @GNULIB_FSEEKO@ GNULIB_FSYNC = @GNULIB_FSYNC@ GNULIB_FTELL = @GNULIB_FTELL@ GNULIB_FTELLO = @GNULIB_FTELLO@ GNULIB_FTRUNCATE = @GNULIB_FTRUNCATE@ GNULIB_FWRITE = @GNULIB_FWRITE@ GNULIB_GETC = @GNULIB_GETC@ GNULIB_GETCHAR = @GNULIB_GETCHAR@ GNULIB_GETCWD = @GNULIB_GETCWD@ GNULIB_GETDELIM = @GNULIB_GETDELIM@ GNULIB_GETDOMAINNAME = @GNULIB_GETDOMAINNAME@ GNULIB_GETDTABLESIZE = @GNULIB_GETDTABLESIZE@ GNULIB_GETGROUPS = @GNULIB_GETGROUPS@ GNULIB_GETHOSTNAME = @GNULIB_GETHOSTNAME@ GNULIB_GETLINE = @GNULIB_GETLINE@ GNULIB_GETLOGIN = @GNULIB_GETLOGIN@ GNULIB_GETLOGIN_R = @GNULIB_GETLOGIN_R@ GNULIB_GETPAGESIZE = @GNULIB_GETPAGESIZE@ GNULIB_GETUSERSHELL = @GNULIB_GETUSERSHELL@ GNULIB_GL_SRCGL_UNISTD_H_GETOPT = @GNULIB_GL_SRCGL_UNISTD_H_GETOPT@ GNULIB_GROUP_MEMBER = @GNULIB_GROUP_MEMBER@ GNULIB_ISATTY = @GNULIB_ISATTY@ GNULIB_LCHOWN = @GNULIB_LCHOWN@ GNULIB_LINK = @GNULIB_LINK@ GNULIB_LINKAT = @GNULIB_LINKAT@ GNULIB_LSEEK = @GNULIB_LSEEK@ GNULIB_MBSCASECMP = @GNULIB_MBSCASECMP@ GNULIB_MBSCASESTR = @GNULIB_MBSCASESTR@ GNULIB_MBSCHR = @GNULIB_MBSCHR@ GNULIB_MBSCSPN = @GNULIB_MBSCSPN@ GNULIB_MBSLEN = @GNULIB_MBSLEN@ GNULIB_MBSNCASECMP = @GNULIB_MBSNCASECMP@ GNULIB_MBSNLEN = @GNULIB_MBSNLEN@ GNULIB_MBSPBRK = @GNULIB_MBSPBRK@ GNULIB_MBSPCASECMP = @GNULIB_MBSPCASECMP@ GNULIB_MBSRCHR = @GNULIB_MBSRCHR@ GNULIB_MBSSEP = @GNULIB_MBSSEP@ GNULIB_MBSSPN = @GNULIB_MBSSPN@ GNULIB_MBSSTR = @GNULIB_MBSSTR@ GNULIB_MBSTOK_R = @GNULIB_MBSTOK_R@ GNULIB_MEMCHR = @GNULIB_MEMCHR@ GNULIB_MEMMEM = @GNULIB_MEMMEM@ GNULIB_MEMPCPY = @GNULIB_MEMPCPY@ GNULIB_MEMRCHR = @GNULIB_MEMRCHR@ GNULIB_OBSTACK_PRINTF = @GNULIB_OBSTACK_PRINTF@ GNULIB_OBSTACK_PRINTF_POSIX = @GNULIB_OBSTACK_PRINTF_POSIX@ GNULIB_PCLOSE = @GNULIB_PCLOSE@ GNULIB_PERROR = @GNULIB_PERROR@ GNULIB_PIPE = @GNULIB_PIPE@ GNULIB_PIPE2 = @GNULIB_PIPE2@ GNULIB_POPEN = @GNULIB_POPEN@ GNULIB_PREAD = @GNULIB_PREAD@ GNULIB_PRINTF = @GNULIB_PRINTF@ GNULIB_PRINTF_POSIX = @GNULIB_PRINTF_POSIX@ GNULIB_PUTC = @GNULIB_PUTC@ GNULIB_PUTCHAR = @GNULIB_PUTCHAR@ GNULIB_PUTS = @GNULIB_PUTS@ GNULIB_PWRITE = @GNULIB_PWRITE@ GNULIB_RAWMEMCHR = @GNULIB_RAWMEMCHR@ GNULIB_READ = @GNULIB_READ@ GNULIB_READLINK = @GNULIB_READLINK@ GNULIB_READLINKAT = @GNULIB_READLINKAT@ GNULIB_REMOVE = @GNULIB_REMOVE@ GNULIB_RENAME = @GNULIB_RENAME@ GNULIB_RENAMEAT = @GNULIB_RENAMEAT@ GNULIB_RMDIR = @GNULIB_RMDIR@ GNULIB_SCANF = @GNULIB_SCANF@ GNULIB_SETHOSTNAME = @GNULIB_SETHOSTNAME@ GNULIB_SLEEP = @GNULIB_SLEEP@ GNULIB_SNPRINTF = @GNULIB_SNPRINTF@ GNULIB_SPRINTF_POSIX = @GNULIB_SPRINTF_POSIX@ GNULIB_STDIO_H_NONBLOCKING = @GNULIB_STDIO_H_NONBLOCKING@ GNULIB_STDIO_H_SIGPIPE = @GNULIB_STDIO_H_SIGPIPE@ GNULIB_STPCPY = @GNULIB_STPCPY@ GNULIB_STPNCPY = @GNULIB_STPNCPY@ GNULIB_STRCASESTR = @GNULIB_STRCASESTR@ GNULIB_STRCHRNUL = @GNULIB_STRCHRNUL@ GNULIB_STRDUP = @GNULIB_STRDUP@ GNULIB_STRERROR = @GNULIB_STRERROR@ GNULIB_STRERROR_R = @GNULIB_STRERROR_R@ GNULIB_STRNCAT = @GNULIB_STRNCAT@ GNULIB_STRNDUP = @GNULIB_STRNDUP@ GNULIB_STRNLEN = @GNULIB_STRNLEN@ GNULIB_STRPBRK = @GNULIB_STRPBRK@ GNULIB_STRSEP = @GNULIB_STRSEP@ GNULIB_STRSIGNAL = @GNULIB_STRSIGNAL@ GNULIB_STRSTR = @GNULIB_STRSTR@ GNULIB_STRTOK_R = @GNULIB_STRTOK_R@ GNULIB_STRVERSCMP = @GNULIB_STRVERSCMP@ GNULIB_SYMLINK = @GNULIB_SYMLINK@ GNULIB_SYMLINKAT = @GNULIB_SYMLINKAT@ GNULIB_TMPFILE = @GNULIB_TMPFILE@ GNULIB_TTYNAME_R = @GNULIB_TTYNAME_R@ GNULIB_UNISTD_H_NONBLOCKING = @GNULIB_UNISTD_H_NONBLOCKING@ GNULIB_UNISTD_H_SIGPIPE = @GNULIB_UNISTD_H_SIGPIPE@ GNULIB_UNLINK = @GNULIB_UNLINK@ GNULIB_UNLINKAT = @GNULIB_UNLINKAT@ GNULIB_USLEEP = @GNULIB_USLEEP@ GNULIB_VASPRINTF = @GNULIB_VASPRINTF@ GNULIB_VDPRINTF = @GNULIB_VDPRINTF@ GNULIB_VFPRINTF = @GNULIB_VFPRINTF@ GNULIB_VFPRINTF_POSIX = @GNULIB_VFPRINTF_POSIX@ GNULIB_VFSCANF = @GNULIB_VFSCANF@ GNULIB_VPRINTF = @GNULIB_VPRINTF@ GNULIB_VPRINTF_POSIX = @GNULIB_VPRINTF_POSIX@ GNULIB_VSCANF = @GNULIB_VSCANF@ GNULIB_VSNPRINTF = @GNULIB_VSNPRINTF@ GNULIB_VSPRINTF_POSIX = @GNULIB_VSPRINTF_POSIX@ GNULIB_WRITE = @GNULIB_WRITE@ GREP = @GREP@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ HAVE_CHOWN = @HAVE_CHOWN@ HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@ HAVE_DECL_FCHDIR = @HAVE_DECL_FCHDIR@ HAVE_DECL_FDATASYNC = @HAVE_DECL_FDATASYNC@ HAVE_DECL_FPURGE = @HAVE_DECL_FPURGE@ HAVE_DECL_FSEEKO = @HAVE_DECL_FSEEKO@ HAVE_DECL_FTELLO = @HAVE_DECL_FTELLO@ HAVE_DECL_GETDELIM = @HAVE_DECL_GETDELIM@ HAVE_DECL_GETDOMAINNAME = @HAVE_DECL_GETDOMAINNAME@ HAVE_DECL_GETLINE = @HAVE_DECL_GETLINE@ HAVE_DECL_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_OBSTACK_PRINTF = @HAVE_DECL_OBSTACK_PRINTF@ HAVE_DECL_SETHOSTNAME = @HAVE_DECL_SETHOSTNAME@ HAVE_DECL_SNPRINTF = @HAVE_DECL_SNPRINTF@ HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@ HAVE_DECL_STRERROR_R = @HAVE_DECL_STRERROR_R@ HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@ HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@ HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@ HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@ HAVE_DECL_TTYNAME_R = @HAVE_DECL_TTYNAME_R@ HAVE_DECL_VSNPRINTF = @HAVE_DECL_VSNPRINTF@ HAVE_DPRINTF = @HAVE_DPRINTF@ HAVE_DUP2 = @HAVE_DUP2@ HAVE_DUP3 = @HAVE_DUP3@ HAVE_EUIDACCESS = @HAVE_EUIDACCESS@ HAVE_FACCESSAT = @HAVE_FACCESSAT@ HAVE_FCHDIR = @HAVE_FCHDIR@ HAVE_FCHOWNAT = @HAVE_FCHOWNAT@ HAVE_FDATASYNC = @HAVE_FDATASYNC@ HAVE_FFSL = @HAVE_FFSL@ HAVE_FFSLL = @HAVE_FFSLL@ HAVE_FSEEKO = @HAVE_FSEEKO@ HAVE_FSYNC = @HAVE_FSYNC@ HAVE_FTELLO = @HAVE_FTELLO@ HAVE_FTRUNCATE = @HAVE_FTRUNCATE@ 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_GROUP_MEMBER = @HAVE_GROUP_MEMBER@ HAVE_LCHOWN = @HAVE_LCHOWN@ HAVE_LIBSHISHI = @HAVE_LIBSHISHI@ HAVE_LINK = @HAVE_LINK@ HAVE_LINKAT = @HAVE_LINKAT@ HAVE_MBSLEN = @HAVE_MBSLEN@ HAVE_MEMCHR = @HAVE_MEMCHR@ HAVE_MEMPCPY = @HAVE_MEMPCPY@ HAVE_MSVC_INVALID_PARAMETER_HANDLER = @HAVE_MSVC_INVALID_PARAMETER_HANDLER@ HAVE_OS_H = @HAVE_OS_H@ HAVE_PCLOSE = @HAVE_PCLOSE@ HAVE_PIPE = @HAVE_PIPE@ HAVE_PIPE2 = @HAVE_PIPE2@ HAVE_POPEN = @HAVE_POPEN@ HAVE_PREAD = @HAVE_PREAD@ HAVE_PWRITE = @HAVE_PWRITE@ HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@ HAVE_READLINK = @HAVE_READLINK@ HAVE_READLINKAT = @HAVE_READLINKAT@ HAVE_RENAMEAT = @HAVE_RENAMEAT@ HAVE_SETHOSTNAME = @HAVE_SETHOSTNAME@ HAVE_SLEEP = @HAVE_SLEEP@ 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_STRVERSCMP = @HAVE_STRVERSCMP@ HAVE_SYMLINK = @HAVE_SYMLINK@ HAVE_SYMLINKAT = @HAVE_SYMLINKAT@ HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@ HAVE_UNISTD_H = @HAVE_UNISTD_H@ HAVE_UNLINKAT = @HAVE_UNLINKAT@ HAVE_USLEEP = @HAVE_USLEEP@ HAVE_VASPRINTF = @HAVE_VASPRINTF@ HAVE_VDPRINTF = @HAVE_VDPRINTF@ HAVE_WCHAR_T = @HAVE_WCHAR_T@ HAVE_WINSOCK2_H = @HAVE_WINSOCK2_H@ HAVE__BOOL = @HAVE__BOOL@ HELP2MAN = @HELP2MAN@ HTML_DIR = @HTML_DIR@ INCLUDE_GSS_KRB5 = @INCLUDE_GSS_KRB5@ INCLUDE_GSS_KRB5_EXT = @INCLUDE_GSS_KRB5_EXT@ 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@ INTLLIBS = @INTLLIBS@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBSHISHI = @LIBSHISHI@ LIBSHISHI_PREFIX = @LIBSHISHI_PREFIX@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBOBJS = @LTLIBOBJS@ LTLIBSHISHI = @LTLIBSHISHI@ LT_AGE = @LT_AGE@ LT_CURRENT = @LT_CURRENT@ LT_REVISION = @LT_REVISION@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = @NEXT_AS_FIRST_DIRECTIVE_ERRNO_H@ NEXT_AS_FIRST_DIRECTIVE_GETOPT_H = @NEXT_AS_FIRST_DIRECTIVE_GETOPT_H@ NEXT_AS_FIRST_DIRECTIVE_STDARG_H = @NEXT_AS_FIRST_DIRECTIVE_STDARG_H@ NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@ NEXT_AS_FIRST_DIRECTIVE_STDIO_H = @NEXT_AS_FIRST_DIRECTIVE_STDIO_H@ NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H@ NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@ NEXT_ERRNO_H = @NEXT_ERRNO_H@ NEXT_GETOPT_H = @NEXT_GETOPT_H@ NEXT_STDARG_H = @NEXT_STDARG_H@ NEXT_STDDEF_H = @NEXT_STDDEF_H@ NEXT_STDIO_H = @NEXT_STDIO_H@ NEXT_STRING_H = @NEXT_STRING_H@ NEXT_SYS_TYPES_H = @NEXT_SYS_TYPES_H@ NEXT_UNISTD_H = @NEXT_UNISTD_H@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ PKG_CONFIG = @PKG_CONFIG@ PMCCABE = @PMCCABE@ POSUB = @POSUB@ PO_SUFFIX = @PO_SUFFIX@ PRAGMA_COLUMNS = @PRAGMA_COLUMNS@ PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@ RANLIB = @RANLIB@ REPLACE_CHOWN = @REPLACE_CHOWN@ REPLACE_CLOSE = @REPLACE_CLOSE@ REPLACE_DPRINTF = @REPLACE_DPRINTF@ REPLACE_DUP = @REPLACE_DUP@ REPLACE_DUP2 = @REPLACE_DUP2@ REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@ REPLACE_FCLOSE = @REPLACE_FCLOSE@ REPLACE_FDOPEN = @REPLACE_FDOPEN@ REPLACE_FFLUSH = @REPLACE_FFLUSH@ REPLACE_FOPEN = @REPLACE_FOPEN@ REPLACE_FPRINTF = @REPLACE_FPRINTF@ REPLACE_FPURGE = @REPLACE_FPURGE@ REPLACE_FREOPEN = @REPLACE_FREOPEN@ REPLACE_FSEEK = @REPLACE_FSEEK@ REPLACE_FSEEKO = @REPLACE_FSEEKO@ REPLACE_FTELL = @REPLACE_FTELL@ REPLACE_FTELLO = @REPLACE_FTELLO@ REPLACE_FTRUNCATE = @REPLACE_FTRUNCATE@ REPLACE_GETCWD = @REPLACE_GETCWD@ REPLACE_GETDELIM = @REPLACE_GETDELIM@ REPLACE_GETDOMAINNAME = @REPLACE_GETDOMAINNAME@ REPLACE_GETDTABLESIZE = @REPLACE_GETDTABLESIZE@ REPLACE_GETGROUPS = @REPLACE_GETGROUPS@ REPLACE_GETLINE = @REPLACE_GETLINE@ REPLACE_GETLOGIN_R = @REPLACE_GETLOGIN_R@ REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@ REPLACE_ISATTY = @REPLACE_ISATTY@ REPLACE_LCHOWN = @REPLACE_LCHOWN@ REPLACE_LINK = @REPLACE_LINK@ REPLACE_LINKAT = @REPLACE_LINKAT@ REPLACE_LSEEK = @REPLACE_LSEEK@ REPLACE_MEMCHR = @REPLACE_MEMCHR@ REPLACE_MEMMEM = @REPLACE_MEMMEM@ REPLACE_NULL = @REPLACE_NULL@ REPLACE_OBSTACK_PRINTF = @REPLACE_OBSTACK_PRINTF@ REPLACE_PERROR = @REPLACE_PERROR@ REPLACE_POPEN = @REPLACE_POPEN@ REPLACE_PREAD = @REPLACE_PREAD@ REPLACE_PRINTF = @REPLACE_PRINTF@ REPLACE_PWRITE = @REPLACE_PWRITE@ REPLACE_READ = @REPLACE_READ@ REPLACE_READLINK = @REPLACE_READLINK@ REPLACE_REMOVE = @REPLACE_REMOVE@ REPLACE_RENAME = @REPLACE_RENAME@ REPLACE_RENAMEAT = @REPLACE_RENAMEAT@ REPLACE_RMDIR = @REPLACE_RMDIR@ REPLACE_SLEEP = @REPLACE_SLEEP@ REPLACE_SNPRINTF = @REPLACE_SNPRINTF@ REPLACE_SPRINTF = @REPLACE_SPRINTF@ REPLACE_STDIO_READ_FUNCS = @REPLACE_STDIO_READ_FUNCS@ REPLACE_STDIO_WRITE_FUNCS = @REPLACE_STDIO_WRITE_FUNCS@ REPLACE_STPNCPY = @REPLACE_STPNCPY@ REPLACE_STRCASESTR = @REPLACE_STRCASESTR@ REPLACE_STRCHRNUL = @REPLACE_STRCHRNUL@ REPLACE_STRDUP = @REPLACE_STRDUP@ REPLACE_STRERROR = @REPLACE_STRERROR@ REPLACE_STRERROR_R = @REPLACE_STRERROR_R@ REPLACE_STRNCAT = @REPLACE_STRNCAT@ REPLACE_STRNDUP = @REPLACE_STRNDUP@ REPLACE_STRNLEN = @REPLACE_STRNLEN@ REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@ REPLACE_STRSTR = @REPLACE_STRSTR@ REPLACE_STRTOK_R = @REPLACE_STRTOK_R@ REPLACE_SYMLINK = @REPLACE_SYMLINK@ REPLACE_TMPFILE = @REPLACE_TMPFILE@ REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@ REPLACE_UNLINK = @REPLACE_UNLINK@ REPLACE_UNLINKAT = @REPLACE_UNLINKAT@ REPLACE_USLEEP = @REPLACE_USLEEP@ REPLACE_VASPRINTF = @REPLACE_VASPRINTF@ REPLACE_VDPRINTF = @REPLACE_VDPRINTF@ REPLACE_VFPRINTF = @REPLACE_VFPRINTF@ REPLACE_VPRINTF = @REPLACE_VPRINTF@ REPLACE_VSNPRINTF = @REPLACE_VSNPRINTF@ REPLACE_VSPRINTF = @REPLACE_VSPRINTF@ REPLACE_WRITE = @REPLACE_WRITE@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STDARG_H = @STDARG_H@ STDBOOL_H = @STDBOOL_H@ STDDEF_H = @STDDEF_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@ USE_NLS = @USE_NLS@ VALGRIND = @VALGRIND@ VERSION = @VERSION@ VERSION_MAJOR = @VERSION_MAJOR@ VERSION_MINOR = @VERSION_MINOR@ VERSION_NUMBER = @VERSION_NUMBER@ VERSION_PATCH = @VERSION_PATCH@ WARN_CFLAGS = @WARN_CFLAGS@ WERROR_CFLAGS = @WERROR_CFLAGS@ WINDOWS_64_BIT_OFF_T = @WINDOWS_64_BIT_OFF_T@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gl_LIBOBJS = @gl_LIBOBJS@ gl_LTLIBOBJS = @gl_LTLIBOBJS@ gltests_LIBOBJS = @gltests_LIBOBJS@ gltests_LTLIBOBJS = @gltests_LTLIBOBJS@ gltests_WITNESS = @gltests_WITNESS@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ libgl_LIBOBJS = @libgl_LIBOBJS@ libgl_LTLIBOBJS = @libgl_LTLIBOBJS@ libgltests_LIBOBJS = @libgltests_LIBOBJS@ libgltests_LTLIBOBJS = @libgltests_LTLIBOBJS@ libgltests_WITNESS = @libgltests_WITNESS@ localedir = $(datadir)/locale localstatedir = @localstatedir@ 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@ srcgl_LIBOBJS = @srcgl_LIBOBJS@ srcgl_LTLIBOBJS = @srcgl_LTLIBOBJS@ srcgltests_LIBOBJS = @srcgltests_LIBOBJS@ srcgltests_LTLIBOBJS = @srcgltests_LTLIBOBJS@ srcgltests_WITNESS = @srcgltests_WITNESS@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ SUBDIRS = gl $(am__append_4) AM_CFLAGS = $(WARN_CFLAGS) $(WERROR_CFLAGS) AM_CPPFLAGS = -I$(top_srcdir)/lib/gl \ -I$(top_builddir)/lib/headers -I$(top_srcdir)/lib/headers lib_LTLIBRARIES = libgss.la include_HEADERS = headers/gss.h gssincludedir = $(includedir)/gss gssinclude_HEADERS = headers/gss/api.h headers/gss/ext.h \ $(am__append_5) libgss_la_SOURCES = libgss.map \ internal.h \ meta.h meta.c \ context.c cred.c error.c misc.c msg.c name.c obsolete.c oid.c \ asn1.c ext.c version.c \ saslname.c libgss_la_LIBADD = @LTLIBINTL@ gl/libgnu.la $(am__append_6) libgss_la_LDFLAGS = -no-undefined -version-info \ $(LT_CURRENT):$(LT_REVISION):$(LT_AGE) $(am__append_1) \ $(am__append_2) $(am__append_3) @HAVE_LD_OUTPUT_DEF_TRUE@defexecdir = $(bindir) @HAVE_LD_OUTPUT_DEF_TRUE@defexec_DATA = libgss-$(DLL_VERSION).def @HAVE_LD_OUTPUT_DEF_TRUE@DISTCLEANFILES = $(defexec_DATA) all: 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) --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): install-libLTLIBRARIES: $(lib_LTLIBRARIES) @$(NORMAL_INSTALL) @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 " $(MKDIR_P) '$(DESTDIR)$(libdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(libdir)" || exit 1; \ 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)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libgss.la: $(libgss_la_OBJECTS) $(libgss_la_DEPENDENCIES) $(EXTRA_libgss_la_DEPENDENCIES) $(AM_V_CCLD)$(libgss_la_LINK) -rpath $(libdir) $(libgss_la_OBJECTS) $(libgss_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)/context.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/cred.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/error.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/ext.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/meta.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/misc.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/msg.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/name.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/obsolete.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/oid.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/saslname.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/version.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-defexecDATA: $(defexec_DATA) @$(NORMAL_INSTALL) @list='$(defexec_DATA)'; test -n "$(defexecdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(defexecdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(defexecdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(defexecdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(defexecdir)" || exit $$?; \ done uninstall-defexecDATA: @$(NORMAL_UNINSTALL) @list='$(defexec_DATA)'; test -n "$(defexecdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(defexecdir)'; $(am__uninstall_files_from_dir) install-gssincludeHEADERS: $(gssinclude_HEADERS) @$(NORMAL_INSTALL) @list='$(gssinclude_HEADERS)'; test -n "$(gssincludedir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(gssincludedir)'"; \ $(MKDIR_P) "$(DESTDIR)$(gssincludedir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(gssincludedir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(gssincludedir)" || exit $$?; \ done uninstall-gssincludeHEADERS: @$(NORMAL_UNINSTALL) @list='$(gssinclude_HEADERS)'; test -n "$(gssincludedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(gssincludedir)'; $(am__uninstall_files_from_dir) install-includeHEADERS: $(include_HEADERS) @$(NORMAL_INSTALL) @list='$(include_HEADERS)'; test -n "$(includedir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(includedir)'"; \ $(MKDIR_P) "$(DESTDIR)$(includedir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_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|^.*/||'`; \ dir='$(DESTDIR)$(includedir)'; $(am__uninstall_files_from_dir) # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: check-recursive all-am: Makefile $(LTLIBRARIES) $(DATA) $(HEADERS) installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(defexecdir)" "$(DESTDIR)$(gssincludedir)" "$(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: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) -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." 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-gssincludeHEADERS install-includeHEADERS install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-defexecDATA 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-defexecDATA uninstall-gssincludeHEADERS \ uninstall-includeHEADERS uninstall-libLTLIBRARIES .MAKE: $(am__recursive_targets) install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ check-am clean clean-generic clean-libLTLIBRARIES \ clean-libtool cscopelist-am ctags ctags-am 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-defexecDATA install-dvi install-dvi-am install-exec \ install-exec-am install-gssincludeHEADERS install-html \ install-html-am install-includeHEADERS install-info \ install-info-am install-libLTLIBRARIES 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 \ pdf pdf-am ps ps-am tags tags-am uninstall uninstall-am \ uninstall-defexecDATA uninstall-gssincludeHEADERS \ uninstall-includeHEADERS uninstall-libLTLIBRARIES # 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: ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gss-1.0.3/lib/version.c�����������������������������������������������������������������������������0000664�0000000�0000000�00000003124�12415506237�011604� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* version.c --- Version handling. * Copyright (C) 2002-2014 Simon Josefsson * * This file is part of the Generic Security Service (GSS). * * GSS 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. * * GSS 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 GSS; if not, see http://www.gnu.org/licenses or write to * the Free Software Foundation, Inc., 51 Franklin Street, Fifth * Floor, Boston, MA 02110-1301, USA. * */ #include "internal.h" #include <string.h> /* for strverscmp */ /** * gss_check_version: * @req_version: version string to compare with, or NULL * * Check that the version of the library is at minimum the one * given as a string in @req_version. * * WARNING: This function is a GNU GSS specific extension, and is not * part of the official GSS API. * * Return value: The actual version string of the library; NULL if the * condition is not met. If NULL is passed to this function no * check is done and only the version string is returned. **/ const char * gss_check_version (const char *req_version) { if (!req_version || strverscmp (req_version, PACKAGE_VERSION) <= 0) return PACKAGE_VERSION; return NULL; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gss-1.0.3/lib/error.c�������������������������������������������������������������������������������0000664�0000000�0000000�00000025265�12415506237�011262� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* error.c --- Error handling functionality. * Copyright (C) 2003-2014 Simon Josefsson * * This file is part of the Generic Security Service (GSS). * * GSS 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. * * GSS 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 GSS; if not, see http://www.gnu.org/licenses or write to * the Free Software Foundation, Inc., 51 Franklin Street, Fifth * Floor, Boston, MA 02110-1301, USA. * */ #include "internal.h" /* _gss_find_mech */ #include "meta.h" struct gss_status_codes { gss_uint32 err; const char *name; const char *text; }; static struct gss_status_codes gss_calling_errors[] = { {GSS_S_CALL_INACCESSIBLE_READ, "GSS_S_CALL_INACCESSIBLE_READ", N_("A required input parameter could not be read")}, {GSS_S_CALL_INACCESSIBLE_WRITE, "GSS_S_CALL_INACCESSIBLE_WRITE", N_("A required output parameter could not be written")}, {GSS_S_CALL_BAD_STRUCTURE, "GSS_S_CALL_BAD_STRUCTURE", N_("A parameter was malformed")} }; static struct gss_status_codes gss_routine_errors[] = { {GSS_S_BAD_MECH, "GSS_S_BAD_MECH", N_("An unsupported mechanism was requested")}, {GSS_S_BAD_NAME, "GSS_S_BAD_NAME", N_("An invalid name was supplied")}, {GSS_S_BAD_NAMETYPE, "GSS_S_BAD_NAMETYPE", N_("A supplied name was of an unsupported type")}, {GSS_S_BAD_BINDINGS, "GSS_S_BAD_BINDINGS", N_("Incorrect channel bindings were supplied")}, {GSS_S_BAD_STATUS, "GSS_S_BAD_STATUS", N_("An invalid status code was supplied")}, {GSS_S_BAD_SIG, "GSS_S_BAD_SIG", N_("A token had an invalid MIC")}, {GSS_S_NO_CRED, "GSS_S_NO_CRED", N_("No credentials were supplied, or the credentials were unavailable " "or inaccessible")}, {GSS_S_NO_CONTEXT, "GSS_S_NO_CONTEXT", N_("No context has been established")}, {GSS_S_DEFECTIVE_TOKEN, "GSS_S_DEFECTIVE_TOKEN", N_("A token was invalid")}, {GSS_S_DEFECTIVE_CREDENTIAL, "GSS_S_DEFECTIVE_CREDENTIAL", N_("A credential was invalid")}, {GSS_S_CREDENTIALS_EXPIRED, "GSS_S_CREDENTIALS_EXPIRED", N_("The referenced credentials have expired")}, {GSS_S_CONTEXT_EXPIRED, "GSS_S_CONTEXT_EXPIRED", N_("The context has expired")}, {GSS_S_FAILURE, "GSS_S_FAILURE", N_("Unspecified error in underlying mechanism")}, {GSS_S_BAD_QOP, "GSS_S_BAD_QOP", N_("The quality-of-protection requested could not be provided")}, {GSS_S_UNAUTHORIZED, "GSS_S_UNAUTHORIZED", N_("The operation is forbidden by local security policy")}, {GSS_S_UNAVAILABLE, "GSS_S_UNAVAILABLE", N_("The operation or option is unavailable")}, {GSS_S_DUPLICATE_ELEMENT, "GSS_S_DUPLICATE_ELEMENT", N_("The requested credential element already exists")}, {GSS_S_NAME_NOT_MN, "GSS_S_NAME_NOT_MN", N_("The provided name was not a mechanism name")} }; static struct gss_status_codes gss_supplementary_errors[] = { {GSS_S_CONTINUE_NEEDED, "GSS_S_CONTINUE_NEEDED", N_("The gss_init_sec_context() or gss_accept_sec_context() function " "must be called again to complete its function")}, {GSS_S_DUPLICATE_TOKEN, "GSS_S_DUPLICATE_TOKEN", N_("The token was a duplicate of an earlier token")}, {GSS_S_OLD_TOKEN, "GSS_S_OLD_TOKEN", N_("The token's validity period has expired")}, {GSS_S_UNSEQ_TOKEN, "GSS_S_UNSEQ_TOKEN", N_("A later token has already been processed")}, {GSS_S_GAP_TOKEN, "GSS_S_GAP_TOKEN", N_("An expected per-message token was not received")} }; /** * gss_display_status: * @minor_status: (integer, modify) Mechanism specific status code. * @status_value: (Integer, read) Status value to be converted. * @status_type: (Integer, read) GSS_C_GSS_CODE - status_value is a * GSS status code. GSS_C_MECH_CODE - status_value is a mechanism * status code. * @mech_type: (Object ID, read, optional) Underlying mechanism (used * to interpret a minor status value). Supply GSS_C_NO_OID to obtain * the system default. * @message_context: (Integer, read/modify) Should be initialized to * zero by the application prior to the first call. On return from * gss_display_status(), a non-zero status_value parameter indicates * that additional messages may be extracted from the status code * via subsequent calls to gss_display_status(), passing the same * status_value, status_type, mech_type, and message_context * parameters. * @status_string: (buffer, character string, modify) Textual * interpretation of the status_value. Storage associated with this * parameter must be freed by the application after use with a call * to gss_release_buffer(). * * Allows an application to obtain a textual representation of a * GSS-API status code, for display to the user or for logging * purposes. Since some status values may indicate multiple * conditions, applications may need to call gss_display_status * multiple times, each call generating a single text string. The * message_context parameter is used by gss_display_status to store * state information about which error messages have already been * extracted from a given status_value; message_context must be * initialized to 0 by the application prior to the first call, and * gss_display_status will return a non-zero value in this parameter * if there are further messages to extract. * * The message_context parameter contains all state information * required by gss_display_status in order to extract further messages * from the status_value; even when a non-zero value is returned in * this parameter, the application is not required to call * gss_display_status again unless subsequent messages are desired. * The following code extracts all messages from a given status code * and prints them to stderr: * * * --------------------------------------------------- * OM_uint32 message_context; * OM_uint32 status_code; * OM_uint32 maj_status; * OM_uint32 min_status; * gss_buffer_desc status_string; * * ... * * message_context = 0; * * do { * maj_status = gss_display_status ( * &min_status, * status_code, * GSS_C_GSS_CODE, * GSS_C_NO_OID, * &message_context, * &status_string) * * fprintf(stderr, * "%.*s\n", * (int)status_string.length, * * (char *)status_string.value); * * gss_release_buffer(&min_status, &status_string); * * } while (message_context != 0); * --------------------------------------------------- * * Return value: * * `GSS_S_COMPLETE`: Successful completion. * * `GSS_S_BAD_MECH`: Indicates that translation in accordance with an * unsupported mechanism type was requested. * * `GSS_S_BAD_STATUS`: The status value was not recognized, or the * status type was neither GSS_C_GSS_CODE nor GSS_C_MECH_CODE. **/ OM_uint32 gss_display_status (OM_uint32 * minor_status, OM_uint32 status_value, int status_type, const gss_OID mech_type, OM_uint32 * message_context, gss_buffer_t status_string) { size_t i; bindtextdomain (PACKAGE PO_SUFFIX, LOCALEDIR); if (minor_status) *minor_status = 0; if (message_context) status_value &= ~*message_context; switch (status_type) { case GSS_C_GSS_CODE: if (message_context) { *message_context |= GSS_C_ROUTINE_ERROR_MASK << GSS_C_ROUTINE_ERROR_OFFSET; if ((status_value & ~*message_context) == 0) *message_context = 0; } switch (GSS_ROUTINE_ERROR (status_value)) { case 0: break; case GSS_S_BAD_MECH: case GSS_S_BAD_NAME: case GSS_S_BAD_NAMETYPE: case GSS_S_BAD_BINDINGS: case GSS_S_BAD_STATUS: case GSS_S_BAD_SIG: case GSS_S_NO_CRED: case GSS_S_NO_CONTEXT: case GSS_S_DEFECTIVE_TOKEN: case GSS_S_DEFECTIVE_CREDENTIAL: case GSS_S_CREDENTIALS_EXPIRED: case GSS_S_CONTEXT_EXPIRED: case GSS_S_FAILURE: case GSS_S_BAD_QOP: case GSS_S_UNAUTHORIZED: case GSS_S_UNAVAILABLE: case GSS_S_DUPLICATE_ELEMENT: case GSS_S_NAME_NOT_MN: status_string->value = strdup (_(gss_routine_errors [(GSS_ROUTINE_ERROR (status_value) >> GSS_C_ROUTINE_ERROR_OFFSET) - 1].text)); if (!status_string->value) { if (minor_status) *minor_status = ENOMEM; return GSS_S_FAILURE; } status_string->length = strlen (status_string->value); return GSS_S_COMPLETE; break; default: return GSS_S_BAD_STATUS; break; } if (message_context) { *message_context |= GSS_C_CALLING_ERROR_MASK << GSS_C_CALLING_ERROR_OFFSET; if ((status_value & ~*message_context) == 0) *message_context = 0; } switch (GSS_CALLING_ERROR (status_value)) { case 0: break; case GSS_S_CALL_INACCESSIBLE_READ: case GSS_S_CALL_INACCESSIBLE_WRITE: case GSS_S_CALL_BAD_STRUCTURE: status_string->value = strdup (_(gss_calling_errors [(GSS_CALLING_ERROR (status_value) >> GSS_C_CALLING_ERROR_OFFSET) - 1].text)); if (!status_string->value) { if (minor_status) *minor_status = ENOMEM; return GSS_S_FAILURE; } status_string->length = strlen (status_string->value); return GSS_S_COMPLETE; break; default: return GSS_S_BAD_STATUS; break; } for (i = 0; i < sizeof (gss_supplementary_errors) / sizeof (gss_supplementary_errors[0]); i++) if (gss_supplementary_errors[i].err & GSS_SUPPLEMENTARY_INFO (status_value)) { status_string->value = strdup (_(gss_supplementary_errors[i].text)); if (!status_string->value) { if (minor_status) *minor_status = ENOMEM; return GSS_S_FAILURE; } status_string->length = strlen (status_string->value); *message_context |= gss_supplementary_errors[i].err; if ((status_value & ~*message_context) == 0) *message_context = 0; return GSS_S_COMPLETE; } if (GSS_SUPPLEMENTARY_INFO (status_value)) return GSS_S_BAD_STATUS; if (message_context) *message_context = 0; status_string->value = strdup (_("No error")); if (!status_string->value) { if (minor_status) *minor_status = ENOMEM; return GSS_S_FAILURE; } status_string->length = strlen (status_string->value); break; case GSS_C_MECH_CODE: { _gss_mech_api_t mech; mech = _gss_find_mech (mech_type); return mech->display_status (minor_status, status_value, status_type, mech_type, message_context, status_string); } break; default: return GSS_S_BAD_STATUS; } return GSS_S_COMPLETE; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gss-1.0.3/src/��������������������������������������������������������������������������������������0000755�0000000�0000000�00000000000�12415510376�010051� 5����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������gss-1.0.3/src/Makefile.am���������������������������������������������������������������������������0000664�0000000�0000000�00000003170�12415506237�012031� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������## Process this file with automake to produce Makefile.in # Copyright (C) 2003-2014 Simon Josefsson # # This file is part of the Generic Security Service (GSS). # # GSS 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. # # GSS 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 GSS; if not, see http://www.gnu.org/licenses or write to # the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, # Boston, MA 02110-1301, USA. SUBDIRS = gl AM_CFLAGS = $(WARN_CFLAGS) $(WERROR_CFLAGS) AM_CPPFLAGS = -I$(top_srcdir)/gl \ -I$(top_srcdir)/src/gl -I$(top_builddir)/src/gl \ -I$(top_builddir)/lib/headers -I$(top_srcdir)/lib/headers bin_PROGRAMS = gss gss_SOURCES = gss.c gss_LDADD = ../lib/libgss.la gl/libgnu.la @LTLIBINTL@ libcmd-gss.la gss.c: $(BUILT_SOURCES) BUILT_SOURCES = gss_cmd.c gss_cmd.h MAINTAINERCLEANFILES = $(BUILT_SOURCES) $(BUILT_SOURCES): gss.ggo gengetopt --no-handle-help --no-handle-version \ --input $^ --file-name gss_cmd noinst_LTLIBRARIES = libcmd-gss.la libcmd_gss_la_CFLAGS = libcmd_gss_la_SOURCES = gss.ggo $(BUILT_SOURCES) libcmd_gss_la_LIBADD = gl/libgnu.la # For gettext. datadir = @datadir@ localedir = $(datadir)/locale DEFS = -DLOCALEDIR=\"$(localedir)\" @DEFS@ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gss-1.0.3/src/gss_cmd.h�����������������������������������������������������������������������������0000644�0000000�0000000�00000017530�12415507647�011576� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/** @file gss_cmd.h * @brief The header file for the command line option parser * generated by GNU Gengetopt version 2.22.6 * http://www.gnu.org/software/gengetopt. * DO NOT modify this file, since it can be overwritten * @author GNU Gengetopt by Lorenzo Bettini */ #ifndef GSS_CMD_H #define GSS_CMD_H /* If we use autoconf. */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include <stdio.h> /* for FILE */ #ifdef __cplusplus extern "C" { #endif /* __cplusplus */ #ifndef CMDLINE_PARSER_PACKAGE /** @brief the program name (used for printing errors) */ #define CMDLINE_PARSER_PACKAGE PACKAGE #endif #ifndef CMDLINE_PARSER_PACKAGE_NAME /** @brief the complete program name (used for help and version) */ #ifdef PACKAGE_NAME #define CMDLINE_PARSER_PACKAGE_NAME PACKAGE_NAME #else #define CMDLINE_PARSER_PACKAGE_NAME PACKAGE #endif #endif #ifndef CMDLINE_PARSER_VERSION /** @brief the program version */ #define CMDLINE_PARSER_VERSION VERSION #endif /** @brief Where the command line options are stored */ struct gengetopt_args_info { const char *help_help; /**< @brief Print help and exit help description. */ const char *version_help; /**< @brief Print version and exit help description. */ long major_arg; /**< @brief See gss.c for doc string. */ char * major_orig; /**< @brief See gss.c for doc string original value given at command line. */ const char *major_help; /**< @brief See gss.c for doc string help description. */ const char *list_mechanisms_help; /**< @brief See gss.c for doc string help description. */ char * accept_sec_context_arg; /**< @brief See gss.c for doc string. */ char * accept_sec_context_orig; /**< @brief See gss.c for doc string original value given at command line. */ const char *accept_sec_context_help; /**< @brief See gss.c for doc string help description. */ char * init_sec_context_arg; /**< @brief See gss.c for doc string. */ char * init_sec_context_orig; /**< @brief See gss.c for doc string original value given at command line. */ const char *init_sec_context_help; /**< @brief See gss.c for doc string help description. */ char * server_name_arg; /**< @brief See gss.c for doc string. */ char * server_name_orig; /**< @brief See gss.c for doc string original value given at command line. */ const char *server_name_help; /**< @brief See gss.c for doc string help description. */ int quiet_flag; /**< @brief Silent operation (default=off). */ const char *quiet_help; /**< @brief Silent operation help description. */ unsigned int help_given ; /**< @brief Whether help was given. */ unsigned int version_given ; /**< @brief Whether version was given. */ unsigned int major_given ; /**< @brief Whether major was given. */ unsigned int list_mechanisms_given ; /**< @brief Whether list-mechanisms was given. */ unsigned int accept_sec_context_given ; /**< @brief Whether accept-sec-context was given. */ unsigned int init_sec_context_given ; /**< @brief Whether init-sec-context was given. */ unsigned int server_name_given ; /**< @brief Whether server-name was given. */ unsigned int quiet_given ; /**< @brief Whether quiet was given. */ } ; /** @brief The additional parameters to pass to parser functions */ struct cmdline_parser_params { int override; /**< @brief whether to override possibly already present options (default 0) */ int initialize; /**< @brief whether to initialize the option structure gengetopt_args_info (default 1) */ int check_required; /**< @brief whether to check that all required options were provided (default 1) */ int check_ambiguity; /**< @brief whether to check for options already specified in the option structure gengetopt_args_info (default 0) */ int print_errors; /**< @brief whether getopt_long should print an error message for a bad option (default 1) */ } ; /** @brief the purpose string of the program */ extern const char *gengetopt_args_info_purpose; /** @brief the usage string of the program */ extern const char *gengetopt_args_info_usage; /** @brief the description string of the program */ extern const char *gengetopt_args_info_description; /** @brief all the lines making the help output */ extern const char *gengetopt_args_info_help[]; /** * The command line parser * @param argc the number of command line options * @param argv the command line options * @param args_info the structure where option information will be stored * @return 0 if everything went fine, NON 0 if an error took place */ int cmdline_parser (int argc, char **argv, struct gengetopt_args_info *args_info); /** * The command line parser (version with additional parameters - deprecated) * @param argc the number of command line options * @param argv the command line options * @param args_info the structure where option information will be stored * @param override whether to override possibly already present options * @param initialize whether to initialize the option structure my_args_info * @param check_required whether to check that all required options were provided * @return 0 if everything went fine, NON 0 if an error took place * @deprecated use cmdline_parser_ext() instead */ int cmdline_parser2 (int argc, char **argv, struct gengetopt_args_info *args_info, int override, int initialize, int check_required); /** * The command line parser (version with additional parameters) * @param argc the number of command line options * @param argv the command line options * @param args_info the structure where option information will be stored * @param params additional parameters for the parser * @return 0 if everything went fine, NON 0 if an error took place */ int cmdline_parser_ext (int argc, char **argv, struct gengetopt_args_info *args_info, struct cmdline_parser_params *params); /** * Save the contents of the option struct into an already open FILE stream. * @param outfile the stream where to dump options * @param args_info the option struct to dump * @return 0 if everything went fine, NON 0 if an error took place */ int cmdline_parser_dump(FILE *outfile, struct gengetopt_args_info *args_info); /** * Save the contents of the option struct into a (text) file. * This file can be read by the config file parser (if generated by gengetopt) * @param filename the file where to save * @param args_info the option struct to save * @return 0 if everything went fine, NON 0 if an error took place */ int cmdline_parser_file_save(const char *filename, struct gengetopt_args_info *args_info); /** * Print the help */ void cmdline_parser_print_help(void); /** * Print the version */ void cmdline_parser_print_version(void); /** * Initializes all the fields a cmdline_parser_params structure * to their default values * @param params the structure to initialize */ void cmdline_parser_params_init(struct cmdline_parser_params *params); /** * Allocates dynamically a cmdline_parser_params structure and initializes * all its fields to their default values * @return the created and initialized cmdline_parser_params structure */ struct cmdline_parser_params *cmdline_parser_params_create(void); /** * Initializes the passed gengetopt_args_info structure's fields * (also set default values for options that have a default) * @param args_info the structure to initialize */ void cmdline_parser_init (struct gengetopt_args_info *args_info); /** * Deallocates the string fields of the gengetopt_args_info structure * (but does not deallocate the structure itself) * @param args_info the structure to deallocate */ void cmdline_parser_free (struct gengetopt_args_info *args_info); /** * Checks that all the required options were specified * @param args_info the structure to check * @param prog_name the name of the program that will be used to print * possible errors * @return */ int cmdline_parser_required (struct gengetopt_args_info *args_info, const char *prog_name); #ifdef __cplusplus } #endif /* __cplusplus */ #endif /* GSS_CMD_H */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������gss-1.0.3/src/gl/�����������������������������������������������������������������������������������0000755�0000000�0000000�00000000000�12415510376�010453� 5����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������gss-1.0.3/src/gl/unistd.c���������������������������������������������������������������������������0000644�0000000�0000000�00000000124�12415470504�012040� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#include <config.h> #define _GL_UNISTD_INLINE _GL_EXTERN_INLINE #include "unistd.h" ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gss-1.0.3/src/gl/strerror-override.c����������������������������������������������������������������0000644�0000000�0000000�00000021465�12415470505�014245� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* strerror-override.c --- POSIX compatible system error routine Copyright (C) 2010-2014 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 Bruno Haible <bruno@clisp.org>, 2010. */ #include <config.h> #include "strerror-override.h" #include <errno.h> #if GNULIB_defined_EWINSOCK /* native Windows platforms */ # if HAVE_WINSOCK2_H # include <winsock2.h> # endif #endif /* If ERRNUM maps to an errno value defined by gnulib, return a string describing the error. Otherwise return NULL. */ const char * strerror_override (int errnum) { /* These error messages are taken from glibc/sysdeps/gnu/errlist.c. */ switch (errnum) { #if REPLACE_STRERROR_0 case 0: return "Success"; #endif #if GNULIB_defined_ESOCK /* native Windows platforms with older <errno.h> */ case EINPROGRESS: return "Operation now in progress"; case EALREADY: return "Operation already in progress"; case ENOTSOCK: return "Socket operation on non-socket"; case EDESTADDRREQ: return "Destination address required"; case EMSGSIZE: return "Message too long"; case EPROTOTYPE: return "Protocol wrong type for socket"; case ENOPROTOOPT: return "Protocol not available"; case EPROTONOSUPPORT: return "Protocol not supported"; case EOPNOTSUPP: return "Operation not supported"; case EAFNOSUPPORT: return "Address family not supported by protocol"; case EADDRINUSE: return "Address already in use"; case EADDRNOTAVAIL: return "Cannot assign requested address"; case ENETDOWN: return "Network is down"; case ENETUNREACH: return "Network is unreachable"; case ECONNRESET: return "Connection reset by peer"; case ENOBUFS: return "No buffer space available"; case EISCONN: return "Transport endpoint is already connected"; case ENOTCONN: return "Transport endpoint is not connected"; case ETIMEDOUT: return "Connection timed out"; case ECONNREFUSED: return "Connection refused"; case ELOOP: return "Too many levels of symbolic links"; case EHOSTUNREACH: return "No route to host"; case EWOULDBLOCK: return "Operation would block"; #endif #if GNULIB_defined_ESTREAMS /* native Windows platforms with older <errno.h> */ case ETXTBSY: return "Text file busy"; case ENODATA: return "No data available"; case ENOSR: return "Out of streams resources"; case ENOSTR: return "Device not a stream"; case ETIME: return "Timer expired"; case EOTHER: return "Other error"; #endif #if GNULIB_defined_EWINSOCK /* native Windows platforms */ case ESOCKTNOSUPPORT: return "Socket type not supported"; case EPFNOSUPPORT: return "Protocol family not supported"; case ESHUTDOWN: return "Cannot send after transport endpoint shutdown"; case ETOOMANYREFS: return "Too many references: cannot splice"; case EHOSTDOWN: return "Host is down"; case EPROCLIM: return "Too many processes"; case EUSERS: return "Too many users"; case EDQUOT: return "Disk quota exceeded"; case ESTALE: return "Stale NFS file handle"; case EREMOTE: return "Object is remote"; # if HAVE_WINSOCK2_H /* WSA_INVALID_HANDLE maps to EBADF */ /* WSA_NOT_ENOUGH_MEMORY maps to ENOMEM */ /* WSA_INVALID_PARAMETER maps to EINVAL */ case WSA_OPERATION_ABORTED: return "Overlapped operation aborted"; case WSA_IO_INCOMPLETE: return "Overlapped I/O event object not in signaled state"; case WSA_IO_PENDING: return "Overlapped operations will complete later"; /* WSAEINTR maps to EINTR */ /* WSAEBADF maps to EBADF */ /* WSAEACCES maps to EACCES */ /* WSAEFAULT maps to EFAULT */ /* WSAEINVAL maps to EINVAL */ /* WSAEMFILE maps to EMFILE */ /* WSAEWOULDBLOCK maps to EWOULDBLOCK */ /* WSAEINPROGRESS maps to EINPROGRESS */ /* WSAEALREADY maps to EALREADY */ /* WSAENOTSOCK maps to ENOTSOCK */ /* WSAEDESTADDRREQ maps to EDESTADDRREQ */ /* WSAEMSGSIZE maps to EMSGSIZE */ /* WSAEPROTOTYPE maps to EPROTOTYPE */ /* WSAENOPROTOOPT maps to ENOPROTOOPT */ /* WSAEPROTONOSUPPORT maps to EPROTONOSUPPORT */ /* WSAESOCKTNOSUPPORT is ESOCKTNOSUPPORT */ /* WSAEOPNOTSUPP maps to EOPNOTSUPP */ /* WSAEPFNOSUPPORT is EPFNOSUPPORT */ /* WSAEAFNOSUPPORT maps to EAFNOSUPPORT */ /* WSAEADDRINUSE maps to EADDRINUSE */ /* WSAEADDRNOTAVAIL maps to EADDRNOTAVAIL */ /* WSAENETDOWN maps to ENETDOWN */ /* WSAENETUNREACH maps to ENETUNREACH */ /* WSAENETRESET maps to ENETRESET */ /* WSAECONNABORTED maps to ECONNABORTED */ /* WSAECONNRESET maps to ECONNRESET */ /* WSAENOBUFS maps to ENOBUFS */ /* WSAEISCONN maps to EISCONN */ /* WSAENOTCONN maps to ENOTCONN */ /* WSAESHUTDOWN is ESHUTDOWN */ /* WSAETOOMANYREFS is ETOOMANYREFS */ /* WSAETIMEDOUT maps to ETIMEDOUT */ /* WSAECONNREFUSED maps to ECONNREFUSED */ /* WSAELOOP maps to ELOOP */ /* WSAENAMETOOLONG maps to ENAMETOOLONG */ /* WSAEHOSTDOWN is EHOSTDOWN */ /* WSAEHOSTUNREACH maps to EHOSTUNREACH */ /* WSAENOTEMPTY maps to ENOTEMPTY */ /* WSAEPROCLIM is EPROCLIM */ /* WSAEUSERS is EUSERS */ /* WSAEDQUOT is EDQUOT */ /* WSAESTALE is ESTALE */ /* WSAEREMOTE is EREMOTE */ case WSASYSNOTREADY: return "Network subsystem is unavailable"; case WSAVERNOTSUPPORTED: return "Winsock.dll version out of range"; case WSANOTINITIALISED: return "Successful WSAStartup not yet performed"; case WSAEDISCON: return "Graceful shutdown in progress"; case WSAENOMORE: case WSA_E_NO_MORE: return "No more results"; case WSAECANCELLED: case WSA_E_CANCELLED: return "Call was canceled"; case WSAEINVALIDPROCTABLE: return "Procedure call table is invalid"; case WSAEINVALIDPROVIDER: return "Service provider is invalid"; case WSAEPROVIDERFAILEDINIT: return "Service provider failed to initialize"; case WSASYSCALLFAILURE: return "System call failure"; case WSASERVICE_NOT_FOUND: return "Service not found"; case WSATYPE_NOT_FOUND: return "Class type not found"; case WSAEREFUSED: return "Database query was refused"; case WSAHOST_NOT_FOUND: return "Host not found"; case WSATRY_AGAIN: return "Nonauthoritative host not found"; case WSANO_RECOVERY: return "Nonrecoverable error"; case WSANO_DATA: return "Valid name, no data record of requested type"; /* WSA_QOS_* omitted */ # endif #endif #if GNULIB_defined_ENOMSG case ENOMSG: return "No message of desired type"; #endif #if GNULIB_defined_EIDRM case EIDRM: return "Identifier removed"; #endif #if GNULIB_defined_ENOLINK case ENOLINK: return "Link has been severed"; #endif #if GNULIB_defined_EPROTO case EPROTO: return "Protocol error"; #endif #if GNULIB_defined_EMULTIHOP case EMULTIHOP: return "Multihop attempted"; #endif #if GNULIB_defined_EBADMSG case EBADMSG: return "Bad message"; #endif #if GNULIB_defined_EOVERFLOW case EOVERFLOW: return "Value too large for defined data type"; #endif #if GNULIB_defined_ENOTSUP case ENOTSUP: return "Not supported"; #endif #if GNULIB_defined_ENETRESET case ENETRESET: return "Network dropped connection on reset"; #endif #if GNULIB_defined_ECONNABORTED case ECONNABORTED: return "Software caused connection abort"; #endif #if GNULIB_defined_ESTALE case ESTALE: return "Stale NFS file handle"; #endif #if GNULIB_defined_EDQUOT case EDQUOT: return "Disk quota exceeded"; #endif #if GNULIB_defined_ECANCELED case ECANCELED: return "Operation canceled"; #endif #if GNULIB_defined_EOWNERDEAD case EOWNERDEAD: return "Owner died"; #endif #if GNULIB_defined_ENOTRECOVERABLE case ENOTRECOVERABLE: return "State not recoverable"; #endif #if GNULIB_defined_EILSEQ case EILSEQ: return "Invalid or incomplete multibyte or wide character"; #endif default: return NULL; } } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gss-1.0.3/src/gl/errno.in.h�������������������������������������������������������������������������0000644�0000000�0000000�00000016463�12415470504�012306� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* A POSIX-like <errno.h>. Copyright (C) 2008-2014 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/>. */ #ifndef _@GUARD_PREFIX@_ERRNO_H #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ /* The include_next requires a split double-inclusion guard. */ #@INCLUDE_NEXT@ @NEXT_ERRNO_H@ #ifndef _@GUARD_PREFIX@_ERRNO_H #define _@GUARD_PREFIX@_ERRNO_H /* On native Windows platforms, many macros are not defined. */ # if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ /* These are the same values as defined by MSVC 10, for interoperability. */ # ifndef ENOMSG # define ENOMSG 122 # define GNULIB_defined_ENOMSG 1 # endif # ifndef EIDRM # define EIDRM 111 # define GNULIB_defined_EIDRM 1 # endif # ifndef ENOLINK # define ENOLINK 121 # define GNULIB_defined_ENOLINK 1 # endif # ifndef EPROTO # define EPROTO 134 # define GNULIB_defined_EPROTO 1 # endif # ifndef EBADMSG # define EBADMSG 104 # define GNULIB_defined_EBADMSG 1 # endif # ifndef EOVERFLOW # define EOVERFLOW 132 # define GNULIB_defined_EOVERFLOW 1 # endif # ifndef ENOTSUP # define ENOTSUP 129 # define GNULIB_defined_ENOTSUP 1 # endif # ifndef ENETRESET # define ENETRESET 117 # define GNULIB_defined_ENETRESET 1 # endif # ifndef ECONNABORTED # define ECONNABORTED 106 # define GNULIB_defined_ECONNABORTED 1 # endif # ifndef ECANCELED # define ECANCELED 105 # define GNULIB_defined_ECANCELED 1 # endif # ifndef EOWNERDEAD # define EOWNERDEAD 133 # define GNULIB_defined_EOWNERDEAD 1 # endif # ifndef ENOTRECOVERABLE # define ENOTRECOVERABLE 127 # define GNULIB_defined_ENOTRECOVERABLE 1 # endif # ifndef EINPROGRESS # define EINPROGRESS 112 # define EALREADY 103 # define ENOTSOCK 128 # define EDESTADDRREQ 109 # define EMSGSIZE 115 # define EPROTOTYPE 136 # define ENOPROTOOPT 123 # define EPROTONOSUPPORT 135 # define EOPNOTSUPP 130 # define EAFNOSUPPORT 102 # define EADDRINUSE 100 # define EADDRNOTAVAIL 101 # define ENETDOWN 116 # define ENETUNREACH 118 # define ECONNRESET 108 # define ENOBUFS 119 # define EISCONN 113 # define ENOTCONN 126 # define ETIMEDOUT 138 # define ECONNREFUSED 107 # define ELOOP 114 # define EHOSTUNREACH 110 # define EWOULDBLOCK 140 # define GNULIB_defined_ESOCK 1 # endif # ifndef ETXTBSY # define ETXTBSY 139 # define ENODATA 120 /* not required by POSIX */ # define ENOSR 124 /* not required by POSIX */ # define ENOSTR 125 /* not required by POSIX */ # define ETIME 137 /* not required by POSIX */ # define EOTHER 131 /* not required by POSIX */ # define GNULIB_defined_ESTREAMS 1 # endif /* These are intentionally the same values as the WSA* error numbers, defined in <winsock2.h>. */ # define ESOCKTNOSUPPORT 10044 /* not required by POSIX */ # define EPFNOSUPPORT 10046 /* not required by POSIX */ # define ESHUTDOWN 10058 /* not required by POSIX */ # define ETOOMANYREFS 10059 /* not required by POSIX */ # define EHOSTDOWN 10064 /* not required by POSIX */ # define EPROCLIM 10067 /* not required by POSIX */ # define EUSERS 10068 /* not required by POSIX */ # define EDQUOT 10069 # define ESTALE 10070 # define EREMOTE 10071 /* not required by POSIX */ # define GNULIB_defined_EWINSOCK 1 # endif /* On OSF/1 5.1, when _XOPEN_SOURCE_EXTENDED is not defined, the macros EMULTIHOP, ENOLINK, EOVERFLOW are not defined. */ # if @EMULTIHOP_HIDDEN@ # define EMULTIHOP @EMULTIHOP_VALUE@ # define GNULIB_defined_EMULTIHOP 1 # endif # if @ENOLINK_HIDDEN@ # define ENOLINK @ENOLINK_VALUE@ # define GNULIB_defined_ENOLINK 1 # endif # if @EOVERFLOW_HIDDEN@ # define EOVERFLOW @EOVERFLOW_VALUE@ # define GNULIB_defined_EOVERFLOW 1 # endif /* On OpenBSD 4.0 and on native Windows, the macros ENOMSG, EIDRM, ENOLINK, EPROTO, EMULTIHOP, EBADMSG, EOVERFLOW, ENOTSUP, ECANCELED are not defined. Likewise, on NonStop Kernel, EDQUOT is not defined. Define them here. Values >= 2000 seem safe to use: Solaris ESTALE = 151, HP-UX EWOULDBLOCK = 246, IRIX EDQUOT = 1133. Note: When one of these systems defines some of these macros some day, binaries will have to be recompiled so that they recognizes the new errno values from the system. */ # ifndef ENOMSG # define ENOMSG 2000 # define GNULIB_defined_ENOMSG 1 # endif # ifndef EIDRM # define EIDRM 2001 # define GNULIB_defined_EIDRM 1 # endif # ifndef ENOLINK # define ENOLINK 2002 # define GNULIB_defined_ENOLINK 1 # endif # ifndef EPROTO # define EPROTO 2003 # define GNULIB_defined_EPROTO 1 # endif # ifndef EMULTIHOP # define EMULTIHOP 2004 # define GNULIB_defined_EMULTIHOP 1 # endif # ifndef EBADMSG # define EBADMSG 2005 # define GNULIB_defined_EBADMSG 1 # endif # ifndef EOVERFLOW # define EOVERFLOW 2006 # define GNULIB_defined_EOVERFLOW 1 # endif # ifndef ENOTSUP # define ENOTSUP 2007 # define GNULIB_defined_ENOTSUP 1 # endif # ifndef ENETRESET # define ENETRESET 2011 # define GNULIB_defined_ENETRESET 1 # endif # ifndef ECONNABORTED # define ECONNABORTED 2012 # define GNULIB_defined_ECONNABORTED 1 # endif # ifndef ESTALE # define ESTALE 2009 # define GNULIB_defined_ESTALE 1 # endif # ifndef EDQUOT # define EDQUOT 2010 # define GNULIB_defined_EDQUOT 1 # endif # ifndef ECANCELED # define ECANCELED 2008 # define GNULIB_defined_ECANCELED 1 # endif /* On many platforms, the macros EOWNERDEAD and ENOTRECOVERABLE are not defined. */ # ifndef EOWNERDEAD # if defined __sun /* Use the same values as defined for Solaris >= 8, for interoperability. */ # define EOWNERDEAD 58 # define ENOTRECOVERABLE 59 # elif (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ /* We have a conflict here: pthreads-win32 defines these values differently than MSVC 10. It's hairy to decide which one to use. */ # if defined __MINGW32__ && !defined USE_WINDOWS_THREADS /* Use the same values as defined by pthreads-win32, for interoperability. */ # define EOWNERDEAD 43 # define ENOTRECOVERABLE 44 # else /* Use the same values as defined by MSVC 10, for interoperability. */ # define EOWNERDEAD 133 # define ENOTRECOVERABLE 127 # endif # else # define EOWNERDEAD 2013 # define ENOTRECOVERABLE 2014 # endif # define GNULIB_defined_EOWNERDEAD 1 # define GNULIB_defined_ENOTRECOVERABLE 1 # endif # ifndef EILSEQ # define EILSEQ 2015 # define GNULIB_defined_EILSEQ 1 # endif #endif /* _@GUARD_PREFIX@_ERRNO_H */ #endif /* _@GUARD_PREFIX@_ERRNO_H */ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gss-1.0.3/src/gl/stdio.in.h�������������������������������������������������������������������������0000644�0000000�0000000�00000142211�12415470504�012272� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* A GNU-like <stdio.h>. Copyright (C) 2004, 2007-2014 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/>. */ #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ #if defined __need_FILE || defined __need___FILE || defined _GL_ALREADY_INCLUDING_STDIO_H /* Special invocation convention: - Inside glibc header files. - On OSF/1 5.1 we have a sequence of nested includes <stdio.h> -> <getopt.h> -> <ctype.h> -> <sys/localedef.h> -> <sys/lc_core.h> -> <nl_types.h> -> <mesg.h> -> <stdio.h>. In this situation, the functions are not yet declared, therefore we cannot provide the C++ aliases. */ #@INCLUDE_NEXT@ @NEXT_STDIO_H@ #else /* Normal invocation convention. */ #ifndef _@GUARD_PREFIX@_STDIO_H #define _GL_ALREADY_INCLUDING_STDIO_H /* The include_next requires a split double-inclusion guard. */ #@INCLUDE_NEXT@ @NEXT_STDIO_H@ #undef _GL_ALREADY_INCLUDING_STDIO_H #ifndef _@GUARD_PREFIX@_STDIO_H #define _@GUARD_PREFIX@_STDIO_H /* Get va_list. Needed on many systems, including glibc 2.8. */ #include <stdarg.h> #include <stddef.h> /* Get off_t and ssize_t. Needed on many systems, including glibc 2.8 and eglibc 2.11.2. May also define off_t to a 64-bit type on native Windows. */ #include <sys/types.h> /* The __attribute__ feature is available in gcc versions 2.5 and later. The __-protected variants of the attributes 'format' and 'printf' are accepted by gcc versions 2.6.4 (effectively 2.7) and later. We enable _GL_ATTRIBUTE_FORMAT only if these are supported too, because gnulib and libintl do '#define printf __printf__' when they override the 'printf' function. */ #if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7) # define _GL_ATTRIBUTE_FORMAT(spec) __attribute__ ((__format__ spec)) #else # define _GL_ATTRIBUTE_FORMAT(spec) /* empty */ #endif /* _GL_ATTRIBUTE_FORMAT_PRINTF indicates to GCC that the function takes a format string and arguments, where the format string directives are the ones standardized by ISO C99 and POSIX. */ #if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4) # define _GL_ATTRIBUTE_FORMAT_PRINTF(formatstring_parameter, first_argument) \ _GL_ATTRIBUTE_FORMAT ((__gnu_printf__, formatstring_parameter, first_argument)) #else # define _GL_ATTRIBUTE_FORMAT_PRINTF(formatstring_parameter, first_argument) \ _GL_ATTRIBUTE_FORMAT ((__printf__, formatstring_parameter, first_argument)) #endif /* _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM is like _GL_ATTRIBUTE_FORMAT_PRINTF, except that it indicates to GCC that the supported format string directives are the ones of the system printf(), rather than the ones standardized by ISO C99 and POSIX. */ #define _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM(formatstring_parameter, first_argument) \ _GL_ATTRIBUTE_FORMAT ((__printf__, formatstring_parameter, first_argument)) /* _GL_ATTRIBUTE_FORMAT_SCANF indicates to GCC that the function takes a format string and arguments, where the format string directives are the ones standardized by ISO C99 and POSIX. */ #if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4) # define _GL_ATTRIBUTE_FORMAT_SCANF(formatstring_parameter, first_argument) \ _GL_ATTRIBUTE_FORMAT ((__gnu_scanf__, formatstring_parameter, first_argument)) #else # define _GL_ATTRIBUTE_FORMAT_SCANF(formatstring_parameter, first_argument) \ _GL_ATTRIBUTE_FORMAT ((__scanf__, formatstring_parameter, first_argument)) #endif /* _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM is like _GL_ATTRIBUTE_FORMAT_SCANF, except that it indicates to GCC that the supported format string directives are the ones of the system scanf(), rather than the ones standardized by ISO C99 and POSIX. */ #define _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM(formatstring_parameter, first_argument) \ _GL_ATTRIBUTE_FORMAT ((__scanf__, formatstring_parameter, first_argument)) /* Solaris 10 declares renameat in <unistd.h>, not in <stdio.h>. */ /* But in any case avoid namespace pollution on glibc systems. */ #if (@GNULIB_RENAMEAT@ || defined GNULIB_POSIXCHECK) && defined __sun \ && ! defined __GLIBC__ # 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. */ /* Macros for stringification. */ #define _GL_STDIO_STRINGIZE(token) #token #define _GL_STDIO_MACROEXPAND_AND_STRINGIZE(token) _GL_STDIO_STRINGIZE(token) /* When also using extern inline, suppress the use of static inline in standard headers of problematic Apple configurations, as Libc at least through Libc-825.26 (2013-04-09) mishandles it; see, e.g., <http://lists.gnu.org/archive/html/bug-gnulib/2012-12/msg00023.html>. Perhaps Apple will fix this some day. */ #if (defined _GL_EXTERN_INLINE_IN_USE && defined __APPLE__ \ && defined __GNUC__ && defined __STDC__) # undef putc_unlocked #endif #if @GNULIB_DPRINTF@ # if @REPLACE_DPRINTF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define dprintf rpl_dprintf # endif _GL_FUNCDECL_RPL (dprintf, int, (int fd, const char *format, ...) _GL_ATTRIBUTE_FORMAT_PRINTF (2, 3) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (dprintf, int, (int fd, const char *format, ...)); # else # if !@HAVE_DPRINTF@ _GL_FUNCDECL_SYS (dprintf, int, (int fd, const char *format, ...) _GL_ATTRIBUTE_FORMAT_PRINTF (2, 3) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (dprintf, int, (int fd, const char *format, ...)); # endif _GL_CXXALIASWARN (dprintf); #elif defined GNULIB_POSIXCHECK # undef dprintf # if HAVE_RAW_DECL_DPRINTF _GL_WARN_ON_USE (dprintf, "dprintf is unportable - " "use gnulib module dprintf for portability"); # endif #endif #if @GNULIB_FCLOSE@ /* Close STREAM and its underlying file descriptor. */ # if @REPLACE_FCLOSE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define fclose rpl_fclose # endif _GL_FUNCDECL_RPL (fclose, int, (FILE *stream) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (fclose, int, (FILE *stream)); # else _GL_CXXALIAS_SYS (fclose, int, (FILE *stream)); # endif _GL_CXXALIASWARN (fclose); #elif defined GNULIB_POSIXCHECK # undef fclose /* Assume fclose is always declared. */ _GL_WARN_ON_USE (fclose, "fclose is not always POSIX compliant - " "use gnulib module fclose for portable POSIX compliance"); #endif #if @GNULIB_FDOPEN@ # if @REPLACE_FDOPEN@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fdopen # define fdopen rpl_fdopen # endif _GL_FUNCDECL_RPL (fdopen, FILE *, (int fd, const char *mode) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (fdopen, FILE *, (int fd, const char *mode)); # else _GL_CXXALIAS_SYS (fdopen, FILE *, (int fd, const char *mode)); # endif _GL_CXXALIASWARN (fdopen); #elif defined GNULIB_POSIXCHECK # undef fdopen /* Assume fdopen is always declared. */ _GL_WARN_ON_USE (fdopen, "fdopen on native Windows platforms is not POSIX compliant - " "use gnulib module fdopen for portability"); #endif #if @GNULIB_FFLUSH@ /* Flush all pending data on STREAM according to POSIX rules. Both output and seekable input streams are supported. Note! LOSS OF DATA can occur if fflush is applied on an input stream that is _not_seekable_ or on an update stream that is _not_seekable_ and in which the most recent operation was input. Seekability can be tested with lseek(fileno(fp),0,SEEK_CUR). */ # if @REPLACE_FFLUSH@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define fflush rpl_fflush # endif _GL_FUNCDECL_RPL (fflush, int, (FILE *gl_stream)); _GL_CXXALIAS_RPL (fflush, int, (FILE *gl_stream)); # else _GL_CXXALIAS_SYS (fflush, int, (FILE *gl_stream)); # endif _GL_CXXALIASWARN (fflush); #elif defined GNULIB_POSIXCHECK # undef fflush /* Assume fflush is always declared. */ _GL_WARN_ON_USE (fflush, "fflush is not always POSIX compliant - " "use gnulib module fflush for portable POSIX compliance"); #endif #if @GNULIB_FGETC@ # if @REPLACE_STDIO_READ_FUNCS@ && @GNULIB_STDIO_H_NONBLOCKING@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fgetc # define fgetc rpl_fgetc # endif _GL_FUNCDECL_RPL (fgetc, int, (FILE *stream) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (fgetc, int, (FILE *stream)); # else _GL_CXXALIAS_SYS (fgetc, int, (FILE *stream)); # endif _GL_CXXALIASWARN (fgetc); #endif #if @GNULIB_FGETS@ # if @REPLACE_STDIO_READ_FUNCS@ && @GNULIB_STDIO_H_NONBLOCKING@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fgets # define fgets rpl_fgets # endif _GL_FUNCDECL_RPL (fgets, char *, (char *s, int n, FILE *stream) _GL_ARG_NONNULL ((1, 3))); _GL_CXXALIAS_RPL (fgets, char *, (char *s, int n, FILE *stream)); # else _GL_CXXALIAS_SYS (fgets, char *, (char *s, int n, FILE *stream)); # endif _GL_CXXALIASWARN (fgets); #endif #if @GNULIB_FOPEN@ # if @REPLACE_FOPEN@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fopen # define fopen rpl_fopen # endif _GL_FUNCDECL_RPL (fopen, FILE *, (const char *filename, const char *mode) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (fopen, FILE *, (const char *filename, const char *mode)); # else _GL_CXXALIAS_SYS (fopen, FILE *, (const char *filename, const char *mode)); # endif _GL_CXXALIASWARN (fopen); #elif defined GNULIB_POSIXCHECK # undef fopen /* Assume fopen is always declared. */ _GL_WARN_ON_USE (fopen, "fopen on native Windows platforms is not POSIX compliant - " "use gnulib module fopen for portability"); #endif #if @GNULIB_FPRINTF_POSIX@ || @GNULIB_FPRINTF@ # if (@GNULIB_FPRINTF_POSIX@ && @REPLACE_FPRINTF@) \ || (@GNULIB_FPRINTF@ && @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@)) # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define fprintf rpl_fprintf # endif # define GNULIB_overrides_fprintf 1 # if @GNULIB_FPRINTF_POSIX@ || @GNULIB_VFPRINTF_POSIX@ _GL_FUNCDECL_RPL (fprintf, int, (FILE *fp, const char *format, ...) _GL_ATTRIBUTE_FORMAT_PRINTF (2, 3) _GL_ARG_NONNULL ((1, 2))); # else _GL_FUNCDECL_RPL (fprintf, int, (FILE *fp, const char *format, ...) _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM (2, 3) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_RPL (fprintf, int, (FILE *fp, const char *format, ...)); # else _GL_CXXALIAS_SYS (fprintf, int, (FILE *fp, const char *format, ...)); # endif _GL_CXXALIASWARN (fprintf); #endif #if !@GNULIB_FPRINTF_POSIX@ && defined GNULIB_POSIXCHECK # if !GNULIB_overrides_fprintf # undef fprintf # endif /* Assume fprintf is always declared. */ _GL_WARN_ON_USE (fprintf, "fprintf is not always POSIX compliant - " "use gnulib module fprintf-posix for portable " "POSIX compliance"); #endif #if @GNULIB_FPURGE@ /* Discard all pending buffered I/O data on STREAM. STREAM must not be wide-character oriented. When discarding pending output, the file position is set back to where it was before the write calls. When discarding pending input, the file position is advanced to match the end of the previously read input. Return 0 if successful. Upon error, return -1 and set errno. */ # if @REPLACE_FPURGE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define fpurge rpl_fpurge # endif _GL_FUNCDECL_RPL (fpurge, int, (FILE *gl_stream) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (fpurge, int, (FILE *gl_stream)); # else # if !@HAVE_DECL_FPURGE@ _GL_FUNCDECL_SYS (fpurge, int, (FILE *gl_stream) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (fpurge, int, (FILE *gl_stream)); # endif _GL_CXXALIASWARN (fpurge); #elif defined GNULIB_POSIXCHECK # undef fpurge # if HAVE_RAW_DECL_FPURGE _GL_WARN_ON_USE (fpurge, "fpurge is not always present - " "use gnulib module fpurge for portability"); # endif #endif #if @GNULIB_FPUTC@ # if @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@) # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fputc # define fputc rpl_fputc # endif _GL_FUNCDECL_RPL (fputc, int, (int c, FILE *stream) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (fputc, int, (int c, FILE *stream)); # else _GL_CXXALIAS_SYS (fputc, int, (int c, FILE *stream)); # endif _GL_CXXALIASWARN (fputc); #endif #if @GNULIB_FPUTS@ # if @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@) # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fputs # define fputs rpl_fputs # endif _GL_FUNCDECL_RPL (fputs, int, (const char *string, FILE *stream) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (fputs, int, (const char *string, FILE *stream)); # else _GL_CXXALIAS_SYS (fputs, int, (const char *string, FILE *stream)); # endif _GL_CXXALIASWARN (fputs); #endif #if @GNULIB_FREAD@ # if @REPLACE_STDIO_READ_FUNCS@ && @GNULIB_STDIO_H_NONBLOCKING@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fread # define fread rpl_fread # endif _GL_FUNCDECL_RPL (fread, size_t, (void *ptr, size_t s, size_t n, FILE *stream) _GL_ARG_NONNULL ((4))); _GL_CXXALIAS_RPL (fread, size_t, (void *ptr, size_t s, size_t n, FILE *stream)); # else _GL_CXXALIAS_SYS (fread, size_t, (void *ptr, size_t s, size_t n, FILE *stream)); # endif _GL_CXXALIASWARN (fread); #endif #if @GNULIB_FREOPEN@ # if @REPLACE_FREOPEN@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef freopen # define freopen rpl_freopen # endif _GL_FUNCDECL_RPL (freopen, FILE *, (const char *filename, const char *mode, FILE *stream) _GL_ARG_NONNULL ((2, 3))); _GL_CXXALIAS_RPL (freopen, FILE *, (const char *filename, const char *mode, FILE *stream)); # else _GL_CXXALIAS_SYS (freopen, FILE *, (const char *filename, const char *mode, FILE *stream)); # endif _GL_CXXALIASWARN (freopen); #elif defined GNULIB_POSIXCHECK # undef freopen /* Assume freopen is always declared. */ _GL_WARN_ON_USE (freopen, "freopen on native Windows platforms is not POSIX compliant - " "use gnulib module freopen for portability"); #endif #if @GNULIB_FSCANF@ # if @REPLACE_STDIO_READ_FUNCS@ && @GNULIB_STDIO_H_NONBLOCKING@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fscanf # define fscanf rpl_fscanf # endif _GL_FUNCDECL_RPL (fscanf, int, (FILE *stream, const char *format, ...) _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM (2, 3) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (fscanf, int, (FILE *stream, const char *format, ...)); # else _GL_CXXALIAS_SYS (fscanf, int, (FILE *stream, const char *format, ...)); # endif _GL_CXXALIASWARN (fscanf); #endif /* Set up the following warnings, based on which modules are in use. GNU Coding Standards discourage the use of fseek, since it imposes an arbitrary limitation on some 32-bit hosts. Remember that the fseek module depends on the fseeko module, so we only have three cases to consider: 1. The developer is not using either module. Issue a warning under GNULIB_POSIXCHECK for both functions, to remind them that both functions have bugs on some systems. _GL_NO_LARGE_FILES has no impact on this warning. 2. The developer is using both modules. They may be unaware of the arbitrary limitations of fseek, so issue a warning under GNULIB_POSIXCHECK. On the other hand, they may be using both modules intentionally, so the developer can define _GL_NO_LARGE_FILES in the compilation units where the use of fseek is safe, to silence the warning. 3. The developer is using the fseeko module, but not fseek. Gnulib guarantees that fseek will still work around platform bugs in that case, but we presume that the developer is aware of the pitfalls of fseek and was trying to avoid it, so issue a warning even when GNULIB_POSIXCHECK is undefined. Again, _GL_NO_LARGE_FILES can be defined to silence the warning in particular compilation units. In C++ compilations with GNULIB_NAMESPACE, in order to avoid that fseek gets defined as a macro, it is recommended that the developer uses the fseek module, even if he is not calling the fseek function. Most gnulib clients that perform stream operations should fall into category 3. */ #if @GNULIB_FSEEK@ # if defined GNULIB_POSIXCHECK && !defined _GL_NO_LARGE_FILES # define _GL_FSEEK_WARN /* Category 2, above. */ # undef fseek # endif # if @REPLACE_FSEEK@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fseek # define fseek rpl_fseek # endif _GL_FUNCDECL_RPL (fseek, int, (FILE *fp, long offset, int whence) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (fseek, int, (FILE *fp, long offset, int whence)); # else _GL_CXXALIAS_SYS (fseek, int, (FILE *fp, long offset, int whence)); # endif _GL_CXXALIASWARN (fseek); #endif #if @GNULIB_FSEEKO@ # if !@GNULIB_FSEEK@ && !defined _GL_NO_LARGE_FILES # define _GL_FSEEK_WARN /* Category 3, above. */ # undef fseek # endif # if @REPLACE_FSEEKO@ /* Provide an fseeko function that is aware of a preceding fflush(), and which detects pipes. */ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fseeko # define fseeko rpl_fseeko # endif _GL_FUNCDECL_RPL (fseeko, int, (FILE *fp, off_t offset, int whence) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (fseeko, int, (FILE *fp, off_t offset, int whence)); # else # if ! @HAVE_DECL_FSEEKO@ _GL_FUNCDECL_SYS (fseeko, int, (FILE *fp, off_t offset, int whence) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (fseeko, int, (FILE *fp, off_t offset, int whence)); # endif _GL_CXXALIASWARN (fseeko); #elif defined GNULIB_POSIXCHECK # define _GL_FSEEK_WARN /* Category 1, above. */ # undef fseek # undef fseeko # if HAVE_RAW_DECL_FSEEKO _GL_WARN_ON_USE (fseeko, "fseeko is unportable - " "use gnulib module fseeko for portability"); # endif #endif #ifdef _GL_FSEEK_WARN # undef _GL_FSEEK_WARN /* Here, either fseek is undefined (but C89 guarantees that it is declared), or it is defined as rpl_fseek (declared above). */ _GL_WARN_ON_USE (fseek, "fseek cannot handle files larger than 4 GB " "on 32-bit platforms - " "use fseeko function for handling of large files"); #endif /* ftell, ftello. See the comments on fseek/fseeko. */ #if @GNULIB_FTELL@ # if defined GNULIB_POSIXCHECK && !defined _GL_NO_LARGE_FILES # define _GL_FTELL_WARN /* Category 2, above. */ # undef ftell # endif # if @REPLACE_FTELL@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef ftell # define ftell rpl_ftell # endif _GL_FUNCDECL_RPL (ftell, long, (FILE *fp) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (ftell, long, (FILE *fp)); # else _GL_CXXALIAS_SYS (ftell, long, (FILE *fp)); # endif _GL_CXXALIASWARN (ftell); #endif #if @GNULIB_FTELLO@ # if !@GNULIB_FTELL@ && !defined _GL_NO_LARGE_FILES # define _GL_FTELL_WARN /* Category 3, above. */ # undef ftell # endif # if @REPLACE_FTELLO@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef ftello # define ftello rpl_ftello # endif _GL_FUNCDECL_RPL (ftello, off_t, (FILE *fp) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (ftello, off_t, (FILE *fp)); # else # if ! @HAVE_DECL_FTELLO@ _GL_FUNCDECL_SYS (ftello, off_t, (FILE *fp) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (ftello, off_t, (FILE *fp)); # endif _GL_CXXALIASWARN (ftello); #elif defined GNULIB_POSIXCHECK # define _GL_FTELL_WARN /* Category 1, above. */ # undef ftell # undef ftello # if HAVE_RAW_DECL_FTELLO _GL_WARN_ON_USE (ftello, "ftello is unportable - " "use gnulib module ftello for portability"); # endif #endif #ifdef _GL_FTELL_WARN # undef _GL_FTELL_WARN /* Here, either ftell is undefined (but C89 guarantees that it is declared), or it is defined as rpl_ftell (declared above). */ _GL_WARN_ON_USE (ftell, "ftell cannot handle files larger than 4 GB " "on 32-bit platforms - " "use ftello function for handling of large files"); #endif #if @GNULIB_FWRITE@ # if @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@) # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fwrite # define fwrite rpl_fwrite # endif _GL_FUNCDECL_RPL (fwrite, size_t, (const void *ptr, size_t s, size_t n, FILE *stream) _GL_ARG_NONNULL ((1, 4))); _GL_CXXALIAS_RPL (fwrite, size_t, (const void *ptr, size_t s, size_t n, FILE *stream)); # else _GL_CXXALIAS_SYS (fwrite, size_t, (const void *ptr, size_t s, size_t n, FILE *stream)); /* Work around bug 11959 when fortifying glibc 2.4 through 2.15 <http://sources.redhat.com/bugzilla/show_bug.cgi?id=11959>, which sometimes causes an unwanted diagnostic for fwrite calls. This affects only function declaration attributes under certain versions of gcc and clang, and is not needed for C++. */ # if (0 < __USE_FORTIFY_LEVEL \ && __GLIBC__ == 2 && 4 <= __GLIBC_MINOR__ && __GLIBC_MINOR__ <= 15 \ && 3 < __GNUC__ + (4 <= __GNUC_MINOR__) \ && !defined __cplusplus) # undef fwrite # undef fwrite_unlocked extern size_t __REDIRECT (rpl_fwrite, (const void *__restrict, size_t, size_t, FILE *__restrict), fwrite); extern size_t __REDIRECT (rpl_fwrite_unlocked, (const void *__restrict, size_t, size_t, FILE *__restrict), fwrite_unlocked); # define fwrite rpl_fwrite # define fwrite_unlocked rpl_fwrite_unlocked # endif # endif _GL_CXXALIASWARN (fwrite); #endif #if @GNULIB_GETC@ # if @REPLACE_STDIO_READ_FUNCS@ && @GNULIB_STDIO_H_NONBLOCKING@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef getc # define getc rpl_fgetc # endif _GL_FUNCDECL_RPL (fgetc, int, (FILE *stream) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL_1 (getc, rpl_fgetc, int, (FILE *stream)); # else _GL_CXXALIAS_SYS (getc, int, (FILE *stream)); # endif _GL_CXXALIASWARN (getc); #endif #if @GNULIB_GETCHAR@ # if @REPLACE_STDIO_READ_FUNCS@ && @GNULIB_STDIO_H_NONBLOCKING@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef getchar # define getchar rpl_getchar # endif _GL_FUNCDECL_RPL (getchar, int, (void)); _GL_CXXALIAS_RPL (getchar, int, (void)); # else _GL_CXXALIAS_SYS (getchar, int, (void)); # endif _GL_CXXALIASWARN (getchar); #endif #if @GNULIB_GETDELIM@ /* Read input, up to (and including) the next occurrence of DELIMITER, from STREAM, store it in *LINEPTR (and NUL-terminate it). *LINEPTR is a pointer returned from malloc (or NULL), pointing to *LINESIZE bytes of space. It is realloc'd as necessary. Return the number of bytes read and stored at *LINEPTR (not including the NUL terminator), or -1 on error or EOF. */ # if @REPLACE_GETDELIM@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef getdelim # define getdelim rpl_getdelim # endif _GL_FUNCDECL_RPL (getdelim, ssize_t, (char **lineptr, size_t *linesize, int delimiter, FILE *stream) _GL_ARG_NONNULL ((1, 2, 4))); _GL_CXXALIAS_RPL (getdelim, ssize_t, (char **lineptr, size_t *linesize, int delimiter, FILE *stream)); # else # if !@HAVE_DECL_GETDELIM@ _GL_FUNCDECL_SYS (getdelim, ssize_t, (char **lineptr, size_t *linesize, int delimiter, FILE *stream) _GL_ARG_NONNULL ((1, 2, 4))); # endif _GL_CXXALIAS_SYS (getdelim, ssize_t, (char **lineptr, size_t *linesize, int delimiter, FILE *stream)); # endif _GL_CXXALIASWARN (getdelim); #elif defined GNULIB_POSIXCHECK # undef getdelim # if HAVE_RAW_DECL_GETDELIM _GL_WARN_ON_USE (getdelim, "getdelim is unportable - " "use gnulib module getdelim for portability"); # endif #endif #if @GNULIB_GETLINE@ /* Read a line, up to (and including) the next newline, from STREAM, store it in *LINEPTR (and NUL-terminate it). *LINEPTR is a pointer returned from malloc (or NULL), pointing to *LINESIZE bytes of space. It is realloc'd as necessary. Return the number of bytes read and stored at *LINEPTR (not including the NUL terminator), or -1 on error or EOF. */ # if @REPLACE_GETLINE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef getline # define getline rpl_getline # endif _GL_FUNCDECL_RPL (getline, ssize_t, (char **lineptr, size_t *linesize, FILE *stream) _GL_ARG_NONNULL ((1, 2, 3))); _GL_CXXALIAS_RPL (getline, ssize_t, (char **lineptr, size_t *linesize, FILE *stream)); # else # if !@HAVE_DECL_GETLINE@ _GL_FUNCDECL_SYS (getline, ssize_t, (char **lineptr, size_t *linesize, FILE *stream) _GL_ARG_NONNULL ((1, 2, 3))); # endif _GL_CXXALIAS_SYS (getline, ssize_t, (char **lineptr, size_t *linesize, FILE *stream)); # endif # if @HAVE_DECL_GETLINE@ _GL_CXXALIASWARN (getline); # endif #elif defined GNULIB_POSIXCHECK # undef getline # if HAVE_RAW_DECL_GETLINE _GL_WARN_ON_USE (getline, "getline is unportable - " "use gnulib module getline for portability"); # endif #endif /* It is very rare that the developer ever has full control of stdin, so any use of gets warrants an unconditional warning; besides, C11 removed it. */ #undef gets #if HAVE_RAW_DECL_GETS _GL_WARN_ON_USE (gets, "gets is a security hole - use fgets instead"); #endif #if @GNULIB_OBSTACK_PRINTF@ || @GNULIB_OBSTACK_PRINTF_POSIX@ struct obstack; /* Grow an obstack with formatted output. Return the number of bytes added to OBS. No trailing nul byte is added, and the object should be closed with obstack_finish before use. Upon memory allocation error, call obstack_alloc_failed_handler. Upon other error, return -1. */ # if @REPLACE_OBSTACK_PRINTF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define obstack_printf rpl_obstack_printf # endif _GL_FUNCDECL_RPL (obstack_printf, int, (struct obstack *obs, const char *format, ...) _GL_ATTRIBUTE_FORMAT_PRINTF (2, 3) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (obstack_printf, int, (struct obstack *obs, const char *format, ...)); # else # if !@HAVE_DECL_OBSTACK_PRINTF@ _GL_FUNCDECL_SYS (obstack_printf, int, (struct obstack *obs, const char *format, ...) _GL_ATTRIBUTE_FORMAT_PRINTF (2, 3) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (obstack_printf, int, (struct obstack *obs, const char *format, ...)); # endif _GL_CXXALIASWARN (obstack_printf); # if @REPLACE_OBSTACK_PRINTF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define obstack_vprintf rpl_obstack_vprintf # endif _GL_FUNCDECL_RPL (obstack_vprintf, int, (struct obstack *obs, const char *format, va_list args) _GL_ATTRIBUTE_FORMAT_PRINTF (2, 0) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (obstack_vprintf, int, (struct obstack *obs, const char *format, va_list args)); # else # if !@HAVE_DECL_OBSTACK_PRINTF@ _GL_FUNCDECL_SYS (obstack_vprintf, int, (struct obstack *obs, const char *format, va_list args) _GL_ATTRIBUTE_FORMAT_PRINTF (2, 0) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (obstack_vprintf, int, (struct obstack *obs, const char *format, va_list args)); # endif _GL_CXXALIASWARN (obstack_vprintf); #endif #if @GNULIB_PCLOSE@ # if !@HAVE_PCLOSE@ _GL_FUNCDECL_SYS (pclose, int, (FILE *stream) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (pclose, int, (FILE *stream)); _GL_CXXALIASWARN (pclose); #elif defined GNULIB_POSIXCHECK # undef pclose # if HAVE_RAW_DECL_PCLOSE _GL_WARN_ON_USE (pclose, "pclose is unportable - " "use gnulib module pclose for more portability"); # endif #endif #if @GNULIB_PERROR@ /* Print a message to standard error, describing the value of ERRNO, (if STRING is not NULL and not empty) prefixed with STRING and ": ", and terminated with a newline. */ # if @REPLACE_PERROR@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define perror rpl_perror # endif _GL_FUNCDECL_RPL (perror, void, (const char *string)); _GL_CXXALIAS_RPL (perror, void, (const char *string)); # else _GL_CXXALIAS_SYS (perror, void, (const char *string)); # endif _GL_CXXALIASWARN (perror); #elif defined GNULIB_POSIXCHECK # undef perror /* Assume perror is always declared. */ _GL_WARN_ON_USE (perror, "perror is not always POSIX compliant - " "use gnulib module perror for portability"); #endif #if @GNULIB_POPEN@ # if @REPLACE_POPEN@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef popen # define popen rpl_popen # endif _GL_FUNCDECL_RPL (popen, FILE *, (const char *cmd, const char *mode) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (popen, FILE *, (const char *cmd, const char *mode)); # else # if !@HAVE_POPEN@ _GL_FUNCDECL_SYS (popen, FILE *, (const char *cmd, const char *mode) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (popen, FILE *, (const char *cmd, const char *mode)); # endif _GL_CXXALIASWARN (popen); #elif defined GNULIB_POSIXCHECK # undef popen # if HAVE_RAW_DECL_POPEN _GL_WARN_ON_USE (popen, "popen is buggy on some platforms - " "use gnulib module popen or pipe for more portability"); # endif #endif #if @GNULIB_PRINTF_POSIX@ || @GNULIB_PRINTF@ # if (@GNULIB_PRINTF_POSIX@ && @REPLACE_PRINTF@) \ || (@GNULIB_PRINTF@ && @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@)) # if defined __GNUC__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) /* Don't break __attribute__((format(printf,M,N))). */ # define printf __printf__ # endif # if @GNULIB_PRINTF_POSIX@ || @GNULIB_VFPRINTF_POSIX@ _GL_FUNCDECL_RPL_1 (__printf__, int, (const char *format, ...) __asm__ (@ASM_SYMBOL_PREFIX@ _GL_STDIO_MACROEXPAND_AND_STRINGIZE(rpl_printf)) _GL_ATTRIBUTE_FORMAT_PRINTF (1, 2) _GL_ARG_NONNULL ((1))); # else _GL_FUNCDECL_RPL_1 (__printf__, int, (const char *format, ...) __asm__ (@ASM_SYMBOL_PREFIX@ _GL_STDIO_MACROEXPAND_AND_STRINGIZE(rpl_printf)) _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM (1, 2) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_RPL_1 (printf, __printf__, int, (const char *format, ...)); # else # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define printf rpl_printf # endif _GL_FUNCDECL_RPL (printf, int, (const char *format, ...) _GL_ATTRIBUTE_FORMAT_PRINTF (1, 2) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (printf, int, (const char *format, ...)); # endif # define GNULIB_overrides_printf 1 # else _GL_CXXALIAS_SYS (printf, int, (const char *format, ...)); # endif _GL_CXXALIASWARN (printf); #endif #if !@GNULIB_PRINTF_POSIX@ && defined GNULIB_POSIXCHECK # if !GNULIB_overrides_printf # undef printf # endif /* Assume printf is always declared. */ _GL_WARN_ON_USE (printf, "printf is not always POSIX compliant - " "use gnulib module printf-posix for portable " "POSIX compliance"); #endif #if @GNULIB_PUTC@ # if @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@) # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef putc # define putc rpl_fputc # endif _GL_FUNCDECL_RPL (fputc, int, (int c, FILE *stream) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL_1 (putc, rpl_fputc, int, (int c, FILE *stream)); # else _GL_CXXALIAS_SYS (putc, int, (int c, FILE *stream)); # endif _GL_CXXALIASWARN (putc); #endif #if @GNULIB_PUTCHAR@ # if @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@) # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef putchar # define putchar rpl_putchar # endif _GL_FUNCDECL_RPL (putchar, int, (int c)); _GL_CXXALIAS_RPL (putchar, int, (int c)); # else _GL_CXXALIAS_SYS (putchar, int, (int c)); # endif _GL_CXXALIASWARN (putchar); #endif #if @GNULIB_PUTS@ # if @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@) # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef puts # define puts rpl_puts # endif _GL_FUNCDECL_RPL (puts, int, (const char *string) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (puts, int, (const char *string)); # else _GL_CXXALIAS_SYS (puts, int, (const char *string)); # endif _GL_CXXALIASWARN (puts); #endif #if @GNULIB_REMOVE@ # if @REPLACE_REMOVE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef remove # define remove rpl_remove # endif _GL_FUNCDECL_RPL (remove, int, (const char *name) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (remove, int, (const char *name)); # else _GL_CXXALIAS_SYS (remove, int, (const char *name)); # endif _GL_CXXALIASWARN (remove); #elif defined GNULIB_POSIXCHECK # undef remove /* Assume remove is always declared. */ _GL_WARN_ON_USE (remove, "remove cannot handle directories on some platforms - " "use gnulib module remove for more portability"); #endif #if @GNULIB_RENAME@ # if @REPLACE_RENAME@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef rename # define rename rpl_rename # endif _GL_FUNCDECL_RPL (rename, int, (const char *old_filename, const char *new_filename) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (rename, int, (const char *old_filename, const char *new_filename)); # else _GL_CXXALIAS_SYS (rename, int, (const char *old_filename, const char *new_filename)); # endif _GL_CXXALIASWARN (rename); #elif defined GNULIB_POSIXCHECK # undef rename /* Assume rename is always declared. */ _GL_WARN_ON_USE (rename, "rename is buggy on some platforms - " "use gnulib module rename for more portability"); #endif #if @GNULIB_RENAMEAT@ # if @REPLACE_RENAMEAT@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef renameat # define renameat rpl_renameat # endif _GL_FUNCDECL_RPL (renameat, int, (int fd1, char const *file1, int fd2, char const *file2) _GL_ARG_NONNULL ((2, 4))); _GL_CXXALIAS_RPL (renameat, int, (int fd1, char const *file1, int fd2, char const *file2)); # else # if !@HAVE_RENAMEAT@ _GL_FUNCDECL_SYS (renameat, int, (int fd1, char const *file1, int fd2, char const *file2) _GL_ARG_NONNULL ((2, 4))); # endif _GL_CXXALIAS_SYS (renameat, int, (int fd1, char const *file1, int fd2, char const *file2)); # endif _GL_CXXALIASWARN (renameat); #elif defined GNULIB_POSIXCHECK # undef renameat # if HAVE_RAW_DECL_RENAMEAT _GL_WARN_ON_USE (renameat, "renameat is not portable - " "use gnulib module renameat for portability"); # endif #endif #if @GNULIB_SCANF@ # if @REPLACE_STDIO_READ_FUNCS@ && @GNULIB_STDIO_H_NONBLOCKING@ # if defined __GNUC__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef scanf /* Don't break __attribute__((format(scanf,M,N))). */ # define scanf __scanf__ # endif _GL_FUNCDECL_RPL_1 (__scanf__, int, (const char *format, ...) __asm__ (@ASM_SYMBOL_PREFIX@ _GL_STDIO_MACROEXPAND_AND_STRINGIZE(rpl_scanf)) _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM (1, 2) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL_1 (scanf, __scanf__, int, (const char *format, ...)); # else # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef scanf # define scanf rpl_scanf # endif _GL_FUNCDECL_RPL (scanf, int, (const char *format, ...) _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM (1, 2) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (scanf, int, (const char *format, ...)); # endif # else _GL_CXXALIAS_SYS (scanf, int, (const char *format, ...)); # endif _GL_CXXALIASWARN (scanf); #endif #if @GNULIB_SNPRINTF@ # if @REPLACE_SNPRINTF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define snprintf rpl_snprintf # endif _GL_FUNCDECL_RPL (snprintf, int, (char *str, size_t size, const char *format, ...) _GL_ATTRIBUTE_FORMAT_PRINTF (3, 4) _GL_ARG_NONNULL ((3))); _GL_CXXALIAS_RPL (snprintf, int, (char *str, size_t size, const char *format, ...)); # else # if !@HAVE_DECL_SNPRINTF@ _GL_FUNCDECL_SYS (snprintf, int, (char *str, size_t size, const char *format, ...) _GL_ATTRIBUTE_FORMAT_PRINTF (3, 4) _GL_ARG_NONNULL ((3))); # endif _GL_CXXALIAS_SYS (snprintf, int, (char *str, size_t size, const char *format, ...)); # endif _GL_CXXALIASWARN (snprintf); #elif defined GNULIB_POSIXCHECK # undef snprintf # if HAVE_RAW_DECL_SNPRINTF _GL_WARN_ON_USE (snprintf, "snprintf is unportable - " "use gnulib module snprintf for portability"); # endif #endif /* Some people would argue that all sprintf uses should be warned about (for example, OpenBSD issues a link warning for it), since it can cause security holes due to buffer overruns. However, we believe that sprintf can be used safely, and is more efficient than snprintf in those safe cases; and as proof of our belief, we use sprintf in several gnulib modules. So this header intentionally avoids adding a warning to sprintf except when GNULIB_POSIXCHECK is defined. */ #if @GNULIB_SPRINTF_POSIX@ # if @REPLACE_SPRINTF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define sprintf rpl_sprintf # endif _GL_FUNCDECL_RPL (sprintf, int, (char *str, const char *format, ...) _GL_ATTRIBUTE_FORMAT_PRINTF (2, 3) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (sprintf, int, (char *str, const char *format, ...)); # else _GL_CXXALIAS_SYS (sprintf, int, (char *str, const char *format, ...)); # endif _GL_CXXALIASWARN (sprintf); #elif defined GNULIB_POSIXCHECK # undef sprintf /* Assume sprintf is always declared. */ _GL_WARN_ON_USE (sprintf, "sprintf is not always POSIX compliant - " "use gnulib module sprintf-posix for portable " "POSIX compliance"); #endif #if @GNULIB_TMPFILE@ # if @REPLACE_TMPFILE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define tmpfile rpl_tmpfile # endif _GL_FUNCDECL_RPL (tmpfile, FILE *, (void)); _GL_CXXALIAS_RPL (tmpfile, FILE *, (void)); # else _GL_CXXALIAS_SYS (tmpfile, FILE *, (void)); # endif _GL_CXXALIASWARN (tmpfile); #elif defined GNULIB_POSIXCHECK # undef tmpfile # if HAVE_RAW_DECL_TMPFILE _GL_WARN_ON_USE (tmpfile, "tmpfile is not usable on mingw - " "use gnulib module tmpfile for portability"); # endif #endif #if @GNULIB_VASPRINTF@ /* Write formatted output to a string dynamically allocated with malloc(). If the memory allocation succeeds, store the address of the string in *RESULT and return the number of resulting bytes, excluding the trailing NUL. Upon memory allocation error, or some other error, return -1. */ # if @REPLACE_VASPRINTF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define asprintf rpl_asprintf # endif _GL_FUNCDECL_RPL (asprintf, int, (char **result, const char *format, ...) _GL_ATTRIBUTE_FORMAT_PRINTF (2, 3) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (asprintf, int, (char **result, const char *format, ...)); # else # if !@HAVE_VASPRINTF@ _GL_FUNCDECL_SYS (asprintf, int, (char **result, const char *format, ...) _GL_ATTRIBUTE_FORMAT_PRINTF (2, 3) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (asprintf, int, (char **result, const char *format, ...)); # endif _GL_CXXALIASWARN (asprintf); # if @REPLACE_VASPRINTF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define vasprintf rpl_vasprintf # endif _GL_FUNCDECL_RPL (vasprintf, int, (char **result, const char *format, va_list args) _GL_ATTRIBUTE_FORMAT_PRINTF (2, 0) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (vasprintf, int, (char **result, const char *format, va_list args)); # else # if !@HAVE_VASPRINTF@ _GL_FUNCDECL_SYS (vasprintf, int, (char **result, const char *format, va_list args) _GL_ATTRIBUTE_FORMAT_PRINTF (2, 0) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (vasprintf, int, (char **result, const char *format, va_list args)); # endif _GL_CXXALIASWARN (vasprintf); #endif #if @GNULIB_VDPRINTF@ # if @REPLACE_VDPRINTF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define vdprintf rpl_vdprintf # endif _GL_FUNCDECL_RPL (vdprintf, int, (int fd, const char *format, va_list args) _GL_ATTRIBUTE_FORMAT_PRINTF (2, 0) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (vdprintf, int, (int fd, const char *format, va_list args)); # else # if !@HAVE_VDPRINTF@ _GL_FUNCDECL_SYS (vdprintf, int, (int fd, const char *format, va_list args) _GL_ATTRIBUTE_FORMAT_PRINTF (2, 0) _GL_ARG_NONNULL ((2))); # endif /* Need to cast, because on Solaris, the third parameter will likely be __va_list args. */ _GL_CXXALIAS_SYS_CAST (vdprintf, int, (int fd, const char *format, va_list args)); # endif _GL_CXXALIASWARN (vdprintf); #elif defined GNULIB_POSIXCHECK # undef vdprintf # if HAVE_RAW_DECL_VDPRINTF _GL_WARN_ON_USE (vdprintf, "vdprintf is unportable - " "use gnulib module vdprintf for portability"); # endif #endif #if @GNULIB_VFPRINTF_POSIX@ || @GNULIB_VFPRINTF@ # if (@GNULIB_VFPRINTF_POSIX@ && @REPLACE_VFPRINTF@) \ || (@GNULIB_VFPRINTF@ && @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@)) # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define vfprintf rpl_vfprintf # endif # define GNULIB_overrides_vfprintf 1 # if @GNULIB_VFPRINTF_POSIX@ _GL_FUNCDECL_RPL (vfprintf, int, (FILE *fp, const char *format, va_list args) _GL_ATTRIBUTE_FORMAT_PRINTF (2, 0) _GL_ARG_NONNULL ((1, 2))); # else _GL_FUNCDECL_RPL (vfprintf, int, (FILE *fp, const char *format, va_list args) _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM (2, 0) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_RPL (vfprintf, int, (FILE *fp, const char *format, va_list args)); # else /* Need to cast, because on Solaris, the third parameter is __va_list args and GCC's fixincludes did not change this to __gnuc_va_list. */ _GL_CXXALIAS_SYS_CAST (vfprintf, int, (FILE *fp, const char *format, va_list args)); # endif _GL_CXXALIASWARN (vfprintf); #endif #if !@GNULIB_VFPRINTF_POSIX@ && defined GNULIB_POSIXCHECK # if !GNULIB_overrides_vfprintf # undef vfprintf # endif /* Assume vfprintf is always declared. */ _GL_WARN_ON_USE (vfprintf, "vfprintf is not always POSIX compliant - " "use gnulib module vfprintf-posix for portable " "POSIX compliance"); #endif #if @GNULIB_VFSCANF@ # if @REPLACE_STDIO_READ_FUNCS@ && @GNULIB_STDIO_H_NONBLOCKING@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef vfscanf # define vfscanf rpl_vfscanf # endif _GL_FUNCDECL_RPL (vfscanf, int, (FILE *stream, const char *format, va_list args) _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM (2, 0) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (vfscanf, int, (FILE *stream, const char *format, va_list args)); # else _GL_CXXALIAS_SYS (vfscanf, int, (FILE *stream, const char *format, va_list args)); # endif _GL_CXXALIASWARN (vfscanf); #endif #if @GNULIB_VPRINTF_POSIX@ || @GNULIB_VPRINTF@ # if (@GNULIB_VPRINTF_POSIX@ && @REPLACE_VPRINTF@) \ || (@GNULIB_VPRINTF@ && @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@)) # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define vprintf rpl_vprintf # endif # define GNULIB_overrides_vprintf 1 # if @GNULIB_VPRINTF_POSIX@ || @GNULIB_VFPRINTF_POSIX@ _GL_FUNCDECL_RPL (vprintf, int, (const char *format, va_list args) _GL_ATTRIBUTE_FORMAT_PRINTF (1, 0) _GL_ARG_NONNULL ((1))); # else _GL_FUNCDECL_RPL (vprintf, int, (const char *format, va_list args) _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM (1, 0) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_RPL (vprintf, int, (const char *format, va_list args)); # else /* Need to cast, because on Solaris, the second parameter is __va_list args and GCC's fixincludes did not change this to __gnuc_va_list. */ _GL_CXXALIAS_SYS_CAST (vprintf, int, (const char *format, va_list args)); # endif _GL_CXXALIASWARN (vprintf); #endif #if !@GNULIB_VPRINTF_POSIX@ && defined GNULIB_POSIXCHECK # if !GNULIB_overrides_vprintf # undef vprintf # endif /* Assume vprintf is always declared. */ _GL_WARN_ON_USE (vprintf, "vprintf is not always POSIX compliant - " "use gnulib module vprintf-posix for portable " "POSIX compliance"); #endif #if @GNULIB_VSCANF@ # if @REPLACE_STDIO_READ_FUNCS@ && @GNULIB_STDIO_H_NONBLOCKING@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef vscanf # define vscanf rpl_vscanf # endif _GL_FUNCDECL_RPL (vscanf, int, (const char *format, va_list args) _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM (1, 0) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (vscanf, int, (const char *format, va_list args)); # else _GL_CXXALIAS_SYS (vscanf, int, (const char *format, va_list args)); # endif _GL_CXXALIASWARN (vscanf); #endif #if @GNULIB_VSNPRINTF@ # if @REPLACE_VSNPRINTF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define vsnprintf rpl_vsnprintf # endif _GL_FUNCDECL_RPL (vsnprintf, int, (char *str, size_t size, const char *format, va_list args) _GL_ATTRIBUTE_FORMAT_PRINTF (3, 0) _GL_ARG_NONNULL ((3))); _GL_CXXALIAS_RPL (vsnprintf, int, (char *str, size_t size, const char *format, va_list args)); # else # if !@HAVE_DECL_VSNPRINTF@ _GL_FUNCDECL_SYS (vsnprintf, int, (char *str, size_t size, const char *format, va_list args) _GL_ATTRIBUTE_FORMAT_PRINTF (3, 0) _GL_ARG_NONNULL ((3))); # endif _GL_CXXALIAS_SYS (vsnprintf, int, (char *str, size_t size, const char *format, va_list args)); # endif _GL_CXXALIASWARN (vsnprintf); #elif defined GNULIB_POSIXCHECK # undef vsnprintf # if HAVE_RAW_DECL_VSNPRINTF _GL_WARN_ON_USE (vsnprintf, "vsnprintf is unportable - " "use gnulib module vsnprintf for portability"); # endif #endif #if @GNULIB_VSPRINTF_POSIX@ # if @REPLACE_VSPRINTF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define vsprintf rpl_vsprintf # endif _GL_FUNCDECL_RPL (vsprintf, int, (char *str, const char *format, va_list args) _GL_ATTRIBUTE_FORMAT_PRINTF (2, 0) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (vsprintf, int, (char *str, const char *format, va_list args)); # else /* Need to cast, because on Solaris, the third parameter is __va_list args and GCC's fixincludes did not change this to __gnuc_va_list. */ _GL_CXXALIAS_SYS_CAST (vsprintf, int, (char *str, const char *format, va_list args)); # endif _GL_CXXALIASWARN (vsprintf); #elif defined GNULIB_POSIXCHECK # undef vsprintf /* Assume vsprintf is always declared. */ _GL_WARN_ON_USE (vsprintf, "vsprintf is not always POSIX compliant - " "use gnulib module vsprintf-posix for portable " "POSIX compliance"); #endif #endif /* _@GUARD_PREFIX@_STDIO_H */ #endif /* _@GUARD_PREFIX@_STDIO_H */ #endif ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gss-1.0.3/src/gl/msvc-nothrow.c���������������������������������������������������������������������0000644�0000000�0000000�00000002434�12415470504�013206� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Wrappers that don't throw invalid parameter notifications with MSVC runtime libraries. Copyright (C) 2011-2014 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/>. */ #include <config.h> /* Specification. */ #include "msvc-nothrow.h" /* Get declarations of the native Windows API functions. */ #define WIN32_LEAN_AND_MEAN #include <windows.h> #include "msvc-inval.h" #undef _get_osfhandle #if HAVE_MSVC_INVALID_PARAMETER_HANDLER intptr_t _gl_nothrow_get_osfhandle (int fd) { intptr_t result; TRY_MSVC_INVAL { result = _get_osfhandle (fd); } CATCH_MSVC_INVAL { result = (intptr_t) INVALID_HANDLE_VALUE; } DONE_MSVC_INVAL; return result; } #endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gss-1.0.3/src/gl/Makefile.am������������������������������������������������������������������������0000644�0000000�0000000�00000077322�12415470506�012442� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������## DO NOT EDIT! GENERATED AUTOMATICALLY! ## Process this file with automake to produce Makefile.in. # Copyright (C) 2002-2014 Free Software Foundation, Inc. # # 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 3 of the License, or # (at your option) any later version. # # This 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 file. If not, see <http://www.gnu.org/licenses/>. # # 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=src/gl/override --lib=libgnu --source-base=src/gl --m4-base=src/gl/m4 --doc-base=doc --tests-base=src/gl/tests --aux-dir=build-aux --no-conditional-dependencies --libtool --macro-prefix=srcgl --no-vc-files base64 error getopt-gnu progname version-etc AUTOMAKE_OPTIONS = 1.9.6 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 = $(srcgl_LTLIBOBJS) libgnu_la_DEPENDENCIES = $(srcgl_LTLIBOBJS) EXTRA_libgnu_la_SOURCES = libgnu_la_LDFLAGS = $(AM_LDFLAGS) libgnu_la_LDFLAGS += -no-undefined libgnu_la_LDFLAGS += $(LTLIBINTL) ## begin gnulib module absolute-header # Use this preprocessor expression to decide whether #include_next works. # Do not rely on a 'configure'-time test for this, since the expression # might appear in an installed header, which is used by some other compiler. HAVE_INCLUDE_NEXT = (__GNUC__ || 60000000 <= __DECC_VER) ## end gnulib module absolute-header ## begin gnulib module base64 libgnu_la_SOURCES += base64.h base64.c ## end gnulib module base64 ## begin gnulib module errno BUILT_SOURCES += $(ERRNO_H) # We need the following in order to create <errno.h> when the system # doesn't have one that is POSIX compliant. if GL_GENERATE_ERRNO_H errno.h: errno.in.h $(top_builddir)/config.status $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ sed -e 's|@''GUARD_PREFIX''@|GL_SRCGL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_ERRNO_H''@|$(NEXT_ERRNO_H)|g' \ -e 's|@''EMULTIHOP_HIDDEN''@|$(EMULTIHOP_HIDDEN)|g' \ -e 's|@''EMULTIHOP_VALUE''@|$(EMULTIHOP_VALUE)|g' \ -e 's|@''ENOLINK_HIDDEN''@|$(ENOLINK_HIDDEN)|g' \ -e 's|@''ENOLINK_VALUE''@|$(ENOLINK_VALUE)|g' \ -e 's|@''EOVERFLOW_HIDDEN''@|$(EOVERFLOW_HIDDEN)|g' \ -e 's|@''EOVERFLOW_VALUE''@|$(EOVERFLOW_VALUE)|g' \ < $(srcdir)/errno.in.h; \ } > $@-t && \ mv $@-t $@ else errno.h: $(top_builddir)/config.status rm -f $@ endif MOSTLYCLEANFILES += errno.h errno.h-t EXTRA_DIST += errno.in.h ## end gnulib module errno ## begin gnulib module error EXTRA_DIST += error.c error.h EXTRA_libgnu_la_SOURCES += error.c ## end gnulib module error ## 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 $(top_builddir)/config.status $(ARG_NONNULL_H) $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ sed -e 's|@''GUARD_PREFIX''@|GL_SRCGL|g' \ -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|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|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 intprops EXTRA_DIST += intprops.h ## end gnulib module intprops ## begin gnulib module memchr EXTRA_DIST += memchr.c memchr.valgrind EXTRA_libgnu_la_SOURCES += memchr.c ## end gnulib module memchr ## begin gnulib module msvc-inval EXTRA_DIST += msvc-inval.c msvc-inval.h EXTRA_libgnu_la_SOURCES += msvc-inval.c ## end gnulib module msvc-inval ## begin gnulib module msvc-nothrow EXTRA_DIST += msvc-nothrow.c msvc-nothrow.h EXTRA_libgnu_la_SOURCES += msvc-nothrow.c ## end gnulib module msvc-nothrow ## begin gnulib module progname libgnu_la_SOURCES += progname.h progname.c ## end gnulib module progname ## begin gnulib module snippet/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/snippet/arg-nonnull.h, except that it has the copyright header cut # off. arg-nonnull.h: $(top_srcdir)/build-aux/snippet/arg-nonnull.h $(AM_V_GEN)rm -f $@-t $@ && \ sed -n -e '/GL_ARG_NONNULL/,$$p' \ < $(top_srcdir)/build-aux/snippet/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/snippet/arg-nonnull.h ## end gnulib module snippet/arg-nonnull ## begin gnulib module snippet/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/snippet/c++defs.h, except that it has the copyright header cut off. c++defs.h: $(top_srcdir)/build-aux/snippet/c++defs.h $(AM_V_GEN)rm -f $@-t $@ && \ sed -n -e '/_GL_CXXDEFS/,$$p' \ < $(top_srcdir)/build-aux/snippet/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/snippet/c++defs.h ## end gnulib module snippet/c++defs ## begin gnulib module snippet/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/snippet/warn-on-use.h, except that it has the copyright header cut # off. warn-on-use.h: $(top_srcdir)/build-aux/snippet/warn-on-use.h $(AM_V_GEN)rm -f $@-t $@ && \ sed -n -e '/^.ifndef/,$$p' \ < $(top_srcdir)/build-aux/snippet/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/snippet/warn-on-use.h ## end gnulib module snippet/warn-on-use ## 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. if GL_GENERATE_STDARG_H stdarg.h: stdarg.in.h $(top_builddir)/config.status $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ sed -e 's|@''GUARD_PREFIX''@|GL_SRCGL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_STDARG_H''@|$(NEXT_STDARG_H)|g' \ < $(srcdir)/stdarg.in.h; \ } > $@-t && \ mv $@-t $@ else stdarg.h: $(top_builddir)/config.status rm -f $@ endif MOSTLYCLEANFILES += stdarg.h stdarg.h-t EXTRA_DIST += stdarg.in.h ## end gnulib module stdarg ## begin gnulib module stdbool BUILT_SOURCES += $(STDBOOL_H) # We need the following in order to create <stdbool.h> when the system # doesn't have one that works. if GL_GENERATE_STDBOOL_H stdbool.h: stdbool.in.h $(top_builddir)/config.status $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ sed -e 's/@''HAVE__BOOL''@/$(HAVE__BOOL)/g' < $(srcdir)/stdbool.in.h; \ } > $@-t && \ mv $@-t $@ else stdbool.h: $(top_builddir)/config.status rm -f $@ endif MOSTLYCLEANFILES += stdbool.h stdbool.h-t EXTRA_DIST += stdbool.in.h ## end gnulib module stdbool ## 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. if GL_GENERATE_STDDEF_H stddef.h: stddef.in.h $(top_builddir)/config.status $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ sed -e 's|@''GUARD_PREFIX''@|GL_SRCGL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|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 $@ else stddef.h: $(top_builddir)/config.status rm -f $@ endif MOSTLYCLEANFILES += stddef.h stddef.h-t EXTRA_DIST += stddef.in.h ## end gnulib module stddef ## begin gnulib module stdio BUILT_SOURCES += stdio.h # We need the following in order to create <stdio.h> when the system # doesn't have one that works with the given compiler. stdio.h: stdio.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ sed -e 's|@''GUARD_PREFIX''@|GL_SRCGL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_STDIO_H''@|$(NEXT_STDIO_H)|g' \ -e 's/@''GNULIB_DPRINTF''@/$(GNULIB_DPRINTF)/g' \ -e 's/@''GNULIB_FCLOSE''@/$(GNULIB_FCLOSE)/g' \ -e 's/@''GNULIB_FDOPEN''@/$(GNULIB_FDOPEN)/g' \ -e 's/@''GNULIB_FFLUSH''@/$(GNULIB_FFLUSH)/g' \ -e 's/@''GNULIB_FGETC''@/$(GNULIB_FGETC)/g' \ -e 's/@''GNULIB_FGETS''@/$(GNULIB_FGETS)/g' \ -e 's/@''GNULIB_FOPEN''@/$(GNULIB_FOPEN)/g' \ -e 's/@''GNULIB_FPRINTF''@/$(GNULIB_FPRINTF)/g' \ -e 's/@''GNULIB_FPRINTF_POSIX''@/$(GNULIB_FPRINTF_POSIX)/g' \ -e 's/@''GNULIB_FPURGE''@/$(GNULIB_FPURGE)/g' \ -e 's/@''GNULIB_FPUTC''@/$(GNULIB_FPUTC)/g' \ -e 's/@''GNULIB_FPUTS''@/$(GNULIB_FPUTS)/g' \ -e 's/@''GNULIB_FREAD''@/$(GNULIB_FREAD)/g' \ -e 's/@''GNULIB_FREOPEN''@/$(GNULIB_FREOPEN)/g' \ -e 's/@''GNULIB_FSCANF''@/$(GNULIB_FSCANF)/g' \ -e 's/@''GNULIB_FSEEK''@/$(GNULIB_FSEEK)/g' \ -e 's/@''GNULIB_FSEEKO''@/$(GNULIB_FSEEKO)/g' \ -e 's/@''GNULIB_FTELL''@/$(GNULIB_FTELL)/g' \ -e 's/@''GNULIB_FTELLO''@/$(GNULIB_FTELLO)/g' \ -e 's/@''GNULIB_FWRITE''@/$(GNULIB_FWRITE)/g' \ -e 's/@''GNULIB_GETC''@/$(GNULIB_GETC)/g' \ -e 's/@''GNULIB_GETCHAR''@/$(GNULIB_GETCHAR)/g' \ -e 's/@''GNULIB_GETDELIM''@/$(GNULIB_GETDELIM)/g' \ -e 's/@''GNULIB_GETLINE''@/$(GNULIB_GETLINE)/g' \ -e 's/@''GNULIB_OBSTACK_PRINTF''@/$(GNULIB_OBSTACK_PRINTF)/g' \ -e 's/@''GNULIB_OBSTACK_PRINTF_POSIX''@/$(GNULIB_OBSTACK_PRINTF_POSIX)/g' \ -e 's/@''GNULIB_PCLOSE''@/$(GNULIB_PCLOSE)/g' \ -e 's/@''GNULIB_PERROR''@/$(GNULIB_PERROR)/g' \ -e 's/@''GNULIB_POPEN''@/$(GNULIB_POPEN)/g' \ -e 's/@''GNULIB_PRINTF''@/$(GNULIB_PRINTF)/g' \ -e 's/@''GNULIB_PRINTF_POSIX''@/$(GNULIB_PRINTF_POSIX)/g' \ -e 's/@''GNULIB_PUTC''@/$(GNULIB_PUTC)/g' \ -e 's/@''GNULIB_PUTCHAR''@/$(GNULIB_PUTCHAR)/g' \ -e 's/@''GNULIB_PUTS''@/$(GNULIB_PUTS)/g' \ -e 's/@''GNULIB_REMOVE''@/$(GNULIB_REMOVE)/g' \ -e 's/@''GNULIB_RENAME''@/$(GNULIB_RENAME)/g' \ -e 's/@''GNULIB_RENAMEAT''@/$(GNULIB_RENAMEAT)/g' \ -e 's/@''GNULIB_SCANF''@/$(GNULIB_SCANF)/g' \ -e 's/@''GNULIB_SNPRINTF''@/$(GNULIB_SNPRINTF)/g' \ -e 's/@''GNULIB_SPRINTF_POSIX''@/$(GNULIB_SPRINTF_POSIX)/g' \ -e 's/@''GNULIB_STDIO_H_NONBLOCKING''@/$(GNULIB_STDIO_H_NONBLOCKING)/g' \ -e 's/@''GNULIB_STDIO_H_SIGPIPE''@/$(GNULIB_STDIO_H_SIGPIPE)/g' \ -e 's/@''GNULIB_TMPFILE''@/$(GNULIB_TMPFILE)/g' \ -e 's/@''GNULIB_VASPRINTF''@/$(GNULIB_VASPRINTF)/g' \ -e 's/@''GNULIB_VDPRINTF''@/$(GNULIB_VDPRINTF)/g' \ -e 's/@''GNULIB_VFPRINTF''@/$(GNULIB_VFPRINTF)/g' \ -e 's/@''GNULIB_VFPRINTF_POSIX''@/$(GNULIB_VFPRINTF_POSIX)/g' \ -e 's/@''GNULIB_VFSCANF''@/$(GNULIB_VFSCANF)/g' \ -e 's/@''GNULIB_VSCANF''@/$(GNULIB_VSCANF)/g' \ -e 's/@''GNULIB_VPRINTF''@/$(GNULIB_VPRINTF)/g' \ -e 's/@''GNULIB_VPRINTF_POSIX''@/$(GNULIB_VPRINTF_POSIX)/g' \ -e 's/@''GNULIB_VSNPRINTF''@/$(GNULIB_VSNPRINTF)/g' \ -e 's/@''GNULIB_VSPRINTF_POSIX''@/$(GNULIB_VSPRINTF_POSIX)/g' \ < $(srcdir)/stdio.in.h | \ sed -e 's|@''HAVE_DECL_FPURGE''@|$(HAVE_DECL_FPURGE)|g' \ -e 's|@''HAVE_DECL_FSEEKO''@|$(HAVE_DECL_FSEEKO)|g' \ -e 's|@''HAVE_DECL_FTELLO''@|$(HAVE_DECL_FTELLO)|g' \ -e 's|@''HAVE_DECL_GETDELIM''@|$(HAVE_DECL_GETDELIM)|g' \ -e 's|@''HAVE_DECL_GETLINE''@|$(HAVE_DECL_GETLINE)|g' \ -e 's|@''HAVE_DECL_OBSTACK_PRINTF''@|$(HAVE_DECL_OBSTACK_PRINTF)|g' \ -e 's|@''HAVE_DECL_SNPRINTF''@|$(HAVE_DECL_SNPRINTF)|g' \ -e 's|@''HAVE_DECL_VSNPRINTF''@|$(HAVE_DECL_VSNPRINTF)|g' \ -e 's|@''HAVE_DPRINTF''@|$(HAVE_DPRINTF)|g' \ -e 's|@''HAVE_FSEEKO''@|$(HAVE_FSEEKO)|g' \ -e 's|@''HAVE_FTELLO''@|$(HAVE_FTELLO)|g' \ -e 's|@''HAVE_PCLOSE''@|$(HAVE_PCLOSE)|g' \ -e 's|@''HAVE_POPEN''@|$(HAVE_POPEN)|g' \ -e 's|@''HAVE_RENAMEAT''@|$(HAVE_RENAMEAT)|g' \ -e 's|@''HAVE_VASPRINTF''@|$(HAVE_VASPRINTF)|g' \ -e 's|@''HAVE_VDPRINTF''@|$(HAVE_VDPRINTF)|g' \ -e 's|@''REPLACE_DPRINTF''@|$(REPLACE_DPRINTF)|g' \ -e 's|@''REPLACE_FCLOSE''@|$(REPLACE_FCLOSE)|g' \ -e 's|@''REPLACE_FDOPEN''@|$(REPLACE_FDOPEN)|g' \ -e 's|@''REPLACE_FFLUSH''@|$(REPLACE_FFLUSH)|g' \ -e 's|@''REPLACE_FOPEN''@|$(REPLACE_FOPEN)|g' \ -e 's|@''REPLACE_FPRINTF''@|$(REPLACE_FPRINTF)|g' \ -e 's|@''REPLACE_FPURGE''@|$(REPLACE_FPURGE)|g' \ -e 's|@''REPLACE_FREOPEN''@|$(REPLACE_FREOPEN)|g' \ -e 's|@''REPLACE_FSEEK''@|$(REPLACE_FSEEK)|g' \ -e 's|@''REPLACE_FSEEKO''@|$(REPLACE_FSEEKO)|g' \ -e 's|@''REPLACE_FTELL''@|$(REPLACE_FTELL)|g' \ -e 's|@''REPLACE_FTELLO''@|$(REPLACE_FTELLO)|g' \ -e 's|@''REPLACE_GETDELIM''@|$(REPLACE_GETDELIM)|g' \ -e 's|@''REPLACE_GETLINE''@|$(REPLACE_GETLINE)|g' \ -e 's|@''REPLACE_OBSTACK_PRINTF''@|$(REPLACE_OBSTACK_PRINTF)|g' \ -e 's|@''REPLACE_PERROR''@|$(REPLACE_PERROR)|g' \ -e 's|@''REPLACE_POPEN''@|$(REPLACE_POPEN)|g' \ -e 's|@''REPLACE_PRINTF''@|$(REPLACE_PRINTF)|g' \ -e 's|@''REPLACE_REMOVE''@|$(REPLACE_REMOVE)|g' \ -e 's|@''REPLACE_RENAME''@|$(REPLACE_RENAME)|g' \ -e 's|@''REPLACE_RENAMEAT''@|$(REPLACE_RENAMEAT)|g' \ -e 's|@''REPLACE_SNPRINTF''@|$(REPLACE_SNPRINTF)|g' \ -e 's|@''REPLACE_SPRINTF''@|$(REPLACE_SPRINTF)|g' \ -e 's|@''REPLACE_STDIO_READ_FUNCS''@|$(REPLACE_STDIO_READ_FUNCS)|g' \ -e 's|@''REPLACE_STDIO_WRITE_FUNCS''@|$(REPLACE_STDIO_WRITE_FUNCS)|g' \ -e 's|@''REPLACE_TMPFILE''@|$(REPLACE_TMPFILE)|g' \ -e 's|@''REPLACE_VASPRINTF''@|$(REPLACE_VASPRINTF)|g' \ -e 's|@''REPLACE_VDPRINTF''@|$(REPLACE_VDPRINTF)|g' \ -e 's|@''REPLACE_VFPRINTF''@|$(REPLACE_VFPRINTF)|g' \ -e 's|@''REPLACE_VPRINTF''@|$(REPLACE_VPRINTF)|g' \ -e 's|@''REPLACE_VSNPRINTF''@|$(REPLACE_VSNPRINTF)|g' \ -e 's|@''REPLACE_VSPRINTF''@|$(REPLACE_VSPRINTF)|g' \ -e 's|@''ASM_SYMBOL_PREFIX''@|$(ASM_SYMBOL_PREFIX)|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 += stdio.h stdio.h-t EXTRA_DIST += stdio.in.h ## end gnulib module stdio ## begin gnulib module strerror EXTRA_DIST += strerror.c EXTRA_libgnu_la_SOURCES += strerror.c ## end gnulib module strerror ## begin gnulib module strerror-override EXTRA_DIST += strerror-override.c strerror-override.h EXTRA_libgnu_la_SOURCES += strerror-override.c ## end gnulib module strerror-override ## 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 $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ sed -e 's|@''GUARD_PREFIX''@|GL_SRCGL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_STRING_H''@|$(NEXT_STRING_H)|g' \ -e 's/@''GNULIB_FFSL''@/$(GNULIB_FFSL)/g' \ -e 's/@''GNULIB_FFSLL''@/$(GNULIB_FFSLL)/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_STRERROR_R''@/$(GNULIB_STRERROR_R)/g' \ -e 's/@''GNULIB_STRSIGNAL''@/$(GNULIB_STRSIGNAL)/g' \ -e 's/@''GNULIB_STRVERSCMP''@/$(GNULIB_STRVERSCMP)/g' \ < $(srcdir)/string.in.h | \ sed -e 's|@''HAVE_FFSL''@|$(HAVE_FFSL)|g' \ -e 's|@''HAVE_FFSLL''@|$(HAVE_FFSLL)|g' \ -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_STRERROR_R''@|$(HAVE_DECL_STRERROR_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_STRCHRNUL''@|$(REPLACE_STRCHRNUL)|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_STRERROR_R''@|$(REPLACE_STRERROR_R)|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 sys_types BUILT_SOURCES += sys/types.h # We need the following in order to create <sys/types.h> when the system # doesn't have one that works with the given compiler. sys/types.h: sys_types.in.h $(top_builddir)/config.status $(AM_V_at)$(MKDIR_P) sys $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ sed -e 's|@''GUARD_PREFIX''@|GL_SRCGL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_SYS_TYPES_H''@|$(NEXT_SYS_TYPES_H)|g' \ -e 's|@''WINDOWS_64_BIT_OFF_T''@|$(WINDOWS_64_BIT_OFF_T)|g' \ < $(srcdir)/sys_types.in.h; \ } > $@-t && \ mv $@-t $@ MOSTLYCLEANFILES += sys/types.h sys/types.h-t EXTRA_DIST += sys_types.in.h ## end gnulib module sys_types ## begin gnulib module unistd BUILT_SOURCES += unistd.h libgnu_la_SOURCES += unistd.c # 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 $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ sed -e 's|@''GUARD_PREFIX''@|GL_SRCGL|g' \ -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|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_UNISTD_H''@|$(NEXT_UNISTD_H)|g' \ -e 's|@''WINDOWS_64_BIT_OFF_T''@|$(WINDOWS_64_BIT_OFF_T)|g' \ -e 's/@''GNULIB_CHDIR''@/$(GNULIB_CHDIR)/g' \ -e 's/@''GNULIB_CHOWN''@/$(GNULIB_CHOWN)/g' \ -e 's/@''GNULIB_CLOSE''@/$(GNULIB_CLOSE)/g' \ -e 's/@''GNULIB_DUP''@/$(GNULIB_DUP)/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_FDATASYNC''@/$(GNULIB_FDATASYNC)/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_GROUP_MEMBER''@/$(GNULIB_GROUP_MEMBER)/g' \ -e 's/@''GNULIB_ISATTY''@/$(GNULIB_ISATTY)/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_PIPE''@/$(GNULIB_PIPE)/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_READ''@/$(GNULIB_READ)/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_SETHOSTNAME''@/$(GNULIB_SETHOSTNAME)/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''@/0$(GNULIB_GL_SRCGL_UNISTD_H_GETOPT)/g' \ -e 's/@''GNULIB_UNISTD_H_NONBLOCKING''@/$(GNULIB_UNISTD_H_NONBLOCKING)/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_FDATASYNC''@|$(HAVE_FDATASYNC)|g' \ -e 's|@''HAVE_FSYNC''@|$(HAVE_FSYNC)|g' \ -e 's|@''HAVE_FTRUNCATE''@|$(HAVE_FTRUNCATE)|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_GROUP_MEMBER''@|$(HAVE_GROUP_MEMBER)|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_PIPE''@|$(HAVE_PIPE)|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_SETHOSTNAME''@|$(HAVE_SETHOSTNAME)|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_UNLINKAT''@|$(HAVE_UNLINKAT)|g' \ -e 's|@''HAVE_USLEEP''@|$(HAVE_USLEEP)|g' \ -e 's|@''HAVE_DECL_ENVIRON''@|$(HAVE_DECL_ENVIRON)|g' \ -e 's|@''HAVE_DECL_FCHDIR''@|$(HAVE_DECL_FCHDIR)|g' \ -e 's|@''HAVE_DECL_FDATASYNC''@|$(HAVE_DECL_FDATASYNC)|g' \ -e 's|@''HAVE_DECL_GETDOMAINNAME''@|$(HAVE_DECL_GETDOMAINNAME)|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_DECL_SETHOSTNAME''@|$(HAVE_DECL_SETHOSTNAME)|g' \ -e 's|@''HAVE_DECL_TTYNAME_R''@|$(HAVE_DECL_TTYNAME_R)|g' \ -e 's|@''HAVE_OS_H''@|$(HAVE_OS_H)|g' \ -e 's|@''HAVE_SYS_PARAM_H''@|$(HAVE_SYS_PARAM_H)|g' \ | \ sed -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_FTRUNCATE''@|$(REPLACE_FTRUNCATE)|g' \ -e 's|@''REPLACE_GETCWD''@|$(REPLACE_GETCWD)|g' \ -e 's|@''REPLACE_GETDOMAINNAME''@|$(REPLACE_GETDOMAINNAME)|g' \ -e 's|@''REPLACE_GETDTABLESIZE''@|$(REPLACE_GETDTABLESIZE)|g' \ -e 's|@''REPLACE_GETLOGIN_R''@|$(REPLACE_GETLOGIN_R)|g' \ -e 's|@''REPLACE_GETGROUPS''@|$(REPLACE_GETGROUPS)|g' \ -e 's|@''REPLACE_GETPAGESIZE''@|$(REPLACE_GETPAGESIZE)|g' \ -e 's|@''REPLACE_ISATTY''@|$(REPLACE_ISATTY)|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_READ''@|$(REPLACE_READ)|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 verify EXTRA_DIST += verify.h ## end gnulib module verify ## begin gnulib module version-etc libgnu_la_SOURCES += version-etc.h version-etc.c ## end gnulib module version-etc mostlyclean-local: mostlyclean-generic @for dir in '' $(MOSTLYCLEANDIRS); do \ if test -n "$$dir" && test -d $$dir; then \ echo "rmdir $$dir"; rmdir $$dir; \ fi; \ done; \ : ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gss-1.0.3/src/gl/msvc-inval.c�����������������������������������������������������������������������0000644�0000000�0000000�00000007511�12415470504�012620� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Invalid parameter handler for MSVC runtime libraries. Copyright (C) 2011-2014 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/>. */ #include <config.h> /* Specification. */ #include "msvc-inval.h" #if HAVE_MSVC_INVALID_PARAMETER_HANDLER \ && !(MSVC_INVALID_PARAMETER_HANDLING == SANE_LIBRARY_HANDLING) /* Get _invalid_parameter_handler type and _set_invalid_parameter_handler declaration. */ # include <stdlib.h> # if MSVC_INVALID_PARAMETER_HANDLING == DEFAULT_HANDLING static void __cdecl gl_msvc_invalid_parameter_handler (const wchar_t *expression, const wchar_t *function, const wchar_t *file, unsigned int line, uintptr_t dummy) { } # else /* Get declarations of the native Windows API functions. */ # define WIN32_LEAN_AND_MEAN # include <windows.h> # if defined _MSC_VER static void __cdecl gl_msvc_invalid_parameter_handler (const wchar_t *expression, const wchar_t *function, const wchar_t *file, unsigned int line, uintptr_t dummy) { RaiseException (STATUS_GNULIB_INVALID_PARAMETER, 0, 0, NULL); } # else /* An index to thread-local storage. */ static DWORD tls_index; static int tls_initialized /* = 0 */; /* Used as a fallback only. */ static struct gl_msvc_inval_per_thread not_per_thread; struct gl_msvc_inval_per_thread * gl_msvc_inval_current (void) { if (!tls_initialized) { tls_index = TlsAlloc (); tls_initialized = 1; } if (tls_index == TLS_OUT_OF_INDEXES) /* TlsAlloc had failed. */ return ¬_per_thread; else { struct gl_msvc_inval_per_thread *pointer = (struct gl_msvc_inval_per_thread *) TlsGetValue (tls_index); if (pointer == NULL) { /* First call. Allocate a new 'struct gl_msvc_inval_per_thread'. */ pointer = (struct gl_msvc_inval_per_thread *) malloc (sizeof (struct gl_msvc_inval_per_thread)); if (pointer == NULL) /* Could not allocate memory. Use the global storage. */ pointer = ¬_per_thread; TlsSetValue (tls_index, pointer); } return pointer; } } static void __cdecl gl_msvc_invalid_parameter_handler (const wchar_t *expression, const wchar_t *function, const wchar_t *file, unsigned int line, uintptr_t dummy) { struct gl_msvc_inval_per_thread *current = gl_msvc_inval_current (); if (current->restart_valid) longjmp (current->restart, 1); else /* An invalid parameter notification from outside the gnulib code. Give the caller a chance to intervene. */ RaiseException (STATUS_GNULIB_INVALID_PARAMETER, 0, 0, NULL); } # endif # endif static int gl_msvc_inval_initialized /* = 0 */; void gl_msvc_inval_ensure_handler (void) { if (gl_msvc_inval_initialized == 0) { _set_invalid_parameter_handler (gl_msvc_invalid_parameter_handler); gl_msvc_inval_initialized = 1; } } #endif ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gss-1.0.3/src/gl/version-etc.h����������������������������������������������������������������������0000644�0000000�0000000�00000005555�12415470505�013013� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Print --version and bug-reporting information in a consistent format. Copyright (C) 1999, 2003, 2005, 2009-2014 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 _GL_ATTRIBUTE_SENTINEL # if 4 <= __GNUC__ # define _GL_ATTRIBUTE_SENTINEL __attribute__ ((__sentinel__)) # else # define _GL_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 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: */ /* 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 */ ...) _GL_ATTRIBUTE_SENTINEL; /* Display the usual "Report bugs to" stanza. */ extern void emit_bug_reporting_address (void); #endif /* VERSION_ETC_H */ ���������������������������������������������������������������������������������������������������������������������������������������������������gss-1.0.3/src/gl/base64.c���������������������������������������������������������������������������0000644�0000000�0000000�00000047620�12415470504�011632� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* base64.c -- Encode binary data using printable characters. Copyright (C) 1999-2001, 2004-2006, 2009-2014 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 Simon Josefsson. Partially adapted from GNU MailUtils * (mailbox/filter_trans.c, as of 2004-11-28). Improved by review * from Paul Eggert, Bruno Haible, and Stepan Kasal. * * See also RFC 4648 <http://www.ietf.org/rfc/rfc4648.txt>. * * Be careful with error checking. Here is how you would typically * use these functions: * * bool ok = base64_decode_alloc (in, inlen, &out, &outlen); * if (!ok) * FAIL: input was not valid base64 * if (out == NULL) * FAIL: memory allocation error * OK: data in OUT/OUTLEN * * size_t outlen = base64_encode_alloc (in, inlen, &out); * if (out == NULL && outlen == 0 && inlen != 0) * FAIL: input too long * if (out == NULL) * FAIL: memory allocation error * OK: data in OUT/OUTLEN. * */ #include <config.h> /* Get prototype. */ #include "base64.h" /* Get malloc. */ #include <stdlib.h> /* Get UCHAR_MAX. */ #include <limits.h> #include <string.h> /* C89 compliant way to cast 'char' to 'unsigned char'. */ static unsigned char to_uchar (char ch) { return ch; } static const char b64c[64] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; /* Base64 encode IN array of size INLEN into OUT array. OUT needs to be of length >= BASE64_LENGTH(INLEN), and INLEN needs to be a multiple of 3. */ static void base64_encode_fast (const char *restrict in, size_t inlen, char *restrict out) { while (inlen) { *out++ = b64c[to_uchar (in[0]) >> 2]; *out++ = b64c[((to_uchar (in[0]) << 4) + (to_uchar (in[1]) >> 4)) & 0x3f]; *out++ = b64c[((to_uchar (in[1]) << 2) + (to_uchar (in[2]) >> 6)) & 0x3f]; *out++ = b64c[to_uchar (in[2]) & 0x3f]; inlen -= 3; in += 3; } } /* Base64 encode IN array of size INLEN into OUT array of size OUTLEN. If OUTLEN is less than BASE64_LENGTH(INLEN), write as many bytes as possible. If OUTLEN is larger than BASE64_LENGTH(INLEN), also zero terminate the output buffer. */ void base64_encode (const char *restrict in, size_t inlen, char *restrict out, size_t outlen) { /* Note this outlen constraint can be enforced at compile time. I.E. that the output buffer is exactly large enough to hold the encoded inlen bytes. The inlen constraints (of corresponding to outlen, and being a multiple of 3) can change at runtime at the end of input. However the common case when reading large inputs is to have both constraints satisfied, so we depend on both in base_encode_fast(). */ if (outlen % 4 == 0 && inlen == outlen / 4 * 3) { base64_encode_fast (in, inlen, out); return; } while (inlen && outlen) { *out++ = b64c[to_uchar (in[0]) >> 2]; if (!--outlen) break; *out++ = b64c[((to_uchar (in[0]) << 4) + (--inlen ? to_uchar (in[1]) >> 4 : 0)) & 0x3f]; if (!--outlen) break; *out++ = (inlen ? b64c[((to_uchar (in[1]) << 2) + (--inlen ? to_uchar (in[2]) >> 6 : 0)) & 0x3f] : '='); if (!--outlen) break; *out++ = inlen ? b64c[to_uchar (in[2]) & 0x3f] : '='; if (!--outlen) break; if (inlen) inlen--; if (inlen) in += 3; } if (outlen) *out = '\0'; } /* Allocate a buffer and store zero terminated base64 encoded data from array IN of size INLEN, returning BASE64_LENGTH(INLEN), i.e., the length of the encoded data, excluding the terminating zero. On return, the OUT variable will hold a pointer to newly allocated memory that must be deallocated by the caller. If output string length would overflow, 0 is returned and OUT is set to NULL. If memory allocation failed, OUT is set to NULL, and the return value indicates length of the requested memory block, i.e., BASE64_LENGTH(inlen) + 1. */ size_t base64_encode_alloc (const char *in, size_t inlen, char **out) { size_t outlen = 1 + BASE64_LENGTH (inlen); /* Check for overflow in outlen computation. * * If there is no overflow, outlen >= inlen. * * If the operation (inlen + 2) overflows then it yields at most +1, so * outlen is 0. * * If the multiplication overflows, we lose at least half of the * correct value, so the result is < ((inlen + 2) / 3) * 2, which is * less than (inlen + 2) * 0.66667, which is less than inlen as soon as * (inlen > 4). */ if (inlen > outlen) { *out = NULL; return 0; } *out = malloc (outlen); if (!*out) return outlen; base64_encode (in, inlen, *out, outlen); return outlen - 1; } /* With this approach this file works independent of the charset used (think EBCDIC). However, it does assume that the characters in the Base64 alphabet (A-Za-z0-9+/) are encoded in 0..255. POSIX 1003.1-2001 require that char and unsigned char are 8-bit quantities, though, taking care of that problem. But this may be a potential problem on non-POSIX C99 platforms. IBM C V6 for AIX mishandles "#define B64(x) ...'x'...", so use "_" as the formal parameter rather than "x". */ #define B64(_) \ ((_) == 'A' ? 0 \ : (_) == 'B' ? 1 \ : (_) == 'C' ? 2 \ : (_) == 'D' ? 3 \ : (_) == 'E' ? 4 \ : (_) == 'F' ? 5 \ : (_) == 'G' ? 6 \ : (_) == 'H' ? 7 \ : (_) == 'I' ? 8 \ : (_) == 'J' ? 9 \ : (_) == 'K' ? 10 \ : (_) == 'L' ? 11 \ : (_) == 'M' ? 12 \ : (_) == 'N' ? 13 \ : (_) == 'O' ? 14 \ : (_) == 'P' ? 15 \ : (_) == 'Q' ? 16 \ : (_) == 'R' ? 17 \ : (_) == 'S' ? 18 \ : (_) == 'T' ? 19 \ : (_) == 'U' ? 20 \ : (_) == 'V' ? 21 \ : (_) == 'W' ? 22 \ : (_) == 'X' ? 23 \ : (_) == 'Y' ? 24 \ : (_) == 'Z' ? 25 \ : (_) == 'a' ? 26 \ : (_) == 'b' ? 27 \ : (_) == 'c' ? 28 \ : (_) == 'd' ? 29 \ : (_) == 'e' ? 30 \ : (_) == 'f' ? 31 \ : (_) == 'g' ? 32 \ : (_) == 'h' ? 33 \ : (_) == 'i' ? 34 \ : (_) == 'j' ? 35 \ : (_) == 'k' ? 36 \ : (_) == 'l' ? 37 \ : (_) == 'm' ? 38 \ : (_) == 'n' ? 39 \ : (_) == 'o' ? 40 \ : (_) == 'p' ? 41 \ : (_) == 'q' ? 42 \ : (_) == 'r' ? 43 \ : (_) == 's' ? 44 \ : (_) == 't' ? 45 \ : (_) == 'u' ? 46 \ : (_) == 'v' ? 47 \ : (_) == 'w' ? 48 \ : (_) == 'x' ? 49 \ : (_) == 'y' ? 50 \ : (_) == 'z' ? 51 \ : (_) == '0' ? 52 \ : (_) == '1' ? 53 \ : (_) == '2' ? 54 \ : (_) == '3' ? 55 \ : (_) == '4' ? 56 \ : (_) == '5' ? 57 \ : (_) == '6' ? 58 \ : (_) == '7' ? 59 \ : (_) == '8' ? 60 \ : (_) == '9' ? 61 \ : (_) == '+' ? 62 \ : (_) == '/' ? 63 \ : -1) static const signed char b64[0x100] = { B64 (0), B64 (1), B64 (2), B64 (3), B64 (4), B64 (5), B64 (6), B64 (7), B64 (8), B64 (9), B64 (10), B64 (11), B64 (12), B64 (13), B64 (14), B64 (15), B64 (16), B64 (17), B64 (18), B64 (19), B64 (20), B64 (21), B64 (22), B64 (23), B64 (24), B64 (25), B64 (26), B64 (27), B64 (28), B64 (29), B64 (30), B64 (31), B64 (32), B64 (33), B64 (34), B64 (35), B64 (36), B64 (37), B64 (38), B64 (39), B64 (40), B64 (41), B64 (42), B64 (43), B64 (44), B64 (45), B64 (46), B64 (47), B64 (48), B64 (49), B64 (50), B64 (51), B64 (52), B64 (53), B64 (54), B64 (55), B64 (56), B64 (57), B64 (58), B64 (59), B64 (60), B64 (61), B64 (62), B64 (63), B64 (64), B64 (65), B64 (66), B64 (67), B64 (68), B64 (69), B64 (70), B64 (71), B64 (72), B64 (73), B64 (74), B64 (75), B64 (76), B64 (77), B64 (78), B64 (79), B64 (80), B64 (81), B64 (82), B64 (83), B64 (84), B64 (85), B64 (86), B64 (87), B64 (88), B64 (89), B64 (90), B64 (91), B64 (92), B64 (93), B64 (94), B64 (95), B64 (96), B64 (97), B64 (98), B64 (99), B64 (100), B64 (101), B64 (102), B64 (103), B64 (104), B64 (105), B64 (106), B64 (107), B64 (108), B64 (109), B64 (110), B64 (111), B64 (112), B64 (113), B64 (114), B64 (115), B64 (116), B64 (117), B64 (118), B64 (119), B64 (120), B64 (121), B64 (122), B64 (123), B64 (124), B64 (125), B64 (126), B64 (127), B64 (128), B64 (129), B64 (130), B64 (131), B64 (132), B64 (133), B64 (134), B64 (135), B64 (136), B64 (137), B64 (138), B64 (139), B64 (140), B64 (141), B64 (142), B64 (143), B64 (144), B64 (145), B64 (146), B64 (147), B64 (148), B64 (149), B64 (150), B64 (151), B64 (152), B64 (153), B64 (154), B64 (155), B64 (156), B64 (157), B64 (158), B64 (159), B64 (160), B64 (161), B64 (162), B64 (163), B64 (164), B64 (165), B64 (166), B64 (167), B64 (168), B64 (169), B64 (170), B64 (171), B64 (172), B64 (173), B64 (174), B64 (175), B64 (176), B64 (177), B64 (178), B64 (179), B64 (180), B64 (181), B64 (182), B64 (183), B64 (184), B64 (185), B64 (186), B64 (187), B64 (188), B64 (189), B64 (190), B64 (191), B64 (192), B64 (193), B64 (194), B64 (195), B64 (196), B64 (197), B64 (198), B64 (199), B64 (200), B64 (201), B64 (202), B64 (203), B64 (204), B64 (205), B64 (206), B64 (207), B64 (208), B64 (209), B64 (210), B64 (211), B64 (212), B64 (213), B64 (214), B64 (215), B64 (216), B64 (217), B64 (218), B64 (219), B64 (220), B64 (221), B64 (222), B64 (223), B64 (224), B64 (225), B64 (226), B64 (227), B64 (228), B64 (229), B64 (230), B64 (231), B64 (232), B64 (233), B64 (234), B64 (235), B64 (236), B64 (237), B64 (238), B64 (239), B64 (240), B64 (241), B64 (242), B64 (243), B64 (244), B64 (245), B64 (246), B64 (247), B64 (248), B64 (249), B64 (250), B64 (251), B64 (252), B64 (253), B64 (254), B64 (255) }; #if UCHAR_MAX == 255 # define uchar_in_range(c) true #else # define uchar_in_range(c) ((c) <= 255) #endif /* Return true if CH is a character from the Base64 alphabet, and false otherwise. Note that '=' is padding and not considered to be part of the alphabet. */ bool isbase64 (char ch) { return uchar_in_range (to_uchar (ch)) && 0 <= b64[to_uchar (ch)]; } /* Initialize decode-context buffer, CTX. */ void base64_decode_ctx_init (struct base64_decode_context *ctx) { ctx->i = 0; } /* If CTX->i is 0 or 4, there are four or more bytes in [*IN..IN_END), and none of those four is a newline, then return *IN. Otherwise, copy up to 4 - CTX->i non-newline bytes from that range into CTX->buf, starting at index CTX->i and setting CTX->i to reflect the number of bytes copied, and return CTX->buf. In either case, advance *IN to point to the byte after the last one processed, and set *N_NON_NEWLINE to the number of verified non-newline bytes accessible through the returned pointer. */ static char * get_4 (struct base64_decode_context *ctx, char const *restrict *in, char const *restrict in_end, size_t *n_non_newline) { if (ctx->i == 4) ctx->i = 0; if (ctx->i == 0) { char const *t = *in; if (4 <= in_end - *in && memchr (t, '\n', 4) == NULL) { /* This is the common case: no newline. */ *in += 4; *n_non_newline = 4; return (char *) t; } } { /* Copy non-newline bytes into BUF. */ char const *p = *in; while (p < in_end) { char c = *p++; if (c != '\n') { ctx->buf[ctx->i++] = c; if (ctx->i == 4) break; } } *in = p; *n_non_newline = ctx->i; return ctx->buf; } } #define return_false \ do \ { \ *outp = out; \ return false; \ } \ while (false) /* Decode up to four bytes of base64-encoded data, IN, of length INLEN into the output buffer, *OUT, of size *OUTLEN bytes. Return true if decoding is successful, false otherwise. If *OUTLEN is too small, as many bytes as possible are written to *OUT. On return, advance *OUT to point to the byte after the last one written, and decrement *OUTLEN to reflect the number of bytes remaining in *OUT. */ static bool decode_4 (char const *restrict in, size_t inlen, char *restrict *outp, size_t *outleft) { char *out = *outp; if (inlen < 2) return false; if (!isbase64 (in[0]) || !isbase64 (in[1])) return false; if (*outleft) { *out++ = ((b64[to_uchar (in[0])] << 2) | (b64[to_uchar (in[1])] >> 4)); --*outleft; } if (inlen == 2) return_false; if (in[2] == '=') { if (inlen != 4) return_false; if (in[3] != '=') return_false; } else { if (!isbase64 (in[2])) return_false; if (*outleft) { *out++ = (((b64[to_uchar (in[1])] << 4) & 0xf0) | (b64[to_uchar (in[2])] >> 2)); --*outleft; } if (inlen == 3) return_false; if (in[3] == '=') { if (inlen != 4) return_false; } else { if (!isbase64 (in[3])) return_false; if (*outleft) { *out++ = (((b64[to_uchar (in[2])] << 6) & 0xc0) | b64[to_uchar (in[3])]); --*outleft; } } } *outp = out; return true; } /* Decode base64-encoded input array IN of length INLEN to output array OUT that can hold *OUTLEN bytes. The input data may be interspersed with newlines. Return true if decoding was successful, i.e. if the input was valid base64 data, false otherwise. If *OUTLEN is too small, as many bytes as possible will be written to OUT. On return, *OUTLEN holds the length of decoded bytes in OUT. Note that as soon as any non-alphabet, non-newline character is encountered, decoding is stopped and false is returned. If INLEN is zero, then process only whatever data is stored in CTX. Initially, CTX must have been initialized via base64_decode_ctx_init. Subsequent calls to this function must reuse whatever state is recorded in that buffer. It is necessary for when a quadruple of base64 input bytes spans two input buffers. If CTX is NULL then newlines are treated as garbage and the input buffer is processed as a unit. */ bool base64_decode_ctx (struct base64_decode_context *ctx, const char *restrict in, size_t inlen, char *restrict out, size_t *outlen) { size_t outleft = *outlen; bool ignore_newlines = ctx != NULL; bool flush_ctx = false; unsigned int ctx_i = 0; if (ignore_newlines) { ctx_i = ctx->i; flush_ctx = inlen == 0; } while (true) { size_t outleft_save = outleft; if (ctx_i == 0 && !flush_ctx) { while (true) { /* Save a copy of outleft, in case we need to re-parse this block of four bytes. */ outleft_save = outleft; if (!decode_4 (in, inlen, &out, &outleft)) break; in += 4; inlen -= 4; } } if (inlen == 0 && !flush_ctx) break; /* Handle the common case of 72-byte wrapped lines. This also handles any other multiple-of-4-byte wrapping. */ if (inlen && *in == '\n' && ignore_newlines) { ++in; --inlen; continue; } /* Restore OUT and OUTLEFT. */ out -= outleft_save - outleft; outleft = outleft_save; { char const *in_end = in + inlen; char const *non_nl; if (ignore_newlines) non_nl = get_4 (ctx, &in, in_end, &inlen); else non_nl = in; /* Might have nl in this case. */ /* If the input is empty or consists solely of newlines (0 non-newlines), then we're done. Likewise if there are fewer than 4 bytes when not flushing context and not treating newlines as garbage. */ if (inlen == 0 || (inlen < 4 && !flush_ctx && ignore_newlines)) { inlen = 0; break; } if (!decode_4 (non_nl, inlen, &out, &outleft)) break; inlen = in_end - in; } } *outlen -= outleft; return inlen == 0; } /* Allocate an output buffer in *OUT, and decode the base64 encoded data stored in IN of size INLEN to the *OUT buffer. On return, the size of the decoded data is stored in *OUTLEN. OUTLEN may be NULL, if the caller is not interested in the decoded length. *OUT may be NULL to indicate an out of memory error, in which case *OUTLEN contains the size of the memory block needed. The function returns true on successful decoding and memory allocation errors. (Use the *OUT and *OUTLEN parameters to differentiate between successful decoding and memory error.) The function returns false if the input was invalid, in which case *OUT is NULL and *OUTLEN is undefined. */ bool base64_decode_alloc_ctx (struct base64_decode_context *ctx, const char *in, size_t inlen, char **out, size_t *outlen) { /* This may allocate a few bytes too many, depending on input, but it's not worth the extra CPU time to compute the exact size. The exact size is 3 * (inlen + (ctx ? ctx->i : 0)) / 4, minus 1 if the input ends with "=" and minus another 1 if the input ends with "==". Dividing before multiplying avoids the possibility of overflow. */ size_t needlen = 3 * (inlen / 4) + 3; *out = malloc (needlen); if (!*out) return true; if (!base64_decode_ctx (ctx, in, inlen, *out, &needlen)) { free (*out); *out = NULL; return false; } if (outlen) *outlen = needlen; return true; } ����������������������������������������������������������������������������������������������������������������gss-1.0.3/src/gl/strerror.c�������������������������������������������������������������������������0000644�0000000�0000000�00000004043�12415470505�012421� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* strerror.c --- POSIX compatible system error routine Copyright (C) 2007-2014 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/>. */ #include <config.h> /* Specification. */ #include <string.h> #include <errno.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include "intprops.h" #include "strerror-override.h" #include "verify.h" /* Use the system functions, not the gnulib overrides in this file. */ #undef sprintf char * strerror (int n) #undef strerror { static char buf[STACKBUF_LEN]; size_t len; /* Cast away const, due to the historical signature of strerror; callers should not be modifying the string. */ const char *msg = strerror_override (n); if (msg) return (char *) msg; msg = strerror (n); /* Our strerror_r implementation might use the system's strerror buffer, so all other clients of strerror have to see the error copied into a buffer that we manage. This is not thread-safe, even if the system strerror is, but portable programs shouldn't be using strerror if they care about thread-safety. */ if (!msg || !*msg) { static char const fmt[] = "Unknown error %d"; verify (sizeof buf >= sizeof (fmt) + INT_STRLEN_BOUND (n)); sprintf (buf, fmt, n); errno = EINVAL; return buf; } /* Fix STACKBUF_LEN if this ever aborts. */ len = strlen (msg); if (sizeof buf <= len) abort (); return memcpy (buf, msg, len + 1); } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gss-1.0.3/src/gl/msvc-nothrow.h���������������������������������������������������������������������0000644�0000000�0000000�00000003010�12415470504�013202� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Wrappers that don't throw invalid parameter notifications with MSVC runtime libraries. Copyright (C) 2011-2014 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/>. */ #ifndef _MSVC_NOTHROW_H #define _MSVC_NOTHROW_H /* With MSVC runtime libraries with the "invalid parameter handler" concept, functions like fprintf(), dup2(), or close() crash when the caller passes an invalid argument. But POSIX wants error codes (such as EINVAL or EBADF) instead. This file defines wrappers that turn such an invalid parameter notification into an error code. */ #if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ /* Get original declaration of _get_osfhandle. */ # include <io.h> # if HAVE_MSVC_INVALID_PARAMETER_HANDLER /* Override _get_osfhandle. */ extern intptr_t _gl_nothrow_get_osfhandle (int fd); # define _get_osfhandle _gl_nothrow_get_osfhandle # endif #endif #endif /* _MSVC_NOTHROW_H */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gss-1.0.3/src/gl/memchr.valgrind��������������������������������������������������������������������0000664�0000000�0000000�00000000652�12012453517�013377� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Suppress a valgrind message about use of uninitialized memory in memchr(). # POSIX states that when the character is found, memchr must not read extra # bytes in an overestimated length (for example, where memchr is used to # implement strnlen). However, we use a safe word read to provide a speedup. { memchr-value4 Memcheck:Value4 fun:rpl_memchr } { memchr-value8 Memcheck:Value8 fun:rpl_memchr } ��������������������������������������������������������������������������������������gss-1.0.3/src/gl/version-etc.c����������������������������������������������������������������������0000644�0000000�0000000�00000021765�12415470505�013007� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Print --version and bug-reporting information in a consistent format. Copyright (C) 1999-2014 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 = 2014 }; /* 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); } �����������gss-1.0.3/src/gl/stdarg.in.h������������������������������������������������������������������������0000644�0000000�0000000�00000002162�12415470504�012434� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Substitute for and wrapper around <stdarg.h>. Copyright (C) 2008-2014 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/>. */ #ifndef _@GUARD_PREFIX@_STDARG_H #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ /* The include_next requires a split double-inclusion guard. */ #@INCLUDE_NEXT@ @NEXT_STDARG_H@ #ifndef _@GUARD_PREFIX@_STDARG_H #define _@GUARD_PREFIX@_STDARG_H #ifndef va_copy # define va_copy(a,b) ((a) = (b)) #endif #endif /* _@GUARD_PREFIX@_STDARG_H */ #endif /* _@GUARD_PREFIX@_STDARG_H */ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gss-1.0.3/src/gl/sys_types.in.h���������������������������������������������������������������������0000644�0000000�0000000�00000003302�12415470505�013210� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Provide a more complete sys/types.h. Copyright (C) 2011-2014 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/>. */ #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ #ifndef _@GUARD_PREFIX@_SYS_TYPES_H /* The include_next requires a split double-inclusion guard. */ # define _GL_INCLUDING_SYS_TYPES_H #@INCLUDE_NEXT@ @NEXT_SYS_TYPES_H@ # undef _GL_INCLUDING_SYS_TYPES_H #ifndef _@GUARD_PREFIX@_SYS_TYPES_H #define _@GUARD_PREFIX@_SYS_TYPES_H /* Override off_t if Large File Support is requested on native Windows. */ #if @WINDOWS_64_BIT_OFF_T@ /* Same as int64_t in <stdint.h>. */ # if defined _MSC_VER # define off_t __int64 # else # define off_t long long int # endif /* Indicator, for gnulib internal purposes. */ # define _GL_WINDOWS_64_BIT_OFF_T 1 #endif /* MSVC 9 defines size_t in <stddef.h>, not in <sys/types.h>. */ /* But avoid namespace pollution on glibc systems. */ #if ((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__) \ && ! defined __GLIBC__ # include <stddef.h> #endif #endif /* _@GUARD_PREFIX@_SYS_TYPES_H */ #endif /* _@GUARD_PREFIX@_SYS_TYPES_H */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gss-1.0.3/src/gl/stdbool.in.h�����������������������������������������������������������������������0000644�0000000�0000000�00000011772�12415470504�012625� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 2001-2003, 2006-2014 Free Software Foundation, Inc. Written by Bruno Haible <haible@clisp.cons.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, 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_STDBOOL_H #define _GL_STDBOOL_H /* ISO C 99 <stdbool.h> for platforms that lack it. */ /* Usage suggestions: Programs that use <stdbool.h> should be aware of some limitations and standards compliance issues. Standards compliance: - <stdbool.h> must be #included before 'bool', 'false', 'true' can be used. - You cannot assume that sizeof (bool) == 1. - Programs should not undefine the macros bool, true, and false, as C99 lists that as an "obsolescent feature". Limitations of this substitute, when used in a C89 environment: - <stdbool.h> must be #included before the '_Bool' type can be used. - You cannot assume that _Bool is a typedef; it might be a macro. - Bit-fields of type 'bool' are not supported. Portable code should use 'unsigned int foo : 1;' rather than 'bool foo : 1;'. - In C99, casts and automatic conversions to '_Bool' or 'bool' are performed in such a way that every nonzero value gets converted to 'true', and zero gets converted to 'false'. This doesn't work with this substitute. With this substitute, only the values 0 and 1 give the expected result when converted to _Bool' or 'bool'. - C99 allows the use of (_Bool)0.0 in constant expressions, but this substitute cannot always provide this property. Also, it is suggested that programs use 'bool' rather than '_Bool'; this isn't required, but 'bool' is more common. */ /* 7.16. Boolean type and values */ /* BeOS <sys/socket.h> already #defines false 0, true 1. We use the same definitions below, but temporarily we have to #undef them. */ #if defined __BEOS__ && !defined __HAIKU__ # include <OS.h> /* defines bool but not _Bool */ # undef false # undef true #endif #ifdef __cplusplus # define _Bool bool # define bool bool #else # if defined __BEOS__ && !defined __HAIKU__ /* A compiler known to have 'bool'. */ /* If the compiler already has both 'bool' and '_Bool', we can assume they are the same types. */ # if !@HAVE__BOOL@ typedef bool _Bool; # endif # else # if !defined __GNUC__ /* If @HAVE__BOOL@: Some HP-UX cc and AIX IBM C compiler versions have compiler bugs when the built-in _Bool type is used. See http://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html http://lists.gnu.org/archive/html/bug-coreutils/2005-11/msg00161.html http://lists.gnu.org/archive/html/bug-coreutils/2005-10/msg00086.html Similar bugs are likely with other compilers as well; this file wouldn't be used if <stdbool.h> was working. So we override the _Bool type. If !@HAVE__BOOL@: Need to define _Bool ourselves. As 'signed char' or as an enum type? Use of a typedef, with SunPRO C, leads to a stupid "warning: _Bool is a keyword in ISO C99". Use of an enum type, with IRIX cc, leads to a stupid "warning(1185): enumerated type mixed with another type". Even the existence of an enum type, without a typedef, "Invalid enumerator. (badenum)" with HP-UX cc on Tru64. The only benefit of the enum, debuggability, is not important with these compilers. So use 'signed char' and no enum. */ # define _Bool signed char # else /* With this compiler, trust the _Bool type if the compiler has it. */ # if !@HAVE__BOOL@ /* For the sake of symbolic names in gdb, define true and false as enum constants, not only as macros. It is tempting to write typedef enum { false = 0, true = 1 } _Bool; so that gdb prints values of type 'bool' symbolically. But then values of type '_Bool' might promote to 'int' or 'unsigned int' (see ISO C 99 6.7.2.2.(4)); however, '_Bool' must promote to 'int' (see ISO C 99 6.3.1.1.(2)). So add a negative value to the enum; this ensures that '_Bool' promotes to 'int'. */ typedef enum { _Bool_must_promote_to_int = -1, false = 0, true = 1 } _Bool; # endif # endif # endif # define bool _Bool #endif /* The other macros must be usable in preprocessor directives. */ #ifdef __cplusplus # define false false # define true true #else # define false 0 # define true 1 #endif #define __bool_true_false_are_defined 1 #endif /* _GL_STDBOOL_H */ ������gss-1.0.3/src/gl/intprops.h�������������������������������������������������������������������������0000644�0000000�0000000�00000035071�12415470504�012426� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* intprops.h -- properties of integer types Copyright (C) 2001-2005, 2009-2014 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 Paul Eggert. */ #ifndef _GL_INTPROPS_H #define _GL_INTPROPS_H #include <limits.h> /* Return an integer value, converted to the same type as the integer expression E after integer type promotion. V is the unconverted value. */ #define _GL_INT_CONVERT(e, v) (0 * (e) + (v)) /* Act like _GL_INT_CONVERT (E, -V) but work around a bug in IRIX 6.5 cc; see <http://lists.gnu.org/archive/html/bug-gnulib/2011-05/msg00406.html>. */ #define _GL_INT_NEGATE_CONVERT(e, v) (0 * (e) - (v)) /* The extra casts in the following macros work around compiler bugs, e.g., in Cray C 5.0.3.0. */ /* True if the arithmetic type T is an integer type. bool counts as an integer. */ #define TYPE_IS_INTEGER(t) ((t) 1.5 == 1) /* True if negative values of the signed integer type T use two's complement, ones' complement, or signed magnitude representation, respectively. Much GNU code assumes two's complement, but some people like to be portable to all possible C hosts. */ #define TYPE_TWOS_COMPLEMENT(t) ((t) ~ (t) 0 == (t) -1) #define TYPE_ONES_COMPLEMENT(t) ((t) ~ (t) 0 == 0) #define TYPE_SIGNED_MAGNITUDE(t) ((t) ~ (t) 0 < (t) -1) /* True if the signed integer expression E uses two's complement. */ #define _GL_INT_TWOS_COMPLEMENT(e) (~ _GL_INT_CONVERT (e, 0) == -1) /* True if the arithmetic type T is signed. */ #define TYPE_SIGNED(t) (! ((t) 0 < (t) -1)) /* Return 1 if the integer expression E, after integer promotion, has a signed type. */ #define _GL_INT_SIGNED(e) (_GL_INT_NEGATE_CONVERT (e, 1) < 0) /* Minimum and maximum values for integer types and expressions. These macros have undefined behavior if T is signed and has padding bits. If this is a problem for you, please let us know how to fix it for your host. */ /* The maximum and minimum values for the integer type T. */ #define TYPE_MINIMUM(t) \ ((t) (! TYPE_SIGNED (t) \ ? (t) 0 \ : TYPE_SIGNED_MAGNITUDE (t) \ ? ~ (t) 0 \ : ~ TYPE_MAXIMUM (t))) #define TYPE_MAXIMUM(t) \ ((t) (! TYPE_SIGNED (t) \ ? (t) -1 \ : ((((t) 1 << (sizeof (t) * CHAR_BIT - 2)) - 1) * 2 + 1))) /* The maximum and minimum values for the type of the expression E, after integer promotion. E should not have side effects. */ #define _GL_INT_MINIMUM(e) \ (_GL_INT_SIGNED (e) \ ? - _GL_INT_TWOS_COMPLEMENT (e) - _GL_SIGNED_INT_MAXIMUM (e) \ : _GL_INT_CONVERT (e, 0)) #define _GL_INT_MAXIMUM(e) \ (_GL_INT_SIGNED (e) \ ? _GL_SIGNED_INT_MAXIMUM (e) \ : _GL_INT_NEGATE_CONVERT (e, 1)) #define _GL_SIGNED_INT_MAXIMUM(e) \ (((_GL_INT_CONVERT (e, 1) << (sizeof ((e) + 0) * CHAR_BIT - 2)) - 1) * 2 + 1) /* Return 1 if the __typeof__ keyword works. This could be done by 'configure', but for now it's easier to do it by hand. */ #if (2 <= __GNUC__ || defined __IBM__TYPEOF__ \ || (0x5110 <= __SUNPRO_C && !__STDC__)) # define _GL_HAVE___TYPEOF__ 1 #else # define _GL_HAVE___TYPEOF__ 0 #endif /* Return 1 if the integer type or expression T might be signed. Return 0 if it is definitely unsigned. This macro does not evaluate its argument, and expands to an integer constant expression. */ #if _GL_HAVE___TYPEOF__ # define _GL_SIGNED_TYPE_OR_EXPR(t) TYPE_SIGNED (__typeof__ (t)) #else # define _GL_SIGNED_TYPE_OR_EXPR(t) 1 #endif /* Bound on length of the string representing an unsigned integer value representable in B bits. log10 (2.0) < 146/485. The smallest value of B where this bound is not tight is 2621. */ #define INT_BITS_STRLEN_BOUND(b) (((b) * 146 + 484) / 485) /* Bound on length of the string representing an integer type or expression T. Subtract 1 for the sign bit if T is signed, and then add 1 more for a minus sign if needed. Because _GL_SIGNED_TYPE_OR_EXPR sometimes returns 0 when its argument is signed, this macro may overestimate the true bound by one byte when applied to unsigned types of size 2, 4, 16, ... bytes. */ #define INT_STRLEN_BOUND(t) \ (INT_BITS_STRLEN_BOUND (sizeof (t) * CHAR_BIT \ - _GL_SIGNED_TYPE_OR_EXPR (t)) \ + _GL_SIGNED_TYPE_OR_EXPR (t)) /* Bound on buffer size needed to represent an integer type or expression T, including the terminating null. */ #define INT_BUFSIZE_BOUND(t) (INT_STRLEN_BOUND (t) + 1) /* Range overflow checks. The INT_<op>_RANGE_OVERFLOW macros return 1 if the corresponding C operators might not yield numerically correct answers due to arithmetic overflow. They do not rely on undefined or implementation-defined behavior. Their implementations are simple and straightforward, but they are a bit harder to use than the INT_<op>_OVERFLOW macros described below. Example usage: long int i = ...; long int j = ...; if (INT_MULTIPLY_RANGE_OVERFLOW (i, j, LONG_MIN, LONG_MAX)) printf ("multiply would overflow"); else printf ("product is %ld", i * j); Restrictions on *_RANGE_OVERFLOW macros: These macros do not check for all possible numerical problems or undefined or unspecified behavior: they do not check for division by zero, for bad shift counts, or for shifting negative numbers. These macros may evaluate their arguments zero or multiple times, so the arguments should not have side effects. The arithmetic arguments (including the MIN and MAX arguments) must be of the same integer type after the usual arithmetic conversions, and the type must have minimum value MIN and maximum MAX. Unsigned types should use a zero MIN of the proper type. These macros are tuned for constant MIN and MAX. For commutative operations such as A + B, they are also tuned for constant B. */ /* Return 1 if A + B would overflow in [MIN,MAX] arithmetic. See above for restrictions. */ #define INT_ADD_RANGE_OVERFLOW(a, b, min, max) \ ((b) < 0 \ ? (a) < (min) - (b) \ : (max) - (b) < (a)) /* Return 1 if A - B would overflow in [MIN,MAX] arithmetic. See above for restrictions. */ #define INT_SUBTRACT_RANGE_OVERFLOW(a, b, min, max) \ ((b) < 0 \ ? (max) + (b) < (a) \ : (a) < (min) + (b)) /* Return 1 if - A would overflow in [MIN,MAX] arithmetic. See above for restrictions. */ #define INT_NEGATE_RANGE_OVERFLOW(a, min, max) \ ((min) < 0 \ ? (a) < - (max) \ : 0 < (a)) /* Return 1 if A * B would overflow in [MIN,MAX] arithmetic. See above for restrictions. Avoid && and || as they tickle bugs in Sun C 5.11 2010/08/13 and other compilers; see <http://lists.gnu.org/archive/html/bug-gnulib/2011-05/msg00401.html>. */ #define INT_MULTIPLY_RANGE_OVERFLOW(a, b, min, max) \ ((b) < 0 \ ? ((a) < 0 \ ? (a) < (max) / (b) \ : (b) == -1 \ ? 0 \ : (min) / (b) < (a)) \ : (b) == 0 \ ? 0 \ : ((a) < 0 \ ? (a) < (min) / (b) \ : (max) / (b) < (a))) /* Return 1 if A / B would overflow in [MIN,MAX] arithmetic. See above for restrictions. Do not check for division by zero. */ #define INT_DIVIDE_RANGE_OVERFLOW(a, b, min, max) \ ((min) < 0 && (b) == -1 && (a) < - (max)) /* Return 1 if A % B would overflow in [MIN,MAX] arithmetic. See above for restrictions. Do not check for division by zero. Mathematically, % should never overflow, but on x86-like hosts INT_MIN % -1 traps, and the C standard permits this, so treat this as an overflow too. */ #define INT_REMAINDER_RANGE_OVERFLOW(a, b, min, max) \ INT_DIVIDE_RANGE_OVERFLOW (a, b, min, max) /* Return 1 if A << B would overflow in [MIN,MAX] arithmetic. See above for restrictions. Here, MIN and MAX are for A only, and B need not be of the same type as the other arguments. The C standard says that behavior is undefined for shifts unless 0 <= B < wordwidth, and that when A is negative then A << B has undefined behavior and A >> B has implementation-defined behavior, but do not check these other restrictions. */ #define INT_LEFT_SHIFT_RANGE_OVERFLOW(a, b, min, max) \ ((a) < 0 \ ? (a) < (min) >> (b) \ : (max) >> (b) < (a)) /* The _GL*_OVERFLOW macros have the same restrictions as the *_RANGE_OVERFLOW macros, except that they do not assume that operands (e.g., A and B) have the same type as MIN and MAX. Instead, they assume that the result (e.g., A + B) has that type. */ #define _GL_ADD_OVERFLOW(a, b, min, max) \ ((min) < 0 ? INT_ADD_RANGE_OVERFLOW (a, b, min, max) \ : (a) < 0 ? (b) <= (a) + (b) \ : (b) < 0 ? (a) <= (a) + (b) \ : (a) + (b) < (b)) #define _GL_SUBTRACT_OVERFLOW(a, b, min, max) \ ((min) < 0 ? INT_SUBTRACT_RANGE_OVERFLOW (a, b, min, max) \ : (a) < 0 ? 1 \ : (b) < 0 ? (a) - (b) <= (a) \ : (a) < (b)) #define _GL_MULTIPLY_OVERFLOW(a, b, min, max) \ (((min) == 0 && (((a) < 0 && 0 < (b)) || ((b) < 0 && 0 < (a)))) \ || INT_MULTIPLY_RANGE_OVERFLOW (a, b, min, max)) #define _GL_DIVIDE_OVERFLOW(a, b, min, max) \ ((min) < 0 ? (b) == _GL_INT_NEGATE_CONVERT (min, 1) && (a) < - (max) \ : (a) < 0 ? (b) <= (a) + (b) - 1 \ : (b) < 0 && (a) + (b) <= (a)) #define _GL_REMAINDER_OVERFLOW(a, b, min, max) \ ((min) < 0 ? (b) == _GL_INT_NEGATE_CONVERT (min, 1) && (a) < - (max) \ : (a) < 0 ? (a) % (b) != ((max) - (b) + 1) % (b) \ : (b) < 0 && ! _GL_UNSIGNED_NEG_MULTIPLE (a, b, max)) /* Return a nonzero value if A is a mathematical multiple of B, where A is unsigned, B is negative, and MAX is the maximum value of A's type. A's type must be the same as (A % B)'s type. Normally (A % -B == 0) suffices, but things get tricky if -B would overflow. */ #define _GL_UNSIGNED_NEG_MULTIPLE(a, b, max) \ (((b) < -_GL_SIGNED_INT_MAXIMUM (b) \ ? (_GL_SIGNED_INT_MAXIMUM (b) == (max) \ ? (a) \ : (a) % (_GL_INT_CONVERT (a, _GL_SIGNED_INT_MAXIMUM (b)) + 1)) \ : (a) % - (b)) \ == 0) /* Integer overflow checks. The INT_<op>_OVERFLOW macros return 1 if the corresponding C operators might not yield numerically correct answers due to arithmetic overflow. They work correctly on all known practical hosts, and do not rely on undefined behavior due to signed arithmetic overflow. Example usage: long int i = ...; long int j = ...; if (INT_MULTIPLY_OVERFLOW (i, j)) printf ("multiply would overflow"); else printf ("product is %ld", i * j); These macros do not check for all possible numerical problems or undefined or unspecified behavior: they do not check for division by zero, for bad shift counts, or for shifting negative numbers. These macros may evaluate their arguments zero or multiple times, so the arguments should not have side effects. These macros are tuned for their last argument being a constant. Return 1 if the integer expressions A * B, A - B, -A, A * B, A / B, A % B, and A << B would overflow, respectively. */ #define INT_ADD_OVERFLOW(a, b) \ _GL_BINARY_OP_OVERFLOW (a, b, _GL_ADD_OVERFLOW) #define INT_SUBTRACT_OVERFLOW(a, b) \ _GL_BINARY_OP_OVERFLOW (a, b, _GL_SUBTRACT_OVERFLOW) #define INT_NEGATE_OVERFLOW(a) \ INT_NEGATE_RANGE_OVERFLOW (a, _GL_INT_MINIMUM (a), _GL_INT_MAXIMUM (a)) #define INT_MULTIPLY_OVERFLOW(a, b) \ _GL_BINARY_OP_OVERFLOW (a, b, _GL_MULTIPLY_OVERFLOW) #define INT_DIVIDE_OVERFLOW(a, b) \ _GL_BINARY_OP_OVERFLOW (a, b, _GL_DIVIDE_OVERFLOW) #define INT_REMAINDER_OVERFLOW(a, b) \ _GL_BINARY_OP_OVERFLOW (a, b, _GL_REMAINDER_OVERFLOW) #define INT_LEFT_SHIFT_OVERFLOW(a, b) \ INT_LEFT_SHIFT_RANGE_OVERFLOW (a, b, \ _GL_INT_MINIMUM (a), _GL_INT_MAXIMUM (a)) /* Return 1 if the expression A <op> B would overflow, where OP_RESULT_OVERFLOW (A, B, MIN, MAX) does the actual test, assuming MIN and MAX are the minimum and maximum for the result type. Arguments should be free of side effects. */ #define _GL_BINARY_OP_OVERFLOW(a, b, op_result_overflow) \ op_result_overflow (a, b, \ _GL_INT_MINIMUM (0 * (b) + (a)), \ _GL_INT_MAXIMUM (0 * (b) + (a))) #endif /* _GL_INTPROPS_H */ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gss-1.0.3/src/gl/getopt.c���������������������������������������������������������������������������0000644�0000000�0000000�00000117504�12415470504�012047� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* 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-2014 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 _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; #if defined HAVE_DECL_GETENV && !HAVE_DECL_GETENV extern char *getenv (); #endif #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; } /* 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; unsigned int namelen; const struct option *p; const struct option *pfound = NULL; struct option_list { const struct option *p; struct option_list *next; } *ambig_list = NULL; int exact = 0; int indfound = -1; int option_index; for (nameend = d->__nextchar; *nameend && *nameend != '='; nameend++) /* Do nothing. */ ; namelen = nameend - d->__nextchar; /* 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, namelen)) { if (namelen == (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. */ struct option_list *newp = malloc (sizeof (*newp)); newp->p = p; newp->next = ambig_list; ambig_list = newp; } } if (ambig_list != NULL && !exact) { if (print_errors) { struct option_list first; first.p = pfound; first.next = ambig_list; ambig_list = &first; #if defined _LIBC && defined USE_IN_LIBIO char *buf = NULL; size_t buflen = 0; FILE *fp = open_memstream (&buf, &buflen); if (fp != NULL) { fprintf (fp, _("%s: option '%s' is ambiguous; possibilities:"), argv[0], argv[d->optind]); do { fprintf (fp, " '--%s'", ambig_list->p->name); ambig_list = ambig_list->next; } while (ambig_list != NULL); fputc_unlocked ('\n', fp); if (__builtin_expect (fclose (fp) != EOF, 1)) { _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; possibilities:"), argv[0], argv[d->optind]); do { fprintf (stderr, " '--%s'", ambig_list->p->name); ambig_list = ambig_list->next; } while (ambig_list != NULL); fputc ('\n', stderr); #endif } d->__nextchar += strlen (d->__nextchar); d->optind++; d->optopt = 0; return '?'; } while (ambig_list != NULL) { struct option_list *pn = ambig_list->next; free (ambig_list); ambig_list = pn; } 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; if (longopts == NULL) goto no_longs; /* 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; } no_longs: 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 #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 */ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gss-1.0.3/src/gl/memchr.c���������������������������������������������������������������������������0000644�0000000�0000000�00000013346�12415470504�012017� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 1991, 1993, 1996-1997, 1999-2000, 2003-2004, 2006, 2008-2014 Free Software Foundation, Inc. Based on strlen implementation by Torbjorn Granlund (tege@sics.se), with help from Dan Sahlin (dan@sics.se) and commentary by Jim Blandy (jimb@ai.mit.edu); adaptation to memchr suggested by Dick Karpinski (dick@cca.ucsf.edu), and implemented by Roland McGrath (roland@ai.mit.edu). NOTE: The canonical source of this file is maintained with the GNU C Library. Bugs can be reported to bug-glibc@prep.ai.mit.edu. 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 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 _LIBC # include <config.h> #endif #include <string.h> #include <stddef.h> #if defined _LIBC # include <memcopy.h> #else # define reg_char char #endif #include <limits.h> #if HAVE_BP_SYM_H || defined _LIBC # include <bp-sym.h> #else # define BP_SYM(sym) sym #endif #undef __memchr #ifdef _LIBC # undef memchr #endif #ifndef weak_alias # define __memchr memchr #endif /* Search no more than N bytes of S for C. */ void * __memchr (void const *s, int c_in, size_t n) { /* On 32-bit hardware, choosing longword to be a 32-bit unsigned long instead of a 64-bit uintmax_t tends to give better performance. On 64-bit hardware, unsigned long is generally 64 bits already. Change this typedef to experiment with performance. */ typedef unsigned long int longword; const unsigned char *char_ptr; const longword *longword_ptr; longword repeated_one; longword repeated_c; unsigned reg_char c; c = (unsigned char) c_in; /* Handle the first few bytes by reading one byte at a time. Do this until CHAR_PTR is aligned on a longword boundary. */ for (char_ptr = (const unsigned char *) s; n > 0 && (size_t) char_ptr % sizeof (longword) != 0; --n, ++char_ptr) if (*char_ptr == c) return (void *) char_ptr; longword_ptr = (const longword *) char_ptr; /* All these elucidatory comments refer to 4-byte longwords, but the theory applies equally well to any size longwords. */ /* Compute auxiliary longword values: repeated_one is a value which has a 1 in every byte. repeated_c has c in every byte. */ repeated_one = 0x01010101; repeated_c = c | (c << 8); repeated_c |= repeated_c << 16; if (0xffffffffU < (longword) -1) { repeated_one |= repeated_one << 31 << 1; repeated_c |= repeated_c << 31 << 1; if (8 < sizeof (longword)) { size_t i; for (i = 64; i < sizeof (longword) * 8; i *= 2) { repeated_one |= repeated_one << i; repeated_c |= repeated_c << i; } } } /* Instead of the traditional loop which tests each byte, we will test a longword at a time. The tricky part is testing if *any of the four* bytes in the longword in question are equal to c. We first use an xor with repeated_c. This reduces the task to testing whether *any of the four* bytes in longword1 is zero. We compute tmp = ((longword1 - repeated_one) & ~longword1) & (repeated_one << 7). That is, we perform the following operations: 1. Subtract repeated_one. 2. & ~longword1. 3. & a mask consisting of 0x80 in every byte. Consider what happens in each byte: - If a byte of longword1 is zero, step 1 and 2 transform it into 0xff, and step 3 transforms it into 0x80. A carry can also be propagated to more significant bytes. - If a byte of longword1 is nonzero, let its lowest 1 bit be at position k (0 <= k <= 7); so the lowest k bits are 0. After step 1, the byte ends in a single bit of value 0 and k bits of value 1. After step 2, the result is just k bits of value 1: 2^k - 1. After step 3, the result is 0. And no carry is produced. So, if longword1 has only non-zero bytes, tmp is zero. Whereas if longword1 has a zero byte, call j the position of the least significant zero byte. Then the result has a zero at positions 0, ..., j-1 and a 0x80 at position j. We cannot predict the result at the more significant bytes (positions j+1..3), but it does not matter since we already have a non-zero bit at position 8*j+7. So, the test whether any byte in longword1 is zero is equivalent to testing whether tmp is nonzero. */ while (n >= sizeof (longword)) { longword longword1 = *longword_ptr ^ repeated_c; if ((((longword1 - repeated_one) & ~longword1) & (repeated_one << 7)) != 0) break; longword_ptr++; n -= sizeof (longword); } char_ptr = (const unsigned char *) longword_ptr; /* At this point, we know that either n < sizeof (longword), or one of the sizeof (longword) bytes starting at char_ptr is == c. On little-endian machines, we could determine the first such byte without any further memory accesses, just by looking at the tmp result from the last loop iteration. But this does not work on big-endian machines. Choose code that works in both cases. */ for (; n > 0; --n, ++char_ptr) { if (*char_ptr == c) return (void *) char_ptr; } return NULL; } #ifdef weak_alias weak_alias (__memchr, BP_SYM (memchr)) #endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gss-1.0.3/src/gl/stddef.in.h������������������������������������������������������������������������0000644�0000000�0000000�00000005232�12415470505�012423� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* A substitute for POSIX 2008 <stddef.h>, for platforms that have issues. Copyright (C) 2009-2014 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 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 @PRAGMA_COLUMNS@ #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 _@GUARD_PREFIX@_STDDEF_H && defined _GL_STDDEF_WINT_T) # ifdef __need_wint_t # undef _@GUARD_PREFIX@_STDDEF_H # define _GL_STDDEF_WINT_T # endif # @INCLUDE_NEXT@ @NEXT_STDDEF_H@ # endif #else /* Normal invocation convention. */ # ifndef _@GUARD_PREFIX@_STDDEF_H /* The include_next requires a split double-inclusion guard. */ # @INCLUDE_NEXT@ @NEXT_STDDEF_H@ # ifndef _@GUARD_PREFIX@_STDDEF_H # define _@GUARD_PREFIX@_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 /* _@GUARD_PREFIX@_STDDEF_H */ # endif /* _@GUARD_PREFIX@_STDDEF_H */ #endif /* __need_XXX */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gss-1.0.3/src/gl/string.in.h������������������������������������������������������������������������0000644�0000000�0000000�00000116461�12415470505�012467� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* A GNU-like <string.h>. Copyright (C) 1995-1996, 2001-2014 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/>. */ #ifndef _@GUARD_PREFIX@_STRING_H #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ /* The include_next requires a split double-inclusion guard. */ #@INCLUDE_NEXT@ @NEXT_STRING_H@ #ifndef _@GUARD_PREFIX@_STRING_H #define _@GUARD_PREFIX@_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 /* The __attribute__ feature is available in gcc versions 2.5 and later. The attribute __pure__ was added in gcc 2.96. */ #if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) # define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__)) #else # define _GL_ATTRIBUTE_PURE /* empty */ #endif /* NetBSD 5.0 declares strsignal in <unistd.h>, not in <string.h>. */ /* But in any case avoid namespace pollution on glibc systems. */ #if (@GNULIB_STRSIGNAL@ || defined GNULIB_POSIXCHECK) && defined __NetBSD__ \ && ! defined __GLIBC__ # 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. */ /* Find the index of the least-significant set bit. */ #if @GNULIB_FFSL@ # if !@HAVE_FFSL@ _GL_FUNCDECL_SYS (ffsl, int, (long int i)); # endif _GL_CXXALIAS_SYS (ffsl, int, (long int i)); _GL_CXXALIASWARN (ffsl); #elif defined GNULIB_POSIXCHECK # undef ffsl # if HAVE_RAW_DECL_FFSL _GL_WARN_ON_USE (ffsl, "ffsl is not portable - use the ffsl module"); # endif #endif /* Find the index of the least-significant set bit. */ #if @GNULIB_FFSLL@ # if !@HAVE_FFSLL@ _GL_FUNCDECL_SYS (ffsll, int, (long long int i)); # endif _GL_CXXALIAS_SYS (ffsll, int, (long long int i)); _GL_CXXALIASWARN (ffsll); #elif defined GNULIB_POSIXCHECK # undef ffsll # if HAVE_RAW_DECL_FFSLL _GL_WARN_ON_USE (ffsll, "ffsll is not portable - use the ffsll module"); # endif #endif /* 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) _GL_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) _GL_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) && !defined __UCLIBC__) \ && (__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) _GL_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) _GL_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) _GL_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) && !defined __UCLIBC__) \ && (__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) _GL_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) && !defined __UCLIBC__) \ && (__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) # undef stpncpy # 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 @REPLACE_STRCHRNUL@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define strchrnul rpl_strchrnul # endif _GL_FUNCDECL_RPL (strchrnul, char *, (const char *__s, int __c_in) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (strchrnul, char *, (const char *str, int ch)); # else # if ! @HAVE_STRCHRNUL@ _GL_FUNCDECL_SYS (strchrnul, char *, (char const *__s, int __c_in) _GL_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)); # endif # if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ && (__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 defined __cplusplus && defined GNULIB_NAMESPACE && defined strdup /* strdup exists as a function and as a macro. Get rid of the macro. */ # undef strdup # endif # 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) _GL_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) _GL_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) _GL_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) && !defined __UCLIBC__) \ && (__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) _GL_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) && !defined __UCLIBC__) \ && (__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) _GL_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) _GL_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) && !defined __UCLIBC__) \ && (__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_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (mbslen, size_t, (const char *string)); # else _GL_FUNCDECL_SYS (mbslen, size_t, (const char *string) _GL_ATTRIBUTE_PURE _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_ATTRIBUTE_PURE _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_ATTRIBUTE_PURE _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_ATTRIBUTE_PURE _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 || defined __INTERIX # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define mbsrchr rpl_mbsrchr /* avoid collision with system function */ # endif _GL_FUNCDECL_RPL (mbsrchr, char *, (const char *string, int c) _GL_ATTRIBUTE_PURE _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_ATTRIBUTE_PURE _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_ATTRIBUTE_PURE _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_ATTRIBUTE_PURE _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_ATTRIBUTE_PURE _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. If the two match, return a pointer to the first byte after this prefix in STRING. Otherwise, return NULL. Note: This function may, in multibyte locales, return non-NULL 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_ATTRIBUTE_PURE _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_ATTRIBUTE_PURE _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_ATTRIBUTE_PURE _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_ATTRIBUTE_PURE _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_ATTRIBUTE_PURE _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_ATTRIBUTE_PURE _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 /* Map any int, typically from errno, into an error message. Multithread-safe. Uses the POSIX declaration, not the glibc declaration. */ #if @GNULIB_STRERROR_R@ # if @REPLACE_STRERROR_R@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef strerror_r # define strerror_r rpl_strerror_r # endif _GL_FUNCDECL_RPL (strerror_r, int, (int errnum, char *buf, size_t buflen) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (strerror_r, int, (int errnum, char *buf, size_t buflen)); # else # if !@HAVE_DECL_STRERROR_R@ _GL_FUNCDECL_SYS (strerror_r, int, (int errnum, char *buf, size_t buflen) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (strerror_r, int, (int errnum, char *buf, size_t buflen)); # endif # if @HAVE_DECL_STRERROR_R@ _GL_CXXALIASWARN (strerror_r); # endif #elif defined GNULIB_POSIXCHECK # undef strerror_r # if HAVE_RAW_DECL_STRERROR_R _GL_WARN_ON_USE (strerror_r, "strerror_r is unportable - " "use gnulib module strerror_r-posix for portability"); # endif #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_ATTRIBUTE_PURE _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 /* _@GUARD_PREFIX@_STRING_H */ #endif /* _@GUARD_PREFIX@_STRING_H */ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gss-1.0.3/src/gl/unistd.in.h������������������������������������������������������������������������0000644�0000000�0000000�00000147045�12415470505�012471� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Substitute for and wrapper around <unistd.h>. Copyright (C) 2003-2014 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/>. */ #ifndef _@GUARD_PREFIX@_UNISTD_H #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ #ifdef _GL_INCLUDING_UNISTD_H /* Special invocation convention: - On Mac OS X 10.3.9 we have a sequence of nested includes <unistd.h> -> <signal.h> -> <pthread.h> -> <unistd.h> In this situation, the functions are not yet declared, therefore we cannot provide the C++ aliases. */ #@INCLUDE_NEXT@ @NEXT_UNISTD_H@ #else /* Normal invocation convention. */ /* The include_next requires a split double-inclusion guard. */ #if @HAVE_UNISTD_H@ # define _GL_INCLUDING_UNISTD_H # @INCLUDE_NEXT@ @NEXT_UNISTD_H@ # undef _GL_INCLUDING_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 _@GUARD_PREFIX@_UNISTD_H && !defined _GL_INCLUDING_WINSOCK2_H #define _@GUARD_PREFIX@_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 __CYGWIN__)) \ && ! 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 __CYGWIN__ \ && ! defined __GLIBC__ # include <fcntl.h> #endif /* mingw fails to declare _exit in <unistd.h>. */ /* mingw, MSVC, BeOS, Haiku declare environ in <stdlib.h>, not in <unistd.h>. */ /* Solaris declares getcwd not only in <unistd.h> but also in <stdlib.h>. */ /* OSF Tru64 Unix cannot see gnulib rpl_strtod when system <stdlib.h> is included here. */ /* But avoid namespace pollution on glibc systems. */ #if !defined __GLIBC__ && !defined __osf__ # define __need_system_stdlib_h # include <stdlib.h> # undef __need_system_stdlib_h #endif /* Native Windows platforms declare chdir, getcwd, rmdir in <io.h> and/or <direct.h>, not in <unistd.h>. They also declare access(), chmod(), close(), dup(), dup2(), isatty(), lseek(), read(), unlink(), write() in <io.h>. */ #if ((@GNULIB_CHDIR@ || @GNULIB_GETCWD@ || @GNULIB_RMDIR@ \ || defined GNULIB_POSIXCHECK) \ && ((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__)) # include <io.h> /* mingw32, mingw64 */ # include <direct.h> /* mingw64, MSVC 9 */ #elif (@GNULIB_CLOSE@ || @GNULIB_DUP@ || @GNULIB_DUP2@ || @GNULIB_ISATTY@ \ || @GNULIB_LSEEK@ || @GNULIB_READ@ || @GNULIB_UNLINK@ || @GNULIB_WRITE@ \ || defined GNULIB_POSIXCHECK) \ && ((defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__) # include <io.h> #endif /* AIX and OSF/1 5.1 declare getdomainname in <netdb.h>, not in <unistd.h>. NonStop Kernel declares gethostname in <netdb.h>, not in <unistd.h>. */ /* But avoid namespace pollution on glibc systems. */ #if ((@GNULIB_GETDOMAINNAME@ && (defined _AIX || defined __osf__)) \ || (@GNULIB_GETHOSTNAME@ && defined __TANDEM)) \ && !defined __GLIBC__ # include <netdb.h> #endif /* MSVC defines off_t in <sys/types.h>. May also define off_t to a 64-bit type on native Windows. */ #if !@HAVE_UNISTD_H@ || @WINDOWS_64_BIT_OFF_T@ /* Get off_t. */ # include <sys/types.h> #endif #if (@GNULIB_READ@ || @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 # define __need_getopt # include <getopt.h> #endif #ifndef _GL_INLINE_HEADER_BEGIN #error "Please include config.h first." #endif _GL_INLINE_HEADER_BEGIN #ifndef _GL_UNISTD_INLINE # define _GL_UNISTD_INLINE _GL_INLINE #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. */ /* Hide some function declarations from <winsock2.h>. */ #if @GNULIB_GETHOSTNAME@ && @UNISTD_H_HAVE_WINSOCK2_H@ # if !defined _@GUARD_PREFIX@_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 _@GUARD_PREFIX@_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 /* 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_CHDIR@ _GL_CXXALIAS_SYS (chdir, int, (const char *file) _GL_ARG_NONNULL ((1))); _GL_CXXALIASWARN (chdir); #elif defined GNULIB_POSIXCHECK # undef chdir # if HAVE_RAW_DECL_CHDIR _GL_WARN_ON_USE (chown, "chdir is not always in <unistd.h> - " "use gnulib module chdir for portability"); # endif #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:2008 specification <http://pubs.opengroup.org/onlinepubs/9699919799/functions/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 @GNULIB_DUP@ # 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); #elif defined GNULIB_POSIXCHECK # undef dup # if HAVE_RAW_DECL_DUP _GL_WARN_ON_USE (dup, "dup is unportable - " "use gnulib module dup for portability"); # endif #endif #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:2008 specification <http://pubs.opengroup.org/onlinepubs/9699919799/functions/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 _GL_UNISTD_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:2008 specification <http://pubs.opengroup.org/onlinepubs/9699919799/functions/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); # else # if !@HAVE_DECL_FCHDIR@ _GL_FUNCDECL_SYS (fchdir, int, (int /*fd*/)); # endif # 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_FDATASYNC@ /* Synchronize changes to a file. Return 0 if successful, otherwise -1 and errno set. See POSIX:2008 specification <http://pubs.opengroup.org/onlinepubs/9699919799/functions/fdatasync.html>. */ # if !@HAVE_FDATASYNC@ || !@HAVE_DECL_FDATASYNC@ _GL_FUNCDECL_SYS (fdatasync, int, (int fd)); # endif _GL_CXXALIAS_SYS (fdatasync, int, (int fd)); _GL_CXXALIASWARN (fdatasync); #elif defined GNULIB_POSIXCHECK # undef fdatasync # if HAVE_RAW_DECL_FDATASYNC _GL_WARN_ON_USE (fdatasync, "fdatasync is unportable - " "use gnulib module fdatasync for portability"); # endif #endif #if @GNULIB_FSYNC@ /* Synchronize changes, including metadata, to a file. Return 0 if successful, otherwise -1 and errno set. See POSIX:2008 specification <http://pubs.opengroup.org/onlinepubs/9699919799/functions/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:2008 specification <http://pubs.opengroup.org/onlinepubs/9699919799/functions/ftruncate.html>. */ # if @REPLACE_FTRUNCATE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef ftruncate # define ftruncate rpl_ftruncate # endif _GL_FUNCDECL_RPL (ftruncate, int, (int fd, off_t length)); _GL_CXXALIAS_RPL (ftruncate, int, (int fd, off_t length)); # else # if !@HAVE_FTRUNCATE@ _GL_FUNCDECL_SYS (ftruncate, int, (int fd, off_t length)); # endif _GL_CXXALIAS_SYS (ftruncate, int, (int fd, off_t length)); # endif _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:2008 specification <http://pubs.opengroup.org/onlinepubs/9699919799/functions/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 @REPLACE_GETDOMAINNAME@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef getdomainname # define getdomainname rpl_getdomainname # endif _GL_FUNCDECL_RPL (getdomainname, int, (char *name, size_t len) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (getdomainname, int, (char *name, size_t len)); # else # if !@HAVE_DECL_GETDOMAINNAME@ _GL_FUNCDECL_SYS (getdomainname, int, (char *name, size_t len) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (getdomainname, int, (char *name, size_t len)); # endif _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 @REPLACE_GETDTABLESIZE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef getdtablesize # define getdtablesize rpl_getdtablesize # endif _GL_FUNCDECL_RPL (getdtablesize, int, (void)); _GL_CXXALIAS_RPL (getdtablesize, int, (void)); # else # if !@HAVE_GETDTABLESIZE@ _GL_FUNCDECL_SYS (getdtablesize, int, (void)); # endif _GL_CXXALIAS_SYS (getdtablesize, int, (void)); # endif _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 and OSF/1 5.1 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 @REPLACE_GETLOGIN_R@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define getlogin_r rpl_getlogin_r # endif _GL_FUNCDECL_RPL (getlogin_r, int, (char *name, size_t size) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (getlogin_r, int, (char *name, size_t size)); # else # 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)); # endif _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 # if !GNULIB_defined_getpagesize_function _GL_UNISTD_INLINE int getpagesize () { return _gl_getpagesize (); } # define GNULIB_defined_getpagesize_function 1 # endif # 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_GROUP_MEMBER@ /* Determine whether group id is in calling user's group list. */ # if !@HAVE_GROUP_MEMBER@ _GL_FUNCDECL_SYS (group_member, int, (gid_t gid)); # endif _GL_CXXALIAS_SYS (group_member, int, (gid_t gid)); _GL_CXXALIASWARN (group_member); #elif defined GNULIB_POSIXCHECK # undef group_member # if HAVE_RAW_DECL_GROUP_MEMBER _GL_WARN_ON_USE (group_member, "group_member is unportable - " "use gnulib module group-member for portability"); # endif #endif #if @GNULIB_ISATTY@ # if @REPLACE_ISATTY@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef isatty # define isatty rpl_isatty # endif _GL_FUNCDECL_RPL (isatty, int, (int fd)); _GL_CXXALIAS_RPL (isatty, int, (int fd)); # else _GL_CXXALIAS_SYS (isatty, int, (int fd)); # endif _GL_CXXALIASWARN (isatty); #elif defined GNULIB_POSIXCHECK # undef isatty # if HAVE_RAW_DECL_ISATTY _GL_WARN_ON_USE (isatty, "isatty has portability problems on native Windows - " "use gnulib module isatty 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:2008 specification <http://pubs.opengroup.org/onlinepubs/9699919799/functions/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:2008 specification <http://pubs.opengroup.org/onlinepubs/9699919799/functions/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:2008 specification <http://pubs.opengroup.org/onlinepubs/9699919799/functions/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_PIPE@ /* Create a pipe, defaulting to O_BINARY mode. 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. */ # if !@HAVE_PIPE@ _GL_FUNCDECL_SYS (pipe, int, (int fd[2]) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (pipe, int, (int fd[2])); _GL_CXXALIASWARN (pipe); #elif defined GNULIB_POSIXCHECK # undef pipe # if HAVE_RAW_DECL_PIPE _GL_WARN_ON_USE (pipe, "pipe is unportable - " "use gnulib module pipe-posix 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:2008 specification <http://pubs.opengroup.org/onlinepubs/9699919799/functions/pread.html>. */ # if @REPLACE_PREAD@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef pread # 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:2008 specification <http://pubs.opengroup.org/onlinepubs/9699919799/functions/pwrite.html>. */ # if @REPLACE_PWRITE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef pwrite # 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_READ@ /* Read up to COUNT bytes from file descriptor FD into the buffer starting at BUF. See the POSIX:2008 specification <http://pubs.opengroup.org/onlinepubs/9699919799/functions/read.html>. */ # if @REPLACE_READ@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef read # define read rpl_read # endif _GL_FUNCDECL_RPL (read, ssize_t, (int fd, void *buf, size_t count) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (read, ssize_t, (int fd, 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 (read, ssize_t, (int fd, void *buf, size_t count)); # endif _GL_CXXALIASWARN (read); #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:2008 specification <http://pubs.opengroup.org/onlinepubs/9699919799/functions/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 readlinkat 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_SETHOSTNAME@ /* Set the host name of the machine. The host name may or may not be fully qualified. Put LEN bytes of NAME into the host name. Return 0 if successful, otherwise, set errno and return -1. Platforms with no ability to set the hostname return -1 and set errno = ENOSYS. */ # if !@HAVE_SETHOSTNAME@ || !@HAVE_DECL_SETHOSTNAME@ _GL_FUNCDECL_SYS (sethostname, int, (const char *name, size_t len) _GL_ARG_NONNULL ((1))); # endif /* Need to cast, because on Solaris 11 2011-10, Mac OS X 10.5, IRIX 6.5 and FreeBSD 6.4 the second parameter is int. On Solaris 11 2011-10, the first parameter is not const. */ _GL_CXXALIAS_SYS_CAST (sethostname, int, (const char *name, size_t len)); _GL_CXXALIASWARN (sethostname); #elif defined GNULIB_POSIXCHECK # undef sethostname # if HAVE_RAW_DECL_SETHOSTNAME _GL_WARN_ON_USE (sethostname, "sethostname is unportable - " "use gnulib module sethostname 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:2008 specification <http://pubs.opengroup.org/onlinepubs/9699919799/functions/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_DECL_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/usleep.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:2008 specification <http://pubs.opengroup.org/onlinepubs/9699919799/functions/write.html>. */ # if @REPLACE_WRITE@ # 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 _GL_INLINE_HEADER_END #endif /* _@GUARD_PREFIX@_UNISTD_H */ #endif /* _GL_INCLUDING_UNISTD_H */ #endif /* _@GUARD_PREFIX@_UNISTD_H */ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gss-1.0.3/src/gl/msvc-inval.h�����������������������������������������������������������������������0000644�0000000�0000000�00000021135�12415470504�012623� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Invalid parameter handler for MSVC runtime libraries. Copyright (C) 2011-2014 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/>. */ #ifndef _MSVC_INVAL_H #define _MSVC_INVAL_H /* With MSVC runtime libraries with the "invalid parameter handler" concept, functions like fprintf(), dup2(), or close() crash when the caller passes an invalid argument. But POSIX wants error codes (such as EINVAL or EBADF) instead. This file defines macros that turn such an invalid parameter notification into a non-local exit. An error code can then be produced at the target of this exit. You can thus write code like TRY_MSVC_INVAL { <Code that can trigger an invalid parameter notification but does not do 'return', 'break', 'continue', nor 'goto'.> } CATCH_MSVC_INVAL { <Code that handles an invalid parameter notification but does not do 'return', 'break', 'continue', nor 'goto'.> } DONE_MSVC_INVAL; This entire block expands to a single statement. The handling of invalid parameters can be done in three ways: * The default way, which is reasonable for programs (not libraries): AC_DEFINE([MSVC_INVALID_PARAMETER_HANDLING], [DEFAULT_HANDLING]) * The way for libraries that make "hairy" calls (like close(-1), or fclose(fp) where fileno(fp) is closed, or simply getdtablesize()): AC_DEFINE([MSVC_INVALID_PARAMETER_HANDLING], [HAIRY_LIBRARY_HANDLING]) * The way for libraries that make no "hairy" calls: AC_DEFINE([MSVC_INVALID_PARAMETER_HANDLING], [SANE_LIBRARY_HANDLING]) */ #define DEFAULT_HANDLING 0 #define HAIRY_LIBRARY_HANDLING 1 #define SANE_LIBRARY_HANDLING 2 #if HAVE_MSVC_INVALID_PARAMETER_HANDLER \ && !(MSVC_INVALID_PARAMETER_HANDLING == SANE_LIBRARY_HANDLING) /* A native Windows platform with the "invalid parameter handler" concept, and either DEFAULT_HANDLING or HAIRY_LIBRARY_HANDLING. */ # if MSVC_INVALID_PARAMETER_HANDLING == DEFAULT_HANDLING /* Default handling. */ # ifdef __cplusplus extern "C" { # endif /* Ensure that the invalid parameter handler in installed that just returns. Because we assume no other part of the program installs a different invalid parameter handler, this solution is multithread-safe. */ extern void gl_msvc_inval_ensure_handler (void); # ifdef __cplusplus } # endif # define TRY_MSVC_INVAL \ do \ { \ gl_msvc_inval_ensure_handler (); \ if (1) # define CATCH_MSVC_INVAL \ else # define DONE_MSVC_INVAL \ } \ while (0) # else /* Handling for hairy libraries. */ # include <excpt.h> /* Gnulib can define its own status codes, as described in the page "Raising Software Exceptions" on microsoft.com <http://msdn.microsoft.com/en-us/library/het71c37.aspx>. Our status codes are composed of - 0xE0000000, mandatory for all user-defined status codes, - 0x474E550, a API identifier ("GNU"), - 0, 1, 2, ..., used to distinguish different status codes from the same API. */ # define STATUS_GNULIB_INVALID_PARAMETER (0xE0000000 + 0x474E550 + 0) # if defined _MSC_VER /* A compiler that supports __try/__except, as described in the page "try-except statement" on microsoft.com <http://msdn.microsoft.com/en-us/library/s58ftw19.aspx>. With __try/__except, we can use the multithread-safe exception handling. */ # ifdef __cplusplus extern "C" { # endif /* Ensure that the invalid parameter handler in installed that raises a software exception with code STATUS_GNULIB_INVALID_PARAMETER. Because we assume no other part of the program installs a different invalid parameter handler, this solution is multithread-safe. */ extern void gl_msvc_inval_ensure_handler (void); # ifdef __cplusplus } # endif # define TRY_MSVC_INVAL \ do \ { \ gl_msvc_inval_ensure_handler (); \ __try # define CATCH_MSVC_INVAL \ __except (GetExceptionCode () == STATUS_GNULIB_INVALID_PARAMETER \ ? EXCEPTION_EXECUTE_HANDLER \ : EXCEPTION_CONTINUE_SEARCH) # define DONE_MSVC_INVAL \ } \ while (0) # else /* Any compiler. We can only use setjmp/longjmp. */ # include <setjmp.h> # ifdef __cplusplus extern "C" { # endif struct gl_msvc_inval_per_thread { /* The restart that will resume execution at the code between CATCH_MSVC_INVAL and DONE_MSVC_INVAL. It is enabled only between TRY_MSVC_INVAL and CATCH_MSVC_INVAL. */ jmp_buf restart; /* Tells whether the contents of restart is valid. */ int restart_valid; }; /* Ensure that the invalid parameter handler in installed that passes control to the gl_msvc_inval_restart if it is valid, or raises a software exception with code STATUS_GNULIB_INVALID_PARAMETER otherwise. Because we assume no other part of the program installs a different invalid parameter handler, this solution is multithread-safe. */ extern void gl_msvc_inval_ensure_handler (void); /* Return a pointer to the per-thread data for the current thread. */ extern struct gl_msvc_inval_per_thread *gl_msvc_inval_current (void); # ifdef __cplusplus } # endif # define TRY_MSVC_INVAL \ do \ { \ struct gl_msvc_inval_per_thread *msvc_inval_current; \ gl_msvc_inval_ensure_handler (); \ msvc_inval_current = gl_msvc_inval_current (); \ /* First, initialize gl_msvc_inval_restart. */ \ if (setjmp (msvc_inval_current->restart) == 0) \ { \ /* Then, mark it as valid. */ \ msvc_inval_current->restart_valid = 1; # define CATCH_MSVC_INVAL \ /* Execution completed. \ Mark gl_msvc_inval_restart as invalid. */ \ msvc_inval_current->restart_valid = 0; \ } \ else \ { \ /* Execution triggered an invalid parameter notification. \ Mark gl_msvc_inval_restart as invalid. */ \ msvc_inval_current->restart_valid = 0; # define DONE_MSVC_INVAL \ } \ } \ while (0) # endif # endif #else /* A platform that does not need to the invalid parameter handler, or when SANE_LIBRARY_HANDLING is desired. */ /* The braces here avoid GCC warnings like "warning: suggest explicit braces to avoid ambiguous 'else'". */ # define TRY_MSVC_INVAL \ do \ { \ if (1) # define CATCH_MSVC_INVAL \ else # define DONE_MSVC_INVAL \ } \ while (0) #endif #endif /* _MSVC_INVAL_H */ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gss-1.0.3/src/gl/strerror-override.h����������������������������������������������������������������0000644�0000000�0000000�00000003743�12415470505�014251� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* strerror-override.h --- POSIX compatible system error routine Copyright (C) 2010-2014 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/>. */ #ifndef _GL_STRERROR_OVERRIDE_H # define _GL_STRERROR_OVERRIDE_H # include <errno.h> # include <stddef.h> /* Reasonable buffer size that should never trigger ERANGE; if this proves too small, we intentionally abort(), to remind us to fix this value. */ # define STACKBUF_LEN 256 /* If ERRNUM maps to an errno value defined by gnulib, return a string describing the error. Otherwise return NULL. */ # if REPLACE_STRERROR_0 \ || GNULIB_defined_ESOCK \ || GNULIB_defined_ESTREAMS \ || GNULIB_defined_EWINSOCK \ || GNULIB_defined_ENOMSG \ || GNULIB_defined_EIDRM \ || GNULIB_defined_ENOLINK \ || GNULIB_defined_EPROTO \ || GNULIB_defined_EMULTIHOP \ || GNULIB_defined_EBADMSG \ || GNULIB_defined_EOVERFLOW \ || GNULIB_defined_ENOTSUP \ || GNULIB_defined_ENETRESET \ || GNULIB_defined_ECONNABORTED \ || GNULIB_defined_ESTALE \ || GNULIB_defined_EDQUOT \ || GNULIB_defined_ECANCELED \ || GNULIB_defined_EOWNERDEAD \ || GNULIB_defined_ENOTRECOVERABLE \ || GNULIB_defined_EILSEQ extern const char *strerror_override (int errnum) _GL_ATTRIBUTE_CONST; # else # define strerror_override(ignored) NULL # endif #endif /* _GL_STRERROR_OVERRIDE_H */ �����������������������������gss-1.0.3/src/gl/error.h����������������������������������������������������������������������������0000644�0000000�0000000�00000004746�12415470504�011706� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Declaration for error-reporting function Copyright (C) 1995-1997, 2003, 2006, 2008-2014 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 _ERROR_H #define _ERROR_H 1 /* The __attribute__ feature is available in gcc versions 2.5 and later. The __-protected variants of the attributes 'format' and 'printf' are accepted by gcc versions 2.6.4 (effectively 2.7) and later. We enable _GL_ATTRIBUTE_FORMAT only if these are supported too, because gnulib and libintl do '#define printf __printf__' when they override the 'printf' function. */ #if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7) # define _GL_ATTRIBUTE_FORMAT(spec) __attribute__ ((__format__ spec)) #else # define _GL_ATTRIBUTE_FORMAT(spec) /* empty */ #endif #ifdef __cplusplus extern "C" { #endif /* Print a message with 'fprintf (stderr, FORMAT, ...)'; if ERRNUM is nonzero, follow it with ": " and strerror (ERRNUM). If STATUS is nonzero, terminate the program with 'exit (STATUS)'. */ extern void error (int __status, int __errnum, const char *__format, ...) _GL_ATTRIBUTE_FORMAT ((__printf__, 3, 4)); extern void error_at_line (int __status, int __errnum, const char *__fname, unsigned int __lineno, const char *__format, ...) _GL_ATTRIBUTE_FORMAT ((__printf__, 5, 6)); /* If NULL, error will flush stdout, then print on stderr the program name, a colon and a space. Otherwise, error will call this function without parameters instead. */ extern void (*error_print_progname) (void); /* This variable is incremented each time 'error' is called. */ extern unsigned int error_message_count; /* Sometimes we want to have at most one error per line. This variable controls whether this mode is selected or not. */ extern int error_one_per_line; #ifdef __cplusplus } #endif #endif /* error.h */ ��������������������������gss-1.0.3/src/gl/verify.h���������������������������������������������������������������������������0000644�0000000�0000000�00000025364�12415470505�012061� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Compile-time assert-like macros. Copyright (C) 2005-2006, 2009-2014 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 Paul Eggert, Bruno Haible, and Jim Meyering. */ #ifndef _GL_VERIFY_H #define _GL_VERIFY_H /* Define _GL_HAVE__STATIC_ASSERT to 1 if _Static_assert works as per C11. This is supported by GCC 4.6.0 and later, in C mode, and its use here generates easier-to-read diagnostics when verify (R) fails. Define _GL_HAVE_STATIC_ASSERT to 1 if static_assert works as per C++11. This will likely be supported by future GCC versions, in C++ mode. Use this only with GCC. If we were willing to slow 'configure' down we could also use it with other compilers, but since this affects only the quality of diagnostics, why bother? */ #if (4 < __GNUC__ + (6 <= __GNUC_MINOR__) \ && (201112L <= __STDC_VERSION__ || !defined __STRICT_ANSI__) \ && !defined __cplusplus) # define _GL_HAVE__STATIC_ASSERT 1 #endif /* The condition (99 < __GNUC__) is temporary, until we know about the first G++ release that supports static_assert. */ #if (99 < __GNUC__) && defined __cplusplus # define _GL_HAVE_STATIC_ASSERT 1 #endif /* FreeBSD 9.1 <sys/cdefs.h>, included by <stddef.h> and lots of other system headers, defines a conflicting _Static_assert that is no better than ours; override it. */ #ifndef _GL_HAVE_STATIC_ASSERT # include <stddef.h> # undef _Static_assert #endif /* Each of these macros verifies that its argument R is nonzero. To be portable, R should be an integer constant expression. Unlike assert (R), there is no run-time overhead. If _Static_assert works, verify (R) uses it directly. Similarly, _GL_VERIFY_TRUE works by packaging a _Static_assert inside a struct that is an operand of sizeof. The code below uses several ideas for C++ compilers, and for C compilers that do not support _Static_assert: * The first step is ((R) ? 1 : -1). Given an expression R, of integral or boolean or floating-point type, this yields an expression of integral type, whose value is later verified to be constant and nonnegative. * Next this expression W is wrapped in a type struct _gl_verify_type { unsigned int _gl_verify_error_if_negative: W; }. If W is negative, this yields a compile-time error. No compiler can deal with a bit-field of negative size. One might think that an array size check would have the same effect, that is, that the type struct { unsigned int dummy[W]; } would work as well. However, inside a function, some compilers (such as C++ compilers and GNU C) allow local parameters and variables inside array size expressions. With these compilers, an array size check would not properly diagnose this misuse of the verify macro: void function (int n) { verify (n < 0); } * For the verify macro, the struct _gl_verify_type will need to somehow be embedded into a declaration. To be portable, this declaration must declare an object, a constant, a function, or a typedef name. If the declared entity uses the type directly, such as in struct dummy {...}; typedef struct {...} dummy; extern struct {...} *dummy; extern void dummy (struct {...} *); extern struct {...} *dummy (void); two uses of the verify macro would yield colliding declarations if the entity names are not disambiguated. A workaround is to attach the current line number to the entity name: #define _GL_CONCAT0(x, y) x##y #define _GL_CONCAT(x, y) _GL_CONCAT0 (x, y) extern struct {...} * _GL_CONCAT (dummy, __LINE__); But this has the problem that two invocations of verify from within the same macro would collide, since the __LINE__ value would be the same for both invocations. (The GCC __COUNTER__ macro solves this problem, but is not portable.) A solution is to use the sizeof operator. It yields a number, getting rid of the identity of the type. Declarations like extern int dummy [sizeof (struct {...})]; extern void dummy (int [sizeof (struct {...})]); extern int (*dummy (void)) [sizeof (struct {...})]; can be repeated. * Should the implementation use a named struct or an unnamed struct? Which of the following alternatives can be used? extern int dummy [sizeof (struct {...})]; extern int dummy [sizeof (struct _gl_verify_type {...})]; extern void dummy (int [sizeof (struct {...})]); extern void dummy (int [sizeof (struct _gl_verify_type {...})]); extern int (*dummy (void)) [sizeof (struct {...})]; extern int (*dummy (void)) [sizeof (struct _gl_verify_type {...})]; In the second and sixth case, the struct type is exported to the outer scope; two such declarations therefore collide. GCC warns about the first, third, and fourth cases. So the only remaining possibility is the fifth case: extern int (*dummy (void)) [sizeof (struct {...})]; * GCC warns about duplicate declarations of the dummy function if -Wredundant-decls is used. GCC 4.3 and later have a builtin __COUNTER__ macro that can let us generate unique identifiers for each dummy function, to suppress this warning. * This implementation exploits the fact that older versions of GCC, which do not support _Static_assert, also do not warn about the last declaration mentioned above. * GCC warns if -Wnested-externs is enabled and verify() is used within a function body; but inside a function, you can always arrange to use verify_expr() instead. * In C++, any struct definition inside sizeof is invalid. Use a template type to work around the problem. */ /* Concatenate two preprocessor tokens. */ #define _GL_CONCAT(x, y) _GL_CONCAT0 (x, y) #define _GL_CONCAT0(x, y) x##y /* _GL_COUNTER is an integer, preferably one that changes each time we use it. Use __COUNTER__ if it works, falling back on __LINE__ otherwise. __LINE__ isn't perfect, but it's better than a constant. */ #if defined __COUNTER__ && __COUNTER__ != __COUNTER__ # define _GL_COUNTER __COUNTER__ #else # define _GL_COUNTER __LINE__ #endif /* Generate a symbol with the given prefix, making it unique if possible. */ #define _GL_GENSYM(prefix) _GL_CONCAT (prefix, _GL_COUNTER) /* Verify requirement R at compile-time, as an integer constant expression that returns 1. If R is false, fail at compile-time, preferably with a diagnostic that includes the string-literal DIAGNOSTIC. */ #define _GL_VERIFY_TRUE(R, DIAGNOSTIC) \ (!!sizeof (_GL_VERIFY_TYPE (R, DIAGNOSTIC))) #ifdef __cplusplus # if !GNULIB_defined_struct__gl_verify_type template <int w> struct _gl_verify_type { unsigned int _gl_verify_error_if_negative: w; }; # define GNULIB_defined_struct__gl_verify_type 1 # endif # define _GL_VERIFY_TYPE(R, DIAGNOSTIC) \ _gl_verify_type<(R) ? 1 : -1> #elif defined _GL_HAVE__STATIC_ASSERT # define _GL_VERIFY_TYPE(R, DIAGNOSTIC) \ struct { \ _Static_assert (R, DIAGNOSTIC); \ int _gl_dummy; \ } #else # define _GL_VERIFY_TYPE(R, DIAGNOSTIC) \ struct { unsigned int _gl_verify_error_if_negative: (R) ? 1 : -1; } #endif /* Verify requirement R at compile-time, as a declaration without a trailing ';'. If R is false, fail at compile-time, preferably with a diagnostic that includes the string-literal DIAGNOSTIC. Unfortunately, unlike C11, this implementation must appear as an ordinary declaration, and cannot appear inside struct { ... }. */ #ifdef _GL_HAVE__STATIC_ASSERT # define _GL_VERIFY _Static_assert #else # define _GL_VERIFY(R, DIAGNOSTIC) \ extern int (*_GL_GENSYM (_gl_verify_function) (void)) \ [_GL_VERIFY_TRUE (R, DIAGNOSTIC)] #endif /* _GL_STATIC_ASSERT_H is defined if this code is copied into assert.h. */ #ifdef _GL_STATIC_ASSERT_H # if !defined _GL_HAVE__STATIC_ASSERT && !defined _Static_assert # define _Static_assert(R, DIAGNOSTIC) _GL_VERIFY (R, DIAGNOSTIC) # endif # if !defined _GL_HAVE_STATIC_ASSERT && !defined static_assert # define static_assert _Static_assert /* C11 requires this #define. */ # endif #endif /* @assert.h omit start@ */ /* Each of these macros verifies that its argument R is nonzero. To be portable, R should be an integer constant expression. Unlike assert (R), there is no run-time overhead. There are two macros, since no single macro can be used in all contexts in C. verify_true (R) is for scalar contexts, including integer constant expression contexts. verify (R) is for declaration contexts, e.g., the top level. */ /* Verify requirement R at compile-time, as an integer constant expression. Return 1. This is equivalent to verify_expr (R, 1). verify_true is obsolescent; please use verify_expr instead. */ #define verify_true(R) _GL_VERIFY_TRUE (R, "verify_true (" #R ")") /* Verify requirement R at compile-time. Return the value of the expression E. */ #define verify_expr(R, E) \ (_GL_VERIFY_TRUE (R, "verify_expr (" #R ", " #E ")") ? (E) : (E)) /* Verify requirement R at compile-time, as a declaration without a trailing ';'. */ #define verify(R) _GL_VERIFY (R, "verify (" #R ")") #ifndef __has_builtin # define __has_builtin(x) 0 #endif /* Assume that R always holds. This lets the compiler optimize accordingly. R should not have side-effects; it may or may not be evaluated. Behavior is undefined if R is false. */ #if (__has_builtin (__builtin_unreachable) \ || 4 < __GNUC__ + (5 <= __GNUC_MINOR__)) # define assume(R) ((R) ? (void) 0 : __builtin_unreachable ()) #elif 1200 <= _MSC_VER # define assume(R) __assume (R) #elif (defined lint \ && (__has_builtin (__builtin_trap) \ || 3 < __GNUC__ + (3 < __GNUC_MINOR__ + (4 <= __GNUC_PATCHLEVEL__)))) /* Doing it this way helps various packages when configured with --enable-gcc-warnings, which compiles with -Dlint. It's nicer when 'assume' silences warnings even with older GCCs. */ # define assume(R) ((R) ? (void) 0 : __builtin_trap ()) #else # define assume(R) ((void) (0 && (R))) #endif /* @assert.h omit end@ */ #endif ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gss-1.0.3/src/gl/progname.h�������������������������������������������������������������������������0000644�0000000�0000000�00000003776�12415470504�012367� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Program name management. Copyright (C) 2001-2004, 2006, 2009-2014 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 defined(ENABLE_RELOCATABLE) && 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 */ ��gss-1.0.3/src/gl/getopt.in.h������������������������������������������������������������������������0000644�0000000�0000000�00000021621�12415470504�012453� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Declarations for getopt. Copyright (C) 1989-1994, 1996-1999, 2001, 2003-2007, 2009-2014 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 _@GUARD_PREFIX@_GETOPT_H #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ /* 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 _@GUARD_PREFIX@_GETOPT_H #ifndef __need_getopt # define _@GUARD_PREFIX@_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@ # define __need_system_stdlib_h # include <stdlib.h> # undef __need_system_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. */ # if !GNULIB_defined_struct_option 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; }; # define GNULIB_defined_struct_option 1 # endif /* 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 /* _@GUARD_PREFIX@_GETOPT_H */ #endif /* _@GUARD_PREFIX@_GETOPT_H */ ���������������������������������������������������������������������������������������������������������������gss-1.0.3/src/gl/base64.h���������������������������������������������������������������������������0000644�0000000�0000000�00000004244�12415470504�011632� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* base64.h -- Encode binary data using printable characters. Copyright (C) 2004-2006, 2009-2014 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, see <http://www.gnu.org/licenses/>. */ #ifndef BASE64_H # define BASE64_H /* Get size_t. */ # include <stddef.h> /* Get bool. */ # include <stdbool.h> # ifdef __cplusplus extern "C" { # endif /* This uses that the expression (n+(k-1))/k means the smallest integer >= n/k, i.e., the ceiling of n/k. */ # define BASE64_LENGTH(inlen) ((((inlen) + 2) / 3) * 4) struct base64_decode_context { unsigned int i; char buf[4]; }; extern bool isbase64 (char ch) _GL_ATTRIBUTE_CONST; extern void base64_encode (const char *restrict in, size_t inlen, char *restrict out, size_t outlen); extern size_t base64_encode_alloc (const char *in, size_t inlen, char **out); extern void base64_decode_ctx_init (struct base64_decode_context *ctx); extern bool base64_decode_ctx (struct base64_decode_context *ctx, const char *restrict in, size_t inlen, char *restrict out, size_t *outlen); extern bool base64_decode_alloc_ctx (struct base64_decode_context *ctx, const char *in, size_t inlen, char **out, size_t *outlen); #define base64_decode(in, inlen, out, outlen) \ base64_decode_ctx (NULL, in, inlen, out, outlen) #define base64_decode_alloc(in, inlen, out, outlen) \ base64_decode_alloc_ctx (NULL, in, inlen, out, outlen) # ifdef __cplusplus } # endif #endif /* BASE64_H */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gss-1.0.3/src/gl/getopt_int.h�����������������������������������������������������������������������0000644�0000000�0000000�00000011742�12415470504�012723� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Internal declarations for getopt. Copyright (C) 1989-1994, 1996-1999, 2001, 2003-2004, 2009-2014 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); /* 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 */ ������������������������������gss-1.0.3/src/gl/Makefile.in������������������������������������������������������������������������0000644�0000000�0000000�00000210562�12415507621�012445� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Makefile.in generated by automake 1.14.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # Copyright (C) 2002-2014 Free Software Foundation, Inc. # # This file is 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 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 file. If not, see <http://www.gnu.org/licenses/>. # # 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=src/gl/override --lib=libgnu --source-base=src/gl --m4-base=src/gl/m4 --doc-base=doc --tests-base=src/gl/tests --aux-dir=build-aux --no-conditional-dependencies --libtool --macro-prefix=srcgl --no-vc-files base64 error getopt-gnu progname version-etc VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = src/gl DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(top_srcdir)/build-aux/depcomp $(noinst_HEADERS) ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/src/gl/m4/base64.m4 \ $(top_srcdir)/src/gl/m4/errno_h.m4 \ $(top_srcdir)/src/gl/m4/error.m4 \ $(top_srcdir)/src/gl/m4/getopt.m4 \ $(top_srcdir)/src/gl/m4/gnulib-comp.m4 \ $(top_srcdir)/src/gl/m4/memchr.m4 \ $(top_srcdir)/src/gl/m4/mmap-anon.m4 \ $(top_srcdir)/src/gl/m4/msvc-inval.m4 \ $(top_srcdir)/src/gl/m4/msvc-nothrow.m4 \ $(top_srcdir)/src/gl/m4/nocrash.m4 \ $(top_srcdir)/src/gl/m4/off_t.m4 \ $(top_srcdir)/src/gl/m4/ssize_t.m4 \ $(top_srcdir)/src/gl/m4/stdarg.m4 \ $(top_srcdir)/src/gl/m4/stdbool.m4 \ $(top_srcdir)/src/gl/m4/stdio_h.m4 \ $(top_srcdir)/src/gl/m4/strerror.m4 \ $(top_srcdir)/src/gl/m4/sys_socket_h.m4 \ $(top_srcdir)/src/gl/m4/sys_types_h.m4 \ $(top_srcdir)/src/gl/m4/unistd_h.m4 \ $(top_srcdir)/src/gl/m4/version-etc.m4 \ $(top_srcdir)/lib/gl/m4/absolute-header.m4 \ $(top_srcdir)/lib/gl/m4/extensions.m4 \ $(top_srcdir)/lib/gl/m4/gnulib-comp.m4 \ $(top_srcdir)/lib/gl/m4/include_next.m4 \ $(top_srcdir)/lib/gl/m4/ld-output-def.m4 \ $(top_srcdir)/lib/gl/m4/stddef_h.m4 \ $(top_srcdir)/lib/gl/m4/string_h.m4 \ $(top_srcdir)/lib/gl/m4/strverscmp.m4 \ $(top_srcdir)/lib/gl/m4/warn-on-use.m4 \ $(top_srcdir)/gl/m4/00gnulib.m4 \ $(top_srcdir)/gl/m4/autobuild.m4 \ $(top_srcdir)/gl/m4/gnulib-common.m4 \ $(top_srcdir)/gl/m4/gnulib-comp.m4 \ $(top_srcdir)/gl/m4/ld-version-script.m4 \ $(top_srcdir)/gl/m4/manywarnings.m4 \ $(top_srcdir)/gl/m4/valgrind-tests.m4 \ $(top_srcdir)/gl/m4/warnings.m4 \ $(top_srcdir)/m4/extern-inline.m4 $(top_srcdir)/m4/gettext.m4 \ $(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \ $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.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/nls.m4 \ $(top_srcdir)/m4/pkg.m4 $(top_srcdir)/m4/po-suffix.m4 \ $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \ $(top_srcdir)/m4/wchar_t.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 = base64.lo progname.lo unistd.lo version-etc.lo libgnu_la_OBJECTS = $(am_libgnu_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = libgnu_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(libgnu_la_LDFLAGS) $(LDFLAGS) -o $@ AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = 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) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libgnu_la_SOURCES) $(EXTRA_libgnu_la_SOURCES) DIST_SOURCES = $(libgnu_la_SOURCES) $(EXTRA_libgnu_la_SOURCES) RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac HEADERS = $(noinst_HEADERS) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ distdir am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(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@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ ARFLAGS = @ARFLAGS@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CONFIG_INCLUDE = @CONFIG_INCLUDE@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DLL_VERSION = @DLL_VERSION@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EMULTIHOP_HIDDEN = @EMULTIHOP_HIDDEN@ EMULTIHOP_VALUE = @EMULTIHOP_VALUE@ ENOLINK_HIDDEN = @ENOLINK_HIDDEN@ ENOLINK_VALUE = @ENOLINK_VALUE@ EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@ EOVERFLOW_VALUE = @EOVERFLOW_VALUE@ ERRNO_H = @ERRNO_H@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GETOPT_H = @GETOPT_H@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GNULIB_CHDIR = @GNULIB_CHDIR@ GNULIB_CHOWN = @GNULIB_CHOWN@ GNULIB_CLOSE = @GNULIB_CLOSE@ GNULIB_DPRINTF = @GNULIB_DPRINTF@ GNULIB_DUP = @GNULIB_DUP@ GNULIB_DUP2 = @GNULIB_DUP2@ GNULIB_DUP3 = @GNULIB_DUP3@ GNULIB_ENVIRON = @GNULIB_ENVIRON@ GNULIB_EUIDACCESS = @GNULIB_EUIDACCESS@ GNULIB_FACCESSAT = @GNULIB_FACCESSAT@ GNULIB_FCHDIR = @GNULIB_FCHDIR@ GNULIB_FCHOWNAT = @GNULIB_FCHOWNAT@ GNULIB_FCLOSE = @GNULIB_FCLOSE@ GNULIB_FDATASYNC = @GNULIB_FDATASYNC@ GNULIB_FDOPEN = @GNULIB_FDOPEN@ GNULIB_FFLUSH = @GNULIB_FFLUSH@ GNULIB_FFSL = @GNULIB_FFSL@ GNULIB_FFSLL = @GNULIB_FFSLL@ GNULIB_FGETC = @GNULIB_FGETC@ GNULIB_FGETS = @GNULIB_FGETS@ GNULIB_FOPEN = @GNULIB_FOPEN@ GNULIB_FPRINTF = @GNULIB_FPRINTF@ GNULIB_FPRINTF_POSIX = @GNULIB_FPRINTF_POSIX@ GNULIB_FPURGE = @GNULIB_FPURGE@ GNULIB_FPUTC = @GNULIB_FPUTC@ GNULIB_FPUTS = @GNULIB_FPUTS@ GNULIB_FREAD = @GNULIB_FREAD@ GNULIB_FREOPEN = @GNULIB_FREOPEN@ GNULIB_FSCANF = @GNULIB_FSCANF@ GNULIB_FSEEK = @GNULIB_FSEEK@ GNULIB_FSEEKO = @GNULIB_FSEEKO@ GNULIB_FSYNC = @GNULIB_FSYNC@ GNULIB_FTELL = @GNULIB_FTELL@ GNULIB_FTELLO = @GNULIB_FTELLO@ GNULIB_FTRUNCATE = @GNULIB_FTRUNCATE@ GNULIB_FWRITE = @GNULIB_FWRITE@ GNULIB_GETC = @GNULIB_GETC@ GNULIB_GETCHAR = @GNULIB_GETCHAR@ GNULIB_GETCWD = @GNULIB_GETCWD@ GNULIB_GETDELIM = @GNULIB_GETDELIM@ GNULIB_GETDOMAINNAME = @GNULIB_GETDOMAINNAME@ GNULIB_GETDTABLESIZE = @GNULIB_GETDTABLESIZE@ GNULIB_GETGROUPS = @GNULIB_GETGROUPS@ GNULIB_GETHOSTNAME = @GNULIB_GETHOSTNAME@ GNULIB_GETLINE = @GNULIB_GETLINE@ GNULIB_GETLOGIN = @GNULIB_GETLOGIN@ GNULIB_GETLOGIN_R = @GNULIB_GETLOGIN_R@ GNULIB_GETPAGESIZE = @GNULIB_GETPAGESIZE@ GNULIB_GETUSERSHELL = @GNULIB_GETUSERSHELL@ GNULIB_GL_SRCGL_UNISTD_H_GETOPT = @GNULIB_GL_SRCGL_UNISTD_H_GETOPT@ GNULIB_GROUP_MEMBER = @GNULIB_GROUP_MEMBER@ GNULIB_ISATTY = @GNULIB_ISATTY@ GNULIB_LCHOWN = @GNULIB_LCHOWN@ GNULIB_LINK = @GNULIB_LINK@ GNULIB_LINKAT = @GNULIB_LINKAT@ GNULIB_LSEEK = @GNULIB_LSEEK@ GNULIB_MBSCASECMP = @GNULIB_MBSCASECMP@ GNULIB_MBSCASESTR = @GNULIB_MBSCASESTR@ GNULIB_MBSCHR = @GNULIB_MBSCHR@ GNULIB_MBSCSPN = @GNULIB_MBSCSPN@ GNULIB_MBSLEN = @GNULIB_MBSLEN@ GNULIB_MBSNCASECMP = @GNULIB_MBSNCASECMP@ GNULIB_MBSNLEN = @GNULIB_MBSNLEN@ GNULIB_MBSPBRK = @GNULIB_MBSPBRK@ GNULIB_MBSPCASECMP = @GNULIB_MBSPCASECMP@ GNULIB_MBSRCHR = @GNULIB_MBSRCHR@ GNULIB_MBSSEP = @GNULIB_MBSSEP@ GNULIB_MBSSPN = @GNULIB_MBSSPN@ GNULIB_MBSSTR = @GNULIB_MBSSTR@ GNULIB_MBSTOK_R = @GNULIB_MBSTOK_R@ GNULIB_MEMCHR = @GNULIB_MEMCHR@ GNULIB_MEMMEM = @GNULIB_MEMMEM@ GNULIB_MEMPCPY = @GNULIB_MEMPCPY@ GNULIB_MEMRCHR = @GNULIB_MEMRCHR@ GNULIB_OBSTACK_PRINTF = @GNULIB_OBSTACK_PRINTF@ GNULIB_OBSTACK_PRINTF_POSIX = @GNULIB_OBSTACK_PRINTF_POSIX@ GNULIB_PCLOSE = @GNULIB_PCLOSE@ GNULIB_PERROR = @GNULIB_PERROR@ GNULIB_PIPE = @GNULIB_PIPE@ GNULIB_PIPE2 = @GNULIB_PIPE2@ GNULIB_POPEN = @GNULIB_POPEN@ GNULIB_PREAD = @GNULIB_PREAD@ GNULIB_PRINTF = @GNULIB_PRINTF@ GNULIB_PRINTF_POSIX = @GNULIB_PRINTF_POSIX@ GNULIB_PUTC = @GNULIB_PUTC@ GNULIB_PUTCHAR = @GNULIB_PUTCHAR@ GNULIB_PUTS = @GNULIB_PUTS@ GNULIB_PWRITE = @GNULIB_PWRITE@ GNULIB_RAWMEMCHR = @GNULIB_RAWMEMCHR@ GNULIB_READ = @GNULIB_READ@ GNULIB_READLINK = @GNULIB_READLINK@ GNULIB_READLINKAT = @GNULIB_READLINKAT@ GNULIB_REMOVE = @GNULIB_REMOVE@ GNULIB_RENAME = @GNULIB_RENAME@ GNULIB_RENAMEAT = @GNULIB_RENAMEAT@ GNULIB_RMDIR = @GNULIB_RMDIR@ GNULIB_SCANF = @GNULIB_SCANF@ GNULIB_SETHOSTNAME = @GNULIB_SETHOSTNAME@ GNULIB_SLEEP = @GNULIB_SLEEP@ GNULIB_SNPRINTF = @GNULIB_SNPRINTF@ GNULIB_SPRINTF_POSIX = @GNULIB_SPRINTF_POSIX@ GNULIB_STDIO_H_NONBLOCKING = @GNULIB_STDIO_H_NONBLOCKING@ GNULIB_STDIO_H_SIGPIPE = @GNULIB_STDIO_H_SIGPIPE@ GNULIB_STPCPY = @GNULIB_STPCPY@ GNULIB_STPNCPY = @GNULIB_STPNCPY@ GNULIB_STRCASESTR = @GNULIB_STRCASESTR@ GNULIB_STRCHRNUL = @GNULIB_STRCHRNUL@ GNULIB_STRDUP = @GNULIB_STRDUP@ GNULIB_STRERROR = @GNULIB_STRERROR@ GNULIB_STRERROR_R = @GNULIB_STRERROR_R@ GNULIB_STRNCAT = @GNULIB_STRNCAT@ GNULIB_STRNDUP = @GNULIB_STRNDUP@ GNULIB_STRNLEN = @GNULIB_STRNLEN@ GNULIB_STRPBRK = @GNULIB_STRPBRK@ GNULIB_STRSEP = @GNULIB_STRSEP@ GNULIB_STRSIGNAL = @GNULIB_STRSIGNAL@ GNULIB_STRSTR = @GNULIB_STRSTR@ GNULIB_STRTOK_R = @GNULIB_STRTOK_R@ GNULIB_STRVERSCMP = @GNULIB_STRVERSCMP@ GNULIB_SYMLINK = @GNULIB_SYMLINK@ GNULIB_SYMLINKAT = @GNULIB_SYMLINKAT@ GNULIB_TMPFILE = @GNULIB_TMPFILE@ GNULIB_TTYNAME_R = @GNULIB_TTYNAME_R@ GNULIB_UNISTD_H_NONBLOCKING = @GNULIB_UNISTD_H_NONBLOCKING@ GNULIB_UNISTD_H_SIGPIPE = @GNULIB_UNISTD_H_SIGPIPE@ GNULIB_UNLINK = @GNULIB_UNLINK@ GNULIB_UNLINKAT = @GNULIB_UNLINKAT@ GNULIB_USLEEP = @GNULIB_USLEEP@ GNULIB_VASPRINTF = @GNULIB_VASPRINTF@ GNULIB_VDPRINTF = @GNULIB_VDPRINTF@ GNULIB_VFPRINTF = @GNULIB_VFPRINTF@ GNULIB_VFPRINTF_POSIX = @GNULIB_VFPRINTF_POSIX@ GNULIB_VFSCANF = @GNULIB_VFSCANF@ GNULIB_VPRINTF = @GNULIB_VPRINTF@ GNULIB_VPRINTF_POSIX = @GNULIB_VPRINTF_POSIX@ GNULIB_VSCANF = @GNULIB_VSCANF@ GNULIB_VSNPRINTF = @GNULIB_VSNPRINTF@ GNULIB_VSPRINTF_POSIX = @GNULIB_VSPRINTF_POSIX@ GNULIB_WRITE = @GNULIB_WRITE@ GREP = @GREP@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ HAVE_CHOWN = @HAVE_CHOWN@ HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@ HAVE_DECL_FCHDIR = @HAVE_DECL_FCHDIR@ HAVE_DECL_FDATASYNC = @HAVE_DECL_FDATASYNC@ HAVE_DECL_FPURGE = @HAVE_DECL_FPURGE@ HAVE_DECL_FSEEKO = @HAVE_DECL_FSEEKO@ HAVE_DECL_FTELLO = @HAVE_DECL_FTELLO@ HAVE_DECL_GETDELIM = @HAVE_DECL_GETDELIM@ HAVE_DECL_GETDOMAINNAME = @HAVE_DECL_GETDOMAINNAME@ HAVE_DECL_GETLINE = @HAVE_DECL_GETLINE@ HAVE_DECL_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_OBSTACK_PRINTF = @HAVE_DECL_OBSTACK_PRINTF@ HAVE_DECL_SETHOSTNAME = @HAVE_DECL_SETHOSTNAME@ HAVE_DECL_SNPRINTF = @HAVE_DECL_SNPRINTF@ HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@ HAVE_DECL_STRERROR_R = @HAVE_DECL_STRERROR_R@ HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@ HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@ HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@ HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@ HAVE_DECL_TTYNAME_R = @HAVE_DECL_TTYNAME_R@ HAVE_DECL_VSNPRINTF = @HAVE_DECL_VSNPRINTF@ HAVE_DPRINTF = @HAVE_DPRINTF@ HAVE_DUP2 = @HAVE_DUP2@ HAVE_DUP3 = @HAVE_DUP3@ HAVE_EUIDACCESS = @HAVE_EUIDACCESS@ HAVE_FACCESSAT = @HAVE_FACCESSAT@ HAVE_FCHDIR = @HAVE_FCHDIR@ HAVE_FCHOWNAT = @HAVE_FCHOWNAT@ HAVE_FDATASYNC = @HAVE_FDATASYNC@ HAVE_FFSL = @HAVE_FFSL@ HAVE_FFSLL = @HAVE_FFSLL@ HAVE_FSEEKO = @HAVE_FSEEKO@ HAVE_FSYNC = @HAVE_FSYNC@ HAVE_FTELLO = @HAVE_FTELLO@ HAVE_FTRUNCATE = @HAVE_FTRUNCATE@ 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_GROUP_MEMBER = @HAVE_GROUP_MEMBER@ HAVE_LCHOWN = @HAVE_LCHOWN@ HAVE_LIBSHISHI = @HAVE_LIBSHISHI@ HAVE_LINK = @HAVE_LINK@ HAVE_LINKAT = @HAVE_LINKAT@ HAVE_MBSLEN = @HAVE_MBSLEN@ HAVE_MEMCHR = @HAVE_MEMCHR@ HAVE_MEMPCPY = @HAVE_MEMPCPY@ HAVE_MSVC_INVALID_PARAMETER_HANDLER = @HAVE_MSVC_INVALID_PARAMETER_HANDLER@ HAVE_OS_H = @HAVE_OS_H@ HAVE_PCLOSE = @HAVE_PCLOSE@ HAVE_PIPE = @HAVE_PIPE@ HAVE_PIPE2 = @HAVE_PIPE2@ HAVE_POPEN = @HAVE_POPEN@ HAVE_PREAD = @HAVE_PREAD@ HAVE_PWRITE = @HAVE_PWRITE@ HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@ HAVE_READLINK = @HAVE_READLINK@ HAVE_READLINKAT = @HAVE_READLINKAT@ HAVE_RENAMEAT = @HAVE_RENAMEAT@ HAVE_SETHOSTNAME = @HAVE_SETHOSTNAME@ HAVE_SLEEP = @HAVE_SLEEP@ 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_STRVERSCMP = @HAVE_STRVERSCMP@ HAVE_SYMLINK = @HAVE_SYMLINK@ HAVE_SYMLINKAT = @HAVE_SYMLINKAT@ HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@ HAVE_UNISTD_H = @HAVE_UNISTD_H@ HAVE_UNLINKAT = @HAVE_UNLINKAT@ HAVE_USLEEP = @HAVE_USLEEP@ HAVE_VASPRINTF = @HAVE_VASPRINTF@ HAVE_VDPRINTF = @HAVE_VDPRINTF@ HAVE_WCHAR_T = @HAVE_WCHAR_T@ HAVE_WINSOCK2_H = @HAVE_WINSOCK2_H@ HAVE__BOOL = @HAVE__BOOL@ HELP2MAN = @HELP2MAN@ HTML_DIR = @HTML_DIR@ INCLUDE_GSS_KRB5 = @INCLUDE_GSS_KRB5@ INCLUDE_GSS_KRB5_EXT = @INCLUDE_GSS_KRB5_EXT@ 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@ INTLLIBS = @INTLLIBS@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBSHISHI = @LIBSHISHI@ LIBSHISHI_PREFIX = @LIBSHISHI_PREFIX@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBOBJS = @LTLIBOBJS@ LTLIBSHISHI = @LTLIBSHISHI@ LT_AGE = @LT_AGE@ LT_CURRENT = @LT_CURRENT@ LT_REVISION = @LT_REVISION@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = @NEXT_AS_FIRST_DIRECTIVE_ERRNO_H@ NEXT_AS_FIRST_DIRECTIVE_GETOPT_H = @NEXT_AS_FIRST_DIRECTIVE_GETOPT_H@ NEXT_AS_FIRST_DIRECTIVE_STDARG_H = @NEXT_AS_FIRST_DIRECTIVE_STDARG_H@ NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@ NEXT_AS_FIRST_DIRECTIVE_STDIO_H = @NEXT_AS_FIRST_DIRECTIVE_STDIO_H@ NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H@ NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@ NEXT_ERRNO_H = @NEXT_ERRNO_H@ NEXT_GETOPT_H = @NEXT_GETOPT_H@ NEXT_STDARG_H = @NEXT_STDARG_H@ NEXT_STDDEF_H = @NEXT_STDDEF_H@ NEXT_STDIO_H = @NEXT_STDIO_H@ NEXT_STRING_H = @NEXT_STRING_H@ NEXT_SYS_TYPES_H = @NEXT_SYS_TYPES_H@ NEXT_UNISTD_H = @NEXT_UNISTD_H@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ PKG_CONFIG = @PKG_CONFIG@ PMCCABE = @PMCCABE@ POSUB = @POSUB@ PO_SUFFIX = @PO_SUFFIX@ PRAGMA_COLUMNS = @PRAGMA_COLUMNS@ PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@ RANLIB = @RANLIB@ REPLACE_CHOWN = @REPLACE_CHOWN@ REPLACE_CLOSE = @REPLACE_CLOSE@ REPLACE_DPRINTF = @REPLACE_DPRINTF@ REPLACE_DUP = @REPLACE_DUP@ REPLACE_DUP2 = @REPLACE_DUP2@ REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@ REPLACE_FCLOSE = @REPLACE_FCLOSE@ REPLACE_FDOPEN = @REPLACE_FDOPEN@ REPLACE_FFLUSH = @REPLACE_FFLUSH@ REPLACE_FOPEN = @REPLACE_FOPEN@ REPLACE_FPRINTF = @REPLACE_FPRINTF@ REPLACE_FPURGE = @REPLACE_FPURGE@ REPLACE_FREOPEN = @REPLACE_FREOPEN@ REPLACE_FSEEK = @REPLACE_FSEEK@ REPLACE_FSEEKO = @REPLACE_FSEEKO@ REPLACE_FTELL = @REPLACE_FTELL@ REPLACE_FTELLO = @REPLACE_FTELLO@ REPLACE_FTRUNCATE = @REPLACE_FTRUNCATE@ REPLACE_GETCWD = @REPLACE_GETCWD@ REPLACE_GETDELIM = @REPLACE_GETDELIM@ REPLACE_GETDOMAINNAME = @REPLACE_GETDOMAINNAME@ REPLACE_GETDTABLESIZE = @REPLACE_GETDTABLESIZE@ REPLACE_GETGROUPS = @REPLACE_GETGROUPS@ REPLACE_GETLINE = @REPLACE_GETLINE@ REPLACE_GETLOGIN_R = @REPLACE_GETLOGIN_R@ REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@ REPLACE_ISATTY = @REPLACE_ISATTY@ REPLACE_LCHOWN = @REPLACE_LCHOWN@ REPLACE_LINK = @REPLACE_LINK@ REPLACE_LINKAT = @REPLACE_LINKAT@ REPLACE_LSEEK = @REPLACE_LSEEK@ REPLACE_MEMCHR = @REPLACE_MEMCHR@ REPLACE_MEMMEM = @REPLACE_MEMMEM@ REPLACE_NULL = @REPLACE_NULL@ REPLACE_OBSTACK_PRINTF = @REPLACE_OBSTACK_PRINTF@ REPLACE_PERROR = @REPLACE_PERROR@ REPLACE_POPEN = @REPLACE_POPEN@ REPLACE_PREAD = @REPLACE_PREAD@ REPLACE_PRINTF = @REPLACE_PRINTF@ REPLACE_PWRITE = @REPLACE_PWRITE@ REPLACE_READ = @REPLACE_READ@ REPLACE_READLINK = @REPLACE_READLINK@ REPLACE_REMOVE = @REPLACE_REMOVE@ REPLACE_RENAME = @REPLACE_RENAME@ REPLACE_RENAMEAT = @REPLACE_RENAMEAT@ REPLACE_RMDIR = @REPLACE_RMDIR@ REPLACE_SLEEP = @REPLACE_SLEEP@ REPLACE_SNPRINTF = @REPLACE_SNPRINTF@ REPLACE_SPRINTF = @REPLACE_SPRINTF@ REPLACE_STDIO_READ_FUNCS = @REPLACE_STDIO_READ_FUNCS@ REPLACE_STDIO_WRITE_FUNCS = @REPLACE_STDIO_WRITE_FUNCS@ REPLACE_STPNCPY = @REPLACE_STPNCPY@ REPLACE_STRCASESTR = @REPLACE_STRCASESTR@ REPLACE_STRCHRNUL = @REPLACE_STRCHRNUL@ REPLACE_STRDUP = @REPLACE_STRDUP@ REPLACE_STRERROR = @REPLACE_STRERROR@ REPLACE_STRERROR_R = @REPLACE_STRERROR_R@ REPLACE_STRNCAT = @REPLACE_STRNCAT@ REPLACE_STRNDUP = @REPLACE_STRNDUP@ REPLACE_STRNLEN = @REPLACE_STRNLEN@ REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@ REPLACE_STRSTR = @REPLACE_STRSTR@ REPLACE_STRTOK_R = @REPLACE_STRTOK_R@ REPLACE_SYMLINK = @REPLACE_SYMLINK@ REPLACE_TMPFILE = @REPLACE_TMPFILE@ REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@ REPLACE_UNLINK = @REPLACE_UNLINK@ REPLACE_UNLINKAT = @REPLACE_UNLINKAT@ REPLACE_USLEEP = @REPLACE_USLEEP@ REPLACE_VASPRINTF = @REPLACE_VASPRINTF@ REPLACE_VDPRINTF = @REPLACE_VDPRINTF@ REPLACE_VFPRINTF = @REPLACE_VFPRINTF@ REPLACE_VPRINTF = @REPLACE_VPRINTF@ REPLACE_VSNPRINTF = @REPLACE_VSNPRINTF@ REPLACE_VSPRINTF = @REPLACE_VSPRINTF@ REPLACE_WRITE = @REPLACE_WRITE@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STDARG_H = @STDARG_H@ STDBOOL_H = @STDBOOL_H@ STDDEF_H = @STDDEF_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@ USE_NLS = @USE_NLS@ VALGRIND = @VALGRIND@ VERSION = @VERSION@ VERSION_MAJOR = @VERSION_MAJOR@ VERSION_MINOR = @VERSION_MINOR@ VERSION_NUMBER = @VERSION_NUMBER@ VERSION_PATCH = @VERSION_PATCH@ WARN_CFLAGS = @WARN_CFLAGS@ WERROR_CFLAGS = @WERROR_CFLAGS@ WINDOWS_64_BIT_OFF_T = @WINDOWS_64_BIT_OFF_T@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gl_LIBOBJS = @gl_LIBOBJS@ gl_LTLIBOBJS = @gl_LTLIBOBJS@ gltests_LIBOBJS = @gltests_LIBOBJS@ gltests_LTLIBOBJS = @gltests_LTLIBOBJS@ gltests_WITNESS = @gltests_WITNESS@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ libgl_LIBOBJS = @libgl_LIBOBJS@ libgl_LTLIBOBJS = @libgl_LTLIBOBJS@ libgltests_LIBOBJS = @libgltests_LIBOBJS@ libgltests_LTLIBOBJS = @libgltests_LTLIBOBJS@ libgltests_WITNESS = @libgltests_WITNESS@ localedir = @localedir@ localstatedir = @localstatedir@ 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@ srcgl_LIBOBJS = @srcgl_LIBOBJS@ srcgl_LTLIBOBJS = @srcgl_LTLIBOBJS@ srcgltests_LIBOBJS = @srcgltests_LIBOBJS@ srcgltests_LTLIBOBJS = @srcgltests_LTLIBOBJS@ srcgltests_WITNESS = @srcgltests_WITNESS@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AUTOMAKE_OPTIONS = 1.9.6 gnits SUBDIRS = noinst_HEADERS = noinst_LIBRARIES = noinst_LTLIBRARIES = libgnu.la EXTRA_DIST = m4/gnulib-cache.m4 errno.in.h error.c error.h getopt.c \ getopt.in.h getopt1.c getopt_int.h intprops.h memchr.c \ memchr.valgrind msvc-inval.c msvc-inval.h msvc-nothrow.c \ msvc-nothrow.h $(top_srcdir)/build-aux/snippet/arg-nonnull.h \ $(top_srcdir)/build-aux/snippet/c++defs.h \ $(top_srcdir)/build-aux/snippet/warn-on-use.h stdarg.in.h \ stdbool.in.h stddef.in.h stdio.in.h strerror.c \ strerror-override.c strerror-override.h string.in.h \ sys_types.in.h unistd.in.h verify.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 = $(ERRNO_H) $(GETOPT_H) arg-nonnull.h c++defs.h \ warn-on-use.h $(STDARG_H) $(STDBOOL_H) $(STDDEF_H) stdio.h \ string.h sys/types.h unistd.h SUFFIXES = MOSTLYCLEANFILES = core *.stackdump errno.h errno.h-t getopt.h \ getopt.h-t arg-nonnull.h arg-nonnull.h-t c++defs.h c++defs.h-t \ warn-on-use.h warn-on-use.h-t stdarg.h stdarg.h-t stdbool.h \ stdbool.h-t stddef.h stddef.h-t stdio.h stdio.h-t string.h \ string.h-t sys/types.h sys/types.h-t unistd.h unistd.h-t MOSTLYCLEANDIRS = CLEANFILES = DISTCLEANFILES = MAINTAINERCLEANFILES = AM_CPPFLAGS = AM_CFLAGS = libgnu_la_SOURCES = base64.h base64.c gettext.h progname.h progname.c \ unistd.c version-etc.h version-etc.c libgnu_la_LIBADD = $(srcgl_LTLIBOBJS) libgnu_la_DEPENDENCIES = $(srcgl_LTLIBOBJS) EXTRA_libgnu_la_SOURCES = error.c getopt.c getopt1.c memchr.c \ msvc-inval.c msvc-nothrow.c strerror.c strerror-override.c libgnu_la_LDFLAGS = $(AM_LDFLAGS) -no-undefined $(LTLIBINTL) # Use this preprocessor expression to decide whether #include_next works. # Do not rely on a 'configure'-time test for this, since the expression # might appear in an installed header, which is used by some other compiler. HAVE_INCLUDE_NEXT = (__GNUC__ || 60000000 <= __DECC_VER) 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 src/gl/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnits src/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)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libgnu.la: $(libgnu_la_OBJECTS) $(libgnu_la_DEPENDENCIES) $(EXTRA_libgnu_la_DEPENDENCIES) $(AM_V_CCLD)$(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)/base64.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/error.Plo@am__quote@ @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)/memchr.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/msvc-inval.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/msvc-nothrow.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/progname.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strerror-override.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/strerror.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/unistd.Plo@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/version-etc.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(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. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done 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: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: -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: $(am__recursive_targets) all check install install-am \ install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ check-am clean clean-generic clean-libtool \ clean-noinstLIBRARIES clean-noinstLTLIBRARIES cscopelist-am \ ctags ctags-am 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-am uninstall uninstall-am # We need the following in order to create <errno.h> when the system # doesn't have one that is POSIX compliant. @GL_GENERATE_ERRNO_H_TRUE@errno.h: errno.in.h $(top_builddir)/config.status @GL_GENERATE_ERRNO_H_TRUE@ $(AM_V_GEN)rm -f $@-t $@ && \ @GL_GENERATE_ERRNO_H_TRUE@ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ @GL_GENERATE_ERRNO_H_TRUE@ sed -e 's|@''GUARD_PREFIX''@|GL_SRCGL|g' \ @GL_GENERATE_ERRNO_H_TRUE@ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ @GL_GENERATE_ERRNO_H_TRUE@ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ @GL_GENERATE_ERRNO_H_TRUE@ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ @GL_GENERATE_ERRNO_H_TRUE@ -e 's|@''NEXT_ERRNO_H''@|$(NEXT_ERRNO_H)|g' \ @GL_GENERATE_ERRNO_H_TRUE@ -e 's|@''EMULTIHOP_HIDDEN''@|$(EMULTIHOP_HIDDEN)|g' \ @GL_GENERATE_ERRNO_H_TRUE@ -e 's|@''EMULTIHOP_VALUE''@|$(EMULTIHOP_VALUE)|g' \ @GL_GENERATE_ERRNO_H_TRUE@ -e 's|@''ENOLINK_HIDDEN''@|$(ENOLINK_HIDDEN)|g' \ @GL_GENERATE_ERRNO_H_TRUE@ -e 's|@''ENOLINK_VALUE''@|$(ENOLINK_VALUE)|g' \ @GL_GENERATE_ERRNO_H_TRUE@ -e 's|@''EOVERFLOW_HIDDEN''@|$(EOVERFLOW_HIDDEN)|g' \ @GL_GENERATE_ERRNO_H_TRUE@ -e 's|@''EOVERFLOW_VALUE''@|$(EOVERFLOW_VALUE)|g' \ @GL_GENERATE_ERRNO_H_TRUE@ < $(srcdir)/errno.in.h; \ @GL_GENERATE_ERRNO_H_TRUE@ } > $@-t && \ @GL_GENERATE_ERRNO_H_TRUE@ mv $@-t $@ @GL_GENERATE_ERRNO_H_FALSE@errno.h: $(top_builddir)/config.status @GL_GENERATE_ERRNO_H_FALSE@ rm -f $@ # 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 $(top_builddir)/config.status $(ARG_NONNULL_H) $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ sed -e 's|@''GUARD_PREFIX''@|GL_SRCGL|g' \ -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|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|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 $@ # The arg-nonnull.h that gets inserted into generated .h files is the same as # build-aux/snippet/arg-nonnull.h, except that it has the copyright header cut # off. arg-nonnull.h: $(top_srcdir)/build-aux/snippet/arg-nonnull.h $(AM_V_GEN)rm -f $@-t $@ && \ sed -n -e '/GL_ARG_NONNULL/,$$p' \ < $(top_srcdir)/build-aux/snippet/arg-nonnull.h \ > $@-t && \ mv $@-t $@ # The c++defs.h that gets inserted into generated .h files is the same as # build-aux/snippet/c++defs.h, except that it has the copyright header cut off. c++defs.h: $(top_srcdir)/build-aux/snippet/c++defs.h $(AM_V_GEN)rm -f $@-t $@ && \ sed -n -e '/_GL_CXXDEFS/,$$p' \ < $(top_srcdir)/build-aux/snippet/c++defs.h \ > $@-t && \ mv $@-t $@ # The warn-on-use.h that gets inserted into generated .h files is the same as # build-aux/snippet/warn-on-use.h, except that it has the copyright header cut # off. warn-on-use.h: $(top_srcdir)/build-aux/snippet/warn-on-use.h $(AM_V_GEN)rm -f $@-t $@ && \ sed -n -e '/^.ifndef/,$$p' \ < $(top_srcdir)/build-aux/snippet/warn-on-use.h \ > $@-t && \ mv $@-t $@ # We need the following in order to create <stdarg.h> when the system # doesn't have one that works with the given compiler. @GL_GENERATE_STDARG_H_TRUE@stdarg.h: stdarg.in.h $(top_builddir)/config.status @GL_GENERATE_STDARG_H_TRUE@ $(AM_V_GEN)rm -f $@-t $@ && \ @GL_GENERATE_STDARG_H_TRUE@ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ @GL_GENERATE_STDARG_H_TRUE@ sed -e 's|@''GUARD_PREFIX''@|GL_SRCGL|g' \ @GL_GENERATE_STDARG_H_TRUE@ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ @GL_GENERATE_STDARG_H_TRUE@ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ @GL_GENERATE_STDARG_H_TRUE@ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ @GL_GENERATE_STDARG_H_TRUE@ -e 's|@''NEXT_STDARG_H''@|$(NEXT_STDARG_H)|g' \ @GL_GENERATE_STDARG_H_TRUE@ < $(srcdir)/stdarg.in.h; \ @GL_GENERATE_STDARG_H_TRUE@ } > $@-t && \ @GL_GENERATE_STDARG_H_TRUE@ mv $@-t $@ @GL_GENERATE_STDARG_H_FALSE@stdarg.h: $(top_builddir)/config.status @GL_GENERATE_STDARG_H_FALSE@ rm -f $@ # We need the following in order to create <stdbool.h> when the system # doesn't have one that works. @GL_GENERATE_STDBOOL_H_TRUE@stdbool.h: stdbool.in.h $(top_builddir)/config.status @GL_GENERATE_STDBOOL_H_TRUE@ $(AM_V_GEN)rm -f $@-t $@ && \ @GL_GENERATE_STDBOOL_H_TRUE@ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ @GL_GENERATE_STDBOOL_H_TRUE@ sed -e 's/@''HAVE__BOOL''@/$(HAVE__BOOL)/g' < $(srcdir)/stdbool.in.h; \ @GL_GENERATE_STDBOOL_H_TRUE@ } > $@-t && \ @GL_GENERATE_STDBOOL_H_TRUE@ mv $@-t $@ @GL_GENERATE_STDBOOL_H_FALSE@stdbool.h: $(top_builddir)/config.status @GL_GENERATE_STDBOOL_H_FALSE@ rm -f $@ # We need the following in order to create <stddef.h> when the system # doesn't have one that works with the given compiler. @GL_GENERATE_STDDEF_H_TRUE@stddef.h: stddef.in.h $(top_builddir)/config.status @GL_GENERATE_STDDEF_H_TRUE@ $(AM_V_GEN)rm -f $@-t $@ && \ @GL_GENERATE_STDDEF_H_TRUE@ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ @GL_GENERATE_STDDEF_H_TRUE@ sed -e 's|@''GUARD_PREFIX''@|GL_SRCGL|g' \ @GL_GENERATE_STDDEF_H_TRUE@ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ @GL_GENERATE_STDDEF_H_TRUE@ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ @GL_GENERATE_STDDEF_H_TRUE@ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ @GL_GENERATE_STDDEF_H_TRUE@ -e 's|@''NEXT_STDDEF_H''@|$(NEXT_STDDEF_H)|g' \ @GL_GENERATE_STDDEF_H_TRUE@ -e 's|@''HAVE_WCHAR_T''@|$(HAVE_WCHAR_T)|g' \ @GL_GENERATE_STDDEF_H_TRUE@ -e 's|@''REPLACE_NULL''@|$(REPLACE_NULL)|g' \ @GL_GENERATE_STDDEF_H_TRUE@ < $(srcdir)/stddef.in.h; \ @GL_GENERATE_STDDEF_H_TRUE@ } > $@-t && \ @GL_GENERATE_STDDEF_H_TRUE@ mv $@-t $@ @GL_GENERATE_STDDEF_H_FALSE@stddef.h: $(top_builddir)/config.status @GL_GENERATE_STDDEF_H_FALSE@ rm -f $@ # We need the following in order to create <stdio.h> when the system # doesn't have one that works with the given compiler. stdio.h: stdio.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ sed -e 's|@''GUARD_PREFIX''@|GL_SRCGL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_STDIO_H''@|$(NEXT_STDIO_H)|g' \ -e 's/@''GNULIB_DPRINTF''@/$(GNULIB_DPRINTF)/g' \ -e 's/@''GNULIB_FCLOSE''@/$(GNULIB_FCLOSE)/g' \ -e 's/@''GNULIB_FDOPEN''@/$(GNULIB_FDOPEN)/g' \ -e 's/@''GNULIB_FFLUSH''@/$(GNULIB_FFLUSH)/g' \ -e 's/@''GNULIB_FGETC''@/$(GNULIB_FGETC)/g' \ -e 's/@''GNULIB_FGETS''@/$(GNULIB_FGETS)/g' \ -e 's/@''GNULIB_FOPEN''@/$(GNULIB_FOPEN)/g' \ -e 's/@''GNULIB_FPRINTF''@/$(GNULIB_FPRINTF)/g' \ -e 's/@''GNULIB_FPRINTF_POSIX''@/$(GNULIB_FPRINTF_POSIX)/g' \ -e 's/@''GNULIB_FPURGE''@/$(GNULIB_FPURGE)/g' \ -e 's/@''GNULIB_FPUTC''@/$(GNULIB_FPUTC)/g' \ -e 's/@''GNULIB_FPUTS''@/$(GNULIB_FPUTS)/g' \ -e 's/@''GNULIB_FREAD''@/$(GNULIB_FREAD)/g' \ -e 's/@''GNULIB_FREOPEN''@/$(GNULIB_FREOPEN)/g' \ -e 's/@''GNULIB_FSCANF''@/$(GNULIB_FSCANF)/g' \ -e 's/@''GNULIB_FSEEK''@/$(GNULIB_FSEEK)/g' \ -e 's/@''GNULIB_FSEEKO''@/$(GNULIB_FSEEKO)/g' \ -e 's/@''GNULIB_FTELL''@/$(GNULIB_FTELL)/g' \ -e 's/@''GNULIB_FTELLO''@/$(GNULIB_FTELLO)/g' \ -e 's/@''GNULIB_FWRITE''@/$(GNULIB_FWRITE)/g' \ -e 's/@''GNULIB_GETC''@/$(GNULIB_GETC)/g' \ -e 's/@''GNULIB_GETCHAR''@/$(GNULIB_GETCHAR)/g' \ -e 's/@''GNULIB_GETDELIM''@/$(GNULIB_GETDELIM)/g' \ -e 's/@''GNULIB_GETLINE''@/$(GNULIB_GETLINE)/g' \ -e 's/@''GNULIB_OBSTACK_PRINTF''@/$(GNULIB_OBSTACK_PRINTF)/g' \ -e 's/@''GNULIB_OBSTACK_PRINTF_POSIX''@/$(GNULIB_OBSTACK_PRINTF_POSIX)/g' \ -e 's/@''GNULIB_PCLOSE''@/$(GNULIB_PCLOSE)/g' \ -e 's/@''GNULIB_PERROR''@/$(GNULIB_PERROR)/g' \ -e 's/@''GNULIB_POPEN''@/$(GNULIB_POPEN)/g' \ -e 's/@''GNULIB_PRINTF''@/$(GNULIB_PRINTF)/g' \ -e 's/@''GNULIB_PRINTF_POSIX''@/$(GNULIB_PRINTF_POSIX)/g' \ -e 's/@''GNULIB_PUTC''@/$(GNULIB_PUTC)/g' \ -e 's/@''GNULIB_PUTCHAR''@/$(GNULIB_PUTCHAR)/g' \ -e 's/@''GNULIB_PUTS''@/$(GNULIB_PUTS)/g' \ -e 's/@''GNULIB_REMOVE''@/$(GNULIB_REMOVE)/g' \ -e 's/@''GNULIB_RENAME''@/$(GNULIB_RENAME)/g' \ -e 's/@''GNULIB_RENAMEAT''@/$(GNULIB_RENAMEAT)/g' \ -e 's/@''GNULIB_SCANF''@/$(GNULIB_SCANF)/g' \ -e 's/@''GNULIB_SNPRINTF''@/$(GNULIB_SNPRINTF)/g' \ -e 's/@''GNULIB_SPRINTF_POSIX''@/$(GNULIB_SPRINTF_POSIX)/g' \ -e 's/@''GNULIB_STDIO_H_NONBLOCKING''@/$(GNULIB_STDIO_H_NONBLOCKING)/g' \ -e 's/@''GNULIB_STDIO_H_SIGPIPE''@/$(GNULIB_STDIO_H_SIGPIPE)/g' \ -e 's/@''GNULIB_TMPFILE''@/$(GNULIB_TMPFILE)/g' \ -e 's/@''GNULIB_VASPRINTF''@/$(GNULIB_VASPRINTF)/g' \ -e 's/@''GNULIB_VDPRINTF''@/$(GNULIB_VDPRINTF)/g' \ -e 's/@''GNULIB_VFPRINTF''@/$(GNULIB_VFPRINTF)/g' \ -e 's/@''GNULIB_VFPRINTF_POSIX''@/$(GNULIB_VFPRINTF_POSIX)/g' \ -e 's/@''GNULIB_VFSCANF''@/$(GNULIB_VFSCANF)/g' \ -e 's/@''GNULIB_VSCANF''@/$(GNULIB_VSCANF)/g' \ -e 's/@''GNULIB_VPRINTF''@/$(GNULIB_VPRINTF)/g' \ -e 's/@''GNULIB_VPRINTF_POSIX''@/$(GNULIB_VPRINTF_POSIX)/g' \ -e 's/@''GNULIB_VSNPRINTF''@/$(GNULIB_VSNPRINTF)/g' \ -e 's/@''GNULIB_VSPRINTF_POSIX''@/$(GNULIB_VSPRINTF_POSIX)/g' \ < $(srcdir)/stdio.in.h | \ sed -e 's|@''HAVE_DECL_FPURGE''@|$(HAVE_DECL_FPURGE)|g' \ -e 's|@''HAVE_DECL_FSEEKO''@|$(HAVE_DECL_FSEEKO)|g' \ -e 's|@''HAVE_DECL_FTELLO''@|$(HAVE_DECL_FTELLO)|g' \ -e 's|@''HAVE_DECL_GETDELIM''@|$(HAVE_DECL_GETDELIM)|g' \ -e 's|@''HAVE_DECL_GETLINE''@|$(HAVE_DECL_GETLINE)|g' \ -e 's|@''HAVE_DECL_OBSTACK_PRINTF''@|$(HAVE_DECL_OBSTACK_PRINTF)|g' \ -e 's|@''HAVE_DECL_SNPRINTF''@|$(HAVE_DECL_SNPRINTF)|g' \ -e 's|@''HAVE_DECL_VSNPRINTF''@|$(HAVE_DECL_VSNPRINTF)|g' \ -e 's|@''HAVE_DPRINTF''@|$(HAVE_DPRINTF)|g' \ -e 's|@''HAVE_FSEEKO''@|$(HAVE_FSEEKO)|g' \ -e 's|@''HAVE_FTELLO''@|$(HAVE_FTELLO)|g' \ -e 's|@''HAVE_PCLOSE''@|$(HAVE_PCLOSE)|g' \ -e 's|@''HAVE_POPEN''@|$(HAVE_POPEN)|g' \ -e 's|@''HAVE_RENAMEAT''@|$(HAVE_RENAMEAT)|g' \ -e 's|@''HAVE_VASPRINTF''@|$(HAVE_VASPRINTF)|g' \ -e 's|@''HAVE_VDPRINTF''@|$(HAVE_VDPRINTF)|g' \ -e 's|@''REPLACE_DPRINTF''@|$(REPLACE_DPRINTF)|g' \ -e 's|@''REPLACE_FCLOSE''@|$(REPLACE_FCLOSE)|g' \ -e 's|@''REPLACE_FDOPEN''@|$(REPLACE_FDOPEN)|g' \ -e 's|@''REPLACE_FFLUSH''@|$(REPLACE_FFLUSH)|g' \ -e 's|@''REPLACE_FOPEN''@|$(REPLACE_FOPEN)|g' \ -e 's|@''REPLACE_FPRINTF''@|$(REPLACE_FPRINTF)|g' \ -e 's|@''REPLACE_FPURGE''@|$(REPLACE_FPURGE)|g' \ -e 's|@''REPLACE_FREOPEN''@|$(REPLACE_FREOPEN)|g' \ -e 's|@''REPLACE_FSEEK''@|$(REPLACE_FSEEK)|g' \ -e 's|@''REPLACE_FSEEKO''@|$(REPLACE_FSEEKO)|g' \ -e 's|@''REPLACE_FTELL''@|$(REPLACE_FTELL)|g' \ -e 's|@''REPLACE_FTELLO''@|$(REPLACE_FTELLO)|g' \ -e 's|@''REPLACE_GETDELIM''@|$(REPLACE_GETDELIM)|g' \ -e 's|@''REPLACE_GETLINE''@|$(REPLACE_GETLINE)|g' \ -e 's|@''REPLACE_OBSTACK_PRINTF''@|$(REPLACE_OBSTACK_PRINTF)|g' \ -e 's|@''REPLACE_PERROR''@|$(REPLACE_PERROR)|g' \ -e 's|@''REPLACE_POPEN''@|$(REPLACE_POPEN)|g' \ -e 's|@''REPLACE_PRINTF''@|$(REPLACE_PRINTF)|g' \ -e 's|@''REPLACE_REMOVE''@|$(REPLACE_REMOVE)|g' \ -e 's|@''REPLACE_RENAME''@|$(REPLACE_RENAME)|g' \ -e 's|@''REPLACE_RENAMEAT''@|$(REPLACE_RENAMEAT)|g' \ -e 's|@''REPLACE_SNPRINTF''@|$(REPLACE_SNPRINTF)|g' \ -e 's|@''REPLACE_SPRINTF''@|$(REPLACE_SPRINTF)|g' \ -e 's|@''REPLACE_STDIO_READ_FUNCS''@|$(REPLACE_STDIO_READ_FUNCS)|g' \ -e 's|@''REPLACE_STDIO_WRITE_FUNCS''@|$(REPLACE_STDIO_WRITE_FUNCS)|g' \ -e 's|@''REPLACE_TMPFILE''@|$(REPLACE_TMPFILE)|g' \ -e 's|@''REPLACE_VASPRINTF''@|$(REPLACE_VASPRINTF)|g' \ -e 's|@''REPLACE_VDPRINTF''@|$(REPLACE_VDPRINTF)|g' \ -e 's|@''REPLACE_VFPRINTF''@|$(REPLACE_VFPRINTF)|g' \ -e 's|@''REPLACE_VPRINTF''@|$(REPLACE_VPRINTF)|g' \ -e 's|@''REPLACE_VSNPRINTF''@|$(REPLACE_VSNPRINTF)|g' \ -e 's|@''REPLACE_VSPRINTF''@|$(REPLACE_VSPRINTF)|g' \ -e 's|@''ASM_SYMBOL_PREFIX''@|$(ASM_SYMBOL_PREFIX)|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 $@ # 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 $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */' && \ sed -e 's|@''GUARD_PREFIX''@|GL_SRCGL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_STRING_H''@|$(NEXT_STRING_H)|g' \ -e 's/@''GNULIB_FFSL''@/$(GNULIB_FFSL)/g' \ -e 's/@''GNULIB_FFSLL''@/$(GNULIB_FFSLL)/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_STRERROR_R''@/$(GNULIB_STRERROR_R)/g' \ -e 's/@''GNULIB_STRSIGNAL''@/$(GNULIB_STRSIGNAL)/g' \ -e 's/@''GNULIB_STRVERSCMP''@/$(GNULIB_STRVERSCMP)/g' \ < $(srcdir)/string.in.h | \ sed -e 's|@''HAVE_FFSL''@|$(HAVE_FFSL)|g' \ -e 's|@''HAVE_FFSLL''@|$(HAVE_FFSLL)|g' \ -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_STRERROR_R''@|$(HAVE_DECL_STRERROR_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_STRCHRNUL''@|$(REPLACE_STRCHRNUL)|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_STRERROR_R''@|$(REPLACE_STRERROR_R)|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 $@ # We need the following in order to create <sys/types.h> when the system # doesn't have one that works with the given compiler. sys/types.h: sys_types.in.h $(top_builddir)/config.status $(AM_V_at)$(MKDIR_P) sys $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ sed -e 's|@''GUARD_PREFIX''@|GL_SRCGL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_SYS_TYPES_H''@|$(NEXT_SYS_TYPES_H)|g' \ -e 's|@''WINDOWS_64_BIT_OFF_T''@|$(WINDOWS_64_BIT_OFF_T)|g' \ < $(srcdir)/sys_types.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 $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(AM_V_GEN)rm -f $@-t $@ && \ { echo '/* DO NOT EDIT! GENERATED AUTOMATICALLY! */'; \ sed -e 's|@''GUARD_PREFIX''@|GL_SRCGL|g' \ -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|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_UNISTD_H''@|$(NEXT_UNISTD_H)|g' \ -e 's|@''WINDOWS_64_BIT_OFF_T''@|$(WINDOWS_64_BIT_OFF_T)|g' \ -e 's/@''GNULIB_CHDIR''@/$(GNULIB_CHDIR)/g' \ -e 's/@''GNULIB_CHOWN''@/$(GNULIB_CHOWN)/g' \ -e 's/@''GNULIB_CLOSE''@/$(GNULIB_CLOSE)/g' \ -e 's/@''GNULIB_DUP''@/$(GNULIB_DUP)/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_FDATASYNC''@/$(GNULIB_FDATASYNC)/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_GROUP_MEMBER''@/$(GNULIB_GROUP_MEMBER)/g' \ -e 's/@''GNULIB_ISATTY''@/$(GNULIB_ISATTY)/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_PIPE''@/$(GNULIB_PIPE)/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_READ''@/$(GNULIB_READ)/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_SETHOSTNAME''@/$(GNULIB_SETHOSTNAME)/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''@/0$(GNULIB_GL_SRCGL_UNISTD_H_GETOPT)/g' \ -e 's/@''GNULIB_UNISTD_H_NONBLOCKING''@/$(GNULIB_UNISTD_H_NONBLOCKING)/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_FDATASYNC''@|$(HAVE_FDATASYNC)|g' \ -e 's|@''HAVE_FSYNC''@|$(HAVE_FSYNC)|g' \ -e 's|@''HAVE_FTRUNCATE''@|$(HAVE_FTRUNCATE)|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_GROUP_MEMBER''@|$(HAVE_GROUP_MEMBER)|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_PIPE''@|$(HAVE_PIPE)|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_SETHOSTNAME''@|$(HAVE_SETHOSTNAME)|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_UNLINKAT''@|$(HAVE_UNLINKAT)|g' \ -e 's|@''HAVE_USLEEP''@|$(HAVE_USLEEP)|g' \ -e 's|@''HAVE_DECL_ENVIRON''@|$(HAVE_DECL_ENVIRON)|g' \ -e 's|@''HAVE_DECL_FCHDIR''@|$(HAVE_DECL_FCHDIR)|g' \ -e 's|@''HAVE_DECL_FDATASYNC''@|$(HAVE_DECL_FDATASYNC)|g' \ -e 's|@''HAVE_DECL_GETDOMAINNAME''@|$(HAVE_DECL_GETDOMAINNAME)|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_DECL_SETHOSTNAME''@|$(HAVE_DECL_SETHOSTNAME)|g' \ -e 's|@''HAVE_DECL_TTYNAME_R''@|$(HAVE_DECL_TTYNAME_R)|g' \ -e 's|@''HAVE_OS_H''@|$(HAVE_OS_H)|g' \ -e 's|@''HAVE_SYS_PARAM_H''@|$(HAVE_SYS_PARAM_H)|g' \ | \ sed -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_FTRUNCATE''@|$(REPLACE_FTRUNCATE)|g' \ -e 's|@''REPLACE_GETCWD''@|$(REPLACE_GETCWD)|g' \ -e 's|@''REPLACE_GETDOMAINNAME''@|$(REPLACE_GETDOMAINNAME)|g' \ -e 's|@''REPLACE_GETDTABLESIZE''@|$(REPLACE_GETDTABLESIZE)|g' \ -e 's|@''REPLACE_GETLOGIN_R''@|$(REPLACE_GETLOGIN_R)|g' \ -e 's|@''REPLACE_GETGROUPS''@|$(REPLACE_GETGROUPS)|g' \ -e 's|@''REPLACE_GETPAGESIZE''@|$(REPLACE_GETPAGESIZE)|g' \ -e 's|@''REPLACE_ISATTY''@|$(REPLACE_ISATTY)|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_READ''@|$(REPLACE_READ)|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 $@ 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: ����������������������������������������������������������������������������������������������������������������������������������������������gss-1.0.3/src/gl/gettext.h��������������������������������������������������������������������������0000644�0000000�0000000�00000010333�12415470504�012226� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Convenience header for conditional use of GNU <libintl.h>. Copyright (C) 1995-1998, 2000-2002, 2004-2006, 2009-2014 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/>. */ #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 && !defined __UCLIBC__) || _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 /* Prefer gnulib's setlocale override over libintl's setlocale override. */ #ifdef GNULIB_defined_setlocale # undef setlocale # define setlocale rpl_setlocale #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 #endif /* _LIBGETTEXT_H */ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gss-1.0.3/src/gl/error.c����������������������������������������������������������������������������0000644�0000000�0000000�00000024417�12415470504�011676� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Error handler for noninteractive utilities Copyright (C) 1990-1998, 2000-2007, 2009-2014 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/>. */ /* Written by David MacKenzie <djm@gnu.ai.mit.edu>. */ #if !_LIBC # include <config.h> #endif #include "error.h" #include <stdarg.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #if !_LIBC && ENABLE_NLS # include "gettext.h" # define _(msgid) gettext (msgid) #endif #ifdef _LIBC # include <libintl.h> # include <stdbool.h> # include <stdint.h> # include <wchar.h> # define mbsrtowcs __mbsrtowcs # define USE_UNLOCKED_IO 0 # define _GL_ATTRIBUTE_FORMAT_PRINTF(a, b) # define _GL_ARG_NONNULL(a) #endif #if USE_UNLOCKED_IO # include "unlocked-io.h" #endif #ifndef _ # define _(String) String #endif /* If NULL, error will flush stdout, then print on stderr the program name, a colon and a space. Otherwise, error will call this function without parameters instead. */ void (*error_print_progname) (void); /* This variable is incremented each time 'error' is called. */ unsigned int error_message_count; #ifdef _LIBC /* In the GNU C library, there is a predefined variable for this. */ # define program_name program_invocation_name # include <errno.h> # include <limits.h> # include <libio/libioP.h> /* In GNU libc we want do not want to use the common name 'error' directly. Instead make it a weak alias. */ extern void __error (int status, int errnum, const char *message, ...) __attribute__ ((__format__ (__printf__, 3, 4))); extern void __error_at_line (int status, int errnum, const char *file_name, unsigned int line_number, const char *message, ...) __attribute__ ((__format__ (__printf__, 5, 6))); # define error __error # define error_at_line __error_at_line # include <libio/iolibio.h> # define fflush(s) _IO_fflush (s) # undef putc # define putc(c, fp) _IO_putc (c, fp) # include <bits/libc-lock.h> #else /* not _LIBC */ # include <fcntl.h> # include <unistd.h> # if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ /* Get declarations of the native Windows API functions. */ # define WIN32_LEAN_AND_MEAN # include <windows.h> /* Get _get_osfhandle. */ # include "msvc-nothrow.h" # endif /* The gnulib override of fcntl is not needed in this file. */ # undef fcntl # if !HAVE_DECL_STRERROR_R # ifndef HAVE_DECL_STRERROR_R "this configure-time declaration test was not run" # endif # if STRERROR_R_CHAR_P char *strerror_r (); # else int strerror_r (); # endif # endif /* The calling program should define program_name and set it to the name of the executing program. */ extern char *program_name; # if HAVE_STRERROR_R || defined strerror_r # define __strerror_r strerror_r # endif /* HAVE_STRERROR_R || defined strerror_r */ #endif /* not _LIBC */ #if !_LIBC /* Return non-zero if FD is open. */ static int is_open (int fd) { # if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ /* On native Windows: The initial state of unassigned standard file descriptors is that they are open but point to an INVALID_HANDLE_VALUE. There is no fcntl, and the gnulib replacement fcntl does not support F_GETFL. */ return (HANDLE) _get_osfhandle (fd) != INVALID_HANDLE_VALUE; # else # ifndef F_GETFL # error Please port fcntl to your platform # endif return 0 <= fcntl (fd, F_GETFL); # endif } #endif static void flush_stdout (void) { #if !_LIBC int stdout_fd; # if GNULIB_FREOPEN_SAFER /* Use of gnulib's freopen-safer module normally ensures that fileno (stdout) == 1 whenever stdout is open. */ stdout_fd = STDOUT_FILENO; # else /* POSIX states that fileno (stdout) after fclose is unspecified. But in practice it is not a problem, because stdout is statically allocated and the fd of a FILE stream is stored as a field in its allocated memory. */ stdout_fd = fileno (stdout); # endif /* POSIX states that fflush (stdout) after fclose is unspecified; it is safe in glibc, but not on all other platforms. fflush (NULL) is always defined, but too draconian. */ if (0 <= stdout_fd && is_open (stdout_fd)) #endif fflush (stdout); } static void print_errno_message (int errnum) { char const *s; #if defined HAVE_STRERROR_R || _LIBC char errbuf[1024]; # if _LIBC || STRERROR_R_CHAR_P s = __strerror_r (errnum, errbuf, sizeof errbuf); # else if (__strerror_r (errnum, errbuf, sizeof errbuf) == 0) s = errbuf; else s = 0; # endif #else s = strerror (errnum); #endif #if !_LIBC if (! s) s = _("Unknown system error"); #endif #if _LIBC __fxprintf (NULL, ": %s", s); #else fprintf (stderr, ": %s", s); #endif } static void _GL_ATTRIBUTE_FORMAT_PRINTF (3, 0) _GL_ARG_NONNULL ((3)) error_tail (int status, int errnum, const char *message, va_list args) { #if _LIBC if (_IO_fwide (stderr, 0) > 0) { size_t len = strlen (message) + 1; wchar_t *wmessage = NULL; mbstate_t st; size_t res; const char *tmp; bool use_malloc = false; while (1) { if (__libc_use_alloca (len * sizeof (wchar_t))) wmessage = (wchar_t *) alloca (len * sizeof (wchar_t)); else { if (!use_malloc) wmessage = NULL; wchar_t *p = (wchar_t *) realloc (wmessage, len * sizeof (wchar_t)); if (p == NULL) { free (wmessage); fputws_unlocked (L"out of memory\n", stderr); return; } wmessage = p; use_malloc = true; } memset (&st, '\0', sizeof (st)); tmp = message; res = mbsrtowcs (wmessage, &tmp, len, &st); if (res != len) break; if (__builtin_expect (len >= SIZE_MAX / sizeof (wchar_t) / 2, 0)) { /* This really should not happen if everything is fine. */ res = (size_t) -1; break; } len *= 2; } if (res == (size_t) -1) { /* The string cannot be converted. */ if (use_malloc) { free (wmessage); use_malloc = false; } wmessage = (wchar_t *) L"???"; } __vfwprintf (stderr, wmessage, args); if (use_malloc) free (wmessage); } else #endif vfprintf (stderr, message, args); va_end (args); ++error_message_count; if (errnum) print_errno_message (errnum); #if _LIBC __fxprintf (NULL, "\n"); #else putc ('\n', stderr); #endif fflush (stderr); if (status) exit (status); } /* Print the program name and error message MESSAGE, which is a printf-style format string with optional args. If ERRNUM is nonzero, print its corresponding system error message. Exit with status STATUS if it is nonzero. */ void error (int status, int errnum, const char *message, ...) { va_list args; #if defined _LIBC && defined __libc_ptf_call /* We do not want this call to be cut short by a thread cancellation. Therefore disable cancellation for now. */ int state = PTHREAD_CANCEL_ENABLE; __libc_ptf_call (pthread_setcancelstate, (PTHREAD_CANCEL_DISABLE, &state), 0); #endif flush_stdout (); #ifdef _LIBC _IO_flockfile (stderr); #endif if (error_print_progname) (*error_print_progname) (); else { #if _LIBC __fxprintf (NULL, "%s: ", program_name); #else fprintf (stderr, "%s: ", program_name); #endif } va_start (args, message); error_tail (status, errnum, message, args); #ifdef _LIBC _IO_funlockfile (stderr); # ifdef __libc_ptf_call __libc_ptf_call (pthread_setcancelstate, (state, NULL), 0); # endif #endif } /* Sometimes we want to have at most one error per line. This variable controls whether this mode is selected or not. */ int error_one_per_line; void error_at_line (int status, int errnum, const char *file_name, unsigned int line_number, const char *message, ...) { va_list args; if (error_one_per_line) { static const char *old_file_name; static unsigned int old_line_number; if (old_line_number == line_number && (file_name == old_file_name || (old_file_name != NULL && file_name != NULL && strcmp (old_file_name, file_name) == 0))) /* Simply return and print nothing. */ return; old_file_name = file_name; old_line_number = line_number; } #if defined _LIBC && defined __libc_ptf_call /* We do not want this call to be cut short by a thread cancellation. Therefore disable cancellation for now. */ int state = PTHREAD_CANCEL_ENABLE; __libc_ptf_call (pthread_setcancelstate, (PTHREAD_CANCEL_DISABLE, &state), 0); #endif flush_stdout (); #ifdef _LIBC _IO_flockfile (stderr); #endif if (error_print_progname) (*error_print_progname) (); else { #if _LIBC __fxprintf (NULL, "%s:", program_name); #else fprintf (stderr, "%s:", program_name); #endif } #if _LIBC __fxprintf (NULL, file_name != NULL ? "%s:%d: " : " ", file_name, line_number); #else fprintf (stderr, file_name != NULL ? "%s:%d: " : " ", file_name, line_number); #endif va_start (args, message); error_tail (status, errnum, message, args); #ifdef _LIBC _IO_funlockfile (stderr); # ifdef __libc_ptf_call __libc_ptf_call (pthread_setcancelstate, (state, NULL), 0); # endif #endif } #ifdef _LIBC /* Make the weak alias. */ # undef error # undef error_at_line weak_alias (__error, error) weak_alias (__error_at_line, error_at_line) #endif �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gss-1.0.3/src/gl/m4/��������������������������������������������������������������������������������0000755�0000000�0000000�00000000000�12415510376�010773� 5����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������gss-1.0.3/src/gl/m4/off_t.m4������������������������������������������������������������������������0000644�0000000�0000000�00000001006�12415470504�012245� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# off_t.m4 serial 1 dnl Copyright (C) 2012-2014 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 Check whether to override the 'off_t' type. dnl Set WINDOWS_64_BIT_OFF_T. AC_DEFUN([gl_TYPE_OFF_T], [ m4_ifdef([gl_LARGEFILE], [ AC_REQUIRE([gl_LARGEFILE]) ], [ WINDOWS_64_BIT_OFF_T=0 ]) AC_SUBST([WINDOWS_64_BIT_OFF_T]) ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gss-1.0.3/src/gl/m4/msvc-inval.m4�������������������������������������������������������������������0000644�0000000�0000000�00000001334�12415470504�013233� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# msvc-inval.m4 serial 1 dnl Copyright (C) 2011-2014 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_MSVC_INVAL], [ AC_CHECK_FUNCS_ONCE([_set_invalid_parameter_handler]) if test $ac_cv_func__set_invalid_parameter_handler = yes; then HAVE_MSVC_INVALID_PARAMETER_HANDLER=1 AC_DEFINE([HAVE_MSVC_INVALID_PARAMETER_HANDLER], [1], [Define to 1 on MSVC platforms that have the "invalid parameter handler" concept.]) else HAVE_MSVC_INVALID_PARAMETER_HANDLER=0 fi AC_SUBST([HAVE_MSVC_INVALID_PARAMETER_HANDLER]) ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gss-1.0.3/src/gl/m4/sys_types_h.m4������������������������������������������������������������������0000644�0000000�0000000�00000001217�12415470504�013525� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# sys_types_h.m4 serial 5 dnl Copyright (C) 2011-2014 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_ONCE([gl_SYS_TYPES_H], [ AC_REQUIRE([gl_SYS_TYPES_H_DEFAULTS]) gl_NEXT_HEADERS([sys/types.h]) dnl Ensure the type pid_t gets defined. AC_REQUIRE([AC_TYPE_PID_T]) dnl Ensure the type mode_t gets defined. AC_REQUIRE([AC_TYPE_MODE_T]) dnl Whether to override the 'off_t' type. AC_REQUIRE([gl_TYPE_OFF_T]) ]) AC_DEFUN([gl_SYS_TYPES_H_DEFAULTS], [ ]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gss-1.0.3/src/gl/m4/mmap-anon.m4��������������������������������������������������������������������0000644�0000000�0000000�00000003733�12415470504�013044� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# mmap-anon.m4 serial 10 dnl Copyright (C) 2005, 2007, 2009-2014 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. # Detect how mmap can be used to create anonymous (not file-backed) memory # mappings. # - On Linux, AIX, OSF/1, Solaris, Cygwin, Interix, Haiku, both MAP_ANONYMOUS # and MAP_ANON exist and have the same value. # - On HP-UX, only MAP_ANONYMOUS exists. # - On Mac OS X, FreeBSD, NetBSD, OpenBSD, only MAP_ANON exists. # - On IRIX, neither exists, and a file descriptor opened to /dev/zero must be # used. AC_DEFUN([gl_FUNC_MMAP_ANON], [ dnl Persuade glibc <sys/mman.h> to define MAP_ANONYMOUS. AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) # Check for mmap(). Don't use AC_FUNC_MMAP, because it checks too much: it # fails on HP-UX 11, because MAP_FIXED mappings do not work. But this is # irrelevant for anonymous mappings. AC_CHECK_FUNC([mmap], [gl_have_mmap=yes], [gl_have_mmap=no]) # Try to allow MAP_ANONYMOUS. gl_have_mmap_anonymous=no if test $gl_have_mmap = yes; then AC_MSG_CHECKING([for MAP_ANONYMOUS]) AC_EGREP_CPP([I cannot identify this map], [ #include <sys/mman.h> #ifdef MAP_ANONYMOUS I cannot identify this map #endif ], [gl_have_mmap_anonymous=yes]) if test $gl_have_mmap_anonymous != yes; then AC_EGREP_CPP([I cannot identify this map], [ #include <sys/mman.h> #ifdef MAP_ANON I cannot identify this map #endif ], [AC_DEFINE([MAP_ANONYMOUS], [MAP_ANON], [Define to a substitute value for mmap()'s MAP_ANONYMOUS flag.]) gl_have_mmap_anonymous=yes]) fi AC_MSG_RESULT([$gl_have_mmap_anonymous]) if test $gl_have_mmap_anonymous = yes; then AC_DEFINE([HAVE_MAP_ANONYMOUS], [1], [Define to 1 if mmap()'s MAP_ANONYMOUS flag is available after including config.h and <sys/mman.h>.]) fi fi ]) �������������������������������������gss-1.0.3/src/gl/m4/memchr.m4�����������������������������������������������������������������������0000644�0000000�0000000�00000005340�12415470504�012430� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# memchr.m4 serial 12 dnl Copyright (C) 2002-2004, 2009-2014 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_ONCE([gl_FUNC_MEMCHR], [ dnl Check for prerequisites for memory fence checks. gl_FUNC_MMAP_ANON AC_CHECK_HEADERS_ONCE([sys/mman.h]) AC_CHECK_FUNCS_ONCE([mprotect]) AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS]) m4_ifdef([gl_FUNC_MEMCHR_OBSOLETE], [ dnl These days, we assume memchr is present. But if support for old dnl platforms is desired: AC_CHECK_FUNCS_ONCE([memchr]) if test $ac_cv_func_memchr = no; then HAVE_MEMCHR=0 fi ]) if test $HAVE_MEMCHR = 1; then # Detect platform-specific bugs in some versions of glibc: # memchr should not dereference anything with length 0 # http://bugzilla.redhat.com/499689 # memchr should not dereference overestimated length after a match # http://bugs.debian.org/cgi-bin/bugreport.cgi?bug=521737 # http://sourceware.org/bugzilla/show_bug.cgi?id=10162 # Assume that memchr works on platforms that lack mprotect. AC_CACHE_CHECK([whether memchr works], [gl_cv_func_memchr_works], [AC_RUN_IFELSE([AC_LANG_PROGRAM([[ #include <string.h> #if HAVE_SYS_MMAN_H # include <fcntl.h> # include <unistd.h> # include <sys/types.h> # include <sys/mman.h> # ifndef MAP_FILE # define MAP_FILE 0 # endif #endif ]], [[ int result = 0; char *fence = NULL; #if HAVE_SYS_MMAN_H && HAVE_MPROTECT # if HAVE_MAP_ANONYMOUS const int flags = MAP_ANONYMOUS | MAP_PRIVATE; const int fd = -1; # else /* !HAVE_MAP_ANONYMOUS */ const int flags = MAP_FILE | MAP_PRIVATE; int fd = open ("/dev/zero", O_RDONLY, 0666); if (fd >= 0) # endif { int pagesize = getpagesize (); char *two_pages = (char *) mmap (NULL, 2 * pagesize, PROT_READ | PROT_WRITE, flags, fd, 0); if (two_pages != (char *)(-1) && mprotect (two_pages + pagesize, pagesize, PROT_NONE) == 0) fence = two_pages + pagesize; } #endif if (fence) { if (memchr (fence, 0, 0)) result |= 1; strcpy (fence - 9, "12345678"); if (memchr (fence - 9, 0, 79) != fence - 1) result |= 2; if (memchr (fence - 1, 0, 3) != fence - 1) result |= 4; } return result; ]])], [gl_cv_func_memchr_works=yes], [gl_cv_func_memchr_works=no], [dnl Be pessimistic for now. gl_cv_func_memchr_works="guessing no"])]) if test "$gl_cv_func_memchr_works" != yes; then REPLACE_MEMCHR=1 fi fi ]) # Prerequisites of lib/memchr.c. AC_DEFUN([gl_PREREQ_MEMCHR], [ AC_CHECK_HEADERS([bp-sym.h]) ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gss-1.0.3/src/gl/m4/gnulib-comp.m4������������������������������������������������������������������0000644�0000000�0000000�00000027626�12415470507�013407� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# DO NOT EDIT! GENERATED AUTOMATICALLY! # Copyright (C) 2002-2014 Free Software Foundation, Inc. # # 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 3 of the License, or # (at your option) any later version. # # This 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 file. If not, see <http://www.gnu.org/licenses/>. # # 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 that use version control, 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([srcgl_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([gl_PROG_AR_RANLIB]) # Code from module absolute-header: # Code from module base64: # Code from module errno: # Code from module error: # Code from module extensions: AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) # Code from module extern-inline: # Code from module getopt-gnu: # Code from module getopt-posix: # Code from module gettext-h: # Code from module include_next: # Code from module intprops: # Code from module memchr: # Code from module msvc-inval: # Code from module msvc-nothrow: # Code from module nocrash: # Code from module progname: # Code from module snippet/arg-nonnull: # Code from module snippet/c++defs: # Code from module snippet/warn-on-use: # Code from module ssize_t: # 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 gl_PROG_CC_C99 arranges for this. With older Autoconf gl_PROG_CC_C99 dnl shouldn't hurt, though installers are on their own to set c99 mode. gl_PROG_CC_C99 # Code from module stdbool: # Code from module stddef: # Code from module stdio: # Code from module strerror: # Code from module strerror-override: # Code from module string: # Code from module sys_types: # Code from module unistd: # Code from module verify: # Code from module version-etc: ]) # This macro should be invoked from ./configure.ac, in the section # "Check for header files, types and library functions". AC_DEFUN([srcgl_INIT], [ AM_CONDITIONAL([GL_COND_LIBTOOL], [true]) gl_cond_libtool=true gl_m4_base='src/gl/m4' m4_pushdef([AC_LIBOBJ], m4_defn([srcgl_LIBOBJ])) m4_pushdef([AC_REPLACE_FUNCS], m4_defn([srcgl_REPLACE_FUNCS])) m4_pushdef([AC_LIBSOURCES], m4_defn([srcgl_LIBSOURCES])) m4_pushdef([srcgl_LIBSOURCES_LIST], []) m4_pushdef([srcgl_LIBSOURCES_DIR], []) gl_COMMON gl_source_base='src/gl' gl_FUNC_BASE64 gl_HEADER_ERRNO_H gl_ERROR if test $ac_cv_lib_error_at_line = no; then AC_LIBOBJ([error]) gl_PREREQ_ERROR fi m4_ifdef([AM_XGETTEXT_OPTION], [AM_][XGETTEXT_OPTION([--flag=error:3:c-format]) AM_][XGETTEXT_OPTION([--flag=error_at_line:5:c-format])]) AC_REQUIRE([gl_EXTERN_INLINE]) gl_FUNC_GETOPT_GNU if test $REPLACE_GETOPT = 1; then AC_LIBOBJ([getopt]) AC_LIBOBJ([getopt1]) gl_PREREQ_GETOPT dnl Arrange for unistd.h to include getopt.h. GNULIB_GL_SRCGL_UNISTD_H_GETOPT=1 fi AC_SUBST([GNULIB_GL_SRCGL_UNISTD_H_GETOPT]) gl_MODULE_INDICATOR_FOR_TESTS([getopt-gnu]) gl_FUNC_GETOPT_POSIX if test $REPLACE_GETOPT = 1; then AC_LIBOBJ([getopt]) AC_LIBOBJ([getopt1]) gl_PREREQ_GETOPT dnl Arrange for unistd.h to include getopt.h. GNULIB_GL_SRCGL_UNISTD_H_GETOPT=1 fi AC_SUBST([GNULIB_GL_SRCGL_UNISTD_H_GETOPT]) AC_SUBST([LIBINTL]) AC_SUBST([LTLIBINTL]) gl_FUNC_MEMCHR if test $HAVE_MEMCHR = 0 || test $REPLACE_MEMCHR = 1; then AC_LIBOBJ([memchr]) gl_PREREQ_MEMCHR fi gl_STRING_MODULE_INDICATOR([memchr]) gl_MSVC_INVAL if test $HAVE_MSVC_INVALID_PARAMETER_HANDLER = 1; then AC_LIBOBJ([msvc-inval]) fi gl_MSVC_NOTHROW if test $HAVE_MSVC_INVALID_PARAMETER_HANDLER = 1; then AC_LIBOBJ([msvc-nothrow]) fi AC_CHECK_DECLS([program_invocation_name], [], [], [#include <errno.h>]) AC_CHECK_DECLS([program_invocation_short_name], [], [], [#include <errno.h>]) gt_TYPE_SSIZE_T gl_STDARG_H AM_STDBOOL_H gl_STDDEF_H gl_STDIO_H gl_FUNC_STRERROR if test $REPLACE_STRERROR = 1; then AC_LIBOBJ([strerror]) fi gl_MODULE_INDICATOR([strerror]) gl_STRING_MODULE_INDICATOR([strerror]) AC_REQUIRE([gl_HEADER_ERRNO_H]) AC_REQUIRE([gl_FUNC_STRERROR_0]) if test -n "$ERRNO_H" || test $REPLACE_STRERROR_0 = 1; then AC_LIBOBJ([strerror-override]) gl_PREREQ_SYS_H_WINSOCK2 fi gl_HEADER_STRING_H gl_SYS_TYPES_H AC_PROG_MKDIR_P gl_UNISTD_H gl_VERSION_ETC # End of code from modules m4_ifval(srcgl_LIBSOURCES_LIST, [ m4_syscmd([test ! -d ]m4_defn([srcgl_LIBSOURCES_DIR])[ || for gl_file in ]srcgl_LIBSOURCES_LIST[ ; do if test ! -r ]m4_defn([srcgl_LIBSOURCES_DIR])[/$gl_file ; then echo "missing file ]m4_defn([srcgl_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([srcgl_LIBSOURCES_DIR]) m4_popdef([srcgl_LIBSOURCES_LIST]) m4_popdef([AC_LIBSOURCES]) m4_popdef([AC_REPLACE_FUNCS]) m4_popdef([AC_LIBOBJ]) AC_CONFIG_COMMANDS_PRE([ srcgl_libobjs= srcgl_ltlibobjs= if test -n "$srcgl_LIBOBJS"; then # Remove the extension. sed_drop_objext='s/\.o$//;s/\.obj$//' for i in `for i in $srcgl_LIBOBJS; do echo "$i"; done | sed -e "$sed_drop_objext" | sort | uniq`; do srcgl_libobjs="$srcgl_libobjs $i.$ac_objext" srcgl_ltlibobjs="$srcgl_ltlibobjs $i.lo" done fi AC_SUBST([srcgl_LIBOBJS], [$srcgl_libobjs]) AC_SUBST([srcgl_LTLIBOBJS], [$srcgl_ltlibobjs]) ]) gltests_libdeps= gltests_ltlibdeps= m4_pushdef([AC_LIBOBJ], m4_defn([srcgltests_LIBOBJ])) m4_pushdef([AC_REPLACE_FUNCS], m4_defn([srcgltests_REPLACE_FUNCS])) m4_pushdef([AC_LIBSOURCES], m4_defn([srcgltests_LIBSOURCES])) m4_pushdef([srcgltests_LIBSOURCES_LIST], []) m4_pushdef([srcgltests_LIBSOURCES_DIR], []) gl_COMMON gl_source_base='src/gl/tests' changequote(,)dnl srcgltests_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([srcgltests_WITNESS]) gl_module_indicator_condition=$srcgltests_WITNESS m4_pushdef([gl_MODULE_INDICATOR_CONDITION], [$gl_module_indicator_condition]) m4_popdef([gl_MODULE_INDICATOR_CONDITION]) m4_ifval(srcgltests_LIBSOURCES_LIST, [ m4_syscmd([test ! -d ]m4_defn([srcgltests_LIBSOURCES_DIR])[ || for gl_file in ]srcgltests_LIBSOURCES_LIST[ ; do if test ! -r ]m4_defn([srcgltests_LIBSOURCES_DIR])[/$gl_file ; then echo "missing file ]m4_defn([srcgltests_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([srcgltests_LIBSOURCES_DIR]) m4_popdef([srcgltests_LIBSOURCES_LIST]) m4_popdef([AC_LIBSOURCES]) m4_popdef([AC_REPLACE_FUNCS]) m4_popdef([AC_LIBOBJ]) AC_CONFIG_COMMANDS_PRE([ srcgltests_libobjs= srcgltests_ltlibobjs= if test -n "$srcgltests_LIBOBJS"; then # Remove the extension. sed_drop_objext='s/\.o$//;s/\.obj$//' for i in `for i in $srcgltests_LIBOBJS; do echo "$i"; done | sed -e "$sed_drop_objext" | sort | uniq`; do srcgltests_libobjs="$srcgltests_libobjs $i.$ac_objext" srcgltests_ltlibobjs="$srcgltests_ltlibobjs $i.lo" done fi AC_SUBST([srcgltests_LIBOBJS], [$srcgltests_libobjs]) AC_SUBST([srcgltests_LTLIBOBJS], [$srcgltests_ltlibobjs]) ]) ]) # Like AC_LIBOBJ, except that the module name goes # into srcgl_LIBOBJS instead of into LIBOBJS. AC_DEFUN([srcgl_LIBOBJ], [ AS_LITERAL_IF([$1], [srcgl_LIBSOURCES([$1.c])])dnl srcgl_LIBOBJS="$srcgl_LIBOBJS $1.$ac_objext" ]) # Like AC_REPLACE_FUNCS, except that the module name goes # into srcgl_LIBOBJS instead of into LIBOBJS. AC_DEFUN([srcgl_REPLACE_FUNCS], [ m4_foreach_w([gl_NAME], [$1], [AC_LIBSOURCES(gl_NAME[.c])])dnl AC_CHECK_FUNCS([$1], , [srcgl_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([srcgl_LIBSOURCES], [ m4_foreach([_gl_NAME], [$1], [ m4_if(_gl_NAME, [alloca.c], [], [ m4_define([srcgl_LIBSOURCES_DIR], [src/gl]) m4_append([srcgl_LIBSOURCES_LIST], _gl_NAME, [ ]) ]) ]) ]) # Like AC_LIBOBJ, except that the module name goes # into srcgltests_LIBOBJS instead of into LIBOBJS. AC_DEFUN([srcgltests_LIBOBJ], [ AS_LITERAL_IF([$1], [srcgltests_LIBSOURCES([$1.c])])dnl srcgltests_LIBOBJS="$srcgltests_LIBOBJS $1.$ac_objext" ]) # Like AC_REPLACE_FUNCS, except that the module name goes # into srcgltests_LIBOBJS instead of into LIBOBJS. AC_DEFUN([srcgltests_REPLACE_FUNCS], [ m4_foreach_w([gl_NAME], [$1], [AC_LIBSOURCES(gl_NAME[.c])])dnl AC_CHECK_FUNCS([$1], , [srcgltests_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([srcgltests_LIBSOURCES], [ m4_foreach([_gl_NAME], [$1], [ m4_if(_gl_NAME, [alloca.c], [], [ m4_define([srcgltests_LIBSOURCES_DIR], [src/gl/tests]) m4_append([srcgltests_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([srcgl_FILE_LIST], [ build-aux/snippet/arg-nonnull.h build-aux/snippet/c++defs.h build-aux/snippet/warn-on-use.h lib/base64.c lib/base64.h lib/errno.in.h lib/error.c lib/error.h lib/getopt.c lib/getopt.in.h lib/getopt1.c lib/getopt_int.h lib/gettext.h lib/intprops.h lib/memchr.c lib/memchr.valgrind lib/msvc-inval.c lib/msvc-inval.h lib/msvc-nothrow.c lib/msvc-nothrow.h lib/progname.c lib/progname.h lib/stdarg.in.h lib/stdbool.in.h lib/stddef.in.h lib/stdio.in.h lib/strerror-override.c lib/strerror-override.h lib/strerror.c lib/string.in.h lib/sys_types.in.h lib/unistd.c lib/unistd.in.h lib/verify.h lib/version-etc.c lib/version-etc.h m4/00gnulib.m4 m4/absolute-header.m4 m4/base64.m4 m4/errno_h.m4 m4/error.m4 m4/extensions.m4 m4/extern-inline.m4 m4/getopt.m4 m4/gnulib-common.m4 m4/include_next.m4 m4/memchr.m4 m4/mmap-anon.m4 m4/msvc-inval.m4 m4/msvc-nothrow.m4 m4/nocrash.m4 m4/off_t.m4 m4/ssize_t.m4 m4/stdarg.m4 m4/stdbool.m4 m4/stddef_h.m4 m4/stdio_h.m4 m4/strerror.m4 m4/string_h.m4 m4/sys_socket_h.m4 m4/sys_types_h.m4 m4/unistd_h.m4 m4/version-etc.m4 m4/warn-on-use.m4 m4/wchar_t.m4 ]) ����������������������������������������������������������������������������������������������������������gss-1.0.3/src/gl/m4/error.m4������������������������������������������������������������������������0000644�0000000�0000000�00000001510�12415470504�012301� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#serial 14 # Copyright (C) 1996-1998, 2001-2004, 2009-2014 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. AC_DEFUN([gl_ERROR], [ dnl We don't use AC_FUNC_ERROR_AT_LINE any more, because it is no longer dnl maintained in Autoconf and because it invokes AC_LIBOBJ. AC_CACHE_CHECK([for error_at_line], [ac_cv_lib_error_at_line], [AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include <error.h>]], [[error_at_line (0, 0, "", 0, "an error occurred");]])], [ac_cv_lib_error_at_line=yes], [ac_cv_lib_error_at_line=no])]) ]) # Prerequisites of lib/error.c. AC_DEFUN([gl_PREREQ_ERROR], [ AC_REQUIRE([AC_FUNC_STRERROR_R]) : ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gss-1.0.3/src/gl/m4/errno_h.m4����������������������������������������������������������������������0000644�0000000�0000000�00000006234�12415470504�012614� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# errno_h.m4 serial 12 dnl Copyright (C) 2004, 2006, 2008-2014 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_ONCE([gl_HEADER_ERRNO_H], [ AC_REQUIRE([AC_PROG_CC]) AC_CACHE_CHECK([for complete errno.h], [gl_cv_header_errno_h_complete], [ AC_EGREP_CPP([booboo],[ #include <errno.h> #if !defined ETXTBSY booboo #endif #if !defined ENOMSG booboo #endif #if !defined EIDRM booboo #endif #if !defined ENOLINK booboo #endif #if !defined EPROTO booboo #endif #if !defined EMULTIHOP booboo #endif #if !defined EBADMSG booboo #endif #if !defined EOVERFLOW booboo #endif #if !defined ENOTSUP booboo #endif #if !defined ENETRESET booboo #endif #if !defined ECONNABORTED booboo #endif #if !defined ESTALE booboo #endif #if !defined EDQUOT booboo #endif #if !defined ECANCELED booboo #endif #if !defined EOWNERDEAD booboo #endif #if !defined ENOTRECOVERABLE booboo #endif #if !defined EILSEQ booboo #endif ], [gl_cv_header_errno_h_complete=no], [gl_cv_header_errno_h_complete=yes]) ]) if test $gl_cv_header_errno_h_complete = yes; then ERRNO_H='' else gl_NEXT_HEADERS([errno.h]) ERRNO_H='errno.h' fi AC_SUBST([ERRNO_H]) AM_CONDITIONAL([GL_GENERATE_ERRNO_H], [test -n "$ERRNO_H"]) gl_REPLACE_ERRNO_VALUE([EMULTIHOP]) gl_REPLACE_ERRNO_VALUE([ENOLINK]) gl_REPLACE_ERRNO_VALUE([EOVERFLOW]) ]) # Assuming $1 = EOVERFLOW. # The EOVERFLOW errno value ought to be defined in <errno.h>, according to # POSIX. But some systems (like OpenBSD 4.0 or AIX 3) don't define it, and # some systems (like OSF/1) define it when _XOPEN_SOURCE_EXTENDED is defined. # Check for the value of EOVERFLOW. # Set the variables EOVERFLOW_HIDDEN and EOVERFLOW_VALUE. AC_DEFUN([gl_REPLACE_ERRNO_VALUE], [ if test -n "$ERRNO_H"; then AC_CACHE_CHECK([for ]$1[ value], [gl_cv_header_errno_h_]$1, [ AC_EGREP_CPP([yes],[ #include <errno.h> #ifdef ]$1[ yes #endif ], [gl_cv_header_errno_h_]$1[=yes], [gl_cv_header_errno_h_]$1[=no]) if test $gl_cv_header_errno_h_]$1[ = no; then AC_EGREP_CPP([yes],[ #define _XOPEN_SOURCE_EXTENDED 1 #include <errno.h> #ifdef ]$1[ yes #endif ], [gl_cv_header_errno_h_]$1[=hidden]) if test $gl_cv_header_errno_h_]$1[ = hidden; then dnl The macro exists but is hidden. dnl Define it to the same value. AC_COMPUTE_INT([gl_cv_header_errno_h_]$1, $1, [ #define _XOPEN_SOURCE_EXTENDED 1 #include <errno.h> /* The following two lines are a workaround against an autoconf-2.52 bug. */ #include <stdio.h> #include <stdlib.h> ]) fi fi ]) case $gl_cv_header_errno_h_]$1[ in yes | no) ]$1[_HIDDEN=0; ]$1[_VALUE= ;; *) ]$1[_HIDDEN=1; ]$1[_VALUE="$gl_cv_header_errno_h_]$1[" ;; esac AC_SUBST($1[_HIDDEN]) AC_SUBST($1[_VALUE]) fi ]) 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])]) ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gss-1.0.3/src/gl/m4/gnulib-cache.m4�����������������������������������������������������������������0000644�0000000�0000000�00000003752�12415470506�013505� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright (C) 2002-2014 Free Software Foundation, Inc. # # 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 3 of the License, or # (at your option) any later version. # # This 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 file. If not, see <http://www.gnu.org/licenses/>. # # 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 that use version control, this file is meant to be put under # version control, like the configure.ac and various Makefile.am files. # Specification in the form of a command-line invocation: # gnulib-tool --import --dir=. --local-dir=src/gl/override --lib=libgnu --source-base=src/gl --m4-base=src/gl/m4 --doc-base=doc --tests-base=src/gl/tests --aux-dir=build-aux --no-conditional-dependencies --libtool --macro-prefix=srcgl --no-vc-files base64 error getopt-gnu progname version-etc # Specification in the form of a few gnulib-tool.m4 macro invocations: gl_LOCAL_DIR([src/gl/override]) gl_MODULES([ base64 error getopt-gnu progname version-etc ]) gl_AVOID([]) gl_SOURCE_BASE([src/gl]) gl_M4_BASE([src/gl/m4]) gl_PO_BASE([]) gl_DOC_BASE([doc]) gl_TESTS_BASE([src/gl/tests]) gl_LIB([libgnu]) gl_MAKEFILE_NAME([]) gl_LIBTOOL gl_MACRO_PREFIX([srcgl]) gl_PO_DOMAIN([]) gl_WITNESS_C_MACRO([]) gl_VC_FILES([false]) ����������������������gss-1.0.3/src/gl/m4/stdarg.m4�����������������������������������������������������������������������0000644�0000000�0000000�00000005404�12415470504�012442� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# stdarg.m4 serial 6 dnl Copyright (C) 2006, 2008-2014 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='' NEXT_STDARG_H='<stdarg.h>' AC_MSG_CHECKING([for va_copy]) AC_CACHE_VAL([gl_cv_func_va_copy], [ AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#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_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_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#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 AC_SUBST([STDARG_H]) AM_CONDITIONAL([GL_GENERATE_STDARG_H], [test -n "$STDARG_H"]) AC_SUBST([NEXT_STDARG_H]) ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gss-1.0.3/src/gl/m4/stdbool.m4����������������������������������������������������������������������0000644�0000000�0000000�00000006371�12415470504�012630� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Check for stdbool.h that conforms to C99. dnl Copyright (C) 2002-2006, 2009-2014 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. #serial 5 # Prepare for substituting <stdbool.h> if it is not supported. AC_DEFUN([AM_STDBOOL_H], [ AC_REQUIRE([AC_CHECK_HEADER_STDBOOL]) # Define two additional variables used in the Makefile substitution. if test "$ac_cv_header_stdbool_h" = yes; then STDBOOL_H='' else STDBOOL_H='stdbool.h' fi AC_SUBST([STDBOOL_H]) AM_CONDITIONAL([GL_GENERATE_STDBOOL_H], [test -n "$STDBOOL_H"]) if test "$ac_cv_type__Bool" = yes; then HAVE__BOOL=1 else HAVE__BOOL=0 fi AC_SUBST([HAVE__BOOL]) ]) # AM_STDBOOL_H will be renamed to gl_STDBOOL_H in the future. AC_DEFUN([gl_STDBOOL_H], [AM_STDBOOL_H]) # This version of the macro is needed in autoconf <= 2.68. AC_DEFUN([AC_CHECK_HEADER_STDBOOL], [AC_CACHE_CHECK([for stdbool.h that conforms to C99], [ac_cv_header_stdbool_h], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[ #include <stdbool.h> #ifndef bool "error: bool is not defined" #endif #ifndef false "error: false is not defined" #endif #if false "error: false is not 0" #endif #ifndef true "error: true is not defined" #endif #if true != 1 "error: true is not 1" #endif #ifndef __bool_true_false_are_defined "error: __bool_true_false_are_defined is not defined" #endif struct s { _Bool s: 1; _Bool t; } s; char a[true == 1 ? 1 : -1]; char b[false == 0 ? 1 : -1]; char c[__bool_true_false_are_defined == 1 ? 1 : -1]; char d[(bool) 0.5 == true ? 1 : -1]; /* See body of main program for 'e'. */ char f[(_Bool) 0.0 == false ? 1 : -1]; char g[true]; char h[sizeof (_Bool)]; char i[sizeof s.t]; enum { j = false, k = true, l = false * true, m = true * 256 }; /* The following fails for HP aC++/ANSI C B3910B A.05.55 [Dec 04 2003]. */ _Bool n[m]; char o[sizeof n == m * sizeof n[0] ? 1 : -1]; char p[-1 - (_Bool) 0 < 0 && -1 - (bool) 0 < 0 ? 1 : -1]; /* Catch a bug in an HP-UX C compiler. See http://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html http://lists.gnu.org/archive/html/bug-coreutils/2005-11/msg00161.html */ _Bool q = true; _Bool *pq = &q; ]], [[ bool e = &s; *pq |= q; *pq |= ! q; /* Refer to every declared value, to avoid compiler optimizations. */ return (!a + !b + !c + !d + !e + !f + !g + !h + !i + !!j + !k + !!l + !m + !n + !o + !p + !q + !pq); ]])], [ac_cv_header_stdbool_h=yes], [ac_cv_header_stdbool_h=no])]) AC_CHECK_TYPES([_Bool]) ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gss-1.0.3/src/gl/m4/strerror.m4���������������������������������������������������������������������0000644�0000000�0000000�00000006236�12415470504�013044� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# strerror.m4 serial 17 dnl Copyright (C) 2002, 2007-2014 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_STRERROR], [ AC_REQUIRE([gl_HEADER_STRING_H_DEFAULTS]) AC_REQUIRE([gl_HEADER_ERRNO_H]) AC_REQUIRE([gl_FUNC_STRERROR_0]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles m4_ifdef([gl_FUNC_STRERROR_R_WORKS], [ AC_REQUIRE([gl_FUNC_STRERROR_R_WORKS]) ]) if test "$ERRNO_H:$REPLACE_STRERROR_0" = :0; then AC_CACHE_CHECK([for working strerror function], [gl_cv_func_working_strerror], [AC_RUN_IFELSE( [AC_LANG_PROGRAM( [[#include <string.h> ]], [[if (!*strerror (-2)) return 1;]])], [gl_cv_func_working_strerror=yes], [gl_cv_func_working_strerror=no], [case "$host_os" in # Guess yes on glibc systems. *-gnu*) gl_cv_func_working_strerror="guessing yes" ;; # If we don't know, assume the worst. *) gl_cv_func_working_strerror="guessing no" ;; esac ]) ]) case "$gl_cv_func_working_strerror" in *yes) ;; *) dnl The system's strerror() fails to return a string for out-of-range dnl integers. Replace it. REPLACE_STRERROR=1 ;; esac m4_ifdef([gl_FUNC_STRERROR_R_WORKS], [ dnl If the system's strerror_r or __xpg_strerror_r clobbers strerror's dnl buffer, we must replace strerror. case "$gl_cv_func_strerror_r_works" in *no) REPLACE_STRERROR=1 ;; esac ]) else dnl The system's strerror() cannot know about the new errno values we add dnl to <errno.h>, or any fix for strerror(0). Replace it. REPLACE_STRERROR=1 fi ]) dnl Detect if strerror(0) passes (that is, does not set errno, and does not dnl return a string that matches strerror(-1)). AC_DEFUN([gl_FUNC_STRERROR_0], [ AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles REPLACE_STRERROR_0=0 AC_CACHE_CHECK([whether strerror(0) succeeds], [gl_cv_func_strerror_0_works], [AC_RUN_IFELSE( [AC_LANG_PROGRAM( [[#include <string.h> #include <errno.h> ]], [[int result = 0; char *str; errno = 0; str = strerror (0); if (!*str) result |= 1; if (errno) result |= 2; if (strstr (str, "nknown") || strstr (str, "ndefined")) result |= 4; return result;]])], [gl_cv_func_strerror_0_works=yes], [gl_cv_func_strerror_0_works=no], [case "$host_os" in # Guess yes on glibc systems. *-gnu*) gl_cv_func_strerror_0_works="guessing yes" ;; # If we don't know, assume the worst. *) gl_cv_func_strerror_0_works="guessing no" ;; esac ]) ]) case "$gl_cv_func_strerror_0_works" in *yes) ;; *) REPLACE_STRERROR_0=1 AC_DEFINE([REPLACE_STRERROR_0], [1], [Define to 1 if strerror(0) does not return a message implying success.]) ;; esac ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gss-1.0.3/src/gl/m4/stdio_h.m4����������������������������������������������������������������������0000644�0000000�0000000�00000022433�12415470504�012610� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# stdio_h.m4 serial 43 dnl Copyright (C) 2007-2014 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_STDIO_H], [ AC_REQUIRE([gl_STDIO_H_DEFAULTS]) gl_NEXT_HEADERS([stdio.h]) dnl No need to create extra modules for these functions. Everyone who uses dnl <stdio.h> likely needs them. GNULIB_FSCANF=1 gl_MODULE_INDICATOR([fscanf]) GNULIB_SCANF=1 gl_MODULE_INDICATOR([scanf]) GNULIB_FGETC=1 GNULIB_GETC=1 GNULIB_GETCHAR=1 GNULIB_FGETS=1 GNULIB_FREAD=1 dnl This ifdef is necessary to avoid an error "missing file lib/stdio-read.c" dnl "expected source file, required through AC_LIBSOURCES, not found". It is dnl also an optimization, to avoid performing a configure check whose result dnl is not used. But it does not make the test of GNULIB_STDIO_H_NONBLOCKING dnl or GNULIB_NONBLOCKING redundant. m4_ifdef([gl_NONBLOCKING_IO], [ gl_NONBLOCKING_IO if test $gl_cv_have_nonblocking != yes; then REPLACE_STDIO_READ_FUNCS=1 AC_LIBOBJ([stdio-read]) fi ]) dnl No need to create extra modules for these functions. Everyone who uses dnl <stdio.h> likely needs them. GNULIB_FPRINTF=1 GNULIB_PRINTF=1 GNULIB_VFPRINTF=1 GNULIB_VPRINTF=1 GNULIB_FPUTC=1 GNULIB_PUTC=1 GNULIB_PUTCHAR=1 GNULIB_FPUTS=1 GNULIB_PUTS=1 GNULIB_FWRITE=1 dnl This ifdef is necessary to avoid an error "missing file lib/stdio-write.c" dnl "expected source file, required through AC_LIBSOURCES, not found". It is dnl also an optimization, to avoid performing a configure check whose result dnl is not used. But it does not make the test of GNULIB_STDIO_H_SIGPIPE or dnl GNULIB_SIGPIPE redundant. m4_ifdef([gl_SIGNAL_SIGPIPE], [ gl_SIGNAL_SIGPIPE if test $gl_cv_header_signal_h_SIGPIPE != yes; then REPLACE_STDIO_WRITE_FUNCS=1 AC_LIBOBJ([stdio-write]) fi ]) dnl This ifdef is necessary to avoid an error "missing file lib/stdio-write.c" dnl "expected source file, required through AC_LIBSOURCES, not found". It is dnl also an optimization, to avoid performing a configure check whose result dnl is not used. But it does not make the test of GNULIB_STDIO_H_NONBLOCKING dnl or GNULIB_NONBLOCKING redundant. m4_ifdef([gl_NONBLOCKING_IO], [ gl_NONBLOCKING_IO if test $gl_cv_have_nonblocking != yes; then REPLACE_STDIO_WRITE_FUNCS=1 AC_LIBOBJ([stdio-write]) fi ]) 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 both C89 and C11. gl_WARN_ON_USE_PREPARE([[#include <stdio.h> ]], [dprintf fpurge fseeko ftello getdelim getline gets pclose popen renameat snprintf tmpfile vdprintf vsnprintf]) ]) AC_DEFUN([gl_STDIO_MODULE_INDICATOR], [ dnl Use AC_REQUIRE here, so that the default settings are expanded once only. AC_REQUIRE([gl_STDIO_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_STDIO_H_DEFAULTS], [ GNULIB_DPRINTF=0; AC_SUBST([GNULIB_DPRINTF]) GNULIB_FCLOSE=0; AC_SUBST([GNULIB_FCLOSE]) GNULIB_FDOPEN=0; AC_SUBST([GNULIB_FDOPEN]) GNULIB_FFLUSH=0; AC_SUBST([GNULIB_FFLUSH]) GNULIB_FGETC=0; AC_SUBST([GNULIB_FGETC]) GNULIB_FGETS=0; AC_SUBST([GNULIB_FGETS]) GNULIB_FOPEN=0; AC_SUBST([GNULIB_FOPEN]) GNULIB_FPRINTF=0; AC_SUBST([GNULIB_FPRINTF]) GNULIB_FPRINTF_POSIX=0; AC_SUBST([GNULIB_FPRINTF_POSIX]) GNULIB_FPURGE=0; AC_SUBST([GNULIB_FPURGE]) GNULIB_FPUTC=0; AC_SUBST([GNULIB_FPUTC]) GNULIB_FPUTS=0; AC_SUBST([GNULIB_FPUTS]) GNULIB_FREAD=0; AC_SUBST([GNULIB_FREAD]) GNULIB_FREOPEN=0; AC_SUBST([GNULIB_FREOPEN]) GNULIB_FSCANF=0; AC_SUBST([GNULIB_FSCANF]) GNULIB_FSEEK=0; AC_SUBST([GNULIB_FSEEK]) GNULIB_FSEEKO=0; AC_SUBST([GNULIB_FSEEKO]) GNULIB_FTELL=0; AC_SUBST([GNULIB_FTELL]) GNULIB_FTELLO=0; AC_SUBST([GNULIB_FTELLO]) GNULIB_FWRITE=0; AC_SUBST([GNULIB_FWRITE]) GNULIB_GETC=0; AC_SUBST([GNULIB_GETC]) GNULIB_GETCHAR=0; AC_SUBST([GNULIB_GETCHAR]) GNULIB_GETDELIM=0; AC_SUBST([GNULIB_GETDELIM]) GNULIB_GETLINE=0; AC_SUBST([GNULIB_GETLINE]) GNULIB_OBSTACK_PRINTF=0; AC_SUBST([GNULIB_OBSTACK_PRINTF]) GNULIB_OBSTACK_PRINTF_POSIX=0; AC_SUBST([GNULIB_OBSTACK_PRINTF_POSIX]) GNULIB_PCLOSE=0; AC_SUBST([GNULIB_PCLOSE]) GNULIB_PERROR=0; AC_SUBST([GNULIB_PERROR]) GNULIB_POPEN=0; AC_SUBST([GNULIB_POPEN]) GNULIB_PRINTF=0; AC_SUBST([GNULIB_PRINTF]) GNULIB_PRINTF_POSIX=0; AC_SUBST([GNULIB_PRINTF_POSIX]) GNULIB_PUTC=0; AC_SUBST([GNULIB_PUTC]) GNULIB_PUTCHAR=0; AC_SUBST([GNULIB_PUTCHAR]) GNULIB_PUTS=0; AC_SUBST([GNULIB_PUTS]) GNULIB_REMOVE=0; AC_SUBST([GNULIB_REMOVE]) GNULIB_RENAME=0; AC_SUBST([GNULIB_RENAME]) GNULIB_RENAMEAT=0; AC_SUBST([GNULIB_RENAMEAT]) GNULIB_SCANF=0; AC_SUBST([GNULIB_SCANF]) GNULIB_SNPRINTF=0; AC_SUBST([GNULIB_SNPRINTF]) GNULIB_SPRINTF_POSIX=0; AC_SUBST([GNULIB_SPRINTF_POSIX]) GNULIB_STDIO_H_NONBLOCKING=0; AC_SUBST([GNULIB_STDIO_H_NONBLOCKING]) GNULIB_STDIO_H_SIGPIPE=0; AC_SUBST([GNULIB_STDIO_H_SIGPIPE]) GNULIB_TMPFILE=0; AC_SUBST([GNULIB_TMPFILE]) GNULIB_VASPRINTF=0; AC_SUBST([GNULIB_VASPRINTF]) GNULIB_VFSCANF=0; AC_SUBST([GNULIB_VFSCANF]) GNULIB_VSCANF=0; AC_SUBST([GNULIB_VSCANF]) GNULIB_VDPRINTF=0; AC_SUBST([GNULIB_VDPRINTF]) GNULIB_VFPRINTF=0; AC_SUBST([GNULIB_VFPRINTF]) GNULIB_VFPRINTF_POSIX=0; AC_SUBST([GNULIB_VFPRINTF_POSIX]) GNULIB_VPRINTF=0; AC_SUBST([GNULIB_VPRINTF]) GNULIB_VPRINTF_POSIX=0; AC_SUBST([GNULIB_VPRINTF_POSIX]) GNULIB_VSNPRINTF=0; AC_SUBST([GNULIB_VSNPRINTF]) GNULIB_VSPRINTF_POSIX=0; AC_SUBST([GNULIB_VSPRINTF_POSIX]) dnl Assume proper GNU behavior unless another module says otherwise. HAVE_DECL_FPURGE=1; AC_SUBST([HAVE_DECL_FPURGE]) HAVE_DECL_FSEEKO=1; AC_SUBST([HAVE_DECL_FSEEKO]) HAVE_DECL_FTELLO=1; AC_SUBST([HAVE_DECL_FTELLO]) HAVE_DECL_GETDELIM=1; AC_SUBST([HAVE_DECL_GETDELIM]) HAVE_DECL_GETLINE=1; AC_SUBST([HAVE_DECL_GETLINE]) HAVE_DECL_OBSTACK_PRINTF=1; AC_SUBST([HAVE_DECL_OBSTACK_PRINTF]) HAVE_DECL_SNPRINTF=1; AC_SUBST([HAVE_DECL_SNPRINTF]) HAVE_DECL_VSNPRINTF=1; AC_SUBST([HAVE_DECL_VSNPRINTF]) HAVE_DPRINTF=1; AC_SUBST([HAVE_DPRINTF]) HAVE_FSEEKO=1; AC_SUBST([HAVE_FSEEKO]) HAVE_FTELLO=1; AC_SUBST([HAVE_FTELLO]) HAVE_PCLOSE=1; AC_SUBST([HAVE_PCLOSE]) HAVE_POPEN=1; AC_SUBST([HAVE_POPEN]) HAVE_RENAMEAT=1; AC_SUBST([HAVE_RENAMEAT]) HAVE_VASPRINTF=1; AC_SUBST([HAVE_VASPRINTF]) HAVE_VDPRINTF=1; AC_SUBST([HAVE_VDPRINTF]) REPLACE_DPRINTF=0; AC_SUBST([REPLACE_DPRINTF]) REPLACE_FCLOSE=0; AC_SUBST([REPLACE_FCLOSE]) REPLACE_FDOPEN=0; AC_SUBST([REPLACE_FDOPEN]) REPLACE_FFLUSH=0; AC_SUBST([REPLACE_FFLUSH]) REPLACE_FOPEN=0; AC_SUBST([REPLACE_FOPEN]) REPLACE_FPRINTF=0; AC_SUBST([REPLACE_FPRINTF]) REPLACE_FPURGE=0; AC_SUBST([REPLACE_FPURGE]) REPLACE_FREOPEN=0; AC_SUBST([REPLACE_FREOPEN]) REPLACE_FSEEK=0; AC_SUBST([REPLACE_FSEEK]) REPLACE_FSEEKO=0; AC_SUBST([REPLACE_FSEEKO]) REPLACE_FTELL=0; AC_SUBST([REPLACE_FTELL]) REPLACE_FTELLO=0; AC_SUBST([REPLACE_FTELLO]) REPLACE_GETDELIM=0; AC_SUBST([REPLACE_GETDELIM]) REPLACE_GETLINE=0; AC_SUBST([REPLACE_GETLINE]) REPLACE_OBSTACK_PRINTF=0; AC_SUBST([REPLACE_OBSTACK_PRINTF]) REPLACE_PERROR=0; AC_SUBST([REPLACE_PERROR]) REPLACE_POPEN=0; AC_SUBST([REPLACE_POPEN]) REPLACE_PRINTF=0; AC_SUBST([REPLACE_PRINTF]) REPLACE_REMOVE=0; AC_SUBST([REPLACE_REMOVE]) REPLACE_RENAME=0; AC_SUBST([REPLACE_RENAME]) REPLACE_RENAMEAT=0; AC_SUBST([REPLACE_RENAMEAT]) REPLACE_SNPRINTF=0; AC_SUBST([REPLACE_SNPRINTF]) REPLACE_SPRINTF=0; AC_SUBST([REPLACE_SPRINTF]) REPLACE_STDIO_READ_FUNCS=0; AC_SUBST([REPLACE_STDIO_READ_FUNCS]) REPLACE_STDIO_WRITE_FUNCS=0; AC_SUBST([REPLACE_STDIO_WRITE_FUNCS]) REPLACE_TMPFILE=0; AC_SUBST([REPLACE_TMPFILE]) REPLACE_VASPRINTF=0; AC_SUBST([REPLACE_VASPRINTF]) REPLACE_VDPRINTF=0; AC_SUBST([REPLACE_VDPRINTF]) REPLACE_VFPRINTF=0; AC_SUBST([REPLACE_VFPRINTF]) REPLACE_VPRINTF=0; AC_SUBST([REPLACE_VPRINTF]) REPLACE_VSNPRINTF=0; AC_SUBST([REPLACE_VSNPRINTF]) REPLACE_VSPRINTF=0; AC_SUBST([REPLACE_VSPRINTF]) ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gss-1.0.3/src/gl/m4/getopt.m4�����������������������������������������������������������������������0000644�0000000�0000000�00000030134�12415470504�012456� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# getopt.m4 serial 44 dnl Copyright (C) 2002-2006, 2008-2014 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]) AC_REQUIRE([gl_GETOPT_CHECK_HEADERS]) dnl Other modules can request the gnulib implementation of the getopt dnl functions unconditionally, by defining gl_REPLACE_GETOPT_ALWAYS. dnl argp.m4 does this. m4_ifdef([gl_REPLACE_GETOPT_ALWAYS], [ REPLACE_GETOPT=1 ], [ REPLACE_GETOPT=0 if test -n "$gl_replace_getopt"; then REPLACE_GETOPT=1 fi ]) if test $REPLACE_GETOPT = 1; then dnl Arrange for getopt.h to be created. gl_GETOPT_SUBSTITUTE_HEADER fi ]) # 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]) ]) # Determine whether to replace the entire getopt facility. AC_DEFUN([gl_GETOPT_CHECK_HEADERS], [ AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_REQUIRE([AC_PROG_AWK]) dnl for awk that supports ENVIRON dnl Persuade Solaris <unistd.h> to declare optarg, optind, opterr, optopt. AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) gl_CHECK_NEXT_HEADERS([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 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 Merging these three different test programs into a single one dnl would require a reset mechanism. On BSD systems, it can be done dnl through 'optreset'; on some others (glibc), it can be done by dnl setting 'optind' to 0; on others again (HP-UX, IRIX, OSF/1, dnl Solaris 9, musl libc), there is no such mechanism. if test $cross_compiling = no; then dnl Sanity check. Succeeds everywhere (except on MSVC, dnl which lacks <unistd.h> and getopt() entirely). AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <unistd.h> #include <stdlib.h> #include <string.h> int main () { static char program[] = "program"; static char a[] = "-a"; static char foo[] = "foo"; static char bar[] = "bar"; char *argv[] = { program, a, foo, bar, NULL }; int c; c = getopt (4, argv, "ab"); if (!(c == 'a')) return 1; c = getopt (4, argv, "ab"); if (!(c == -1)) return 2; if (!(optind == 2)) return 3; return 0; } ]])], [gl_cv_func_getopt_posix=maybe], [gl_cv_func_getopt_posix=no]) if test $gl_cv_func_getopt_posix = maybe; then dnl Sanity check with '+'. Succeeds everywhere (except on MSVC, dnl which lacks <unistd.h> and getopt() entirely). AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <unistd.h> #include <stdlib.h> #include <string.h> int main () { static char program[] = "program"; static char donald[] = "donald"; static char p[] = "-p"; static char billy[] = "billy"; static char duck[] = "duck"; static char a[] = "-a"; static char bar[] = "bar"; char *argv[] = { program, donald, p, billy, duck, a, bar, NULL }; int c; c = getopt (7, 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; return 0; } ]])], [gl_cv_func_getopt_posix=maybe], [gl_cv_func_getopt_posix=no]) fi if test $gl_cv_func_getopt_posix = maybe; then dnl Detect Mac OS X 10.5, AIX 7.1, mingw bug. AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <unistd.h> #include <stdlib.h> #include <string.h> int main () { static char program[] = "program"; static char ab[] = "-ab"; char *argv[3] = { program, ab, NULL }; 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]) fi else case "$host_os" in darwin* | aix* | mingw*) gl_cv_func_getopt_posix="guessing no";; *) gl_cv_func_getopt_posix="guessing yes";; esac fi ]) 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. # Bash ties 'set -o posix' to a non-exported POSIXLY_CORRECT; # so take care to revert to the correct (non-)export state. dnl GNU Coding Standards currently allow awk but not env; besides, env dnl is ambiguous with environment values that contain newlines. gl_awk_probe='BEGIN { if ("POSIXLY_CORRECT" in ENVIRON) print "x" }' case ${POSIXLY_CORRECT+x}`$AWK "$gl_awk_probe" </dev/null` in xx) gl_had_POSIXLY_CORRECT=exported ;; x) gl_had_POSIXLY_CORRECT=yes ;; *) gl_had_POSIXLY_CORRECT= ;; esac POSIXLY_CORRECT=1 export POSIXLY_CORRECT AC_RUN_IFELSE( [AC_LANG_PROGRAM([[#include <getopt.h> #include <stddef.h> #include <string.h> ]GL_NOCRASH[ ]], [[ int result = 0; nocrash_init(); /* This code succeeds on glibc 2.8, OpenBSD 4.0, Cygwin, mingw, and fails on Mac OS X 10.5, AIX 5.2, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 10. */ { static char conftest[] = "conftest"; static char plus[] = "-+"; char *argv[3] = { conftest, plus, NULL }; opterr = 0; if (getopt (2, argv, "+a") != '?') result |= 1; } /* This code succeeds on glibc 2.8, mingw, and fails on Mac OS 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. */ { static char program[] = "program"; static char p[] = "-p"; static char foo[] = "foo"; static char bar[] = "bar"; char *argv[] = { program, p, foo, bar, NULL }; optind = 1; if (getopt (4, argv, "p::") != 'p') result |= 2; else if (optarg != NULL) result |= 4; else if (getopt (4, argv, "p::") != -1) result |= 6; else if (optind != 2) result |= 8; } /* This code succeeds on glibc 2.8 and fails on Cygwin 1.7.0. */ { static char program[] = "program"; static char foo[] = "foo"; static char p[] = "-p"; char *argv[] = { program, foo, p, NULL }; optind = 0; if (getopt (3, argv, "-p") != 1) result |= 16; else if (getopt (3, argv, "-p") != 'p') result |= 16; } /* This code fails on glibc 2.11. */ { static char program[] = "program"; static char b[] = "-b"; static char a[] = "-a"; char *argv[] = { program, b, a, NULL }; optind = opterr = 0; if (getopt (3, argv, "+:a:b") != 'b') result |= 32; else if (getopt (3, argv, "+:a:b") != ':') result |= 32; } /* This code dumps core on glibc 2.14. */ { static char program[] = "program"; static char w[] = "-W"; static char dummy[] = "dummy"; char *argv[] = { program, w, dummy, NULL }; optind = opterr = 1; if (getopt (3, argv, "W;") != 'W') result |= 64; } return result; ]])], [gl_cv_func_getopt_gnu=yes], [gl_cv_func_getopt_gnu=no], [dnl Cross compiling. Assume the worst, even on glibc platforms. gl_cv_func_getopt_gnu="guessing no" ]) case $gl_had_POSIXLY_CORRECT in exported) ;; yes) AS_UNSET([POSIXLY_CORRECT]); POSIXLY_CORRECT=1 ;; *) AS_UNSET([POSIXLY_CORRECT]) ;; esac ]) if test "$gl_cv_func_getopt_gnu" != yes; then gl_replace_getopt=yes else AC_CACHE_CHECK([for working GNU getopt_long function], [gl_cv_func_getopt_long_gnu], [AC_RUN_IFELSE( [AC_LANG_PROGRAM( [[#include <getopt.h> #include <stddef.h> #include <string.h> ]], [[static const struct option long_options[] = { { "xtremely-",no_argument, NULL, 1003 }, { "xtra", no_argument, NULL, 1001 }, { "xtreme", no_argument, NULL, 1002 }, { "xtremely", no_argument, NULL, 1003 }, { NULL, 0, NULL, 0 } }; /* This code fails on OpenBSD 5.0. */ { static char program[] = "program"; static char xtremel[] = "--xtremel"; char *argv[] = { program, xtremel, NULL }; int option_index; optind = 1; opterr = 0; if (getopt_long (2, argv, "", long_options, &option_index) != 1003) return 1; } return 0; ]])], [gl_cv_func_getopt_long_gnu=yes], [gl_cv_func_getopt_long_gnu=no], [dnl Cross compiling. Guess no on OpenBSD, yes otherwise. case "$host_os" in openbsd*) gl_cv_func_getopt_long_gnu="guessing no";; *) gl_cv_func_getopt_long_gnu="guessing yes";; esac ]) ]) case "$gl_cv_func_getopt_long_gnu" in *yes) ;; *) gl_replace_getopt=yes ;; esac fi fi ]) 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*. AC_DEFUN([gl_PREREQ_GETOPT], [ AC_CHECK_DECLS_ONCE([getenv]) ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gss-1.0.3/src/gl/m4/sys_socket_h.m4�����������������������������������������������������������������0000644�0000000�0000000�00000014163�12415470504�013655� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# sys_socket_h.m4 serial 23 dnl Copyright (C) 2005-2014 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. AC_DEFUN([gl_HEADER_SYS_SOCKET], [ AC_REQUIRE([gl_SYS_SOCKET_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl On OSF/1, the functions recv(), send(), recvfrom(), sendto() have dnl old-style declarations (with return type 'int' instead of 'ssize_t') dnl unless _POSIX_PII_SOCKET is defined. case "$host_os" in osf*) AC_DEFINE([_POSIX_PII_SOCKET], [1], [Define to 1 in order to get the POSIX compatible declarations of socket functions.]) ;; esac AC_CACHE_CHECK([whether <sys/socket.h> is self-contained], [gl_cv_header_sys_socket_h_selfcontained], [ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/socket.h>]], [[]])], [gl_cv_header_sys_socket_h_selfcontained=yes], [gl_cv_header_sys_socket_h_selfcontained=no]) ]) if test $gl_cv_header_sys_socket_h_selfcontained = yes; then dnl If the shutdown function exists, <sys/socket.h> should define dnl SHUT_RD, SHUT_WR, SHUT_RDWR. AC_CHECK_FUNCS([shutdown]) if test $ac_cv_func_shutdown = yes; then AC_CACHE_CHECK([whether <sys/socket.h> defines the SHUT_* macros], [gl_cv_header_sys_socket_h_shut], [ AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[#include <sys/socket.h>]], [[int a[] = { SHUT_RD, SHUT_WR, SHUT_RDWR };]])], [gl_cv_header_sys_socket_h_shut=yes], [gl_cv_header_sys_socket_h_shut=no]) ]) if test $gl_cv_header_sys_socket_h_shut = no; then SYS_SOCKET_H='sys/socket.h' fi fi fi # We need to check for ws2tcpip.h now. gl_PREREQ_SYS_H_SOCKET AC_CHECK_TYPES([struct sockaddr_storage, sa_family_t],,,[ /* sys/types.h is not needed according to POSIX, but the sys/socket.h in i386-unknown-freebsd4.10 and powerpc-apple-darwin5.5 required it. */ #include <sys/types.h> #ifdef HAVE_SYS_SOCKET_H #include <sys/socket.h> #endif #ifdef HAVE_WS2TCPIP_H #include <ws2tcpip.h> #endif ]) if test $ac_cv_type_struct_sockaddr_storage = no; then HAVE_STRUCT_SOCKADDR_STORAGE=0 fi if test $ac_cv_type_sa_family_t = no; then HAVE_SA_FAMILY_T=0 fi if test $ac_cv_type_struct_sockaddr_storage != no; then AC_CHECK_MEMBERS([struct sockaddr_storage.ss_family], [], [HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY=0], [#include <sys/types.h> #ifdef HAVE_SYS_SOCKET_H #include <sys/socket.h> #endif #ifdef HAVE_WS2TCPIP_H #include <ws2tcpip.h> #endif ]) fi if test $HAVE_STRUCT_SOCKADDR_STORAGE = 0 || test $HAVE_SA_FAMILY_T = 0 \ || test $HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY = 0; then SYS_SOCKET_H='sys/socket.h' fi gl_PREREQ_SYS_H_WINSOCK2 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 prerequisite headers. */ #include <sys/types.h> #include <sys/socket.h> ]], [socket connect accept bind getpeername getsockname getsockopt listen recv send recvfrom sendto setsockopt shutdown accept4]) ]) AC_DEFUN([gl_PREREQ_SYS_H_SOCKET], [ dnl Check prerequisites of the <sys/socket.h> replacement. AC_REQUIRE([gl_CHECK_SOCKET_HEADERS]) gl_CHECK_NEXT_HEADERS([sys/socket.h]) if test $ac_cv_header_sys_socket_h = yes; then HAVE_SYS_SOCKET_H=1 HAVE_WS2TCPIP_H=0 else HAVE_SYS_SOCKET_H=0 if test $ac_cv_header_ws2tcpip_h = yes; then HAVE_WS2TCPIP_H=1 else HAVE_WS2TCPIP_H=0 fi fi AC_SUBST([HAVE_SYS_SOCKET_H]) AC_SUBST([HAVE_WS2TCPIP_H]) ]) # Common prerequisites of the <sys/socket.h> replacement and of the # <sys/select.h> replacement. # Sets and substitutes HAVE_WINSOCK2_H. AC_DEFUN([gl_PREREQ_SYS_H_WINSOCK2], [ m4_ifdef([gl_UNISTD_H_DEFAULTS], [AC_REQUIRE([gl_UNISTD_H_DEFAULTS])]) m4_ifdef([gl_SYS_IOCTL_H_DEFAULTS], [AC_REQUIRE([gl_SYS_IOCTL_H_DEFAULTS])]) AC_CHECK_HEADERS_ONCE([sys/socket.h]) if test $ac_cv_header_sys_socket_h != yes; then dnl We cannot use AC_CHECK_HEADERS_ONCE here, because that would make dnl the check for those headers unconditional; yet cygwin reports dnl that the headers are present but cannot be compiled (since on dnl cygwin, all socket information should come from sys/socket.h). AC_CHECK_HEADERS([winsock2.h]) fi if test "$ac_cv_header_winsock2_h" = yes; then HAVE_WINSOCK2_H=1 UNISTD_H_HAVE_WINSOCK2_H=1 SYS_IOCTL_H_HAVE_WINSOCK2_H=1 else HAVE_WINSOCK2_H=0 fi AC_SUBST([HAVE_WINSOCK2_H]) ]) AC_DEFUN([gl_SYS_SOCKET_MODULE_INDICATOR], [ dnl Use AC_REQUIRE here, so that the default settings are expanded once only. AC_REQUIRE([gl_SYS_SOCKET_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_SYS_SOCKET_H_DEFAULTS], [ GNULIB_SOCKET=0; AC_SUBST([GNULIB_SOCKET]) GNULIB_CONNECT=0; AC_SUBST([GNULIB_CONNECT]) GNULIB_ACCEPT=0; AC_SUBST([GNULIB_ACCEPT]) GNULIB_BIND=0; AC_SUBST([GNULIB_BIND]) GNULIB_GETPEERNAME=0; AC_SUBST([GNULIB_GETPEERNAME]) GNULIB_GETSOCKNAME=0; AC_SUBST([GNULIB_GETSOCKNAME]) GNULIB_GETSOCKOPT=0; AC_SUBST([GNULIB_GETSOCKOPT]) GNULIB_LISTEN=0; AC_SUBST([GNULIB_LISTEN]) GNULIB_RECV=0; AC_SUBST([GNULIB_RECV]) GNULIB_SEND=0; AC_SUBST([GNULIB_SEND]) GNULIB_RECVFROM=0; AC_SUBST([GNULIB_RECVFROM]) GNULIB_SENDTO=0; AC_SUBST([GNULIB_SENDTO]) GNULIB_SETSOCKOPT=0; AC_SUBST([GNULIB_SETSOCKOPT]) GNULIB_SHUTDOWN=0; AC_SUBST([GNULIB_SHUTDOWN]) GNULIB_ACCEPT4=0; AC_SUBST([GNULIB_ACCEPT4]) HAVE_STRUCT_SOCKADDR_STORAGE=1; AC_SUBST([HAVE_STRUCT_SOCKADDR_STORAGE]) HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY=1; AC_SUBST([HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY]) HAVE_SA_FAMILY_T=1; AC_SUBST([HAVE_SA_FAMILY_T]) HAVE_ACCEPT4=1; AC_SUBST([HAVE_ACCEPT4]) ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gss-1.0.3/src/gl/m4/msvc-nothrow.m4�����������������������������������������������������������������0000644�0000000�0000000�00000000530�12415470504�013617� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# msvc-nothrow.m4 serial 1 dnl Copyright (C) 2011-2014 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_MSVC_NOTHROW], [ AC_REQUIRE([gl_MSVC_INVAL]) ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������gss-1.0.3/src/gl/m4/nocrash.m4����������������������������������������������������������������������0000644�0000000�0000000�00000010555�12415470504�012616� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# nocrash.m4 serial 4 dnl Copyright (C) 2005, 2009-2014 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 Based on libsigsegv, from Bruno Haible and Paolo Bonzini. AC_PREREQ([2.13]) dnl Expands to some code for use in .c programs that will cause the configure dnl test to exit instead of crashing. This is useful to avoid triggering dnl action from a background debugger and to avoid core dumps. dnl Usage: ... dnl ]GL_NOCRASH[ dnl ... dnl int main() { nocrash_init(); ... } AC_DEFUN([GL_NOCRASH],[[ #include <stdlib.h> #if defined __MACH__ && defined __APPLE__ /* Avoid a crash on Mac OS X. */ #include <mach/mach.h> #include <mach/mach_error.h> #include <mach/thread_status.h> #include <mach/exception.h> #include <mach/task.h> #include <pthread.h> /* The exception port on which our thread listens. */ static mach_port_t our_exception_port; /* The main function of the thread listening for exceptions of type EXC_BAD_ACCESS. */ static void * mach_exception_thread (void *arg) { /* Buffer for a message to be received. */ struct { mach_msg_header_t head; mach_msg_body_t msgh_body; char data[1024]; } msg; mach_msg_return_t retval; /* Wait for a message on the exception port. */ retval = mach_msg (&msg.head, MACH_RCV_MSG | MACH_RCV_LARGE, 0, sizeof (msg), our_exception_port, MACH_MSG_TIMEOUT_NONE, MACH_PORT_NULL); if (retval != MACH_MSG_SUCCESS) abort (); exit (1); } static void nocrash_init (void) { mach_port_t self = mach_task_self (); /* Allocate a port on which the thread shall listen for exceptions. */ if (mach_port_allocate (self, MACH_PORT_RIGHT_RECEIVE, &our_exception_port) == KERN_SUCCESS) { /* See http://web.mit.edu/darwin/src/modules/xnu/osfmk/man/mach_port_insert_right.html. */ if (mach_port_insert_right (self, our_exception_port, our_exception_port, MACH_MSG_TYPE_MAKE_SEND) == KERN_SUCCESS) { /* The exceptions we want to catch. Only EXC_BAD_ACCESS is interesting for us. */ exception_mask_t mask = EXC_MASK_BAD_ACCESS; /* Create the thread listening on the exception port. */ pthread_attr_t attr; pthread_t thread; if (pthread_attr_init (&attr) == 0 && pthread_attr_setdetachstate (&attr, PTHREAD_CREATE_DETACHED) == 0 && pthread_create (&thread, &attr, mach_exception_thread, NULL) == 0) { pthread_attr_destroy (&attr); /* Replace the exception port info for these exceptions with our own. Note that we replace the exception port for the entire task, not only for a particular thread. This has the effect that when our exception port gets the message, the thread specific exception port has already been asked, and we don't need to bother about it. See http://web.mit.edu/darwin/src/modules/xnu/osfmk/man/task_set_exception_ports.html. */ task_set_exception_ports (self, mask, our_exception_port, EXCEPTION_DEFAULT, MACHINE_THREAD_STATE); } } } } #elif (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ /* Avoid a crash on native Windows. */ #define WIN32_LEAN_AND_MEAN #include <windows.h> #include <winerror.h> static LONG WINAPI exception_filter (EXCEPTION_POINTERS *ExceptionInfo) { switch (ExceptionInfo->ExceptionRecord->ExceptionCode) { case EXCEPTION_ACCESS_VIOLATION: case EXCEPTION_IN_PAGE_ERROR: case EXCEPTION_STACK_OVERFLOW: case EXCEPTION_GUARD_PAGE: case EXCEPTION_PRIV_INSTRUCTION: case EXCEPTION_ILLEGAL_INSTRUCTION: case EXCEPTION_DATATYPE_MISALIGNMENT: case EXCEPTION_ARRAY_BOUNDS_EXCEEDED: case EXCEPTION_NONCONTINUABLE_EXCEPTION: exit (1); } return EXCEPTION_CONTINUE_SEARCH; } static void nocrash_init (void) { SetUnhandledExceptionFilter ((LPTOP_LEVEL_EXCEPTION_FILTER) exception_filter); } #else /* Avoid a crash on POSIX systems. */ #include <signal.h> /* A POSIX signal handler. */ static void exception_handler (int sig) { exit (1); } static void nocrash_init (void) { #ifdef SIGSEGV signal (SIGSEGV, exception_handler); #endif #ifdef SIGBUS signal (SIGBUS, exception_handler); #endif } #endif ]]) ���������������������������������������������������������������������������������������������������������������������������������������������������gss-1.0.3/src/gl/m4/version-etc.m4������������������������������������������������������������������0000644�0000000�0000000�00000002226�12415470504�013413� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# version-etc.m4 serial 1 # Copyright (C) 2009-2014 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 ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gss-1.0.3/src/gl/m4/unistd_h.m4���������������������������������������������������������������������0000644�0000000�0000000�00000021531�12415470504�012772� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# unistd_h.m4 serial 67 dnl Copyright (C) 2006-2014 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]) gl_CHECK_NEXT_HEADERS([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 Ensure the type pid_t gets defined. AC_REQUIRE([AC_TYPE_PID_T]) dnl Determine WINDOWS_64_BIT_OFF_T. AC_REQUIRE([gl_TYPE_OFF_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([[ #if HAVE_UNISTD_H # include <unistd.h> #endif /* Some systems declare various items in the wrong headers. */ #if !(defined __GLIBC__ && !defined __UCLIBC__) # include <fcntl.h> # include <stdio.h> # include <stdlib.h> # if (defined _WIN32 || defined __WIN32__) && ! defined __CYGWIN__ # include <io.h> # endif #endif ]], [chdir chown dup dup2 dup3 environ euidaccess faccessat fchdir fchownat fdatasync fsync ftruncate getcwd getdomainname getdtablesize getgroups gethostname getlogin getlogin_r getpagesize getusershell setusershell endusershell group_member isatty lchown link linkat lseek pipe pipe2 pread pwrite readlink readlinkat rmdir sethostname 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_CHDIR=0; AC_SUBST([GNULIB_CHDIR]) GNULIB_CHOWN=0; AC_SUBST([GNULIB_CHOWN]) GNULIB_CLOSE=0; AC_SUBST([GNULIB_CLOSE]) GNULIB_DUP=0; AC_SUBST([GNULIB_DUP]) 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_FDATASYNC=0; AC_SUBST([GNULIB_FDATASYNC]) 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_GROUP_MEMBER=0; AC_SUBST([GNULIB_GROUP_MEMBER]) GNULIB_ISATTY=0; AC_SUBST([GNULIB_ISATTY]) 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_PIPE=0; AC_SUBST([GNULIB_PIPE]) GNULIB_PIPE2=0; AC_SUBST([GNULIB_PIPE2]) GNULIB_PREAD=0; AC_SUBST([GNULIB_PREAD]) GNULIB_PWRITE=0; AC_SUBST([GNULIB_PWRITE]) GNULIB_READ=0; AC_SUBST([GNULIB_READ]) GNULIB_READLINK=0; AC_SUBST([GNULIB_READLINK]) GNULIB_READLINKAT=0; AC_SUBST([GNULIB_READLINKAT]) GNULIB_RMDIR=0; AC_SUBST([GNULIB_RMDIR]) GNULIB_SETHOSTNAME=0; AC_SUBST([GNULIB_SETHOSTNAME]) 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_NONBLOCKING=0; AC_SUBST([GNULIB_UNISTD_H_NONBLOCKING]) 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_FDATASYNC=1; AC_SUBST([HAVE_FDATASYNC]) HAVE_FSYNC=1; AC_SUBST([HAVE_FSYNC]) HAVE_FTRUNCATE=1; AC_SUBST([HAVE_FTRUNCATE]) 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_GROUP_MEMBER=1; AC_SUBST([HAVE_GROUP_MEMBER]) HAVE_LCHOWN=1; AC_SUBST([HAVE_LCHOWN]) HAVE_LINK=1; AC_SUBST([HAVE_LINK]) HAVE_LINKAT=1; AC_SUBST([HAVE_LINKAT]) HAVE_PIPE=1; AC_SUBST([HAVE_PIPE]) 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_SETHOSTNAME=1; AC_SUBST([HAVE_SETHOSTNAME]) HAVE_SLEEP=1; AC_SUBST([HAVE_SLEEP]) HAVE_SYMLINK=1; AC_SUBST([HAVE_SYMLINK]) HAVE_SYMLINKAT=1; AC_SUBST([HAVE_SYMLINKAT]) 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_FCHDIR=1; AC_SUBST([HAVE_DECL_FCHDIR]) HAVE_DECL_FDATASYNC=1; AC_SUBST([HAVE_DECL_FDATASYNC]) HAVE_DECL_GETDOMAINNAME=1; AC_SUBST([HAVE_DECL_GETDOMAINNAME]) 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_DECL_SETHOSTNAME=1; AC_SUBST([HAVE_DECL_SETHOSTNAME]) HAVE_DECL_TTYNAME_R=1; AC_SUBST([HAVE_DECL_TTYNAME_R]) 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_FTRUNCATE=0; AC_SUBST([REPLACE_FTRUNCATE]) REPLACE_GETCWD=0; AC_SUBST([REPLACE_GETCWD]) REPLACE_GETDOMAINNAME=0; AC_SUBST([REPLACE_GETDOMAINNAME]) REPLACE_GETDTABLESIZE=0; AC_SUBST([REPLACE_GETDTABLESIZE]) REPLACE_GETLOGIN_R=0; AC_SUBST([REPLACE_GETLOGIN_R]) REPLACE_GETGROUPS=0; AC_SUBST([REPLACE_GETGROUPS]) REPLACE_GETPAGESIZE=0; AC_SUBST([REPLACE_GETPAGESIZE]) REPLACE_ISATTY=0; AC_SUBST([REPLACE_ISATTY]) 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_READ=0; AC_SUBST([REPLACE_READ]) 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]) ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������gss-1.0.3/src/gl/m4/ssize_t.m4����������������������������������������������������������������������0000644�0000000�0000000�00000001463�12415470504�012637� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# ssize_t.m4 serial 5 (gettext-0.18.2) dnl Copyright (C) 2001-2003, 2006, 2010-2014 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 ssize_t is defined. AC_DEFUN([gt_TYPE_SSIZE_T], [ AC_CACHE_CHECK([for ssize_t], [gt_cv_ssize_t], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include <sys/types.h>]], [[int x = sizeof (ssize_t *) + sizeof (ssize_t); return !x;]])], [gt_cv_ssize_t=yes], [gt_cv_ssize_t=no])]) if test $gt_cv_ssize_t = no; then AC_DEFINE([ssize_t], [int], [Define as a signed type of the same size as size_t.]) fi ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gss-1.0.3/src/gl/m4/base64.m4�����������������������������������������������������������������������0000644�0000000�0000000�00000000664�12415470504�012245� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# base64.m4 serial 4 dnl Copyright (C) 2004, 2006, 2009-2014 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_BASE64], [ gl_PREREQ_BASE64 ]) # Prerequisites of lib/base64.c. AC_DEFUN([gl_PREREQ_BASE64], [ AC_REQUIRE([AC_C_RESTRICT]) ]) ����������������������������������������������������������������������������gss-1.0.3/src/gl/getopt1.c��������������������������������������������������������������������������0000644�0000000�0000000�00000010552�12415470504�012123� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* getopt_long and getopt_long_only entry points for GNU getopt. Copyright (C) 1987-1994, 1996-1998, 2004, 2006, 2009-2014 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/>. */ #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); } #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 */ ������������������������������������������������������������������������������������������������������������������������������������������������������gss-1.0.3/src/gl/progname.c�������������������������������������������������������������������������0000644�0000000�0000000�00000006150�12415470504�012347� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Program name management. Copyright (C) 2001-2003, 2005-2014 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 } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gss-1.0.3/src/gss.c���������������������������������������������������������������������������������0000664�0000000�0000000�00000041443�12415507362�010742� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* gss.c --- Command line tool for GSS. * Copyright (C) 2004-2014 Simon Josefsson * * This file is part of the Generic Security Service (GSS). * * GSS 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. * * GSS 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 GSS; if not, see http://www.gnu.org/licenses or write to * the Free Software Foundation, Inc., 51 Franklin Street, Fifth * Floor, Boston, MA 02110-1301, USA. * */ #include "config.h" #include <stdio.h> #include <stdlib.h> #include <string.h> #include <errno.h> /* For gettext. */ #include <locale.h> #include <gettext.h> #define _(String) gettext (String) /* Get GSS header. */ #include <gss.h> /* Command line parameter parser via gengetopt. */ #include "gss_cmd.h" /* Gnulib utils. */ #include "base64.h" #include "error.h" #include "progname.h" #include "version-etc.h" 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 Simon Josefsson."; /* This feature is available in gcc versions 2.5 and later. */ #if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 5) # define GSS_ATTR_NO_RETRUN #else # define GSS_ATTR_NO_RETRUN __attribute__ ((__noreturn__)) #endif static void usage (int status) GSS_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 OPTIONS...\n\ "), program_name); fputs (_("\ Command line interface to GSS, used to explain error codes.\n\ \n\ "), stdout); fputs (_("\ Mandatory arguments to long options are mandatory for short options too.\n\ "), stdout); fputs (_("\ -h, --help Print help and exit.\n\ -V, --version Print version and exit.\n\ -l, --list-mechanisms\n\ List information about supported mechanisms\n\ in a human readable format.\n\ -m, --major=LONG Describe a `major status' error code value.\n\ "), stdout); fputs (_("\ -a, --accept-sec-context[=MECH]\n\ Accept a security context as server.\n\ If MECH is not specified, no credentials\n\ will be acquired. Use \"*\" to use library\n\ default mechanism.\n\ -i, --init-sec-context=MECH\n\ Initialize a security context as client.\n\ MECH is the SASL name of mechanism, use -l\n\ to list supported mechanisms.\n\ -n, --server-name=SERVICE@HOSTNAME\n\ For -i and -a, set the name of the remote host.\n\ For example, \"imap@mail.example.com\".\n\ "), stdout); fputs (_("\ -q, --quiet Silent operation (default=off).\n\ "), stdout); emit_bug_reporting_address (); } exit (status); } static int describe_major (unsigned int quiet, long major) { gss_buffer_desc status_string; OM_uint32 message_context = 0; OM_uint32 maj = 0, min; size_t i; int rc = 0; if (!quiet) { printf (_("GSS-API major status code %ld (0x%lx).\n\n"), major, major); printf (_(" MSB " " LSB\n" " +-----------------+---------------" "--+---------------------------------+\n" " | Calling Error | Routine Error" " | Supplementary Info |\n | ")); for (i = 0; i < 8; i++) printf ("%ld ", (major >> (31 - i)) & 1); printf ("| "); for (i = 0; i < 8; i++) printf ("%ld ", (major >> (23 - i)) & 1); printf ("| "); for (i = 0; i < 16; i++) printf ("%ld ", (major >> (15 - i)) & 1); printf (_("|\n" " +-----------------+---------------" "--+---------------------------------+\n" "Bit 31 24 23 1" "6 15 0\n\n")); } if (GSS_ROUTINE_ERROR (major)) { if (!quiet) printf (_("Masked routine error %ld (0x%lx) shifted " "into %ld (0x%lx):\n"), GSS_ROUTINE_ERROR (major), GSS_ROUTINE_ERROR (major), GSS_ROUTINE_ERROR (major) >> GSS_C_ROUTINE_ERROR_OFFSET, GSS_ROUTINE_ERROR (major) >> GSS_C_ROUTINE_ERROR_OFFSET); message_context = 0; do { maj = gss_display_status (&min, GSS_ROUTINE_ERROR (major), GSS_C_GSS_CODE, GSS_C_NO_OID, &message_context, &status_string); if (GSS_ERROR (maj)) { error (0, 0, _("displaying status code failed (%d)"), maj); rc = 1; break; } printf ("%.*s\n", (int) status_string.length, (char *) status_string.value); gss_release_buffer (&min, &status_string); } while (message_context); if (!quiet) printf ("\n"); } if (GSS_CALLING_ERROR (major)) { if (!quiet) printf (_("Masked calling error %ld (0x%lx) shifted into %ld (0x%lx):\n"), GSS_CALLING_ERROR (major), GSS_CALLING_ERROR (major), GSS_CALLING_ERROR (major) >> GSS_C_CALLING_ERROR_OFFSET, GSS_CALLING_ERROR (major) >> GSS_C_CALLING_ERROR_OFFSET); message_context = 0; do { maj = gss_display_status (&min, GSS_CALLING_ERROR (major), GSS_C_GSS_CODE, GSS_C_NO_OID, &message_context, &status_string); if (GSS_ERROR (maj)) { error (0, 0, _("displaying status code failed (%d)"), maj); rc = 1; break; } printf ("%.*s\n", (int) status_string.length, (char *) status_string.value); gss_release_buffer (&min, &status_string); } while (message_context); if (!quiet) printf ("\n"); } if (GSS_SUPPLEMENTARY_INFO (major)) { if (!quiet) printf (_("Masked supplementary info %ld (0x%lx) shifted " "into %ld (0x%lx):\n"), GSS_SUPPLEMENTARY_INFO (major), GSS_SUPPLEMENTARY_INFO (major), GSS_SUPPLEMENTARY_INFO (major) >> GSS_C_SUPPLEMENTARY_OFFSET, GSS_SUPPLEMENTARY_INFO (major) >> GSS_C_SUPPLEMENTARY_OFFSET); message_context = 0; do { maj = gss_display_status (&min, GSS_SUPPLEMENTARY_INFO (major), GSS_C_GSS_CODE, GSS_C_NO_OID, &message_context, &status_string); if (GSS_ERROR (maj)) { error (0, 0, _("displaying status code failed (%d)"), maj); rc = 1; break; } printf ("%.*s\n", (int) status_string.length, (char *) status_string.value); gss_release_buffer (&min, &status_string); } while (message_context); if (!quiet) printf ("\n"); } if (major == GSS_S_COMPLETE) printf (_("No error\n")); return rc; } static int list_mechanisms (unsigned quiet) { OM_uint32 maj, min; gss_OID_set mech_set; size_t i; gss_buffer_desc sasl_mech_name; gss_buffer_desc mech_name; gss_buffer_desc mech_description; maj = gss_indicate_mechs (&min, &mech_set); if (GSS_ERROR (maj)) { error (0, 0, _("indicating mechanisms failed (%d)"), maj); return 1; } printf ("Found %lu supported mechanisms.\n", (unsigned long) mech_set->count); for (i = 0; i < mech_set->count; i++) { printf ("\nMechanism %lu:\n", (unsigned long) i); maj = gss_inquire_saslname_for_mech (&min, mech_set->elements++, &sasl_mech_name, &mech_name, &mech_description); if (GSS_ERROR (maj)) { error (0, 0, _("inquiring information about mechanism failed (%d)"), maj); continue; } printf ("\tMechanism name: %.*s\n", (int) mech_name.length, (char *) mech_name.value); printf ("\tMechanism description: %.*s\n", (int) mech_description.length, (char *) mech_description.value); printf ("\tSASL Mechanism name: %.*s\n", (int) sasl_mech_name.length, (char *) sasl_mech_name.value); } return 0; } static ssize_t gettrimline (char **line, size_t * n, FILE * fh) { ssize_t s = getline (line, n, fh); if (s >= 2) { if ((*line)[strlen (*line) - 1] == '\n') (*line)[strlen (*line) - 1] = '\0'; if ((*line)[strlen (*line) - 1] == '\r') (*line)[strlen (*line) - 1] = '\0'; } return s; } static int init_sec_context (unsigned quiet, const char *mech, const char *server) { OM_uint32 maj, min; gss_ctx_id_t ctx = GSS_C_NO_CONTEXT; gss_name_t servername = GSS_C_NO_NAME; gss_buffer_desc inbuf_desc; gss_buffer_t inbuf = GSS_C_NO_BUFFER; gss_buffer_desc bufdesc; gss_buffer_desc sasl_mech_name; gss_OID mech_type; size_t outlen; char *out; ssize_t s; char *line = NULL; size_t n = 0; bool ok; OM_uint32 ret_flags; sasl_mech_name.length = strlen (mech); sasl_mech_name.value = (void *) mech; maj = gss_inquire_mech_for_saslname (&min, &sasl_mech_name, &mech_type); if (GSS_ERROR (maj)) error (EXIT_FAILURE, 0, _("inquiring mechanism for SASL name (%d/%d)"), maj, min); if (server) { gss_buffer_desc namebuf; namebuf.length = strlen (server); namebuf.value = (void *) server; maj = gss_import_name (&min, &namebuf, GSS_C_NT_HOSTBASED_SERVICE, &servername); if (GSS_ERROR (maj)) error (EXIT_FAILURE, 0, _("could not import server name \"%s\" (%d/%d)"), server, maj, min); } do { maj = gss_init_sec_context (&min, GSS_C_NO_CREDENTIAL, &ctx, servername, mech_type, GSS_C_MUTUAL_FLAG | GSS_C_REPLAY_FLAG | GSS_C_SEQUENCE_FLAG, 0, GSS_C_NO_CHANNEL_BINDINGS, inbuf, NULL, &bufdesc, &ret_flags, NULL); if (GSS_ERROR (maj)) error (EXIT_FAILURE, 0, _("initializing security context failed (%d/%d)"), maj, min); outlen = base64_encode_alloc (bufdesc.value, bufdesc.length, &out); if (out == NULL && outlen == 0 && bufdesc.length != 0) error (EXIT_FAILURE, 0, _("base64 input too long")); if (out == NULL) error (EXIT_FAILURE, errno, _("malloc")); if (!quiet) { if (maj == GSS_S_COMPLETE && bufdesc.length == 0) printf ("Context has been initialized.\n"); else if (maj == GSS_S_COMPLETE) printf ("Context has been initialized. Final context token:\n"); else if (maj == GSS_S_CONTINUE_NEEDED && (ret_flags & GSS_C_PROT_READY_FLAG)) printf ("Context token (protection is available):\n"); else if (maj == GSS_S_CONTINUE_NEEDED) printf ("Context token:\n"); } if (bufdesc.length != 0) printf ("%s\n", out); free (out); if (maj == GSS_S_COMPLETE) break; if (!quiet) printf ("Input context token:\n"); s = gettrimline (&line, &n, stdin); if (s == -1 && !feof (stdin)) error (EXIT_FAILURE, errno, _("getline")); if (s == -1) error (EXIT_FAILURE, 0, _("end of file")); ok = base64_decode_alloc (line, strlen (line), &out, &outlen); if (!ok) error (EXIT_FAILURE, 0, _("base64 fail")); if (out == NULL) error (EXIT_FAILURE, errno, _("malloc")); inbuf_desc.value = out; inbuf_desc.length = outlen; inbuf = &inbuf_desc; } while (maj == GSS_S_CONTINUE_NEEDED); return 0; } static int accept_sec_context (unsigned quiet, const char *mech, const char *server) { OM_uint32 maj, min; gss_ctx_id_t ctx = GSS_C_NO_CONTEXT; gss_cred_id_t cred = GSS_C_NO_CREDENTIAL; gss_name_t client = GSS_C_NO_NAME; gss_buffer_desc bufdesc, bufdesc2; gss_OID mech_type = GSS_C_NO_OID; char *out; size_t outlen; ssize_t s; char *line = NULL; size_t n = 0; bool ok; OM_uint32 ret_flags; /* We support these variants: 1) No call to gss_acquire_cred at all. This happens if mech=NULL and server=NULL. 2) Call to gss_acquire_cred with desired_mechs=GSS_C_NULL_OID_SET and desired_name=GSS_C_NO_NAME. This happens if mech="*" (the string) and server=NULL. 3) Call to gss_acquire_cred with desired_mechs=GSS_C_NULL_OID_SET and desired_name=server. This happens if mech=NULL or mech="*" (the string) and server!=NULL. 4) Call to gss_acquire_cred with desired_mechs=mech and desired_name=GSS_C_NO_NAME. This happens if mech is a valid SASL-name and server=NULL. 5) Call to gss_acquire_cred with desired_mechs=mech and desired_name=server. This happens if mech is a valid SASL-name and server!=NULL. */ if (mech || server) { gss_name_t servername = GSS_C_NO_NAME; gss_OID_set mech_types = GSS_C_NULL_OID_SET; if (mech && strcmp (mech, "*") != 0) { gss_buffer_desc sasl_mech_name; sasl_mech_name.length = strlen (mech); sasl_mech_name.value = (void *) mech; printf ("Inquiring mechanism OID for SASL name \"%s\"...\n", mech); maj = gss_inquire_mech_for_saslname (&min, &sasl_mech_name, &mech_type); if (GSS_ERROR (maj)) error (EXIT_FAILURE, 0, _("inquiring mechanism for SASL name (%d/%d)"), maj, min); } if (server) { gss_buffer_desc namebuf; namebuf.length = strlen (server); namebuf.value = (void *) server; printf ("Importing name \"%s\"...\n", server); maj = gss_import_name (&min, &namebuf, GSS_C_NT_HOSTBASED_SERVICE, &servername); if (GSS_ERROR (maj)) error (EXIT_FAILURE, 0, _("could not import server name \"%s\" (%d/%d)"), server, maj, min); } if (mech_type != GSS_C_NO_OID) { maj = gss_create_empty_oid_set (&min, &mech_types); if (GSS_ERROR (maj)) error (EXIT_FAILURE, 0, "gss_create_empty_oid_set (%d/%d)", maj, min); maj = gss_add_oid_set_member (&min, mech_type, &mech_types); if (GSS_ERROR (maj)) error (EXIT_FAILURE, 0, "gss_add_oid_set_member (%d/%d)", maj, min); } printf ("Acquiring credentials...\n"); maj = gss_acquire_cred (&min, servername, 0, mech_types, GSS_C_ACCEPT, &cred, NULL, NULL); if (GSS_ERROR (maj)) error (EXIT_FAILURE, 0, _("could not acquire server credentials (%d/%d)"), maj, min); if (mech_type != GSS_C_NO_OID) { maj = gss_release_oid_set (&min, &mech_types); if (GSS_ERROR (maj)) error (EXIT_FAILURE, 0, "gss_release_oid_set (%d/%d)", maj, min); } } do { if (!quiet) printf ("Input context token:\n"); s = gettrimline (&line, &n, stdin); if (s == -1 && !feof (stdin)) error (EXIT_FAILURE, errno, _("getline")); if (s == -1) error (EXIT_FAILURE, 0, _("end of file")); ok = base64_decode_alloc (line, strlen (line), &out, &outlen); if (!ok) error (EXIT_FAILURE, 0, _("base64 fail")); if (out == NULL) error (EXIT_FAILURE, errno, _("malloc")); bufdesc.value = out; bufdesc.length = outlen; maj = gss_accept_sec_context (&min, &ctx, cred, &bufdesc, GSS_C_NO_CHANNEL_BINDINGS, &client, &mech_type, &bufdesc2, &ret_flags, NULL, NULL); if (GSS_ERROR (maj)) error (EXIT_FAILURE, 0, _("accepting security context failed (%d/%d)"), maj, min); outlen = base64_encode_alloc (bufdesc2.value, bufdesc2.length, &out); if (out == NULL && outlen == 0 && bufdesc2.length != 0) error (EXIT_FAILURE, 0, _("base64 input too long")); if (out == NULL) error (EXIT_FAILURE, errno, _("malloc")); if (!quiet) { if (maj == GSS_S_COMPLETE && bufdesc2.length == 0) printf ("Context has been accepted.\n"); else if (maj == GSS_S_COMPLETE) printf ("Context has been accepted. Final context token:\n"); else if (maj == GSS_S_CONTINUE_NEEDED && (ret_flags & GSS_C_PROT_READY_FLAG)) printf ("Context token (protection is available):\n"); else if (maj == GSS_S_CONTINUE_NEEDED) printf ("Context token:\n"); } if (bufdesc2.length != 0) printf ("%s\n", out); free (out); } while (maj == GSS_S_CONTINUE_NEEDED); return 0; } int main (int argc, char *argv[]) { struct gengetopt_args_info args; int rc = 0; setlocale (LC_ALL, ""); set_program_name (argv[0]); bindtextdomain (PACKAGE, LOCALEDIR); textdomain (PACKAGE); if (cmdline_parser (argc, argv, &args) != 0) return 1; if (args.version_given) { version_etc (stdout, "gss", PACKAGE_NAME, VERSION, "Simon Josefsson", (char *) NULL); return EXIT_SUCCESS; } if (args.help_given) usage (EXIT_SUCCESS); else if (args.major_given) rc = describe_major (args.quiet_given, args.major_arg); else if (args.list_mechanisms_given) rc = list_mechanisms (args.quiet_given); else if (args.init_sec_context_given) rc = init_sec_context (args.quiet_given, args.init_sec_context_arg, args.server_name_arg); else if (args.accept_sec_context_given) rc = accept_sec_context (args.quiet_given, args.accept_sec_context_arg, args.server_name_arg); else usage (EXIT_SUCCESS); return rc; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gss-1.0.3/src/Makefile.in���������������������������������������������������������������������������0000644�0000000�0000000�00000124164�12415507621�012045� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Makefile.in generated by automake 1.14.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 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) 2003-2014 Simon Josefsson # # This file is part of the Generic Security Service (GSS). # # GSS 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. # # GSS 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 GSS; if not, see http://www.gnu.org/licenses or write to # the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, # Boston, MA 02110-1301, USA. VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ bin_PROGRAMS = gss$(EXEEXT) subdir = src DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(top_srcdir)/build-aux/depcomp ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/src/gl/m4/base64.m4 \ $(top_srcdir)/src/gl/m4/errno_h.m4 \ $(top_srcdir)/src/gl/m4/error.m4 \ $(top_srcdir)/src/gl/m4/getopt.m4 \ $(top_srcdir)/src/gl/m4/gnulib-comp.m4 \ $(top_srcdir)/src/gl/m4/memchr.m4 \ $(top_srcdir)/src/gl/m4/mmap-anon.m4 \ $(top_srcdir)/src/gl/m4/msvc-inval.m4 \ $(top_srcdir)/src/gl/m4/msvc-nothrow.m4 \ $(top_srcdir)/src/gl/m4/nocrash.m4 \ $(top_srcdir)/src/gl/m4/off_t.m4 \ $(top_srcdir)/src/gl/m4/ssize_t.m4 \ $(top_srcdir)/src/gl/m4/stdarg.m4 \ $(top_srcdir)/src/gl/m4/stdbool.m4 \ $(top_srcdir)/src/gl/m4/stdio_h.m4 \ $(top_srcdir)/src/gl/m4/strerror.m4 \ $(top_srcdir)/src/gl/m4/sys_socket_h.m4 \ $(top_srcdir)/src/gl/m4/sys_types_h.m4 \ $(top_srcdir)/src/gl/m4/unistd_h.m4 \ $(top_srcdir)/src/gl/m4/version-etc.m4 \ $(top_srcdir)/lib/gl/m4/absolute-header.m4 \ $(top_srcdir)/lib/gl/m4/extensions.m4 \ $(top_srcdir)/lib/gl/m4/gnulib-comp.m4 \ $(top_srcdir)/lib/gl/m4/include_next.m4 \ $(top_srcdir)/lib/gl/m4/ld-output-def.m4 \ $(top_srcdir)/lib/gl/m4/stddef_h.m4 \ $(top_srcdir)/lib/gl/m4/string_h.m4 \ $(top_srcdir)/lib/gl/m4/strverscmp.m4 \ $(top_srcdir)/lib/gl/m4/warn-on-use.m4 \ $(top_srcdir)/gl/m4/00gnulib.m4 \ $(top_srcdir)/gl/m4/autobuild.m4 \ $(top_srcdir)/gl/m4/gnulib-common.m4 \ $(top_srcdir)/gl/m4/gnulib-comp.m4 \ $(top_srcdir)/gl/m4/ld-version-script.m4 \ $(top_srcdir)/gl/m4/manywarnings.m4 \ $(top_srcdir)/gl/m4/valgrind-tests.m4 \ $(top_srcdir)/gl/m4/warnings.m4 \ $(top_srcdir)/m4/extern-inline.m4 $(top_srcdir)/m4/gettext.m4 \ $(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \ $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.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/nls.m4 \ $(top_srcdir)/m4/pkg.m4 $(top_srcdir)/m4/po-suffix.m4 \ $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \ $(top_srcdir)/m4/wchar_t.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 = LTLIBRARIES = $(noinst_LTLIBRARIES) libcmd_gss_la_DEPENDENCIES = gl/libgnu.la am__objects_1 = libcmd_gss_la-gss_cmd.lo am_libcmd_gss_la_OBJECTS = $(am__objects_1) libcmd_gss_la_OBJECTS = $(am_libcmd_gss_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = libcmd_gss_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(libcmd_gss_la_CFLAGS) \ $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ am__installdirs = "$(DESTDIR)$(bindir)" PROGRAMS = $(bin_PROGRAMS) am_gss_OBJECTS = gss.$(OBJEXT) gss_OBJECTS = $(am_gss_OBJECTS) gss_DEPENDENCIES = ../lib/libgss.la gl/libgnu.la libcmd-gss.la AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = 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) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libcmd_gss_la_SOURCES) $(gss_SOURCES) DIST_SOURCES = $(libcmd_gss_la_SOURCES) $(gss_SOURCES) RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ distdir am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(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@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ ARFLAGS = @ARFLAGS@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CONFIG_INCLUDE = @CONFIG_INCLUDE@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = -DLOCALEDIR=\"$(localedir)\" @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DLL_VERSION = @DLL_VERSION@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EMULTIHOP_HIDDEN = @EMULTIHOP_HIDDEN@ EMULTIHOP_VALUE = @EMULTIHOP_VALUE@ ENOLINK_HIDDEN = @ENOLINK_HIDDEN@ ENOLINK_VALUE = @ENOLINK_VALUE@ EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@ EOVERFLOW_VALUE = @EOVERFLOW_VALUE@ ERRNO_H = @ERRNO_H@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GETOPT_H = @GETOPT_H@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GNULIB_CHDIR = @GNULIB_CHDIR@ GNULIB_CHOWN = @GNULIB_CHOWN@ GNULIB_CLOSE = @GNULIB_CLOSE@ GNULIB_DPRINTF = @GNULIB_DPRINTF@ GNULIB_DUP = @GNULIB_DUP@ GNULIB_DUP2 = @GNULIB_DUP2@ GNULIB_DUP3 = @GNULIB_DUP3@ GNULIB_ENVIRON = @GNULIB_ENVIRON@ GNULIB_EUIDACCESS = @GNULIB_EUIDACCESS@ GNULIB_FACCESSAT = @GNULIB_FACCESSAT@ GNULIB_FCHDIR = @GNULIB_FCHDIR@ GNULIB_FCHOWNAT = @GNULIB_FCHOWNAT@ GNULIB_FCLOSE = @GNULIB_FCLOSE@ GNULIB_FDATASYNC = @GNULIB_FDATASYNC@ GNULIB_FDOPEN = @GNULIB_FDOPEN@ GNULIB_FFLUSH = @GNULIB_FFLUSH@ GNULIB_FFSL = @GNULIB_FFSL@ GNULIB_FFSLL = @GNULIB_FFSLL@ GNULIB_FGETC = @GNULIB_FGETC@ GNULIB_FGETS = @GNULIB_FGETS@ GNULIB_FOPEN = @GNULIB_FOPEN@ GNULIB_FPRINTF = @GNULIB_FPRINTF@ GNULIB_FPRINTF_POSIX = @GNULIB_FPRINTF_POSIX@ GNULIB_FPURGE = @GNULIB_FPURGE@ GNULIB_FPUTC = @GNULIB_FPUTC@ GNULIB_FPUTS = @GNULIB_FPUTS@ GNULIB_FREAD = @GNULIB_FREAD@ GNULIB_FREOPEN = @GNULIB_FREOPEN@ GNULIB_FSCANF = @GNULIB_FSCANF@ GNULIB_FSEEK = @GNULIB_FSEEK@ GNULIB_FSEEKO = @GNULIB_FSEEKO@ GNULIB_FSYNC = @GNULIB_FSYNC@ GNULIB_FTELL = @GNULIB_FTELL@ GNULIB_FTELLO = @GNULIB_FTELLO@ GNULIB_FTRUNCATE = @GNULIB_FTRUNCATE@ GNULIB_FWRITE = @GNULIB_FWRITE@ GNULIB_GETC = @GNULIB_GETC@ GNULIB_GETCHAR = @GNULIB_GETCHAR@ GNULIB_GETCWD = @GNULIB_GETCWD@ GNULIB_GETDELIM = @GNULIB_GETDELIM@ GNULIB_GETDOMAINNAME = @GNULIB_GETDOMAINNAME@ GNULIB_GETDTABLESIZE = @GNULIB_GETDTABLESIZE@ GNULIB_GETGROUPS = @GNULIB_GETGROUPS@ GNULIB_GETHOSTNAME = @GNULIB_GETHOSTNAME@ GNULIB_GETLINE = @GNULIB_GETLINE@ GNULIB_GETLOGIN = @GNULIB_GETLOGIN@ GNULIB_GETLOGIN_R = @GNULIB_GETLOGIN_R@ GNULIB_GETPAGESIZE = @GNULIB_GETPAGESIZE@ GNULIB_GETUSERSHELL = @GNULIB_GETUSERSHELL@ GNULIB_GL_SRCGL_UNISTD_H_GETOPT = @GNULIB_GL_SRCGL_UNISTD_H_GETOPT@ GNULIB_GROUP_MEMBER = @GNULIB_GROUP_MEMBER@ GNULIB_ISATTY = @GNULIB_ISATTY@ GNULIB_LCHOWN = @GNULIB_LCHOWN@ GNULIB_LINK = @GNULIB_LINK@ GNULIB_LINKAT = @GNULIB_LINKAT@ GNULIB_LSEEK = @GNULIB_LSEEK@ GNULIB_MBSCASECMP = @GNULIB_MBSCASECMP@ GNULIB_MBSCASESTR = @GNULIB_MBSCASESTR@ GNULIB_MBSCHR = @GNULIB_MBSCHR@ GNULIB_MBSCSPN = @GNULIB_MBSCSPN@ GNULIB_MBSLEN = @GNULIB_MBSLEN@ GNULIB_MBSNCASECMP = @GNULIB_MBSNCASECMP@ GNULIB_MBSNLEN = @GNULIB_MBSNLEN@ GNULIB_MBSPBRK = @GNULIB_MBSPBRK@ GNULIB_MBSPCASECMP = @GNULIB_MBSPCASECMP@ GNULIB_MBSRCHR = @GNULIB_MBSRCHR@ GNULIB_MBSSEP = @GNULIB_MBSSEP@ GNULIB_MBSSPN = @GNULIB_MBSSPN@ GNULIB_MBSSTR = @GNULIB_MBSSTR@ GNULIB_MBSTOK_R = @GNULIB_MBSTOK_R@ GNULIB_MEMCHR = @GNULIB_MEMCHR@ GNULIB_MEMMEM = @GNULIB_MEMMEM@ GNULIB_MEMPCPY = @GNULIB_MEMPCPY@ GNULIB_MEMRCHR = @GNULIB_MEMRCHR@ GNULIB_OBSTACK_PRINTF = @GNULIB_OBSTACK_PRINTF@ GNULIB_OBSTACK_PRINTF_POSIX = @GNULIB_OBSTACK_PRINTF_POSIX@ GNULIB_PCLOSE = @GNULIB_PCLOSE@ GNULIB_PERROR = @GNULIB_PERROR@ GNULIB_PIPE = @GNULIB_PIPE@ GNULIB_PIPE2 = @GNULIB_PIPE2@ GNULIB_POPEN = @GNULIB_POPEN@ GNULIB_PREAD = @GNULIB_PREAD@ GNULIB_PRINTF = @GNULIB_PRINTF@ GNULIB_PRINTF_POSIX = @GNULIB_PRINTF_POSIX@ GNULIB_PUTC = @GNULIB_PUTC@ GNULIB_PUTCHAR = @GNULIB_PUTCHAR@ GNULIB_PUTS = @GNULIB_PUTS@ GNULIB_PWRITE = @GNULIB_PWRITE@ GNULIB_RAWMEMCHR = @GNULIB_RAWMEMCHR@ GNULIB_READ = @GNULIB_READ@ GNULIB_READLINK = @GNULIB_READLINK@ GNULIB_READLINKAT = @GNULIB_READLINKAT@ GNULIB_REMOVE = @GNULIB_REMOVE@ GNULIB_RENAME = @GNULIB_RENAME@ GNULIB_RENAMEAT = @GNULIB_RENAMEAT@ GNULIB_RMDIR = @GNULIB_RMDIR@ GNULIB_SCANF = @GNULIB_SCANF@ GNULIB_SETHOSTNAME = @GNULIB_SETHOSTNAME@ GNULIB_SLEEP = @GNULIB_SLEEP@ GNULIB_SNPRINTF = @GNULIB_SNPRINTF@ GNULIB_SPRINTF_POSIX = @GNULIB_SPRINTF_POSIX@ GNULIB_STDIO_H_NONBLOCKING = @GNULIB_STDIO_H_NONBLOCKING@ GNULIB_STDIO_H_SIGPIPE = @GNULIB_STDIO_H_SIGPIPE@ GNULIB_STPCPY = @GNULIB_STPCPY@ GNULIB_STPNCPY = @GNULIB_STPNCPY@ GNULIB_STRCASESTR = @GNULIB_STRCASESTR@ GNULIB_STRCHRNUL = @GNULIB_STRCHRNUL@ GNULIB_STRDUP = @GNULIB_STRDUP@ GNULIB_STRERROR = @GNULIB_STRERROR@ GNULIB_STRERROR_R = @GNULIB_STRERROR_R@ GNULIB_STRNCAT = @GNULIB_STRNCAT@ GNULIB_STRNDUP = @GNULIB_STRNDUP@ GNULIB_STRNLEN = @GNULIB_STRNLEN@ GNULIB_STRPBRK = @GNULIB_STRPBRK@ GNULIB_STRSEP = @GNULIB_STRSEP@ GNULIB_STRSIGNAL = @GNULIB_STRSIGNAL@ GNULIB_STRSTR = @GNULIB_STRSTR@ GNULIB_STRTOK_R = @GNULIB_STRTOK_R@ GNULIB_STRVERSCMP = @GNULIB_STRVERSCMP@ GNULIB_SYMLINK = @GNULIB_SYMLINK@ GNULIB_SYMLINKAT = @GNULIB_SYMLINKAT@ GNULIB_TMPFILE = @GNULIB_TMPFILE@ GNULIB_TTYNAME_R = @GNULIB_TTYNAME_R@ GNULIB_UNISTD_H_NONBLOCKING = @GNULIB_UNISTD_H_NONBLOCKING@ GNULIB_UNISTD_H_SIGPIPE = @GNULIB_UNISTD_H_SIGPIPE@ GNULIB_UNLINK = @GNULIB_UNLINK@ GNULIB_UNLINKAT = @GNULIB_UNLINKAT@ GNULIB_USLEEP = @GNULIB_USLEEP@ GNULIB_VASPRINTF = @GNULIB_VASPRINTF@ GNULIB_VDPRINTF = @GNULIB_VDPRINTF@ GNULIB_VFPRINTF = @GNULIB_VFPRINTF@ GNULIB_VFPRINTF_POSIX = @GNULIB_VFPRINTF_POSIX@ GNULIB_VFSCANF = @GNULIB_VFSCANF@ GNULIB_VPRINTF = @GNULIB_VPRINTF@ GNULIB_VPRINTF_POSIX = @GNULIB_VPRINTF_POSIX@ GNULIB_VSCANF = @GNULIB_VSCANF@ GNULIB_VSNPRINTF = @GNULIB_VSNPRINTF@ GNULIB_VSPRINTF_POSIX = @GNULIB_VSPRINTF_POSIX@ GNULIB_WRITE = @GNULIB_WRITE@ GREP = @GREP@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ HAVE_CHOWN = @HAVE_CHOWN@ HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@ HAVE_DECL_FCHDIR = @HAVE_DECL_FCHDIR@ HAVE_DECL_FDATASYNC = @HAVE_DECL_FDATASYNC@ HAVE_DECL_FPURGE = @HAVE_DECL_FPURGE@ HAVE_DECL_FSEEKO = @HAVE_DECL_FSEEKO@ HAVE_DECL_FTELLO = @HAVE_DECL_FTELLO@ HAVE_DECL_GETDELIM = @HAVE_DECL_GETDELIM@ HAVE_DECL_GETDOMAINNAME = @HAVE_DECL_GETDOMAINNAME@ HAVE_DECL_GETLINE = @HAVE_DECL_GETLINE@ HAVE_DECL_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_OBSTACK_PRINTF = @HAVE_DECL_OBSTACK_PRINTF@ HAVE_DECL_SETHOSTNAME = @HAVE_DECL_SETHOSTNAME@ HAVE_DECL_SNPRINTF = @HAVE_DECL_SNPRINTF@ HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@ HAVE_DECL_STRERROR_R = @HAVE_DECL_STRERROR_R@ HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@ HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@ HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@ HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@ HAVE_DECL_TTYNAME_R = @HAVE_DECL_TTYNAME_R@ HAVE_DECL_VSNPRINTF = @HAVE_DECL_VSNPRINTF@ HAVE_DPRINTF = @HAVE_DPRINTF@ HAVE_DUP2 = @HAVE_DUP2@ HAVE_DUP3 = @HAVE_DUP3@ HAVE_EUIDACCESS = @HAVE_EUIDACCESS@ HAVE_FACCESSAT = @HAVE_FACCESSAT@ HAVE_FCHDIR = @HAVE_FCHDIR@ HAVE_FCHOWNAT = @HAVE_FCHOWNAT@ HAVE_FDATASYNC = @HAVE_FDATASYNC@ HAVE_FFSL = @HAVE_FFSL@ HAVE_FFSLL = @HAVE_FFSLL@ HAVE_FSEEKO = @HAVE_FSEEKO@ HAVE_FSYNC = @HAVE_FSYNC@ HAVE_FTELLO = @HAVE_FTELLO@ HAVE_FTRUNCATE = @HAVE_FTRUNCATE@ 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_GROUP_MEMBER = @HAVE_GROUP_MEMBER@ HAVE_LCHOWN = @HAVE_LCHOWN@ HAVE_LIBSHISHI = @HAVE_LIBSHISHI@ HAVE_LINK = @HAVE_LINK@ HAVE_LINKAT = @HAVE_LINKAT@ HAVE_MBSLEN = @HAVE_MBSLEN@ HAVE_MEMCHR = @HAVE_MEMCHR@ HAVE_MEMPCPY = @HAVE_MEMPCPY@ HAVE_MSVC_INVALID_PARAMETER_HANDLER = @HAVE_MSVC_INVALID_PARAMETER_HANDLER@ HAVE_OS_H = @HAVE_OS_H@ HAVE_PCLOSE = @HAVE_PCLOSE@ HAVE_PIPE = @HAVE_PIPE@ HAVE_PIPE2 = @HAVE_PIPE2@ HAVE_POPEN = @HAVE_POPEN@ HAVE_PREAD = @HAVE_PREAD@ HAVE_PWRITE = @HAVE_PWRITE@ HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@ HAVE_READLINK = @HAVE_READLINK@ HAVE_READLINKAT = @HAVE_READLINKAT@ HAVE_RENAMEAT = @HAVE_RENAMEAT@ HAVE_SETHOSTNAME = @HAVE_SETHOSTNAME@ HAVE_SLEEP = @HAVE_SLEEP@ 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_STRVERSCMP = @HAVE_STRVERSCMP@ HAVE_SYMLINK = @HAVE_SYMLINK@ HAVE_SYMLINKAT = @HAVE_SYMLINKAT@ HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@ HAVE_UNISTD_H = @HAVE_UNISTD_H@ HAVE_UNLINKAT = @HAVE_UNLINKAT@ HAVE_USLEEP = @HAVE_USLEEP@ HAVE_VASPRINTF = @HAVE_VASPRINTF@ HAVE_VDPRINTF = @HAVE_VDPRINTF@ HAVE_WCHAR_T = @HAVE_WCHAR_T@ HAVE_WINSOCK2_H = @HAVE_WINSOCK2_H@ HAVE__BOOL = @HAVE__BOOL@ HELP2MAN = @HELP2MAN@ HTML_DIR = @HTML_DIR@ INCLUDE_GSS_KRB5 = @INCLUDE_GSS_KRB5@ INCLUDE_GSS_KRB5_EXT = @INCLUDE_GSS_KRB5_EXT@ 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@ INTLLIBS = @INTLLIBS@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBSHISHI = @LIBSHISHI@ LIBSHISHI_PREFIX = @LIBSHISHI_PREFIX@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBOBJS = @LTLIBOBJS@ LTLIBSHISHI = @LTLIBSHISHI@ LT_AGE = @LT_AGE@ LT_CURRENT = @LT_CURRENT@ LT_REVISION = @LT_REVISION@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = @NEXT_AS_FIRST_DIRECTIVE_ERRNO_H@ NEXT_AS_FIRST_DIRECTIVE_GETOPT_H = @NEXT_AS_FIRST_DIRECTIVE_GETOPT_H@ NEXT_AS_FIRST_DIRECTIVE_STDARG_H = @NEXT_AS_FIRST_DIRECTIVE_STDARG_H@ NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@ NEXT_AS_FIRST_DIRECTIVE_STDIO_H = @NEXT_AS_FIRST_DIRECTIVE_STDIO_H@ NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H@ NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@ NEXT_ERRNO_H = @NEXT_ERRNO_H@ NEXT_GETOPT_H = @NEXT_GETOPT_H@ NEXT_STDARG_H = @NEXT_STDARG_H@ NEXT_STDDEF_H = @NEXT_STDDEF_H@ NEXT_STDIO_H = @NEXT_STDIO_H@ NEXT_STRING_H = @NEXT_STRING_H@ NEXT_SYS_TYPES_H = @NEXT_SYS_TYPES_H@ NEXT_UNISTD_H = @NEXT_UNISTD_H@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ PKG_CONFIG = @PKG_CONFIG@ PMCCABE = @PMCCABE@ POSUB = @POSUB@ PO_SUFFIX = @PO_SUFFIX@ PRAGMA_COLUMNS = @PRAGMA_COLUMNS@ PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@ RANLIB = @RANLIB@ REPLACE_CHOWN = @REPLACE_CHOWN@ REPLACE_CLOSE = @REPLACE_CLOSE@ REPLACE_DPRINTF = @REPLACE_DPRINTF@ REPLACE_DUP = @REPLACE_DUP@ REPLACE_DUP2 = @REPLACE_DUP2@ REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@ REPLACE_FCLOSE = @REPLACE_FCLOSE@ REPLACE_FDOPEN = @REPLACE_FDOPEN@ REPLACE_FFLUSH = @REPLACE_FFLUSH@ REPLACE_FOPEN = @REPLACE_FOPEN@ REPLACE_FPRINTF = @REPLACE_FPRINTF@ REPLACE_FPURGE = @REPLACE_FPURGE@ REPLACE_FREOPEN = @REPLACE_FREOPEN@ REPLACE_FSEEK = @REPLACE_FSEEK@ REPLACE_FSEEKO = @REPLACE_FSEEKO@ REPLACE_FTELL = @REPLACE_FTELL@ REPLACE_FTELLO = @REPLACE_FTELLO@ REPLACE_FTRUNCATE = @REPLACE_FTRUNCATE@ REPLACE_GETCWD = @REPLACE_GETCWD@ REPLACE_GETDELIM = @REPLACE_GETDELIM@ REPLACE_GETDOMAINNAME = @REPLACE_GETDOMAINNAME@ REPLACE_GETDTABLESIZE = @REPLACE_GETDTABLESIZE@ REPLACE_GETGROUPS = @REPLACE_GETGROUPS@ REPLACE_GETLINE = @REPLACE_GETLINE@ REPLACE_GETLOGIN_R = @REPLACE_GETLOGIN_R@ REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@ REPLACE_ISATTY = @REPLACE_ISATTY@ REPLACE_LCHOWN = @REPLACE_LCHOWN@ REPLACE_LINK = @REPLACE_LINK@ REPLACE_LINKAT = @REPLACE_LINKAT@ REPLACE_LSEEK = @REPLACE_LSEEK@ REPLACE_MEMCHR = @REPLACE_MEMCHR@ REPLACE_MEMMEM = @REPLACE_MEMMEM@ REPLACE_NULL = @REPLACE_NULL@ REPLACE_OBSTACK_PRINTF = @REPLACE_OBSTACK_PRINTF@ REPLACE_PERROR = @REPLACE_PERROR@ REPLACE_POPEN = @REPLACE_POPEN@ REPLACE_PREAD = @REPLACE_PREAD@ REPLACE_PRINTF = @REPLACE_PRINTF@ REPLACE_PWRITE = @REPLACE_PWRITE@ REPLACE_READ = @REPLACE_READ@ REPLACE_READLINK = @REPLACE_READLINK@ REPLACE_REMOVE = @REPLACE_REMOVE@ REPLACE_RENAME = @REPLACE_RENAME@ REPLACE_RENAMEAT = @REPLACE_RENAMEAT@ REPLACE_RMDIR = @REPLACE_RMDIR@ REPLACE_SLEEP = @REPLACE_SLEEP@ REPLACE_SNPRINTF = @REPLACE_SNPRINTF@ REPLACE_SPRINTF = @REPLACE_SPRINTF@ REPLACE_STDIO_READ_FUNCS = @REPLACE_STDIO_READ_FUNCS@ REPLACE_STDIO_WRITE_FUNCS = @REPLACE_STDIO_WRITE_FUNCS@ REPLACE_STPNCPY = @REPLACE_STPNCPY@ REPLACE_STRCASESTR = @REPLACE_STRCASESTR@ REPLACE_STRCHRNUL = @REPLACE_STRCHRNUL@ REPLACE_STRDUP = @REPLACE_STRDUP@ REPLACE_STRERROR = @REPLACE_STRERROR@ REPLACE_STRERROR_R = @REPLACE_STRERROR_R@ REPLACE_STRNCAT = @REPLACE_STRNCAT@ REPLACE_STRNDUP = @REPLACE_STRNDUP@ REPLACE_STRNLEN = @REPLACE_STRNLEN@ REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@ REPLACE_STRSTR = @REPLACE_STRSTR@ REPLACE_STRTOK_R = @REPLACE_STRTOK_R@ REPLACE_SYMLINK = @REPLACE_SYMLINK@ REPLACE_TMPFILE = @REPLACE_TMPFILE@ REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@ REPLACE_UNLINK = @REPLACE_UNLINK@ REPLACE_UNLINKAT = @REPLACE_UNLINKAT@ REPLACE_USLEEP = @REPLACE_USLEEP@ REPLACE_VASPRINTF = @REPLACE_VASPRINTF@ REPLACE_VDPRINTF = @REPLACE_VDPRINTF@ REPLACE_VFPRINTF = @REPLACE_VFPRINTF@ REPLACE_VPRINTF = @REPLACE_VPRINTF@ REPLACE_VSNPRINTF = @REPLACE_VSNPRINTF@ REPLACE_VSPRINTF = @REPLACE_VSPRINTF@ REPLACE_WRITE = @REPLACE_WRITE@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STDARG_H = @STDARG_H@ STDBOOL_H = @STDBOOL_H@ STDDEF_H = @STDDEF_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@ USE_NLS = @USE_NLS@ VALGRIND = @VALGRIND@ VERSION = @VERSION@ VERSION_MAJOR = @VERSION_MAJOR@ VERSION_MINOR = @VERSION_MINOR@ VERSION_NUMBER = @VERSION_NUMBER@ VERSION_PATCH = @VERSION_PATCH@ WARN_CFLAGS = @WARN_CFLAGS@ WERROR_CFLAGS = @WERROR_CFLAGS@ WINDOWS_64_BIT_OFF_T = @WINDOWS_64_BIT_OFF_T@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ # For gettext. 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@ libdir = @libdir@ libexecdir = @libexecdir@ libgl_LIBOBJS = @libgl_LIBOBJS@ libgl_LTLIBOBJS = @libgl_LTLIBOBJS@ libgltests_LIBOBJS = @libgltests_LIBOBJS@ libgltests_LTLIBOBJS = @libgltests_LTLIBOBJS@ libgltests_WITNESS = @libgltests_WITNESS@ localedir = $(datadir)/locale localstatedir = @localstatedir@ 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@ srcgl_LIBOBJS = @srcgl_LIBOBJS@ srcgl_LTLIBOBJS = @srcgl_LTLIBOBJS@ srcgltests_LIBOBJS = @srcgltests_LIBOBJS@ srcgltests_LTLIBOBJS = @srcgltests_LTLIBOBJS@ srcgltests_WITNESS = @srcgltests_WITNESS@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ SUBDIRS = gl AM_CFLAGS = $(WARN_CFLAGS) $(WERROR_CFLAGS) AM_CPPFLAGS = -I$(top_srcdir)/gl \ -I$(top_srcdir)/src/gl -I$(top_builddir)/src/gl \ -I$(top_builddir)/lib/headers -I$(top_srcdir)/lib/headers gss_SOURCES = gss.c gss_LDADD = ../lib/libgss.la gl/libgnu.la @LTLIBINTL@ libcmd-gss.la BUILT_SOURCES = gss_cmd.c gss_cmd.h MAINTAINERCLEANFILES = $(BUILT_SOURCES) noinst_LTLIBRARIES = libcmd-gss.la libcmd_gss_la_CFLAGS = libcmd_gss_la_SOURCES = gss.ggo $(BUILT_SOURCES) libcmd_gss_la_LIBADD = gl/libgnu.la 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) --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): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libcmd-gss.la: $(libcmd_gss_la_OBJECTS) $(libcmd_gss_la_DEPENDENCIES) $(EXTRA_libcmd_gss_la_DEPENDENCIES) $(AM_V_CCLD)$(libcmd_gss_la_LINK) $(libcmd_gss_la_OBJECTS) $(libcmd_gss_la_LIBADD) $(LIBS) install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ fi; \ 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 gss$(EXEEXT): $(gss_OBJECTS) $(gss_DEPENDENCIES) $(EXTRA_gss_DEPENDENCIES) @rm -f gss$(EXEEXT) $(AM_V_CCLD)$(LINK) $(gss_OBJECTS) $(gss_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/gss.Po@am__quote@ @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcmd_gss_la-gss_cmd.Plo@am__quote@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< libcmd_gss_la-gss_cmd.lo: gss_cmd.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcmd_gss_la_CFLAGS) $(CFLAGS) -MT libcmd_gss_la-gss_cmd.lo -MD -MP -MF $(DEPDIR)/libcmd_gss_la-gss_cmd.Tpo -c -o libcmd_gss_la-gss_cmd.lo `test -f 'gss_cmd.c' || echo '$(srcdir)/'`gss_cmd.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/libcmd_gss_la-gss_cmd.Tpo $(DEPDIR)/libcmd_gss_la-gss_cmd.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gss_cmd.c' object='libcmd_gss_la-gss_cmd.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(libcmd_gss_la_CFLAGS) $(CFLAGS) -c -o libcmd_gss_la-gss_cmd.lo `test -f 'gss_cmd.c' || echo '$(srcdir)/'`gss_cmd.c 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. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) check-recursive all-am: Makefile $(LTLIBRARIES) $(PROGRAMS) installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(bindir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done 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: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-recursive clean-am: clean-binPROGRAMS clean-generic clean-libtool \ 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-binPROGRAMS 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-binPROGRAMS .MAKE: $(am__recursive_targets) all check install install-am \ install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ check-am clean clean-binPROGRAMS clean-generic clean-libtool \ clean-noinstLTLIBRARIES cscopelist-am ctags ctags-am 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 installdirs-am maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am uninstall-binPROGRAMS gss.c: $(BUILT_SOURCES) $(BUILT_SOURCES): gss.ggo gengetopt --no-handle-help --no-handle-version \ --input $^ --file-name gss_cmd # 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: ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gss-1.0.3/src/gss.ggo�������������������������������������������������������������������������������0000664�0000000�0000000�00000002462�12415506237�011272� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# gss.ggo --- Run gengetopt on this file to produce gss_cmd.*. -*- sh -*- # Copyright (C) 2003-2014 Simon Josefsson # # This file is part of the Generic Security Service (GSS). # # GSS 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. # # GSS 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 GSS; if not, see http://www.gnu.org/licenses or write to # the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, # Boston, MA 02110-1301, USA. purpose "Command line interface to GSS, used to explain error codes." option "major" m "See gss.c for doc string" long no option "list-mechanisms" l "See gss.c for doc string" no option "accept-sec-context" a "See gss.c for doc string" argoptional string no option "init-sec-context" i "See gss.c for doc string" string no option "server-name" n "See gss.c for doc string" string no option "quiet" q "Silent operation" flag off ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gss-1.0.3/src/gss_cmd.c�����������������������������������������������������������������������������0000644�0000000�0000000�00000042616�12415507647�011574� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* File autogenerated by gengetopt version 2.22.6 generated with the following command: gengetopt --no-handle-help --no-handle-version --input gss.ggo --file-name gss_cmd The developers of gengetopt consider the fixed text that goes in all gengetopt output files to be in the public domain: we make no copyright claims on it. */ /* If we use autoconf. */ #ifdef HAVE_CONFIG_H #include "config.h" #endif #include <stdio.h> #include <stdlib.h> #include <string.h> #ifndef FIX_UNUSED #define FIX_UNUSED(X) (void) (X) /* avoid warnings for unused params */ #endif #include <getopt.h> #include "gss_cmd.h" const char *gengetopt_args_info_purpose = "Command line interface to GSS, used to explain error codes."; const char *gengetopt_args_info_usage = "Usage: " CMDLINE_PARSER_PACKAGE " [OPTIONS]..."; const char *gengetopt_args_info_versiontext = ""; const char *gengetopt_args_info_description = ""; const char *gengetopt_args_info_help[] = { " -h, --help Print help and exit", " -V, --version Print version and exit", " -m, --major=LONG See gss.c for doc string", " -l, --list-mechanisms See gss.c for doc string", " -a, --accept-sec-context[=STRING]\n See gss.c for doc string", " -i, --init-sec-context=STRING See gss.c for doc string", " -n, --server-name=STRING See gss.c for doc string", " -q, --quiet Silent operation (default=off)", 0 }; typedef enum {ARG_NO , ARG_FLAG , ARG_STRING , ARG_LONG } cmdline_parser_arg_type; static void clear_given (struct gengetopt_args_info *args_info); static void clear_args (struct gengetopt_args_info *args_info); static int cmdline_parser_internal (int argc, char **argv, struct gengetopt_args_info *args_info, struct cmdline_parser_params *params, const char *additional_error); static char * gengetopt_strdup (const char *s); static void clear_given (struct gengetopt_args_info *args_info) { args_info->help_given = 0 ; args_info->version_given = 0 ; args_info->major_given = 0 ; args_info->list_mechanisms_given = 0 ; args_info->accept_sec_context_given = 0 ; args_info->init_sec_context_given = 0 ; args_info->server_name_given = 0 ; args_info->quiet_given = 0 ; } static void clear_args (struct gengetopt_args_info *args_info) { FIX_UNUSED (args_info); args_info->major_orig = NULL; args_info->accept_sec_context_arg = NULL; args_info->accept_sec_context_orig = NULL; args_info->init_sec_context_arg = NULL; args_info->init_sec_context_orig = NULL; args_info->server_name_arg = NULL; args_info->server_name_orig = NULL; args_info->quiet_flag = 0; } static void init_args_info(struct gengetopt_args_info *args_info) { args_info->help_help = gengetopt_args_info_help[0] ; args_info->version_help = gengetopt_args_info_help[1] ; args_info->major_help = gengetopt_args_info_help[2] ; args_info->list_mechanisms_help = gengetopt_args_info_help[3] ; args_info->accept_sec_context_help = gengetopt_args_info_help[4] ; args_info->init_sec_context_help = gengetopt_args_info_help[5] ; args_info->server_name_help = gengetopt_args_info_help[6] ; args_info->quiet_help = gengetopt_args_info_help[7] ; } void cmdline_parser_print_version (void) { printf ("%s %s\n", (strlen(CMDLINE_PARSER_PACKAGE_NAME) ? CMDLINE_PARSER_PACKAGE_NAME : CMDLINE_PARSER_PACKAGE), CMDLINE_PARSER_VERSION); if (strlen(gengetopt_args_info_versiontext) > 0) printf("\n%s\n", gengetopt_args_info_versiontext); } static void print_help_common(void) { cmdline_parser_print_version (); if (strlen(gengetopt_args_info_purpose) > 0) printf("\n%s\n", gengetopt_args_info_purpose); if (strlen(gengetopt_args_info_usage) > 0) printf("\n%s\n", gengetopt_args_info_usage); printf("\n"); if (strlen(gengetopt_args_info_description) > 0) printf("%s\n\n", gengetopt_args_info_description); } void cmdline_parser_print_help (void) { int i = 0; print_help_common(); while (gengetopt_args_info_help[i]) printf("%s\n", gengetopt_args_info_help[i++]); } void cmdline_parser_init (struct gengetopt_args_info *args_info) { clear_given (args_info); clear_args (args_info); init_args_info (args_info); } void cmdline_parser_params_init(struct cmdline_parser_params *params) { if (params) { params->override = 0; params->initialize = 1; params->check_required = 1; params->check_ambiguity = 0; params->print_errors = 1; } } struct cmdline_parser_params * cmdline_parser_params_create(void) { struct cmdline_parser_params *params = (struct cmdline_parser_params *)malloc(sizeof(struct cmdline_parser_params)); cmdline_parser_params_init(params); return params; } static void free_string_field (char **s) { if (*s) { free (*s); *s = 0; } } static void cmdline_parser_release (struct gengetopt_args_info *args_info) { free_string_field (&(args_info->major_orig)); free_string_field (&(args_info->accept_sec_context_arg)); free_string_field (&(args_info->accept_sec_context_orig)); free_string_field (&(args_info->init_sec_context_arg)); free_string_field (&(args_info->init_sec_context_orig)); free_string_field (&(args_info->server_name_arg)); free_string_field (&(args_info->server_name_orig)); clear_given (args_info); } static void write_into_file(FILE *outfile, const char *opt, const char *arg, const char *values[]) { FIX_UNUSED (values); if (arg) { fprintf(outfile, "%s=\"%s\"\n", opt, arg); } else { fprintf(outfile, "%s\n", opt); } } int cmdline_parser_dump(FILE *outfile, struct gengetopt_args_info *args_info) { int i = 0; if (!outfile) { fprintf (stderr, "%s: cannot dump options to stream\n", CMDLINE_PARSER_PACKAGE); return EXIT_FAILURE; } if (args_info->help_given) write_into_file(outfile, "help", 0, 0 ); if (args_info->version_given) write_into_file(outfile, "version", 0, 0 ); if (args_info->major_given) write_into_file(outfile, "major", args_info->major_orig, 0); if (args_info->list_mechanisms_given) write_into_file(outfile, "list-mechanisms", 0, 0 ); if (args_info->accept_sec_context_given) write_into_file(outfile, "accept-sec-context", args_info->accept_sec_context_orig, 0); if (args_info->init_sec_context_given) write_into_file(outfile, "init-sec-context", args_info->init_sec_context_orig, 0); if (args_info->server_name_given) write_into_file(outfile, "server-name", args_info->server_name_orig, 0); if (args_info->quiet_given) write_into_file(outfile, "quiet", 0, 0 ); i = EXIT_SUCCESS; return i; } int cmdline_parser_file_save(const char *filename, struct gengetopt_args_info *args_info) { FILE *outfile; int i = 0; outfile = fopen(filename, "w"); if (!outfile) { fprintf (stderr, "%s: cannot open file for writing: %s\n", CMDLINE_PARSER_PACKAGE, filename); return EXIT_FAILURE; } i = cmdline_parser_dump(outfile, args_info); fclose (outfile); return i; } void cmdline_parser_free (struct gengetopt_args_info *args_info) { cmdline_parser_release (args_info); } /** @brief replacement of strdup, which is not standard */ char * gengetopt_strdup (const char *s) { char *result = 0; if (!s) return result; result = (char*)malloc(strlen(s) + 1); if (result == (char*)0) return (char*)0; strcpy(result, s); return result; } int cmdline_parser (int argc, char **argv, struct gengetopt_args_info *args_info) { return cmdline_parser2 (argc, argv, args_info, 0, 1, 1); } int cmdline_parser_ext (int argc, char **argv, struct gengetopt_args_info *args_info, struct cmdline_parser_params *params) { int result; result = cmdline_parser_internal (argc, argv, args_info, params, 0); if (result == EXIT_FAILURE) { cmdline_parser_free (args_info); exit (EXIT_FAILURE); } return result; } int cmdline_parser2 (int argc, char **argv, struct gengetopt_args_info *args_info, int override, int initialize, int check_required) { int result; struct cmdline_parser_params params; params.override = override; params.initialize = initialize; params.check_required = check_required; params.check_ambiguity = 0; params.print_errors = 1; result = cmdline_parser_internal (argc, argv, args_info, ¶ms, 0); if (result == EXIT_FAILURE) { cmdline_parser_free (args_info); exit (EXIT_FAILURE); } return result; } int cmdline_parser_required (struct gengetopt_args_info *args_info, const char *prog_name) { FIX_UNUSED (args_info); FIX_UNUSED (prog_name); return EXIT_SUCCESS; } static char *package_name = 0; /** * @brief updates an option * @param field the generic pointer to the field to update * @param orig_field the pointer to the orig field * @param field_given the pointer to the number of occurrence of this option * @param prev_given the pointer to the number of occurrence already seen * @param value the argument for this option (if null no arg was specified) * @param possible_values the possible values for this option (if specified) * @param default_value the default value (in case the option only accepts fixed values) * @param arg_type the type of this option * @param check_ambiguity @see cmdline_parser_params.check_ambiguity * @param override @see cmdline_parser_params.override * @param no_free whether to free a possible previous value * @param multiple_option whether this is a multiple option * @param long_opt the corresponding long option * @param short_opt the corresponding short option (or '-' if none) * @param additional_error possible further error specification */ static int update_arg(void *field, char **orig_field, unsigned int *field_given, unsigned int *prev_given, char *value, const char *possible_values[], const char *default_value, cmdline_parser_arg_type arg_type, int check_ambiguity, int override, int no_free, int multiple_option, const char *long_opt, char short_opt, const char *additional_error) { char *stop_char = 0; const char *val = value; int found; char **string_field; FIX_UNUSED (field); stop_char = 0; found = 0; if (!multiple_option && prev_given && (*prev_given || (check_ambiguity && *field_given))) { if (short_opt != '-') fprintf (stderr, "%s: `--%s' (`-%c') option given more than once%s\n", package_name, long_opt, short_opt, (additional_error ? additional_error : "")); else fprintf (stderr, "%s: `--%s' option given more than once%s\n", package_name, long_opt, (additional_error ? additional_error : "")); return 1; /* failure */ } FIX_UNUSED (default_value); if (field_given && *field_given && ! override) return 0; if (prev_given) (*prev_given)++; if (field_given) (*field_given)++; if (possible_values) val = possible_values[found]; switch(arg_type) { case ARG_FLAG: *((int *)field) = !*((int *)field); break; case ARG_LONG: if (val) *((long *)field) = (long)strtol (val, &stop_char, 0); break; case ARG_STRING: if (val) { string_field = (char **)field; if (!no_free && *string_field) free (*string_field); /* free previous string */ *string_field = gengetopt_strdup (val); } break; default: break; }; /* check numeric conversion */ switch(arg_type) { case ARG_LONG: if (val && !(stop_char && *stop_char == '\0')) { fprintf(stderr, "%s: invalid numeric value: %s\n", package_name, val); return 1; /* failure */ } break; default: ; }; /* store the original value */ switch(arg_type) { case ARG_NO: case ARG_FLAG: break; default: if (value && orig_field) { if (no_free) { *orig_field = value; } else { if (*orig_field) free (*orig_field); /* free previous string */ *orig_field = gengetopt_strdup (value); } } }; return 0; /* OK */ } int cmdline_parser_internal ( int argc, char **argv, struct gengetopt_args_info *args_info, struct cmdline_parser_params *params, const char *additional_error) { int c; /* Character of the parsed option. */ int error_occurred = 0; struct gengetopt_args_info local_args_info; int override; int initialize; int check_required; int check_ambiguity; package_name = argv[0]; override = params->override; initialize = params->initialize; check_required = params->check_required; check_ambiguity = params->check_ambiguity; if (initialize) cmdline_parser_init (args_info); cmdline_parser_init (&local_args_info); optarg = 0; optind = 0; opterr = params->print_errors; optopt = '?'; while (1) { int option_index = 0; static struct option long_options[] = { { "help", 0, NULL, 'h' }, { "version", 0, NULL, 'V' }, { "major", 1, NULL, 'm' }, { "list-mechanisms", 0, NULL, 'l' }, { "accept-sec-context", 2, NULL, 'a' }, { "init-sec-context", 1, NULL, 'i' }, { "server-name", 1, NULL, 'n' }, { "quiet", 0, NULL, 'q' }, { 0, 0, 0, 0 } }; c = getopt_long (argc, argv, "hVm:la::i:n:q", long_options, &option_index); if (c == -1) break; /* Exit from `while (1)' loop. */ switch (c) { case 'h': /* Print help and exit. */ if (update_arg( 0 , 0 , &(args_info->help_given), &(local_args_info.help_given), optarg, 0, 0, ARG_NO, check_ambiguity, override, 0, 0, "help", 'h', additional_error)) goto failure; cmdline_parser_free (&local_args_info); return 0; break; case 'V': /* Print version and exit. */ if (update_arg( 0 , 0 , &(args_info->version_given), &(local_args_info.version_given), optarg, 0, 0, ARG_NO, check_ambiguity, override, 0, 0, "version", 'V', additional_error)) goto failure; cmdline_parser_free (&local_args_info); return 0; break; case 'm': /* See gss.c for doc string. */ if (update_arg( (void *)&(args_info->major_arg), &(args_info->major_orig), &(args_info->major_given), &(local_args_info.major_given), optarg, 0, 0, ARG_LONG, check_ambiguity, override, 0, 0, "major", 'm', additional_error)) goto failure; break; case 'l': /* See gss.c for doc string. */ if (update_arg( 0 , 0 , &(args_info->list_mechanisms_given), &(local_args_info.list_mechanisms_given), optarg, 0, 0, ARG_NO, check_ambiguity, override, 0, 0, "list-mechanisms", 'l', additional_error)) goto failure; break; case 'a': /* See gss.c for doc string. */ if (update_arg( (void *)&(args_info->accept_sec_context_arg), &(args_info->accept_sec_context_orig), &(args_info->accept_sec_context_given), &(local_args_info.accept_sec_context_given), optarg, 0, 0, ARG_STRING, check_ambiguity, override, 0, 0, "accept-sec-context", 'a', additional_error)) goto failure; break; case 'i': /* See gss.c for doc string. */ if (update_arg( (void *)&(args_info->init_sec_context_arg), &(args_info->init_sec_context_orig), &(args_info->init_sec_context_given), &(local_args_info.init_sec_context_given), optarg, 0, 0, ARG_STRING, check_ambiguity, override, 0, 0, "init-sec-context", 'i', additional_error)) goto failure; break; case 'n': /* See gss.c for doc string. */ if (update_arg( (void *)&(args_info->server_name_arg), &(args_info->server_name_orig), &(args_info->server_name_given), &(local_args_info.server_name_given), optarg, 0, 0, ARG_STRING, check_ambiguity, override, 0, 0, "server-name", 'n', additional_error)) goto failure; break; case 'q': /* Silent operation. */ if (update_arg((void *)&(args_info->quiet_flag), 0, &(args_info->quiet_given), &(local_args_info.quiet_given), optarg, 0, 0, ARG_FLAG, check_ambiguity, override, 1, 0, "quiet", 'q', additional_error)) goto failure; break; case 0: /* Long option with no short option */ case '?': /* Invalid option. */ /* `getopt_long' already printed an error message. */ goto failure; default: /* bug: option not considered. */ fprintf (stderr, "%s: option unknown: %c%s\n", CMDLINE_PARSER_PACKAGE, c, (additional_error ? additional_error : "")); abort (); } /* switch */ } /* while */ cmdline_parser_release (&local_args_info); if ( error_occurred ) return (EXIT_FAILURE); return 0; failure: cmdline_parser_release (&local_args_info); return (EXIT_FAILURE); } ������������������������������������������������������������������������������������������������������������������gss-1.0.3/README������������������������������������������������������������������������������������0000664�0000000�0000000�00000002724�12415506237�010072� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������GSS README -- Important introductory notes. Copyright (C) 2003-2014 Simon Josefsson See the end for copying conditions. This directory holds the Generic Security Service Library (GSSLib). See INSTALL for installation instructions, and doc/gss.{info,ps,pdf} for the manual. Unless you want to use this library to implement a new GSS mechanism, you will need to first install Shishi, as it is the only supported mechanism right now. See <http://www.gnu.org/software/shishi/> The GSS library (lib/) and test suite (tests/) are licensed under the GNU General Public License license version 3 or later (see COPYING), and the documentation (doc/) is licensed under the GNU Free Documentation License version 1.3 or later. The other sub-directories are included here for convenience, and are generated by other tools, or copied from other projects. If you need help to use Generic Security Service, or wish to help others, you are invited to join our mailing list help-gss@gnu.org, see <http://lists.gnu.org/mailman/listinfo/help-gss>. For updates to the project, see <http://www.gnu.org/software/gss/>. For any copyright year range specified as YYYY-ZZZZ in this package note that the range specifies every single year in that closed interval. ---------------------------------------------------------------------- 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. ��������������������������������������������gss-1.0.3/gtk-doc.make������������������������������������������������������������������������������0000664�0000000�0000000�00000020613�12012453517�011371� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# -*- mode: makefile -*- #################################### # Everything below here is generic # #################################### if GTK_DOC_USE_LIBTOOL GTKDOC_CC = $(LIBTOOL) --tag=CC --mode=compile $(CC) $(INCLUDES) $(GTKDOC_DEPS_CFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) GTKDOC_LD = $(LIBTOOL) --tag=CC --mode=link $(CC) $(GTKDOC_DEPS_LIBS) $(AM_CFLAGS) $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) GTKDOC_RUN = $(LIBTOOL) --mode=execute else GTKDOC_CC = $(CC) $(INCLUDES) $(GTKDOC_DEPS_CFLAGS) $(AM_CPPFLAGS) $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) GTKDOC_LD = $(CC) $(GTKDOC_DEPS_LIBS) $(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) SETUP_FILES = \ $(content_files) \ $(DOC_MAIN_SGML_FILE) \ $(DOC_MODULE)-sections.txt \ $(DOC_MODULE)-overrides.txt EXTRA_DIST = \ $(HTML_IMAGES) \ $(SETUP_FILES) DOC_STAMPS=setup-build.stamp scan-build.stamp tmpl-build.stamp sgml-build.stamp \ html-build.stamp pdf-build.stamp \ tmpl.stamp sgml.stamp html.stamp pdf.stamp SCANOBJ_FILES = \ $(DOC_MODULE).args \ $(DOC_MODULE).hierarchy \ $(DOC_MODULE).interfaces \ $(DOC_MODULE).prerequisites \ $(DOC_MODULE).signals REPORT_FILES = \ $(DOC_MODULE)-undocumented.txt \ $(DOC_MODULE)-undeclared.txt \ $(DOC_MODULE)-unused.txt CLEANFILES = $(SCANOBJ_FILES) $(REPORT_FILES) $(DOC_STAMPS) 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 #### setup #### setup-build.stamp: -@if test "$(abs_srcdir)" != "$(abs_builddir)" ; then \ echo ' DOC Preparing build'; \ files=`echo $(SETUP_FILES) $(expand_content_files) $(DOC_MODULE).types`; \ if test "x$$files" != "x" ; then \ for file in $$files ; do \ test -f $(abs_srcdir)/$$file && \ cp -pu $(abs_srcdir)/$$file $(abs_builddir)/ || true; \ done; \ fi; \ test -d $(abs_srcdir)/tmpl && \ { cp -rp $(abs_srcdir)/tmpl $(abs_builddir)/; \ chmod -R u+w $(abs_builddir)/tmpl; } \ fi @touch setup-build.stamp #### scan #### scan-build.stamp: $(HFILE_GLOB) $(CFILE_GLOB) @echo ' DOC Scanning header files' @_source_dir='' ; \ for i in $(DOC_SOURCE_DIR) ; do \ _source_dir="$${_source_dir} --source-dir=$$i" ; \ done ; \ gtkdoc-scan --module=$(DOC_MODULE) --ignore-headers="$(IGNORE_HFILES)" $${_source_dir} $(SCAN_OPTIONS) $(EXTRA_HFILES) @if grep -l '^..*$$' $(DOC_MODULE).types > /dev/null 2>&1 ; then \ echo " DOC Introspecting gobjects"; \ scanobj_options=""; \ gtkdoc-scangobj 2>&1 --help | grep >/dev/null "\-\-verbose"; \ if test "$(?)" = "0"; then \ if test "x$(V)" = "x1"; then \ scanobj_options="--verbose"; \ fi; \ fi; \ CC="$(GTKDOC_CC)" LD="$(GTKDOC_LD)" RUN="$(GTKDOC_RUN)" CFLAGS="$(GTKDOC_CFLAGS) $(CFLAGS)" LDFLAGS="$(GTKDOC_LIBS) $(LDFLAGS)" \ gtkdoc-scangobj $(SCANGOBJ_OPTIONS) $$scanobj_options --module=$(DOC_MODULE); \ else \ for i in $(SCANOBJ_FILES) ; do \ test -f $$i || touch $$i ; \ done \ fi @touch scan-build.stamp $(DOC_MODULE)-decl.txt $(SCANOBJ_FILES) $(DOC_MODULE)-sections.txt $(DOC_MODULE)-overrides.txt: scan-build.stamp @true #### templates #### tmpl-build.stamp: setup-build.stamp $(DOC_MODULE)-decl.txt $(SCANOBJ_FILES) $(DOC_MODULE)-sections.txt $(DOC_MODULE)-overrides.txt @echo ' DOC Rebuilding template files' @gtkdoc-mktmpl --module=$(DOC_MODULE) $(MKTMPL_OPTIONS) @if test "$(abs_srcdir)" != "$(abs_builddir)" ; then \ if test -w $(abs_srcdir) ; then \ cp -rp $(abs_builddir)/tmpl $(abs_srcdir)/; \ fi \ fi @touch tmpl-build.stamp tmpl.stamp: tmpl-build.stamp @true $(srcdir)/tmpl/*.sgml: @true #### xml #### sgml-build.stamp: tmpl.stamp $(DOC_MODULE)-sections.txt $(srcdir)/tmpl/*.sgml $(expand_content_files) @echo ' DOC Building XML' @-chmod -R u+w $(srcdir) @_source_dir='' ; \ for i in $(DOC_SOURCE_DIR) ; do \ _source_dir="$${_source_dir} --source-dir=$$i" ; \ done ; \ gtkdoc-mkdb --module=$(DOC_MODULE) --output-format=xml --expand-content-files="$(expand_content_files)" --main-sgml-file=$(DOC_MAIN_SGML_FILE) $${_source_dir} $(MKDB_OPTIONS) @touch sgml-build.stamp sgml.stamp: sgml-build.stamp @true #### html #### html-build.stamp: sgml.stamp $(DOC_MAIN_SGML_FILE) $(content_files) @echo ' DOC Building HTML' @rm -rf html @mkdir html @mkhtml_options=""; \ gtkdoc-mkhtml 2>&1 --help | grep >/dev/null "\-\-verbose"; \ if test "$(?)" = "0"; then \ if test "x$(V)" = "x1"; then \ mkhtml_options="$$mkhtml_options --verbose"; \ fi; \ fi; \ gtkdoc-mkhtml 2>&1 --help | grep >/dev/null "\-\-path"; \ if test "$(?)" = "0"; then \ mkhtml_options="$$mkhtml_options --path=\"$(abs_srcdir)\""; \ fi; \ cd html && gtkdoc-mkhtml $$mkhtml_options $(MKHTML_OPTIONS) $(DOC_MODULE) ../$(DOC_MAIN_SGML_FILE) -@test "x$(HTML_IMAGES)" = "x" || \ for file in $(HTML_IMAGES) ; do \ if test -f $(abs_srcdir)/$$file ; then \ cp $(abs_srcdir)/$$file $(abs_builddir)/html; \ fi; \ if test -f $(abs_builddir)/$$file ; then \ cp $(abs_builddir)/$$file $(abs_builddir)/html; \ fi; \ done; @echo ' DOC Fixing cross-references' @gtkdoc-fixxref --module=$(DOC_MODULE) --module-dir=html --html-dir=$(HTML_DIR) $(FIXXREF_OPTIONS) @touch html-build.stamp #### pdf #### pdf-build.stamp: sgml.stamp $(DOC_MAIN_SGML_FILE) $(content_files) @echo ' DOC Building PDF' @rm -f $(DOC_MODULE).pdf @mkpdf_options=""; \ gtkdoc-mkpdf 2>&1 --help | grep >/dev/null "\-\-verbose"; \ if test "$(?)" = "0"; then \ if test "x$(V)" = "x1"; then \ mkpdf_options="$$mkpdf_options --verbose"; \ fi; \ fi; \ if test "x$(HTML_IMAGES)" != "x"; then \ for img in $(HTML_IMAGES); do \ part=`dirname $$img`; \ echo $$mkpdf_options | grep >/dev/null "\-\-imgdir=$$part "; \ if test $$? != 0; then \ mkpdf_options="$$mkpdf_options --imgdir=$$part"; \ fi; \ done; \ fi; \ gtkdoc-mkpdf --path="$(abs_srcdir)" $$mkpdf_options $(DOC_MODULE) $(DOC_MAIN_SGML_FILE) $(MKPDF_OPTIONS) @touch pdf-build.stamp ############## clean-local: @rm -f *~ *.bak @rm -rf .libs distclean-local: @rm -rf xml html $(REPORT_FILES) $(DOC_MODULE).pdf \ $(DOC_MODULE)-decl-list.txt $(DOC_MODULE)-decl.txt @if test "$(abs_srcdir)" != "$(abs_builddir)" ; then \ rm -f $(SETUP_FILES) $(expand_content_files) $(DOC_MODULE).types; \ rm -rf tmpl; \ fi maintainer-clean-local: clean @rm -rf xml html install-data-local: @installfiles=`echo $(builddir)/html/*`; \ if test "$$installfiles" = '$(builddir)/html/*'; \ then echo 1>&2 'Nothing to install' ; \ else \ if test -n "$(DOC_MODULE_VERSION)"; then \ installdir="$(DESTDIR)$(TARGET_DIR)-$(DOC_MODULE_VERSION)"; \ else \ installdir="$(DESTDIR)$(TARGET_DIR)"; \ fi; \ $(mkinstalldirs) $${installdir} ; \ for i in $$installfiles; do \ echo ' $(INSTALL_DATA) '$$i ; \ $(INSTALL_DATA) $$i $${installdir}; \ done; \ if test -n "$(DOC_MODULE_VERSION)"; then \ mv -f $${installdir}/$(DOC_MODULE).devhelp2 \ $${installdir}/$(DOC_MODULE)-$(DOC_MODULE_VERSION).devhelp2; \ fi; \ $(GTKDOC_REBASE) --relative --dest-dir=$(DESTDIR) --html-dir=$${installdir}; \ fi uninstall-local: @if test -n "$(DOC_MODULE_VERSION)"; then \ installdir="$(DESTDIR)$(TARGET_DIR)-$(DOC_MODULE_VERSION)"; \ else \ installdir="$(DESTDIR)$(TARGET_DIR)"; \ fi; \ rm -rf $${installdir} # # Require gtk-doc when making dist # 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 ./tmpl/*.sgml $(distdir)/tmpl @cp ./html/* $(distdir)/html @-cp ./$(DOC_MODULE).pdf $(distdir)/ @-cp ./$(DOC_MODULE).types $(distdir)/ @-cp ./$(DOC_MODULE)-sections.txt $(distdir)/ @cd $(distdir) && rm -f $(DISTCLEANFILES) @$(GTKDOC_REBASE) --online --relative --html-dir=$(distdir)/html .PHONY : dist-hook-local docs ���������������������������������������������������������������������������������������������������������������������gss-1.0.3/gl/���������������������������������������������������������������������������������������0000755�0000000�0000000�00000000000�12415510376�007664� 5����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������gss-1.0.3/gl/Makefile.am����������������������������������������������������������������������������0000644�0000000�0000000�00000006736�12415470477�011663� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������## DO NOT EDIT! GENERATED AUTOMATICALLY! ## Process this file with automake to produce Makefile.in. # Copyright (C) 2002-2014 Free Software Foundation, Inc. # # 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 3 of the License, or # (at your option) any later version. # # This 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 file. If not, see <http://www.gnu.org/licenses/>. # # 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=gl/tests --aux-dir=build-aux --no-conditional-dependencies --libtool --macro-prefix=gl --no-vc-files autobuild fdl-1.3 gendocs gnupload havelib lib-symbol-versions maintainer-makefile manywarnings pmccabe2html update-copyright valgrind-tests warnings AUTOMAKE_OPTIONS = 1.9.6 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) libgnu_la_LDFLAGS += -no-undefined ## begin gnulib module gendocs EXTRA_DIST += $(top_srcdir)/build-aux/gendocs.sh ## end gnulib module gendocs ## begin gnulib module gnumakefile distclean-local: clean-GNUmakefile clean-GNUmakefile: test '$(srcdir)' = . || rm -f $(top_builddir)/GNUmakefile EXTRA_DIST += $(top_srcdir)/GNUmakefile ## end gnulib module gnumakefile ## begin gnulib module gnupload EXTRA_DIST += $(top_srcdir)/build-aux/gnupload ## end gnulib module gnupload ## begin gnulib module havelib EXTRA_DIST += $(top_srcdir)/build-aux/config.rpath ## end gnulib module havelib ## 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 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 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; \ : ����������������������������������gss-1.0.3/gl/dummy.c��������������������������������������������������������������������������������0000644�0000000�0000000�00000003254�12415470476�011115� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* A dummy file, to prevent empty libraries from breaking builds. Copyright (C) 2004, 2007, 2009-2014 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/>. */ /* 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 ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gss-1.0.3/gl/Makefile.in����������������������������������������������������������������������������0000644�0000000�0000000�00000117535�12415507621�011664� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Makefile.in generated by automake 1.14.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # Copyright (C) 2002-2014 Free Software Foundation, Inc. # # This file is 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 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 file. If not, see <http://www.gnu.org/licenses/>. # # 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=gl/tests --aux-dir=build-aux --no-conditional-dependencies --libtool --macro-prefix=gl --no-vc-files autobuild fdl-1.3 gendocs gnupload havelib lib-symbol-versions maintainer-makefile manywarnings pmccabe2html update-copyright valgrind-tests warnings VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = gl DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(top_srcdir)/build-aux/depcomp $(noinst_HEADERS) ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/src/gl/m4/base64.m4 \ $(top_srcdir)/src/gl/m4/errno_h.m4 \ $(top_srcdir)/src/gl/m4/error.m4 \ $(top_srcdir)/src/gl/m4/getopt.m4 \ $(top_srcdir)/src/gl/m4/gnulib-comp.m4 \ $(top_srcdir)/src/gl/m4/memchr.m4 \ $(top_srcdir)/src/gl/m4/mmap-anon.m4 \ $(top_srcdir)/src/gl/m4/msvc-inval.m4 \ $(top_srcdir)/src/gl/m4/msvc-nothrow.m4 \ $(top_srcdir)/src/gl/m4/nocrash.m4 \ $(top_srcdir)/src/gl/m4/off_t.m4 \ $(top_srcdir)/src/gl/m4/ssize_t.m4 \ $(top_srcdir)/src/gl/m4/stdarg.m4 \ $(top_srcdir)/src/gl/m4/stdbool.m4 \ $(top_srcdir)/src/gl/m4/stdio_h.m4 \ $(top_srcdir)/src/gl/m4/strerror.m4 \ $(top_srcdir)/src/gl/m4/sys_socket_h.m4 \ $(top_srcdir)/src/gl/m4/sys_types_h.m4 \ $(top_srcdir)/src/gl/m4/unistd_h.m4 \ $(top_srcdir)/src/gl/m4/version-etc.m4 \ $(top_srcdir)/lib/gl/m4/absolute-header.m4 \ $(top_srcdir)/lib/gl/m4/extensions.m4 \ $(top_srcdir)/lib/gl/m4/gnulib-comp.m4 \ $(top_srcdir)/lib/gl/m4/include_next.m4 \ $(top_srcdir)/lib/gl/m4/ld-output-def.m4 \ $(top_srcdir)/lib/gl/m4/stddef_h.m4 \ $(top_srcdir)/lib/gl/m4/string_h.m4 \ $(top_srcdir)/lib/gl/m4/strverscmp.m4 \ $(top_srcdir)/lib/gl/m4/warn-on-use.m4 \ $(top_srcdir)/gl/m4/00gnulib.m4 \ $(top_srcdir)/gl/m4/autobuild.m4 \ $(top_srcdir)/gl/m4/gnulib-common.m4 \ $(top_srcdir)/gl/m4/gnulib-comp.m4 \ $(top_srcdir)/gl/m4/ld-version-script.m4 \ $(top_srcdir)/gl/m4/manywarnings.m4 \ $(top_srcdir)/gl/m4/valgrind-tests.m4 \ $(top_srcdir)/gl/m4/warnings.m4 \ $(top_srcdir)/m4/extern-inline.m4 $(top_srcdir)/m4/gettext.m4 \ $(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \ $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.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/nls.m4 \ $(top_srcdir)/m4/pkg.m4 $(top_srcdir)/m4/po-suffix.m4 \ $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \ $(top_srcdir)/m4/wchar_t.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) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = libgnu_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(libgnu_la_LDFLAGS) $(LDFLAGS) -o $@ AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = 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) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libgnu_la_SOURCES) $(EXTRA_libgnu_la_SOURCES) DIST_SOURCES = $(libgnu_la_SOURCES) $(EXTRA_libgnu_la_SOURCES) RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac HEADERS = $(noinst_HEADERS) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ distdir am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags DIST_SUBDIRS = $(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@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ ARFLAGS = @ARFLAGS@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CONFIG_INCLUDE = @CONFIG_INCLUDE@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DLL_VERSION = @DLL_VERSION@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EMULTIHOP_HIDDEN = @EMULTIHOP_HIDDEN@ EMULTIHOP_VALUE = @EMULTIHOP_VALUE@ ENOLINK_HIDDEN = @ENOLINK_HIDDEN@ ENOLINK_VALUE = @ENOLINK_VALUE@ EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@ EOVERFLOW_VALUE = @EOVERFLOW_VALUE@ ERRNO_H = @ERRNO_H@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GETOPT_H = @GETOPT_H@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GNULIB_CHDIR = @GNULIB_CHDIR@ GNULIB_CHOWN = @GNULIB_CHOWN@ GNULIB_CLOSE = @GNULIB_CLOSE@ GNULIB_DPRINTF = @GNULIB_DPRINTF@ GNULIB_DUP = @GNULIB_DUP@ GNULIB_DUP2 = @GNULIB_DUP2@ GNULIB_DUP3 = @GNULIB_DUP3@ GNULIB_ENVIRON = @GNULIB_ENVIRON@ GNULIB_EUIDACCESS = @GNULIB_EUIDACCESS@ GNULIB_FACCESSAT = @GNULIB_FACCESSAT@ GNULIB_FCHDIR = @GNULIB_FCHDIR@ GNULIB_FCHOWNAT = @GNULIB_FCHOWNAT@ GNULIB_FCLOSE = @GNULIB_FCLOSE@ GNULIB_FDATASYNC = @GNULIB_FDATASYNC@ GNULIB_FDOPEN = @GNULIB_FDOPEN@ GNULIB_FFLUSH = @GNULIB_FFLUSH@ GNULIB_FFSL = @GNULIB_FFSL@ GNULIB_FFSLL = @GNULIB_FFSLL@ GNULIB_FGETC = @GNULIB_FGETC@ GNULIB_FGETS = @GNULIB_FGETS@ GNULIB_FOPEN = @GNULIB_FOPEN@ GNULIB_FPRINTF = @GNULIB_FPRINTF@ GNULIB_FPRINTF_POSIX = @GNULIB_FPRINTF_POSIX@ GNULIB_FPURGE = @GNULIB_FPURGE@ GNULIB_FPUTC = @GNULIB_FPUTC@ GNULIB_FPUTS = @GNULIB_FPUTS@ GNULIB_FREAD = @GNULIB_FREAD@ GNULIB_FREOPEN = @GNULIB_FREOPEN@ GNULIB_FSCANF = @GNULIB_FSCANF@ GNULIB_FSEEK = @GNULIB_FSEEK@ GNULIB_FSEEKO = @GNULIB_FSEEKO@ GNULIB_FSYNC = @GNULIB_FSYNC@ GNULIB_FTELL = @GNULIB_FTELL@ GNULIB_FTELLO = @GNULIB_FTELLO@ GNULIB_FTRUNCATE = @GNULIB_FTRUNCATE@ GNULIB_FWRITE = @GNULIB_FWRITE@ GNULIB_GETC = @GNULIB_GETC@ GNULIB_GETCHAR = @GNULIB_GETCHAR@ GNULIB_GETCWD = @GNULIB_GETCWD@ GNULIB_GETDELIM = @GNULIB_GETDELIM@ GNULIB_GETDOMAINNAME = @GNULIB_GETDOMAINNAME@ GNULIB_GETDTABLESIZE = @GNULIB_GETDTABLESIZE@ GNULIB_GETGROUPS = @GNULIB_GETGROUPS@ GNULIB_GETHOSTNAME = @GNULIB_GETHOSTNAME@ GNULIB_GETLINE = @GNULIB_GETLINE@ GNULIB_GETLOGIN = @GNULIB_GETLOGIN@ GNULIB_GETLOGIN_R = @GNULIB_GETLOGIN_R@ GNULIB_GETPAGESIZE = @GNULIB_GETPAGESIZE@ GNULIB_GETUSERSHELL = @GNULIB_GETUSERSHELL@ GNULIB_GL_SRCGL_UNISTD_H_GETOPT = @GNULIB_GL_SRCGL_UNISTD_H_GETOPT@ GNULIB_GROUP_MEMBER = @GNULIB_GROUP_MEMBER@ GNULIB_ISATTY = @GNULIB_ISATTY@ GNULIB_LCHOWN = @GNULIB_LCHOWN@ GNULIB_LINK = @GNULIB_LINK@ GNULIB_LINKAT = @GNULIB_LINKAT@ GNULIB_LSEEK = @GNULIB_LSEEK@ GNULIB_MBSCASECMP = @GNULIB_MBSCASECMP@ GNULIB_MBSCASESTR = @GNULIB_MBSCASESTR@ GNULIB_MBSCHR = @GNULIB_MBSCHR@ GNULIB_MBSCSPN = @GNULIB_MBSCSPN@ GNULIB_MBSLEN = @GNULIB_MBSLEN@ GNULIB_MBSNCASECMP = @GNULIB_MBSNCASECMP@ GNULIB_MBSNLEN = @GNULIB_MBSNLEN@ GNULIB_MBSPBRK = @GNULIB_MBSPBRK@ GNULIB_MBSPCASECMP = @GNULIB_MBSPCASECMP@ GNULIB_MBSRCHR = @GNULIB_MBSRCHR@ GNULIB_MBSSEP = @GNULIB_MBSSEP@ GNULIB_MBSSPN = @GNULIB_MBSSPN@ GNULIB_MBSSTR = @GNULIB_MBSSTR@ GNULIB_MBSTOK_R = @GNULIB_MBSTOK_R@ GNULIB_MEMCHR = @GNULIB_MEMCHR@ GNULIB_MEMMEM = @GNULIB_MEMMEM@ GNULIB_MEMPCPY = @GNULIB_MEMPCPY@ GNULIB_MEMRCHR = @GNULIB_MEMRCHR@ GNULIB_OBSTACK_PRINTF = @GNULIB_OBSTACK_PRINTF@ GNULIB_OBSTACK_PRINTF_POSIX = @GNULIB_OBSTACK_PRINTF_POSIX@ GNULIB_PCLOSE = @GNULIB_PCLOSE@ GNULIB_PERROR = @GNULIB_PERROR@ GNULIB_PIPE = @GNULIB_PIPE@ GNULIB_PIPE2 = @GNULIB_PIPE2@ GNULIB_POPEN = @GNULIB_POPEN@ GNULIB_PREAD = @GNULIB_PREAD@ GNULIB_PRINTF = @GNULIB_PRINTF@ GNULIB_PRINTF_POSIX = @GNULIB_PRINTF_POSIX@ GNULIB_PUTC = @GNULIB_PUTC@ GNULIB_PUTCHAR = @GNULIB_PUTCHAR@ GNULIB_PUTS = @GNULIB_PUTS@ GNULIB_PWRITE = @GNULIB_PWRITE@ GNULIB_RAWMEMCHR = @GNULIB_RAWMEMCHR@ GNULIB_READ = @GNULIB_READ@ GNULIB_READLINK = @GNULIB_READLINK@ GNULIB_READLINKAT = @GNULIB_READLINKAT@ GNULIB_REMOVE = @GNULIB_REMOVE@ GNULIB_RENAME = @GNULIB_RENAME@ GNULIB_RENAMEAT = @GNULIB_RENAMEAT@ GNULIB_RMDIR = @GNULIB_RMDIR@ GNULIB_SCANF = @GNULIB_SCANF@ GNULIB_SETHOSTNAME = @GNULIB_SETHOSTNAME@ GNULIB_SLEEP = @GNULIB_SLEEP@ GNULIB_SNPRINTF = @GNULIB_SNPRINTF@ GNULIB_SPRINTF_POSIX = @GNULIB_SPRINTF_POSIX@ GNULIB_STDIO_H_NONBLOCKING = @GNULIB_STDIO_H_NONBLOCKING@ GNULIB_STDIO_H_SIGPIPE = @GNULIB_STDIO_H_SIGPIPE@ GNULIB_STPCPY = @GNULIB_STPCPY@ GNULIB_STPNCPY = @GNULIB_STPNCPY@ GNULIB_STRCASESTR = @GNULIB_STRCASESTR@ GNULIB_STRCHRNUL = @GNULIB_STRCHRNUL@ GNULIB_STRDUP = @GNULIB_STRDUP@ GNULIB_STRERROR = @GNULIB_STRERROR@ GNULIB_STRERROR_R = @GNULIB_STRERROR_R@ GNULIB_STRNCAT = @GNULIB_STRNCAT@ GNULIB_STRNDUP = @GNULIB_STRNDUP@ GNULIB_STRNLEN = @GNULIB_STRNLEN@ GNULIB_STRPBRK = @GNULIB_STRPBRK@ GNULIB_STRSEP = @GNULIB_STRSEP@ GNULIB_STRSIGNAL = @GNULIB_STRSIGNAL@ GNULIB_STRSTR = @GNULIB_STRSTR@ GNULIB_STRTOK_R = @GNULIB_STRTOK_R@ GNULIB_STRVERSCMP = @GNULIB_STRVERSCMP@ GNULIB_SYMLINK = @GNULIB_SYMLINK@ GNULIB_SYMLINKAT = @GNULIB_SYMLINKAT@ GNULIB_TMPFILE = @GNULIB_TMPFILE@ GNULIB_TTYNAME_R = @GNULIB_TTYNAME_R@ GNULIB_UNISTD_H_NONBLOCKING = @GNULIB_UNISTD_H_NONBLOCKING@ GNULIB_UNISTD_H_SIGPIPE = @GNULIB_UNISTD_H_SIGPIPE@ GNULIB_UNLINK = @GNULIB_UNLINK@ GNULIB_UNLINKAT = @GNULIB_UNLINKAT@ GNULIB_USLEEP = @GNULIB_USLEEP@ GNULIB_VASPRINTF = @GNULIB_VASPRINTF@ GNULIB_VDPRINTF = @GNULIB_VDPRINTF@ GNULIB_VFPRINTF = @GNULIB_VFPRINTF@ GNULIB_VFPRINTF_POSIX = @GNULIB_VFPRINTF_POSIX@ GNULIB_VFSCANF = @GNULIB_VFSCANF@ GNULIB_VPRINTF = @GNULIB_VPRINTF@ GNULIB_VPRINTF_POSIX = @GNULIB_VPRINTF_POSIX@ GNULIB_VSCANF = @GNULIB_VSCANF@ GNULIB_VSNPRINTF = @GNULIB_VSNPRINTF@ GNULIB_VSPRINTF_POSIX = @GNULIB_VSPRINTF_POSIX@ GNULIB_WRITE = @GNULIB_WRITE@ GREP = @GREP@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ HAVE_CHOWN = @HAVE_CHOWN@ HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@ HAVE_DECL_FCHDIR = @HAVE_DECL_FCHDIR@ HAVE_DECL_FDATASYNC = @HAVE_DECL_FDATASYNC@ HAVE_DECL_FPURGE = @HAVE_DECL_FPURGE@ HAVE_DECL_FSEEKO = @HAVE_DECL_FSEEKO@ HAVE_DECL_FTELLO = @HAVE_DECL_FTELLO@ HAVE_DECL_GETDELIM = @HAVE_DECL_GETDELIM@ HAVE_DECL_GETDOMAINNAME = @HAVE_DECL_GETDOMAINNAME@ HAVE_DECL_GETLINE = @HAVE_DECL_GETLINE@ HAVE_DECL_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_OBSTACK_PRINTF = @HAVE_DECL_OBSTACK_PRINTF@ HAVE_DECL_SETHOSTNAME = @HAVE_DECL_SETHOSTNAME@ HAVE_DECL_SNPRINTF = @HAVE_DECL_SNPRINTF@ HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@ HAVE_DECL_STRERROR_R = @HAVE_DECL_STRERROR_R@ HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@ HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@ HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@ HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@ HAVE_DECL_TTYNAME_R = @HAVE_DECL_TTYNAME_R@ HAVE_DECL_VSNPRINTF = @HAVE_DECL_VSNPRINTF@ HAVE_DPRINTF = @HAVE_DPRINTF@ HAVE_DUP2 = @HAVE_DUP2@ HAVE_DUP3 = @HAVE_DUP3@ HAVE_EUIDACCESS = @HAVE_EUIDACCESS@ HAVE_FACCESSAT = @HAVE_FACCESSAT@ HAVE_FCHDIR = @HAVE_FCHDIR@ HAVE_FCHOWNAT = @HAVE_FCHOWNAT@ HAVE_FDATASYNC = @HAVE_FDATASYNC@ HAVE_FFSL = @HAVE_FFSL@ HAVE_FFSLL = @HAVE_FFSLL@ HAVE_FSEEKO = @HAVE_FSEEKO@ HAVE_FSYNC = @HAVE_FSYNC@ HAVE_FTELLO = @HAVE_FTELLO@ HAVE_FTRUNCATE = @HAVE_FTRUNCATE@ 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_GROUP_MEMBER = @HAVE_GROUP_MEMBER@ HAVE_LCHOWN = @HAVE_LCHOWN@ HAVE_LIBSHISHI = @HAVE_LIBSHISHI@ HAVE_LINK = @HAVE_LINK@ HAVE_LINKAT = @HAVE_LINKAT@ HAVE_MBSLEN = @HAVE_MBSLEN@ HAVE_MEMCHR = @HAVE_MEMCHR@ HAVE_MEMPCPY = @HAVE_MEMPCPY@ HAVE_MSVC_INVALID_PARAMETER_HANDLER = @HAVE_MSVC_INVALID_PARAMETER_HANDLER@ HAVE_OS_H = @HAVE_OS_H@ HAVE_PCLOSE = @HAVE_PCLOSE@ HAVE_PIPE = @HAVE_PIPE@ HAVE_PIPE2 = @HAVE_PIPE2@ HAVE_POPEN = @HAVE_POPEN@ HAVE_PREAD = @HAVE_PREAD@ HAVE_PWRITE = @HAVE_PWRITE@ HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@ HAVE_READLINK = @HAVE_READLINK@ HAVE_READLINKAT = @HAVE_READLINKAT@ HAVE_RENAMEAT = @HAVE_RENAMEAT@ HAVE_SETHOSTNAME = @HAVE_SETHOSTNAME@ HAVE_SLEEP = @HAVE_SLEEP@ 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_STRVERSCMP = @HAVE_STRVERSCMP@ HAVE_SYMLINK = @HAVE_SYMLINK@ HAVE_SYMLINKAT = @HAVE_SYMLINKAT@ HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@ HAVE_UNISTD_H = @HAVE_UNISTD_H@ HAVE_UNLINKAT = @HAVE_UNLINKAT@ HAVE_USLEEP = @HAVE_USLEEP@ HAVE_VASPRINTF = @HAVE_VASPRINTF@ HAVE_VDPRINTF = @HAVE_VDPRINTF@ HAVE_WCHAR_T = @HAVE_WCHAR_T@ HAVE_WINSOCK2_H = @HAVE_WINSOCK2_H@ HAVE__BOOL = @HAVE__BOOL@ HELP2MAN = @HELP2MAN@ HTML_DIR = @HTML_DIR@ INCLUDE_GSS_KRB5 = @INCLUDE_GSS_KRB5@ INCLUDE_GSS_KRB5_EXT = @INCLUDE_GSS_KRB5_EXT@ 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@ INTLLIBS = @INTLLIBS@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBSHISHI = @LIBSHISHI@ LIBSHISHI_PREFIX = @LIBSHISHI_PREFIX@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBOBJS = @LTLIBOBJS@ LTLIBSHISHI = @LTLIBSHISHI@ LT_AGE = @LT_AGE@ LT_CURRENT = @LT_CURRENT@ LT_REVISION = @LT_REVISION@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = @NEXT_AS_FIRST_DIRECTIVE_ERRNO_H@ NEXT_AS_FIRST_DIRECTIVE_GETOPT_H = @NEXT_AS_FIRST_DIRECTIVE_GETOPT_H@ NEXT_AS_FIRST_DIRECTIVE_STDARG_H = @NEXT_AS_FIRST_DIRECTIVE_STDARG_H@ NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@ NEXT_AS_FIRST_DIRECTIVE_STDIO_H = @NEXT_AS_FIRST_DIRECTIVE_STDIO_H@ NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H@ NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@ NEXT_ERRNO_H = @NEXT_ERRNO_H@ NEXT_GETOPT_H = @NEXT_GETOPT_H@ NEXT_STDARG_H = @NEXT_STDARG_H@ NEXT_STDDEF_H = @NEXT_STDDEF_H@ NEXT_STDIO_H = @NEXT_STDIO_H@ NEXT_STRING_H = @NEXT_STRING_H@ NEXT_SYS_TYPES_H = @NEXT_SYS_TYPES_H@ NEXT_UNISTD_H = @NEXT_UNISTD_H@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ PKG_CONFIG = @PKG_CONFIG@ PMCCABE = @PMCCABE@ POSUB = @POSUB@ PO_SUFFIX = @PO_SUFFIX@ PRAGMA_COLUMNS = @PRAGMA_COLUMNS@ PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@ RANLIB = @RANLIB@ REPLACE_CHOWN = @REPLACE_CHOWN@ REPLACE_CLOSE = @REPLACE_CLOSE@ REPLACE_DPRINTF = @REPLACE_DPRINTF@ REPLACE_DUP = @REPLACE_DUP@ REPLACE_DUP2 = @REPLACE_DUP2@ REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@ REPLACE_FCLOSE = @REPLACE_FCLOSE@ REPLACE_FDOPEN = @REPLACE_FDOPEN@ REPLACE_FFLUSH = @REPLACE_FFLUSH@ REPLACE_FOPEN = @REPLACE_FOPEN@ REPLACE_FPRINTF = @REPLACE_FPRINTF@ REPLACE_FPURGE = @REPLACE_FPURGE@ REPLACE_FREOPEN = @REPLACE_FREOPEN@ REPLACE_FSEEK = @REPLACE_FSEEK@ REPLACE_FSEEKO = @REPLACE_FSEEKO@ REPLACE_FTELL = @REPLACE_FTELL@ REPLACE_FTELLO = @REPLACE_FTELLO@ REPLACE_FTRUNCATE = @REPLACE_FTRUNCATE@ REPLACE_GETCWD = @REPLACE_GETCWD@ REPLACE_GETDELIM = @REPLACE_GETDELIM@ REPLACE_GETDOMAINNAME = @REPLACE_GETDOMAINNAME@ REPLACE_GETDTABLESIZE = @REPLACE_GETDTABLESIZE@ REPLACE_GETGROUPS = @REPLACE_GETGROUPS@ REPLACE_GETLINE = @REPLACE_GETLINE@ REPLACE_GETLOGIN_R = @REPLACE_GETLOGIN_R@ REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@ REPLACE_ISATTY = @REPLACE_ISATTY@ REPLACE_LCHOWN = @REPLACE_LCHOWN@ REPLACE_LINK = @REPLACE_LINK@ REPLACE_LINKAT = @REPLACE_LINKAT@ REPLACE_LSEEK = @REPLACE_LSEEK@ REPLACE_MEMCHR = @REPLACE_MEMCHR@ REPLACE_MEMMEM = @REPLACE_MEMMEM@ REPLACE_NULL = @REPLACE_NULL@ REPLACE_OBSTACK_PRINTF = @REPLACE_OBSTACK_PRINTF@ REPLACE_PERROR = @REPLACE_PERROR@ REPLACE_POPEN = @REPLACE_POPEN@ REPLACE_PREAD = @REPLACE_PREAD@ REPLACE_PRINTF = @REPLACE_PRINTF@ REPLACE_PWRITE = @REPLACE_PWRITE@ REPLACE_READ = @REPLACE_READ@ REPLACE_READLINK = @REPLACE_READLINK@ REPLACE_REMOVE = @REPLACE_REMOVE@ REPLACE_RENAME = @REPLACE_RENAME@ REPLACE_RENAMEAT = @REPLACE_RENAMEAT@ REPLACE_RMDIR = @REPLACE_RMDIR@ REPLACE_SLEEP = @REPLACE_SLEEP@ REPLACE_SNPRINTF = @REPLACE_SNPRINTF@ REPLACE_SPRINTF = @REPLACE_SPRINTF@ REPLACE_STDIO_READ_FUNCS = @REPLACE_STDIO_READ_FUNCS@ REPLACE_STDIO_WRITE_FUNCS = @REPLACE_STDIO_WRITE_FUNCS@ REPLACE_STPNCPY = @REPLACE_STPNCPY@ REPLACE_STRCASESTR = @REPLACE_STRCASESTR@ REPLACE_STRCHRNUL = @REPLACE_STRCHRNUL@ REPLACE_STRDUP = @REPLACE_STRDUP@ REPLACE_STRERROR = @REPLACE_STRERROR@ REPLACE_STRERROR_R = @REPLACE_STRERROR_R@ REPLACE_STRNCAT = @REPLACE_STRNCAT@ REPLACE_STRNDUP = @REPLACE_STRNDUP@ REPLACE_STRNLEN = @REPLACE_STRNLEN@ REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@ REPLACE_STRSTR = @REPLACE_STRSTR@ REPLACE_STRTOK_R = @REPLACE_STRTOK_R@ REPLACE_SYMLINK = @REPLACE_SYMLINK@ REPLACE_TMPFILE = @REPLACE_TMPFILE@ REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@ REPLACE_UNLINK = @REPLACE_UNLINK@ REPLACE_UNLINKAT = @REPLACE_UNLINKAT@ REPLACE_USLEEP = @REPLACE_USLEEP@ REPLACE_VASPRINTF = @REPLACE_VASPRINTF@ REPLACE_VDPRINTF = @REPLACE_VDPRINTF@ REPLACE_VFPRINTF = @REPLACE_VFPRINTF@ REPLACE_VPRINTF = @REPLACE_VPRINTF@ REPLACE_VSNPRINTF = @REPLACE_VSNPRINTF@ REPLACE_VSPRINTF = @REPLACE_VSPRINTF@ REPLACE_WRITE = @REPLACE_WRITE@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STDARG_H = @STDARG_H@ STDBOOL_H = @STDBOOL_H@ STDDEF_H = @STDDEF_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@ USE_NLS = @USE_NLS@ VALGRIND = @VALGRIND@ VERSION = @VERSION@ VERSION_MAJOR = @VERSION_MAJOR@ VERSION_MINOR = @VERSION_MINOR@ VERSION_NUMBER = @VERSION_NUMBER@ VERSION_PATCH = @VERSION_PATCH@ WARN_CFLAGS = @WARN_CFLAGS@ WERROR_CFLAGS = @WERROR_CFLAGS@ WINDOWS_64_BIT_OFF_T = @WINDOWS_64_BIT_OFF_T@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gl_LIBOBJS = @gl_LIBOBJS@ gl_LTLIBOBJS = @gl_LTLIBOBJS@ gltests_LIBOBJS = @gltests_LIBOBJS@ gltests_LTLIBOBJS = @gltests_LTLIBOBJS@ gltests_WITNESS = @gltests_WITNESS@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ libgl_LIBOBJS = @libgl_LIBOBJS@ libgl_LTLIBOBJS = @libgl_LTLIBOBJS@ libgltests_LIBOBJS = @libgltests_LIBOBJS@ libgltests_LTLIBOBJS = @libgltests_LTLIBOBJS@ libgltests_WITNESS = @libgltests_WITNESS@ localedir = @localedir@ localstatedir = @localstatedir@ 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@ srcgl_LIBOBJS = @srcgl_LIBOBJS@ srcgl_LTLIBOBJS = @srcgl_LTLIBOBJS@ srcgltests_LIBOBJS = @srcgltests_LIBOBJS@ srcgltests_LTLIBOBJS = @srcgltests_LTLIBOBJS@ srcgltests_WITNESS = @srcgltests_WITNESS@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AUTOMAKE_OPTIONS = 1.9.6 gnits SUBDIRS = noinst_HEADERS = noinst_LIBRARIES = noinst_LTLIBRARIES = libgnu.la EXTRA_DIST = m4/gnulib-cache.m4 $(top_srcdir)/build-aux/gendocs.sh \ $(top_srcdir)/GNUmakefile $(top_srcdir)/build-aux/gnupload \ $(top_srcdir)/build-aux/config.rpath $(top_srcdir)/maint.mk \ $(top_srcdir)/build-aux/pmccabe2html \ $(top_srcdir)/build-aux/pmccabe.css \ $(top_srcdir)/build-aux/update-copyright \ $(top_srcdir)/build-aux/useless-if-before-free \ $(top_srcdir)/build-aux/vc-list-files BUILT_SOURCES = SUFFIXES = MOSTLYCLEANFILES = core *.stackdump MOSTLYCLEANDIRS = CLEANFILES = DISTCLEANFILES = MAINTAINERCLEANFILES = AM_CPPFLAGS = AM_CFLAGS = libgnu_la_SOURCES = dummy.c libgnu_la_LIBADD = $(gl_LTLIBOBJS) libgnu_la_DEPENDENCIES = $(gl_LTLIBOBJS) EXTRA_libgnu_la_SOURCES = libgnu_la_LDFLAGS = $(AM_LDFLAGS) -no-undefined 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)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libgnu.la: $(libgnu_la_OBJECTS) $(libgnu_la_DEPENDENCIES) $(EXTRA_libgnu_la_DEPENDENCIES) $(AM_V_CCLD)$(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@ .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)$(COMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ `$(CYGPATH_W) '$<'` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)$(LTCOMPILE) -MT $@ -MD -MP -MF $(DEPDIR)/$*.Tpo -c -o $@ $< @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/$*.Tpo $(DEPDIR)/$*.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(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. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done 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: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: -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: $(am__recursive_targets) all check install install-am \ install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am check \ check-am clean clean-generic clean-libtool \ clean-noinstLIBRARIES clean-noinstLTLIBRARIES cscopelist-am \ ctags ctags-am 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-am uninstall \ uninstall-am distclean-local: clean-GNUmakefile clean-GNUmakefile: test '$(srcdir)' = . || rm -f $(top_builddir)/GNUmakefile 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: �������������������������������������������������������������������������������������������������������������������������������������������������������������������gss-1.0.3/gl/m4/������������������������������������������������������������������������������������0000755�0000000�0000000�00000000000�12415510376�010204� 5����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������gss-1.0.3/gl/m4/ld-version-script.m4����������������������������������������������������������������0000644�0000000�0000000�00000003364�12415470476�013766� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# ld-version-script.m4 serial 3 dnl Copyright (C) 2008-2014 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 foo EOF AC_LINK_IFELSE([AC_LANG_PROGRAM([], [])], [accepts_syntax_errors=yes], [accepts_syntax_errors=no]) if test "$accepts_syntax_errors" = no; then 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]) else have_ld_version_script=no fi 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") ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gss-1.0.3/gl/m4/00gnulib.m4�������������������������������������������������������������������������0000644�0000000�0000000�00000004152�12415470476�012016� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# 00gnulib.m4 serial 3 dnl Copyright (C) 2009-2014 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 and dnl m4_divert semantics. # Until autoconf 2.63, handling of the diversion stack required m4_init # to be called first; but this does not happen with aclocal. Wrapping # the entire execution in another layer of the diversion stack fixes this. # Worse, prior to autoconf 2.62, m4_wrap depended on the underlying m4 # for whether it was FIFO or LIFO; in order to properly balance with # m4_init, we need to undo our push just before anything wrapped within # the m4_init body. The way to ensure this is to wrap both sides of # m4_init with a one-shot macro that does the pop at the right time. m4_ifndef([_m4_divert_diversion], [m4_divert_push([KILL]) m4_define([gl_divert_fixup], [m4_divert_pop()m4_define([$0])]) m4_define([m4_init], [gl_divert_fixup()]m4_defn([m4_init])[gl_divert_fixup()])]) # 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]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gss-1.0.3/gl/m4/manywarnings.m4���������������������������������������������������������������������0000644�0000000�0000000�00000015660�12415470476�013121� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# manywarnings.m4 serial 7 dnl Copyright (C) 2008-2014 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 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], [ dnl First, check for some issues that only occur when combining multiple dnl gcc warning categories. AC_REQUIRE([AC_PROG_CC]) if test -n "$GCC"; then dnl Check if -W -Werror -Wno-missing-field-initializers is supported dnl with the current $CC $CFLAGS $CPPFLAGS. AC_MSG_CHECKING([whether -Wno-missing-field-initializers is supported]) AC_CACHE_VAL([gl_cv_cc_nomfi_supported], [ gl_save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -W -Werror -Wno-missing-field-initializers" AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[]], [[]])], [gl_cv_cc_nomfi_supported=yes], [gl_cv_cc_nomfi_supported=no]) CFLAGS="$gl_save_CFLAGS"]) AC_MSG_RESULT([$gl_cv_cc_nomfi_supported]) if test "$gl_cv_cc_nomfi_supported" = yes; then dnl Now check whether -Wno-missing-field-initializers is needed dnl for the { 0, } construct. AC_MSG_CHECKING([whether -Wno-missing-field-initializers is needed]) AC_CACHE_VAL([gl_cv_cc_nomfi_needed], [ gl_save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -W -Werror" AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[void f (void) { typedef struct { int a; int b; } s_t; s_t s1 = { 0, }; } ]], [[]])], [gl_cv_cc_nomfi_needed=no], [gl_cv_cc_nomfi_needed=yes]) CFLAGS="$gl_save_CFLAGS" ]) AC_MSG_RESULT([$gl_cv_cc_nomfi_needed]) fi dnl Next, check if -Werror -Wuninitialized is useful with the dnl user's choice of $CFLAGS; some versions of gcc warn that it dnl has no effect if -O is not also used AC_MSG_CHECKING([whether -Wuninitialized is supported]) AC_CACHE_VAL([gl_cv_cc_uninitialized_supported], [ gl_save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -Werror -Wuninitialized" AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[]], [[]])], [gl_cv_cc_uninitialized_supported=yes], [gl_cv_cc_uninitialized_supported=no]) CFLAGS="$gl_save_CFLAGS"]) AC_MSG_RESULT([$gl_cv_cc_uninitialized_supported]) fi # List all gcc warning categories. # To compare this list to your installed GCC's, run this Bash command: # # comm -3 \ # <(sed -n 's/^ *\(-[^ ]*\) .*/\1/p' manywarnings.m4 | sort) \ # <(gcc --help=warnings | sed -n 's/^ \(-[^ ]*\) .*/\1/p' | sort | # grep -v -x -f <( # awk '/^[^#]/ {print $1}' ../build-aux/gcc-warning.spec)) gl_manywarn_set= for gl_manywarn_item in \ -W \ -Wabi \ -Waddress \ -Waggressive-loop-optimizations \ -Wall \ -Warray-bounds \ -Wattributes \ -Wbad-function-cast \ -Wbuiltin-macro-redefined \ -Wcast-align \ -Wchar-subscripts \ -Wclobbered \ -Wcomment \ -Wcomments \ -Wcoverage-mismatch \ -Wcpp \ -Wdate-time \ -Wdeprecated \ -Wdeprecated-declarations \ -Wdisabled-optimization \ -Wdiv-by-zero \ -Wdouble-promotion \ -Wempty-body \ -Wendif-labels \ -Wenum-compare \ -Wextra \ -Wformat-contains-nul \ -Wformat-extra-args \ -Wformat-nonliteral \ -Wformat-security \ -Wformat-y2k \ -Wformat-zero-length \ -Wfree-nonheap-object \ -Wignored-qualifiers \ -Wimplicit \ -Wimplicit-function-declaration \ -Wimplicit-int \ -Winit-self \ -Winline \ -Wint-to-pointer-cast \ -Winvalid-memory-model \ -Winvalid-pch \ -Wjump-misses-init \ -Wlogical-op \ -Wmain \ -Wmaybe-uninitialized \ -Wmissing-braces \ -Wmissing-declarations \ -Wmissing-field-initializers \ -Wmissing-include-dirs \ -Wmissing-parameter-type \ -Wmissing-prototypes \ -Wmultichar \ -Wnarrowing \ -Wnested-externs \ -Wnonnull \ -Wold-style-declaration \ -Wold-style-definition \ -Wopenmp-simd \ -Woverflow \ -Woverlength-strings \ -Woverride-init \ -Wpacked \ -Wpacked-bitfield-compat \ -Wparentheses \ -Wpointer-arith \ -Wpointer-sign \ -Wpointer-to-int-cast \ -Wpragmas \ -Wreturn-local-addr \ -Wreturn-type \ -Wsequence-point \ -Wshadow \ -Wsizeof-pointer-memaccess \ -Wstack-protector \ -Wstrict-aliasing \ -Wstrict-overflow \ -Wstrict-prototypes \ -Wsuggest-attribute=const \ -Wsuggest-attribute=format \ -Wsuggest-attribute=noreturn \ -Wsuggest-attribute=pure \ -Wswitch \ -Wswitch-default \ -Wsync-nand \ -Wsystem-headers \ -Wtrampolines \ -Wtrigraphs \ -Wtype-limits \ -Wuninitialized \ -Wunknown-pragmas \ -Wunsafe-loop-optimizations \ -Wunused \ -Wunused-but-set-parameter \ -Wunused-but-set-variable \ -Wunused-function \ -Wunused-label \ -Wunused-local-typedefs \ -Wunused-macros \ -Wunused-parameter \ -Wunused-result \ -Wunused-value \ -Wunused-variable \ -Wvarargs \ -Wvariadic-macros \ -Wvector-operation-performance \ -Wvla \ -Wvolatile-register-var \ -Wwrite-strings \ \ ; do gl_manywarn_set="$gl_manywarn_set $gl_manywarn_item" done # gcc --help=warnings outputs an unusual form for this option; list # it here so that the above 'comm' command doesn't report a false match. gl_manywarn_set="$gl_manywarn_set -Wnormalized=nfc" # These are needed for older GCC versions. if test -n "$GCC"; then case `($CC --version) 2>/dev/null` in 'gcc (GCC) '[[0-3]].* | \ 'gcc (GCC) '4.[[0-7]].*) gl_manywarn_set="$gl_manywarn_set -fdiagnostics-show-option" gl_manywarn_set="$gl_manywarn_set -funit-at-a-time" ;; esac fi # Disable specific options as needed. if test "$gl_cv_cc_nomfi_needed" = yes; then gl_manywarn_set="$gl_manywarn_set -Wno-missing-field-initializers" fi if test "$gl_cv_cc_uninitialized_supported" = no; then gl_manywarn_set="$gl_manywarn_set -Wno-uninitialized" fi $1=$gl_manywarn_set ]) ��������������������������������������������������������������������������������gss-1.0.3/gl/m4/gnulib-common.m4��������������������������������������������������������������������0000644�0000000�0000000�00000041104�12415470476�013142� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# gnulib-common.m4 serial 36 dnl Copyright (C) 2007-2014 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([_Noreturn], [/* The _Noreturn keyword of C11. */ #if ! (defined _Noreturn \ || (defined __STDC_VERSION__ && 201112 <= __STDC_VERSION__)) # if (3 <= __GNUC__ || (__GNUC__ == 2 && 8 <= __GNUC_MINOR__) \ || 0x5110 <= __SUNPRO_C) # define _Noreturn __attribute__ ((__noreturn__)) # elif defined _MSC_VER && 1200 <= _MSC_VER # define _Noreturn __declspec (noreturn) # else # define _Noreturn # endif #endif ]) 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 Mac OS 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 /* gcc supports the "unused" attribute on possibly unused labels, and g++ has since version 4.5. Note to support C++ as well as C, _GL_UNUSED_LABEL should be used with a trailing ; */ #if !defined __cplusplus || __GNUC__ > 4 \ || (__GNUC__ == 4 && __GNUC_MINOR__ >= 5) # define _GL_UNUSED_LABEL _GL_UNUSED #else # define _GL_UNUSED_LABEL #endif /* The __pure__ attribute was added in gcc 2.96. */ #if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) # define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__)) #else # define _GL_ATTRIBUTE_PURE /* empty */ #endif /* The __const__ attribute was added in gcc 2.95. */ #if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 95) # define _GL_ATTRIBUTE_CONST __attribute__ ((__const__)) #else # define _GL_ATTRIBUTE_CONST /* empty */ #endif ]) 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. m4_define([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], [ gl_MODULE_INDICATOR_SET_VARIABLE_AUX( [GNULIB_[]m4_translit([[$1]], [abcdefghijklmnopqrstuvwxyz./-], [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])], [gl_MODULE_INDICATOR_CONDITION]) ]) # gl_MODULE_INDICATOR_SET_VARIABLE_AUX([variable]) # modifies the shell variable to include the gl_MODULE_INDICATOR_CONDITION. # The shell variable's value is a C preprocessor expression that evaluates # to 0 or 1. AC_DEFUN([gl_MODULE_INDICATOR_SET_VARIABLE_AUX], [ m4_if(m4_defn([gl_MODULE_INDICATOR_CONDITION]), [1], [ dnl Simplify the expression VALUE || 1 to 1. $1=1 ], [gl_MODULE_INDICATOR_SET_VARIABLE_AUX_OR([$1], [gl_MODULE_INDICATOR_CONDITION])]) ]) # gl_MODULE_INDICATOR_SET_VARIABLE_AUX_OR([variable], [condition]) # modifies the shell variable to include the given condition. The shell # variable's value is a C preprocessor expression that evaluates to 0 or 1. AC_DEFUN([gl_MODULE_INDICATOR_SET_VARIABLE_AUX_OR], [ dnl Simplify the expression 1 || CONDITION to 1. if test "$[]$1" != 1; then dnl Simplify the expression 0 || CONDITION to CONDITION. if test "$[]$1" = 0; then $1=$2 else $1="($[]$1 || $2)" fi fi ]) # 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.]) ]) # gl_ASSERT_NO_GNULIB_POSIXCHECK # asserts that there will never be a need to #define GNULIB_POSIXCHECK. # and thereby enables an optimization of configure and config.h. # Used by Emacs. AC_DEFUN([gl_ASSERT_NO_GNULIB_POSIXCHECK], [ dnl Override gl_WARN_ON_USE_PREPARE. dnl But hide this definition from 'aclocal'. AC_DEFUN([gl_W][ARN_ON_USE_PREPARE], []) ]) # gl_ASSERT_NO_GNULIB_TESTS # asserts that there will be no gnulib tests in the scope of the configure.ac # and thereby enables an optimization of config.h. # Used by Emacs. AC_DEFUN([gl_ASSERT_NO_GNULIB_TESTS], [ dnl Override gl_MODULE_INDICATOR_FOR_TESTS. AC_DEFUN([gl_MODULE_INDICATOR_FOR_TESTS], []) ]) # Test whether <features.h> exists. # Set HAVE_FEATURES_H. AC_DEFUN([gl_FEATURES_H], [ AC_CHECK_HEADERS_ONCE([features.h]) if test $ac_cv_header_features_h = yes; then HAVE_FEATURES_H=1 else HAVE_FEATURES_H=0 fi AC_SUBST([HAVE_FEATURES_H]) ]) # 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])])]) # gl_PROG_CC_C99 # Modifies the value of the shell variable CC in an attempt to make $CC # understand ISO C99 source code. # This is like AC_PROG_CC_C99, except that # - AC_PROG_CC_C99 did not exist in Autoconf versions < 2.60, # - AC_PROG_CC_C99 does not mix well with AC_PROG_CC_STDC # <http://lists.gnu.org/archive/html/bug-gnulib/2011-09/msg00367.html>, # but many more packages use AC_PROG_CC_STDC than AC_PROG_CC_C99 # <http://lists.gnu.org/archive/html/bug-gnulib/2011-09/msg00441.html>. # Remaining problems: # - When AC_PROG_CC_STDC is invoked twice, it adds the C99 enabling options # to CC twice # <http://lists.gnu.org/archive/html/bug-gnulib/2011-09/msg00431.html>. # - AC_PROG_CC_STDC is likely to change now that C11 is an ISO standard. AC_DEFUN([gl_PROG_CC_C99], [ dnl Change that version number to the minimum Autoconf version that supports dnl mixing AC_PROG_CC_C99 calls with AC_PROG_CC_STDC calls. m4_version_prereq([9.0], [AC_REQUIRE([AC_PROG_CC_C99])], [AC_REQUIRE([AC_PROG_CC_STDC])]) ]) # gl_PROG_AR_RANLIB # Determines the values for AR, ARFLAGS, RANLIB that fit with the compiler. # The user can set the variables AR, ARFLAGS, RANLIB if he wants to override # the values. AC_DEFUN([gl_PROG_AR_RANLIB], [ dnl Minix 3 comes with two toolchains: The Amsterdam Compiler Kit compiler dnl as "cc", and GCC as "gcc". They have different object file formats and dnl library formats. In particular, the GNU binutils programs ar, ranlib dnl produce libraries that work only with gcc, not with cc. AC_REQUIRE([AC_PROG_CC]) AC_CACHE_CHECK([for Minix Amsterdam compiler], [gl_cv_c_amsterdam_compiler], [ AC_EGREP_CPP([Amsterdam], [ #ifdef __ACK__ Amsterdam #endif ], [gl_cv_c_amsterdam_compiler=yes], [gl_cv_c_amsterdam_compiler=no]) ]) if test -z "$AR"; then if test $gl_cv_c_amsterdam_compiler = yes; then AR='cc -c.a' if test -z "$ARFLAGS"; then ARFLAGS='-o' fi else dnl Use the Automake-documented default values for AR and ARFLAGS, dnl but prefer ${host}-ar over ar (useful for cross-compiling). AC_CHECK_TOOL([AR], [ar], [ar]) if test -z "$ARFLAGS"; then ARFLAGS='cru' fi fi else if test -z "$ARFLAGS"; then ARFLAGS='cru' fi fi AC_SUBST([AR]) AC_SUBST([ARFLAGS]) if test -z "$RANLIB"; then if test $gl_cv_c_amsterdam_compiler = yes; then RANLIB=':' else dnl Use the ranlib program if it is available. AC_PROG_RANLIB fi fi AC_SUBST([RANLIB]) ]) # 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. # AC_AUTOCONF_VERSION was introduced in 2.62, so use that as the witness. m4_ifndef([AC_AUTOCONF_VERSION],[ 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 is copied from post-2.69 Autoconf and overrides the # AC_C_RESTRICT macro from autoconf 2.60..2.69. It can be removed # once autoconf >= 2.70 can be assumed. It's painful to check version # numbers, and in practice this macro is more up-to-date than Autoconf # is, so override Autoconf unconditionally. 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 bar (int [$ac_kw]); /* Catch GCC bug 14050. */ int bar (int ip[$ac_kw]) { return ip[0]; } ]], [[int s[1]; int *$ac_kw t = s; t[0] = 0; return foo (t) + bar (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 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]) case $ac_cv_c_restrict in restrict) ;; no) AC_DEFINE([restrict], []) ;; *) AC_DEFINE_UNQUOTED([restrict], [$ac_cv_c_restrict]) ;; esac ])# AC_C_RESTRICT # 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" ]) # AS_VAR_COPY was added in autoconf 2.63b m4_define_default([AS_VAR_COPY], [AS_LITERAL_IF([$1[]$2], [$1=$$2], [eval $1=\$$2])]) # AC_PROG_SED was added in autoconf 2.59b m4_ifndef([AC_PROG_SED], [AC_DEFUN([AC_PROG_SED], [AC_CACHE_CHECK([for a sed that does not truncate output], ac_cv_path_SED, [dnl ac_script should not contain more than 99 commands (for HP-UX sed), dnl but more than about 7000 bytes, to catch a limit in Solaris 8 /usr/ucb/sed. 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 AS_UNSET([ac_script]) if test -z "$SED"; then ac_path_SED_found=false _AS_PATH_WALK([], [ 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" AS_EXECUTABLE_P(["$ac_path_SED"]) || continue 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 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 ac_count=`expr $ac_count + 1` if test $ac_count -gt ${ac_path_SED_max-0}; then # Best so far, but keep looking for better ac_cv_path_SED=$ac_path_SED ac_path_SED_max=$ac_count fi 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]) if test -z "$ac_cv_path_SED"; then AC_ERROR([no acceptable sed could be found in \$PATH]) fi else ac_cv_path_SED=$SED fi SED="$ac_cv_path_SED" AC_SUBST([SED])dnl rm -f conftest.sed ])])]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gss-1.0.3/gl/m4/valgrind-tests.m4�������������������������������������������������������������������0000644�0000000�0000000�00000002232�12415470476�013341� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# valgrind-tests.m4 serial 3 dnl Copyright (C) 2008-2014 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([--disable-valgrind-tests], [don't try to 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 OPTS="-q --error-exitcode=1 --leak-check=no" if test -n "$VALGRIND" \ && $VALGRIND $OPTS $SHELL -c 'exit 0' > /dev/null 2>&1; then opt_valgrind_tests=yes VALGRIND="$VALGRIND $OPTS" else opt_valgrind_tests=no VALGRIND= fi AC_MSG_CHECKING([whether self tests are run under valgrind]) AC_MSG_RESULT($opt_valgrind_tests) ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gss-1.0.3/gl/m4/gnulib-comp.m4����������������������������������������������������������������������0000644�0000000�0000000�00000021736�12415470477�012622� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# DO NOT EDIT! GENERATED AUTOMATICALLY! # Copyright (C) 2002-2014 Free Software Foundation, Inc. # # 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 3 of the License, or # (at your option) any later version. # # This 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 file. If not, see <http://www.gnu.org/licenses/>. # # 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 that use version control, 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([gl_PROG_AR_RANLIB]) # Code from module autobuild: AB_INIT # Code from module fdl-1.3: # Code from module gendocs: # Code from module gnumakefile: # Code from module gnupload: # Code from module havelib: # Code from module lib-symbol-versions: # Code from module maintainer-makefile: # Code from module manywarnings: # Code from module pmccabe2html: # 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 warnings: ]) # 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' # 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])]) gl_LD_VERSION_SCRIPT AC_CONFIG_COMMANDS_PRE([m4_ifdef([AH_HEADER], [AC_SUBST([CONFIG_INCLUDE], m4_defn([AH_HEADER]))])]) AC_REQUIRE([AC_PROG_SED]) AC_PATH_PROG([PMCCABE], [pmccabe], [false]) gl_VALGRIND_TESTS # 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='gl/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], [gl/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/config.rpath build-aux/gendocs.sh build-aux/gnupload build-aux/pmccabe.css build-aux/pmccabe2html build-aux/update-copyright build-aux/useless-if-before-free build-aux/vc-list-files doc/fdl-1.3.texi doc/gendocs_template lib/dummy.c m4/00gnulib.m4 m4/autobuild.m4 m4/gnulib-common.m4 m4/ld-version-script.m4 m4/lib-ld.m4 m4/lib-link.m4 m4/lib-prefix.m4 m4/manywarnings.m4 m4/valgrind-tests.m4 m4/warnings.m4 top/GNUmakefile top/maint.mk ]) ����������������������������������gss-1.0.3/gl/m4/gnulib-cache.m4���������������������������������������������������������������������0000644�0000000�0000000�00000004244�12415470477�012722� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright (C) 2002-2014 Free Software Foundation, Inc. # # 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 3 of the License, or # (at your option) any later version. # # This 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 file. If not, see <http://www.gnu.org/licenses/>. # # 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 that use version control, this file is meant to be put under # version control, 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=gl/tests --aux-dir=build-aux --no-conditional-dependencies --libtool --macro-prefix=gl --no-vc-files autobuild fdl-1.3 gendocs gnupload havelib lib-symbol-versions maintainer-makefile manywarnings pmccabe2html update-copyright valgrind-tests 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 gnupload havelib lib-symbol-versions maintainer-makefile manywarnings pmccabe2html update-copyright valgrind-tests warnings ]) gl_AVOID([]) gl_SOURCE_BASE([gl]) gl_M4_BASE([gl/m4]) gl_PO_BASE([]) gl_DOC_BASE([doc]) gl_TESTS_BASE([gl/tests]) gl_LIB([libgnu]) gl_MAKEFILE_NAME([]) gl_LIBTOOL gl_MACRO_PREFIX([gl]) gl_PO_DOMAIN([]) gl_WITNESS_C_MACRO([]) gl_VC_FILES([false]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gss-1.0.3/gl/m4/warnings.m4�������������������������������������������������������������������������0000644�0000000�0000000�00000005603�12415470476�012230� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# warnings.m4 serial 11 dnl Copyright (C) 2008-2014 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_COMPILER_OPTION_IF(OPTION, [IF-SUPPORTED], [IF-NOT-SUPPORTED], # [PROGRAM = AC_LANG_PROGRAM()]) # ----------------------------------------------------------------- # Check if the compiler supports OPTION when compiling PROGRAM. # # FIXME: gl_Warn must be used unquoted until we can assume Autoconf # 2.64 or newer. AC_DEFUN([gl_COMPILER_OPTION_IF], [AS_VAR_PUSHDEF([gl_Warn], [gl_cv_warn_[]_AC_LANG_ABBREV[]_$1])dnl AS_VAR_PUSHDEF([gl_Flags], [_AC_LANG_PREFIX[]FLAGS])dnl AS_LITERAL_IF([$1], [m4_pushdef([gl_Positive], m4_bpatsubst([$1], [^-Wno-], [-W]))], [gl_positive="$1" case $gl_positive in -Wno-*) gl_positive=-W`expr "X$gl_positive" : 'X-Wno-\(.*\)'` ;; esac m4_pushdef([gl_Positive], [$gl_positive])])dnl AC_CACHE_CHECK([whether _AC_LANG compiler handles $1], m4_defn([gl_Warn]), [ gl_save_compiler_FLAGS="$gl_Flags" gl_AS_VAR_APPEND(m4_defn([gl_Flags]), [" $gl_unknown_warnings_are_errors ]m4_defn([gl_Positive])["]) AC_LINK_IFELSE([m4_default([$4], [AC_LANG_PROGRAM([])])], [AS_VAR_SET(gl_Warn, [yes])], [AS_VAR_SET(gl_Warn, [no])]) gl_Flags="$gl_save_compiler_FLAGS" ]) AS_VAR_IF(gl_Warn, [yes], [$2], [$3]) m4_popdef([gl_Positive])dnl AS_VAR_POPDEF([gl_Flags])dnl AS_VAR_POPDEF([gl_Warn])dnl ]) # gl_UNKNOWN_WARNINGS_ARE_ERRORS # ------------------------------ # Clang doesn't complain about unknown warning options unless one also # specifies -Wunknown-warning-option -Werror. Detect this. AC_DEFUN([gl_UNKNOWN_WARNINGS_ARE_ERRORS], [gl_COMPILER_OPTION_IF([-Werror -Wunknown-warning-option], [gl_unknown_warnings_are_errors='-Wunknown-warning-option -Werror'], [gl_unknown_warnings_are_errors=])]) # gl_WARN_ADD(OPTION, [VARIABLE = WARN_CFLAGS], # [PROGRAM = AC_LANG_PROGRAM()]) # --------------------------------------------- # Adds parameter to WARN_CFLAGS if the compiler supports it when # compiling PROGRAM. For example, gl_WARN_ADD([-Wparentheses]). # # If VARIABLE is a variable name, AC_SUBST it. AC_DEFUN([gl_WARN_ADD], [AC_REQUIRE([gl_UNKNOWN_WARNINGS_ARE_ERRORS]) gl_COMPILER_OPTION_IF([$1], [gl_AS_VAR_APPEND(m4_if([$2], [], [[WARN_CFLAGS]], [[$2]]), [" $1"])], [], [$3]) m4_ifval([$2], [AS_LITERAL_IF([$2], [AC_SUBST([$2])])], [AC_SUBST([WARN_CFLAGS])])dnl ]) # Local Variables: # mode: autoconf # End: �����������������������������������������������������������������������������������������������������������������������������gss-1.0.3/gl/m4/autobuild.m4������������������������������������������������������������������������0000644�0000000�0000000�00000002010�12415470476�012355� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# autobuild.m4 serial 7 dnl Copyright (C) 2004, 2006-2014 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 # 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 ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gss-1.0.3/THANKS������������������������������������������������������������������������������������0000664�0000000�0000000�00000001142�12415506237�010116� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������GSS THANKS -- Acknowledgements. Copyright (C) 2003-2014 Simon Josefsson See the end for copying conditions. Bug reports, patches, translations, test vectors and/or suggestions were also received from or written by: Wojciech Polak Jakub Bogusz Joe Orton Clytie Siddall Mike Castle Russ Allbery Dagobert Michelsen <dam@opencsw.org> Ludovic Courtès <ludo@gnu.org> ---------------------------------------------------------------------- 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. ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gss-1.0.3/build-aux/��������������������������������������������������������������������������������0000755�0000000�0000000�00000000000�12415510376�011154� 5����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������gss-1.0.3/build-aux/compile�������������������������������������������������������������������������0000755�0000000�0000000�00000016245�12415507621�012461� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /bin/sh # Wrapper for compilers which do not understand '-c -o'. scriptversion=2012-10-14.11; # UTC # Copyright (C) 1999-2013 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>. nl=' ' # We need space, tab and new line, in precisely that order. Quoting is # there to prevent tools from complaining about whitespace usage. IFS=" "" $nl" file_conv= # func_file_conv build_file lazy # Convert a $build file to $host form and store it in $file # Currently only supports Windows hosts. If the determined conversion # type is listed in (the comma separated) LAZY, no conversion will # take place. func_file_conv () { file=$1 case $file in / | /[!/]*) # absolute file, and not a UNC file if test -z "$file_conv"; then # lazily determine how to convert abs files case `uname -s` in MINGW*) file_conv=mingw ;; CYGWIN*) file_conv=cygwin ;; *) file_conv=wine ;; esac fi case $file_conv/,$2, in *,$file_conv,*) ;; mingw/*) file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'` ;; cygwin/*) file=`cygpath -m "$file" || echo "$file"` ;; wine/*) file=`winepath -w "$file" || echo "$file"` ;; esac ;; esac } # func_cl_dashL linkdir # Make cl look for libraries in LINKDIR func_cl_dashL () { func_file_conv "$1" if test -z "$lib_path"; then lib_path=$file else lib_path="$lib_path;$file" fi linker_opts="$linker_opts -LIBPATH:$file" } # func_cl_dashl library # Do a library search-path lookup for cl func_cl_dashl () { lib=$1 found=no save_IFS=$IFS IFS=';' for dir in $lib_path $LIB do IFS=$save_IFS if $shared && test -f "$dir/$lib.dll.lib"; then found=yes lib=$dir/$lib.dll.lib break fi if test -f "$dir/$lib.lib"; then found=yes lib=$dir/$lib.lib break fi if test -f "$dir/lib$lib.a"; then found=yes lib=$dir/lib$lib.a break fi done IFS=$save_IFS if test "$found" != yes; then lib=$lib.lib fi } # func_cl_wrapper cl arg... # Adjust compile command to suit cl func_cl_wrapper () { # Assume a capable shell lib_path= shared=: linker_opts= for arg do if test -n "$eat"; then eat= else case $1 in -o) # configure might choose to run compile as 'compile cc -o foo foo.c'. eat=1 case $2 in *.o | *.[oO][bB][jJ]) func_file_conv "$2" set x "$@" -Fo"$file" shift ;; *) func_file_conv "$2" set x "$@" -Fe"$file" shift ;; esac ;; -I) eat=1 func_file_conv "$2" mingw set x "$@" -I"$file" shift ;; -I*) func_file_conv "${1#-I}" mingw set x "$@" -I"$file" shift ;; -l) eat=1 func_cl_dashl "$2" set x "$@" "$lib" shift ;; -l*) func_cl_dashl "${1#-l}" set x "$@" "$lib" shift ;; -L) eat=1 func_cl_dashL "$2" ;; -L*) func_cl_dashL "${1#-L}" ;; -static) shared=false ;; -Wl,*) arg=${1#-Wl,} save_ifs="$IFS"; IFS=',' for flag in $arg; do IFS="$save_ifs" linker_opts="$linker_opts $flag" done IFS="$save_ifs" ;; -Xlinker) eat=1 linker_opts="$linker_opts $2" ;; -*) set x "$@" "$1" shift ;; *.cc | *.CC | *.cxx | *.CXX | *.[cC]++) func_file_conv "$1" set x "$@" -Tp"$file" shift ;; *.c | *.cpp | *.CPP | *.lib | *.LIB | *.Lib | *.OBJ | *.obj | *.[oO]) func_file_conv "$1" mingw set x "$@" "$file" shift ;; *) set x "$@" "$1" shift ;; esac fi shift done if test -n "$linker_opts"; then linker_opts="-link$linker_opts" fi exec "$@" $linker_opts exit 1 } eat= case $1 in '') echo "$0: No command. Try '$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: compile [--help] [--version] PROGRAM [ARGS] Wrapper for compilers which do not understand '-c -o'. Remove '-o dest.o' from ARGS, run PROGRAM with the remaining arguments, and rename the output as expected. If you are trying to build a whole package this is not the right script to run: please start by reading the file 'INSTALL'. Report bugs to <bug-automake@gnu.org>. EOF exit $? ;; -v | --v*) echo "compile $scriptversion" exit $? ;; cl | *[/\\]cl | cl.exe | *[/\\]cl.exe ) func_cl_wrapper "$@" # Doesn't return... ;; esac ofile= cfile= for arg do if test -n "$eat"; then eat= else case $1 in -o) # configure might choose to run compile as 'compile cc -o foo foo.c'. # So we strip '-o arg' only if arg is an object. eat=1 case $2 in *.o | *.obj) ofile=$2 ;; *) set x "$@" -o "$2" shift ;; esac ;; *.c) cfile=$1 set x "$@" "$1" shift ;; *) set x "$@" "$1" shift ;; esac fi shift done if test -z "$ofile" || test -z "$cfile"; then # If no '-o' option was seen then we might have been invoked from a # pattern rule where we don't need one. That is ok -- this is a # normal compilation that the losing compiler can handle. If no # '.c' file was seen then we are probably linking. That is also # ok. exec "$@" fi # Name of file we expect compiler to create. cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'` # Create the lock directory. # Note: use '[/\\:.-]' here to ensure that we don't use the same name # that we are using for the .o file. Also, base the name on the expected # object file name, since that is what matters with a parallel build. lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d while true; do if mkdir "$lockdir" >/dev/null 2>&1; then break fi sleep 1 done # FIXME: race condition here if user kills between mkdir and trap. trap "rmdir '$lockdir'; exit 1" 1 2 15 # Run the compile. "$@" ret=$? if test -f "$cofile"; then test "$cofile" = "$ofile" || mv "$cofile" "$ofile" elif test -f "${cofile}bj"; then test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile" fi rmdir "$lockdir" 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: �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gss-1.0.3/build-aux/config.rpath��������������������������������������������������������������������0000755�0000000�0000000�00000044216�12415506675�013422� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /bin/sh # Output a system dependent set of variables, describing how to set the # run time search path of shared libraries in an executable. # # Copyright 1996-2014 Free Software Foundation, Inc. # Taken from GNU libtool, 2001 # Originally by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 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. # # The first argument passed to this file is the canonical host specification, # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # The environment variables CC, GCC, LDFLAGS, LD, with_gnu_ld # should be set by the caller. # # The set of defined variables is at the end of this script. # Known limitations: # - On IRIX 6.5 with CC="cc", the run time search patch must not be longer # than 256 bytes, otherwise the compiler driver will dump core. The only # known workaround is to choose shorter directory names for the build # directory and/or the installation directory. # All known linkers require a '.a' archive for static linking (except MSVC, # which needs '.lib'). libext=a shrext=.so host="$1" host_cpu=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` host_vendor=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` host_os=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` # Code taken from libtool.m4's _LT_CC_BASENAME. for cc_temp in $CC""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`echo "$cc_temp" | sed -e 's%^.*/%%'` # Code taken from libtool.m4's _LT_COMPILER_PIC. wl= if test "$GCC" = yes; then wl='-Wl,' else case "$host_os" in aix*) wl='-Wl,' ;; mingw* | cygwin* | pw32* | os2* | cegcc*) ;; hpux9* | hpux10* | hpux11*) wl='-Wl,' ;; irix5* | irix6* | nonstopux*) wl='-Wl,' ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in ecc*) wl='-Wl,' ;; icc* | ifort*) wl='-Wl,' ;; lf95*) wl='-Wl,' ;; nagfor*) wl='-Wl,-Wl,,' ;; pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) wl='-Wl,' ;; ccc*) wl='-Wl,' ;; xl* | bgxl* | bgf* | mpixl*) wl='-Wl,' ;; como) wl='-lopt=' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ F* | *Sun*Fortran*) wl= ;; *Sun\ C*) wl='-Wl,' ;; esac ;; esac ;; newsos6) ;; *nto* | *qnx*) ;; osf3* | osf4* | osf5*) wl='-Wl,' ;; rdos*) ;; solaris*) case $cc_basename in f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) wl='-Qoption ld ' ;; *) wl='-Wl,' ;; esac ;; sunos4*) wl='-Qoption ld ' ;; sysv4 | sysv4.2uw2* | sysv4.3*) wl='-Wl,' ;; sysv4*MP*) ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) wl='-Wl,' ;; unicos*) wl='-Wl,' ;; uts4*) ;; esac fi # Code taken from libtool.m4's _LT_LINKER_SHLIBS. hardcode_libdir_flag_spec= hardcode_libdir_separator= hardcode_direct=no hardcode_minus_L=no 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 ;; esac ld_shlibs=yes if test "$with_gnu_ld" = yes; then # 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. # Unlike libtool, we use -rpath here, not --rpath, since the documented # option of GNU ld is called -rpath, not --rpath. hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' 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 fi ;; amigaos*) case "$host_cpu" in powerpc) ;; m68k) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; esac ;; beos*) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then : else ld_shlibs=no fi ;; cygwin* | mingw* | pw32* | cegcc*) # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. hardcode_libdir_flag_spec='-L$libdir' if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then : else ld_shlibs=no fi ;; haiku*) ;; interix[3-9]*) hardcode_direct=no hardcode_libdir_flag_spec='${wl}-rpath,$libdir' ;; gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then : else ld_shlibs=no fi ;; netbsd*) ;; solaris*) if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then ld_shlibs=no elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then : 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 ;; *) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`' else ld_shlibs=no fi ;; esac ;; sunos4*) hardcode_direct=yes ;; *) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then : else ld_shlibs=no fi ;; esac if test "$ld_shlibs" = no; then hardcode_libdir_flag_spec= fi else case "$host_os" in aix3*) # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. hardcode_minus_L=yes if test "$GCC" = yes; 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 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 if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then aix_use_runtimelinking=yes break fi done ;; esac fi hardcode_direct=yes hardcode_libdir_separator=':' if test "$GCC" = yes; then case $host_os in aix4.[012]|aix4.[012].*) 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 hardcode_minus_L=yes hardcode_libdir_flag_spec='-L$libdir' hardcode_libdir_separator= fi ;; esac fi # Begin _LT_AC_SYS_LIBPATH_AIX. echo 'int main () { return 0; }' > conftest.c ${CC} ${LDFLAGS} conftest.c -o conftest aix_libpath=`dump -H conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` fi if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib" fi rm -f conftest.c conftest # End _LT_AC_SYS_LIBPATH_AIX. if test "$aix_use_runtimelinking" = yes; then hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" else if test "$host_cpu" = ia64; then hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' else hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" fi fi ;; amigaos*) case "$host_cpu" in powerpc) ;; m68k) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; esac ;; bsdi[45]*) ;; 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=' ' libext=lib ;; darwin* | rhapsody*) hardcode_direct=no if { case $cc_basename in ifort*) true;; *) test "$GCC" = yes;; esac; }; then : else ld_shlibs=no fi ;; dgux*) hardcode_libdir_flag_spec='-L$libdir' ;; freebsd2.[01]*) hardcode_direct=yes hardcode_minus_L=yes ;; freebsd* | dragonfly*) hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes ;; hpux9*) 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 ;; hpux10*) if test "$with_gnu_ld" = no; then 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 fi ;; hpux11*) 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_direct=yes # 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*) hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; netbsd*) hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes ;; newsos6) hardcode_direct=yes hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; *nto* | *qnx*) ;; openbsd*) if test -f /usr/libexec/ld.so; then hardcode_direct=yes if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then hardcode_libdir_flag_spec='${wl}-rpath,$libdir' else case "$host_os" in openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) hardcode_libdir_flag_spec='-R$libdir' ;; *) 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 ;; osf3*) hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; osf4* | osf5*) if test "$GCC" = yes; then hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' else # Both cc and cxx compiler support -rpath directly hardcode_libdir_flag_spec='-rpath $libdir' fi hardcode_libdir_separator=: ;; solaris*) hardcode_libdir_flag_spec='-R$libdir' ;; sunos4*) hardcode_libdir_flag_spec='-L$libdir' hardcode_direct=yes hardcode_minus_L=yes ;; sysv4) case $host_vendor in sni) hardcode_direct=yes # is this really true??? ;; siemens) hardcode_direct=no ;; motorola) hardcode_direct=no #Motorola manual says yes, but my tests say they lie ;; esac ;; sysv4.3*) ;; sysv4*MP*) if test -d /usr/nec; then ld_shlibs=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) ;; sysv5* | sco3.2v5* | sco5v6*) hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`' hardcode_libdir_separator=':' ;; uts4*) hardcode_libdir_flag_spec='-L$libdir' ;; *) ld_shlibs=no ;; esac fi # Check dynamic linker characteristics # Code taken from libtool.m4's _LT_SYS_DYNAMIC_LINKER. # Unlike libtool.m4, here we don't care about _all_ names of the library, but # only about the one the linker finds when passed -lNAME. This is the last # element of library_names_spec in libtool.m4, or possibly two of them if the # linker has special search rules. library_names_spec= # the last element of library_names_spec in libtool.m4 libname_spec='lib$name' case "$host_os" in aix3*) library_names_spec='$libname.a' ;; aix[4-9]*) library_names_spec='$libname$shrext' ;; amigaos*) case "$host_cpu" in powerpc*) library_names_spec='$libname$shrext' ;; m68k) library_names_spec='$libname.a' ;; esac ;; beos*) library_names_spec='$libname$shrext' ;; bsdi[45]*) library_names_spec='$libname$shrext' ;; cygwin* | mingw* | pw32* | cegcc*) shrext=.dll library_names_spec='$libname.dll.a $libname.lib' ;; darwin* | rhapsody*) shrext=.dylib library_names_spec='$libname$shrext' ;; dgux*) library_names_spec='$libname$shrext' ;; freebsd[23].*) library_names_spec='$libname$shrext$versuffix' ;; freebsd* | dragonfly*) library_names_spec='$libname$shrext' ;; gnu*) library_names_spec='$libname$shrext' ;; haiku*) library_names_spec='$libname$shrext' ;; hpux9* | hpux10* | hpux11*) case $host_cpu in ia64*) shrext=.so ;; hppa*64*) shrext=.sl ;; *) shrext=.sl ;; esac library_names_spec='$libname$shrext' ;; interix[3-9]*) library_names_spec='$libname$shrext' ;; irix5* | irix6* | nonstopux*) library_names_spec='$libname$shrext' case "$host_os" in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= ;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 ;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 ;; *) libsuff= shlibsuff= ;; esac ;; esac ;; linux*oldld* | linux*aout* | linux*coff*) ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) library_names_spec='$libname$shrext' ;; knetbsd*-gnu) library_names_spec='$libname$shrext' ;; netbsd*) library_names_spec='$libname$shrext' ;; newsos6) library_names_spec='$libname$shrext' ;; *nto* | *qnx*) library_names_spec='$libname$shrext' ;; openbsd*) library_names_spec='$libname$shrext$versuffix' ;; os2*) libname_spec='$name' shrext=.dll library_names_spec='$libname.a' ;; osf3* | osf4* | osf5*) library_names_spec='$libname$shrext' ;; rdos*) ;; solaris*) library_names_spec='$libname$shrext' ;; sunos4*) library_names_spec='$libname$shrext$versuffix' ;; sysv4 | sysv4.3*) library_names_spec='$libname$shrext' ;; sysv4*MP*) library_names_spec='$libname$shrext' ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) library_names_spec='$libname$shrext' ;; tpf*) library_names_spec='$libname$shrext' ;; uts4*) library_names_spec='$libname$shrext' ;; esac sed_quote_subst='s/\(["`$\\]\)/\\\1/g' escaped_wl=`echo "X$wl" | sed -e 's/^X//' -e "$sed_quote_subst"` shlibext=`echo "$shrext" | sed -e 's,^\.,,'` escaped_libname_spec=`echo "X$libname_spec" | sed -e 's/^X//' -e "$sed_quote_subst"` escaped_library_names_spec=`echo "X$library_names_spec" | sed -e 's/^X//' -e "$sed_quote_subst"` escaped_hardcode_libdir_flag_spec=`echo "X$hardcode_libdir_flag_spec" | sed -e 's/^X//' -e "$sed_quote_subst"` LC_ALL=C sed -e 's/^\([a-zA-Z0-9_]*\)=/acl_cv_\1=/' <<EOF # How to pass a linker flag through the compiler. wl="$escaped_wl" # Static library suffix (normally "a"). libext="$libext" # Shared library suffix (normally "so"). shlibext="$shlibext" # Format of library name prefix. libname_spec="$escaped_libname_spec" # Library names that the linker finds when passed -lNAME. library_names_spec="$escaped_library_names_spec" # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist. hardcode_libdir_flag_spec="$escaped_hardcode_libdir_flag_spec" # Whether we need a single -rpath flag with a separated argument. hardcode_libdir_separator="$hardcode_libdir_separator" # Set to yes if using DIR/libNAME.so during linking hardcodes DIR into the # resulting binary. hardcode_direct="$hardcode_direct" # Set to yes if using the -LDIR flag during linking hardcodes DIR into the # resulting binary. hardcode_minus_L="$hardcode_minus_L" EOF ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gss-1.0.3/build-aux/mdate-sh������������������������������������������������������������������������0000755�0000000�0000000�00000013637�12415507621�012535� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Get modification time of a file or directory and pretty-print it. scriptversion=2010-08-21.06; # UTC # Copyright (C) 1995-2013 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>. 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 fi 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 day of FILE, in the format: 1 January 1970 Report bugs to <bug-automake@gnu.org>. EOF exit $? ;; -v | --v*) echo "mdate-sh $scriptversion" exit $? ;; esac error () { echo "$0: $1" >&2 exit 1 } # 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 test $# -gt 0 || error "failed parsing '$ls_command /' output" 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 test -n "$month" || error "failed parsing '$ls_command /' output" # 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: �������������������������������������������������������������������������������������������������gss-1.0.3/build-aux/vc-list-files�������������������������������������������������������������������0000755�0000000�0000000�00000007343�12415470476�013520� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # List version-controlled file names. # Print a version string. scriptversion=2011-05-16.22; # UTC # Copyright (C) 2006-2014 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 test $# = 0 && set . for dir do 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 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: ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gss-1.0.3/build-aux/ltmain.sh�����������������������������������������������������������������������0000644�0000000�0000000�00001052030�12415507612�012714� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ # libtool (GNU libtool) 2.4.2 # Written by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996 # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, 2006, # 2007, 2008, 2009, 2010, 2011 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 # --no-quiet, --no-silent # print informational messages (default) # --no-warn don't display warning messages # --tag=TAG use configuration variables from tag TAG # -v, --verbose print more informational messages than default # --no-verbose don't print the extra informational messages # --version print version information # -h, --help, --help-all print short, long, or detailed 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. When passed as first option, # `--mode=MODE' may be abbreviated as `MODE' or a unique abbreviation of that. # 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.4.2 Debian-2.4.2-1.10 # automake: $automake_version # autoconf: $autoconf_version # # Report bugs to <bug-libtool@gnu.org>. # GNU libtool home page: <http://www.gnu.org/software/libtool/>. # General help using GNU software: <http://www.gnu.org/gethelp/>. PROGRAM=libtool PACKAGE=libtool VERSION="2.4.2 Debian-2.4.2-1.10" TIMESTAMP="" package_revision=1.3337 # 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 # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF $1 _LTECHO_EOF' } # NLS nuisances: We save the old values to restore during execute mode. 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 LC_ALL=C LANGUAGE=C export LANGUAGE LC_ALL $lt_unset CDPATH # 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" : ${CP="cp -f"} test "${ECHO+set}" = set || ECHO=${as_echo-'printf %s\n'} : ${MAKE="make"} : ${MKDIR="mkdir"} : ${MV="mv -f"} : ${RM="rm -f"} : ${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 file append nondir_replacement # Compute the dirname of FILE. If nonempty, add APPEND to the result, # otherwise set result to NONDIR_REPLACEMENT. func_dirname () { func_dirname_result=`$ECHO "${1}" | $SED "$dirname"` if test "X$func_dirname_result" = "X${1}"; then func_dirname_result="${3}" else func_dirname_result="$func_dirname_result${2}" fi } # func_dirname may be replaced by extended shell implementation # func_basename file func_basename () { func_basename_result=`$ECHO "${1}" | $SED "$basename"` } # func_basename may be replaced by extended shell implementation # 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 "${1}" | $SED -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 "${1}" | $SED -e "$basename"` } # func_dirname_and_basename may be replaced by extended shell implementation # 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 "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; esac } # func_stripname may be replaced by extended shell implementation # These SED scripts presuppose an absolute path with a trailing slash. pathcar='s,^/\([^/]*\).*$,\1,' pathcdr='s,^/[^/]*,,' removedotparts=':dotsl s@/\./@/@g t dotsl s,/\.$,/,' collapseslashes='s@/\{1,\}@/@g' finalslash='s,/*$,/,' # func_normal_abspath PATH # Remove doubled-up and trailing slashes, "." path components, # and cancel out any ".." path components in PATH after making # it an absolute path. # value returned in "$func_normal_abspath_result" func_normal_abspath () { # Start from root dir and reassemble the path. func_normal_abspath_result= func_normal_abspath_tpath=$1 func_normal_abspath_altnamespace= case $func_normal_abspath_tpath in "") # Empty path, that just means $cwd. func_stripname '' '/' "`pwd`" func_normal_abspath_result=$func_stripname_result return ;; # The next three entries are used to spot a run of precisely # two leading slashes without using negated character classes; # we take advantage of case's first-match behaviour. ///*) # Unusual form of absolute path, do nothing. ;; //*) # Not necessarily an ordinary path; POSIX reserves leading '//' # and for example Cygwin uses it to access remote file shares # over CIFS/SMB, so we conserve a leading double slash if found. func_normal_abspath_altnamespace=/ ;; /*) # Absolute path, do nothing. ;; *) # Relative path, prepend $cwd. func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath ;; esac # Cancel out all the simple stuff to save iterations. We also want # the path to end with a slash for ease of parsing, so make sure # there is one (and only one) here. func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ -e "$removedotparts" -e "$collapseslashes" -e "$finalslash"` while :; do # Processed it all yet? if test "$func_normal_abspath_tpath" = / ; then # If we ascended to the root using ".." the result may be empty now. if test -z "$func_normal_abspath_result" ; then func_normal_abspath_result=/ fi break fi func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \ -e "$pathcar"` func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ -e "$pathcdr"` # Figure out what to do with it case $func_normal_abspath_tcomponent in "") # Trailing empty path component, ignore it. ;; ..) # Parent dir; strip last assembled component from result. func_dirname "$func_normal_abspath_result" func_normal_abspath_result=$func_dirname_result ;; *) # Actual path component, append it. func_normal_abspath_result=$func_normal_abspath_result/$func_normal_abspath_tcomponent ;; esac done # Restore leading double-slash if one was found on entry. func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result } # func_relative_path SRCDIR DSTDIR # generates a relative path from SRCDIR to DSTDIR, with a trailing # slash if non-empty, suitable for immediately appending a filename # without needing to append a separator. # value returned in "$func_relative_path_result" func_relative_path () { func_relative_path_result= func_normal_abspath "$1" func_relative_path_tlibdir=$func_normal_abspath_result func_normal_abspath "$2" func_relative_path_tbindir=$func_normal_abspath_result # Ascend the tree starting from libdir while :; do # check if we have found a prefix of bindir case $func_relative_path_tbindir in $func_relative_path_tlibdir) # found an exact match func_relative_path_tcancelled= break ;; $func_relative_path_tlibdir*) # found a matching prefix func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir" func_relative_path_tcancelled=$func_stripname_result if test -z "$func_relative_path_result"; then func_relative_path_result=. fi break ;; *) func_dirname $func_relative_path_tlibdir func_relative_path_tlibdir=${func_dirname_result} if test "x$func_relative_path_tlibdir" = x ; then # Have to descend all the way to the root! func_relative_path_result=../$func_relative_path_result func_relative_path_tcancelled=$func_relative_path_tbindir break fi func_relative_path_result=../$func_relative_path_result ;; esac done # Now calculate path; take care to avoid doubling-up slashes. func_stripname '' '/' "$func_relative_path_result" func_relative_path_result=$func_stripname_result func_stripname '/' '/' "$func_relative_path_tcancelled" if test "x$func_stripname_result" != x ; then func_relative_path_result=${func_relative_path_result}/${func_stripname_result} fi # Normalisation. If bindir is libdir, return empty string, # else relative path ending with a slash; either way, target # file name can be directly appended. if test ! -z "$func_relative_path_result"; then func_stripname './' '' "$func_relative_path_result/" func_relative_path_result=$func_stripname_result fi } # The name of this program: func_dirname_and_basename "$progpath" progname=$func_basename_result # 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=${PATH_SEPARATOR-:} 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' # Sed substitution that turns a string into a regex matching for the # string literally. sed_make_literal_regex='s,[].[^$\\*\/],\\&,g' # Sed substitution that converts a w32 file name or path # which contains forward slashes, into one that contains # (escaped) backslashes. A very naive implementation. lt_sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|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: ${opt_mode+$opt_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_echo_all arg... # Invoke $ECHO with all args, space-separated. func_echo_all () { $ECHO "$*" } # func_error arg... # Echo program name prefixed message to standard error. func_error () { $ECHO "$progname: ${opt_mode+$opt_mode: }"${1+"$@"} 1>&2 } # func_warning arg... # Echo program name prefixed warning message to standard error. func_warning () { $opt_warning && $ECHO "$progname: ${opt_mode+$opt_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 "$my_directory_path" | $SED -e "$dirname"` done my_dir_list=`$ECHO "$my_dir_list" | $SED '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 "$my_tmpdir" } # 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 "$1" | $SED "$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 "$1" | $SED \ -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_tr_sh # Turn $1 into a string suitable for a shell variable name. # Result is stored in $func_tr_sh_result. All characters # not in the set a-zA-Z0-9_ are replaced with '_'. Further, # if $1 begins with a digit, a '_' is prepended as well. func_tr_sh () { case $1 in [0-9]* | *[!a-zA-Z0-9_]*) func_tr_sh_result=`$ECHO "$1" | $SED 's/^\([0-9]\)/_\1/; s/[^a-zA-Z0-9_]/_/g'` ;; * ) func_tr_sh_result=$1 ;; esac } # func_version # Echo version message to standard output and exit. func_version () { $opt_debug $SED -n '/(C)/!b go :more /\./!{ N s/\n# / / b more } :go /^# '$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 () { $opt_debug $SED -n '/^# Usage:/,/^# *.*--help/ { s/^# // s/^# *$// s/\$progname/'$progname'/ p }' < "$progpath" echo $ECHO "run \`$progname --help | more' for full usage" exit $? } # func_help [NOEXIT] # Echo long help message to standard output and exit, # unless 'noexit' is passed as argument. func_help () { $opt_debug $SED -n '/^# Usage:/,/# Report bugs to/ { :print 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-automake} --version) 2>/dev/null |$SED 1q`"'/ s/\$autoconf_version/'"`(${AUTOCONF-autoconf} --version) 2>/dev/null |$SED 1q`"'/ p d } /^# .* home page:/b print /^# General help using/b print ' < "$progpath" ret=$? if test -z "$1"; then exit $ret fi } # func_missing_arg argname # Echo program name prefixed message to standard error and set global # exit_cmd. func_missing_arg () { $opt_debug func_error "missing argument for $1." exit_cmd=exit } # func_split_short_opt shortopt # Set func_split_short_opt_name and func_split_short_opt_arg shell # variables after splitting SHORTOPT after the 2nd character. func_split_short_opt () { my_sed_short_opt='1s/^\(..\).*$/\1/;q' my_sed_short_rest='1s/^..\(.*\)$/\1/;q' func_split_short_opt_name=`$ECHO "$1" | $SED "$my_sed_short_opt"` func_split_short_opt_arg=`$ECHO "$1" | $SED "$my_sed_short_rest"` } # func_split_short_opt may be replaced by extended shell implementation # func_split_long_opt longopt # Set func_split_long_opt_name and func_split_long_opt_arg shell # variables after splitting LONGOPT at the `=' sign. func_split_long_opt () { my_sed_long_opt='1s/^\(--[^=]*\)=.*/\1/;q' my_sed_long_arg='1s/^--[^=]*=//' func_split_long_opt_name=`$ECHO "$1" | $SED "$my_sed_long_opt"` func_split_long_opt_arg=`$ECHO "$1" | $SED "$my_sed_long_arg"` } # func_split_long_opt may be replaced by extended shell implementation exit_cmd=: magic="%%%MAGIC variable%%%" magic_exe="%%%MAGIC EXE variable%%%" # Global variables. nonopt= preserve_args= lo2o="s/\\.lo\$/.${objext}/" o2lo="s/\\.${objext}\$/.lo/" extracted_archives= extracted_serial=0 # 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_append var value # Append VALUE to the end of shell variable VAR. func_append () { eval "${1}=\$${1}\${2}" } # func_append may be replaced by extended shell implementation # func_append_quoted var value # Quote VALUE and append to the end of shell variable VAR, separated # by a space. func_append_quoted () { func_quote_for_eval "${2}" eval "${1}=\$${1}\\ \$func_quote_for_eval_result" } # func_append_quoted may be replaced by extended shell implementation # func_arith arithmetic-term... func_arith () { func_arith_result=`expr "${@}"` } # func_arith may be replaced by extended shell implementation # func_len string # STRING may not start with a hyphen. func_len () { func_len_result=`expr "${1}" : ".*" 2>/dev/null || echo $max_cmd_len` } # func_len may be replaced by extended shell implementation # func_lo2o object func_lo2o () { func_lo2o_result=`$ECHO "${1}" | $SED "$lo2o"` } # func_lo2o may be replaced by extended shell implementation # func_xform libobj-or-source func_xform () { func_xform_result=`$ECHO "${1}" | $SED 's/\.[^.]*$/.lo/'` } # func_xform may be replaced by extended shell implementation # 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 } # 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 } # 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 # Option defaults: opt_debug=: opt_dry_run=false opt_config=false opt_preserve_dup_deps=false opt_features=false opt_finish=false opt_help=false opt_help_all=false opt_silent=: opt_warning=: opt_verbose=: opt_silent=false opt_verbose=false # Parse options once, thoroughly. This comes as soon as possible in the # script to make things like `--version' happen as quickly as we can. { # this just eases exit handling while test $# -gt 0; do opt="$1" shift case $opt in --debug|-x) opt_debug='set -x' func_echo "enabling shell trace mode" $opt_debug ;; --dry-run|--dryrun|-n) opt_dry_run=: ;; --config) opt_config=: func_config ;; --dlopen|-dlopen) optarg="$1" opt_dlopen="${opt_dlopen+$opt_dlopen }$optarg" shift ;; --preserve-dup-deps) opt_preserve_dup_deps=: ;; --features) opt_features=: func_features ;; --finish) opt_finish=: set dummy --mode finish ${1+"$@"}; shift ;; --help) opt_help=: ;; --help-all) opt_help_all=: opt_help=': help-all' ;; --mode) test $# = 0 && func_missing_arg $opt && break optarg="$1" opt_mode="$optarg" case $optarg 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 shift ;; --no-silent|--no-quiet) opt_silent=false func_append preserve_args " $opt" ;; --no-warning|--no-warn) opt_warning=false func_append preserve_args " $opt" ;; --no-verbose) opt_verbose=false func_append preserve_args " $opt" ;; --silent|--quiet) opt_silent=: func_append preserve_args " $opt" opt_verbose=false ;; --verbose|-v) opt_verbose=: func_append preserve_args " $opt" opt_silent=false ;; --tag) test $# = 0 && func_missing_arg $opt && break optarg="$1" opt_tag="$optarg" func_append preserve_args " $opt $optarg" func_enable_tag "$optarg" shift ;; -\?|-h) func_usage ;; --help) func_help ;; --version) func_version ;; # Separate optargs to long options: --*=*) func_split_long_opt "$opt" set dummy "$func_split_long_opt_name" "$func_split_long_opt_arg" ${1+"$@"} shift ;; # Separate non-argument short options: -\?*|-h*|-n*|-v*) func_split_short_opt "$opt" set dummy "$func_split_short_opt_name" "-$func_split_short_opt_arg" ${1+"$@"} shift ;; --) break ;; -*) func_fatal_help "unrecognized option \`$opt'" ;; *) set dummy "$opt" ${1+"$@"}; shift; break ;; esac done # Validate options: # save first non-option argument if test "$#" -gt 0; then nonopt="$opt" shift fi # preserve --debug test "$opt_debug" = : || func_append preserve_args " --debug" 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_preserve_dup_deps ;; esac $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 # Darwin sucks eval std_shrext=\"$shrext_cmds\" # Only execute mode is allowed to have -dlopen flags. if test -n "$opt_dlopen" && test "$opt_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=$opt_mode' for more information." } # Bail if the options were screwed $exit_cmd $EXIT_FAILURE } ## ----------- ## ## Main. ## ## ----------- ## # 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_dirname_and_basename "$1" "" "." func_stripname '' '.exe' "$func_basename_result" func_ltwrapper_scriptname_result="$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper" } # 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_resolve_sysroot PATH # Replace a leading = in PATH with a sysroot. Store the result into # func_resolve_sysroot_result func_resolve_sysroot () { func_resolve_sysroot_result=$1 case $func_resolve_sysroot_result in =*) func_stripname '=' '' "$func_resolve_sysroot_result" func_resolve_sysroot_result=$lt_sysroot$func_stripname_result ;; esac } # func_replace_sysroot PATH # If PATH begins with the sysroot, replace it with = and # store the result into func_replace_sysroot_result. func_replace_sysroot () { case "$lt_sysroot:$1" in ?*:"$lt_sysroot"*) func_stripname "$lt_sysroot" '' "$1" func_replace_sysroot_result="=$func_stripname_result" ;; *) # Including no sysroot. func_replace_sysroot_result=$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_append_quoted CC_quoted "$arg" done CC_expanded=`func_echo_all $CC` CC_quoted_expanded=`func_echo_all $CC_quoted` 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 "* | " $CC_expanded "* | "$CC_expanded "* | \ " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;; # 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_append_quoted CC_quoted "$arg" done CC_expanded=`func_echo_all $CC` CC_quoted_expanded=`func_echo_all $CC_quoted` case "$@ " in " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) # 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}" } } ################################################## # FILE NAME AND PATH CONVERSION HELPER FUNCTIONS # ################################################## # func_convert_core_file_wine_to_w32 ARG # Helper function used by file name conversion functions when $build is *nix, # and $host is mingw, cygwin, or some other w32 environment. Relies on a # correctly configured wine environment available, with the winepath program # in $build's $PATH. # # ARG is the $build file name to be converted to w32 format. # Result is available in $func_convert_core_file_wine_to_w32_result, and will # be empty on error (or when ARG is empty) func_convert_core_file_wine_to_w32 () { $opt_debug func_convert_core_file_wine_to_w32_result="$1" if test -n "$1"; then # 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_convert_core_file_wine_to_w32_tmp=`winepath -w "$1" 2>/dev/null` if test "$?" -eq 0 && test -n "${func_convert_core_file_wine_to_w32_tmp}"; then func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" | $SED -e "$lt_sed_naive_backslashify"` else func_convert_core_file_wine_to_w32_result= fi fi } # end: func_convert_core_file_wine_to_w32 # func_convert_core_path_wine_to_w32 ARG # Helper function used by path conversion functions when $build is *nix, and # $host is mingw, cygwin, or some other w32 environment. Relies on a correctly # configured wine environment available, with the winepath program in $build's # $PATH. Assumes ARG has no leading or trailing path separator characters. # # ARG is path to be converted from $build format to win32. # Result is available in $func_convert_core_path_wine_to_w32_result. # Unconvertible file (directory) names in ARG are skipped; if no directory names # are convertible, then the result may be empty. func_convert_core_path_wine_to_w32 () { $opt_debug # unfortunately, winepath doesn't convert paths, only file names func_convert_core_path_wine_to_w32_result="" if test -n "$1"; then oldIFS=$IFS IFS=: for func_convert_core_path_wine_to_w32_f in $1; do IFS=$oldIFS func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f" if test -n "$func_convert_core_file_wine_to_w32_result" ; then if test -z "$func_convert_core_path_wine_to_w32_result"; then func_convert_core_path_wine_to_w32_result="$func_convert_core_file_wine_to_w32_result" else func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result" fi fi done IFS=$oldIFS fi } # end: func_convert_core_path_wine_to_w32 # func_cygpath ARGS... # Wrapper around calling the cygpath program via LT_CYGPATH. This is used when # when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2) # $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or # (2), returns the Cygwin file name or path in func_cygpath_result (input # file name or path is assumed to be in w32 format, as previously converted # from $build's *nix or MSYS format). In case (3), returns the w32 file name # or path in func_cygpath_result (input file name or path is assumed to be in # Cygwin format). Returns an empty string on error. # # ARGS are passed to cygpath, with the last one being the file name or path to # be converted. # # Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH # environment variable; do not put it in $PATH. func_cygpath () { $opt_debug if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null` if test "$?" -ne 0; then # on failure, ensure result is empty func_cygpath_result= fi else func_cygpath_result= func_error "LT_CYGPATH is empty or specifies non-existent file: \`$LT_CYGPATH'" fi } #end: func_cygpath # func_convert_core_msys_to_w32 ARG # Convert file name or path ARG from MSYS format to w32 format. Return # result in func_convert_core_msys_to_w32_result. func_convert_core_msys_to_w32 () { $opt_debug # awkward: cmd appends spaces to result func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null | $SED -e 's/[ ]*$//' -e "$lt_sed_naive_backslashify"` } #end: func_convert_core_msys_to_w32 # func_convert_file_check ARG1 ARG2 # Verify that ARG1 (a file name in $build format) was converted to $host # format in ARG2. Otherwise, emit an error message, but continue (resetting # func_to_host_file_result to ARG1). func_convert_file_check () { $opt_debug if test -z "$2" && test -n "$1" ; then func_error "Could not determine host file name corresponding to" func_error " \`$1'" func_error "Continuing, but uninstalled executables may not work." # Fallback: func_to_host_file_result="$1" fi } # end func_convert_file_check # func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH # Verify that FROM_PATH (a path in $build format) was converted to $host # format in TO_PATH. Otherwise, emit an error message, but continue, resetting # func_to_host_file_result to a simplistic fallback value (see below). func_convert_path_check () { $opt_debug if test -z "$4" && test -n "$3"; then func_error "Could not determine the host path corresponding to" func_error " \`$3'" func_error "Continuing, but uninstalled executables may not work." # Fallback. This is a deliberately simplistic "conversion" and # should not be "improved". See libtool.info. if test "x$1" != "x$2"; then lt_replace_pathsep_chars="s|$1|$2|g" func_to_host_path_result=`echo "$3" | $SED -e "$lt_replace_pathsep_chars"` else func_to_host_path_result="$3" fi fi } # end func_convert_path_check # func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG # Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT # and appending REPL if ORIG matches BACKPAT. func_convert_path_front_back_pathsep () { $opt_debug case $4 in $1 ) func_to_host_path_result="$3$func_to_host_path_result" ;; esac case $4 in $2 ) func_append func_to_host_path_result "$3" ;; esac } # end func_convert_path_front_back_pathsep ################################################## # $build to $host FILE NAME CONVERSION FUNCTIONS # ################################################## # invoked via `$to_host_file_cmd ARG' # # In each case, ARG is the path to be converted from $build to $host format. # Result will be available in $func_to_host_file_result. # func_to_host_file ARG # Converts the file name ARG from $build format to $host format. Return result # in func_to_host_file_result. func_to_host_file () { $opt_debug $to_host_file_cmd "$1" } # end func_to_host_file # func_to_tool_file ARG LAZY # converts the file name ARG from $build format to toolchain format. Return # result in func_to_tool_file_result. If the conversion in use is listed # in (the comma separated) LAZY, no conversion takes place. func_to_tool_file () { $opt_debug case ,$2, in *,"$to_tool_file_cmd",*) func_to_tool_file_result=$1 ;; *) $to_tool_file_cmd "$1" func_to_tool_file_result=$func_to_host_file_result ;; esac } # end func_to_tool_file # func_convert_file_noop ARG # Copy ARG to func_to_host_file_result. func_convert_file_noop () { func_to_host_file_result="$1" } # end func_convert_file_noop # func_convert_file_msys_to_w32 ARG # Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic # conversion to w32 is not available inside the cwrapper. Returns result in # func_to_host_file_result. func_convert_file_msys_to_w32 () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then func_convert_core_msys_to_w32 "$1" func_to_host_file_result="$func_convert_core_msys_to_w32_result" fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_msys_to_w32 # func_convert_file_cygwin_to_w32 ARG # Convert file name ARG from Cygwin to w32 format. Returns result in # func_to_host_file_result. func_convert_file_cygwin_to_w32 () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then # because $build is cygwin, we call "the" cygpath in $PATH; no need to use # LT_CYGPATH in this case. func_to_host_file_result=`cygpath -m "$1"` fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_cygwin_to_w32 # func_convert_file_nix_to_w32 ARG # Convert file name ARG from *nix to w32 format. Requires a wine environment # and a working winepath. Returns result in func_to_host_file_result. func_convert_file_nix_to_w32 () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then func_convert_core_file_wine_to_w32 "$1" func_to_host_file_result="$func_convert_core_file_wine_to_w32_result" fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_nix_to_w32 # func_convert_file_msys_to_cygwin ARG # Convert file name ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. # Returns result in func_to_host_file_result. func_convert_file_msys_to_cygwin () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then func_convert_core_msys_to_w32 "$1" func_cygpath -u "$func_convert_core_msys_to_w32_result" func_to_host_file_result="$func_cygpath_result" fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_msys_to_cygwin # func_convert_file_nix_to_cygwin ARG # Convert file name ARG from *nix to Cygwin format. Requires Cygwin installed # in a wine environment, working winepath, and LT_CYGPATH set. Returns result # in func_to_host_file_result. func_convert_file_nix_to_cygwin () { $opt_debug func_to_host_file_result="$1" if test -n "$1"; then # convert from *nix to w32, then use cygpath to convert from w32 to cygwin. func_convert_core_file_wine_to_w32 "$1" func_cygpath -u "$func_convert_core_file_wine_to_w32_result" func_to_host_file_result="$func_cygpath_result" fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_nix_to_cygwin ############################################# # $build to $host PATH CONVERSION FUNCTIONS # ############################################# # invoked via `$to_host_path_cmd ARG' # # In each case, ARG is the path to be converted from $build to $host format. # The result will be available in $func_to_host_path_result. # # 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. # # All path conversion functions are named using the following convention: # file name conversion function : func_convert_file_X_to_Y () # path conversion function : func_convert_path_X_to_Y () # where, for any given $build/$host combination the 'X_to_Y' value is the # same. If conversion functions are added for new $build/$host combinations, # the two new functions must follow this pattern, or func_init_to_host_path_cmd # will break. # func_init_to_host_path_cmd # Ensures that function "pointer" variable $to_host_path_cmd is set to the # appropriate value, based on the value of $to_host_file_cmd. to_host_path_cmd= func_init_to_host_path_cmd () { $opt_debug if test -z "$to_host_path_cmd"; then func_stripname 'func_convert_file_' '' "$to_host_file_cmd" to_host_path_cmd="func_convert_path_${func_stripname_result}" fi } # func_to_host_path ARG # Converts the path ARG from $build format to $host format. Return result # in func_to_host_path_result. func_to_host_path () { $opt_debug func_init_to_host_path_cmd $to_host_path_cmd "$1" } # end func_to_host_path # func_convert_path_noop ARG # Copy ARG to func_to_host_path_result. func_convert_path_noop () { func_to_host_path_result="$1" } # end func_convert_path_noop # func_convert_path_msys_to_w32 ARG # Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic # conversion to w32 is not available inside the cwrapper. Returns result in # func_to_host_path_result. func_convert_path_msys_to_w32 () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # 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_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" func_to_host_path_result="$func_convert_core_msys_to_w32_result" func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" fi } # end func_convert_path_msys_to_w32 # func_convert_path_cygwin_to_w32 ARG # Convert path ARG from Cygwin to w32 format. Returns result in # func_to_host_file_result. func_convert_path_cygwin_to_w32 () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"` func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" fi } # end func_convert_path_cygwin_to_w32 # func_convert_path_nix_to_w32 ARG # Convert path ARG from *nix to w32 format. Requires a wine environment and # a working winepath. Returns result in func_to_host_file_result. func_convert_path_nix_to_w32 () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" func_to_host_path_result="$func_convert_core_path_wine_to_w32_result" func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" fi } # end func_convert_path_nix_to_w32 # func_convert_path_msys_to_cygwin ARG # Convert path ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. # Returns result in func_to_host_file_result. func_convert_path_msys_to_cygwin () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" func_cygpath -u -p "$func_convert_core_msys_to_w32_result" func_to_host_path_result="$func_cygpath_result" func_convert_path_check : : \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" : "$1" fi } # end func_convert_path_msys_to_cygwin # func_convert_path_nix_to_cygwin ARG # Convert path ARG from *nix to Cygwin format. Requires Cygwin installed in a # a wine environment, working winepath, and LT_CYGPATH set. Returns result in # func_to_host_file_result. func_convert_path_nix_to_cygwin () { $opt_debug func_to_host_path_result="$1" if test -n "$1"; then # 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_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result" func_to_host_path_result="$func_cygpath_result" func_convert_path_check : : \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" : "$1" fi } # end func_convert_path_nix_to_cygwin # 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) func_append pie_flag " $arg" continue ;; -shared | -static | -prefer-pic | -prefer-non-pic) func_append 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_append_quoted lastarg "$arg" done IFS="$save_ifs" func_stripname ' ' '' "$lastarg" lastarg=$func_stripname_result # Add the arguments to base_compile. func_append 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_append_quoted base_compile "$lastarg" 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 | *.go | *.obj | *.sx | *.cu | *.cup) 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 "$srcfile" | $SED 's%^.*/%%; 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 func_append removelist " $output_obj" $ECHO "$srcfile" > "$lockfile" fi $opt_dry_run || $RM $removelist func_append removelist " $lockfile" trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 func_to_tool_file "$srcfile" func_convert_file_msys_to_w32 srcfile=$func_to_tool_file_result 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 func_append 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 func_append command " -o $obj" fi # Suppress compiler output if we already did a PIC compilation. func_append 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 "$opt_mode" = compile && func_mode_compile ${1+"$@"} } func_mode_help () { # We need to display help for each of the modes. case $opt_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 build PIC objects only -prefer-non-pic try to build 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 -Wc,FLAG pass FLAG directly to the compiler 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-dir 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 -bindir BINDIR specify path to binaries directory (for systems where libraries must be found in the PATH setting at runtime) -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 -Wc,FLAG -Xcompiler FLAG pass linker-specific FLAG directly to the compiler -Wl,FLAG -Xlinker FLAG pass linker-specific FLAG directly to the linker -XCClinker FLAG pass link-specific FLAG to the compiler driver (CC) 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 \`$opt_mode'" ;; esac echo $ECHO "Try \`$progname --help' for more information about other modes." } # Now that we've collected a possible --mode arg, show help if necessary if $opt_help; then if test "$opt_help" = :; then func_mode_help else { func_help noexit for opt_mode in compile link execute install finish uninstall clean; do func_mode_help done } | sed -n '1p; 2,$s/^Usage:/ or: /p' { func_help noexit for opt_mode in compile link execute install finish uninstall clean; do echo func_mode_help done } | sed '1d /^When reporting/,/^Report/{ H d } $x /information about other modes/d /more detailed .*MODE/d s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/' fi exit $? fi # 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 $opt_dlopen; do test -f "$file" \ || func_fatal_help "\`$file' is not a file" dir= case $file in *.la) func_resolve_sysroot "$file" file=$func_resolve_sysroot_result # 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 func_append 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 -* | *.la | *.lo ) ;; *) # 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_append_quoted args "$file" 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 "$opt_mode" = execute && func_mode_execute ${1+"$@"} # func_mode_finish arg... func_mode_finish () { $opt_debug libs= libdirs= admincmds= for opt in "$nonopt" ${1+"$@"} do if test -d "$opt"; then func_append libdirs " $opt" elif test -f "$opt"; then if func_lalib_unsafe_p "$opt"; then func_append libs " $opt" else func_warning "\`$opt' is not a valid libtool archive" fi else func_fatal_error "invalid argument \`$opt'" fi done if test -n "$libs"; then if test -n "$lt_sysroot"; then sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"` sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;" else sysroot_cmd= fi # Remove sysroot references if $opt_dry_run; then for lib in $libs; do echo "removing references to $lt_sysroot and \`=' prefixes from $lib" done else tmpdir=`func_mktempdir` for lib in $libs; do sed -e "${sysroot_cmd} s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \ > $tmpdir/tmp-la mv -f $tmpdir/tmp-la $lib done ${RM}r "$tmpdir" fi fi if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then 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" || func_append admincmds " $cmds" fi done fi # Exit here if they wanted silent mode. $opt_silent && exit $EXIT_SUCCESS if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then echo "----------------------------------------------------------------------" 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 "----------------------------------------------------------------------" fi exit $EXIT_SUCCESS } test "$opt_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. case $nonopt in *shtool*) :;; *) false;; esac; 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" func_append install_prog "$func_quote_for_eval_result" install_shared_prog=$install_prog case " $install_prog " in *[\\\ /]cp\ *) install_cp=: ;; *) install_cp=false ;; esac # We need to accept at least all the BSD install flags. dest= files= opts= prev= install_type= isdir=no stripme= no_mode=: for arg do arg2= if test -n "$dest"; then func_append files " $dest" dest=$arg continue fi case $arg in -d) isdir=yes ;; -f) if $install_cp; then :; else prev=$arg fi ;; -g | -m | -o) prev=$arg ;; -s) stripme=" -s" continue ;; -*) ;; *) # If the previous option needed an argument, then skip it. if test -n "$prev"; then if test "x$prev" = x-m && test -n "$install_override_mode"; then arg2=$install_override_mode no_mode=false fi prev= else dest=$arg continue fi ;; esac # Aesthetically quote the argument. func_quote_for_eval "$arg" func_append install_prog " $func_quote_for_eval_result" if test -n "$arg2"; then func_quote_for_eval "$arg2" fi func_append install_shared_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 -n "$install_override_mode" && $no_mode; then if $install_cp; then :; else func_quote_for_eval "$install_override_mode" func_append install_shared_prog " -m $func_quote_for_eval_result" fi fi 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. func_append staticlibs " $file" ;; *.la) func_resolve_sysroot "$file" file=$func_resolve_sysroot_result # 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 "*) ;; *) func_append current_libdirs " $libdir" ;; esac else # Note the libdir as a future libdir. case "$future_libdirs " in *" $libdir "*) ;; *) func_append future_libdirs " $libdir" ;; esac fi func_dirname "$file" "/" "" dir="$func_dirname_result" func_append dir "$objdir" if test -n "$relink_command"; then # Determine the prefix the user has applied to our future dir. inst_prefix_dir=`$ECHO "$destdir" | $SED -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 "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` else relink_command=`$ECHO "$relink_command" | $SED "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_shared_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" && func_append 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 "$lib" | $SED '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 "$relink_command" | $SED '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 "$file$stripped_ext" | $SED "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_to_tool_file "$oldlib" func_convert_file_msys_to_w32 tool_oldlib=$func_to_tool_file_result func_show_eval "$install_prog \$file \$oldlib" 'exit $?' if test -n "$stripme" && test -n "$old_striplib"; then func_show_eval "$old_striplib $tool_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 "$opt_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 #if defined(__GNUC__) && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4)) #pragma GCC diagnostic ignored \"-Wstrict-prototypes\" #endif /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ #if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) /* DATA imports from DLLs on WIN32 con't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */ # define LT_DLSYM_CONST #elif defined(__osf__) /* This system does not cope well with relocations in const data. */ # define LT_DLSYM_CONST #else # define LT_DLSYM_CONST const #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 "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP` for progfile in $progfiles; do func_to_tool_file "$progfile" func_convert_file_msys_to_w32 func_verbose "extracting global C symbols from \`$func_to_tool_file_result'" $opt_dry_run || eval "$NM $func_to_tool_file_result | $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" case $host in *cygwin* | *mingw* | *cegcc* ) # if an import library, we need to obtain dlname if func_win32_import_lib_p "$dlprefile"; then func_tr_sh "$dlprefile" eval "curr_lafile=\$libfile_$func_tr_sh_result" dlprefile_dlbasename="" if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then # Use subshell, to avoid clobbering current variable values dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"` if test -n "$dlprefile_dlname" ; then func_basename "$dlprefile_dlname" dlprefile_dlbasename="$func_basename_result" else # no lafile. user explicitly requested -dlpreopen <import library>. $sharedlib_from_linklib_cmd "$dlprefile" dlprefile_dlbasename=$sharedlib_from_linklib_result fi fi $opt_dry_run || { if test -n "$dlprefile_dlbasename" ; then eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"' else func_warning "Could not compute DLL name from $name" eval '$ECHO ": $name " >> "$nlist"' fi func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe | $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'" } else # not an import lib $opt_dry_run || { eval '$ECHO ": $name " >> "$nlist"' func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" } fi ;; *) $opt_dry_run || { eval '$ECHO ": $name " >> "$nlist"' func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" } ;; esac 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; 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) ;; *) func_append 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 "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` else compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` fi ;; *) compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` finalize_command=`$ECHO "$finalize_command" | $SED "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 "$compile_command" | $SED "s% @SYMFILE@%%"` finalize_command=`$ECHO "$finalize_command" | $SED "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. # Despite the name, also deal with 64 bit binaries. 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 # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD. if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then func_to_tool_file "$1" func_convert_file_msys_to_w32 win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" | $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_cygming_dll_for_implib ARG # # Platform-specific function to extract the # name of the DLL associated with the specified # import library ARG. # Invoked by eval'ing the libtool variable # $sharedlib_from_linklib_cmd # Result is available in the variable # $sharedlib_from_linklib_result func_cygming_dll_for_implib () { $opt_debug sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"` } # func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs # # The is the core of a fallback implementation of a # platform-specific function to extract the name of the # DLL associated with the specified import library LIBNAME. # # SECTION_NAME is either .idata$6 or .idata$7, depending # on the platform and compiler that created the implib. # # Echos the name of the DLL associated with the # specified import library. func_cygming_dll_for_implib_fallback_core () { $opt_debug match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"` $OBJDUMP -s --section "$1" "$2" 2>/dev/null | $SED '/^Contents of section '"$match_literal"':/{ # Place marker at beginning of archive member dllname section s/.*/====MARK====/ p d } # These lines can sometimes be longer than 43 characters, but # are always uninteresting /:[ ]*file format pe[i]\{,1\}-/d /^In archive [^:]*:/d # Ensure marker is printed /^====MARK====/p # Remove all lines with less than 43 characters /^.\{43\}/!d # From remaining lines, remove first 43 characters s/^.\{43\}//' | $SED -n ' # Join marker and all lines until next marker into a single line /^====MARK====/ b para H $ b para b :para x s/\n//g # Remove the marker s/^====MARK====// # Remove trailing dots and whitespace s/[\. \t]*$// # Print /./p' | # we now have a list, one entry per line, of the stringified # contents of the appropriate section of all members of the # archive which possess that section. Heuristic: eliminate # all those which have a first or second character that is # a '.' (that is, objdump's representation of an unprintable # character.) This should work for all archives with less than # 0x302f exports -- but will fail for DLLs whose name actually # begins with a literal '.' or a single character followed by # a '.'. # # Of those that remain, print the first one. $SED -e '/^\./d;/^.\./d;q' } # func_cygming_gnu_implib_p ARG # This predicate returns with zero status (TRUE) if # ARG is a GNU/binutils-style import library. Returns # with nonzero status (FALSE) otherwise. func_cygming_gnu_implib_p () { $opt_debug func_to_tool_file "$1" func_convert_file_msys_to_w32 func_cygming_gnu_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $EGREP ' (_head_[A-Za-z0-9_]+_[ad]l*|[A-Za-z0-9_]+_[ad]l*_iname)$'` test -n "$func_cygming_gnu_implib_tmp" } # func_cygming_ms_implib_p ARG # This predicate returns with zero status (TRUE) if # ARG is an MS-style import library. Returns # with nonzero status (FALSE) otherwise. func_cygming_ms_implib_p () { $opt_debug func_to_tool_file "$1" func_convert_file_msys_to_w32 func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'` test -n "$func_cygming_ms_implib_tmp" } # func_cygming_dll_for_implib_fallback ARG # Platform-specific function to extract the # name of the DLL associated with the specified # import library ARG. # # This fallback implementation is for use when $DLLTOOL # does not support the --identify-strict option. # Invoked by eval'ing the libtool variable # $sharedlib_from_linklib_cmd # Result is available in the variable # $sharedlib_from_linklib_result func_cygming_dll_for_implib_fallback () { $opt_debug if func_cygming_gnu_implib_p "$1" ; then # binutils import library sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"` elif func_cygming_ms_implib_p "$1" ; then # ms-generated import library sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"` else # unknown sharedlib_from_linklib_result="" fi } # 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" if test "$lock_old_archive_extraction" = yes; then lockfile=$f_ex_an_ar_oldlib.lock until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do func_echo "Waiting for $lockfile to be removed" sleep 2 done fi func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \ 'stat=$?; rm -f "$lockfile"; exit $stat' if test "$lock_old_archive_extraction" = yes; then $opt_dry_run || rm -f "$lockfile" fi 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 | sort | $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 | sort | $NL2SP` done func_extract_archives_result="$my_oldobjs" } # 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=${1-no} $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. 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 file=\"\$0\"" qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"` $ECHO "\ # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF \$1 _LTECHO_EOF' } ECHO=\"$qECHO\" fi # Very basic option parsing. These options are (a) specific to # the libtool wrapper, (b) are identical between the wrapper # /script/ and the wrapper /executable/ which is used only on # windows platforms, and (c) all begin with the string "--lt-" # (application programs are unlikely to have options which match # this pattern). # # There are only two supported options: --lt-debug and # --lt-dump-script. There is, deliberately, no --lt-help. # # The first argument to this parsing function should be the # script's $0 value, followed by "$@". lt_option_debug= func_parse_lt_options () { lt_script_arg0=\$0 shift for lt_opt do case \"\$lt_opt\" in --lt-debug) lt_option_debug=1 ;; --lt-dump-script) lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\` test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=. lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\` cat \"\$lt_dump_D/\$lt_dump_F\" exit 0 ;; --lt-*) \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2 exit 1 ;; esac done # Print the debug banner immediately: if test -n \"\$lt_option_debug\"; then echo \"${outputname}:${output}:\${LINENO}: libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\" 1>&2 fi } # Used when --lt-debug. Prints its arguments to stdout # (redirection is the responsibility of the caller) func_lt_dump_args () { lt_dump_args_N=1; for lt_arg do \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[\$lt_dump_args_N]: \$lt_arg\" lt_dump_args_N=\`expr \$lt_dump_args_N + 1\` done } # Core function for launching the target application func_exec_program_core () { " case $host in # Backslashes separate directories on plain windows *-*-mingw | *-*-os2* | *-cegcc*) $ECHO "\ if test -n \"\$lt_option_debug\"; then \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir\\\\\$program\" 1>&2 func_lt_dump_args \${1+\"\$@\"} 1>&2 fi exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} " ;; *) $ECHO "\ if test -n \"\$lt_option_debug\"; then \$ECHO \"${outputname}:${output}:\${LINENO}: newargv[0]: \$progdir/\$program\" 1>&2 func_lt_dump_args \${1+\"\$@\"} 1>&2 fi exec \"\$progdir/\$program\" \${1+\"\$@\"} " ;; esac $ECHO "\ \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 exit 1 } # A function to encapsulate launching the target application # Strips options in the --lt-* namespace from \$@ and # launches target application with the remaining arguments. func_exec_program () { case \" \$* \" in *\\ --lt-*) for lt_wr_arg do case \$lt_wr_arg in --lt-*) ;; *) set x \"\$@\" \"\$lt_wr_arg\"; shift;; esac shift done ;; esac func_exec_program_core \${1+\"\$@\"} } # Parse options func_parse_lt_options \"\$0\" \${1+\"\$@\"} # Find the directory that this script lives in. thisdir=\`\$ECHO \"\$file\" | $SED '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 \"\$file\" | $SED '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 \"\$file\" | $SED 's%^.*/%%'\` file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\` done # Usually 'no', except on cygwin/mingw when embedded into # the cwrapper. WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_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 \"\$thisdir\" | $SED '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" # fixup the dll searchpath if we need to. # # Fix the DLL searchpath if we need to. Do this before prepending # to shlibpath, because on Windows, both are PATH and uninstalled # libraries must come first. if test -n "$dllsearchpath"; then $ECHO "\ # Add the dll search path components to the executable PATH PATH=$dllsearchpath:\$PATH " fi # 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 \"\$$shlibpath_var\" | $SED 's/::*\$//'\` export $shlibpath_var " fi $ECHO "\ if test \"\$libtool_execute_magic\" != \"$magic\"; then # Run the actual program with our arguments. func_exec_program \${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\ " } # 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. */ EOF cat <<"EOF" #ifdef _MSC_VER # define _CRT_SECURE_NO_DEPRECATE 1 #endif #include <stdio.h> #include <stdlib.h> #ifdef _MSC_VER # include <direct.h> # include <process.h> # include <io.h> #else # include <unistd.h> # include <stdint.h> # ifdef __CYGWIN__ # include <io.h> # 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> /* declarations of non-ANSI functions */ #if defined(__MINGW32__) # ifdef __STRICT_ANSI__ int _putenv (const char *); # endif #elif defined(__CYGWIN__) # ifdef __STRICT_ANSI__ char *realpath (const char *, char *); int putenv (char *); int setenv (const char *, const char *, int); # endif /* #elif defined (other platforms) ... */ #endif /* portability defines, excluding path handling macros */ #if defined(_MSC_VER) # define setmode _setmode # define stat _stat # define chmod _chmod # define getcwd _getcwd # define putenv _putenv # define S_IXUSR _S_IEXEC # ifndef _INTPTR_T_DEFINED # define _INTPTR_T_DEFINED # define intptr_t int # endif #elif defined(__MINGW32__) # define setmode _setmode # define stat _stat # define chmod _chmod # define getcwd _getcwd # define putenv _putenv #elif defined(__CYGWIN__) # define HAVE_SETENV # define FOPEN_WB "wb" /* #elif defined (other platforms) ... */ #endif #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 /* path handling portability macros */ #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 */ #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) #if defined(LT_DEBUGWRAPPER) static int lt_debug = 1; #else static int lt_debug = 0; #endif const char *program_name = "libtool-wrapper"; /* in case xstrdup fails */ 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_debugprintf (const char *file, int line, const char *fmt, ...); void lt_fatal (const char *file, int line, const char *message, ...); static const char *nonnull (const char *s); static const char *nonempty (const char *s); 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_update_exe_path (const char *name, const char *value); void lt_update_lib_path (const char *name, const char *value); char **prepare_spawn (char **argv); void lt_dump_script (FILE *f); EOF cat <<EOF volatile 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_path "$temp_rpath" cat <<EOF const char * LIB_PATH_VALUE = "$func_to_host_path_result"; EOF else cat <<"EOF" const char * LIB_PATH_VALUE = ""; EOF fi if test -n "$dllsearchpath"; then func_to_host_path "$dllsearchpath:" cat <<EOF const char * EXE_PATH_VARNAME = "PATH"; const char * EXE_PATH_VALUE = "$func_to_host_path_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-" static const char *ltwrapper_option_prefix = LTWRAPPER_OPTION_PREFIX; static const char *dumpscript_opt = LTWRAPPER_OPTION_PREFIX "dump-script"; static const char *debug_opt = LTWRAPPER_OPTION_PREFIX "debug"; 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])); newargz = XMALLOC (char *, argc + 1); /* very simple arg parsing; don't want to rely on getopt * also, copy all non cwrapper options to newargz, except * argz[0], which is handled differently */ newargc=0; 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" lt_dump_script (stdout); return 0; } if (strcmp (argv[i], debug_opt) == 0) { lt_debug = 1; continue; } if (strcmp (argv[i], ltwrapper_option_prefix) == 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 (__FILE__, __LINE__, "unrecognized %s option: '%s'", ltwrapper_option_prefix, argv[i]); } /* otherwise ... */ newargz[++newargc] = xstrdup (argv[i]); } newargz[++newargc] = NULL; EOF cat <<EOF /* The GNU banner must be the first non-error debug message */ lt_debugprintf (__FILE__, __LINE__, "libtool wrapper (GNU $PACKAGE$TIMESTAMP) $VERSION\n"); EOF cat <<"EOF" lt_debugprintf (__FILE__, __LINE__, "(main) argv[0]: %s\n", argv[0]); lt_debugprintf (__FILE__, __LINE__, "(main) program_name: %s\n", program_name); tmp_pathspec = find_executable (argv[0]); if (tmp_pathspec == NULL) lt_fatal (__FILE__, __LINE__, "couldn't find %s", argv[0]); lt_debugprintf (__FILE__, __LINE__, "(main) found exe (before symlink chase) at: %s\n", tmp_pathspec); actual_cwrapper_path = chase_symlinks (tmp_pathspec); lt_debugprintf (__FILE__, __LINE__, "(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; lt_debugprintf (__FILE__, __LINE__, "(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 */ /* Update the DLL searchpath. EXE_PATH_VALUE ($dllsearchpath) must be prepended before (that is, appear after) LIB_PATH_VALUE ($temp_rpath) because on Windows, both *_VARNAMEs are PATH but uninstalled libraries must come first. */ lt_update_exe_path (EXE_PATH_VARNAME, EXE_PATH_VALUE); lt_update_lib_path (LIB_PATH_VARNAME, LIB_PATH_VALUE); lt_debugprintf (__FILE__, __LINE__, "(main) lt_argv_zero: %s\n", nonnull (lt_argv_zero)); for (i = 0; i < newargc; i++) { lt_debugprintf (__FILE__, __LINE__, "(main) newargz[%d]: %s\n", i, nonnull (newargz[i])); } EOF case $host_os in mingw*) cat <<"EOF" /* execv doesn't actually work on mingw as expected on unix */ newargz = prepare_spawn (newargz); rval = _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz); if (rval == -1) { /* failed to start process */ lt_debugprintf (__FILE__, __LINE__, "(main) failed to launch target \"%s\": %s\n", lt_argv_zero, nonnull (strerror (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 (__FILE__, __LINE__, "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; lt_debugprintf (__FILE__, __LINE__, "(check_executable): %s\n", nonempty (path)); 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; lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n", nonempty (path)); 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; lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n", nonempty (wrapper)); 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 (__FILE__, __LINE__, "getcwd failed: %s", nonnull (strerror (errno))); 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 (__FILE__, __LINE__, "getcwd failed: %s", nonnull (strerror (errno))); 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) { lt_debugprintf (__FILE__, __LINE__, "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 { lt_fatal (__FILE__, __LINE__, "error accessing file \"%s\": %s", tmp_pathspec, nonnull (strerror (errno))); } } XFREE (tmp_pathspec); if (!has_symlinks) { return xstrdup (pathspec); } tmp_pathspec = realpath (pathspec, buf); if (tmp_pathspec == 0) { lt_fatal (__FILE__, __LINE__, "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; } void lt_debugprintf (const char *file, int line, const char *fmt, ...) { va_list args; if (lt_debug) { (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line); va_start (args, fmt); (void) vfprintf (stderr, fmt, args); va_end (args); } } static void lt_error_core (int exit_status, const char *file, int line, const char *mode, const char *message, va_list ap) { fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode); vfprintf (stderr, message, ap); fprintf (stderr, ".\n"); if (exit_status >= 0) exit (exit_status); } void lt_fatal (const char *file, int line, const char *message, ...) { va_list ap; va_start (ap, message); lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap); va_end (ap); } static const char * nonnull (const char *s) { return s ? s : "(null)"; } static const char * nonempty (const char *s) { return (s && !*s) ? "(empty)" : nonnull (s); } void lt_setenv (const char *name, const char *value) { lt_debugprintf (__FILE__, __LINE__, "(lt_setenv) setting '%s' to '%s'\n", nonnull (name), nonnull (value)); { #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; } void lt_update_exe_path (const char *name, const char *value) { lt_debugprintf (__FILE__, __LINE__, "(lt_update_exe_path) modifying '%s' by prepending '%s'\n", nonnull (name), nonnull (value)); 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) { lt_debugprintf (__FILE__, __LINE__, "(lt_update_lib_path) modifying '%s' by prepending '%s'\n", nonnull (name), nonnull (value)); if (name && *name && value && *value) { char *new_value = lt_extend_str (getenv (name), value, 0); lt_setenv (name, new_value); XFREE (new_value); } } EOF case $host_os in mingw*) cat <<"EOF" /* Prepares an argument vector before calling spawn(). Note that spawn() does not by itself call the command interpreter (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") : ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); GetVersionEx(&v); v.dwPlatformId == VER_PLATFORM_WIN32_NT; }) ? "cmd.exe" : "command.com"). Instead it simply concatenates the arguments, separated by ' ', and calls CreateProcess(). We must quote the arguments since Win32 CreateProcess() interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a special way: - Space and tab are interpreted as delimiters. They are not treated as delimiters if they are surrounded by double quotes: "...". - Unescaped double quotes are removed from the input. Their only effect is that within double quotes, space and tab are treated like normal characters. - Backslashes not followed by double quotes are not special. - But 2*n+1 backslashes followed by a double quote become n backslashes followed by a double quote (n >= 0): \" -> " \\\" -> \" \\\\\" -> \\" */ #define SHELL_SPECIAL_CHARS "\"\\ \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" #define SHELL_SPACE_CHARS " \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" char ** prepare_spawn (char **argv) { size_t argc; char **new_argv; size_t i; /* Count number of arguments. */ for (argc = 0; argv[argc] != NULL; argc++) ; /* Allocate new argument vector. */ new_argv = XMALLOC (char *, argc + 1); /* Put quoted arguments into the new argument vector. */ for (i = 0; i < argc; i++) { const char *string = argv[i]; if (string[0] == '\0') new_argv[i] = xstrdup ("\"\""); else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL) { int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL); size_t length; unsigned int backslashes; const char *s; char *quoted_string; char *p; length = 0; backslashes = 0; if (quote_around) length++; for (s = string; *s != '\0'; s++) { char c = *s; if (c == '"') length += backslashes + 1; length++; if (c == '\\') backslashes++; else backslashes = 0; } if (quote_around) length += backslashes + 1; quoted_string = XMALLOC (char, length + 1); p = quoted_string; backslashes = 0; if (quote_around) *p++ = '"'; for (s = string; *s != '\0'; s++) { char c = *s; if (c == '"') { unsigned int j; for (j = backslashes + 1; j > 0; j--) *p++ = '\\'; } *p++ = c; if (c == '\\') backslashes++; else backslashes = 0; } if (quote_around) { unsigned int j; for (j = backslashes; j > 0; j--) *p++ = '\\'; *p++ = '"'; } *p = '\0'; new_argv[i] = quoted_string; } else new_argv[i] = (char *) string; } new_argv[argc] = NULL; return new_argv; } EOF ;; esac cat <<"EOF" void lt_dump_script (FILE* f) { EOF func_emit_wrapper yes | $SED -n -e ' s/^\(.\{79\}\)\(..*\)/\1\ \2/ h s/\([\\"]\)/\\\1/g s/$/\\n/ s/\([^\n]*\).*/ fputs ("\1", f);/p g D' cat <<"EOF" } EOF } # end: func_emit_cwrapperexe_src # func_win32_import_lib_p ARG # True if ARG is an import lib, as indicated by $file_magic_cmd func_win32_import_lib_p () { $opt_debug case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in *import*) : ;; *) false ;; esac } # 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 bindir= 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 bindir) bindir="$arg" prev= continue ;; 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 func_append dlfiles " $arg" else func_append 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 "*) ;; *) func_append 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 # func_append 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 func_append 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. func_append 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 "*) ;; *) func_append rpath " $arg" ;; esac else case "$xrpath " in *" $arg "*) ;; *) func_append xrpath " $arg" ;; esac fi prev= continue ;; shrext) shrext_cmds="$arg" prev= continue ;; weak) func_append weak_libs " $arg" prev= continue ;; xcclinker) func_append linker_flags " $qarg" func_append compiler_flags " $qarg" prev= func_append compile_command " $qarg" func_append finalize_command " $qarg" continue ;; xcompiler) func_append compiler_flags " $qarg" prev= func_append compile_command " $qarg" func_append finalize_command " $qarg" continue ;; xlinker) func_append linker_flags " $qarg" func_append 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 ;; -bindir) prev=bindir 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" if test -z "$func_stripname_result"; 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 func_resolve_sysroot "$func_stripname_result" dir=$func_resolve_sysroot_result # 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 "* | *" $arg "*) # Will only happen for absolute or sysroot arguments ;; *) # Preserve sysroot, but never include relative directories case $dir in [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;; *) func_append deplibs " -L$dir" ;; esac func_append lib_search_path " $dir" ;; esac case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'` case :$dllsearchpath: in *":$dir:"*) ;; ::) dllsearchpath=$dir;; *) func_append dllsearchpath ":$dir";; esac case :$dllsearchpath: in *":$testbindir:"*) ;; ::) dllsearchpath=$testbindir;; *) func_append 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* | *-*-haiku*) # 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 func_append 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 func_append 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|--sysroot) func_append 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|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) func_append compiler_flags " $arg" func_append compile_command " $arg" func_append finalize_command " $arg" case "$new_inherited_linker_flags " in *" $arg "*) ;; * ) func_append 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_stripname '=' '' "$dir" dir=$lt_sysroot$func_stripname_result ;; *) func_fatal_error "only absolute run-paths are allowed" ;; esac case "$xrpath " in *" $dir "*) ;; *) func_append 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" func_append arg " $func_quote_for_eval_result" func_append 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" func_append arg " $wl$func_quote_for_eval_result" func_append compiler_flags " $wl$func_quote_for_eval_result" func_append 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" ;; # Flags to be passed through unchanged, with rationale: # -64, -mips[0-9] enable 64-bit mode for the SGI compiler # -r[0-9][0-9]* specify processor for the SGI compiler # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler # +DA*, +DD* enable 64-bit mode for the HP compiler # -q* compiler args for the IBM compiler # -m*, -t[45]*, -txscale* architecture-specific flags for GCC # -F/path path to uninstalled frameworks, gcc on darwin # -p, -pg, --coverage, -fprofile-* profiling flags for GCC # @file GCC response files # -tp=* Portland pgcc target processor selection # --sysroot=* for sysroot support # -O*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \ -O*|-flto*|-fwhopr*|-fuse-linker-plugin) func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" func_append compile_command " $arg" func_append finalize_command " $arg" func_append compiler_flags " $arg" continue ;; # Some other compiler flag. -* | +*) func_quote_for_eval "$arg" arg="$func_quote_for_eval_result" ;; *.$objext) # A standard object. func_append 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 func_append 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. func_append 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. func_append deplibs " $arg" func_append old_deplibs " $arg" continue ;; *.la) # A libtool-controlled library. func_resolve_sysroot "$arg" if test "$prev" = dlfiles; then # This library was specified with -dlopen. func_append dlfiles " $func_resolve_sysroot_result" prev= elif test "$prev" = dlprefiles; then # The library was specified with -dlpreopen. func_append dlprefiles " $func_resolve_sysroot_result" prev= else func_append deplibs " $func_resolve_sysroot_result" 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 \"\${$shlibpath_var}\" \| \$SED \'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" func_to_tool_file "$output_objdir/" tool_output_objdir=$func_to_tool_file_result # 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_preserve_dup_deps ; then case "$libs " in *" $deplib "*) func_append specialdeplibs " $deplib" ;; esac fi func_append 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 "*) func_append specialdeplibs " $pre_post_deps" ;; esac func_append 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= func_resolve_sysroot "$lib" case $lib in *.la) func_source "$func_resolve_sysroot_result" ;; esac # Collect preopened libtool deplibs, except any this library # has declared as weak libs for deplib in $dependency_libs; do func_basename "$deplib" deplib_base=$func_basename_result case " $weak_libs " in *" $deplib_base "*) ;; *) func_append 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|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) if test "$linkmode,$pass" = "prog,link"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else func_append compiler_flags " $deplib" if test "$linkmode" = lib ; then case "$new_inherited_linker_flags " in *" $deplib "*) ;; * ) func_append 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 "*) ;; * ) func_append 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" func_resolve_sysroot "$func_stripname_result" func_append newlib_search_path " $func_resolve_sysroot_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" func_resolve_sysroot "$func_stripname_result" func_append newlib_search_path " $func_resolve_sysroot_result" ;; *) func_warning "\`-L' is ignored for archives/objects" ;; esac # linkmode continue ;; # -L -R*) if test "$pass" = link; then func_stripname '-R' '' "$deplib" func_resolve_sysroot "$func_stripname_result" dir=$func_resolve_sysroot_result # Make sure the xrpath contains only unique directories. case "$xrpath " in *" $dir "*) ;; *) func_append xrpath " $dir" ;; esac fi deplibs="$deplib $deplibs" continue ;; *.la) func_resolve_sysroot "$deplib" lib=$func_resolve_sysroot_result ;; *.$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 \"$deplib\"" 2>/dev/null | $SED 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. func_append newdlprefiles " $deplib" compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else func_append 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 "$inherited_linker_flags" | $SED '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 "*) ;; *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";; esac done fi dependency_libs=`$ECHO " $dependency_libs" | $SED '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" && func_append dlfiles " $dlopen" test -n "$dlpreopen" && func_append 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. func_append convenience " $ladir/$objdir/$old_library" func_append old_convenience " $ladir/$objdir/$old_library" tmp_libs= for deplib in $dependency_libs; do deplibs="$deplib $deplibs" if $opt_preserve_dup_deps ; then case "$tmp_libs " in *" $deplib "*) func_append specialdeplibs " $deplib" ;; esac fi func_append 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= if test -n "$old_library" && { test "$prefer_static_libs" = yes || test "$prefer_static_libs,$installed" = "built,no"; }; then linklib=$old_library else for l in $old_library $library_names; do linklib="$l" done fi 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. func_append dlprefiles " $lib $dependency_libs" else func_append 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 "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then func_warning "library \`$lib' was moved." dir="$ladir" absdir="$abs_ladir" libdir="$abs_ladir" else dir="$lt_sysroot$libdir" absdir="$lt_sysroot$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 func_append notinst_path " $abs_ladir" else dir="$ladir/$objdir" absdir="$abs_ladir/$objdir" # Remove this search path later func_append 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 case "$host" in # special handling for platforms with PE-DLLs. *cygwin* | *mingw* | *cegcc* ) # Linker will automatically link against shared library if both # static and shared are present. Therefore, ensure we extract # symbols from the import library if a shared library is present # (otherwise, the dlopen module name will be incorrect). We do # this by putting the import library name into $newdlprefiles. # We recover the dlopen module name by 'saving' the la file # name in a special purpose variable, and (later) extracting the # dlname from the la file. if test -n "$dlname"; then func_tr_sh "$dir/$linklib" eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname" func_append newdlprefiles " $dir/$linklib" else func_append 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" && \ func_append dlpreconveniencelibs " $dir/$old_library" fi ;; * ) # Prefer using a static library (so that no silly _DYNAMIC symbols # are required to link). if test -n "$old_library"; then func_append 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" && \ func_append dlpreconveniencelibs " $dir/$old_library" # Otherwise, use the dlname, so that lt_dlopen finds it. elif test -n "$dlname"; then func_append newdlprefiles " $dir/$dlname" else func_append newdlprefiles " $dir/$linklib" fi ;; esac 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 func_append 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" func_resolve_sysroot "$func_stripname_result" func_append newlib_search_path " $func_resolve_sysroot_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_preserve_dup_deps ; then case "$tmp_libs " in *" $deplib "*) func_append specialdeplibs " $deplib" ;; esac fi func_append 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:"*) ;; *) func_append 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 "*) ;; *) func_append compile_rpath " $absdir" ;; esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) func_append 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 func_append notinst_deplibs " $lib" need_relink=no ;; *) if test "$installed" = no; then func_append 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 "*) ;; *) func_append compile_rpath " $absdir" ;; esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) func_append 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 "$opt_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$absdir" # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case $libdir in [\\/]*) func_append 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:"*) ;; *) func_append 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:"*) ;; *) func_append finalize_shlibpath "$libdir:" ;; esac fi fi fi if test "$linkmode" = prog || test "$opt_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:"*) ;; *) func_append 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 [\\/]*) func_append 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 "*) ;; *) func_append xrpath " $temp_xrpath";; esac;; *) func_append temp_deplibs " $libdir";; esac done dependency_libs="$temp_deplibs" fi func_append 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" case $deplib in -L*) func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result";; *) func_resolve_sysroot "$deplib" ;; esac if $opt_preserve_dup_deps ; then case "$tmp_libs " in *" $func_resolve_sysroot_result "*) func_append specialdeplibs " $func_resolve_sysroot_result" ;; esac fi func_append tmp_libs " $func_resolve_sysroot_result" 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_resolve_sysroot "$deplib" deplib=$func_resolve_sysroot_result 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 func_append compiler_flags " ${wl}-dylib_file ${wl}${darwin_install_name}:${depdepl}" func_append 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 " $new_inherited_linker_flags" | $SED '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 "*) ;; *) func_append 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 "*) ;; *) func_append tmp_libs " $deplib" ;; esac ;; *) func_append 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 func_append 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" func_append 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!" func_append 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 # correct linux to gnu/linux during the next big refactor 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|qnx|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) # correct to gnu/linux during the next big refactor 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. func_append 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" func_append libobjs " $symfileobj" test "X$libobjs" = "X " && libobjs= if test "$opt_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 func_append 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 func_append oldlibs " $output_objdir/$libname.$libext" # Transform .lo files to .o files. oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; $lo2o" | $NL2SP` fi # Eliminate all temporary directories. #for path in $notinst_path; do # lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"` # deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"` # dependency_libs=`$ECHO "$dependency_libs " | $SED "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 func_replace_sysroot "$libdir" func_append temp_xrpath " -R$func_replace_sysroot_result" case "$finalize_rpath " in *" $libdir "*) ;; *) func_append 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 "*) ;; *) func_append 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 "*) ;; *) func_append 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* | *-*-haiku*) # these systems don't actually have a c library (as such)! ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C library is in the System framework func_append 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 func_append 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 "*) func_append 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 func_append 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 ;; *) func_append 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 "*) func_append 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 func_append 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 ;; *) func_append 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 "*) func_append newdeplibs " $a_deplib" a_deplib="" ;; esac fi if test -n "$a_deplib" ; then libname=`eval "\\$ECHO \"$libname_spec\""` if test -n "$file_magic_glob"; then libnameglob=`func_echo_all "$libname" | $SED -e $file_magic_glob` else libnameglob=$libname fi test "$want_nocaseglob" = yes && nocaseglob=`shopt -p nocaseglob` for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do if test "$want_nocaseglob" = yes; then shopt -s nocaseglob potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` $nocaseglob else potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` fi 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 "$potlib" | $SED 's,[^/]*$,,'`"$potliblink";; esac done if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | $SED -e 10q | $EGREP "$file_magic_regex" > /dev/null; then func_append 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. func_append 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 "*) func_append 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 \"$potent_lib\"" 2>/dev/null | $SED 10q | \ $EGREP "$match_pattern_regex" > /dev/null; then func_append 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. func_append newdeplibs " $a_deplib" ;; esac done # Gone through all deplibs. ;; none | unknown | *) newdeplibs="" tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; 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 " $tmp_deplibs" | $SED "s,$i,,"` done fi case $tmp_deplibs in *[!\ \ ]*) 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 ;; esac ;; 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 " $newdeplibs" | $SED '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 " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` deplibs=`$ECHO " $deplibs" | $SED '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 "*) func_append new_libs " -L$path/$objdir" ;; esac ;; esac done for deplib in $deplibs; do case $deplib in -L*) case " $new_libs " in *" $deplib "*) ;; *) func_append new_libs " $deplib" ;; esac ;; *) func_append 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 # Remove ${wl} instances when linking with ld. # FIXME: should test the right _cmds variable. case $archive_cmds in *\$LD\ *) wl= ;; esac if test "$hardcode_into_libs" = yes; then # Hardcode the library paths hardcode_libdirs= dep_rpath= rpath="$finalize_rpath" test "$opt_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 func_replace_sysroot "$libdir" libdir=$func_replace_sysroot_result 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"*) ;; *) func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" func_append dep_rpath " $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) func_append 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 "dep_rpath=\"$hardcode_libdir_flag_spec\"" fi if test -n "$runpath_var" && test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do func_append 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 "$opt_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 func_append linknames " $link" done # Use standard objects if they are pic test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$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" func_append 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 cmd1 in $cmds; do IFS="$save_ifs" # Take the normal branch if the nm_file_list_spec branch # doesn't work or if tool conversion is not needed. case $nm_file_list_spec~$to_tool_file_cmd in *~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*) try_normal_branch=yes eval cmd=\"$cmd1\" func_len " $cmd" len=$func_len_result ;; *) try_normal_branch=no ;; esac if test "$try_normal_branch" = yes \ && { test "$len" -lt "$max_cmd_len" \ || test "$max_cmd_len" -le -1; } then func_show_eval "$cmd" 'exit $?' skipped_export=false elif test -n "$nm_file_list_spec"; then func_basename "$output" output_la=$func_basename_result save_libobjs=$libobjs save_output=$output output=${output_objdir}/${output_la}.nm func_to_tool_file "$output" libobjs=$nm_file_list_spec$func_to_tool_file_result func_append delfiles " $output" func_verbose "creating $NM input file list: $output" for obj in $save_libobjs; do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" done > "$output" eval cmd=\"$cmd1\" func_show_eval "$cmd" 'exit $?' output=$save_output libobjs=$save_libobjs 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 "$include_expsyms" | $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 func_append 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 "*) ;; *) func_append 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" func_append generated " $gentop" func_extract_archives $gentop $convenience func_append 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\" func_append linker_flags " $flag" fi # Make a backup of the uninstalled library when relinking if test "$opt_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 func_basename "$output" output_la=$func_basename_result # 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 func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" >> $output done echo ')' >> $output func_append delfiles " $output" func_to_tool_file "$output" output=$func_to_tool_file_result 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 func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" >> $output done func_append delfiles " $output" func_to_tool_file "$output" output=$firstobj\"$file_list_spec$func_to_tool_file_result\" 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. reload_objs=$objlist eval concat_cmds=\"$reload_cmds\" else # All subsequent reloadable object files will link in # the last one created. reload_objs="$objlist $last_robj" eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$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~ reload_objs="$objlist $last_robj" eval concat_cmds=\"\${concat_cmds}$reload_cmds\" if test -n "$last_robj"; then eval concat_cmds=\"\${concat_cmds}~\$RM $last_robj\" fi func_append 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 "$opt_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 "$include_expsyms" | $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 func_append 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" func_append generated " $gentop" func_extract_archives $gentop $dlprefiles func_append 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 "$opt_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 "$opt_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 "$tmp_whole_archive_flags" | $SED 's|,| |g'` else gentop="$output_objdir/${obj}x" func_append generated " $gentop" func_extract_archives $gentop $convenience reload_conv_objs="$reload_objs $func_extract_archives_result" fi fi # If we're not building shared, we need to use non_pic_objs test "$build_libtool_libs" != yes && libobjs="$non_pic_objects" # Create the old-style object. reload_objs="$objs$old_deplibs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.${libext}$/d; /\.lib$/d; $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 " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'` finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED '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]) func_append compile_command " ${wl}-bind_at_load" func_append finalize_command " ${wl}-bind_at_load" ;; esac fi # Time to change all our "foo.ltframework" stuff back to "-framework foo" compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED '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 "*) func_append new_libs " -L$path/$objdir" ;; esac ;; esac done for deplib in $compile_deplibs; do case $deplib in -L*) case " $new_libs " in *" $deplib "*) ;; *) func_append new_libs " $deplib" ;; esac ;; *) func_append new_libs " $deplib" ;; esac done compile_deplibs="$new_libs" func_append compile_command " $compile_deplibs" func_append 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 "*) ;; *) func_append 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"*) ;; *) func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" func_append rpath " $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) func_append 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;; *) func_append dllsearchpath ":$libdir";; esac case :$dllsearchpath: in *":$testbindir:"*) ;; ::) dllsearchpath=$testbindir;; *) func_append 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"*) ;; *) func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" func_append rpath " $flag" fi elif test -n "$runpath_var"; then case "$finalize_perm_rpath " in *" $libdir "*) ;; *) func_append 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 "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP` finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$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 *cegcc* | *mingw32ce*) # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway. wrappers_required=no ;; *cygwin* | *mingw* ) if test "$build_libtool_libs" != yes; then wrappers_required=no fi ;; *) 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 "$compile_command" | $SED '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=$?' if test -n "$postlink_cmds"; then func_to_tool_file "$output" postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` func_execute_cmds "$postlink_cmds" 'exit $?' fi # 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 func_append 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 func_append 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 "$link_command" | $SED '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 $?' if test -n "$postlink_cmds"; then func_to_tool_file "$output" postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` func_execute_cmds "$postlink_cmds" 'exit $?' fi 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 "$compile_var$compile_command$compile_rpath" | $SED '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 "$link_command" | $SED '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 $?' if test -n "$postlink_cmds"; then func_to_tool_file "$output_objdir/$outputname" postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` func_execute_cmds "$postlink_cmds" 'exit $?' fi # 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 "$relink_command" | $SED "$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 func_append oldobjs " $symfileobj" fi fi addlibs="$old_convenience" fi if test -n "$addlibs"; then gentop="$output_objdir/${outputname}x" func_append generated " $gentop" func_extract_archives $gentop $addlibs func_append 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" func_append generated " $gentop" func_extract_archives $gentop $dlprefiles func_append 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" func_append 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" func_append oldobjs " $gentop/$newobj" ;; *) func_append oldobjs " $obj" ;; esac done fi func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 tool_oldlib=$func_to_tool_file_result 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 elif test -n "$archiver_list_spec"; then func_verbose "using command file archive linking..." for obj in $oldobjs do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" done > $output_objdir/$libname.libcmd func_to_tool_file "$output_objdir/$libname.libcmd" oldobjs=" $archiver_list_spec$func_to_tool_file_result" 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 "$relink_command" | $SED "$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" func_resolve_sysroot "$deplib" eval libdir=`${SED} -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result` test -z "$libdir" && \ func_fatal_error "\`$deplib' is not a valid libtool archive" func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name" ;; -L*) func_stripname -L '' "$deplib" func_replace_sysroot "$func_stripname_result" func_append newdependency_libs " -L$func_replace_sysroot_result" ;; -R*) func_stripname -R '' "$deplib" func_replace_sysroot "$func_stripname_result" func_append newdependency_libs " -R$func_replace_sysroot_result" ;; *) func_append 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" func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name" ;; *) func_append 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" func_append newdlprefiles " ${lt_sysroot:+=}$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 func_append newdlfiles " $abs" done dlfiles="$newdlfiles" newdlprefiles= for lib in $dlprefiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs="$lib" ;; *) abs=`pwd`"/$lib" ;; esac func_append newdlprefiles " $abs" done dlprefiles="$newdlprefiles" fi $RM $output # place dlname in correct position for cygwin # In fact, it would be nice if we could use this code for all target # systems that can't hard-code library paths into their executables # and that have no shared library path variable independent of PATH, # but it turns out we can't easily determine that from inspecting # libtool variables, so we have to hard-code the OSs to which it # applies here; at the moment, that means platforms that use the PE # object format with DLL files. See the long comment at the top of # tests/bindir.at for full details. tdlname=$dlname case $host,$output,$installed,$module,$dlname in *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) # If a -bindir argument was supplied, place the dll there. if test "x$bindir" != x ; then func_relative_path "$install_libdir" "$bindir" tdlname=$func_relative_path_result$dlname else # Otherwise fall back on heuristic. tdlname=../bin/$dlname fi ;; 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 "$opt_mode" = link || test "$opt_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) func_append RM " $arg"; rmforce=yes ;; -*) func_append RM " $arg" ;; *) func_append files " $arg" ;; esac done test -z "$RM" && \ func_fatal_help "you must specify an RM program" rmdirs= for file in $files; do func_dirname "$file" "" "." dir="$func_dirname_result" if test "X$dir" = X.; then odir="$objdir" else odir="$dir/$objdir" fi func_basename "$file" name="$func_basename_result" test "$opt_mode" = uninstall && odir="$dir" # Remember odir for removal later, being careful to avoid duplicates if test "$opt_mode" = clean; then case " $rmdirs " in *" $odir "*) ;; *) func_append rmdirs " $odir" ;; 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 func_append rmfiles " $odir/$n" done test -n "$old_library" && func_append rmfiles " $odir/$old_library" case "$opt_mode" in clean) case " $library_names " in *" $dlname "*) ;; *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;; esac test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${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 func_append 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 func_append rmfiles " $dir/$non_pic_object" fi fi ;; *) if test "$opt_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 func_append 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 func_append 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 func_append rmfiles " $odir/$name $odir/${name}S.${objext}" if test "$fast_install" = yes && test -n "$relink_command"; then func_append rmfiles " $odir/lt-$name" fi if test "X$noexename" != "X$name" ; then func_append rmfiles " $odir/lt-${noexename}.c" fi fi fi ;; esac func_show_eval "$RM $rmfiles" 'exit_status=1' done # 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 "$opt_mode" = uninstall || test "$opt_mode" = clean; } && func_mode_uninstall ${1+"$@"} test -z "$opt_mode" && { help="$generic_help" func_fatal_help "you must specify a MODE" } test -z "$exec_cmd" && \ func_fatal_help "invalid operation mode \`$opt_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 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gss-1.0.3/build-aux/test-driver���������������������������������������������������������������������0000755�0000000�0000000�00000010277�12415507622�013301� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /bin/sh # test-driver - basic testsuite driver script. scriptversion=2013-07-13.22; # UTC # Copyright (C) 2011-2013 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. # This file is maintained in Automake, please report # bugs to <bug-automake@gnu.org> or send patches to # <automake-patches@gnu.org>. # Make unconditional expansion of undefined variables an error. This # helps a lot in preventing typo-related bugs. set -u usage_error () { echo "$0: $*" >&2 print_usage >&2 exit 2 } print_usage () { cat <<END Usage: test-driver --test-name=NAME --log-file=PATH --trs-file=PATH [--expect-failure={yes|no}] [--color-tests={yes|no}] [--enable-hard-errors={yes|no}] [--] TEST-SCRIPT [TEST-SCRIPT-ARGUMENTS] The '--test-name', '--log-file' and '--trs-file' options are mandatory. END } test_name= # Used for reporting. log_file= # Where to save the output of the test script. trs_file= # Where to save the metadata of the test run. expect_failure=no color_tests=no enable_hard_errors=yes while test $# -gt 0; do case $1 in --help) print_usage; exit $?;; --version) echo "test-driver $scriptversion"; exit $?;; --test-name) test_name=$2; shift;; --log-file) log_file=$2; shift;; --trs-file) trs_file=$2; shift;; --color-tests) color_tests=$2; shift;; --expect-failure) expect_failure=$2; shift;; --enable-hard-errors) enable_hard_errors=$2; shift;; --) shift; break;; -*) usage_error "invalid option: '$1'";; *) break;; esac shift done missing_opts= test x"$test_name" = x && missing_opts="$missing_opts --test-name" test x"$log_file" = x && missing_opts="$missing_opts --log-file" test x"$trs_file" = x && missing_opts="$missing_opts --trs-file" if test x"$missing_opts" != x; then usage_error "the following mandatory options are missing:$missing_opts" fi if test $# -eq 0; then usage_error "missing argument" fi if test $color_tests = yes; then # Keep this in sync with 'lib/am/check.am:$(am__tty_colors)'. red='' # Red. grn='' # Green. lgn='' # Light green. blu='' # Blue. mgn='' # Magenta. std='' # No color. else red= grn= lgn= blu= mgn= std= fi do_exit='rm -f $log_file $trs_file; (exit $st); exit $st' trap "st=129; $do_exit" 1 trap "st=130; $do_exit" 2 trap "st=141; $do_exit" 13 trap "st=143; $do_exit" 15 # Test script is run here. "$@" >$log_file 2>&1 estatus=$? if test $enable_hard_errors = no && test $estatus -eq 99; then estatus=1 fi case $estatus:$expect_failure in 0:yes) col=$red res=XPASS recheck=yes gcopy=yes;; 0:*) col=$grn res=PASS recheck=no gcopy=no;; 77:*) col=$blu res=SKIP recheck=no gcopy=yes;; 99:*) col=$mgn res=ERROR recheck=yes gcopy=yes;; *:yes) col=$lgn res=XFAIL recheck=no gcopy=yes;; *:*) col=$red res=FAIL recheck=yes gcopy=yes;; esac # Report outcome to console. echo "${col}${res}${std}: $test_name" # Register the test result, and other relevant metadata. echo ":test-result: $res" > $trs_file echo ":global-test-result: $res" >> $trs_file echo ":recheck: $recheck" >> $trs_file echo ":copy-in-global-log: $gcopy" >> $trs_file # 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: ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gss-1.0.3/build-aux/gnupload������������������������������������������������������������������������0000755�0000000�0000000�00000027447�12415470476�012657� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Sign files and upload them. scriptversion=2013-03-19.17; # UTC # Copyright (C) 2004-2014 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/>. # Originally written by Alexandre Duret-Lutz <adl@gnu.org>. # The master copy of this file is maintained in the gnulib Git repository. # Please send bug reports and feature requests to bug-gnulib@gnu.org. set -e GPG='gpg --batch --no-tty' conffile=.gnuploadrc to= dry_run=false replace= symlink_files= delete_files= delete_symlinks= collect_var= dbg= nl=' ' usage="Usage: $0 [OPTION]... [CMD] FILE... [[CMD] FILE...] Sign all FILES, and process them at the destinations specified with --to. If CMD is not given, it defaults to uploading. See examples below. Commands: --delete delete FILES from destination --symlink create symbolic links --rmsymlink remove symbolic links -- treat the remaining arguments as files to upload Options: --to DEST specify a destination DEST for FILES (multiple --to options are allowed) --user NAME sign with key NAME --replace allow replacements of existing files --symlink-regex[=EXPR] use sed script EXPR to compute symbolic link names --dry-run do nothing, show what would have been done (including the constructed directive file) --version output version information and exit --help print this help text and exit If --symlink-regex is given without EXPR, then the link target name is created by replacing the version information with '-latest', e.g.: foo-1.3.4.tar.gz -> foo-latest.tar.gz Recognized destinations are: alpha.gnu.org:DIRECTORY savannah.gnu.org:DIRECTORY savannah.nongnu.org:DIRECTORY ftp.gnu.org:DIRECTORY build directive files and upload files by FTP download.gnu.org.ua:{alpha|ftp}/DIRECTORY build directive files and upload files by SFTP [user@]host:DIRECTORY upload files with scp Options and commands are applied in order. If the file $conffile exists in the current working directory, its contents are prepended to the actual command line options. Use this to keep your defaults. Comments (#) and empty lines in $conffile are allowed. <http://www.gnu.org/prep/maintain/html_node/Automated-FTP-Uploads.html> gives some further background. Examples: 1. Upload foobar-1.0.tar.gz to ftp.gnu.org: gnupload --to ftp.gnu.org:foobar foobar-1.0.tar.gz 2. Upload foobar-1.0.tar.gz and foobar-1.0.tar.xz to ftp.gnu.org: gnupload --to ftp.gnu.org:foobar foobar-1.0.tar.gz foobar-1.0.tar.xz 3. Same as above, and also create symbolic links to foobar-latest.tar.*: gnupload --to ftp.gnu.org:foobar \\ --symlink-regex \\ foobar-1.0.tar.gz foobar-1.0.tar.xz 4. Upload foobar-0.9.90.tar.gz to two sites: gnupload --to alpha.gnu.org:foobar \\ --to sources.redhat.com:~ftp/pub/foobar \\ foobar-0.9.90.tar.gz 5. Delete oopsbar-0.9.91.tar.gz and upload foobar-0.9.91.tar.gz (the -- terminates the list of files to delete): gnupload --to alpha.gnu.org:foobar \\ --to sources.redhat.com:~ftp/pub/foobar \\ --delete oopsbar-0.9.91.tar.gz \\ -- foobar-0.9.91.tar.gz gnupload executes a program ncftpput to do the transfers; if you don't happen to have an ncftp package installed, the ncftpput-ftp script in the build-aux/ directory of the gnulib package (http://savannah.gnu.org/projects/gnulib) may serve as a replacement. Send patches and bug reports to <bug-gnulib@gnu.org>." # Read local configuration file if test -r "$conffile"; then echo "$0: Reading configuration file $conffile" conf=`sed 's/#.*$//;/^$/d' "$conffile" | tr "\015$nl" ' '` eval set x "$conf \"\$@\"" shift fi while test -n "$1"; do case $1 in -*) collect_var= case $1 in --help) echo "$usage" exit $? ;; --to) if test -z "$2"; then echo "$0: Missing argument for --to" 1>&2 exit 1 elif echo "$2" | grep 'ftp-upload\.gnu\.org' >/dev/null; then echo "$0: Use ftp.gnu.org:PKGNAME or alpha.gnu.org:PKGNAME" >&2 echo "$0: for the destination, not ftp-upload.gnu.org (which" >&2 echo "$0: is used for direct ftp uploads, not with gnupload)." >&2 echo "$0: See --help and its examples if need be." >&2 exit 1 else to="$to $2" shift fi ;; --user) if test -z "$2"; then echo "$0: Missing argument for --user" 1>&2 exit 1 else GPG="$GPG --local-user $2" shift fi ;; --delete) collect_var=delete_files ;; --replace) replace="replace: true" ;; --rmsymlink) collect_var=delete_symlinks ;; --symlink-regex=*) symlink_expr=`expr "$1" : '[^=]*=\(.*\)'` ;; --symlink-regex) symlink_expr='s|-[0-9][0-9\.]*\(-[0-9][0-9]*\)\{0,1\}\.|-latest.|' ;; --symlink) collect_var=symlink_files ;; --dry-run|-n) dry_run=: ;; --version) echo "gnupload $scriptversion" exit $? ;; --) shift break ;; -*) echo "$0: Unknown option '$1', try '$0 --help'" 1>&2 exit 1 ;; esac ;; *) if test -z "$collect_var"; then break else eval "$collect_var=\"\$$collect_var $1\"" fi ;; esac shift done dprint() { echo "Running $* ..." } if $dry_run; then dbg=dprint fi if test -z "$to"; then echo "$0: Missing destination sites" >&2 exit 1 fi if test -n "$symlink_files"; then x=`echo "$symlink_files" | sed 's/[^ ]//g;s/ //g'` if test -n "$x"; then echo "$0: Odd number of symlink arguments" >&2 exit 1 fi fi if test $# = 0; then if test -z "${symlink_files}${delete_files}${delete_symlinks}"; then echo "$0: No file to upload" 1>&2 exit 1 fi else # Make sure all files exist. We don't want to ask # for the passphrase if the script will fail. for file do if test ! -f $file; then echo "$0: Cannot find '$file'" 1>&2 exit 1 elif test -n "$symlink_expr"; then linkname=`echo $file | sed "$symlink_expr"` if test -z "$linkname"; then echo "$0: symlink expression produces empty results" >&2 exit 1 elif test "$linkname" = $file; then echo "$0: symlink expression does not alter file name" >&2 exit 1 fi fi done fi # Make sure passphrase is not exported in the environment. unset passphrase unset passphrase_fd_0 GNUPGHOME=${GNUPGHOME:-$HOME/.gnupg} # Reset PATH to be sure that echo is a built-in. We will later use # 'echo $passphrase' to output the passphrase, so it is important that # it is a built-in (third-party programs tend to appear in 'ps' # listings with their arguments...). # Remember this script runs with 'set -e', so if echo is not built-in # it will exit now. if $dry_run || grep -q "^use-agent" $GNUPGHOME/gpg.conf; then :; else PATH=/empty echo -n "Enter GPG passphrase: " stty -echo read -r passphrase stty echo echo passphrase_fd_0="--passphrase-fd 0" fi if test $# -ne 0; then for file do echo "Signing $file ..." rm -f $file.sig echo "$passphrase" | $dbg $GPG $passphrase_fd_0 -ba -o $file.sig $file done fi # mkdirective DESTDIR BASE FILE STMT # Arguments: See upload, below mkdirective () { stmt="$4" if test -n "$3"; then stmt=" filename: $3$stmt" fi cat >${2}.directive<<EOF version: 1.2 directory: $1 comment: gnupload v. $scriptversion$stmt EOF if $dry_run; then echo "File ${2}.directive:" cat ${2}.directive echo "File ${2}.directive:" | sed 's/./-/g' fi } mksymlink () { while test $# -ne 0 do echo "symlink: $1 $2" shift shift done } # upload DEST DESTDIR BASE FILE STMT FILES # Arguments: # DEST Destination site; # DESTDIR Destination directory; # BASE Base name for the directive file; # FILE Name of the file to distribute (may be empty); # STMT Additional statements for the directive file; # FILES List of files to upload. upload () { dest=$1 destdir=$2 base=$3 file=$4 stmt=$5 files=$6 rm -f $base.directive $base.directive.asc case $dest in alpha.gnu.org:*) mkdirective "$destdir" "$base" "$file" "$stmt" echo "$passphrase" | $dbg $GPG $passphrase_fd_0 --clearsign $base.directive $dbg ncftpput ftp-upload.gnu.org /incoming/alpha $files $base.directive.asc ;; ftp.gnu.org:*) mkdirective "$destdir" "$base" "$file" "$stmt" echo "$passphrase" | $dbg $GPG $passphrase_fd_0 --clearsign $base.directive $dbg ncftpput ftp-upload.gnu.org /incoming/ftp $files $base.directive.asc ;; savannah.gnu.org:*) if test -z "$files"; then echo "$0: warning: standalone directives not applicable for $dest" >&2 fi $dbg ncftpput savannah.gnu.org /incoming/savannah/$destdir $files ;; savannah.nongnu.org:*) if test -z "$files"; then echo "$0: warning: standalone directives not applicable for $dest" >&2 fi $dbg ncftpput savannah.nongnu.org /incoming/savannah/$destdir $files ;; download.gnu.org.ua:alpha/*|download.gnu.org.ua:ftp/*) destdir_p1=`echo "$destdir" | sed 's,^[^/]*/,,'` destdir_topdir=`echo "$destdir" | sed 's,/.*,,'` mkdirective "$destdir_p1" "$base" "$file" "$stmt" echo "$passphrase" | $dbg $GPG $passphrase_fd_0 --clearsign $base.directive for f in $files $base.directive.asc do echo put $f done | $dbg sftp -b - puszcza.gnu.org.ua:/incoming/$destdir_topdir ;; /*) dest_host=`echo "$dest" | sed 's,:.*,,'` mkdirective "$destdir" "$base" "$file" "$stmt" echo "$passphrase" | $dbg $GPG $passphrase_fd_0 --clearsign $base.directive $dbg cp $files $base.directive.asc $dest_host ;; *) if test -z "$files"; then echo "$0: warning: standalone directives not applicable for $dest" >&2 fi $dbg scp $files $dest ;; esac rm -f $base.directive $base.directive.asc } ##### # Process any standalone directives stmt= if test -n "$symlink_files"; then stmt="$stmt `mksymlink $symlink_files`" fi for file in $delete_files do stmt="$stmt archive: $file" done for file in $delete_symlinks do stmt="$stmt rmsymlink: $file" done if test -n "$stmt"; then for dest in $to do destdir=`echo $dest | sed 's/[^:]*://'` upload "$dest" "$destdir" "`hostname`-$$" "" "$stmt" done fi # Process actual uploads for dest in $to do for file do echo "Uploading $file to $dest ..." stmt= # # allowing file replacement is all or nothing. if test -n "$replace"; then stmt="$stmt $replace" fi # files="$file $file.sig" destdir=`echo $dest | sed 's/[^:]*://'` if test -n "$symlink_expr"; then linkname=`echo $file | sed "$symlink_expr"` stmt="$stmt symlink: $file $linkname symlink: $file.sig $linkname.sig" fi upload "$dest" "$destdir" "$file" "$file" "$stmt" "$files" done done 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: �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gss-1.0.3/build-aux/ar-lib��������������������������������������������������������������������������0000755�0000000�0000000�00000013302�12415507621�012166� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /bin/sh # Wrapper for Microsoft lib.exe me=ar-lib scriptversion=2012-03-01.08; # UTC # Copyright (C) 2010-2013 Free Software Foundation, Inc. # Written by Peter Rosin <peda@lysator.liu.se>. # # 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>. # func_error message func_error () { echo "$me: $1" 1>&2 exit 1 } file_conv= # func_file_conv build_file # Convert a $build file to $host form and store it in $file # Currently only supports Windows hosts. func_file_conv () { file=$1 case $file in / | /[!/]*) # absolute file, and not a UNC file if test -z "$file_conv"; then # lazily determine how to convert abs files case `uname -s` in MINGW*) file_conv=mingw ;; CYGWIN*) file_conv=cygwin ;; *) file_conv=wine ;; esac fi case $file_conv in mingw) file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'` ;; cygwin) file=`cygpath -m "$file" || echo "$file"` ;; wine) file=`winepath -w "$file" || echo "$file"` ;; esac ;; esac } # func_at_file at_file operation archive # Iterate over all members in AT_FILE performing OPERATION on ARCHIVE # for each of them. # When interpreting the content of the @FILE, do NOT use func_file_conv, # since the user would need to supply preconverted file names to # binutils ar, at least for MinGW. func_at_file () { operation=$2 archive=$3 at_file_contents=`cat "$1"` eval set x "$at_file_contents" shift for member do $AR -NOLOGO $operation:"$member" "$archive" || exit $? done } case $1 in '') func_error "no command. Try '$0 --help' for more information." ;; -h | --h*) cat <<EOF Usage: $me [--help] [--version] PROGRAM ACTION ARCHIVE [MEMBER...] Members may be specified in a file named with @FILE. EOF exit $? ;; -v | --v*) echo "$me, version $scriptversion" exit $? ;; esac if test $# -lt 3; then func_error "you must specify a program, an action and an archive" fi AR=$1 shift while : do if test $# -lt 2; then func_error "you must specify a program, an action and an archive" fi case $1 in -lib | -LIB \ | -ltcg | -LTCG \ | -machine* | -MACHINE* \ | -subsystem* | -SUBSYSTEM* \ | -verbose | -VERBOSE \ | -wx* | -WX* ) AR="$AR $1" shift ;; *) action=$1 shift break ;; esac done orig_archive=$1 shift func_file_conv "$orig_archive" archive=$file # strip leading dash in $action action=${action#-} delete= extract= list= quick= replace= index= create= while test -n "$action" do case $action in d*) delete=yes ;; x*) extract=yes ;; t*) list=yes ;; q*) quick=yes ;; r*) replace=yes ;; s*) index=yes ;; S*) ;; # the index is always updated implicitly c*) create=yes ;; u*) ;; # TODO: don't ignore the update modifier v*) ;; # TODO: don't ignore the verbose modifier *) func_error "unknown action specified" ;; esac action=${action#?} done case $delete$extract$list$quick$replace,$index in yes,* | ,yes) ;; yesyes*) func_error "more than one action specified" ;; *) func_error "no action specified" ;; esac if test -n "$delete"; then if test ! -f "$orig_archive"; then func_error "archive not found" fi for member do case $1 in @*) func_at_file "${1#@}" -REMOVE "$archive" ;; *) func_file_conv "$1" $AR -NOLOGO -REMOVE:"$file" "$archive" || exit $? ;; esac done elif test -n "$extract"; then if test ! -f "$orig_archive"; then func_error "archive not found" fi if test $# -gt 0; then for member do case $1 in @*) func_at_file "${1#@}" -EXTRACT "$archive" ;; *) func_file_conv "$1" $AR -NOLOGO -EXTRACT:"$file" "$archive" || exit $? ;; esac done else $AR -NOLOGO -LIST "$archive" | sed -e 's/\\/\\\\/g' | while read member do $AR -NOLOGO -EXTRACT:"$member" "$archive" || exit $? done fi elif test -n "$quick$replace"; then if test ! -f "$orig_archive"; then if test -z "$create"; then echo "$me: creating $orig_archive" fi orig_archive= else orig_archive=$archive fi for member do case $1 in @*) func_file_conv "${1#@}" set x "$@" "@$file" ;; *) func_file_conv "$1" set x "$@" "$file" ;; esac shift shift done if test -n "$orig_archive"; then $AR -NOLOGO -OUT:"$archive" "$orig_archive" "$@" || exit $? else $AR -NOLOGO -OUT:"$archive" "$@" || exit $? fi elif test -n "$list"; then if test ! -f "$orig_archive"; then func_error "archive not found" fi $AR -NOLOGO -LIST "$archive" || exit $? fi ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gss-1.0.3/build-aux/config.sub����������������������������������������������������������������������0000755�0000000�0000000�00000105775�12415507621�013075� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /bin/sh # Configuration validation subroutine script. # Copyright 1992-2014 Free Software Foundation, Inc. timestamp='2014-09-11' # 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 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 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 Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # Please send patches with a ChangeLog entry to config-patches@gnu.org. # # 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 1992-2014 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-android* | linux-dietlibc | linux-newlib* | \ linux-musl* | 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/'` ;; android-linux) os=-linux-android basic_machine=`echo $1 | sed 's/^\(.*\)-\([^-]*-[^-]*\)$/\1/'`-unknown ;; *) 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*178) os=-lynxos178 ;; -lynx*5) os=-lynxos5 ;; -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 \ | aarch64 | aarch64_be \ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] | alphapca5[67] \ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] | alpha64pca5[67] \ | am33_2.0 \ | arc | arceb \ | arm | arm[bl]e | arme[lb] | armv[2-8] | armv[3-8][lb] | armv7[arm] \ | avr | avr32 \ | be32 | be64 \ | bfin \ | c4x | c8051 | clipper \ | d10v | d30v | dlx | dsp16xx \ | epiphany \ | fido | fr30 | frv \ | h8300 | h8500 | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | hexagon \ | i370 | i860 | i960 | ia64 \ | ip2k | iq2000 \ | k1om \ | le32 | le64 \ | lm32 \ | m32c | m32r | m32rle | m68000 | m68k | m88k \ | maxq | mb | microblaze | microblazeel | 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 \ | mipsisa32r6 | mipsisa32r6el \ | mipsisa64 | mipsisa64el \ | mipsisa64r2 | mipsisa64r2el \ | mipsisa64r6 | mipsisa64r6el \ | mipsisa64sb1 | mipsisa64sb1el \ | mipsisa64sr71k | mipsisa64sr71kel \ | mipsr5900 | mipsr5900el \ | mipstx39 | mipstx39el \ | mn10200 | mn10300 \ | moxie \ | mt \ | msp430 \ | nds32 | nds32le | nds32be \ | nios | nios2 | nios2eb | nios2el \ | ns16k | ns32k \ | open8 | or1k | or1knd | or32 \ | pdp10 | pdp11 | pj | pjl \ | powerpc | powerpc64 | powerpc64le | powerpcle \ | pyramid \ | riscv32 | riscv64 \ | rl78 | 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 \ | tahoe | tic4x | tic54x | tic55x | tic6x | tic80 | tron \ | ubicom32 \ | v850 | v850e | v850e1 | v850e2 | v850es | v850e2v3 \ | we32k \ | x86 | xc16x | xstormy16 | xtensa \ | z8k | z80) basic_machine=$basic_machine-unknown ;; c54x) basic_machine=tic54x-unknown ;; c55x) basic_machine=tic55x-unknown ;; c6x) basic_machine=tic6x-unknown ;; m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x | nvptx | picochip) basic_machine=$basic_machine-unknown os=-none ;; m88110 | m680[12346]0 | m683?2 | m68360 | m5200 | v70 | w65 | z8k) ;; ms1) basic_machine=mt-unknown ;; strongarm | thumb | xscale) basic_machine=arm-unknown ;; xgate) basic_machine=$basic_machine-unknown os=-none ;; xscaleeb) basic_machine=armeb-unknown ;; xscaleel) basic_machine=armel-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-* \ | aarch64-* | aarch64_be-* \ | alpha-* | alphaev[4-8]-* | alphaev56-* | alphaev6[78]-* \ | alpha64-* | alpha64ev[4-8]-* | alpha64ev56-* | alpha64ev6[78]-* \ | alphapca5[67]-* | alpha64pca5[67]-* | arc-* | arceb-* \ | arm-* | armbe-* | armle-* | armeb-* | armv*-* \ | avr-* | avr32-* \ | be32-* | be64-* \ | bfin-* | bs2000-* \ | c[123]* | c30-* | [cjt]90-* | c4x-* \ | c8051-* | 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-* \ | hexagon-* \ | i*86-* | i860-* | i960-* | ia64-* \ | ip2k-* | iq2000-* \ | k1om-* \ | le32-* | le64-* \ | lm32-* \ | m32c-* | m32r-* | m32rle-* \ | m68000-* | m680[012346]0-* | m68360-* | m683?2-* | m68k-* \ | m88110-* | m88k-* | maxq-* | mcore-* | metag-* \ | microblaze-* | microblazeel-* \ | 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-* \ | mipsisa32r6-* | mipsisa32r6el-* \ | mipsisa64-* | mipsisa64el-* \ | mipsisa64r2-* | mipsisa64r2el-* \ | mipsisa64r6-* | mipsisa64r6el-* \ | mipsisa64sb1-* | mipsisa64sb1el-* \ | mipsisa64sr71k-* | mipsisa64sr71kel-* \ | mipsr5900-* | mipsr5900el-* \ | mipstx39-* | mipstx39el-* \ | mmix-* \ | mt-* \ | msp430-* \ | nds32-* | nds32le-* | nds32be-* \ | nios-* | nios2-* | nios2eb-* | nios2el-* \ | none-* | np1-* | ns16k-* | ns32k-* \ | open8-* \ | or1k*-* \ | orion-* \ | pdp10-* | pdp11-* | pj-* | pjl-* | pn-* | power-* \ | powerpc-* | powerpc64-* | powerpc64le-* | powerpcle-* \ | pyramid-* \ | rl78-* | 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-* | sv1-* | sx?-* \ | tahoe-* \ | tic30-* | tic4x-* | tic54x-* | tic55x-* | tic6x-* | tic80-* \ | tile*-* \ | tron-* \ | ubicom32-* \ | v850-* | v850e-* | v850e1-* | v850es-* | v850e2-* | v850e2v3-* \ | vax-* \ | we32k-* \ | x86-* | x86_64-* | xc16x-* | xps100-* \ | 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 ;; c54x-*) basic_machine=tic54x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c55x-*) basic_machine=tic55x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; c6x-*) basic_machine=tic6x-`echo $basic_machine | sed 's/^[^-]*-//'` ;; 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 | 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*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 ;; mingw64) basic_machine=x86_64-pc os=-mingw64 ;; mingw32) basic_machine=i686-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 ;; moxiebox) basic_machine=moxie-unknown os=-moxiebox ;; msdos) basic_machine=i386-pc os=-msdos ;; ms1-*) basic_machine=`echo $basic_machine | sed -e 's/ms1-/mt-/'` ;; msys) basic_machine=i686-pc os=-msys ;; mvs) basic_machine=i370-ibm os=-mvs ;; nacl) basic_machine=le32-unknown os=-nacl ;; 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 ;; neo-tandem) basic_machine=neo-tandem ;; nse-tandem) basic_machine=nse-tandem ;; 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 | ppcbe) basic_machine=powerpc-unknown ;; ppc-* | ppcbe-*) 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 | rdos64) basic_machine=x86_64-pc os=-rdos ;; rdos32) 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 ;; strongarm-* | thumb-*) basic_machine=arm-`echo $basic_machine | sed 's/^[^-]*-//'` ;; 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 ;; tile*) basic_machine=$basic_machine-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 ;; xscale-* | xscalee[bl]-*) basic_machine=`echo $basic_machine | sed 's/^xscale/arm/'` ;; 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* | -plan9* \ | -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* \ | -bitrig* | -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* | -msys* | -pe* | -psos* | -moss* | -proelf* | -rtems* \ | -mingw32* | -mingw64* | -linux-gnu* | -linux-android* \ | -linux-newlib* | -linux-musl* | -linux-uclibc* \ | -uxpv* | -beos* | -mpeix* | -udk* | -moxiebox* \ | -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* | -tirtos*) # 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 ;; -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 ;; c8051-*) os=-elf ;; hexagon-*) os=-elf ;; tic54x-*) os=-coff ;; tic55x-*) os=-coff ;; tic6x-*) 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 ;; 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: ���gss-1.0.3/build-aux/depcomp�������������������������������������������������������������������������0000755�0000000�0000000�00000056016�12415507621�012460� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /bin/sh # depcomp - compile a program generating dependencies as side-effects scriptversion=2013-05-30.07; # UTC # Copyright (C) 1999-2013 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 outputting dependencies. libtool Whether libtool is used (yes/no). Report bugs to <bug-automake@gnu.org>. EOF exit $? ;; -v | --v*) echo "depcomp $scriptversion" exit $? ;; esac # Get the directory component of the given path, and save it in the # global variables '$dir'. Note that this directory component will # be either empty or ending with a '/' character. This is deliberate. set_dir_from () { case $1 in */*) dir=`echo "$1" | sed -e 's|/[^/]*$|/|'`;; *) dir=;; esac } # Get the suffix-stripped basename of the given path, and save it the # global variable '$base'. set_base_from () { base=`echo "$1" | sed -e 's|^.*/||' -e 's/\.[^.]*$//'` } # If no dependency file was actually created by the compiler invocation, # we still have to create a dummy depfile, to avoid errors with the # Makefile "include basename.Plo" scheme. make_dummy_depfile () { echo "#dummy" > "$depfile" } # Factor out some common post-processing of the generated depfile. # Requires the auxiliary global variable '$tmpdepfile' to be set. aix_post_process_depfile () { # If the compiler actually managed to produce a dependency file, # post-process it. if test -f "$tmpdepfile"; then # Each line is of the form 'foo.o: dependency.h'. # Do two passes, one to just change these to # $object: dependency.h # and one to simply output # dependency.h: # which is needed to avoid the deleted-header problem. { sed -e "s,^.*\.[$lower]*:,$object:," < "$tmpdepfile" sed -e "s,^.*\.[$lower]*:[$tab ]*,," -e 's,$,:,' < "$tmpdepfile" } > "$depfile" rm -f "$tmpdepfile" else make_dummy_depfile fi } # A tabulation character. tab=' ' # A newline character. nl=' ' # Character ranges might be problematic outside the C locale. # These definitions help. upper=ABCDEFGHIJKLMNOPQRSTUVWXYZ lower=abcdefghijklmnopqrstuvwxyz digits=0123456789 alpha=${upper}${lower} 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" # Avoid interferences from the environment. gccflag= dashmflag= # 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 if test "$depmode" = msvc7msys; then # This is just like msvc7 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=msvc7 fi if test "$depmode" = xlc; then # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information. gccflag=-qmakedep=gcc,-MF depmode=gcc 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 -ne 0; then rm -f "$tmpdepfile" exit $stat fi mv "$tmpdepfile" "$depfile" ;; gcc) ## Note that this doesn't just cater to obsosete pre-3.x GCC compilers. ## but also to in-use compilers like IMB xlc/xlC and the HP C compiler. ## (see the conditional assignment to $gccflag above). ## 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). Also, it might not be ## supported by the other compilers which use the 'gcc' depmode. ## - 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 -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" # 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. ## 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. hp depmode also adds that space, but also prefixes the VPATH ## to the object. Take care to not repeat it in the output. ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -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 -ne 0; then 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 ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' \ | tr "$nl" ' ' >> "$depfile" echo >> "$depfile" # The second pass generates a dummy entry for each header file. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ >> "$depfile" else make_dummy_depfile fi rm -f "$tmpdepfile" ;; xlc) # 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 ;; 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. set_dir_from "$object" set_base_from "$object" 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 -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" do test -f "$tmpdepfile" && break done aix_post_process_depfile ;; tcc) # tcc (Tiny C Compiler) understand '-MD -MF file' since version 0.9.26 # FIXME: That version still under development at the moment of writing. # Make that this statement remains true also for stable, released # versions. # It will wrap lines (doesn't matter whether long or short) with a # trailing '\', as in: # # foo.o : \ # foo.c \ # foo.h \ # # It will put a trailing '\' even on the last line, and will use leading # spaces rather than leading tabs (at least since its commit 0394caf7 # "Emit spaces for -MD"). "$@" -MD -MF "$tmpdepfile" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each non-empty line is of the form 'foo.o : \' or ' dep.h \'. # We have to change lines of the first kind to '$object: \'. sed -e "s|.*:|$object :|" < "$tmpdepfile" > "$depfile" # And for each line of the second kind, we have to emit a 'dep.h:' # dummy dependency, to avoid the deleted-header problem. sed -n -e 's|^ *\(.*\) *\\$|\1:|p' < "$tmpdepfile" >> "$depfile" rm -f "$tmpdepfile" ;; ## The order of this option in the case statement is important, since the ## shell code in configure will try each of these formats in the order ## listed in this file. A plain '-MD' option would be understood by many ## compilers, so we must ensure this comes after the gcc and icc options. pgcc) # Portland's C compiler understands '-MD'. # Will always output deps to 'file.d' where file is the root name of the # source file under compilation, even if file resides in a subdirectory. # The object file name does not affect the name of the '.d' file. # pgcc 10.2 will output # foo.o: sub/foo.c sub/foo.h # and will wrap long lines using '\' : # foo.o: sub/foo.c ... \ # sub/foo.h ... \ # ... set_dir_from "$object" # Use the source, not the object, to determine the base name, since # that's sadly what pgcc will do too. set_base_from "$source" tmpdepfile=$base.d # For projects that build the same source file twice into different object # files, the pgcc approach of using the *source* file root name can cause # problems in parallel builds. Use a locking strategy to avoid stomping on # the same $tmpdepfile. lockdir=$base.d-lock trap " echo '$0: caught signal, cleaning up...' >&2 rmdir '$lockdir' exit 1 " 1 2 13 15 numtries=100 i=$numtries while test $i -gt 0; do # mkdir is a portable test-and-set. if mkdir "$lockdir" 2>/dev/null; then # This process acquired the lock. "$@" -MD stat=$? # Release the lock. rmdir "$lockdir" break else # If the lock is being held by a different process, wait # until the winning process is done or we timeout. while test -d "$lockdir" && test $i -gt 0; do sleep 1 i=`expr $i - 1` done fi i=`expr $i - 1` done trap - 1 2 13 15 if test $i -le 0; then echo "$0: failed to acquire lock after $numtries attempts" >&2 echo "$0: check lockdir '$lockdir'" >&2 exit 1 fi if test $stat -ne 0; then 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. set_dir_from "$object" set_base_from "$object" 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 -ne 0; then 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,^.*\.[$lower]*:,$object:," "$tmpdepfile" > "$depfile" # Add 'dependent.h:' lines. sed -ne '2,${ s/^ *// s/ \\*$// s/$/:/ p }' "$tmpdepfile" >> "$depfile" else make_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. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then # Libtool 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$base.o.d # libtool 1.5 tmpdepfile2=$dir.libs/$base.o.d # Likewise. tmpdepfile3=$dir.libs/$base.d # Compaq CCC V6.2-504 "$@" -Wc,-MD else tmpdepfile1=$dir$base.d tmpdepfile2=$dir$base.d tmpdepfile3=$dir$base.d "$@" -MD fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" do test -f "$tmpdepfile" && break done # Same post-processing that is required for AIX mode. aix_post_process_depfile ;; msvc7) if test "$libtool" = yes; then showIncludes=-Wc,-showIncludes else showIncludes=-showIncludes fi "$@" $showIncludes > "$tmpdepfile" stat=$? grep -v '^Note: including file: ' "$tmpdepfile" if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" # The first sed program below extracts the file names and escapes # backslashes for cygpath. The second sed program outputs the file # name when reading, but also accumulates all include files in the # hold buffer in order to output them again at the end. This only # works with sed implementations that can handle large buffers. sed < "$tmpdepfile" -n ' /^Note: including file: *\(.*\)/ { s//\1/ s/\\/\\\\/g p }' | $cygpath_u | sort -u | sed -n ' s/ /\\ /g s/\(.*\)/'"$tab"'\1 \\/p s/.\(.*\) \\/\1:/ H $ { s/.*/'"$tab"'/ G p }' >> "$depfile" echo >> "$depfile" # make sure the fragment doesn't end with a backslash rm -f "$tmpdepfile" ;; msvc7msys) # 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 ;; #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|^[$tab ]*[^:$tab ][^:][^:]*:[$tab ]*|$object: |" > "$tmpdepfile" rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process this sed invocation # correctly. Breaking it into two sed invocations is a workaround. tr ' ' "$nl" < "$tmpdepfile" \ | 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" # makedepend may prepend the VPATH from the source file name to the object. # No need to regex-escape $object, excess matching of '.' is harmless. sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process the last invocation # correctly. Breaking it into two sed invocations is a workaround. sed '1,2d' "$tmpdepfile" \ | tr ' ' "$nl" \ | 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::'"$tab"'\1 \\:p' >> "$depfile" echo "$tab" >> "$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: ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gss-1.0.3/build-aux/install-sh����������������������������������������������������������������������0000755�0000000�0000000�00000033255�12415507621�013107� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # install - install a program, script, or datafile scriptversion=2011-11-20.07; # 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 # Protect names problematic for 'test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac 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 # Protect names problematic for 'test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac 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 do_exit='(exit $ret); exit $ret' trap "ret=129; $do_exit" 1 trap "ret=130; $do_exit" 2 trap "ret=141; $do_exit" 13 trap "ret=143; $do_exit" 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 problematic for 'test' and other utilities. 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 # 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-writable 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 X"$d" = X && 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: ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gss-1.0.3/build-aux/gendocs.sh����������������������������������������������������������������������0000755�0000000�0000000�00000040761�12415470476�013073� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/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=2014-05-01.10 # Copyright 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013 # 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. # # The latest version of this script, and the companion template, is # available from Texinfo CVS: # http://savannah.gnu.org/cgi-bin/viewcvs/texinfo/texinfo/util/gendocs.sh # http://savannah.gnu.org/cgi-bin/viewcvs/texinfo/texinfo/util/gendocs_template # # An up-to-date copy is also maintained in Gnulib (gnu.org/software/gnulib). # TODO: # - image importation was only implemented for HTML generated by # makeinfo. But it should be simple enough to adjust. # - images are not imported in the source tarball. All the needed # formats (PDF, PNG, etc.) should be included. 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"} : ${DOCBOOK2HTML="docbook2html"} : ${DOCBOOK2PDF="docbook2pdf"} : ${DOCBOOK2TXT="docbook2txt"} : ${GENDOCS_TEMPLATE_DIR="."} : ${PERL='perl'} : ${TEXI2HTML="texi2html"} unset CDPATH unset use_texi2html version="gendocs.sh $scriptversion Copyright 2013 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 output in various 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: --email ADR use ADR as contact in generated web pages; always give this. -s SRCFILE read Texinfo from SRCFILE, instead of PACKAGE.{texinfo|texi|txi} -o OUTDIR write files into OUTDIR, instead of manual/. -I DIR append DIR to the Texinfo search path. --common ARG pass ARG in all invocations. --html ARG pass ARG to makeinfo or texi2html for HTML targets. --info ARG pass ARG to makeinfo for Info, instead of --no-split. --no-ascii skip generating the plain text output. --no-html skip generating the html output. --no-info skip generating the info output. --no-tex skip generating the dvi and pdf output. --source ARG include ARG in tar archive of sources. --split HOW make split HTML by node, section, chapter; default node. --texi2html use texi2html to make HTML target, with all split versions. --docbook convert through DocBook too (xml, txt, html, pdf). --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 so your own bug-reporting address will be used 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.) As implied above, by default monolithic Info files are generated. If you want split Info, or other Info options, use --info to override. You can set the environment variables MAKEINFO, TEXI2DVI, TEXI2HTML, and PERL 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, and DOCBOOK2TXT are also consulted. By default, makeinfo and texi2dvi are 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. " MANUAL_TITLE= PACKAGE= EMAIL=webmasters@gnu.org # please override with --email commonarg= # passed to all makeinfo/texi2html invcations. dirargs= # passed to all tools (-I dir). dirs= # -I directories. htmlarg= infoarg=--no-split generate_ascii=true generate_html=true generate_info=true generate_tex=true outdir=manual source_extra= split=node srcfile= while test $# -gt 0; do case $1 in -s) shift; srcfile=$1;; -o) shift; outdir=$1;; -I) shift; dirargs="$dirargs -I '$1'"; dirs="$dirs $1";; --common) shift; commonarg=$1;; --docbook) docbook=yes;; --email) shift; EMAIL=$1;; --html) shift; htmlarg=$1;; --info) shift; infoarg=$1;; --no-ascii) generate_ascii=false;; --no-html) generate_ascii=false;; --no-info) generate_info=false;; --no-tex) generate_tex=false;; --source) shift; source_extra=$1;; --split) shift; split=$1;; --texi2html) use_texi2html=1;; --help) echo "$usage"; exit 0;; --version) echo "$version"; exit 0;; -*) 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 # makeinfo uses the dirargs, but texi2dvi doesn't. commonarg=" $dirargs $commonarg" # 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 # Function to return size of $1 in something resembling kilobytes. calcsize() { size=`ls -ksl $1 | awk '{print $1}'` echo $size } # copy_images OUTDIR HTML-FILE... # ------------------------------- # Copy all the images needed by the HTML-FILEs into OUTDIR. # Look for them in . and the -I directories; this is simpler than what # makeinfo supports with -I, but hopefully it will suffice. copy_images() { local odir odir=$1 shift $PERL -n -e " BEGIN { \$me = '$prog'; \$odir = '$odir'; @dirs = qw(. $dirs); } " -e ' /<img src="(.*?)"/g && ++$need{$1}; END { #print "$me: @{[keys %need]}\n"; # for debugging, show images found. FILE: for my $f (keys %need) { for my $d (@dirs) { if (-f "$d/$f") { use File::Basename; my $dest = dirname ("$odir/$f"); # use File::Path; -d $dest || mkpath ($dest) || die "$me: cannot mkdir $dest: $!\n"; # use File::Copy; copy ("$d/$f", $dest) || die "$me: cannot copy $d/$f to $dest: $!\n"; next FILE; } } die "$me: $ARGV: cannot find image $f\n"; } } ' -- "$@" || exit 1 } case $outdir in /*) abs_outdir=$outdir;; *) abs_outdir=$srcdir/$outdir;; esac echo "Making output for $srcfile" echo " in `pwd`" mkdir -p "$outdir/" # if $generate_info; then cmd="$SETLANG $MAKEINFO -o $PACKAGE.info $commonarg $infoarg \"$srcfile\"" echo "Generating info... ($cmd)" rm -f $PACKAGE.info* # get rid of any strays eval "$cmd" tar czf "$outdir/$PACKAGE.info.tar.gz" $PACKAGE.info* ls -l "$outdir/$PACKAGE.info.tar.gz" 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. fi # end info # if $generate_tex; then cmd="$SETLANG $TEXI2DVI $dirargs \"$srcfile\"" printf "\nGenerating dvi... ($cmd)\n" eval "$cmd" # compress/finish dvi: gzip -f -9 $PACKAGE.dvi dvi_gz_size=`calcsize $PACKAGE.dvi.gz` mv $PACKAGE.dvi.gz "$outdir/" ls -l "$outdir/$PACKAGE.dvi.gz" cmd="$SETLANG $TEXI2DVI --pdf $dirargs \"$srcfile\"" printf "\nGenerating pdf... ($cmd)\n" eval "$cmd" pdf_size=`calcsize $PACKAGE.pdf` mv $PACKAGE.pdf "$outdir/" ls -l "$outdir/$PACKAGE.pdf" fi # end tex (dvi + pdf) # if $generate_ascii; then opt="-o $PACKAGE.txt --no-split --no-headers $commonarg" cmd="$SETLANG $MAKEINFO $opt \"$srcfile\"" printf "\nGenerating ascii... ($cmd)\n" 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/" ls -l "$outdir/$PACKAGE.txt" "$outdir/$PACKAGE.txt.gz" fi # if $generate_html; then # Split HTML at level $1. Used for texi2html. html_split() { opt="--split=$1 --node-files $commonarg $htmlarg" cmd="$SETLANG $TEXI2HTML --output $PACKAGE.html $opt \"$srcfile\"" printf "\nGenerating html by $1... ($cmd)\n" eval "$cmd" split_html_dir=$PACKAGE.html ( cd ${split_html_dir} || exit 1 ln -sf ${PACKAGE}.html index.html tar -czf "$abs_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 $commonarg $htmlarg" cmd="$SETLANG $MAKEINFO $opt \"$srcfile\"" printf "\nGenerating monolithic html... ($cmd)\n" 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"` copy_images "$outdir/" $PACKAGE.html mv $PACKAGE.html "$outdir/" ls -l "$outdir/$PACKAGE.html" "$outdir/$PACKAGE.html.gz" # Before Texinfo 5.0, makeinfo did not accept a --split=HOW option, # it just always split by node. So if we're splitting by node anyway, # leave it out. if test "x$split" = xnode; then split_arg= else split_arg=--split=$split fi # opt="--html -o $PACKAGE.html $split_arg $commonarg $htmlarg" cmd="$SETLANG $MAKEINFO $opt \"$srcfile\"" printf "\nGenerating html by $split... ($cmd)\n" eval "$cmd" split_html_dir=$PACKAGE.html copy_images $split_html_dir/ $split_html_dir/*.html ( cd $split_html_dir || exit 1 tar -czf "$abs_outdir/$PACKAGE.html_$split.tar.gz" -- * ) eval \ html_${split}_tgz_size=`calcsize "$outdir/$PACKAGE.html_$split.tar.gz"` rm -rf "$outdir/html_$split/" mv $split_html_dir "$outdir/html_$split/" du -s "$outdir/html_$split/" ls -l "$outdir/$PACKAGE.html_$split.tar.gz" else # use texi2html: opt="--output $PACKAGE.html $commonarg $htmlarg" cmd="$SETLANG $TEXI2HTML $opt \"$srcfile\"" printf "\nGenerating monolithic html with texi2html... ($cmd)\n" 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 fi # end html # printf "\nMaking .tar.gz for sources...\n" d=`dirname $srcfile` ( cd "$d" srcfiles=`ls -d *.texinfo *.texi *.txi *.eps $source_extra 2>/dev/null` || true tar czfh "$abs_outdir/$PACKAGE.texi.tar.gz" $srcfiles ls -l "$abs_outdir/$PACKAGE.texi.tar.gz" ) texi_tgz_size=`calcsize "$outdir/$PACKAGE.texi.tar.gz"` # # Do everything again through docbook. if test -n "$docbook"; then opt="-o - --docbook $commonarg" cmd="$SETLANG $MAKEINFO $opt \"$srcfile\" >${srcdir}/$PACKAGE-db.xml" printf "\nGenerating docbook XML... ($cmd)\n" 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/" split_html_db_dir=html_node_db opt="$commonarg -o $split_html_db_dir" cmd="$DOCBOOK2HTML $opt \"${outdir}/$PACKAGE-db.xml\"" printf "\nGenerating docbook HTML... ($cmd)\n" eval "$cmd" ( cd ${split_html_db_dir} || exit 1 tar -czf "$abs_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\"" printf "\nGenerating docbook ASCII... ($cmd)\n" eval "$cmd" docbook_ascii_size=`calcsize $PACKAGE-db.txt` mv $PACKAGE-db.txt "$outdir/" cmd="$DOCBOOK2PDF \"${outdir}/$PACKAGE-db.xml\"" printf "\nGenerating docbook PDF... ($cmd)\n" eval "$cmd" docbook_pdf_size=`calcsize $PACKAGE-db.pdf` mv $PACKAGE-db.pdf "$outdir/" fi # printf "\nMaking index.html for $PACKAGE...\n" if test -z "$use_texi2html"; then CONDS="/%%IF *HTML_SECTION%%/,/%%ENDIF *HTML_SECTION%%/d;\ /%%IF *HTML_CHAPTER%%/,/%%ENDIF *HTML_CHAPTER%%/d" else # should take account of --split here. 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!%%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_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: ���������������gss-1.0.3/build-aux/useless-if-before-free����������������������������������������������������������0000755�0000000�0000000�00000014114�12415470476�015267� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������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 "if (p != 0)", "if (0 != p)", or with NULL; and with braces. my $VERSION = '2012-01-06 07:23'; # 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-2014 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*\{\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*\)\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: ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gss-1.0.3/build-aux/pmccabe.css���������������������������������������������������������������������0000664�0000000�0000000�00000004515�12012453517�013203� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������body { font-family: Helvetica, sans-serif; } .page_title { font: 18pt Georgia, serif; color: darkred; } .section_title { font: 14pt Georgia, serif; color: darkred; } .report_timestamp { color: darkred; font-weight: bold; } .function_src { text-align: left; background: white; } .resume_table { } .resume_header_entry { color: black; } .resume_number_entry { color: darkred; font-weight: bold; text-align: right; } .ranges_table { border-spacing: 0px; border-bottom: solid 2px black; border-top: solid 2px black; border-left: solid 2px black; border-right: solid 2px black; } .ranges_header_entry { padding: 5px; border-bottom: solid 1px black; font-size: 1em; font-weight: bold; color: darkred; text-align: left; } .ranges_entry { } .ranges_entry_simple { background: #87ff75; } .ranges_entry_moderate { background: #fffc60; } .ranges_entry_high { background: #ff5a5d; } .ranges_entry_untestable { background: #993300 } .function_table { border-spacing: 0px; border-bottom: solid 2px black; border-top: solid 2px black; border-left: solid 2px black; border-right: solid 2px black; } .function_table_caption { font-size: 1.1em; font-weight: bold; color: black; padding: 5px; } .function_table_header { } .function_table_header_entry { padding: 5px; border-bottom: solid 1px black; font-size: 1em; font-weight: bold; color: darkred; text-align: left; } .function_entry { } .function_entry_simple { background: #87ff75; } .function_entry_moderate { background: #fffc60; } .function_entry_high { background: #ff5a5d; } .function_entry_untestable { background: #993300 } .function_entry_name { font-size: 1em; text-align: left; font-weight: bold; text-valign: top; border-top: solid 1px black; padding: 3px; } .function_entry_cyclo { font-size: 1em; text-align: right; text-valign: top; border-top: solid 1px black; padding: 3px; } .function_entry_number { font-size: 1em; text-align: right; text-valign: top; border-top: solid 1px black; padding: 3px; } .function_entry_filename { font-size: 1em; text-align: left; text-valign: top; border-top: solid 1px black; padding: 3px; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gss-1.0.3/build-aux/texinfo.tex���������������������������������������������������������������������0000644�0000000�0000000�00001167036�12415507621�013307� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������% 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{2013-02-01.11} % % Copyright 1985, 1986, 1988, 1990, 1991, 1992, 1993, 1994, 1995, % 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, % 2007, 2008, 2009, 2010, 2011, 2012, 2013 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 Exception is an additional permission under section 7 % of the GNU General Public License, version 3 ("GPLv3"). % % Please try the latest version of texinfo.tex before submitting bug % reports; you can get the latest version from: % http://ftp.gnu.org/gnu/texinfo/ (the Texinfo release area), or % http://ftpmirror.gnu.org/texinfo/ (same, via a mirror), or % http://www.gnu.org/software/texinfo/ (the Texinfo home page) % 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\ptexraggedright=\raggedright \let\ptexrbrace=\} \let\ptexslash=\/ \let\ptexstar=\* \let\ptext=\t \let\ptextop=\top {\catcode`\'=\active \global\let\ptexquoteright'}% active in plain's math mode % 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\putworderror\undefined \gdef\putworderror{error}\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\ampChar = `\& \chardef\colonChar = `\: \chardef\commaChar = `\, \chardef\dashChar = `\- \chardef\dotChar = `\. \chardef\exclamChar= `\! \chardef\hashChar = `\# \chardef\lquoteChar= `\` \chardef\questChar = `\? \chardef\rquoteChar= `\' \chardef\semiChar = `\; \chardef\slashChar = `\/ \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 } % 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\thisisundefined\else % etex gives us more logging \tracingscantokens1 \tracingifs1 \tracinggroups1 \tracingnesting2 \tracingassigns1 \fi \tracingcommands3 % 3 gives us more in etex \errorcontextlines16 }% % @errormsg{MSG}. Do the index-like expansions on MSG, but if things % aren't perfect, it's not the end of the world, being an error message, % after all. % \def\errormsg{\begingroup \indexnofonts \doerrormsg} \def\doerrormsg#1{\errmessage{#1}} % 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} % 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 outside 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. \expandafter\checkenv\csname#1\endcsname \csname E#1\endcsname \endgroup \fi } \newhelp\EMsimple{Press RETURN to continue.} % 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\*{\unskip\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 \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'. Not documented, written for gawk manual. % \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 } % @| 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). This command % is not documented, not supported, and doesn't work. % \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 }% }% } % @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. \wlog{texinfo.tex: doing @include of #1^^J}% \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\centersub\centerH \else \let\centersub\centerV \fi \centersub{\hfil \ignorespaces#1\unskip \hfil}% \let\centersub\relax % don't let the definition persist, just in case } \def\centerH#1{{% \hfil\break \advance\hsize by -\leftskip \advance\hsize by -\rightskip \line{#1}% \break }} % \newcount\centerpenalty \def\centerV#1{% % The idea here is the same as in \startdefun, \cartouche, etc.: if % @center is the first thing after a section heading, we need to wipe % out the negative parskip inserted by \sectionheading, but still % prevent a page break here. \centerpenalty = \lastpenalty \ifnum\centerpenalty>10000 \vskip\parskip \fi \ifnum\centerpenalty>9999 \penalty\centerpenalty \fi \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 = {}% } % @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 being undefined. \ifx\pdfoutput\thisisundefined \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. % % See 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. pdftex 1.30.0 (ca.2005) introduced a primitive to % do this reliably, so we use it. % #1 is a control sequence in which to do the replacements, % which we \xdef. \def\txiescapepdf#1{% \ifx\pdfescapestring\thisisundefined % No primitive available; should we give a warning or log? % Many times it won't matter. \else % The expandable \pdfescapestring primitive escapes parentheses, % backslashes, and other special chars. \xdef#1{\pdfescapestring{#1}}% \fi } \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\pdfimagewidth{#2}\setbox0 = \hbox{\ignorespaces #2}% \def\pdfimageheight{#3}\setbox2 = \hbox{\ignorespaces #3}% % % pdftex (and the PDF format) support .pdf, .png, .jpg (among % others). Let's try in that order, PDF first since if % someone has a scalable image, presumably better to use that than a % bitmap. \let\pdfimgext=\empty \begingroup \openin 1 #1.pdf \ifeof 1 \openin 1 #1.PDF \ifeof 1 \openin 1 #1.png \ifeof 1 \openin 1 #1.jpg \ifeof 1 \openin 1 #1.jpeg \ifeof 1 \openin 1 #1.JPG \ifeof 1 \errhelp = \nopdfimagehelp \errmessage{Could not find image file #1 for pdf}% \else \gdef\pdfimgext{JPG}% \fi \else \gdef\pdfimgext{jpeg}% \fi \else \gdef\pdfimgext{jpg}% \fi \else \gdef\pdfimgext{png}% \fi \else \gdef\pdfimgext{PDF}% \fi \else \gdef\pdfimgext{pdf}% \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 \pdfimagewidth \fi \ifdim \wd2 >0pt height \pdfimageheight \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 \makevalueexpandable \def\pdfdestname{#1}% \txiescapepdf\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. \edef\pdfoutlinedest{#3}% \ifx\pdfoutlinedest\empty \def\pdfoutlinedest{#4}% \else \txiescapepdf\pdfoutlinedest \fi % % Also escape PDF chars in the display string. \edef\pdfoutlinetext{#1}% \txiescapepdf\pdfoutlinetext % \pdfoutline goto name{\pdfmkpgn{\pdfoutlinedest}}#2{\pdfoutlinetext}% } % \def\pdfmakeoutlines{% \begingroup % Read toc silently, to get counts of subentries for \pdfoutline. \def\partentry##1##2##3##4{}% ignore parts in the outlines \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. % % TODO this right, we have to translate 8-bit characters to % their "best" equivalent, based on the @documentencoding. Too % much work for too little return. Just use the ASCII equivalents % we use for the index sort strings. % \indexnofonts \setupdatafile % We can have normal brace characters in the PDF outlines, unlike % Texinfo index files. So set that up. \def\{{\lbracecharliteral}% \def\}{\rbracecharliteral}% \catcode`\\=\active \otherbackslash \input \tocreadfilename \endgroup } {\catcode`[=1 \catcode`]=2 \catcode`{=\other \catcode`}=\other \gdef\lbracecharliteral[{]% \gdef\rbracecharliteral[}]% ] % \def\skipspaces#1{\def\PP{#1}\def\D{|}% \ifx\PP\D\let\nextsp\relax \else\let\nextsp\skipspaces \addtokens{\filename}{\PP}% \advance\filenamelength by 1 \fi \nextsp} \def\getfilename#1{% \filenamelength=0 % If we don't expand the argument now, \skipspaces will get % snagged on things like "@value{foo}". \edef\temp{#1}% \expandafter\skipspaces\temp|\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}} % 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} % \newdimen\textleading \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\thisisundefined \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 \fontprefix#2. % #3 is the font's design size, #4 is a scale factor, #5 is the CMap % encoding (only OT1, OT1IT and OT1TT are allowed, or empty to omit). % Example: % #1 = \textrm % #2 = \rmshape % #3 = 10 % #4 = \mainmagstep % #5 = OT1 % \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 % % (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\thisisundefined \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. (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} \textleading = 13.2pt % line spacing for 11pt CM \textfonts % reset the current fonts \rm } % end of 11pt text font size definitions, \definetextfontsizexi % 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} \divide\parskip by 2 % reduce space between paragraphs \textleading = 12pt % line spacing for 10pt CM \textfonts % reset the current fonts \rm } % end of 10pt text font size definitions, \definetextfontsizex % We provide the user-level command % @fonttextsize 10 % (or 11) to redefine the text font size. pt is assumed. % \def\xiword{11} \def\xword{10} \def\xwordpt{10pt} % \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{27pt}} \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} } \let\markupsetuplqcode \markupsetcodequoteleft \let\markupsetuprqcode \markupsetcodequoteright % \let\markupsetuplqexample \markupsetcodequoteleft \let\markupsetuprqexample \markupsetcodequoteright % \let\markupsetuplqkbd \markupsetcodequoteleft \let\markupsetuprqkbd \markupsetcodequoteright % \let\markupsetuplqsamp \markupsetcodequoteleft \let\markupsetuprqsamp \markupsetcodequoteright % \let\markupsetuplqverb \markupsetcodequoteleft \let\markupsetuprqverb \markupsetcodequoteright % \let\markupsetuplqverbatim \markupsetcodequoteleft \let\markupsetuprqverbatim \markupsetcodequoteright % Allow an option to not use regular directed right quote/apostrophe % (char 0x27), but instead 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 } % Commands to set the quote options. % \parseargdef\codequoteundirected{% \def\temp{#1}% \ifx\temp\onword \expandafter\let\csname SETtxicodequoteundirected\endcsname = t% \else\ifx\temp\offword \expandafter\let\csname SETtxicodequoteundirected\endcsname = \relax \else \errhelp = \EMsimple \errmessage{Unknown @codequoteundirected value `\temp', must be on|off}% \fi\fi } % \parseargdef\codequotebacktick{% \def\temp{#1}% \ifx\temp\onword \expandafter\let\csname SETtxicodequotebacktick\endcsname = t% \else\ifx\temp\offword \expandafter\let\csname SETtxicodequotebacktick\endcsname = \relax \else \errhelp = \EMsimple \errmessage{Unknown @codequotebacktick value `\temp', must be on|off}% \fi\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 % Font commands. % #1 is the font command (\sl or \it), #2 is the text to slant. % If we are in a monospaced environment, however, 1) always use \ttsl, % and 2) do not add an italic correction. \def\dosmartslant#1#2{% \ifusingtt {{\ttsl #2}\let\next=\relax}% {\def\next{{#1#2}\futurelet\next\smartitaliccorrection}}% \next } \def\smartslanted{\dosmartslant\sl} \def\smartitalic{\dosmartslant\it} % Output an italic correction unless \next (presumed to be the following % character) is such as not to need one. \def\smartitaliccorrection{% \ifx\next,% \else\ifx\next-% \else\ifx\next.% \else\ptexslash \fi\fi\fi \aftersmartic } % Unconditional use \ttsl, and no ic. @var is set to this for defuns. \def\ttslanted#1{{\ttsl #1}} % @cite is like \smartslanted except unconditionally use \sl. We never want % ttsl for book titles, do we? \def\cite#1{{\sl #1}\futurelet\next\smartitaliccorrection} \def\aftersmartic{} \def\var#1{% \let\saveaftersmartic = \aftersmartic \def\aftersmartic{\null\let\aftersmartic=\saveaftersmartic}% \smartslanted{#1}% } \let\i=\smartitalic \let\slanted=\smartslanted \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}} % @indicateurl is \samp, that is, with quotes. \let\indicateurl=\samp % @code (and similar) prints in typewriter, but with spaces the same % size as normal in the surrounding text, without hyphenation, etc. % This is a subroutine for that. \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 % reset spacefactor to 1000 } % 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-\normaldash \let_\realunder \fi \codex } } \def\codex #1{\tclose{#1}\endgroup} \def\normaldash{-} \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{}{}{}}% {\_}% } % An additional complication: the above will allow breaks after, e.g., % each of the four underscores in __typeof__. This is bad. % @allowcodebreaks provides a document-level way to turn breaking at - % and _ on and off. % \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', must be true|false}% \fi\fi } % For @command, @env, @file, @option quotes seem unnecessary, % so use \code rather than \samp. \let\command=\code \let\env=\code \let\file=\code \let\option=\code % @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. % (This \urefnobreak definition isn't used now, leaving it for a while % for comparison.) \def\urefnobreak#1{\dourefnobreak #1,,,\finish} \def\dourefnobreak#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} % This \urefbreak definition is the active one. \def\urefbreak{\begingroup \urefcatcodes \dourefbreak} \let\uref=\urefbreak \def\dourefbreak#1{\urefbreakfinish #1,,,\finish} \def\urefbreakfinish#1,#2,#3,#4\finish{% doesn't work in @example \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\ (\urefcode{#1})% DVI: 2nd arg given, show both it and url \fi \else \urefcode{#1}% only url given, so show it \fi \fi \endlink \endgroup} % Allow line breaks around only a few characters (only). \def\urefcatcodes{% \catcode\ampChar=\active \catcode\dotChar=\active \catcode\hashChar=\active \catcode\questChar=\active \catcode\slashChar=\active } { \urefcatcodes % \global\def\urefcode{\begingroup \setupmarkupstyle{code}% \urefcatcodes \let&\urefcodeamp \let.\urefcodedot \let#\urefcodehash \let?\urefcodequest \let/\urefcodeslash \codex } % % By default, they are just regular characters. \global\def&{\normalamp} \global\def.{\normaldot} \global\def#{\normalhash} \global\def?{\normalquest} \global\def/{\normalslash} } % we put a little stretch before and after the breakable chars, to help % line breaking of long url's. The unequal skips make look better in % cmtt at least, especially for dots. \def\urefprestretch{\urefprebreak \hskip0pt plus.13em } \def\urefpoststretch{\urefpostbreak \hskip0pt plus.1em } % \def\urefcodeamp{\urefprestretch \&\urefpoststretch} \def\urefcodedot{\urefprestretch .\urefpoststretch} \def\urefcodehash{\urefprestretch \#\urefpoststretch} \def\urefcodequest{\urefprestretch ?\urefpoststretch} \def\urefcodeslash{\futurelet\next\urefcodeslashfinish} { \catcode`\/=\active \global\def\urefcodeslashfinish{% \urefprestretch \slashChar % Allow line break only after the final / in a sequence of % slashes, to avoid line break between the slashes in http://. \ifx\next/\else \urefpoststretch \fi } } % One more complication: by default we'll break after the special % characters, but some people like to break before the special chars, so % allow that. Also allow no breaking at all, for manual control. % \parseargdef\urefbreakstyle{% \def\txiarg{#1}% \ifx\txiarg\wordnone \def\urefprebreak{\nobreak}\def\urefpostbreak{\nobreak} \else\ifx\txiarg\wordbefore \def\urefprebreak{\allowbreak}\def\urefpostbreak{\nobreak} \else\ifx\txiarg\wordafter \def\urefprebreak{\nobreak}\def\urefpostbreak{\allowbreak} \else \errhelp = \EMsimple \errmessage{Unknown @urefbreakstyle setting `\txiarg'}% \fi\fi\fi } \def\wordafter{after} \def\wordbefore{before} \def\wordnone{none} \urefbreakstyle after % @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 % @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 setting `\txiarg'}% \fi\fi\fi } \def\worddistinct{distinct} \def\wordexample{example} \def\wordcode{code} % Default is `distinct'. \kbdinputstyle distinct % @kbd is like @code, except that if the argument is just one @key command, % then @kbd has no effect. \def\kbd#1{{\def\look{#1}\expandafter\kbdsub\look??\par}} \def\xkey{\key} \def\kbdsub#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 } % 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} % @clicksequence{File @click{} Open ...} \def\clicksequence#1{\begingroup #1\endgroup} % @clickstyle @arrow (by default) \parseargdef\clickstyle{\def\click{#1}} \def\click{\arrow} % 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 \null % reset \spacefactor=1000 } % @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 \null % reset \spacefactor=1000 } % @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 math (or tt) \. % FYI, plain.tex uses \\ as a temporary control sequence (for no % particular reason), but this is not advertised and we don't care. % % 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 } } % ctrl is no longer a Texinfo command, but leave this definition for fun. \def\ctrl #1{{\tt \rawbackslash \hat}#1} % @inlinefmt{FMTNAME,PROCESSED-TEXT} and @inlineraw{FMTNAME,RAW-TEXT}. % Ignore unless FMTNAME == tex; then it is like @iftex and @tex, % except specified as a normal braced arg, so no newlines to worry about. % \def\outfmtnametex{tex} % \long\def\inlinefmt#1{\doinlinefmt #1,\finish} \long\def\doinlinefmt#1,#2,\finish{% \def\inlinefmtname{#1}% \ifx\inlinefmtname\outfmtnametex \ignorespaces #2\fi } % For raw, must switch into @tex before parsing the argument, to avoid % setting catcodes prematurely. Doing it this way means that, for % example, @inlineraw{html, foo{bar} gets a parse error instead of being % ignored. But this isn't important because if people want a literal % *right* brace they would have to use a command anyway, so they may as % well use a command to get a left brace too. We could re-use the % delimiter character idea from \verb, but it seems like overkill. % \long\def\inlineraw{\tex \doinlineraw} \long\def\doinlineraw#1{\doinlinerawtwo #1,\finish} \def\doinlinerawtwo#1,#2,\finish{% \def\inlinerawname{#1}% \ifx\inlinerawname\outfmtnametex \ignorespaces #2\fi \endgroup % close group opened by \tex. } \message{glyphs,} % and logos. % @@ prints an @, as does @atchar{}. \def\@{\char64 } \let\atchar=\@ % @{ @} @lbracechar{} @rbracechar{} all generate brace characters. % Unless we're in typewriter, use \ecfont because the CM text fonts do % not have braces, and we don't want to switch into math. \def\mylbrace{{\ifmonospace\else\ecfont\fi \char123}} \def\myrbrace{{\ifmonospace\else\ecfont\fi \char125}} \let\{=\mylbrace \let\lbracechar=\{ \let\}=\myrbrace \let\rbracechar=\} \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\, = \ptexc \let\dotaccent = \ptexdot \def\ringaccent#1{{\accent23 #1}} \let\tieaccent = \ptext \let\ubaraccent = \ptexb \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{% \ifx\textnominalsize\xwordpt % for 10pt running text, \lllsize (8pt) is too small for the A in LaTeX. % Revert to plain's \scriptsize, which is 7pt. \count255=\the\fam $\fam\count255 \scriptstyle A$% \else % For 11pt, we can use our lllsize. \selectfonts\lllsize A% \fi }% \vss }}% \kern-.15em \TeX } % 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 } % @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 \putworderror\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}% \ifmonospace % typewriter: \font\thisecfont = ectt\ecsize \space at \nominalsize \else \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 \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\thisisundefined \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 } % Settings used for typesetting titles: no hyphenation, no indentation, % don't worry much about spacing, ragged right. This should be used % inside a \vbox, and fonts need to be set appropriately first. Because % it is always used for titles, nothing else, we call \rmisbold. \par % should be specified before the end of the \vbox, since a vbox is a group. % \def\raggedtitlesettings{% \rmisbold \hyphenpenalty=10000 \parindent=0pt \tolerance=5000 \ptexraggedright } % Macros to be used within @titlepage: \let\subtitlerm=\tenrm \def\subtitlefont{\subtitlerm \normalbaselineskip = 13pt \normalbaselines} \parseargdef\title{% \checkenv\titlepage \vbox{\titlefonts \raggedtitlesettings #1\par}% % 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{% non-global headings elimination \evenheadline={\hfil}\evenfootline={\hfil}% \oddheadline={\hfil}\oddfootline={\hfil}% } \def\HEADINGSoff{{\globaldefs=1 \headingsoff}} % global setting \HEADINGSoff % it's the default % 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\thisisundefined \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\relax \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-\normaldash \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 executes 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}} % @ifcommandisdefined CMD ... @end executes the `...' if CMD (written % without the @) is in fact defined. We can only feasibly check at the % TeX level, so something like `mathcode' is going to considered % defined even though it is not a Texinfo command. % \makecond{ifcommanddefined} \def\ifcommanddefined{\parsearg{\doifcmddefined{\let\next=\ifcmddefinedfail}}} % \def\doifcmddefined#1#2{{% \makevalueexpandable \let\next=\empty \expandafter\ifx\csname #2\endcsname\relax #1% If not defined, \let\next as above. \fi \expandafter }\next } \def\ifcmddefinedfail{\doignore{ifcommanddefined}} % @ifcommandnotdefined CMD ... handled similar to @ifclear above. \makecond{ifcommandnotdefined} \def\ifcommandnotdefined{% \parsearg{\doifcmddefined{\else \let\next=\ifcmdnotdefinedfail}}} \def\ifcmdnotdefinedfail{\doignore{ifcommandnotdefined}} % Set the `txicommandconditionals' variable, so documents have a way to % test if the @ifcommand...defined conditionals are available. \set txicommandconditionals % @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 unexpandable (because we define \tt as a dummy) % definitions when @{ or @} appear in index entry text. Also, more % complicated, when \tex is in effect and \{ is a \delimiter again. % We can't use \lbracecmd and \rbracecmd because texindex assumes % braces and backslashes are used only as delimiters. Perhaps we % should define @lbrace and @rbrace commands a la @comma. \def\{{{\tt\char123}}% \def\}{{\tt\char125}}% % % 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\_% \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\arrow \definedummyword\bullet \definedummyword\comma \definedummyword\copyright \definedummyword\registeredsymbol \definedummyword\dots \definedummyword\enddots \definedummyword\entrybreak \definedummyword\equiv \definedummyword\error \definedummyword\euro \definedummyword\expansion \definedummyword\geq \definedummyword\guillemetleft \definedummyword\guillemetright \definedummyword\guilsinglleft \definedummyword\guilsinglright \definedummyword\lbracechar \definedummyword\leq \definedummyword\minus \definedummyword\ogonek \definedummyword\pounds \definedummyword\point \definedummyword\print \definedummyword\quotedblbase \definedummyword\quotedblleft \definedummyword\quotedblright \definedummyword\quoteleft \definedummyword\quoteright \definedummyword\quotesinglbase \definedummyword\rbracechar \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\sansserif \definedummyword\sc \definedummyword\slanted \definedummyword\t % % Commands that take arguments. \definedummyword\abbr \definedummyword\acronym \definedummyword\anchor \definedummyword\cite \definedummyword\code \definedummyword\command \definedummyword\dfn \definedummyword\dmn \definedummyword\email \definedummyword\emph \definedummyword\env \definedummyword\file \definedummyword\image \definedummyword\indicateurl \definedummyword\inforef \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}% % All control words become @asis by default; overrides below. \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\@{@}% \def\_{\normalunderscore}% \def\-{}% @- shouldn't affect sorting % % Unfortunately, texindex is not prepared to handle braces in the % content at all. So for index sorting, we map @{ and @} to strings % starting with |, since that ASCII character is between ASCII { and }. \def\{{|a}% \def\lbracechar{|a}% % \def\}{|b}% \def\rbracechar{|b}% % % 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\arrow{->}% \def\bullet{bullet}% \def\comma{,}% \def\copyright{copyright}% \def\dots{...}% \def\enddots{...}% \def\equiv{==}% \def\error{error}% \def\euro{euro}% \def\expansion{==>}% \def\geq{>=}% \def\guillemetleft{<<}% \def\guillemetright{>>}% \def\guilsinglleft{<}% \def\guilsinglright{>}% \def\leq{<=}% \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}% % \expandafter\ifx\csname SETtxiindexlquoteignore\endcsname\relax \else \indexlquoteignore \fi % % 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 } % Undocumented (for FSFS 2nd ed.): @set txiindexlquoteignore makes us % ignore left quotes in the sort term. {\catcode`\`=\active \gdef\indexlquoteignore{\let`=\empty}} \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 % % When reading the text of entry, convert explicit line breaks % from @* into spaces. The user might give these in long section % titles, for instance. \def\*{\unskip\space\ignorespaces}% \def\entrybreak{\hfil\break}% % % Swallow the left brace of the text (first parameter): \afterassignment\doentry \let\temp = } \def\entrybreak{\unskip\space\ignorespaces}% \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. % Let's start with @part. \outer\parseargdef\part{\partzzz{#1}} \def\partzzz#1{% \chapoddpage \null \vskip.3\vsize % move it down on the page a bit \begingroup \noindent \titlefonts\rmisbold #1\par % the text \let\lastnode=\empty % no node to associate with \writetocentry{part}{#1}{}% but put it in the toc \headingsoff % no headline or footline on the part page \chapoddpage \endgroup } % \unnumberedno is an oxymoron. 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 achieve this, remember the "biggest" unnum. sec. we are currently in: \chardef\unnlevel = \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 < \unnlevel \chardef\unnlevel = \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 > \unnlevel \def\headtype{U}% \else \chardef\unnlevel = 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 } % normally unnmhead0 calls unnumberedzzz: \outer\parseargdef\unnumbered{\unnmhead0{#1}} \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}% } % normally calls appendixsectionzzz: \outer\parseargdef\appendixsection{\apphead1{#1}} \def\appendixsectionzzz#1{% \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1 \sectionheading{#1}{sec}{Yappendix}{\appendixletter.\the\secno}% } \let\appendixsec\appendixsection % normally calls unnumberedseczzz: \outer\parseargdef\unnumberedsec{\unnmhead1{#1}} \def\unnumberedseczzz#1{% \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1 \sectionheading{#1}{sec}{Ynothing}{\the\unnumberedno.\the\secno}% } % Subsections. % % normally calls numberedsubseczzz: \outer\parseargdef\numberedsubsec{\numhead2{#1}} \def\numberedsubseczzz#1{% \global\subsubsecno=0 \global\advance\subsecno by 1 \sectionheading{#1}{subsec}{Ynumbered}{\the\chapno.\the\secno.\the\subsecno}% } % normally calls appendixsubseczzz: \outer\parseargdef\appendixsubsec{\apphead2{#1}} \def\appendixsubseczzz#1{% \global\subsubsecno=0 \global\advance\subsecno by 1 \sectionheading{#1}{subsec}{Yappendix}% {\appendixletter.\the\secno.\the\subsecno}% } % normally calls unnumberedsubseczzz: \outer\parseargdef\unnumberedsubsec{\unnmhead2{#1}} \def\unnumberedsubseczzz#1{% \global\subsubsecno=0 \global\advance\subsecno by 1 \sectionheading{#1}{subsec}{Ynothing}% {\the\unnumberedno.\the\secno.\the\subsecno}% } % Subsubsections. % % normally numberedsubsubseczzz: \outer\parseargdef\numberedsubsubsec{\numhead3{#1}} \def\numberedsubsubseczzz#1{% \global\advance\subsubsecno by 1 \sectionheading{#1}{subsubsec}{Ynumbered}% {\the\chapno.\the\secno.\the\subsecno.\the\subsubsecno}% } % normally appendixsubsubseczzz: \outer\parseargdef\appendixsubsubsec{\apphead3{#1}} \def\appendixsubsubseczzz#1{% \global\advance\subsubsecno by 1 \sectionheading{#1}{subsubsec}{Yappendix}% {\appendixletter.\the\secno.\the\subsecno.\the\subsubsecno}% } % normally unnumberedsubsubseczzz: \outer\parseargdef\unnumberedsubsubsec{\unnmhead3{#1}} \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 \def\majorheading{% {\advance\chapheadingskip by 10pt \chapbreak }% \parsearg\chapheadingzzz } \def\chapheading{\chapbreak \parsearg\chapheadingzzz} \def\chapheadingzzz#1{% \vbox{\chapfonts \raggedtitlesettings #1\par}% \nobreak\bigskip \nobreak \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} % Parameter controlling skip before chapter headings (if needed) \newskip\chapheadingskip % Define plain chapter starts, and page on/off switching for it. \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 \headingsoff \null \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{\raggedtitlesettings \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 \vbox{\chapfonts \raggedtitlesettings #1\par}% \nobreak\bigskip\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 \vbox{\chapfonts \raggedtitlesettings \hfill #1\hfill}% \nobreak\bigskip \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{% {% \checkenv{}% should not be in an environment. % % 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.) However, when a paragraph is not started next % (\startdefun, \cartouche, \center, etc.), this needs to be wiped out % or the negative glue will cause weirdly wrong output, typically % obscuring the section heading with something else. \vskip-\parskip % % This is so the last item on the main vertical list is a known % \penalty > 10000, so \startdefun, etc., can recognize the situation % and do the needful. \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\partentry = \shortpartentry \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, ... % Parts, in the main contents. Replace the part number, which doesn't % exist, with an empty box. Let's hope all the numbers have the same width. % Also ignore the page number, which is conventionally not printed. \def\numeralbox{\setbox0=\hbox{8}\hbox to \wd0{\hfil}} \def\partentry#1#2#3#4{\dochapentry{\numeralbox\labelspace#1}{}} % % Parts, in the short toc. \def\shortpartentry#1#2#3#4{% \penalty-300 \vskip.5\baselineskip plus.15\baselineskip minus.1\baselineskip \shortchapentry{{\bf #1}}{\numeralbox}{}{}% } % 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 @ 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=`\\ % % ' is active in math mode (mathcode"8000). So reset it, and all our % other math active characters (just in case), to plain's definitions. \mathactive % \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% % % If this cartouche directly follows a sectioning command, we need the % \parskip glue (backspaced over by default) or the cartouche can % collide with the section heading. \ifnum\lastpenalty>10000 \vskip\parskip \penalty\lastpenalty \fi % \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 in one command. #1 is the env name, #2 the definition. \def\makedispenvdef#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 environment synonyms (#1 and #2) for an environment. \def\maketwodispenvdef#1#2#3{% \makedispenvdef{#1}{#3}% \makedispenvdef{#2}{#3}% } % % @lisp: indented, narrowed, typewriter font; % @example: same as @lisp. % % @smallexample and @smalllisp: use smaller fonts. % Originally contributed by Pavel@xerox. % \maketwodispenvdef{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. % \makedispenvdef{display}{% \nonfillstart \gobble } % @format/@smallformat: same as @display except don't narrow margins. % \makedispenvdef{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\relax \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. % \makedispenvdef{quotation}{\quotationstart} % \def\quotationstart{% \indentedblockstart % same as \indentedblock, but increase right margin too. \ifx\nonarrowing\relax \advance\rightskip by \lispnarrowing \fi \parsearg\quotationlabel } % We have retained a nonzero parskip for the environment, since we're % doing normal filling. % \def\Equotation{% \par \ifx\quotationauthor\thisisundefined\else % indent a bit. \leftline{\kern 2\leftskip \sl ---\quotationauthor}% \fi {\parskip=0pt \afterenvbreak}% } \def\Esmallquotation{\Equotation} % 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 } % @indentedblock is like @quotation, but indents only on the left and % has no optional argument. % \makedispenvdef{indentedblock}{\indentedblockstart} % \def\indentedblockstart{% {\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 \exdentamount = \lispnarrowing \else \let\nonarrowing = \relax \fi } % Keep a nonzero parskip for the environment, since we're doing normal filling. % \def\Eindentedblock{% \par {\parskip=0pt \afterenvbreak}% } \def\Esmallindentedblock{\Eindentedblock} % 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 % % We typeset each line of the verbatim in an \hbox, so we can handle % tabs. The \global is in case the verbatim line starts with an accent, % or some other command that starts with a begin-group. Otherwise, the % entire \verbbox would disappear at the corresponding end-group, before % it is typeset. Meanwhile, we can't have nested verbatim commands % (can we?), so the \global won't be overwriting itself. \newbox\verbbox \def\starttabbox{\global\setbox\verbbox=\hbox\bgroup} % \begingroup \catcode`\^^I=\active \gdef\tabexpand{% \catcode`\^^I=\active \def^^I{\leavevmode\egroup \dimen\verbbox=\wd\verbbox % the width so far, or since the previous tab \divide\dimen\verbbox by\tabw \multiply\dimen\verbbox by\tabw % compute previous multiple of \tabw \advance\dimen\verbbox by\tabw % advance to next multiple of \tabw \wd\verbbox=\dimen\verbbox \box\verbbox \starttabbox }% } \endgroup % start the verbatim environment. \def\setupverbatim{% \let\nonarrowing = t% \nonfillstart \tt % easiest (and conventionally used) font for verbatim % The \leavevmode here is for blank lines. Otherwise, we would % never \starttabox and the \egroup would end verbatim mode. \def\par{\leavevmode\egroup\box\verbbox\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. \wlog{texinfo.tex: doing @verbatiminclude of #1^^J}% \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 further 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\relax \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 \doingtypefnfalse % distinguish typed functions from all else \parseargusing\activeparens{\printdefunline#3}% }% \def#2{\dodefunx#1}% \def#3% } \newif\ifdoingtypefn % doing typed function? \newif\ifrettypeownline % typeset return type on its own line? % @deftypefnnewline on|off says whether the return type of typed functions % are printed on their own line. This affects @deftypefn, @deftypefun, % @deftypeop, and @deftypemethod. % \parseargdef\deftypefnnewline{% \def\temp{#1}% \ifx\temp\onword \expandafter\let\csname SETtxideftypefnnl\endcsname = \empty \else\ifx\temp\offword \expandafter\let\csname SETtxideftypefnnl\endcsname = \relax \else \errhelp = \EMsimple \errmessage{Unknown @txideftypefnnl value `\temp', must be on|off}% \fi\fi } % 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}% \doingtypefntrue \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 {} } % Types: % @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{% \par % Get the values of \leftskip and \rightskip as they were outside the @def... \advance\leftskip by -\defbodyindent % % Determine if we are typesetting the return type of a typed function % on a line by itself. \rettypeownlinefalse \ifdoingtypefn % doing a typed function specifically? % then check user option for putting return type on its own line: \expandafter\ifx\csname SETtxideftypefnnl\endcsname\relax \else \rettypeownlinetrue \fi \fi % % How we'll format the category 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. We'll always have at % least two. \tempnum = 2 % % 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 % % If doing a return type on its own line, we'll have another line. \ifrettypeownline \advance\tempnum by 1 \def\maybeshapeline{0in \hsize}% \else \def\maybeshapeline{}% \fi % % The continuations: \dimen2=\hsize \advance\dimen2 by -\defargsindent % % The final paragraph shape: \parshape \tempnum 0in \dimen0 \maybeshapeline \defargsindent \dimen2 % % Put the category name at 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}% text of the return type \ifx\temp\empty\else \tclose{\temp}% typeset the return type \ifrettypeownline % put return type on its own line; prohibit line break following: \hfil\vadjust{\nobreak}\break \else \space % type on same line, so just followed by a space \fi \fi % no return type #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. We used to recommend @var for that, so % leave the code in, but it's strange for @var to lead to typewriter. % Nowadays we recommend @code, since the difference between a ttsl hyphen % and a tt hyphen is pretty tiny. @code also disables ?` !`. \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\ }} \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\thisisundefined \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 for \example: \spaceisspace % % The \empty here causes a following catcode 5 newline to be eaten as % part of reading whitespace after a control sequence. It does not % eat a catcode 13 newline. There's no good way to handle the two % cases (untried: maybe e-TeX's \everyeof could help, though plain TeX % would then have different behavior). See the Macro Details node in % the manual for the workaround we recommend for macros and % line-oriented commands. % \scantokens{#1\empty}% \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 \ % to recognize macro arguments; this is the job of \mbodybackslash. % % 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{% used as subroutine \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{% used for copying and captions, not macros. \scanctxt \catcode`\\=\other \catcode`\^^M=\other } \def\macrobodyctxt{% used for @macro definitions \scanctxt \catcode`\{=\other \catcode`\}=\other \catcode`\^^M=\other \usembodybackslash } \def\macroargctxt{% used when scanning invocations \scanctxt \catcode`\\=0 } % why catcode 0 for \ in the above? To recognize \\ \{ \} as "escapes" % for the single characters \ { }. Thus, we end up with the "commands" % that would be written @\ @{ @} in a Texinfo document. % % We already have @{ and @}. For @\, we define it here, and only for % this purpose, to produce a typewriter backslash (so, the @\ that we % define for @math can't be used with @macro calls): % \def\\{\normalbackslash}% % % We would like to do this for \, too, since that is what makeinfo does. % But it is not possible, because Texinfo already has a command @, for a % cedilla accent. Documents must use @comma{} instead. % % \anythingelse will almost certainly be an error of some kind. % \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\margbackslash#1{\char`\#1 } \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\relax \else \expandafter\parsemargdef \argl;% \if\paramno>256\relax \ifx\eTeXversion\thisisundefined \errhelp = \EMsimple \errmessage{You need eTeX to compile a file with macros with more than 256 arguments} \fi \fi \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}} % For macro processing make @ a letter so that we can make Texinfo private macro names. \edef\texiatcatcode{\the\catcode`\@} \catcode `@=11\relax % 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 some hook where the argument si to be expanded. If % there are less than 10 arguments that hook is to be replaced by ##N where N % is the position in that list, that is to say the macro arguments are to be % defined `a la TeX in the macro body. % % 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. % % If there are 10 or more arguments, a different technique is used, where the % hook remains in the body, and when macro is to be expanded the body is % processed again to replace the arguments. % % In that case, the hook is \the\toks N-1, and we simply set \toks N-1 to the % argument N value and then \edef the body (nothing else will expand because of % the catcode regime underwhich the body was input). % % If you compile with TeX (not eTeX), and you have macros with 10 or more % arguments, you need that no macro has more than 256 arguments, otherwise an % error is produced. \def\parsemargdef#1;{% \paramno=0\def\paramlist{}% \let\hash\relax \let\xeatspaces\relax \parsemargdefxxx#1,;,% % In case that there are 10 or more arguments we parse again the arguments % list to set new definitions for the \macarg.BLAH macros corresponding to % each BLAH argument. It was anyhow needed to parse already once this list % in order to count the arguments, and as macros with at most 9 arguments % are by far more frequent than macro with 10 or more arguments, defining % twice the \macarg.BLAH macros does not cost too much processing power. \ifnum\paramno<10\relax\else \paramno0\relax \parsemmanyargdef@@#1,;,% 10 or more arguments \fi } \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} \def\parsemmanyargdef@@#1,{% \if#1;\let\next=\relax \else \let\next=\parsemmanyargdef@@ \edef\tempb{\eatspaces{#1}}% \expandafter\def\expandafter\tempa \expandafter{\csname macarg.\tempb\endcsname}% % Note that we need some extra \noexpand\noexpand, this is because we % don't want \the to be expanded in the \parsermacbody as it uses an % \xdef . \expandafter\edef\tempa {\noexpand\noexpand\noexpand\the\toks\the\paramno}% \advance\paramno by 1\relax \fi\next} % These two commands read recursive and nonrecursive macro bodies. % (They're different since rec and nonrec macros end differently.) % \catcode `\@\texiatcatcode \long\def\parsemacbody#1@end macro% {\xdef\temp{\eatcr{#1}}\endgroup\defmacro}% \long\def\parsermacbody#1@end rmacro% {\xdef\temp{\eatcr{#1}}\endgroup\defmacro}% \catcode `\@=11\relax \let\endargs@\relax \let\nil@\relax \def\nilm@{\nil@}% \long\def\nillm@{\nil@}% % This macro is expanded during the Texinfo macro expansion, not during its % definition. It gets all the arguments values and assigns them to macros % macarg.ARGNAME % % #1 is the macro name % #2 is the list of argument names % #3 is the list of argument values \def\getargvals@#1#2#3{% \def\macargdeflist@{}% \def\saveparamlist@{#2}% Need to keep a copy for parameter expansion. \def\paramlist{#2,\nil@}% \def\macroname{#1}% \begingroup \macroargctxt \def\argvaluelist{#3,\nil@}% \def\@tempa{#3}% \ifx\@tempa\empty \setemptyargvalues@ \else \getargvals@@ \fi } % \def\getargvals@@{% \ifx\paramlist\nilm@ % Some sanity check needed here that \argvaluelist is also empty. \ifx\argvaluelist\nillm@ \else \errhelp = \EMsimple \errmessage{Too many arguments in macro `\macroname'!}% \fi \let\next\macargexpandinbody@ \else \ifx\argvaluelist\nillm@ % No more arguments values passed to macro. Set remaining named-arg % macros to empty. \let\next\setemptyargvalues@ \else % pop current arg name into \@tempb \def\@tempa##1{\pop@{\@tempb}{\paramlist}##1\endargs@}% \expandafter\@tempa\expandafter{\paramlist}% % pop current argument value into \@tempc \def\@tempa##1{\longpop@{\@tempc}{\argvaluelist}##1\endargs@}% \expandafter\@tempa\expandafter{\argvaluelist}% % Here \@tempb is the current arg name and \@tempc is the current arg value. % First place the new argument macro definition into \@tempd \expandafter\macname\expandafter{\@tempc}% \expandafter\let\csname macarg.\@tempb\endcsname\relax \expandafter\def\expandafter\@tempe\expandafter{% \csname macarg.\@tempb\endcsname}% \edef\@tempd{\long\def\@tempe{\the\macname}}% \push@\@tempd\macargdeflist@ \let\next\getargvals@@ \fi \fi \next } \def\push@#1#2{% \expandafter\expandafter\expandafter\def \expandafter\expandafter\expandafter#2% \expandafter\expandafter\expandafter{% \expandafter#1#2}% } % Replace arguments by their values in the macro body, and place the result % in macro \@tempa \def\macvalstoargs@{% % To do this we use the property that token registers that are \the'ed % within an \edef expand only once. So we are going to place all argument % values into respective token registers. % % First we save the token context, and initialize argument numbering. \begingroup \paramno0\relax % Then, for each argument number #N, we place the corresponding argument % value into a new token list register \toks#N \expandafter\putargsintokens@\saveparamlist@,;,% % Then, we expand the body so that argument are replaced by their % values. The trick for values not to be expanded themselves is that they % are within tokens and that tokens expand only once in an \edef . \edef\@tempc{\csname mac.\macroname .body\endcsname}% % Now we restore the token stack pointer to free the token list registers % which we have used, but we make sure that expanded body is saved after % group. \expandafter \endgroup \expandafter\def\expandafter\@tempa\expandafter{\@tempc}% } \def\macargexpandinbody@{% %% Define the named-macro outside of this group and then close this group. \expandafter \endgroup \macargdeflist@ % First the replace in body the macro arguments by their values, the result % is in \@tempa . \macvalstoargs@ % Then we point at the \norecurse or \gobble (for recursive) macro value % with \@tempb . \expandafter\let\expandafter\@tempb\csname mac.\macroname .recurse\endcsname % Depending on whether it is recursive or not, we need some tailing % \egroup . \ifx\@tempb\gobble \let\@tempc\relax \else \let\@tempc\egroup \fi % And now we do the real job: \edef\@tempd{\noexpand\@tempb{\macroname}\noexpand\scanmacro{\@tempa}\@tempc}% \@tempd } \def\putargsintokens@#1,{% \if#1;\let\next\relax \else \let\next\putargsintokens@ % First we allocate the new token list register, and give it a temporary % alias \@tempb . \toksdef\@tempb\the\paramno % Then we place the argument value into that token list register. \expandafter\let\expandafter\@tempa\csname macarg.#1\endcsname \expandafter\@tempb\expandafter{\@tempa}% \advance\paramno by 1\relax \fi \next } % Save the token stack pointer into macro #1 \def\texisavetoksstackpoint#1{\edef#1{\the\@cclvi}} % Restore the token stack pointer from number in macro #1 \def\texirestoretoksstackpoint#1{\expandafter\mathchardef\expandafter\@cclvi#1\relax} % newtoks that can be used non \outer . \def\texinonouternewtoks{\alloc@ 5\toks \toksdef \@cclvi} % Tailing missing arguments are set to empty \def\setemptyargvalues@{% \ifx\paramlist\nilm@ \let\next\macargexpandinbody@ \else \expandafter\setemptyargvaluesparser@\paramlist\endargs@ \let\next\setemptyargvalues@ \fi \next } \def\setemptyargvaluesparser@#1,#2\endargs@{% \expandafter\def\expandafter\@tempa\expandafter{% \expandafter\def\csname macarg.#1\endcsname{}}% \push@\@tempa\macargdeflist@ \def\paramlist{#2}% } % #1 is the element target macro % #2 is the list macro % #3,#4\endargs@ is the list value \def\pop@#1#2#3,#4\endargs@{% \def#1{#3}% \def#2{#4}% } \long\def\longpop@#1#2#3,#4\endargs@{% \long\def#1{#3}% \long\def#2{#4}% } % This defines a Texinfo @macro. There are eight cases: recursive and % nonrecursive macros of zero, one, up to nine, 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 \ifnum\paramno<10\relax % at most 9 \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}}% \else % 10 or more \expandafter\xdef\csname\the\macname\endcsname{% \noexpand\getargvals@{\the\macname}{\argl}% }% \global\expandafter\let\csname mac.\the\macname .body\endcsname\temp \global\expandafter\let\csname mac.\the\macname .recurse\endcsname\gobble \fi \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 % at most 9 \ifnum\paramno<10\relax \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}% \else % 10 or more: \expandafter\xdef\csname\the\macname\endcsname{% \noexpand\getargvals@{\the\macname}{\argl}% }% \global\expandafter\let\csname mac.\the\macname .body\endcsname\temp \global\expandafter\let\csname mac.\the\macname .recurse\endcsname\norecurse \fi \fi \fi} \catcode `\@\texiatcatcode\relax \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. 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, at \shipout }% \fi } % @xrefautosectiontitle on|off says whether @section(ing) names are used % automatically in xrefs, if the third arg is not explicitly specified. % This was provided as a "secret" @set xref-automatic-section-title % variable, now it's official. % \parseargdef\xrefautomaticsectiontitle{% \def\temp{#1}% \ifx\temp\onword \expandafter\let\csname SETxref-automatic-section-title\endcsname = \empty \else\ifx\temp\offword \expandafter\let\csname SETxref-automatic-section-title\endcsname = \relax \else \errhelp = \EMsimple \errmessage{Unknown @xrefautomaticsectiontitle value `\temp', must be on|off}% \fi\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,,,,,,,]} % \newbox\toprefbox \newbox\printedrefnamebox \newbox\infofilenamebox \newbox\printedmanualbox % \def\xrefX[#1,#2,#3,#4,#5,#6]{\begingroup \unsepspaces % % Get args without leading/trailing spaces. \def\printedrefname{\ignorespaces #3}% \setbox\printedrefnamebox = \hbox{\printedrefname\unskip}% % \def\infofilename{\ignorespaces #4}% \setbox\infofilenamebox = \hbox{\infofilename\unskip}% % \def\printedmanual{\ignorespaces #5}% \setbox\printedmanualbox = \hbox{\printedmanual\unskip}% % % If the printed reference name (arg #3) was not explicitly given in % the @xref, figure out what we want to use. \ifdim \wd\printedrefnamebox = 0pt % No printed node name was explicitly given. \expandafter\ifx\csname SETxref-automatic-section-title\endcsname \relax % Not auto section-title: use node name inside the square brackets. \def\printedrefname{\ignorespaces #1}% \else % Auto section-title: use chapter/section title inside % the square brackets if we have it. \ifdim \wd\printedmanualbox > 0pt % It is in another manual, so we don't have it; use node name. \def\printedrefname{\ignorespaces #1}% \else \ifhavexrefs % We (should) 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 \makevalueexpandable % This expands tokens, so do it after making catcode changes, so _ % etc. don't get their TeX definitions. This ignores all spaces in % #4, including (wrongly) those in the middle of the filename. \getfilename{#4}% % % This (wrongly) does not take account of leading or trailing % spaces in #1, which should be ignored. \edef\pdfxrefdest{#1}% \ifx\pdfxrefdest\empty \def\pdfxrefdest{Top}% no empty targets \else \txiescapepdf\pdfxrefdest % escape PDF special chars \fi % \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\wd\printedrefnamebox = 0pt \refx{#1-snt}{}% \else \printedrefname \fi % % If the user also gave the printed manual name (fifth arg), append % "in MANUALNAME". \ifdim \wd\printedmanualbox > 0pt \space \putwordin{} \cite{\printedmanual}% \fi \else % node/anchor (non-float) references. % % If we use \unhbox 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 \wd\printedmanualbox > 0pt % Cross-manual reference with a printed manual name. % \crossmanualxref{\cite{\printedmanual\unskip}}% % \else\ifdim \wd\infofilenamebox > 0pt % Cross-manual reference with only an info filename (arg 4), no % printed manual name (arg 5). This is essentially the same as % the case above; we output the filename, since we have nothing else. % \crossmanualxref{\code{\infofilename\unskip}}% % \else % Reference within this manual. % % _ (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 the macro below 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 \fi \endlink \endgroup} % Output a cross-manual xref to #1. Used just above (twice). % % Only include the text "Section ``foo'' in" if the foo is neither % missing or Top. Thus, @xref{,,,foo,The Foo Manual} outputs simply % "see The Foo Manual", the idea being to refer to the whole manual. % % But, this being TeX, we can't easily compare our node name against the % string "Top" while ignoring the possible spaces before and after in % the input. By adding the arbitrary 7sp below, we make it much less % likely that a real node name would have the same width as "Top" (e.g., % in a monospaced font). Hopefully it will never happen in practice. % % For the same basic reason, we retypeset the "Top" at every % reference, since the current font is indeterminate. % \def\crossmanualxref#1{% \setbox\toprefbox = \hbox{Top\kern7sp}% \setbox2 = \hbox{\ignorespaces \printedrefname \unskip \kern7sp}% \ifdim \wd2 > 7sp % nonempty? \ifdim \wd2 = \wd\toprefbox \else % same as Top? \putwordSection{} ``\printedrefname'' \putwordin{}\space \fi \fi #1% } % 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 {\toks0 = {#1}% avoid expansion of possibly-complex value \message{\linenumber Undefined cross reference `\the\toks0'.}}% \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 % % Invoke rest of plain TeX footnote routine. \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\thisisundefined \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 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 \else \ifx\centersub\centerV % for @center @image, we need a vbox so we can have our vertical space \imagevmodetrue \vbox\bgroup % vbox has better behavior than vtop herev \fi\fi % \ifimagevmode \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. % However, if we're at the top level, we don't want the % normal paragraph indentation. % On the other hand, if we are in the case of @center @image, we don't % want to start a paragraph, which will create a hsize-width box and % eradicate the centering. \ifx\centersub\centerV\else \noindent \fi % % 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 % space after a standalone image \fi \ifx\centersub\centerV \egroup \fi \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{\tie} \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{\guillemetright} \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{\tie} \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{\'{\dotless{i}}} \gdef^^ee{\^{\dotless{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 very finicky about underfull hboxes, either. \hbadness = 6666 % 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.} \def^^L{\par} % remove \outer, so ^L can appear in an @comment % 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 \def\normaldoublequote{"} \catcode`\$=\other \def\normaldollar{$}%$ font-lock fix \catcode`\+=\other \def\normalplus{+} \catcode`\<=\other \def\normalless{<} \catcode`\>=\other \def\normalgreater{>} \catcode`\^=\other \def\normalcaret{^} \catcode`\_=\other \def\normalunderscore{_} \catcode`\|=\other \def\normalverticalbar{|} \catcode`\~=\other \def\normaltilde{~} % 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 % @ for escape char from now on. % The story here is that in math mode, the \char of \backslashcurfont % ends up printing the roman \ from the math symbol font (because \char % in math mode uses the \mathcode, and plain.tex sets % \mathcode`\\="026E). It seems better for @backslashchar{} to always % print a typewriter backslash, hence we use an explicit \mathchar, % which is the decimal equivalent of "715c (class 7, e.g., use \fam; % ignored family value; char position "5C). We can't use " for the % usual hex value because it has already been made active. @def@normalbackslash{{@tt @ifmmode @mathchar29020 @else @backslashcurfont @fi}} @let@backslashchar = @normalbackslash % @backslashchar{} is for user documents. % 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. We switch back and forth between these. @gdef@rawbackslash{@let\=@backslashcurfont} @gdef@otherbackslash{@let\=@realbackslash} % Same as @turnoffactive except outputs \ as {\tt\char`\\} instead of % the literal character `\'. Also revert - to its normal character, in % case the active - from code has slipped in. % {@catcode`- = @active @gdef@normalturnoffactive{% @let-=@normaldash @let"=@normaldoublequote @let$=@normaldollar %$ font-lock fix @let+=@normalplus @let<=@normalless @let>=@normalgreater @let\=@normalbackslash @let^=@normalcaret @let_=@normalunderscore @let|=@normalverticalbar @let~=@normaltilde @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 (along with & and #) are made active for url-breaking, so need % active definitions as the normal characters. @def@normaldot{.} @def@normalquest{?} @def@normalslash{/} % These look ok in all fonts, so just make them not special. % @hashchar{} gets its own user-level command, because of #line. @catcode`@& = @other @def@normalamp{&} @catcode`@# = @other @def@normalhash{#} @catcode`@% = @other @def@normalpercent{%} @let @hashchar = @normalhash @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 ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gss-1.0.3/build-aux/missing�������������������������������������������������������������������������0000755�0000000�0000000�00000015330�12415507621�012474� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /bin/sh # Common wrapper for a few potentially missing GNU programs. scriptversion=2013-10-28.13; # UTC # Copyright (C) 1996-2013 Free Software Foundation, Inc. # Originally written 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 case $1 in --is-lightweight) # Used by our autoconf macros to check whether the available missing # script is modern enough. exit 0 ;; --run) # Back-compat with the calling convention used by older automake. shift ;; -h|--h|--he|--hel|--help) echo "\ $0 [OPTION]... PROGRAM [ARGUMENT]... Run 'PROGRAM [ARGUMENT]...', returning a proper advice when this fails due to PROGRAM being missing or too old. Options: -h, --help display this help and exit -v, --version output version information and exit Supported PROGRAM values: aclocal autoconf autoheader autom4te automake makeinfo bison yacc flex lex help2man 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 # Run the given program, remember its exit status. "$@"; st=$? # If it succeeded, we are done. test $st -eq 0 && exit 0 # Also exit now if we it failed (or wasn't found), and '--version' was # passed; such an option is passed most likely to detect whether the # program is present and works. case $2 in --version|--help) exit $st;; esac # Exit code 63 means version mismatch. This often happens when the user # tries to use an ancient version of a tool on a file that requires a # minimum version. if test $st -eq 63; then msg="probably too old" elif test $st -eq 127; then # Program was missing. msg="missing on your system" else # Program was found and executed, but failed. Give up. exit $st fi perl_URL=http://www.perl.org/ flex_URL=http://flex.sourceforge.net/ gnu_software_URL=http://www.gnu.org/software program_details () { case $1 in aclocal|automake) echo "The '$1' program is part of the GNU Automake package:" echo "<$gnu_software_URL/automake>" echo "It also requires GNU Autoconf, GNU m4 and Perl in order to run:" echo "<$gnu_software_URL/autoconf>" echo "<$gnu_software_URL/m4/>" echo "<$perl_URL>" ;; autoconf|autom4te|autoheader) echo "The '$1' program is part of the GNU Autoconf package:" echo "<$gnu_software_URL/autoconf/>" echo "It also requires GNU m4 and Perl in order to run:" echo "<$gnu_software_URL/m4/>" echo "<$perl_URL>" ;; esac } give_advice () { # Normalize program name to check for. normalized_program=`echo "$1" | sed ' s/^gnu-//; t s/^gnu//; t s/^g//; t'` printf '%s\n' "'$1' is $msg." configure_deps="'configure.ac' or m4 files included by 'configure.ac'" case $normalized_program in autoconf*) echo "You should only need it if you modified 'configure.ac'," echo "or m4 files included by it." program_details 'autoconf' ;; autoheader*) echo "You should only need it if you modified 'acconfig.h' or" echo "$configure_deps." program_details 'autoheader' ;; automake*) echo "You should only need it if you modified 'Makefile.am' or" echo "$configure_deps." program_details 'automake' ;; aclocal*) echo "You should only need it if you modified 'acinclude.m4' or" echo "$configure_deps." program_details 'aclocal' ;; autom4te*) echo "You might have modified some maintainer files that require" echo "the 'autom4te' program to be rebuilt." program_details 'autom4te' ;; bison*|yacc*) echo "You should only need it if you modified a '.y' file." echo "You may want to install the GNU Bison package:" echo "<$gnu_software_URL/bison/>" ;; lex*|flex*) echo "You should only need it if you modified a '.l' file." echo "You may want to install the Fast Lexical Analyzer package:" echo "<$flex_URL>" ;; help2man*) echo "You should only need it if you modified a dependency" \ "of a man page." echo "You may want to install the GNU Help2man package:" echo "<$gnu_software_URL/help2man/>" ;; makeinfo*) echo "You should only need it if you modified a '.texi' file, or" echo "any other file indirectly affecting the aspect of the manual." echo "You might want to install the Texinfo package:" echo "<$gnu_software_URL/texinfo/>" echo "The spurious makeinfo call might also be the consequence of" echo "using a buggy 'make' (AIX, DU, IRIX), in which case you might" echo "want to install GNU make:" echo "<$gnu_software_URL/make/>" ;; *) echo "You might have modified some files without having the proper" echo "tools for further handling them. Check the 'README' file, it" echo "often tells you about the needed prerequisites for installing" echo "this package. You may also peek at any GNU archive site, in" echo "case some other package contains this missing '$1' program." ;; esac } give_advice "$1" | sed -e '1s/^/WARNING: /' \ -e '2,$s/^/ /' >&2 # Propagate the correct exit status (expected to be 127 for a program # not found, 63 for a program that failed due to version mismatch). exit $st # 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: ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������gss-1.0.3/build-aux/pmccabe2html��������������������������������������������������������������������0000644�0000000�0000000�00000060622�12415470476�013374� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# pmccabe2html - AWK script to convert pmccabe output to html -*- awk -*- # Copyright (C) 2007-2014 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_SOURCES = ${top_srcdir}/src/*.[ch] # # cyclo-$(PACKAGE).html: $(CYCLO_SOURCES) # $(PMCCABE) $(CYCLO_SOURCES) \ # | 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 \ # -v cut_dir=${top_srcdir}/ \ # > $@-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 { # Portable lookup of present time. "date +%s" | getline epoch_time "date" | getline chronos_time 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 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 " epoch_time " -->" 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, 1, 0, 1, 1, 0, 1) } function html_fnc_table_abbrev (caption) { html_fnc_table(caption, 1, 1, 0, 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 "" print "" print "" print "" print "" print "" print "" print "" print "" if (css_url != "") { print "" } if (css != "") { print "" close(css) } print "" print "" } function html_footer () { print "" print "" } function html_fnc_header (fname_p, mcyclo_p, cyclo_p, num_statements_p, num_lines_p, first_line_p, file_p) { print "" if (fname_p) { # Function name print "" print "" print "" print "" print "Function Name" print "" } if (mcyclo_p) { # Modified cyclo print "" print "Modified Cyclo" print "" } if (cyclo_p) { # Cyclo print "" print "Cyclomatic" print "
" print "Complexity" print "" } if (num_statements_p) { print "" print "Number of" print "
" print "Statements" print "" } if (num_lines_p) { print "" print "Number of" print "
" print "Lines" print "" } if (first_line_p) { print "" print "First Line" print "" } if (file_p) { print "" print "Source File" print "" } print "" } 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 "" if (fname_p) { print "" if (file_p && mcyclo[nfun] > cyclo_simple_max) { print "\ " } else { print " " } print "" print "" print fname print "" } if (mcyclo_p) { # Modified cyclo print "" print mcyclo[nfun] print "" } if (cyclo_p) { # Cyclo print "" print cyclo[nfun] print "" } if (num_statements_p) { # Number of statements print "" print num_statements[nfun] print "" } if (num_lines_p) { # Number of lines print "" print num_lines[nfun] print "" } if (first_line_p) { # First line print "" print first_line[nfun] print "" } 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 "" if (href != "") { print "" file[nfun] "" } else { print file[nfun] } print "" print "" if (mcyclo[nfun] > cyclo_simple_max) { print "" 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 "" print "
" print "
"

            while ((getline codeline < (fname nfun "_fn.txt")) > 0)
            {
                gsub(/&/, "\&", codeline)	# Must come first.
                gsub(//, "\>", codeline)

                print codeline
            }
            close(fname nfun "_fn.txt")
            system("rm " "'" fname "'" nfun "_fn.txt")
            print "
" print "
" print "" print "" } } } function html_global_stats () { print "
Summary
" print "" # Total number of functions print "" print "" print "" print "" # Number of simple functions print "" print "" print "" print "" # Number of moderate functions print "" print "" print "" print "" # Number of high functions print "" print "" print "" print "" # Number of untestable functions print "" print "" print "" print "" print "
" print "Total number of functions" print "" print num_of_functions print "
" print "Number of low risk functions" print "" print num_of_simple_functions print "
" print "Number of moderate risk functions" print "" print num_of_moderate_functions print "
" print "Number of high risk functions" print "" print num_of_high_functions print "
" print "Number of untestable functions" print "" print num_of_untestable_functions print "
" print "
" } function html_function_cyclo () { print "
Details for all functions
" print "" print "" print "" print "" print "" print "" # Simple print "" print "" print "" print "" print "" # Moderate print "" print "" print "" print "" print "" # High print "" print "" print "" print "" print "" # Untestable print "" print "" print "" print "" print "" print "
" print " " print "" print "Cyclomatic Complexity" print "" print "Risk Evaluation" print "
" print " " print "" print "0 - " cyclo_simple_max print "" print "Simple module, without much risk" print "
" print " " print "" print cyclo_simple_max + 1 " - " cyclo_moderate_max print "" print "More complex module, moderate risk" print "
" print " " print "" print cyclo_moderate_max + 1 " - " cyclo_high_max print "" print "Complex module, high risk" print "
" print " " print "" print "greater than " cyclo_high_max print "" print "Untestable module, very high risk" print "
" print "
" html_fnc_table_complete("") } function wiki_global_stats () { print "{| class=\"cyclo_summary_table\"" # Total number of functions print "|-" print "| class=\"cyclo_summary_header_entry\" | Total number of functions" print "| class=\"cyclo_summary_number_entry\" |" num_of_functions # Number of simple functions print "|-" print "| class=\"cyclo_summary_header_entry\" | Number of low risk functions" print "| class=\"cyclo_summary_number_entry\" |" num_of_simple_functions # Number of moderate functions print "|-" print "| class=\"cyclo_summary_header_entry\" | Number of moderate risk functions" print "| class=\"cyclo_summary_number_entry\" |" num_of_moderate_functions # Number of high functions print "|-" print "| class=\"cyclo_summary_header_entry\" | Number of high risk functions" print "| class=\"cyclo_summary_number_entry\" |" num_of_high_functions # Number of untestable functions print "|-" print "| class=\"cyclo_summary_header_entry\" | Number of untestable functions" print "| class=\"cyclo_summary_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, 1, 0, 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 "
" package_name " Cyclomatic Complexity Report
" print "

Report generated at: " chronos_time "

" } if (output_lang == "wiki") { print "==" package_name " Cyclomatic Complexity Report==" print "Report generated at: '''" chronos_time "'''" } 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 gss-1.0.3/build-aux/snippet/0000755000000000000000000000000012415510376012636 500000000000000gss-1.0.3/build-aux/snippet/arg-nonnull.h0000644000000000000000000000230012415470500015150 00000000000000/* A C macro for declaring that specific arguments must not be NULL. Copyright (C) 2009-2014 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 . */ /* _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 gss-1.0.3/build-aux/snippet/c++defs.h0000644000000000000000000002675312415470500014150 00000000000000/* C++ compatible function declaration macros. Copyright (C) 2010-2014 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 . */ #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(::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(::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( \ (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 , 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 , 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 */ gss-1.0.3/build-aux/snippet/warn-on-use.h0000644000000000000000000001200712415470500015074 00000000000000/* A C macro for emitting warnings if a function is used. Copyright (C) 2010-2014 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 . */ /* _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 ]], [getline]) in configure.ac, which potentially defines HAVE_RAW_DECL_GETLINE - adding this code to a header that wraps the system : #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 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 gss-1.0.3/build-aux/update-copyright0000755000000000000000000002242112415470476014321 00000000000000eval '(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 = '2013-01-03.09:41'; # UTC # Copyright (C) 2009-2014 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 . # Written by Jim Meyering and Joel E. Denny # The arguments to this script should be names of files that contain # copyright statements to be updated. The copyright holder's name # defaults to "Free Software Foundation, Inc." but may be changed to # any other name by using the "UPDATE_COPYRIGHT_HOLDER" environment # variable. # # For example, you might wish to use the update-copyright target rule # in maint.mk from gnulib's maintainer-makefile module. # # Iff a 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 copyright # statement is recognized. # # Each file's copyright statement must be formatted 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 © 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. # # However, any correctly formatted copyright statement following # a non-matching copyright statements would be recognized. # # The exact conditions that a file's copyright statement must meet # to be recognized are: # # 1. It is the first copyright statement that meets all of the # following conditions. Subsequent copyright statements are # ignored. # 2. Its format is "Copyright (C)", then a list of copyright years, # and then the name of the copyright holder. # 3. The "(C)" takes one of the following forms or is omitted # entirely: # # A. (C) # B. (c) # C. @copyright{} # D. © # # 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 -- including white space. # 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. # If UPDATE_COPYRIGHT_USE_INTERVALS=2, convert a sequence with gaps # to the minimal containing range. For example, convert # 2000, 2004-2007, 2009 to 2000-2009. # 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. # 5. Set UPDATE_COPYRIGHT_HOLDER if the copyright holder is other # than "Free Software Foundation, Inc.". use strict; use warnings; my $copyright_re = 'Copyright'; my $circle_c_re = '(?:\([cC]\)|@copyright{}|©)'; my $holder = $ENV{UPDATE_COPYRIGHT_HOLDER}; $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/\b$final_year_orig\b/$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; # When it's 2, emit a single range encompassing all year numbers. $ENV{UPDATE_COPYRIGHT_USE_INTERVALS} == 2 and $stmt =~ s/\b(\d{4})\b.*\b(\d{4})\b/$1-$2/; } # 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: 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: gss-1.0.3/build-aux/config.guess0000755000000000000000000012355012415507621013421 00000000000000#! /bin/sh # Attempt to guess a canonical system name. # Copyright 1992-2014 Free Software Foundation, Inc. timestamp='2014-03-23' # 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 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 . # # 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 Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # # Originally written by Per Bothner. # # 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 # # Please send patches with a ChangeLog entry to config-patches@gnu.org. 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 ." version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. Copyright 1992-2014 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 case "${UNAME_SYSTEM}" in Linux|GNU|GNU/*) # If the system lacks a compiler, then just pick glibc. # We could probably try harder. LIBC=gnu eval $set_cc_for_build cat <<-EOF > $dummy.c #include #if defined(__UCLIBC__) LIBC=uclibc #elif defined(__dietlibc__) LIBC=dietlibc #else LIBC=gnu #endif EOF eval `$CC_FOR_BUILD -E $dummy.c 2>/dev/null | grep '^LIBC' | sed 's, ,,g'` ;; esac # 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 tuples: *-*-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 ;; *:Bitrig:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'` echo ${UNAME_MACHINE_ARCH}-unknown-bitrig${UNAME_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'` # Reset EXIT trap before exiting to avoid spurious non-zero exit code. exitcode=$? trap '' 0 exit $exitcode ;; 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 /* 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 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:*:[4567]) 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 #include 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 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:*:*) UNAME_PROCESSOR=`/usr/bin/uname -p` case ${UNAME_PROCESSOR} in amd64) echo x86_64-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; *) echo ${UNAME_PROCESSOR}-unknown-freebsd`echo ${UNAME_RELEASE}|sed -e 's/[-(].*//'` ;; esac exit ;; i*:CYGWIN*:*) echo ${UNAME_MACHINE}-pc-cygwin exit ;; *:MINGW64*:*) echo ${UNAME_MACHINE}-pc-mingw64 exit ;; *:MINGW*:*) echo ${UNAME_MACHINE}-pc-mingw32 exit ;; *:MSYS*:*) echo ${UNAME_MACHINE}-pc-msys 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-${LIBC}`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/[-(].*//'`-${LIBC} exit ;; i*86:Minix:*:*) echo ${UNAME_MACHINE}-pc-minix exit ;; aarch64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; aarch64_be:Linux:*:*) UNAME_MACHINE=aarch64_be echo ${UNAME_MACHINE}-unknown-linux-${LIBC} 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="gnulibc1" ; fi echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; arc:Linux:*:* | arceb:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${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-${LIBC} else if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_PCS_VFP then echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabi else echo ${UNAME_MACHINE}-unknown-linux-${LIBC}eabihf fi fi exit ;; avr32*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; cris:Linux:*:*) echo ${UNAME_MACHINE}-axis-linux-${LIBC} exit ;; crisv32:Linux:*:*) echo ${UNAME_MACHINE}-axis-linux-${LIBC} exit ;; frv:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; hexagon:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; i*86:Linux:*:*) echo ${UNAME_MACHINE}-pc-linux-${LIBC} exit ;; ia64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; m32r*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; m68*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} 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-${LIBC}"; exit; } ;; openrisc*:Linux:*:*) echo or1k-unknown-linux-${LIBC} exit ;; or32:Linux:*:* | or1k*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; padre:Linux:*:*) echo sparc-unknown-linux-${LIBC} exit ;; parisc64:Linux:*:* | hppa64:Linux:*:*) echo hppa64-unknown-linux-${LIBC} 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-${LIBC} ;; PA8*) echo hppa2.0-unknown-linux-${LIBC} ;; *) echo hppa-unknown-linux-${LIBC} ;; esac exit ;; ppc64:Linux:*:*) echo powerpc64-unknown-linux-${LIBC} exit ;; ppc:Linux:*:*) echo powerpc-unknown-linux-${LIBC} exit ;; ppc64le:Linux:*:*) echo powerpc64le-unknown-linux-${LIBC} exit ;; ppcle:Linux:*:*) echo powerpcle-unknown-linux-${LIBC} exit ;; s390:Linux:*:* | s390x:Linux:*:*) echo ${UNAME_MACHINE}-ibm-linux-${LIBC} exit ;; sh64*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; sh*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; sparc:Linux:*:* | sparc64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; tile*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; vax:Linux:*:*) echo ${UNAME_MACHINE}-dec-linux-${LIBC} exit ;; x86_64:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} exit ;; xtensa*:Linux:*:*) echo ${UNAME_MACHINE}-unknown-linux-${LIBC} 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' /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 echo i586-unisys-sysv4 exit ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes . # 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 ;; x86_64:Haiku:*:*) echo x86_64-unknown-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 eval $set_cc_for_build if test "$UNAME_PROCESSOR" = unknown ; then UNAME_PROCESSOR=powerpc fi if test `echo "$UNAME_RELEASE" | sed -e 's/\..*//'` -le 10 ; then 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 case $UNAME_PROCESSOR in i386) UNAME_PROCESSOR=x86_64 ;; powerpc) UNAME_PROCESSOR=powerpc64 ;; esac fi fi elif test "$UNAME_PROCESSOR" = i386 ; then # Avoid executing cc on OS X 10.9, as it ships with a stub # that puts up a graphical alert prompting to install # developer tools. Any system running Mac OS X 10.7 or # later (Darwin 11 and later) is required to have a 64-bit # processor. This is not true of the ARM version of Darwin # that Apple uses in portable devices. UNAME_PROCESSOR=x86_64 fi 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 ;; NEO-?:NONSTOP_KERNEL:*:*) echo neo-tandem-nsk${UNAME_RELEASE} 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 ;; x86_64:VMkernel:*:*) echo ${UNAME_MACHINE}-unknown-esx exit ;; esac cat >&2 < 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: gss-1.0.3/ABOUT-NLS0000644000000000000000000026713312415507605010446 000000000000001 Notes on the Free Translation Project *************************************** Free software is going international! The Free Translation Project is a way to get maintainers of free software, translators, and users all together, so that free software will gradually become able to speak many languages. A few packages already provide translations for their messages. If you found this `ABOUT-NLS' file inside a distribution, you may assume that the distributed package does use GNU `gettext' internally, itself available at your nearest GNU archive site. But you do _not_ need to install GNU `gettext' prior to configuring, installing or using this package with messages translated. Installers will find here some useful hints. These notes also explain how users should proceed for getting the programs to use the available translations. They tell how people wanting to contribute and work on translations can contact the appropriate team. 1.1 INSTALL Matters =================== Some packages are "localizable" when properly installed; the programs they contain can be made to speak your own native language. Most such packages use GNU `gettext'. Other packages have their own ways to internationalization, predating GNU `gettext'. By default, this package will be installed to allow translation of messages. It will automatically detect whether the system already provides the GNU `gettext' functions. Installers may use special options at configuration time for changing the default behaviour. The command: ./configure --disable-nls will _totally_ disable translation of messages. When you already have GNU `gettext' installed on your system and run configure without an option for your new package, `configure' will probably detect the previously built and installed `libintl' library and will decide to use it. If not, you may have to to use the `--with-libintl-prefix' option to tell `configure' where to look for it. Internationalized packages usually have many `po/LL.po' files, where LL gives an ISO 639 two-letter code identifying the language. Unless translations have been forbidden at `configure' time by using the `--disable-nls' switch, all available translations are installed together with the package. However, the environment variable `LINGUAS' may be set, prior to configuration, to limit the installed set. `LINGUAS' should then contain a space separated list of two-letter codes, stating which languages are allowed. 1.2 Using This Package ====================== As a user, if your language has been installed for this package, you only have to set the `LANG' environment variable to the appropriate `LL_CC' combination. If you happen to have the `LC_ALL' or some other `LC_xxx' environment variables set, you should unset them before setting `LANG', otherwise the setting of `LANG' will not have the desired effect. Here `LL' is an ISO 639 two-letter language code, and `CC' is an ISO 3166 two-letter country code. For example, let's suppose that you speak German and live in Germany. At the shell prompt, merely execute `setenv LANG de_DE' (in `csh'), `export LANG; LANG=de_DE' (in `sh') or `export LANG=de_DE' (in `bash'). This can be done from your `.login' or `.profile' file, once and for all. You might think that the country code specification is redundant. But in fact, some languages have dialects in different countries. For example, `de_AT' is used for Austria, and `pt_BR' for Brazil. The country code serves to distinguish the dialects. The locale naming convention of `LL_CC', with `LL' denoting the language and `CC' denoting the country, is the one use on systems based on GNU libc. On other systems, some variations of this scheme are used, such as `LL' or `LL_CC.ENCODING'. You can get the list of locales supported by your system for your language by running the command `locale -a | grep '^LL''. Not all programs have translations for all languages. By default, an English message is shown in place of a nonexistent translation. If you understand other languages, you can set up a priority list of languages. This is done through a different environment variable, called `LANGUAGE'. GNU `gettext' gives preference to `LANGUAGE' over `LANG' for the purpose of message handling, but you still need to have `LANG' set to the primary language; this is required by other parts of the system libraries. For example, some Swedish users who would rather read translations in German than English for when Swedish is not available, set `LANGUAGE' to `sv:de' while leaving `LANG' to `sv_SE'. Special advice for Norwegian users: The language code for Norwegian bokma*l changed from `no' to `nb' recently (in 2003). During the transition period, while some message catalogs for this language are installed under `nb' and some older ones under `no', it's recommended for Norwegian users to set `LANGUAGE' to `nb:no' so that both newer and older translations are used. In the `LANGUAGE' environment variable, but not in the `LANG' environment variable, `LL_CC' combinations can be abbreviated as `LL' to denote the language's main dialect. For example, `de' is equivalent to `de_DE' (German as spoken in Germany), and `pt' to `pt_PT' (Portuguese as spoken in Portugal) in this context. 1.3 Translating Teams ===================== For the Free Translation Project to be a success, we need interested people who like their own language and write it well, and who are also able to synergize with other translators speaking the same language. Each translation team has its own mailing list. The up-to-date list of teams can be found at the Free Translation Project's homepage, `http://translationproject.org/', in the "Teams" area. If you'd like to volunteer to _work_ at translating messages, you should become a member of the translating team for your own language. The subscribing address is _not_ the same as the list itself, it has `-request' appended. For example, speakers of Swedish can send a message to `sv-request@li.org', having this message body: subscribe Keep in mind that team members are expected to participate _actively_ in translations, or at solving translational difficulties, rather than merely lurking around. If your team does not exist yet and you want to start one, or if you are unsure about what to do or how to get started, please write to `coordinator@translationproject.org' to reach the coordinator for all translator teams. The English team is special. It works at improving and uniformizing the terminology in use. Proven linguistic skills are praised more than programming skills, here. 1.4 Available Packages ====================== Languages are not equally supported in all packages. The following matrix shows the current state of internationalization, as of June 2010. The matrix shows, in regard of each package, for which languages PO files have been submitted to translation coordination, with a translation percentage of at least 50%. Ready PO files af am an ar as ast az be be@latin bg bn_IN bs ca +--------------------------------------------------+ a2ps | [] [] | aegis | | ant-phone | | anubis | | aspell | [] [] | bash | | bfd | | bibshelf | [] | binutils | | bison | | bison-runtime | [] | bluez-pin | [] [] | bombono-dvd | | buzztard | | cflow | | clisp | | coreutils | [] [] | cpio | | cppi | | cpplib | [] | cryptsetup | | dfarc | | dialog | [] [] | dico | | diffutils | [] | dink | | doodle | | e2fsprogs | [] | enscript | [] | exif | | fetchmail | [] | findutils | [] | flex | [] | freedink | | gas | | gawk | [] [] | gcal | [] | gcc | | gettext-examples | [] [] [] [] | gettext-runtime | [] [] | gettext-tools | [] [] | gip | [] | gjay | | gliv | [] | glunarclock | [] [] | gnubiff | | gnucash | [] | gnuedu | | gnulib | | gnunet | | gnunet-gtk | | gnutls | | gold | | gpe-aerial | | gpe-beam | | gpe-bluetooth | | gpe-calendar | | gpe-clock | [] | gpe-conf | | gpe-contacts | | gpe-edit | | gpe-filemanager | | gpe-go | | gpe-login | | gpe-ownerinfo | [] | gpe-package | | gpe-sketchbook | | gpe-su | [] | gpe-taskmanager | [] | gpe-timesheet | [] | gpe-today | [] | gpe-todo | | gphoto2 | | gprof | [] | gpsdrive | | gramadoir | | grep | | grub | [] [] | gsasl | | gss | | gst-plugins-bad | [] | gst-plugins-base | [] | gst-plugins-good | [] | gst-plugins-ugly | [] | gstreamer | [] [] [] | gtick | | gtkam | [] | gtkorphan | [] | gtkspell | [] [] [] | gutenprint | | hello | [] | help2man | | hylafax | | idutils | | indent | [] [] | iso_15924 | | iso_3166 | [] [] [] [] [] [] [] | iso_3166_2 | | iso_4217 | | iso_639 | [] [] [] [] | iso_639_3 | | jwhois | | kbd | | keytouch | [] | keytouch-editor | | keytouch-keyboa... | [] | klavaro | [] | latrine | | ld | [] | leafpad | [] [] | libc | [] [] | libexif | () | libextractor | | libgnutls | | libgpewidget | | libgpg-error | | libgphoto2 | | libgphoto2_port | | libgsasl | | libiconv | [] | libidn | | lifelines | | liferea | [] [] | lilypond | | linkdr | [] | lordsawar | | lprng | | lynx | [] | m4 | | mailfromd | | mailutils | | make | | man-db | | man-db-manpages | | minicom | | mkisofs | | myserver | | nano | [] [] | opcodes | | parted | | pies | | popt | | psmisc | | pspp | [] | pwdutils | | radius | [] | recode | [] [] | rosegarden | | rpm | | rush | | sarg | | screem | | scrollkeeper | [] [] [] | sed | [] [] | sharutils | [] [] | shishi | | skencil | | solfege | | solfege-manual | | soundtracker | | sp | | sysstat | | tar | [] | texinfo | | tin | | unicode-han-tra... | | unicode-transla... | | util-linux-ng | [] | vice | | vmm | | vorbis-tools | | wastesedge | | wdiff | | wget | [] [] | wyslij-po | | xchat | [] [] [] [] | xdg-user-dirs | [] [] [] [] [] [] [] [] [] | xkeyboard-config | [] [] | +--------------------------------------------------+ af am an ar as ast az be be@latin bg bn_IN bs ca 6 0 1 2 3 19 1 10 3 28 3 1 38 crh cs da de el en en_GB en_ZA eo es et eu fa +-------------------------------------------------+ a2ps | [] [] [] [] [] [] [] | aegis | [] [] [] | ant-phone | [] () | anubis | [] [] | aspell | [] [] [] [] [] | bash | [] [] [] | bfd | [] | bibshelf | [] [] [] | binutils | [] | bison | [] [] | bison-runtime | [] [] [] [] | bluez-pin | [] [] [] [] [] [] | bombono-dvd | [] | buzztard | [] [] [] | cflow | [] [] | clisp | [] [] [] [] | coreutils | [] [] [] [] | cpio | | cppi | | cpplib | [] [] [] | cryptsetup | [] | dfarc | [] [] [] | dialog | [] [] [] [] [] | dico | | diffutils | [] [] [] [] [] [] | dink | [] [] [] | doodle | [] | e2fsprogs | [] [] [] | enscript | [] [] [] | exif | () [] [] | fetchmail | [] [] () [] [] [] | findutils | [] [] [] | flex | [] [] | freedink | [] [] [] | gas | [] | gawk | [] [] [] | gcal | [] | gcc | [] [] | gettext-examples | [] [] [] [] | gettext-runtime | [] [] [] [] | gettext-tools | [] [] [] | gip | [] [] [] [] | gjay | [] | gliv | [] [] [] | glunarclock | [] [] | gnubiff | () | gnucash | [] () () () () | gnuedu | [] [] | gnulib | [] [] | gnunet | | gnunet-gtk | [] | gnutls | [] [] | gold | [] | gpe-aerial | [] [] [] [] | gpe-beam | [] [] [] [] | gpe-bluetooth | [] [] | gpe-calendar | [] | gpe-clock | [] [] [] [] | gpe-conf | [] [] [] | gpe-contacts | [] [] [] | gpe-edit | [] [] | gpe-filemanager | [] [] [] | gpe-go | [] [] [] [] | gpe-login | [] [] | gpe-ownerinfo | [] [] [] [] | gpe-package | [] [] [] | gpe-sketchbook | [] [] [] [] | gpe-su | [] [] [] [] | gpe-taskmanager | [] [] [] [] | gpe-timesheet | [] [] [] [] | gpe-today | [] [] [] [] | gpe-todo | [] [] [] | gphoto2 | [] [] () [] [] [] | gprof | [] [] [] | gpsdrive | [] [] [] | gramadoir | [] [] [] | grep | [] | grub | [] [] | gsasl | [] | gss | | gst-plugins-bad | [] [] [] [] [] | gst-plugins-base | [] [] [] [] [] | gst-plugins-good | [] [] [] [] [] [] | gst-plugins-ugly | [] [] [] [] [] [] | gstreamer | [] [] [] [] [] | gtick | [] () [] | gtkam | [] [] () [] [] | gtkorphan | [] [] [] [] | gtkspell | [] [] [] [] [] [] [] | gutenprint | [] [] [] | hello | [] [] [] [] | help2man | [] | hylafax | [] [] | idutils | [] [] | indent | [] [] [] [] [] [] [] | iso_15924 | [] () [] [] | iso_3166 | [] [] [] [] () [] [] [] () | iso_3166_2 | () | iso_4217 | [] [] [] () [] [] | iso_639 | [] [] [] [] () [] [] | iso_639_3 | [] | jwhois | [] | kbd | [] [] [] [] [] | keytouch | [] [] | keytouch-editor | [] [] | keytouch-keyboa... | [] | klavaro | [] [] [] [] | latrine | [] () | ld | [] [] | leafpad | [] [] [] [] [] [] | libc | [] [] [] [] | libexif | [] [] () | libextractor | | libgnutls | [] | libgpewidget | [] [] | libgpg-error | [] [] | libgphoto2 | [] () | libgphoto2_port | [] () [] | libgsasl | | libiconv | [] [] [] [] [] | libidn | [] [] [] | lifelines | [] () | liferea | [] [] [] [] [] | lilypond | [] [] [] | linkdr | [] [] [] | lordsawar | [] | lprng | | lynx | [] [] [] [] | m4 | [] [] [] [] | mailfromd | | mailutils | [] | make | [] [] [] | man-db | | man-db-manpages | | minicom | [] [] [] [] | mkisofs | | myserver | | nano | [] [] [] | opcodes | [] [] | parted | [] [] | pies | | popt | [] [] [] [] [] | psmisc | [] [] [] | pspp | [] | pwdutils | [] | radius | [] | recode | [] [] [] [] [] [] | rosegarden | () () () | rpm | [] [] [] | rush | | sarg | | screem | | scrollkeeper | [] [] [] [] [] | sed | [] [] [] [] [] [] | sharutils | [] [] [] [] | shishi | | skencil | [] () [] | solfege | [] [] [] | solfege-manual | [] [] | soundtracker | [] [] [] | sp | [] | sysstat | [] [] [] | tar | [] [] [] [] | texinfo | [] [] [] | tin | [] [] | unicode-han-tra... | | unicode-transla... | | util-linux-ng | [] [] [] [] | vice | () () | vmm | [] | vorbis-tools | [] [] | wastesedge | [] | wdiff | [] [] | wget | [] [] [] | wyslij-po | | xchat | [] [] [] [] [] | xdg-user-dirs | [] [] [] [] [] [] [] [] [] | xkeyboard-config | [] [] [] [] [] [] | +-------------------------------------------------+ crh cs da de el en en_GB en_ZA eo es et eu fa 5 64 105 117 18 1 8 0 28 89 18 19 0 fi fr ga gl gu he hi hr hu hy id is it ja ka kn +----------------------------------------------------+ a2ps | [] [] [] [] | aegis | [] [] | ant-phone | [] [] | anubis | [] [] [] [] | aspell | [] [] [] [] | bash | [] [] [] [] | bfd | [] [] [] | bibshelf | [] [] [] [] [] | binutils | [] [] [] | bison | [] [] [] [] | bison-runtime | [] [] [] [] [] [] | bluez-pin | [] [] [] [] [] [] [] [] | bombono-dvd | [] | buzztard | [] | cflow | [] [] [] | clisp | [] | coreutils | [] [] [] [] [] | cpio | [] [] [] [] | cppi | [] [] | cpplib | [] [] [] | cryptsetup | [] [] [] | dfarc | [] [] [] | dialog | [] [] [] [] [] [] [] | dico | | diffutils | [] [] [] [] [] [] [] [] [] | dink | [] | doodle | [] [] | e2fsprogs | [] [] | enscript | [] [] [] [] | exif | [] [] [] [] [] [] | fetchmail | [] [] [] [] | findutils | [] [] [] [] [] [] | flex | [] [] [] | freedink | [] [] [] | gas | [] [] | gawk | [] [] [] [] () [] | gcal | [] | gcc | [] | gettext-examples | [] [] [] [] [] [] [] | gettext-runtime | [] [] [] [] [] [] | gettext-tools | [] [] [] [] | gip | [] [] [] [] [] [] | gjay | [] | gliv | [] () | glunarclock | [] [] [] [] | gnubiff | () [] () | gnucash | () () () () () [] | gnuedu | [] [] | gnulib | [] [] [] [] [] [] | gnunet | | gnunet-gtk | [] | gnutls | [] [] | gold | [] [] | gpe-aerial | [] [] [] | gpe-beam | [] [] [] [] | gpe-bluetooth | [] [] [] [] | gpe-calendar | [] [] | gpe-clock | [] [] [] [] [] | gpe-conf | [] [] [] [] | gpe-contacts | [] [] [] [] | gpe-edit | [] [] [] | gpe-filemanager | [] [] [] [] | gpe-go | [] [] [] [] [] | gpe-login | [] [] [] | gpe-ownerinfo | [] [] [] [] [] | gpe-package | [] [] [] | gpe-sketchbook | [] [] [] [] | gpe-su | [] [] [] [] [] [] | gpe-taskmanager | [] [] [] [] [] | gpe-timesheet | [] [] [] [] [] | gpe-today | [] [] [] [] [] [] [] | gpe-todo | [] [] [] | gphoto2 | [] [] [] [] [] [] | gprof | [] [] [] [] | gpsdrive | [] [] [] | gramadoir | [] [] [] | grep | [] [] | grub | [] [] [] [] | gsasl | [] [] [] [] [] | gss | [] [] [] [] [] | gst-plugins-bad | [] [] [] [] [] [] | gst-plugins-base | [] [] [] [] [] [] | gst-plugins-good | [] [] [] [] [] [] | gst-plugins-ugly | [] [] [] [] [] [] | gstreamer | [] [] [] [] [] | gtick | [] [] [] [] [] | gtkam | [] [] [] [] [] | gtkorphan | [] [] [] | gtkspell | [] [] [] [] [] [] [] [] [] | gutenprint | [] [] [] [] | hello | [] [] [] | help2man | [] [] | hylafax | [] | idutils | [] [] [] [] [] [] | indent | [] [] [] [] [] [] [] [] | iso_15924 | [] () [] [] | iso_3166 | [] () [] [] [] [] [] [] [] [] [] [] | iso_3166_2 | () [] [] [] | iso_4217 | [] () [] [] [] [] | iso_639 | [] () [] [] [] [] [] [] [] | iso_639_3 | () [] [] | jwhois | [] [] [] [] [] | kbd | [] [] | keytouch | [] [] [] [] [] [] | keytouch-editor | [] [] [] [] [] | keytouch-keyboa... | [] [] [] [] [] | klavaro | [] [] | latrine | [] [] [] | ld | [] [] [] [] | leafpad | [] [] [] [] [] [] [] () | libc | [] [] [] [] [] | libexif | [] | libextractor | | libgnutls | [] [] | libgpewidget | [] [] [] [] | libgpg-error | [] [] | libgphoto2 | [] [] [] | libgphoto2_port | [] [] [] | libgsasl | [] [] [] [] [] | libiconv | [] [] [] [] [] [] | libidn | [] [] [] [] | lifelines | () | liferea | [] [] [] [] | lilypond | [] [] | linkdr | [] [] [] [] [] | lordsawar | | lprng | [] | lynx | [] [] [] [] [] | m4 | [] [] [] [] [] [] | mailfromd | | mailutils | [] [] | make | [] [] [] [] [] [] [] [] [] | man-db | [] [] | man-db-manpages | [] | minicom | [] [] [] [] [] | mkisofs | [] [] [] [] | myserver | | nano | [] [] [] [] [] [] | opcodes | [] [] [] [] | parted | [] [] [] [] | pies | | popt | [] [] [] [] [] [] [] [] [] | psmisc | [] [] [] | pspp | | pwdutils | [] [] | radius | [] [] | recode | [] [] [] [] [] [] [] [] | rosegarden | () () () () () | rpm | [] [] | rush | | sarg | [] | screem | [] [] | scrollkeeper | [] [] [] [] | sed | [] [] [] [] [] [] [] [] | sharutils | [] [] [] [] [] [] [] | shishi | [] | skencil | [] | solfege | [] [] [] [] | solfege-manual | [] [] | soundtracker | [] [] | sp | [] () | sysstat | [] [] [] [] [] | tar | [] [] [] [] [] [] [] | texinfo | [] [] [] [] | tin | [] | unicode-han-tra... | | unicode-transla... | [] [] | util-linux-ng | [] [] [] [] [] [] | vice | () () () | vmm | [] | vorbis-tools | [] | wastesedge | () () | wdiff | [] | wget | [] [] [] [] [] [] [] [] | wyslij-po | [] [] [] | xchat | [] [] [] [] [] [] [] [] [] | xdg-user-dirs | [] [] [] [] [] [] [] [] [] [] [] [] [] | xkeyboard-config | [] [] [] [] [] | +----------------------------------------------------+ fi fr ga gl gu he hi hr hu hy id is it ja ka kn 105 121 53 20 4 8 3 5 53 2 120 5 84 67 0 4 ko ku ky lg lt lv mk ml mn mr ms mt nb nds ne +-----------------------------------------------+ a2ps | [] | aegis | | ant-phone | | anubis | [] [] | aspell | [] | bash | | bfd | | bibshelf | [] [] | binutils | | bison | [] | bison-runtime | [] [] [] [] [] | bluez-pin | [] [] [] [] [] | bombono-dvd | | buzztard | | cflow | | clisp | | coreutils | [] | cpio | | cppi | | cpplib | | cryptsetup | | dfarc | [] | dialog | [] [] [] [] [] | dico | | diffutils | [] [] | dink | | doodle | | e2fsprogs | | enscript | | exif | [] | fetchmail | | findutils | | flex | | freedink | [] | gas | | gawk | | gcal | | gcc | | gettext-examples | [] [] [] [] | gettext-runtime | [] | gettext-tools | [] | gip | [] [] | gjay | | gliv | | glunarclock | [] | gnubiff | | gnucash | () () () () | gnuedu | | gnulib | | gnunet | | gnunet-gtk | | gnutls | [] | gold | | gpe-aerial | [] | gpe-beam | [] | gpe-bluetooth | [] [] | gpe-calendar | [] | gpe-clock | [] [] [] [] [] | gpe-conf | [] [] | gpe-contacts | [] [] | gpe-edit | [] | gpe-filemanager | [] [] | gpe-go | [] [] [] | gpe-login | [] | gpe-ownerinfo | [] [] | gpe-package | [] [] | gpe-sketchbook | [] [] | gpe-su | [] [] [] [] [] [] | gpe-taskmanager | [] [] [] [] [] [] | gpe-timesheet | [] [] | gpe-today | [] [] [] [] | gpe-todo | [] [] | gphoto2 | | gprof | [] | gpsdrive | | gramadoir | | grep | | grub | | gsasl | | gss | | gst-plugins-bad | [] [] [] [] | gst-plugins-base | [] [] | gst-plugins-good | [] [] | gst-plugins-ugly | [] [] [] [] [] | gstreamer | | gtick | | gtkam | [] | gtkorphan | [] [] | gtkspell | [] [] [] [] [] [] [] | gutenprint | | hello | [] [] [] | help2man | | hylafax | | idutils | | indent | | iso_15924 | [] [] | iso_3166 | [] [] () [] [] [] [] [] | iso_3166_2 | | iso_4217 | [] [] | iso_639 | [] [] | iso_639_3 | [] | jwhois | [] | kbd | | keytouch | [] | keytouch-editor | [] | keytouch-keyboa... | [] | klavaro | [] | latrine | [] | ld | | leafpad | [] [] [] | libc | [] | libexif | | libextractor | | libgnutls | [] | libgpewidget | [] [] | libgpg-error | | libgphoto2 | | libgphoto2_port | | libgsasl | | libiconv | | libidn | | lifelines | | liferea | | lilypond | | linkdr | | lordsawar | | lprng | | lynx | | m4 | | mailfromd | | mailutils | | make | [] | man-db | | man-db-manpages | | minicom | [] | mkisofs | | myserver | | nano | [] [] | opcodes | | parted | | pies | | popt | [] [] [] | psmisc | | pspp | | pwdutils | | radius | | recode | | rosegarden | | rpm | | rush | | sarg | | screem | | scrollkeeper | [] [] | sed | | sharutils | | shishi | | skencil | | solfege | [] | solfege-manual | | soundtracker | | sp | | sysstat | [] | tar | [] | texinfo | [] | tin | | unicode-han-tra... | | unicode-transla... | | util-linux-ng | | vice | | vmm | | vorbis-tools | | wastesedge | | wdiff | | wget | [] | wyslij-po | | xchat | [] [] [] | xdg-user-dirs | [] [] [] [] [] [] [] [] | xkeyboard-config | [] [] [] | +-----------------------------------------------+ ko ku ky lg lt lv mk ml mn mr ms mt nb nds ne 20 5 10 1 13 48 4 2 2 4 24 10 20 3 1 nl nn or pa pl ps pt pt_BR ro ru rw sk sl sq sr +---------------------------------------------------+ a2ps | [] [] [] [] [] [] [] [] | aegis | [] [] [] | ant-phone | [] [] | anubis | [] [] [] | aspell | [] [] [] [] [] | bash | [] [] | bfd | [] | bibshelf | [] [] | binutils | [] [] | bison | [] [] [] | bison-runtime | [] [] [] [] [] [] [] | bluez-pin | [] [] [] [] [] [] [] [] | bombono-dvd | [] () | buzztard | [] [] | cflow | [] | clisp | [] [] | coreutils | [] [] [] [] [] [] | cpio | [] [] [] | cppi | [] | cpplib | [] | cryptsetup | [] | dfarc | [] | dialog | [] [] [] [] | dico | [] | diffutils | [] [] [] [] [] [] | dink | () | doodle | [] [] | e2fsprogs | [] [] | enscript | [] [] [] [] [] | exif | [] [] [] () [] | fetchmail | [] [] [] [] | findutils | [] [] [] [] [] | flex | [] [] [] [] [] | freedink | [] [] | gas | | gawk | [] [] [] [] | gcal | | gcc | [] | gettext-examples | [] [] [] [] [] [] [] [] | gettext-runtime | [] [] [] [] [] [] [] [] [] | gettext-tools | [] [] [] [] [] [] | gip | [] [] [] [] [] | gjay | | gliv | [] [] [] [] [] [] | glunarclock | [] [] [] [] [] | gnubiff | [] () | gnucash | [] () () () | gnuedu | [] | gnulib | [] [] [] [] | gnunet | | gnunet-gtk | | gnutls | [] [] | gold | | gpe-aerial | [] [] [] [] [] [] [] | gpe-beam | [] [] [] [] [] [] [] | gpe-bluetooth | [] [] | gpe-calendar | [] [] [] [] | gpe-clock | [] [] [] [] [] [] [] [] | gpe-conf | [] [] [] [] [] [] [] | gpe-contacts | [] [] [] [] [] | gpe-edit | [] [] [] | gpe-filemanager | [] [] [] | gpe-go | [] [] [] [] [] [] [] [] | gpe-login | [] [] | gpe-ownerinfo | [] [] [] [] [] [] [] [] | gpe-package | [] [] | gpe-sketchbook | [] [] [] [] [] [] [] | gpe-su | [] [] [] [] [] [] [] [] | gpe-taskmanager | [] [] [] [] [] [] [] [] | gpe-timesheet | [] [] [] [] [] [] [] [] | gpe-today | [] [] [] [] [] [] [] [] | gpe-todo | [] [] [] [] [] | gphoto2 | [] [] [] [] [] [] [] [] | gprof | [] [] [] | gpsdrive | [] [] | gramadoir | [] [] | grep | [] [] [] [] | grub | [] [] [] | gsasl | [] [] [] [] | gss | [] [] [] | gst-plugins-bad | [] [] [] [] [] [] | gst-plugins-base | [] [] [] [] [] | gst-plugins-good | [] [] [] [] [] | gst-plugins-ugly | [] [] [] [] [] [] | gstreamer | [] [] [] [] [] | gtick | [] [] [] | gtkam | [] [] [] [] [] [] | gtkorphan | [] | gtkspell | [] [] [] [] [] [] [] [] [] [] | gutenprint | [] [] | hello | [] [] [] [] | help2man | [] [] | hylafax | [] | idutils | [] [] [] [] [] | indent | [] [] [] [] [] [] [] | iso_15924 | [] [] [] [] | iso_3166 | [] [] [] [] [] () [] [] [] [] [] [] [] [] | iso_3166_2 | [] [] [] | iso_4217 | [] [] [] [] [] [] [] [] | iso_639 | [] [] [] [] [] [] [] [] [] | iso_639_3 | [] [] | jwhois | [] [] [] [] | kbd | [] [] [] | keytouch | [] [] [] | keytouch-editor | [] [] [] | keytouch-keyboa... | [] [] [] | klavaro | [] [] | latrine | [] [] | ld | | leafpad | [] [] [] [] [] [] [] [] [] | libc | [] [] [] [] | libexif | [] [] () [] | libextractor | | libgnutls | [] [] | libgpewidget | [] [] [] | libgpg-error | [] [] | libgphoto2 | [] [] | libgphoto2_port | [] [] [] [] [] | libgsasl | [] [] [] [] [] | libiconv | [] [] [] [] [] | libidn | [] [] | lifelines | [] [] | liferea | [] [] [] [] [] () () [] | lilypond | [] | linkdr | [] [] [] | lordsawar | | lprng | [] | lynx | [] [] [] | m4 | [] [] [] [] [] | mailfromd | [] | mailutils | [] | make | [] [] [] [] | man-db | [] [] [] | man-db-manpages | [] [] [] | minicom | [] [] [] [] | mkisofs | [] [] [] | myserver | | nano | [] [] [] [] | opcodes | [] [] | parted | [] [] [] [] | pies | [] | popt | [] [] [] [] | psmisc | [] [] [] | pspp | [] [] | pwdutils | [] | radius | [] [] [] | recode | [] [] [] [] [] [] [] [] | rosegarden | () () | rpm | [] [] [] | rush | [] [] | sarg | | screem | | scrollkeeper | [] [] [] [] [] [] [] [] | sed | [] [] [] [] [] [] [] [] [] | sharutils | [] [] [] [] | shishi | [] | skencil | [] [] | solfege | [] [] [] [] | solfege-manual | [] [] [] | soundtracker | [] | sp | | sysstat | [] [] [] [] | tar | [] [] [] [] | texinfo | [] [] [] [] | tin | [] | unicode-han-tra... | | unicode-transla... | | util-linux-ng | [] [] [] [] [] | vice | [] | vmm | [] | vorbis-tools | [] [] | wastesedge | [] | wdiff | [] [] | wget | [] [] [] [] [] [] [] | wyslij-po | [] [] [] | xchat | [] [] [] [] [] [] [] [] [] | xdg-user-dirs | [] [] [] [] [] [] [] [] [] [] [] [] [] [] | xkeyboard-config | [] [] [] | +---------------------------------------------------+ nl nn or pa pl ps pt pt_BR ro ru rw sk sl sq sr 135 10 4 7 105 1 29 62 47 91 3 54 46 9 37 sv sw ta te tg th tr uk vi wa zh_CN zh_HK zh_TW +---------------------------------------------------+ a2ps | [] [] [] [] [] | 27 aegis | [] | 9 ant-phone | [] [] [] [] | 9 anubis | [] [] [] [] | 15 aspell | [] [] [] | 20 bash | [] [] [] | 12 bfd | [] | 6 bibshelf | [] [] [] | 16 binutils | [] [] | 8 bison | [] [] | 12 bison-runtime | [] [] [] [] [] [] | 29 bluez-pin | [] [] [] [] [] [] [] [] | 37 bombono-dvd | [] | 4 buzztard | [] | 7 cflow | [] [] [] | 9 clisp | | 10 coreutils | [] [] [] [] | 22 cpio | [] [] [] [] [] [] | 13 cppi | [] [] | 5 cpplib | [] [] [] [] [] [] | 14 cryptsetup | [] [] | 7 dfarc | [] | 9 dialog | [] [] [] [] [] [] [] | 30 dico | [] | 2 diffutils | [] [] [] [] [] [] | 30 dink | | 4 doodle | [] [] | 7 e2fsprogs | [] [] [] | 11 enscript | [] [] [] [] | 17 exif | [] [] [] | 16 fetchmail | [] [] [] | 17 findutils | [] [] [] [] [] | 20 flex | [] [] [] [] | 15 freedink | [] | 10 gas | [] | 4 gawk | [] [] [] [] | 18 gcal | [] [] | 5 gcc | [] [] [] | 7 gettext-examples | [] [] [] [] [] [] [] | 34 gettext-runtime | [] [] [] [] [] [] [] | 29 gettext-tools | [] [] [] [] [] [] | 22 gip | [] [] [] [] | 22 gjay | [] | 3 gliv | [] [] [] | 14 glunarclock | [] [] [] [] [] | 19 gnubiff | [] [] | 4 gnucash | () [] () [] () | 10 gnuedu | [] [] | 7 gnulib | [] [] [] [] | 16 gnunet | [] | 1 gnunet-gtk | [] [] [] | 5 gnutls | [] [] [] | 10 gold | [] | 4 gpe-aerial | [] [] [] | 18 gpe-beam | [] [] [] | 19 gpe-bluetooth | [] [] [] | 13 gpe-calendar | [] [] [] [] | 12 gpe-clock | [] [] [] [] [] | 28 gpe-conf | [] [] [] [] | 20 gpe-contacts | [] [] [] | 17 gpe-edit | [] [] [] | 12 gpe-filemanager | [] [] [] [] | 16 gpe-go | [] [] [] [] [] | 25 gpe-login | [] [] [] | 11 gpe-ownerinfo | [] [] [] [] [] | 25 gpe-package | [] [] [] | 13 gpe-sketchbook | [] [] [] | 20 gpe-su | [] [] [] [] [] | 30 gpe-taskmanager | [] [] [] [] [] | 29 gpe-timesheet | [] [] [] [] [] | 25 gpe-today | [] [] [] [] [] [] | 30 gpe-todo | [] [] [] [] | 17 gphoto2 | [] [] [] [] [] | 24 gprof | [] [] [] | 15 gpsdrive | [] [] [] | 11 gramadoir | [] [] [] | 11 grep | [] [] [] | 10 grub | [] [] [] | 14 gsasl | [] [] [] [] | 14 gss | [] [] [] | 11 gst-plugins-bad | [] [] [] [] | 26 gst-plugins-base | [] [] [] [] [] | 24 gst-plugins-good | [] [] [] [] | 24 gst-plugins-ugly | [] [] [] [] [] | 29 gstreamer | [] [] [] [] | 22 gtick | [] [] [] | 13 gtkam | [] [] [] | 20 gtkorphan | [] [] [] | 14 gtkspell | [] [] [] [] [] [] [] [] [] | 45 gutenprint | [] | 10 hello | [] [] [] [] [] [] | 21 help2man | [] [] | 7 hylafax | [] | 5 idutils | [] [] [] [] | 17 indent | [] [] [] [] [] [] | 30 iso_15924 | () [] () [] [] | 16 iso_3166 | [] [] () [] [] () [] [] [] () | 53 iso_3166_2 | () [] () [] | 9 iso_4217 | [] () [] [] () [] [] | 26 iso_639 | [] [] [] () [] () [] [] [] [] | 38 iso_639_3 | [] () | 8 jwhois | [] [] [] [] [] | 16 kbd | [] [] [] [] [] | 15 keytouch | [] [] [] | 16 keytouch-editor | [] [] [] | 14 keytouch-keyboa... | [] [] [] | 14 klavaro | [] | 11 latrine | [] [] [] | 10 ld | [] [] [] [] | 11 leafpad | [] [] [] [] [] [] | 33 libc | [] [] [] [] [] | 21 libexif | [] () | 7 libextractor | [] | 1 libgnutls | [] [] [] | 9 libgpewidget | [] [] [] | 14 libgpg-error | [] [] [] | 9 libgphoto2 | [] [] | 8 libgphoto2_port | [] [] [] [] | 14 libgsasl | [] [] [] | 13 libiconv | [] [] [] [] | 21 libidn | () [] [] | 11 lifelines | [] | 4 liferea | [] [] [] | 21 lilypond | [] | 7 linkdr | [] [] [] [] [] | 17 lordsawar | | 1 lprng | [] | 3 lynx | [] [] [] [] | 17 m4 | [] [] [] [] | 19 mailfromd | [] [] | 3 mailutils | [] | 5 make | [] [] [] [] | 21 man-db | [] [] [] | 8 man-db-manpages | | 4 minicom | [] [] | 16 mkisofs | [] [] | 9 myserver | | 0 nano | [] [] [] [] | 21 opcodes | [] [] [] | 11 parted | [] [] [] [] [] | 15 pies | [] [] | 3 popt | [] [] [] [] [] [] | 27 psmisc | [] [] | 11 pspp | | 4 pwdutils | [] [] | 6 radius | [] [] | 9 recode | [] [] [] [] | 28 rosegarden | () | 0 rpm | [] [] [] | 11 rush | [] [] | 4 sarg | | 1 screem | [] | 3 scrollkeeper | [] [] [] [] [] | 27 sed | [] [] [] [] [] | 30 sharutils | [] [] [] [] [] | 22 shishi | [] | 3 skencil | [] [] | 7 solfege | [] [] [] [] | 16 solfege-manual | [] | 8 soundtracker | [] [] [] | 9 sp | [] | 3 sysstat | [] [] | 15 tar | [] [] [] [] [] [] | 23 texinfo | [] [] [] [] [] | 17 tin | | 4 unicode-han-tra... | | 0 unicode-transla... | | 2 util-linux-ng | [] [] [] [] | 20 vice | () () | 1 vmm | [] | 4 vorbis-tools | [] | 6 wastesedge | | 2 wdiff | [] [] | 7 wget | [] [] [] [] [] | 26 wyslij-po | [] [] | 8 xchat | [] [] [] [] [] [] | 36 xdg-user-dirs | [] [] [] [] [] [] [] [] [] [] | 63 xkeyboard-config | [] [] [] | 22 +---------------------------------------------------+ 85 teams sv sw ta te tg th tr uk vi wa zh_CN zh_HK zh_TW 178 domains 119 1 3 3 0 10 65 51 155 17 98 7 41 2618 Some counters in the preceding matrix are higher than the number of visible blocks let us expect. This is because a few extra PO files are used for implementing regional variants of languages, or language dialects. For a PO file in the matrix above to be effective, the package to which it applies should also have been internationalized and distributed as such by its maintainer. There might be an observable lag between the mere existence a PO file and its wide availability in a distribution. If June 2010 seems to be old, you may fetch a more recent copy of this `ABOUT-NLS' file on most GNU archive sites. The most up-to-date matrix with full percentage details can be found at `http://translationproject.org/extra/matrix.html'. 1.5 Using `gettext' in new packages =================================== If you are writing a freely available program and want to internationalize it you are welcome to use GNU `gettext' in your package. Of course you have to respect the GNU Library General Public License which covers the use of the GNU `gettext' library. This means in particular that even non-free programs can use `libintl' as a shared library, whereas only free software can use `libintl' as a static library or use modified versions of `libintl'. Once the sources are changed appropriately and the setup can handle the use of `gettext' the only thing missing are the translations. The Free Translation Project is also available for packages which are not developed inside the GNU project. Therefore the information given above applies also for every other Free Software Project. Contact `coordinator@translationproject.org' to make the `.pot' files available to the translation teams. gss-1.0.3/Makefile.in0000644000000000000000000013000612415507621011246 00000000000000# Makefile.in generated by automake 1.14.1 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2013 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) 2003-2014 Simon Josefsson # # This file is part of the Generic Security Service (GSS). # # GSS 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. # # GSS 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 GSS; if not, see http://www.gnu.org/licenses or write to # the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, # Boston, MA 02110-1301, USA. VPATH = @srcdir@ am__is_gnu_make = test -n '$(MAKEFILE_LIST)' && test -n '$(MAKELEVEL)' am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = . DIST_COMMON = INSTALL NEWS README AUTHORS ChangeLog \ $(srcdir)/Makefile.in $(srcdir)/Makefile.am \ $(top_srcdir)/configure $(am__configure_deps) \ $(srcdir)/config.h.in $(srcdir)/gss.pc.in \ $(top_srcdir)/lib/headers/gss.h.in ABOUT-NLS COPYING THANKS \ build-aux/ar-lib build-aux/compile build-aux/config.guess \ build-aux/config.rpath build-aux/config.sub \ build-aux/install-sh build-aux/missing build-aux/ltmain.sh \ $(top_srcdir)/build-aux/ar-lib $(top_srcdir)/build-aux/compile \ $(top_srcdir)/build-aux/config.guess \ $(top_srcdir)/build-aux/config.rpath \ $(top_srcdir)/build-aux/config.sub \ $(top_srcdir)/build-aux/install-sh \ $(top_srcdir)/build-aux/ltmain.sh \ $(top_srcdir)/build-aux/missing ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/src/gl/m4/base64.m4 \ $(top_srcdir)/src/gl/m4/errno_h.m4 \ $(top_srcdir)/src/gl/m4/error.m4 \ $(top_srcdir)/src/gl/m4/getopt.m4 \ $(top_srcdir)/src/gl/m4/gnulib-comp.m4 \ $(top_srcdir)/src/gl/m4/memchr.m4 \ $(top_srcdir)/src/gl/m4/mmap-anon.m4 \ $(top_srcdir)/src/gl/m4/msvc-inval.m4 \ $(top_srcdir)/src/gl/m4/msvc-nothrow.m4 \ $(top_srcdir)/src/gl/m4/nocrash.m4 \ $(top_srcdir)/src/gl/m4/off_t.m4 \ $(top_srcdir)/src/gl/m4/ssize_t.m4 \ $(top_srcdir)/src/gl/m4/stdarg.m4 \ $(top_srcdir)/src/gl/m4/stdbool.m4 \ $(top_srcdir)/src/gl/m4/stdio_h.m4 \ $(top_srcdir)/src/gl/m4/strerror.m4 \ $(top_srcdir)/src/gl/m4/sys_socket_h.m4 \ $(top_srcdir)/src/gl/m4/sys_types_h.m4 \ $(top_srcdir)/src/gl/m4/unistd_h.m4 \ $(top_srcdir)/src/gl/m4/version-etc.m4 \ $(top_srcdir)/lib/gl/m4/absolute-header.m4 \ $(top_srcdir)/lib/gl/m4/extensions.m4 \ $(top_srcdir)/lib/gl/m4/gnulib-comp.m4 \ $(top_srcdir)/lib/gl/m4/include_next.m4 \ $(top_srcdir)/lib/gl/m4/ld-output-def.m4 \ $(top_srcdir)/lib/gl/m4/stddef_h.m4 \ $(top_srcdir)/lib/gl/m4/string_h.m4 \ $(top_srcdir)/lib/gl/m4/strverscmp.m4 \ $(top_srcdir)/lib/gl/m4/warn-on-use.m4 \ $(top_srcdir)/gl/m4/00gnulib.m4 \ $(top_srcdir)/gl/m4/autobuild.m4 \ $(top_srcdir)/gl/m4/gnulib-common.m4 \ $(top_srcdir)/gl/m4/gnulib-comp.m4 \ $(top_srcdir)/gl/m4/ld-version-script.m4 \ $(top_srcdir)/gl/m4/manywarnings.m4 \ $(top_srcdir)/gl/m4/valgrind-tests.m4 \ $(top_srcdir)/gl/m4/warnings.m4 \ $(top_srcdir)/m4/extern-inline.m4 $(top_srcdir)/m4/gettext.m4 \ $(top_srcdir)/m4/gtk-doc.m4 $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/lib-ld.m4 \ $(top_srcdir)/m4/lib-link.m4 $(top_srcdir)/m4/lib-prefix.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/nls.m4 \ $(top_srcdir)/m4/pkg.m4 $(top_srcdir)/m4/po-suffix.m4 \ $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/progtest.m4 \ $(top_srcdir)/m4/wchar_t.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 = gss.pc lib/headers/gss.h CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(pkgconfigdir)" DATA = $(pkgconfig_DATA) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ cscope distdir dist dist-all distcheck am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) \ $(LISP)config.h.in # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` ETAGS = etags CTAGS = ctags CSCOPE = cscope DIST_SUBDIRS = $(SUBDIRS) DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) distdir = $(PACKAGE)-$(VERSION) top_distdir = $(distdir) am__remove_distdir = \ if test -d "$(distdir)"; then \ find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ && rm -rf "$(distdir)" \ || { sleep 5 && rm -rf "$(distdir)"; }; \ else :; fi am__post_remove_distdir = $(am__remove_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 DIST_TARGETS = dist-gzip distuninstallcheck_listfiles = find . -type f -print am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \ | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$' distcleancheck_listfiles = find . -type f -print ACLOCAL = @ACLOCAL@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ AR = @AR@ ARFLAGS = @ARFLAGS@ AS = @AS@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CONFIG_INCLUDE = @CONFIG_INCLUDE@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DLL_VERSION = @DLL_VERSION@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EMULTIHOP_HIDDEN = @EMULTIHOP_HIDDEN@ EMULTIHOP_VALUE = @EMULTIHOP_VALUE@ ENOLINK_HIDDEN = @ENOLINK_HIDDEN@ ENOLINK_VALUE = @ENOLINK_VALUE@ EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@ EOVERFLOW_VALUE = @EOVERFLOW_VALUE@ ERRNO_H = @ERRNO_H@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ GETOPT_H = @GETOPT_H@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GNULIB_CHDIR = @GNULIB_CHDIR@ GNULIB_CHOWN = @GNULIB_CHOWN@ GNULIB_CLOSE = @GNULIB_CLOSE@ GNULIB_DPRINTF = @GNULIB_DPRINTF@ GNULIB_DUP = @GNULIB_DUP@ GNULIB_DUP2 = @GNULIB_DUP2@ GNULIB_DUP3 = @GNULIB_DUP3@ GNULIB_ENVIRON = @GNULIB_ENVIRON@ GNULIB_EUIDACCESS = @GNULIB_EUIDACCESS@ GNULIB_FACCESSAT = @GNULIB_FACCESSAT@ GNULIB_FCHDIR = @GNULIB_FCHDIR@ GNULIB_FCHOWNAT = @GNULIB_FCHOWNAT@ GNULIB_FCLOSE = @GNULIB_FCLOSE@ GNULIB_FDATASYNC = @GNULIB_FDATASYNC@ GNULIB_FDOPEN = @GNULIB_FDOPEN@ GNULIB_FFLUSH = @GNULIB_FFLUSH@ GNULIB_FFSL = @GNULIB_FFSL@ GNULIB_FFSLL = @GNULIB_FFSLL@ GNULIB_FGETC = @GNULIB_FGETC@ GNULIB_FGETS = @GNULIB_FGETS@ GNULIB_FOPEN = @GNULIB_FOPEN@ GNULIB_FPRINTF = @GNULIB_FPRINTF@ GNULIB_FPRINTF_POSIX = @GNULIB_FPRINTF_POSIX@ GNULIB_FPURGE = @GNULIB_FPURGE@ GNULIB_FPUTC = @GNULIB_FPUTC@ GNULIB_FPUTS = @GNULIB_FPUTS@ GNULIB_FREAD = @GNULIB_FREAD@ GNULIB_FREOPEN = @GNULIB_FREOPEN@ GNULIB_FSCANF = @GNULIB_FSCANF@ GNULIB_FSEEK = @GNULIB_FSEEK@ GNULIB_FSEEKO = @GNULIB_FSEEKO@ GNULIB_FSYNC = @GNULIB_FSYNC@ GNULIB_FTELL = @GNULIB_FTELL@ GNULIB_FTELLO = @GNULIB_FTELLO@ GNULIB_FTRUNCATE = @GNULIB_FTRUNCATE@ GNULIB_FWRITE = @GNULIB_FWRITE@ GNULIB_GETC = @GNULIB_GETC@ GNULIB_GETCHAR = @GNULIB_GETCHAR@ GNULIB_GETCWD = @GNULIB_GETCWD@ GNULIB_GETDELIM = @GNULIB_GETDELIM@ GNULIB_GETDOMAINNAME = @GNULIB_GETDOMAINNAME@ GNULIB_GETDTABLESIZE = @GNULIB_GETDTABLESIZE@ GNULIB_GETGROUPS = @GNULIB_GETGROUPS@ GNULIB_GETHOSTNAME = @GNULIB_GETHOSTNAME@ GNULIB_GETLINE = @GNULIB_GETLINE@ GNULIB_GETLOGIN = @GNULIB_GETLOGIN@ GNULIB_GETLOGIN_R = @GNULIB_GETLOGIN_R@ GNULIB_GETPAGESIZE = @GNULIB_GETPAGESIZE@ GNULIB_GETUSERSHELL = @GNULIB_GETUSERSHELL@ GNULIB_GL_SRCGL_UNISTD_H_GETOPT = @GNULIB_GL_SRCGL_UNISTD_H_GETOPT@ GNULIB_GROUP_MEMBER = @GNULIB_GROUP_MEMBER@ GNULIB_ISATTY = @GNULIB_ISATTY@ GNULIB_LCHOWN = @GNULIB_LCHOWN@ GNULIB_LINK = @GNULIB_LINK@ GNULIB_LINKAT = @GNULIB_LINKAT@ GNULIB_LSEEK = @GNULIB_LSEEK@ GNULIB_MBSCASECMP = @GNULIB_MBSCASECMP@ GNULIB_MBSCASESTR = @GNULIB_MBSCASESTR@ GNULIB_MBSCHR = @GNULIB_MBSCHR@ GNULIB_MBSCSPN = @GNULIB_MBSCSPN@ GNULIB_MBSLEN = @GNULIB_MBSLEN@ GNULIB_MBSNCASECMP = @GNULIB_MBSNCASECMP@ GNULIB_MBSNLEN = @GNULIB_MBSNLEN@ GNULIB_MBSPBRK = @GNULIB_MBSPBRK@ GNULIB_MBSPCASECMP = @GNULIB_MBSPCASECMP@ GNULIB_MBSRCHR = @GNULIB_MBSRCHR@ GNULIB_MBSSEP = @GNULIB_MBSSEP@ GNULIB_MBSSPN = @GNULIB_MBSSPN@ GNULIB_MBSSTR = @GNULIB_MBSSTR@ GNULIB_MBSTOK_R = @GNULIB_MBSTOK_R@ GNULIB_MEMCHR = @GNULIB_MEMCHR@ GNULIB_MEMMEM = @GNULIB_MEMMEM@ GNULIB_MEMPCPY = @GNULIB_MEMPCPY@ GNULIB_MEMRCHR = @GNULIB_MEMRCHR@ GNULIB_OBSTACK_PRINTF = @GNULIB_OBSTACK_PRINTF@ GNULIB_OBSTACK_PRINTF_POSIX = @GNULIB_OBSTACK_PRINTF_POSIX@ GNULIB_PCLOSE = @GNULIB_PCLOSE@ GNULIB_PERROR = @GNULIB_PERROR@ GNULIB_PIPE = @GNULIB_PIPE@ GNULIB_PIPE2 = @GNULIB_PIPE2@ GNULIB_POPEN = @GNULIB_POPEN@ GNULIB_PREAD = @GNULIB_PREAD@ GNULIB_PRINTF = @GNULIB_PRINTF@ GNULIB_PRINTF_POSIX = @GNULIB_PRINTF_POSIX@ GNULIB_PUTC = @GNULIB_PUTC@ GNULIB_PUTCHAR = @GNULIB_PUTCHAR@ GNULIB_PUTS = @GNULIB_PUTS@ GNULIB_PWRITE = @GNULIB_PWRITE@ GNULIB_RAWMEMCHR = @GNULIB_RAWMEMCHR@ GNULIB_READ = @GNULIB_READ@ GNULIB_READLINK = @GNULIB_READLINK@ GNULIB_READLINKAT = @GNULIB_READLINKAT@ GNULIB_REMOVE = @GNULIB_REMOVE@ GNULIB_RENAME = @GNULIB_RENAME@ GNULIB_RENAMEAT = @GNULIB_RENAMEAT@ GNULIB_RMDIR = @GNULIB_RMDIR@ GNULIB_SCANF = @GNULIB_SCANF@ GNULIB_SETHOSTNAME = @GNULIB_SETHOSTNAME@ GNULIB_SLEEP = @GNULIB_SLEEP@ GNULIB_SNPRINTF = @GNULIB_SNPRINTF@ GNULIB_SPRINTF_POSIX = @GNULIB_SPRINTF_POSIX@ GNULIB_STDIO_H_NONBLOCKING = @GNULIB_STDIO_H_NONBLOCKING@ GNULIB_STDIO_H_SIGPIPE = @GNULIB_STDIO_H_SIGPIPE@ GNULIB_STPCPY = @GNULIB_STPCPY@ GNULIB_STPNCPY = @GNULIB_STPNCPY@ GNULIB_STRCASESTR = @GNULIB_STRCASESTR@ GNULIB_STRCHRNUL = @GNULIB_STRCHRNUL@ GNULIB_STRDUP = @GNULIB_STRDUP@ GNULIB_STRERROR = @GNULIB_STRERROR@ GNULIB_STRERROR_R = @GNULIB_STRERROR_R@ GNULIB_STRNCAT = @GNULIB_STRNCAT@ GNULIB_STRNDUP = @GNULIB_STRNDUP@ GNULIB_STRNLEN = @GNULIB_STRNLEN@ GNULIB_STRPBRK = @GNULIB_STRPBRK@ GNULIB_STRSEP = @GNULIB_STRSEP@ GNULIB_STRSIGNAL = @GNULIB_STRSIGNAL@ GNULIB_STRSTR = @GNULIB_STRSTR@ GNULIB_STRTOK_R = @GNULIB_STRTOK_R@ GNULIB_STRVERSCMP = @GNULIB_STRVERSCMP@ GNULIB_SYMLINK = @GNULIB_SYMLINK@ GNULIB_SYMLINKAT = @GNULIB_SYMLINKAT@ GNULIB_TMPFILE = @GNULIB_TMPFILE@ GNULIB_TTYNAME_R = @GNULIB_TTYNAME_R@ GNULIB_UNISTD_H_NONBLOCKING = @GNULIB_UNISTD_H_NONBLOCKING@ GNULIB_UNISTD_H_SIGPIPE = @GNULIB_UNISTD_H_SIGPIPE@ GNULIB_UNLINK = @GNULIB_UNLINK@ GNULIB_UNLINKAT = @GNULIB_UNLINKAT@ GNULIB_USLEEP = @GNULIB_USLEEP@ GNULIB_VASPRINTF = @GNULIB_VASPRINTF@ GNULIB_VDPRINTF = @GNULIB_VDPRINTF@ GNULIB_VFPRINTF = @GNULIB_VFPRINTF@ GNULIB_VFPRINTF_POSIX = @GNULIB_VFPRINTF_POSIX@ GNULIB_VFSCANF = @GNULIB_VFSCANF@ GNULIB_VPRINTF = @GNULIB_VPRINTF@ GNULIB_VPRINTF_POSIX = @GNULIB_VPRINTF_POSIX@ GNULIB_VSCANF = @GNULIB_VSCANF@ GNULIB_VSNPRINTF = @GNULIB_VSNPRINTF@ GNULIB_VSPRINTF_POSIX = @GNULIB_VSPRINTF_POSIX@ GNULIB_WRITE = @GNULIB_WRITE@ GREP = @GREP@ GTKDOC_CHECK = @GTKDOC_CHECK@ GTKDOC_MKPDF = @GTKDOC_MKPDF@ GTKDOC_REBASE = @GTKDOC_REBASE@ HAVE_CHOWN = @HAVE_CHOWN@ HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@ HAVE_DECL_FCHDIR = @HAVE_DECL_FCHDIR@ HAVE_DECL_FDATASYNC = @HAVE_DECL_FDATASYNC@ HAVE_DECL_FPURGE = @HAVE_DECL_FPURGE@ HAVE_DECL_FSEEKO = @HAVE_DECL_FSEEKO@ HAVE_DECL_FTELLO = @HAVE_DECL_FTELLO@ HAVE_DECL_GETDELIM = @HAVE_DECL_GETDELIM@ HAVE_DECL_GETDOMAINNAME = @HAVE_DECL_GETDOMAINNAME@ HAVE_DECL_GETLINE = @HAVE_DECL_GETLINE@ HAVE_DECL_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_OBSTACK_PRINTF = @HAVE_DECL_OBSTACK_PRINTF@ HAVE_DECL_SETHOSTNAME = @HAVE_DECL_SETHOSTNAME@ HAVE_DECL_SNPRINTF = @HAVE_DECL_SNPRINTF@ HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@ HAVE_DECL_STRERROR_R = @HAVE_DECL_STRERROR_R@ HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@ HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@ HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@ HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@ HAVE_DECL_TTYNAME_R = @HAVE_DECL_TTYNAME_R@ HAVE_DECL_VSNPRINTF = @HAVE_DECL_VSNPRINTF@ HAVE_DPRINTF = @HAVE_DPRINTF@ HAVE_DUP2 = @HAVE_DUP2@ HAVE_DUP3 = @HAVE_DUP3@ HAVE_EUIDACCESS = @HAVE_EUIDACCESS@ HAVE_FACCESSAT = @HAVE_FACCESSAT@ HAVE_FCHDIR = @HAVE_FCHDIR@ HAVE_FCHOWNAT = @HAVE_FCHOWNAT@ HAVE_FDATASYNC = @HAVE_FDATASYNC@ HAVE_FFSL = @HAVE_FFSL@ HAVE_FFSLL = @HAVE_FFSLL@ HAVE_FSEEKO = @HAVE_FSEEKO@ HAVE_FSYNC = @HAVE_FSYNC@ HAVE_FTELLO = @HAVE_FTELLO@ HAVE_FTRUNCATE = @HAVE_FTRUNCATE@ 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_GROUP_MEMBER = @HAVE_GROUP_MEMBER@ HAVE_LCHOWN = @HAVE_LCHOWN@ HAVE_LIBSHISHI = @HAVE_LIBSHISHI@ HAVE_LINK = @HAVE_LINK@ HAVE_LINKAT = @HAVE_LINKAT@ HAVE_MBSLEN = @HAVE_MBSLEN@ HAVE_MEMCHR = @HAVE_MEMCHR@ HAVE_MEMPCPY = @HAVE_MEMPCPY@ HAVE_MSVC_INVALID_PARAMETER_HANDLER = @HAVE_MSVC_INVALID_PARAMETER_HANDLER@ HAVE_OS_H = @HAVE_OS_H@ HAVE_PCLOSE = @HAVE_PCLOSE@ HAVE_PIPE = @HAVE_PIPE@ HAVE_PIPE2 = @HAVE_PIPE2@ HAVE_POPEN = @HAVE_POPEN@ HAVE_PREAD = @HAVE_PREAD@ HAVE_PWRITE = @HAVE_PWRITE@ HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@ HAVE_READLINK = @HAVE_READLINK@ HAVE_READLINKAT = @HAVE_READLINKAT@ HAVE_RENAMEAT = @HAVE_RENAMEAT@ HAVE_SETHOSTNAME = @HAVE_SETHOSTNAME@ HAVE_SLEEP = @HAVE_SLEEP@ 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_STRVERSCMP = @HAVE_STRVERSCMP@ HAVE_SYMLINK = @HAVE_SYMLINK@ HAVE_SYMLINKAT = @HAVE_SYMLINKAT@ HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@ HAVE_UNISTD_H = @HAVE_UNISTD_H@ HAVE_UNLINKAT = @HAVE_UNLINKAT@ HAVE_USLEEP = @HAVE_USLEEP@ HAVE_VASPRINTF = @HAVE_VASPRINTF@ HAVE_VDPRINTF = @HAVE_VDPRINTF@ HAVE_WCHAR_T = @HAVE_WCHAR_T@ HAVE_WINSOCK2_H = @HAVE_WINSOCK2_H@ HAVE__BOOL = @HAVE__BOOL@ HELP2MAN = @HELP2MAN@ HTML_DIR = @HTML_DIR@ INCLUDE_GSS_KRB5 = @INCLUDE_GSS_KRB5@ INCLUDE_GSS_KRB5_EXT = @INCLUDE_GSS_KRB5_EXT@ 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@ INTLLIBS = @INTLLIBS@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBOBJS = @LIBOBJS@ LIBS = @LIBS@ LIBSHISHI = @LIBSHISHI@ LIBSHISHI_PREFIX = @LIBSHISHI_PREFIX@ LIBTOOL = @LIBTOOL@ LIPO = @LIPO@ LN_S = @LN_S@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBOBJS = @LTLIBOBJS@ LTLIBSHISHI = @LTLIBSHISHI@ LT_AGE = @LT_AGE@ LT_CURRENT = @LT_CURRENT@ LT_REVISION = @LT_REVISION@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = @NEXT_AS_FIRST_DIRECTIVE_ERRNO_H@ NEXT_AS_FIRST_DIRECTIVE_GETOPT_H = @NEXT_AS_FIRST_DIRECTIVE_GETOPT_H@ NEXT_AS_FIRST_DIRECTIVE_STDARG_H = @NEXT_AS_FIRST_DIRECTIVE_STDARG_H@ NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@ NEXT_AS_FIRST_DIRECTIVE_STDIO_H = @NEXT_AS_FIRST_DIRECTIVE_STDIO_H@ NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H@ NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@ NEXT_ERRNO_H = @NEXT_ERRNO_H@ NEXT_GETOPT_H = @NEXT_GETOPT_H@ NEXT_STDARG_H = @NEXT_STDARG_H@ NEXT_STDDEF_H = @NEXT_STDDEF_H@ NEXT_STDIO_H = @NEXT_STDIO_H@ NEXT_STRING_H = @NEXT_STRING_H@ NEXT_SYS_TYPES_H = @NEXT_SYS_TYPES_H@ NEXT_UNISTD_H = @NEXT_UNISTD_H@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PATH_SEPARATOR = @PATH_SEPARATOR@ PERL = @PERL@ PKG_CONFIG = @PKG_CONFIG@ PMCCABE = @PMCCABE@ POSUB = @POSUB@ PO_SUFFIX = @PO_SUFFIX@ PRAGMA_COLUMNS = @PRAGMA_COLUMNS@ PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@ RANLIB = @RANLIB@ REPLACE_CHOWN = @REPLACE_CHOWN@ REPLACE_CLOSE = @REPLACE_CLOSE@ REPLACE_DPRINTF = @REPLACE_DPRINTF@ REPLACE_DUP = @REPLACE_DUP@ REPLACE_DUP2 = @REPLACE_DUP2@ REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@ REPLACE_FCLOSE = @REPLACE_FCLOSE@ REPLACE_FDOPEN = @REPLACE_FDOPEN@ REPLACE_FFLUSH = @REPLACE_FFLUSH@ REPLACE_FOPEN = @REPLACE_FOPEN@ REPLACE_FPRINTF = @REPLACE_FPRINTF@ REPLACE_FPURGE = @REPLACE_FPURGE@ REPLACE_FREOPEN = @REPLACE_FREOPEN@ REPLACE_FSEEK = @REPLACE_FSEEK@ REPLACE_FSEEKO = @REPLACE_FSEEKO@ REPLACE_FTELL = @REPLACE_FTELL@ REPLACE_FTELLO = @REPLACE_FTELLO@ REPLACE_FTRUNCATE = @REPLACE_FTRUNCATE@ REPLACE_GETCWD = @REPLACE_GETCWD@ REPLACE_GETDELIM = @REPLACE_GETDELIM@ REPLACE_GETDOMAINNAME = @REPLACE_GETDOMAINNAME@ REPLACE_GETDTABLESIZE = @REPLACE_GETDTABLESIZE@ REPLACE_GETGROUPS = @REPLACE_GETGROUPS@ REPLACE_GETLINE = @REPLACE_GETLINE@ REPLACE_GETLOGIN_R = @REPLACE_GETLOGIN_R@ REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@ REPLACE_ISATTY = @REPLACE_ISATTY@ REPLACE_LCHOWN = @REPLACE_LCHOWN@ REPLACE_LINK = @REPLACE_LINK@ REPLACE_LINKAT = @REPLACE_LINKAT@ REPLACE_LSEEK = @REPLACE_LSEEK@ REPLACE_MEMCHR = @REPLACE_MEMCHR@ REPLACE_MEMMEM = @REPLACE_MEMMEM@ REPLACE_NULL = @REPLACE_NULL@ REPLACE_OBSTACK_PRINTF = @REPLACE_OBSTACK_PRINTF@ REPLACE_PERROR = @REPLACE_PERROR@ REPLACE_POPEN = @REPLACE_POPEN@ REPLACE_PREAD = @REPLACE_PREAD@ REPLACE_PRINTF = @REPLACE_PRINTF@ REPLACE_PWRITE = @REPLACE_PWRITE@ REPLACE_READ = @REPLACE_READ@ REPLACE_READLINK = @REPLACE_READLINK@ REPLACE_REMOVE = @REPLACE_REMOVE@ REPLACE_RENAME = @REPLACE_RENAME@ REPLACE_RENAMEAT = @REPLACE_RENAMEAT@ REPLACE_RMDIR = @REPLACE_RMDIR@ REPLACE_SLEEP = @REPLACE_SLEEP@ REPLACE_SNPRINTF = @REPLACE_SNPRINTF@ REPLACE_SPRINTF = @REPLACE_SPRINTF@ REPLACE_STDIO_READ_FUNCS = @REPLACE_STDIO_READ_FUNCS@ REPLACE_STDIO_WRITE_FUNCS = @REPLACE_STDIO_WRITE_FUNCS@ REPLACE_STPNCPY = @REPLACE_STPNCPY@ REPLACE_STRCASESTR = @REPLACE_STRCASESTR@ REPLACE_STRCHRNUL = @REPLACE_STRCHRNUL@ REPLACE_STRDUP = @REPLACE_STRDUP@ REPLACE_STRERROR = @REPLACE_STRERROR@ REPLACE_STRERROR_R = @REPLACE_STRERROR_R@ REPLACE_STRNCAT = @REPLACE_STRNCAT@ REPLACE_STRNDUP = @REPLACE_STRNDUP@ REPLACE_STRNLEN = @REPLACE_STRNLEN@ REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@ REPLACE_STRSTR = @REPLACE_STRSTR@ REPLACE_STRTOK_R = @REPLACE_STRTOK_R@ REPLACE_SYMLINK = @REPLACE_SYMLINK@ REPLACE_TMPFILE = @REPLACE_TMPFILE@ REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@ REPLACE_UNLINK = @REPLACE_UNLINK@ REPLACE_UNLINKAT = @REPLACE_UNLINKAT@ REPLACE_USLEEP = @REPLACE_USLEEP@ REPLACE_VASPRINTF = @REPLACE_VASPRINTF@ REPLACE_VDPRINTF = @REPLACE_VDPRINTF@ REPLACE_VFPRINTF = @REPLACE_VFPRINTF@ REPLACE_VPRINTF = @REPLACE_VPRINTF@ REPLACE_VSNPRINTF = @REPLACE_VSNPRINTF@ REPLACE_VSPRINTF = @REPLACE_VSPRINTF@ REPLACE_WRITE = @REPLACE_WRITE@ SED = @SED@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ STDARG_H = @STDARG_H@ STDBOOL_H = @STDBOOL_H@ STDDEF_H = @STDDEF_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@ USE_NLS = @USE_NLS@ VALGRIND = @VALGRIND@ VERSION = @VERSION@ VERSION_MAJOR = @VERSION_MAJOR@ VERSION_MINOR = @VERSION_MINOR@ VERSION_NUMBER = @VERSION_NUMBER@ VERSION_PATCH = @VERSION_PATCH@ WARN_CFLAGS = @WARN_CFLAGS@ WERROR_CFLAGS = @WERROR_CFLAGS@ WINDOWS_64_BIT_OFF_T = @WINDOWS_64_BIT_OFF_T@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gl_LIBOBJS = @gl_LIBOBJS@ gl_LTLIBOBJS = @gl_LTLIBOBJS@ gltests_LIBOBJS = @gltests_LIBOBJS@ gltests_LTLIBOBJS = @gltests_LTLIBOBJS@ gltests_WITNESS = @gltests_WITNESS@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ libgl_LIBOBJS = @libgl_LIBOBJS@ libgl_LTLIBOBJS = @libgl_LTLIBOBJS@ libgltests_LIBOBJS = @libgltests_LIBOBJS@ libgltests_LTLIBOBJS = @libgltests_LTLIBOBJS@ libgltests_WITNESS = @libgltests_WITNESS@ localedir = @localedir@ localstatedir = @localstatedir@ 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@ srcgl_LIBOBJS = @srcgl_LIBOBJS@ srcgl_LTLIBOBJS = @srcgl_LTLIBOBJS@ srcgltests_LIBOBJS = @srcgltests_LIBOBJS@ srcgltests_LTLIBOBJS = @srcgltests_LTLIBOBJS@ srcgltests_WITNESS = @srcgltests_WITNESS@ 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 = cfg.mk maint.mk .clcopying po/Makevars.in DISTCLEANFILES = po/Makevars pkgconfigdir = $(libdir)/pkgconfig pkgconfig_DATA = gss.pc SUBDIRS = po gl lib src tests doc ACLOCAL_AMFLAGS = -I m4 -I gl/m4 -I lib/gl/m4 -I src/gl/m4 all: config.h $(MAKE) $(AM_MAKEFLAGS) all-recursive .SUFFIXES: am--refresh: Makefile @: $(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 @test -f $@ || rm -f stamp-h1 @test -f $@ || $(MAKE) $(AM_MAKEFLAGS) stamp-h1 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 gss.pc: $(top_builddir)/config.status $(srcdir)/gss.pc.in cd $(top_builddir) && $(SHELL) ./config.status $@ lib/headers/gss.h: $(top_builddir)/config.status $(top_srcdir)/lib/headers/gss.h.in cd $(top_builddir) && $(SHELL) ./config.status $@ mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs distclean-libtool: -rm -f libtool config.lt install-pkgconfigDATA: $(pkgconfig_DATA) @$(NORMAL_INSTALL) @list='$(pkgconfig_DATA)'; test -n "$(pkgconfigdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(pkgconfigdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(pkgconfigdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(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|^.*/||'`; \ dir='$(DESTDIR)$(pkgconfigdir)'; $(am__uninstall_files_from_dir) # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscope: cscope.files test ! -s cscope.files \ || $(CSCOPE) -b -q $(AM_CSCOPEFLAGS) $(CSCOPEFLAGS) -i cscope.files $(CSCOPE_ARGS) clean-cscope: -rm -f cscope.files cscope.files: clean-cscope cscopelist cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags -rm -f cscope.out cscope.in.out cscope.po.out cscope.files 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 \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done -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__post_remove_distdir) dist-bzip2: distdir tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2 $(am__post_remove_distdir) dist-lzip: distdir tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz $(am__post_remove_distdir) dist-xz: distdir tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz $(am__post_remove_distdir) dist-tarZ: distdir @echo WARNING: "Support for shar distribution archives is" \ "deprecated." >&2 @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z $(am__post_remove_distdir) dist-shar: distdir @echo WARNING: "Support for distribution archives compressed with" \ "legacy program 'compress' is deprecated." >&2 @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 shar $(distdir) | GZIP=$(GZIP_ENV) gzip -c >$(distdir).shar.gz $(am__post_remove_distdir) dist-zip: distdir -rm -f $(distdir).zip zip -rq $(distdir).zip $(distdir) $(am__post_remove_distdir) dist dist-all: $(MAKE) $(AM_MAKEFLAGS) $(DIST_TARGETS) am__post_remove_distdir='@:' $(am__post_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.lz*) \ lzip -dc $(distdir).tar.lz | $(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 u+w $(distdir) mkdir $(distdir)/_build $(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 \ $(AM_DISTCHECK_CONFIGURE_FLAGS) \ $(DISTCHECK_CONFIGURE_FLAGS) \ --srcdir=.. --prefix="$$dc_install_base" \ && $(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__post_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: @test -n '$(distuninstallcheck_dir)' || { \ echo 'ERROR: trying to run $@ with an empty' \ '$$(distuninstallcheck_dir)' >&2; \ exit 1; \ }; \ $(am__cd) '$(distuninstallcheck_dir)' || { \ echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \ exit 1; \ }; \ test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \ || { 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 $(DATA) config.h installdirs: installdirs-recursive installdirs-am: for dir in "$(DESTDIR)$(pkgconfigdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) -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." 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-pkgconfigDATA 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: uninstall-pkgconfigDATA .MAKE: $(am__recursive_targets) all install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \ am--refresh check check-am clean clean-cscope clean-generic \ clean-libtool cscope cscopelist-am ctags ctags-am dist \ dist-all dist-bzip2 dist-gzip dist-lzip 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-pkgconfigDATA \ 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-am uninstall \ uninstall-am 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: gss-1.0.3/aclocal.m40000644000000000000000000013136512415507616011056 00000000000000# generated automatically by aclocal 1.14.1 -*- Autoconf -*- # Copyright (C) 1996-2013 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_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])]) m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.69],, [m4_warning([this file was generated for autoconf 2.69. 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-2013 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.14' 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.14.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.14.1])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # Copyright (C) 2011-2013 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_AR([ACT-IF-FAIL]) # ------------------------- # Try to determine the archiver interface, and trigger the ar-lib wrapper # if it is needed. If the detection of archiver interface fails, run # ACT-IF-FAIL (default is to abort configure with a proper error message). AC_DEFUN([AM_PROG_AR], [AC_BEFORE([$0], [LT_INIT])dnl AC_BEFORE([$0], [AC_PROG_LIBTOOL])dnl AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([ar-lib])dnl AC_CHECK_TOOLS([AR], [ar lib "link -lib"], [false]) : ${AR=ar} AC_CACHE_CHECK([the archiver ($AR) interface], [am_cv_ar_interface], [AC_LANG_PUSH([C]) am_cv_ar_interface=ar AC_COMPILE_IFELSE([AC_LANG_SOURCE([[int some_variable = 0;]])], [am_ar_try='$AR cru libconftest.a conftest.$ac_objext >&AS_MESSAGE_LOG_FD' AC_TRY_EVAL([am_ar_try]) if test "$ac_status" -eq 0; then am_cv_ar_interface=ar else am_ar_try='$AR -NOLOGO -OUT:conftest.lib conftest.$ac_objext >&AS_MESSAGE_LOG_FD' AC_TRY_EVAL([am_ar_try]) if test "$ac_status" -eq 0; then am_cv_ar_interface=lib else am_cv_ar_interface=unknown fi fi rm -f conftest.lib libconftest.a ]) AC_LANG_POP([C])]) case $am_cv_ar_interface in ar) ;; lib) # Microsoft lib, so override with the ar-lib wrapper script. # FIXME: It is wrong to rewrite AR. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__AR in this case, # and then we could set am__AR="$am_aux_dir/ar-lib \$(AR)" or something # similar. AR="$am_aux_dir/ar-lib $AR" ;; unknown) m4_default([$1], [AC_MSG_ERROR([could not determine $AR interface])]) ;; esac AC_SUBST([AR])dnl ]) # AM_AUX_DIR_EXPAND -*- Autoconf -*- # Copyright (C) 2001-2013 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-2013 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_CONDITIONAL(NAME, SHELL-CONDITION) # ------------------------------------- # Define a conditional. AC_DEFUN([AM_CONDITIONAL], [AC_PREREQ([2.52])dnl m4_if([$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-2013 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. # 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", "OBJC", "OBJCXX", "UPC", or "GJC". # 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 m4_if([$1], [CC], [depcc="$CC" am_compiler_list=], [$1], [CXX], [depcc="$CXX" am_compiler_list=], [$1], [OBJC], [depcc="$OBJC" am_compiler_list='gcc3 gcc'], [$1], [OBJCXX], [depcc="$OBJCXX" 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". rm -rf conftest.dir 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 10 /bin/sh. echo '/* dummy */' > 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 ;; msvc7 | msvc7msys | 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], [dnl AS_HELP_STRING( [--enable-dependency-tracking], [do not reject slow dependency extractors]) AS_HELP_STRING( [--disable-dependency-tracking], [speeds up one-time build])]) if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' am__nodep='_no' fi AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) AC_SUBST([AMDEPBACKSLASH])dnl _AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl AC_SUBST([am__nodep])dnl _AM_SUBST_NOTMAKE([am__nodep])dnl ]) # Generate code to set up dependency tracking. -*- Autoconf -*- # Copyright (C) 1999-2013 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_OUTPUT_DEPENDENCY_COMMANDS # ------------------------------ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], [{ # Older Autoconf 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"` # 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'`; 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-2013 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 macro actually does too much. Some checks are only needed if # your package does certain things. But this isn't really a big deal. dnl Redefine AC_PROG_CC to automatically invoke _AM_PROG_CC_C_O. m4_define([AC_PROG_CC], m4_defn([AC_PROG_CC]) [_AM_PROG_CC_C_O ]) # 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.65])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], [AC_DIAGNOSE([obsolete], [$0: two- and three-arguments forms are deprecated.]) 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], [ok]):m4_ifdef([AC_PACKAGE_VERSION], [ok]), [ok:ok],, [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([AC_PROG_MKDIR_P])dnl # For better backward compatibility. To be removed once Automake 1.9.x # dies out for good. For more background, see: # # AC_SUBST([mkdir_p], ['$(MKDIR_P)']) # 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])], [m4_define([AC_PROG_CC], m4_defn([AC_PROG_CC])[_AM_DEPENDENCIES([CC])])])dnl AC_PROVIDE_IFELSE([AC_PROG_CXX], [_AM_DEPENDENCIES([CXX])], [m4_define([AC_PROG_CXX], m4_defn([AC_PROG_CXX])[_AM_DEPENDENCIES([CXX])])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJC], [_AM_DEPENDENCIES([OBJC])], [m4_define([AC_PROG_OBJC], m4_defn([AC_PROG_OBJC])[_AM_DEPENDENCIES([OBJC])])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJCXX], [_AM_DEPENDENCIES([OBJCXX])], [m4_define([AC_PROG_OBJCXX], m4_defn([AC_PROG_OBJCXX])[_AM_DEPENDENCIES([OBJCXX])])])dnl ]) AC_REQUIRE([AM_SILENT_RULES])dnl dnl The testsuite driver may need to know about EXEEXT, so add the dnl 'am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This dnl macro 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 # POSIX will say in a future version that running "rm -f" with no argument # is OK; and we want to be able to make that assumption in our Makefile # recipes. So use an aggressive probe to check that the usage we want is # actually supported "in the wild" to an acceptable degree. # See automake bug#10828. # To make any issue more visible, cause the running configure to be aborted # by default if the 'rm' program in use doesn't match our expectations; the # user can still override this though. if rm -f && rm -fr && rm -rf; then : OK; else cat >&2 <<'END' Oops! Your 'rm' program seems unable to run without file operands specified on the command line, even when the '-f' option is present. This is contrary to the behaviour of most rm programs out there, and not conforming with the upcoming POSIX standard: Please tell bug-automake@gnu.org about your system, including the value of your $PATH and any error possibly output before this message. This can help us improve future automake versions. END if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then echo 'Configuration will proceed anyway, since you have set the' >&2 echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2 echo >&2 else cat >&2 <<'END' Aborting the configuration process, to ensure you take notice of the issue. You can download and install GNU coreutils to get an 'rm' implementation that behaves properly: . If you want to complete the configuration process using your problematic 'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM to "yes", and re-run configure. END AC_MSG_ERROR([Your 'rm' program is bad, sorry.]) fi fi ]) 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-2013 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-2013 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. # 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-2013 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_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-2013 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_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 is modern enough. # If it is, 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 --is-lightweight"; then am_missing_run="$MISSING " else am_missing_run= AC_MSG_WARN(['missing' script is too old or missing]) fi ]) # Helper functions for option handling. -*- Autoconf -*- # Copyright (C) 2001-2013 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_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])]) # Copyright (C) 1999-2013 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_CC_C_O # --------------- # Like AC_PROG_CC_C_O, but changed for automake. We rewrite AC_PROG_CC # to automatically call this. AC_DEFUN([_AM_PROG_CC_C_O], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([compile])dnl AC_LANG_PUSH([C])dnl AC_CACHE_CHECK( [whether $CC understands -c and -o together], [am_cv_prog_cc_c_o], [AC_LANG_CONFTEST([AC_LANG_PROGRAM([])]) # Make sure it works both with $CC and with simple cc. # Following AC_PROG_CC_C_O, we do the test twice because some # compilers refuse to overwrite an existing .o file with -o, # though they will create one. am_cv_prog_cc_c_o=yes for am_i in 1 2; do if AM_RUN_LOG([$CC -c conftest.$ac_ext -o conftest2.$ac_objext]) \ && test -f conftest2.$ac_objext; then : OK else am_cv_prog_cc_c_o=no break fi done rm -f core conftest* unset am_i]) if test "$am_cv_prog_cc_c_o" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__CC in this case, # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" CC="$am_aux_dir/compile $CC" fi AC_LANG_POP([C])]) # For backward compatibility. AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])]) # Copyright (C) 2001-2013 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_RUN_LOG(COMMAND) # ------------------- # Run COMMAND, save the exit status in ac_status, and log it. # (This has been adapted from Autoconf's _AC_RUN_LOG macro.) AC_DEFUN([AM_RUN_LOG], [{ echo "$as_me:$LINENO: $1" >&AS_MESSAGE_LOG_FD ($1) >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD (exit $ac_status); }]) # Check to make sure that the build environment is sane. -*- Autoconf -*- # Copyright (C) 1996-2013 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_SANITY_CHECK # --------------- AC_DEFUN([AM_SANITY_CHECK], [AC_MSG_CHECKING([whether build environment is sane]) # 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 ( am_has_slept=no for am_try in 1 2; do echo "timestamp, slept: $am_has_slept" > conftest.file 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 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 if test "$[2]" = conftest.file || test $am_try -eq 2; then break fi # Just in case. sleep 1 am_has_slept=yes done 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]) # If we didn't sleep, we still need to ensure time stamps of config.status and # generated files are strictly newer. am_sleep_pid= if grep 'slept: no' conftest.file >/dev/null 2>&1; then ( sleep 1 ) & am_sleep_pid=$! fi AC_CONFIG_COMMANDS_PRE( [AC_MSG_CHECKING([that generated files are newer than configure]) if test -n "$am_sleep_pid"; then # Hide warnings about reused PIDs. wait $am_sleep_pid 2>/dev/null fi AC_MSG_RESULT([done])]) rm -f conftest.file ]) # Copyright (C) 2009-2013 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_SILENT_RULES([DEFAULT]) # -------------------------- # Enable less verbose build rules; with the default set to DEFAULT # ("yes" being less verbose, "no" or empty being verbose). AC_DEFUN([AM_SILENT_RULES], [AC_ARG_ENABLE([silent-rules], [dnl AS_HELP_STRING( [--enable-silent-rules], [less verbose build output (undo: "make V=1")]) AS_HELP_STRING( [--disable-silent-rules], [verbose build output (undo: "make V=0")])dnl ]) case $enable_silent_rules in @%:@ ((( yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);; esac dnl dnl A few 'make' implementations (e.g., NonStop OS and NextStep) dnl do not support nested variable expansions. dnl See automake bug#9928 and bug#10237. am_make=${MAKE-make} AC_CACHE_CHECK([whether $am_make supports nested variables], [am_cv_make_support_nested_variables], [if AS_ECHO([['TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit']]) | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi]) if test $am_cv_make_support_nested_variables = yes; then dnl Using '$V' instead of '$(V)' breaks IRIX make. AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi AC_SUBST([AM_V])dnl AM_SUBST_NOTMAKE([AM_V])dnl AC_SUBST([AM_DEFAULT_V])dnl AM_SUBST_NOTMAKE([AM_DEFAULT_V])dnl AC_SUBST([AM_DEFAULT_VERBOSITY])dnl AM_BACKSLASH='\' AC_SUBST([AM_BACKSLASH])dnl _AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl ]) # Copyright (C) 2001-2013 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-2013 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_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-2013 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_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. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AC_SUBST([AMTAR], ['$${TAR-tar}']) # We'll loop over all known methods to create a tar archive until one works. _am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' m4_if([$1], [v7], [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'], [m4_case([$1], [ustar], [# The POSIX 1988 'ustar' format is defined with fixed-size fields. # There is notably a 21 bits limit for the UID and the GID. In fact, # the 'pax' utility can hang on bigger UID/GID (see automake bug#8343 # and bug#13588). am_max_uid=2097151 # 2^21 - 1 am_max_gid=$am_max_uid # The $UID and $GID variables are not portable, so we need to resort # to the POSIX-mandated id(1) utility. Errors in the 'id' calls # below are definitely unexpected, so allow the users to see them # (that is, avoid stderr redirection). am_uid=`id -u || echo unknown` am_gid=`id -g || echo unknown` AC_MSG_CHECKING([whether UID '$am_uid' is supported by ustar format]) if test $am_uid -le $am_max_uid; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) _am_tools=none fi AC_MSG_CHECKING([whether GID '$am_gid' is supported by ustar format]) if test $am_gid -le $am_max_gid; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) _am_tools=none fi], [pax], [], [m4_fatal([Unknown tar format])]) AC_MSG_CHECKING([how to create a $1 tar archive]) # Go ahead even if we have the value already cached. We do so because we # need to set the values for the 'am__tar' and 'am__untar' variables. _am_tools=${am_cv_prog_tar_$1-$_am_tools} 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 /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([src/gl/m4/base64.m4]) m4_include([src/gl/m4/errno_h.m4]) m4_include([src/gl/m4/error.m4]) m4_include([src/gl/m4/getopt.m4]) m4_include([src/gl/m4/gnulib-comp.m4]) m4_include([src/gl/m4/memchr.m4]) m4_include([src/gl/m4/mmap-anon.m4]) m4_include([src/gl/m4/msvc-inval.m4]) m4_include([src/gl/m4/msvc-nothrow.m4]) m4_include([src/gl/m4/nocrash.m4]) m4_include([src/gl/m4/off_t.m4]) m4_include([src/gl/m4/ssize_t.m4]) m4_include([src/gl/m4/stdarg.m4]) m4_include([src/gl/m4/stdbool.m4]) m4_include([src/gl/m4/stdio_h.m4]) m4_include([src/gl/m4/strerror.m4]) m4_include([src/gl/m4/sys_socket_h.m4]) m4_include([src/gl/m4/sys_types_h.m4]) m4_include([src/gl/m4/unistd_h.m4]) m4_include([src/gl/m4/version-etc.m4]) m4_include([lib/gl/m4/absolute-header.m4]) m4_include([lib/gl/m4/extensions.m4]) m4_include([lib/gl/m4/gnulib-comp.m4]) m4_include([lib/gl/m4/include_next.m4]) m4_include([lib/gl/m4/ld-output-def.m4]) m4_include([lib/gl/m4/stddef_h.m4]) m4_include([lib/gl/m4/string_h.m4]) m4_include([lib/gl/m4/strverscmp.m4]) m4_include([lib/gl/m4/warn-on-use.m4]) m4_include([gl/m4/00gnulib.m4]) m4_include([gl/m4/autobuild.m4]) m4_include([gl/m4/gnulib-common.m4]) m4_include([gl/m4/gnulib-comp.m4]) m4_include([gl/m4/ld-version-script.m4]) m4_include([gl/m4/manywarnings.m4]) m4_include([gl/m4/valgrind-tests.m4]) m4_include([gl/m4/warnings.m4]) m4_include([m4/extern-inline.m4]) m4_include([m4/gettext.m4]) m4_include([m4/gtk-doc.m4]) m4_include([m4/iconv.m4]) m4_include([m4/intlmacosx.m4]) m4_include([m4/lib-ld.m4]) m4_include([m4/lib-link.m4]) m4_include([m4/lib-prefix.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/nls.m4]) m4_include([m4/pkg.m4]) m4_include([m4/po-suffix.m4]) m4_include([m4/po.m4]) m4_include([m4/progtest.m4]) m4_include([m4/wchar_t.m4]) gss-1.0.3/ChangeLog0000644000000000000000000060301612415510375010761 000000000000002014-10-09 Simon Josefsson * cfg.mk: Fix web rule. 2014-10-09 Simon Josefsson * cfg.mk, src/gss.c: Fix syntax check nits. 2014-10-09 Simon Josefsson * configure.ac: Autoconf fixes. 2014-10-09 Simon Josefsson * cfg.mk: Fix make warning. 2014-10-09 Simon Josefsson * NEWS: Version 1.0.3. 2014-10-09 Simon Josefsson * AUTHORS, cfg.mk: PGP key fixes. 2014-10-09 Simon Josefsson * .clcopying, AUTHORS, ChangeLog, Makefile.am, NEWS, README, README-alpha, THANKS, cfg.mk, doc/Makefile.am, doc/Makefile.gdoci, doc/cyclo/Makefile.am, doc/gdoc, doc/gss.texi, gss.pc.in, lib/Makefile.am, lib/asn1.c, lib/context.c, lib/cred.c, lib/error.c, lib/ext.c, lib/headers/gss.h.in, lib/headers/gss/ext.h, lib/headers/gss/krb5-ext.h, lib/headers/gss/krb5.h, lib/internal.h, lib/krb5/Makefile.am, lib/krb5/checksum.c, lib/krb5/checksum.h, lib/krb5/context.c, lib/krb5/cred.c, lib/krb5/error.c, lib/krb5/k5internal.h, lib/krb5/msg.c, lib/krb5/name.c, lib/krb5/oid.c, lib/krb5/protos.h, lib/krb5/utils.c, lib/libgss.map, lib/meta.c, lib/meta.h, lib/misc.c, lib/msg.c, lib/name.c, lib/obsolete.c, lib/oid.c, lib/saslname.c, lib/version.c, src/Makefile.am, src/gss.c, src/gss.ggo, tests/Makefile.am, tests/basic.c, tests/krb5context.c, tests/saslname.c, tests/threadsafety: Update copyright files. 2014-10-09 Simon Josefsson * po/LINGUAS, po/de.po.in, po/hu.po.in: Sync with TP. 2014-10-09 Simon Josefsson * configure.ac: Fix. 2014-10-09 Simon Josefsson * GNUmakefile, build-aux/config.rpath, build-aux/gendocs.sh, build-aux/gnupload, build-aux/pmccabe2html, build-aux/snippet/arg-nonnull.h, build-aux/snippet/c++defs.h, build-aux/snippet/warn-on-use.h, build-aux/update-copyright, build-aux/useless-if-before-free, build-aux/vc-list-files, doc/fdl-1.3.texi, doc/gendocs_template, gl/Makefile.am, gl/dummy.c, gl/m4/00gnulib.m4, gl/m4/autobuild.m4, gl/m4/gnulib-cache.m4, gl/m4/gnulib-common.m4, gl/m4/gnulib-comp.m4, gl/m4/gnulib-tool.m4, gl/m4/ld-version-script.m4, gl/m4/lib-ld.m4, gl/m4/lib-link.m4, gl/m4/lib-prefix.m4, gl/m4/manywarnings.m4, gl/m4/valgrind-tests.m4, gl/m4/warnings.m4, lib/gl/Makefile.am, lib/gl/dummy.c, lib/gl/gettext.h, lib/gl/m4/00gnulib.m4, lib/gl/m4/absolute-header.m4, lib/gl/m4/extensions.m4, lib/gl/m4/extern-inline.m4, lib/gl/m4/gnulib-cache.m4, lib/gl/m4/gnulib-common.m4, lib/gl/m4/gnulib-comp.m4, lib/gl/m4/gnulib-tool.m4, lib/gl/m4/include_next.m4, lib/gl/m4/ld-output-def.m4, lib/gl/m4/stddef_h.m4, lib/gl/m4/string_h.m4, lib/gl/m4/strverscmp.m4, lib/gl/m4/warn-on-use.m4, lib/gl/m4/wchar_t.m4, lib/gl/stddef.in.h, lib/gl/string.in.h, lib/gl/strverscmp.c, maint.mk, src/gl/Makefile.am, src/gl/base64.c, src/gl/base64.h, src/gl/errno.in.h, src/gl/error.c, src/gl/error.h, src/gl/getopt.c, src/gl/getopt.in.h, src/gl/getopt1.c, src/gl/getopt_int.h, src/gl/gettext.h, src/gl/intprops.h, src/gl/m4/00gnulib.m4, src/gl/m4/absolute-header.m4, src/gl/m4/base64.m4, src/gl/m4/errno_h.m4, src/gl/m4/error.m4, src/gl/m4/extensions.m4, src/gl/m4/extern-inline.m4, src/gl/m4/getopt.m4, src/gl/m4/gnulib-cache.m4, src/gl/m4/gnulib-common.m4, src/gl/m4/gnulib-comp.m4, src/gl/m4/gnulib-tool.m4, src/gl/m4/include_next.m4, src/gl/m4/memchr.m4, src/gl/m4/mmap-anon.m4, src/gl/m4/msvc-inval.m4, src/gl/m4/msvc-nothrow.m4, src/gl/m4/nocrash.m4, src/gl/m4/off_t.m4, src/gl/m4/ssize_t.m4, src/gl/m4/stdarg.m4, src/gl/m4/stdbool.m4, src/gl/m4/stddef_h.m4, src/gl/m4/stdio_h.m4, src/gl/m4/strerror.m4, src/gl/m4/string_h.m4, src/gl/m4/sys_socket_h.m4, src/gl/m4/sys_types_h.m4, src/gl/m4/unistd_h.m4, src/gl/m4/version-etc.m4, src/gl/m4/warn-on-use.m4, src/gl/m4/wchar_t.m4, src/gl/memchr.c, src/gl/msvc-inval.c, src/gl/msvc-inval.h, src/gl/msvc-nothrow.c, src/gl/msvc-nothrow.h, src/gl/progname.c, src/gl/progname.h, src/gl/stdarg.in.h, src/gl/stdbool.in.h, src/gl/stddef.in.h, src/gl/stdio.in.h, src/gl/strerror-override.c, src/gl/strerror-override.h, src/gl/strerror.c, src/gl/string.in.h, src/gl/sys_types.in.h, src/gl/unistd.c, src/gl/unistd.in.h, src/gl/verify.h, src/gl/version-etc.c, src/gl/version-etc.h: Update gnulib files. 2014-10-09 Simon Josefsson * lib/headers/gss/api.h: Simplify api.h copyright notice. 2012-09-06 Simon Josefsson * .clcopying, AUTHORS, ChangeLog, Makefile.am, NEWS, README, README-alpha, THANKS, cfg.mk, configure.ac, doc/Makefile.am, doc/Makefile.gdoci, doc/cyclo/Makefile.am, doc/gdoc, doc/gss.texi, gss.pc.in, lib/Makefile.am, lib/asn1.c, lib/context.c, lib/cred.c, lib/error.c, lib/ext.c, lib/headers/gss.h.in, lib/headers/gss/api.h, lib/headers/gss/ext.h, lib/headers/gss/krb5-ext.h, lib/headers/gss/krb5.h, lib/internal.h, lib/krb5/Makefile.am, lib/krb5/checksum.c, lib/krb5/checksum.h, lib/krb5/context.c, lib/krb5/cred.c, lib/krb5/error.c, lib/krb5/k5internal.h, lib/krb5/msg.c, lib/krb5/name.c, lib/krb5/oid.c, lib/krb5/protos.h, lib/krb5/utils.c, lib/libgss.map, lib/meta.c, lib/meta.h, lib/misc.c, lib/msg.c, lib/name.c, lib/obsolete.c, lib/oid.c, lib/saslname.c, lib/version.c, src/Makefile.am, src/gss.c, src/gss.ggo, tests/Makefile.am, tests/basic.c, tests/krb5context.c, tests/saslname.c, tests/threadsafety: Update copyright years. 2012-08-15 Simon Josefsson * src/gss.c: Doc fix. 2012-08-15 Simon Josefsson * doc/gss.texi: Doc fix. 2012-08-15 Simon Josefsson * src/gss.c, src/gss.ggo: gss: For accept, support flexible acquire_cred. 2012-08-14 Simon Josefsson * tests/saslname.c: Fix non-shishi builds. 2012-08-14 Simon Josefsson * lib/asn1.c, lib/context.c, lib/internal.h: Find mechanism by looking at context token. 2012-08-14 Simon Josefsson * .gitignore: Ignore more. 2012-08-14 Simon Josefsson * configure.ac: Cleanup ./configure output. 2012-08-14 Simon Josefsson * doc/reference/Makefile.am: Regenerate gtk-doc header ignore. 2012-08-14 Simon Josefsson * NEWS, doc/gss.texi, src/gss.c, src/gss.ggo: gss: Support security contexts. 2012-08-14 Simon Josefsson * lib/krb5/cred.c: acquire_cred: Don't crash on NULL desired_name. 2012-08-14 Simon Josefsson * lib/krb5/context.c: Don't crash on NULL target_name. 2012-08-14 Simon Josefsson * src/gl/Makefile.am, src/gl/base64.c, src/gl/base64.h, src/gl/m4/base64.m4, src/gl/m4/gnulib-cache.m4, src/gl/m4/gnulib-comp.m4, src/gl/m4/memchr.m4, src/gl/m4/mmap-anon.m4, src/gl/m4/stdbool.m4, src/gl/memchr.c, src/gl/memchr.valgrind, src/gl/stdbool.in.h, src/gss.c, src/gss.ggo: Add base64 gnulib module. 2012-08-14 Simon Josefsson * gl/Makefile.am, gl/m4/gnulib-cache.m4, gl/m4/gnulib-common.m4, lib/gl/m4/extensions.m4, lib/gl/m4/gnulib-cache.m4, lib/gl/m4/gnulib-common.m4, lib/gl/override/lib/gettext.h.diff, maint.mk, src/gl/m4/extensions.m4, src/gl/m4/getopt.m4, src/gl/m4/gnulib-cache.m4, src/gl/m4/gnulib-common.m4, src/gl/m4/nocrash.m4, src/gl/override/lib/gettext.h.diff, src/gl/unistd.in.h, src/gl/verify.h: Update gnulib files. 2012-08-13 Simon Josefsson * po/LINGUAS, po/hr.po.in: Sync with TP. 2012-06-11 Simon Josefsson * po/id.po.in: Sync with TP. 2012-06-01 Simon Josefsson * build-aux/gnupload, gl/m4/gnulib-common.m4, gl/m4/gnulib-comp.m4, gl/m4/manywarnings.m4, gl/m4/warnings.m4, lib/gl/m4/gnulib-common.m4, maint.mk, src/gl/Makefile.am, src/gl/errno.in.h, src/gl/m4/errno_h.m4, src/gl/m4/gnulib-common.m4, src/gl/m4/gnulib-comp.m4, src/gl/m4/off_t.m4, src/gl/m4/strerror.m4, src/gl/m4/sys_types_h.m4, src/gl/m4/unistd_h.m4, src/gl/strerror-override.c, src/gl/strerror-override.h, src/gl/sys_types.in.h, src/gl/unistd.in.h: Update gnulib files. 2012-05-14 Simon Josefsson * tests/saslname.c: Fix make check when Kerberos V5 is disabled. 2012-05-14 Simon Josefsson * configure.ac: Add -Wno-array-bounds for meta.c false positive. 2012-04-12 Simon Josefsson * NEWS, configure.ac: Bump versions. 2012-04-03 Simon Josefsson * po/vi.po.in: Sync with TP. 2012-04-03 Simon Josefsson * cfg.mk: Force copyright updates. 2012-04-03 Simon Josefsson * GNUmakefile, build-aux/gnupload, gl/m4/warnings.m4, lib/gl/gettext.h, lib/gl/m4/warn-on-use.m4, lib/gl/stddef.in.h, lib/gl/string.in.h, lib/gl/strverscmp.c, maint.mk, src/gl/errno.in.h, src/gl/gettext.h, src/gl/m4/warn-on-use.m4, src/gl/msvc-inval.c, src/gl/msvc-inval.h, src/gl/msvc-nothrow.c, src/gl/msvc-nothrow.h, src/gl/stdarg.in.h, src/gl/stddef.in.h, src/gl/string.in.h, src/gl/unistd.in.h: Update gnulib files. 2012-02-08 Simon Josefsson * cfg.mk: Fix ignore rule. 2012-02-08 Simon Josefsson * doc/Makefile.am, doc/gpl-3.0.texi, doc/gss.texi, gl/Makefile.am, gl/m4/gnulib-cache.m4, gl/m4/gnulib-comp.m4: Drop GPL copy from manual. 2012-02-08 Simon Josefsson * .clcopying, AUTHORS, ChangeLog, Makefile.am, NEWS, README, README-alpha, THANKS, cfg.mk, configure.ac, doc/Makefile.am, doc/Makefile.gdoci, doc/cyclo/Makefile.am, doc/gdoc, doc/gss.texi, gss.pc.in, lib/Makefile.am, lib/asn1.c, lib/context.c, lib/cred.c, lib/error.c, lib/ext.c, lib/headers/gss.h.in, lib/headers/gss/api.h, lib/headers/gss/ext.h, lib/headers/gss/krb5-ext.h, lib/headers/gss/krb5.h, lib/internal.h, lib/krb5/Makefile.am, lib/krb5/checksum.c, lib/krb5/checksum.h, lib/krb5/context.c, lib/krb5/cred.c, lib/krb5/error.c, lib/krb5/k5internal.h, lib/krb5/msg.c, lib/krb5/name.c, lib/krb5/oid.c, lib/krb5/protos.h, lib/krb5/utils.c, lib/libgss.map, lib/meta.c, lib/meta.h, lib/misc.c, lib/msg.c, lib/name.c, lib/obsolete.c, lib/oid.c, lib/saslname.c, lib/version.c, src/Makefile.am, src/gss.c, src/gss.ggo, tests/Makefile.am, tests/basic.c, tests/krb5context.c, tests/saslname.c, tests/threadsafety: Update copyright years. 2012-02-08 Simon Josefsson * GNUmakefile, build-aux/config.rpath, build-aux/gnupload, build-aux/pmccabe.css, build-aux/pmccabe2html, build-aux/snippet/arg-nonnull.h, build-aux/snippet/c++defs.h, build-aux/snippet/warn-on-use.h, build-aux/update-copyright, build-aux/useless-if-before-free, build-aux/vc-list-files, doc/fdl-1.3.texi, doc/gendocs_template, gl/Makefile.am, gl/dummy.c, gl/m4/00gnulib.m4, gl/m4/autobuild.m4, gl/m4/gnulib-cache.m4, gl/m4/gnulib-common.m4, gl/m4/gnulib-comp.m4, gl/m4/gnulib-tool.m4, gl/m4/ld-version-script.m4, gl/m4/lib-ld.m4, gl/m4/lib-link.m4, gl/m4/lib-prefix.m4, gl/m4/manywarnings.m4, gl/m4/valgrind-tests.m4, gl/m4/warnings.m4, lib/gl/Makefile.am, lib/gl/dummy.c, lib/gl/gettext.h, lib/gl/m4/00gnulib.m4, lib/gl/m4/extensions.m4, lib/gl/m4/gnulib-cache.m4, lib/gl/m4/gnulib-common.m4, lib/gl/m4/gnulib-comp.m4, lib/gl/m4/gnulib-tool.m4, lib/gl/m4/include_next.m4, lib/gl/m4/ld-output-def.m4, lib/gl/m4/stddef_h.m4, lib/gl/m4/string_h.m4, lib/gl/m4/strverscmp.m4, lib/gl/m4/warn-on-use.m4, lib/gl/m4/wchar_t.m4, lib/gl/stddef.in.h, lib/gl/string.in.h, lib/gl/strverscmp.c, maint.mk, src/gl/Makefile.am, src/gl/errno.in.h, src/gl/error.c, src/gl/error.h, src/gl/getopt.c, src/gl/getopt.in.h, src/gl/getopt1.c, src/gl/getopt_int.h, src/gl/gettext.h, src/gl/intprops.h, src/gl/m4/00gnulib.m4, src/gl/m4/errno_h.m4, src/gl/m4/error.m4, src/gl/m4/extensions.m4, src/gl/m4/getopt.m4, src/gl/m4/gnulib-cache.m4, src/gl/m4/gnulib-common.m4, src/gl/m4/gnulib-comp.m4, src/gl/m4/gnulib-tool.m4, src/gl/m4/include_next.m4, src/gl/m4/msvc-inval.m4, src/gl/m4/msvc-nothrow.m4, src/gl/m4/nocrash.m4, src/gl/m4/ssize_t.m4, src/gl/m4/stdarg.m4, src/gl/m4/stddef_h.m4, src/gl/m4/strerror.m4, src/gl/m4/string_h.m4, src/gl/m4/sys_socket_h.m4, src/gl/m4/unistd_h.m4, src/gl/m4/version-etc.m4, src/gl/m4/warn-on-use.m4, src/gl/m4/wchar_t.m4, src/gl/msvc-inval.c, src/gl/msvc-inval.h, src/gl/msvc-nothrow.c, src/gl/msvc-nothrow.h, src/gl/progname.c, src/gl/progname.h, src/gl/stdarg.in.h, src/gl/stddef.in.h, src/gl/strerror-override.c, src/gl/strerror-override.h, src/gl/strerror.c, src/gl/string.in.h, src/gl/unistd.in.h, src/gl/verify.h, src/gl/version-etc.c, src/gl/version-etc.h: Update gnulib files. 2012-02-08 Simon Josefsson * po/LINGUAS, po/sr.po.in: Sync with TP. 2011-11-25 Simon Josefsson * doc/announce.txt: Update for 1.0.2. 2011-11-25 Simon Josefsson * .gitignore: Ignore more. 2011-11-25 Simon Josefsson * ChangeLog: Generated. 2011-11-25 Simon Josefsson * NEWS: Version 1.0.2. 2011-11-25 Simon Josefsson * gl/m4/valgrind-tests.m4, gl/override/m4/valgrind-tests.m4.diff: Fix valgrind-tests.m4 patch. 2011-11-21 Simon Josefsson * configure.ac: Bump required gettext version (0.18.1 is part of Debian Squeeze). 2011-11-21 Simon Josefsson * configure.ac: Don't warn about missing pure/const attributes. 2011-11-21 Simon Josefsson * doc/gss.texi, lib/asn1.c: Doc fix to align with RFC 6339. 2011-11-21 Simon Josefsson * NEWS: Mention API changes. 2011-11-21 Simon Josefsson * .gitignore, NEWS, configure.ac, doc/reference/Makefile.am, doc/reference/gss-docs.sgml, doc/reference/version.xml.in, gtk-doc.make, m4/gtk-doc.m4: Update GTK-DOC infrastructure. 2011-11-21 Simon Josefsson * doc/cyclo/Makefile.am: Improve links in output. 2011-11-21 Simon Josefsson * NEWS, lib/asn1.c, lib/ext.c, lib/headers/gss/api.h, lib/headers/gss/ext.h, lib/oid.c: RFC 6339 adjustments. 2011-11-21 Simon Josefsson * NEWS: Mention RFC 6339. 2011-11-21 Simon Josefsson * GNUmakefile, build-aux/arg-nonnull.h, build-aux/c++defs.h, build-aux/gendocs.sh, build-aux/snippet/arg-nonnull.h, build-aux/snippet/c++defs.h, build-aux/snippet/warn-on-use.h, build-aux/useless-if-before-free, build-aux/vc-list-files, build-aux/warn-on-use.h, cfg.mk, doc/fdl-1.3.texi, gl/Makefile.am, gl/m4/gnulib-cache.m4, gl/m4/gnulib-common.m4, gl/m4/gnulib-comp.m4, gl/m4/manywarnings.m4, gl/m4/warnings.m4, gl/override/m4/valgrind-tests.m4.diff, lib/cred.c, lib/gl/Makefile.am, lib/gl/gettext.h, lib/gl/m4/extensions.m4, lib/gl/m4/gnulib-cache.m4, lib/gl/m4/gnulib-common.m4, lib/gl/m4/gnulib-comp.m4, lib/gl/m4/include_next.m4, lib/gl/m4/stddef_h.m4, lib/gl/m4/string_h.m4, lib/gl/m4/strverscmp.m4, lib/gl/m4/warn-on-use.m4, lib/gl/override/lib/gettext.h.diff, lib/gl/stddef.in.h, lib/gl/string.in.h, maint.mk, src/gl/Makefile.am, src/gl/errno.in.h, src/gl/error.c, src/gl/getopt.c, src/gl/getopt.in.h, src/gl/gettext.h, src/gl/intprops.h, src/gl/m4/errno_h.m4, src/gl/m4/error.m4, src/gl/m4/extensions.m4, src/gl/m4/getopt.m4, src/gl/m4/gnulib-cache.m4, src/gl/m4/gnulib-common.m4, src/gl/m4/gnulib-comp.m4, src/gl/m4/include_next.m4, src/gl/m4/msvc-inval.m4, src/gl/m4/msvc-nothrow.m4, src/gl/m4/nocrash.m4, src/gl/m4/ssize_t.m4, src/gl/m4/stdarg.m4, src/gl/m4/stddef_h.m4, src/gl/m4/strerror.m4, src/gl/m4/string_h.m4, src/gl/m4/sys_socket_h.m4, src/gl/m4/unistd_h.m4, src/gl/m4/warn-on-use.m4, src/gl/msvc-inval.c, src/gl/msvc-inval.h, src/gl/msvc-nothrow.c, src/gl/msvc-nothrow.h, src/gl/override/lib/gettext.h.diff, src/gl/stdarg.in.h, src/gl/stddef.in.h, src/gl/strerror-override.c, src/gl/strerror-override.h, src/gl/strerror.c, src/gl/string.in.h, src/gl/unistd.in.h, src/gl/verify.h: Update gnulib files. 2011-04-05 Simon Josefsson * NEWS: Improve RFC 5587 entry. 2011-04-05 Simon Josefsson * cfg.mk, lib/asn1.c, lib/ext.c, lib/headers/gss/api.h: Update remaining copyright headers. 2011-04-05 Simon Josefsson * AUTHORS: Update PGP key. 2011-04-05 Simon Josefsson * lib/headers/gss/api.h: Indent RFC 5587 types. 2011-04-05 Simon Josefsson * maint.mk: Update gnulib files. 2011-04-05 Simon Josefsson * .clcopying, AUTHORS, Makefile.am, README-alpha, THANKS, cfg.mk, configure.ac, doc/Makefile.gdoci, doc/cyclo/Makefile.am, doc/gdoc, doc/gss.texi, gss.pc.in, lib/Makefile.am, lib/context.c, lib/cred.c, lib/error.c, lib/headers/gss.h.in, lib/headers/gss/krb5-ext.h, lib/headers/gss/krb5.h, lib/internal.h, lib/krb5/Makefile.am, lib/krb5/checksum.c, lib/krb5/checksum.h, lib/krb5/context.c, lib/krb5/cred.c, lib/krb5/error.c, lib/krb5/k5internal.h, lib/krb5/msg.c, lib/krb5/name.c, lib/krb5/oid.c, lib/krb5/protos.h, lib/krb5/utils.c, lib/libgss.map, lib/meta.c, lib/meta.h, lib/misc.c, lib/msg.c, lib/name.c, lib/obsolete.c, lib/oid.c, lib/saslname.c, lib/version.c, src/Makefile.am, src/gss.c, src/gss.ggo, tests/Makefile.am, tests/basic.c, tests/krb5context.c, tests/saslname.c, tests/threadsafety: Update copyright years. Use ranges. 2011-04-05 Simon Josefsson * build-aux/update-copyright, cfg.mk, gl/Makefile.am, gl/m4/gnulib-cache.m4, gl/m4/gnulib-comp.m4: Add update-copyright gnulib module. 2011-04-03 Simon Josefsson * NEWS, gl/m4/valgrind-tests.m4, lib/asn1.c, lib/ext.c, lib/headers/gss/ext.h: Constify capsulate and oid equal function. Fix valgrind check. 2011-04-03 Simon Josefsson * gl/m4/gnulib-common.m4, lib/gl/m4/gnulib-common.m4, src/gl/m4/gnulib-common.m4: Update gnulib files. 2011-04-03 Simon Josefsson * NEWS, README, doc/Makefile.am, lib/headers/gss/api.h: Add RFC 5587 const typedefs. 2011-03-31 Simon Josefsson * gl/m4/gnulib-common.m4, lib/gl/m4/gnulib-common.m4, src/gl/m4/gnulib-common.m4: Work around gnulib issue. 2011-03-31 Simon Josefsson * GNUmakefile, build-aux/arg-nonnull.h, build-aux/c++defs.h, build-aux/config.rpath, build-aux/gendocs.sh, build-aux/pmccabe2html, build-aux/useless-if-before-free, build-aux/vc-list-files, build-aux/warn-on-use.h, doc/gendocs_template, gl/Makefile.am, gl/dummy.c, gl/m4/00gnulib.m4, gl/m4/autobuild.m4, gl/m4/gnulib-cache.m4, gl/m4/gnulib-common.m4, gl/m4/gnulib-comp.m4, gl/m4/gnulib-tool.m4, gl/m4/ld-version-script.m4, gl/m4/lib-ld.m4, gl/m4/lib-link.m4, gl/m4/lib-prefix.m4, gl/m4/manywarnings.m4, gl/m4/valgrind-tests.m4, gl/m4/warnings.m4, lib/gl/Makefile.am, lib/gl/dummy.c, lib/gl/gettext.h, lib/gl/m4/00gnulib.m4, lib/gl/m4/extensions.m4, lib/gl/m4/gnulib-cache.m4, lib/gl/m4/gnulib-common.m4, lib/gl/m4/gnulib-comp.m4, lib/gl/m4/gnulib-tool.m4, lib/gl/m4/include_next.m4, lib/gl/m4/ld-output-def.m4, lib/gl/m4/stddef_h.m4, lib/gl/m4/string_h.m4, lib/gl/m4/strverscmp.m4, lib/gl/m4/warn-on-use.m4, lib/gl/m4/wchar_t.m4, lib/gl/stddef.in.h, lib/gl/string.in.h, lib/gl/strverscmp.c, maint.mk, src/gl/Makefile.am, src/gl/errno.in.h, src/gl/error.c, src/gl/error.h, src/gl/getopt.c, src/gl/getopt.in.h, src/gl/getopt1.c, src/gl/getopt_int.h, src/gl/gettext.h, src/gl/intprops.h, src/gl/m4/00gnulib.m4, src/gl/m4/errno_h.m4, src/gl/m4/error.m4, src/gl/m4/extensions.m4, src/gl/m4/getopt.m4, src/gl/m4/gnulib-cache.m4, src/gl/m4/gnulib-common.m4, src/gl/m4/gnulib-comp.m4, src/gl/m4/gnulib-tool.m4, src/gl/m4/include_next.m4, src/gl/m4/stdarg.m4, src/gl/m4/stddef_h.m4, src/gl/m4/strerror.m4, src/gl/m4/string_h.m4, src/gl/m4/unistd_h.m4, src/gl/m4/version-etc.m4, src/gl/m4/warn-on-use.m4, src/gl/m4/wchar_t.m4, src/gl/progname.c, src/gl/progname.h, src/gl/stdarg.in.h, src/gl/stddef.in.h, src/gl/strerror.c, src/gl/string.in.h, src/gl/unistd.in.h, src/gl/version-etc.c, src/gl/version-etc.h: Update gnulib files. 2011-03-31 Simon Josefsson * po/LINGUAS, po/eo.po.in, po/fr.po.in, po/zh_CN.po.in: Sync with TP. 2010-12-09 Simon Josefsson * po/fi.po.in, po/it.po.in, po/pl.po.in: Sync with TP. 2010-12-09 Simon Josefsson * configure.ac: Use silent build rules. 2010-12-09 Simon Josefsson * build-aux/gendocs.sh, gl/m4/gnulib-common.m4, lib/gl/gettext.h, lib/gl/m4/gnulib-common.m4, lib/gl/string.in.h, maint.mk, src/gl/Makefile.am, src/gl/gettext.h, src/gl/intprops.h, src/gl/m4/getopt.m4, src/gl/m4/gnulib-common.m4, src/gl/m4/unistd_h.m4, src/gl/string.in.h, src/gl/unistd.in.h: Update gnulib files. 2010-11-16 Simon Josefsson * tests/basic.c, tests/krb5context.c, tests/saslname.c: Fix warnings. 2010-11-16 Simon Josefsson * src/gss.c: Fix compiler warnings. 2010-11-16 Simon Josefsson * configure.ac: Disable -Wtraditional-conversion because of too many warnings with gcc 4.4. 2010-11-16 Simon Josefsson * configure.ac: Drop -Wpadded because standard GSS-API header files are unpadded on 64-bit archs. 2010-11-16 Simon Josefsson * cfg.mk: Remove mingw32 rules, not useful anymore. 2010-11-16 Simon Josefsson * .x-sc_bindtextdomain: Fix syntax checks. 2010-11-16 Simon Josefsson * gtk-doc.make: Fix syntax checks. 2010-11-16 Simon Josefsson * NEWS, configure.ac: Bump versions. 2010-11-16 Simon Josefsson * po/it.po.in: Sync with TP. 2010-11-16 Simon Josefsson * GNUmakefile, build-aux/gendocs.sh, build-aux/gnupload, build-aux/pmccabe.css, build-aux/pmccabe2html, doc/fdl-1.3.texi, gl/Makefile.am, gl/m4/gnulib-cache.m4, gl/m4/gnulib-comp.m4, gl/m4/ld-version-script.m4, gl/m4/lib-ld.m4, gl/m4/lib-link.m4, lib/gl/Makefile.am, lib/gl/m4/gnulib-cache.m4, lib/gl/m4/gnulib-comp.m4, lib/gl/m4/include_next.m4, lib/gl/m4/string_h.m4, lib/gl/m4/wchar_t.m4, lib/gl/stddef.in.h, lib/gl/string.in.h, maint.mk, src/gl/Makefile.am, src/gl/errno.in.h, src/gl/getopt.in.h, src/gl/m4/errno_h.m4, src/gl/m4/error.m4, src/gl/m4/getopt.m4, src/gl/m4/gnulib-cache.m4, src/gl/m4/gnulib-comp.m4, src/gl/m4/include_next.m4, src/gl/m4/stdarg.m4, src/gl/m4/string_h.m4, src/gl/m4/wchar_t.m4, src/gl/stdarg.in.h, src/gl/stddef.in.h, src/gl/strerror.c, src/gl/string.in.h, src/gl/unistd.in.h: Update gnulib files. 2010-05-27 Simon Josefsson * doc/announce.txt: Doc fix. 2010-05-20 Simon Josefsson * doc/announce.txt: Update announcement.txt. 2010-05-20 Simon Josefsson * cfg.mk: Fix release target. 2010-05-20 Simon Josefsson * ChangeLog: Generated. 2010-05-20 Simon Josefsson * NEWS: Version 1.0.1. 2010-05-20 Simon Josefsson * doc/gendocs_template, gl/override/doc/gendocs_template.diff: Fix HTML page. 2010-05-20 Simon Josefsson * NEWS: Add. 2010-05-20 Simon Josefsson * .gitignore: Add. 2010-05-20 Simon Josefsson * NEWS, cfg.mk, doc/reference/Makefile.am, gtk-doc.make, m4/gtk-doc.m4: Update GTK-DOC files to build PDF file. 2010-05-20 Simon Josefsson * po/zh_CN.po.in: Sync with TP. 2010-05-20 Simon Josefsson * NEWS: Reorder. 2010-05-20 Simon Josefsson * THANKS: Add. 2010-05-20 Simon Josefsson * tests/Makefile.am: Link krb5context with -lshishi directly because it uses Shishi functions. Reported by ludo@gnu.org (Ludovic Courtès). 2010-05-20 Simon Josefsson * NEWS, doc/gss.texi, src/gss.c, src/gss.ggo: Add gss --list-mechanisms. Document gss tool. 2010-05-20 Simon Josefsson * src/gl/Makefile.am, src/gl/errno.in.h, src/gl/error.c, src/gl/error.h, src/gl/intprops.h, src/gl/m4/errno_h.m4, src/gl/m4/error.m4, src/gl/m4/gnulib-cache.m4, src/gl/m4/gnulib-comp.m4, src/gl/m4/strerror.m4, src/gl/m4/string_h.m4, src/gl/strerror.c, src/gl/string.in.h, src/gss.c: Restructure gss tool. Use error module. 2010-05-20 Simon Josefsson * src/gss.c: Fix --help typo. 2010-05-20 Simon Josefsson * configure.ac: Improve final debug output. 2010-05-20 Simon Josefsson * configure.ac, doc/gendocs_template, gl/Makefile.am, gl/m4/gnulib-cache.m4, gl/m4/gnulib-comp.m4, gl/m4/valgrind-tests.m4, m4/valgrind.m4: Update gnulib files, use valgrind-tests module. 2010-05-17 Simon Josefsson * build-aux/c++defs.h, build-aux/gendocs.sh, build-aux/gnupload, gl/m4/gnulib-common.m4, lib/gl/m4/gnulib-common.m4, maint.mk, src/gl/Makefile.am, src/gl/m4/gnulib-common.m4, src/gl/m4/unistd_h.m4, src/gl/unistd.in.h: Update gnulib files. 2010-04-27 Simon Josefsson * tests/basic.c: Test capsulation functions more. 2010-04-25 Simon Josefsson * build-aux/vc-list-files, maint.mk: Update gnulib files. 2010-04-22 Simon Josefsson * configure.ac: Fix Shishi detection. 2010-04-22 Simon Josefsson * lib/headers/gss/krb5-ext.h, lib/headers/gss/krb5.h, lib/krb5/cred.c, lib/krb5/k5internal.h, lib/krb5/name.c, lib/krb5/oid.c, lib/krb5/protos.h, lib/krb5/utils.c: Bump copyright years. 2010-04-22 Simon Josefsson * .clcopying, .cvsusers, AUTHORS, Makefile.am, NEWS, README, THANKS, cfg.mk, configure.ac, doc/Makefile.gdoci, gss.pc.in, lib/Makefile.am, lib/cred.c, lib/msg.c, lib/name.c, lib/obsolete.c, lib/oid.c, lib/version.c, src/Makefile.am, src/gss.ggo, tests/Makefile.am, tests/threadsafety: Bump copyright years. Fix PGP key. 2010-04-22 Simon Josefsson * cfg.mk, lib/asn1.c, lib/headers/gss.h.in, lib/headers/gss/api.h, lib/headers/gss/ext.h, lib/krb5/checksum.c, lib/krb5/checksum.h, lib/krb5/context.c, lib/krb5/cred.c, lib/krb5/msg.c, lib/krb5/name.c, lib/krb5/oid.c, lib/meta.c, lib/meta.h, lib/name.c, lib/obsolete.c, lib/oid.c, lib/saslname.c, lib/version.c, src/gss.c, tests/basic.c, tests/krb5context.c, tests/saslname.c: Indent code. 2010-04-22 Simon Josefsson * gl/Makefile.am~, gl/m4/gnulib-cache.m4~, gl/m4/gnulib-comp.m4~: Remove backup files. 2010-04-22 Simon Josefsson * maint.mk, src/gl/getopt.c, src/gl/getopt_int.h, src/gl/m4/getopt.m4: Update gnulib files. 2010-04-14 Simon Josefsson * NEWS, configure.ac: Make sure we have a recent Shishi. 2010-04-13 Simon Josefsson * m4/valgrind.m4: Use valgrind -q. 2010-04-13 Simon Josefsson * .x-sc_prohibit_empty_lines_at_EOF, .x-sc_prohibit_test_minus_ao, GNUmakefile, NEWS, build-aux/c++defs.h, build-aux/warn-on-use.h, doc/reference/Makefile.am, gl/m4/gnulib-common.m4, gl/m4/gnulib-comp.m4, gl/m4/gnulib-comp.m4~, gl/m4/lib-link.m4, lib/gl/Makefile.am, lib/gl/m4/gnulib-common.m4, lib/gl/m4/gnulib-comp.m4, lib/gl/m4/string_h.m4, lib/gl/string.in.h, maint.mk, src/gl/Makefile.am, src/gl/getopt.in.h, src/gl/m4/gnulib-common.m4, src/gl/m4/gnulib-comp.m4, src/gl/m4/unistd_h.m4, src/gl/stdarg.in.h, src/gl/unistd.in.h: Update gnulib files and fix new syntax-check warnings. 2010-04-13 Simon Josefsson * NEWS, po/fi.po.in, po/id.po.in, po/pl.po.in, po/vi.po.in: Sync with TP. 2010-03-30 Simon Josefsson * NEWS, configure.ac: Bump versions. 2010-03-30 Simon Josefsson * doc/announce.txt: Update for 1.0.0. 2010-03-30 Simon Josefsson * ChangeLog: Generated. 2010-03-30 Simon Josefsson * Makefile.am: Need to distclean po/Makevars because it is generated. 2010-03-30 Simon Josefsson * cfg.mk: Copy cyclomatic code coverage chart too. 2010-03-30 Simon Josefsson * cfg.mk: Upload to ftp.gnu.org. 2010-03-30 Simon Josefsson * NEWS: Version 1.0.0. 2010-03-30 Simon Josefsson * NEWS: Add. 2010-03-30 Simon Josefsson * lib/saslname.c, lib/version.c: Doc fix for GTK-DOC warning. 2010-03-29 Simon Josefsson * lib/meta.c, lib/meta.h, lib/saslname.c: gss_inquire_mech_for_saslname: Don't read out bounds. 2010-03-29 Simon Josefsson * tests/saslname.c: Check for read-out-bounds. 2010-03-29 Simon Josefsson * Makefile.am: Dist po/Makevars.in. 2010-03-29 Simon Josefsson * po/POTFILES.in: Revert. 2010-03-29 Simon Josefsson * po/POTFILES.in: Add. 2010-03-29 Simon Josefsson * configure.ac, lib/error.c, lib/internal.h, lib/saslname.c, m4/po-suffix.m4, po/Makevars, po/Makevars.in: Add --with-po-suffix support. 2010-03-28 Simon Josefsson * .x-sc_texinfo_acronym: Add. 2010-03-28 Simon Josefsson * src/Makefile.am: Fix syntax-check warning. 2010-03-28 Simon Josefsson * lib/ext.c, lib/headers/gss/ext.h: gss_oid_equal: Constify parameters. 2010-03-28 Simon Josefsson * lib/asn1.c: Doc fix. 2010-03-28 Simon Josefsson * gl/m4/gnulib-common.m4, gl/m4/gnulib-comp.m4, gl/m4/gnulib-comp.m4~, lib/gl/gettext.h, lib/gl/m4/gnulib-common.m4, lib/gl/m4/gnulib-comp.m4, lib/gl/m4/stddef_h.m4, lib/gl/m4/string_h.m4, lib/gl/string.in.h, maint.mk, src/gl/getopt.in.h, src/gl/gettext.h, src/gl/m4/gnulib-common.m4, src/gl/m4/gnulib-comp.m4, src/gl/m4/stddef_h.m4, src/gl/m4/unistd_h.m4, src/gl/stdarg.in.h, src/gl/unistd.in.h: Update gnulib files. 2010-03-26 Simon Josefsson * lib/krb5/error.c: Cleanup code. 2010-03-26 Simon Josefsson * lib/error.c, lib/ext.c, lib/internal.h, lib/meta.c, lib/saslname.c: Cleanup. 2010-03-26 Simon Josefsson * lib/asn1.c, lib/internal.h, lib/krb5/context.c, lib/krb5/msg.c, lib/misc.c, tests/krb5context.c: Align capsulation APIs with new approach and update callers. 2010-03-25 Simon Josefsson * doc/reference/gss-docs.sgml, lib/headers/gss.h.in, lib/saslname.c: Drop Since gtk-doc stuff. 2010-03-25 Simon Josefsson * doc/gss.texi: Doc updates for v1.0.0. 2010-03-25 Simon Josefsson * lib/misc.c: Doc fix. 2010-03-25 Simon Josefsson * lib/ext.c: Drop gss_copy_oid. 2010-03-25 Simon Josefsson * doc/gss.texi, lib/ext.c, lib/misc.c: Update documentation for removed APIs. Fix internal use of gss_copy_oid. 2010-03-25 Simon Josefsson * NEWS: Bump version. 2010-03-25 Simon Josefsson * lib/headers/gss/ext.h: Drop bad extension functions and fix capsulate functions. Drop gss_copy_oid, gss_duplicate_oid, and gss_encapsulate_token_prefix. Align gss_encapsulate_token and gss_decapsulate_token with draft-josefsson-gss-capsulate-00.txt. 2010-03-25 Simon Josefsson * lib/libgss.map: Bump version and drop bad extension functions. The dropped functions are gss_copy_oid, gss_duplicate_oid, and gss_encapsulate_token_prefix. 2010-03-25 Simon Josefsson * configure.ac: Bump version, break API/ABI compatibility. 2010-03-22 Simon Josefsson * NEWS, configure.ac: Bump versions. 2010-03-22 Simon Josefsson * .gitignore: Add more. 2010-03-22 Simon Josefsson * doc/announce.txt: Update for 0.1.5. 2010-03-22 Simon Josefsson * ChangeLog: Generated. 2010-03-22 Simon Josefsson * NEWS: Version 0.1.5. 2010-03-22 Simon Josefsson * NEWS, configure.ac: Bump versions. 2010-03-22 Simon Josefsson * doc/announce.txt: Add. 2010-03-22 Simon Josefsson * ChangeLog: Generated. 2010-03-22 Simon Josefsson * NEWS: Version 0.1.4. 2010-03-22 Simon Josefsson * configure.ac: Don't generate src/gl/tests/Makefile. 2010-03-22 Simon Josefsson * src/gl/Makefile.am, src/gl/m4/alloca.m4, src/gl/m4/dos.m4, src/gl/m4/dup2.m4, src/gl/m4/eealloc.m4, src/gl/m4/environ.m4, src/gl/m4/errno_h.m4, src/gl/m4/fcntl-o.m4, src/gl/m4/fcntl_h.m4, src/gl/m4/gnulib-cache.m4, src/gl/m4/gnulib-comp.m4, src/gl/m4/longlong.m4, src/gl/m4/lstat.m4, src/gl/m4/malloc.m4, src/gl/m4/malloca.m4, src/gl/m4/mode_t.m4, src/gl/m4/multiarch.m4, src/gl/m4/open.m4, src/gl/m4/pathmax.m4, src/gl/m4/putenv.m4, src/gl/m4/setenv.m4, src/gl/m4/stat.m4, src/gl/m4/stdbool.m4, src/gl/m4/stdint.m4, src/gl/m4/stdlib_h.m4, src/gl/m4/symlink.m4, src/gl/m4/sys_stat_h.m4, src/gl/m4/time_h.m4, src/gl/m4/wchar_h.m4, src/gl/m4/wint_t.m4, src/gl/tests/Makefile.am, src/gl/tests/alloca.in.h, src/gl/tests/binary-io.h, src/gl/tests/dup2.c, src/gl/tests/errno.in.h, src/gl/tests/fcntl.in.h, src/gl/tests/ignore-value.h, src/gl/tests/intprops.h, src/gl/tests/lstat.c, src/gl/tests/macros.h, src/gl/tests/malloc.c, src/gl/tests/malloca.c, src/gl/tests/malloca.h, src/gl/tests/malloca.valgrind, src/gl/tests/open.c, src/gl/tests/pathmax.h, src/gl/tests/putenv.c, src/gl/tests/same-inode.h, src/gl/tests/setenv.c, src/gl/tests/signature.h, src/gl/tests/stat.c, src/gl/tests/stdbool.in.h, src/gl/tests/stdint.in.h, src/gl/tests/stdlib.in.h, src/gl/tests/symlink.c, src/gl/tests/sys_stat.in.h, src/gl/tests/test-alloca-opt.c, src/gl/tests/test-binary-io.c, src/gl/tests/test-binary-io.sh, src/gl/tests/test-dup2.c, src/gl/tests/test-environ.c, src/gl/tests/test-errno.c, src/gl/tests/test-getopt.c, src/gl/tests/test-getopt.h, src/gl/tests/test-getopt_long.h, src/gl/tests/test-lstat.c, src/gl/tests/test-lstat.h, src/gl/tests/test-malloca.c, src/gl/tests/test-open.c, src/gl/tests/test-open.h, src/gl/tests/test-setenv.c, src/gl/tests/test-stat.c, src/gl/tests/test-stat.h, src/gl/tests/test-stdbool.c, src/gl/tests/test-stddef.c, src/gl/tests/test-stdint.c, src/gl/tests/test-symlink.c, src/gl/tests/test-symlink.h, src/gl/tests/test-unsetenv.c, src/gl/tests/test-version-etc.c, src/gl/tests/test-version-etc.sh, src/gl/tests/time.in.h, src/gl/tests/unsetenv.c, src/gl/tests/verify.h, src/gl/tests/version-etc-fsf.c, src/gl/tests/wchar.in.h: Remove gnulib self-tests for src/. 2010-03-22 Simon Josefsson * .gitignore: Ignore more. 2010-03-22 Simon Josefsson * doc/reference/Makefile.am: Ignore more. 2010-03-22 Simon Josefsson * tests/saslname.c: Cast to avoid warnings. 2010-03-22 Simon Josefsson * lib/context.c: Doc fix. 2010-03-22 Simon Josefsson * NEWS: Add. 2010-03-22 Simon Josefsson * build-aux/c++defs.h, build-aux/gendocs.sh, build-aux/gnupload, build-aux/link-warning.h, build-aux/vc-list-files, build-aux/warn-on-use.h, gl/m4/gnulib-common.m4, gl/m4/gnulib-comp.m4, gl/m4/gnulib-comp.m4~, lib/gl/Makefile.am, lib/gl/m4/gnulib-common.m4, lib/gl/m4/gnulib-comp.m4, lib/gl/m4/string_h.m4, lib/gl/m4/warn-on-use.m4, lib/gl/string.in.h, maint.mk, src/gl/Makefile.am, src/gl/getopt.c, src/gl/m4/fcntl_h.m4, src/gl/m4/gnulib-cache.m4, src/gl/m4/gnulib-common.m4, src/gl/m4/gnulib-comp.m4, src/gl/m4/setenv.m4, src/gl/m4/stdlib_h.m4, src/gl/m4/sys_stat_h.m4, src/gl/m4/time_h.m4, src/gl/m4/unistd_h.m4, src/gl/m4/warn-on-use.m4, src/gl/m4/wchar.m4, src/gl/m4/wchar_h.m4, src/gl/tests/Makefile.am, src/gl/tests/fcntl.in.h, src/gl/tests/ignore-value.h, src/gl/tests/stdlib.in.h, src/gl/tests/sys_stat.in.h, src/gl/tests/test-fcntl-h.c, src/gl/tests/test-lstat.c, src/gl/tests/test-stdlib.c, src/gl/tests/test-symlink.c, src/gl/tests/test-sys_stat.c, src/gl/tests/test-time.c, src/gl/tests/test-unistd.c, src/gl/tests/test-wchar.c, src/gl/tests/time.in.h, src/gl/tests/wchar.in.h, src/gl/unistd.in.h: Update gnulib files. 2010-03-22 Simon Josefsson * doc/gss.texi: Document SASL GS2 functions. 2010-03-22 Simon Josefsson * NEWS, doc/reference/gss-docs.sgml, lib/Makefile.am, lib/headers/gss/api.h, lib/libgss.map, lib/meta.c, lib/meta.h, lib/saslname.c, po/POTFILES.in, tests/Makefile.am, tests/saslname.c: Add new interfaces defined in RFC 5801. The APIs are gss_inquire_mech_for_saslname and gss_inquire_saslname_for_mech. 2010-03-21 Simon Josefsson * lib/krb5/checksum.c: Fix warning. 2010-03-19 Simon Josefsson * lib/krb5/checksum.c: Correctly hash all of channel bindings. 2010-03-18 Simon Josefsson * tests/krb5context.c: Test channel bindings too, to avoid regressions. 2010-03-18 Simon Josefsson * NEWS, lib/krb5/checksum.c: KRB5: Fix bug in channel binding computation. 2010-03-18 Simon Josefsson * README-alpha: Mention gengetopt. 2010-03-16 Simon Josefsson * tests/Makefile.am: Dist shishi.conf. 2010-03-15 Simon Josefsson * NEWS, configure.ac: Bump versions. 2010-03-15 Simon Josefsson * doc/announce.txt: Add. 2010-03-15 Simon Josefsson * ChangeLog: Generated. 2010-03-15 Simon Josefsson * NEWS: Version 0.1.3. 2010-03-15 Simon Josefsson * lib/krb5/checksum.c, tests/Makefile.am, tests/shishi.conf: Handle no channel bindings. 2010-03-15 Simon Josefsson * NEWS: Add. 2010-03-15 Simon Josefsson * po/LINGUAS, po/it.po.in: Sync with TP. 2010-03-15 Simon Josefsson * cfg.mk: Add review-diff. 2010-03-10 Simon Josefsson * .gitignore: Add. 2010-03-10 Simon Josefsson * NEWS, lib/krb5/checksum.c, lib/krb5/checksum.h, lib/krb5/context.c: KRB5: Add support for channel bindings. 2010-03-10 Simon Josefsson * src/gss.c: Fix gcc warning. 2010-03-10 Simon Josefsson * lib/asn1.c: Input parameter sanization. 2010-03-10 Simon Josefsson * NEWS, configure.ac: Bump version. 2010-01-19 Simon Josefsson * ChangeLog: Generated. 2010-01-19 Simon Josefsson * doc/cyclo/Makefile.am: Fix. 2010-01-19 Simon Josefsson * NEWS: Version 0.1.2. 2010-01-19 Simon Josefsson * doc/cyclo/Makefile.am: Add cyclo stuff. 2010-01-19 Simon Josefsson * build-aux/pmccabe.css, build-aux/pmccabe2html, configure.ac, doc/Makefile.am, gl/Makefile.am, gl/Makefile.am~, gl/m4/gnulib-cache.m4, gl/m4/gnulib-cache.m4~, gl/m4/gnulib-comp.m4, gl/m4/gnulib-comp.m4~: Add cyclo stuff. 2010-01-19 Simon Josefsson * cfg.mk, lib/gl/Makefile.am, maint.mk, src/gl/Makefile.am: Update gnulib files. 2010-01-19 Simon Josefsson * doc/Makefile.am: Bump copyright year. 2010-01-12 Simon Josefsson * gl/m4/gnulib-common.m4, gl/m4/warnings.m4, lib/gl/m4/gnulib-common.m4, src/gl/m4/gnulib-common.m4: Update gnulib files. 2010-01-12 Simon Josefsson * m4/valgrind.m4: Fix valgrind.m4. 2010-01-12 Simon Josefsson * .x-sc_trailing_blank: Add. 2010-01-12 Simon Josefsson * README-alpha, cfg.mk, configure.ac, doc/gss.texi, doc/reference/gss-docs.sgml, doc/texinfo.css, gss.pc.in, gtk-doc.make, lib/ext.c, lib/internal.h, lib/krb5/Makefile.am, lib/misc.c, lib/version.c, m4/valgrind.m4, maint.mk, src/gss.c, tests/Makefile.am, tests/basic.c, tests/krb5context.c: Fix syntax-checks. 2010-01-12 Simon Josefsson * tests/utils.c: Add. 2010-01-12 Simon Josefsson * .x-sc_prohibit_cvs_keyword: Add. 2010-01-12 Simon Josefsson * .x-sc_program_name: Add. 2010-01-12 Simon Josefsson * .x-sc_cast_of_argument_to_free: Add. 2010-01-12 Simon Josefsson * .x-sc_GPL_version: Add. 2010-01-12 Simon Josefsson * NEWS: Add. 2010-01-12 Simon Josefsson * po/LINGUAS, po/fi.po.in, po/zh_CN.po.in: Sync with TP. 2010-01-12 Simon Josefsson * GNUmakefile, build-aux/arg-nonnull.h, build-aux/config.rpath, build-aux/gendocs.sh, build-aux/link-warning.h, build-aux/useless-if-before-free, build-aux/vc-list-files, build-aux/warn-on-use.h, gl/Makefile.am, gl/Makefile.am~, gl/dummy.c, gl/m4/00gnulib.m4, gl/m4/autobuild.m4, gl/m4/gnulib-cache.m4, gl/m4/gnulib-cache.m4~, gl/m4/gnulib-common.m4, gl/m4/gnulib-comp.m4, gl/m4/gnulib-comp.m4~, gl/m4/gnulib-tool.m4, gl/m4/ld-version-script.m4, gl/m4/lib-ld.m4, gl/m4/lib-link.m4, gl/m4/lib-prefix.m4, gl/m4/manywarnings.m4, gl/m4/warnings.m4, lib/gl/Makefile.am, lib/gl/dummy.c, lib/gl/gettext.h, lib/gl/m4/00gnulib.m4, lib/gl/m4/extensions.m4, lib/gl/m4/gnulib-cache.m4, lib/gl/m4/gnulib-common.m4, lib/gl/m4/gnulib-comp.m4, lib/gl/m4/gnulib-tool.m4, lib/gl/m4/include_next.m4, lib/gl/m4/ld-output-def.m4, lib/gl/m4/stddef_h.m4, lib/gl/m4/string_h.m4, lib/gl/m4/strverscmp.m4, lib/gl/m4/wchar_t.m4, lib/gl/stddef.in.h, lib/gl/string.in.h, lib/gl/strverscmp.c, maint.mk, src/gl/Makefile.am, src/gl/getopt.c, src/gl/getopt.in.h, src/gl/getopt1.c, src/gl/getopt_int.h, src/gl/gettext.h, src/gl/m4/00gnulib.m4, src/gl/m4/alloca.m4, src/gl/m4/dos.m4, src/gl/m4/dup2.m4, src/gl/m4/eealloc.m4, src/gl/m4/environ.m4, src/gl/m4/errno_h.m4, src/gl/m4/extensions.m4, src/gl/m4/fcntl-o.m4, src/gl/m4/fcntl_h.m4, src/gl/m4/getopt.m4, src/gl/m4/gnulib-cache.m4, src/gl/m4/gnulib-common.m4, src/gl/m4/gnulib-comp.m4, src/gl/m4/gnulib-tool.m4, src/gl/m4/include_next.m4, src/gl/m4/longlong.m4, src/gl/m4/lstat.m4, src/gl/m4/malloc.m4, src/gl/m4/malloca.m4, src/gl/m4/mode_t.m4, src/gl/m4/multiarch.m4, src/gl/m4/open.m4, src/gl/m4/pathmax.m4, src/gl/m4/putenv.m4, src/gl/m4/setenv.m4, src/gl/m4/stat.m4, src/gl/m4/stdarg.m4, src/gl/m4/stdbool.m4, src/gl/m4/stddef_h.m4, src/gl/m4/stdint.m4, src/gl/m4/stdlib_h.m4, src/gl/m4/symlink.m4, src/gl/m4/sys_stat_h.m4, src/gl/m4/time_h.m4, src/gl/m4/unistd_h.m4, src/gl/m4/version-etc.m4, src/gl/m4/warn-on-use.m4, src/gl/m4/wchar.m4, src/gl/m4/wchar_t.m4, src/gl/m4/wint_t.m4, src/gl/progname.c, src/gl/progname.h, src/gl/stdarg.in.h, src/gl/stddef.in.h, src/gl/tests/Makefile.am, src/gl/tests/alloca.in.h, src/gl/tests/binary-io.h, src/gl/tests/dup2.c, src/gl/tests/errno.in.h, src/gl/tests/fcntl.in.h, src/gl/tests/intprops.h, src/gl/tests/lstat.c, src/gl/tests/macros.h, src/gl/tests/malloc.c, src/gl/tests/malloca.c, src/gl/tests/malloca.h, src/gl/tests/open.c, src/gl/tests/pathmax.h, src/gl/tests/putenv.c, src/gl/tests/same-inode.h, src/gl/tests/setenv.c, src/gl/tests/signature.h, src/gl/tests/stat.c, src/gl/tests/stdbool.in.h, src/gl/tests/stdint.in.h, src/gl/tests/stdlib.in.h, src/gl/tests/symlink.c, src/gl/tests/sys_stat.in.h, src/gl/tests/test-alloca-opt.c, src/gl/tests/test-binary-io.c, src/gl/tests/test-dup2.c, src/gl/tests/test-environ.c, src/gl/tests/test-errno.c, src/gl/tests/test-fcntl-h.c, src/gl/tests/test-getopt.c, src/gl/tests/test-getopt.h, src/gl/tests/test-getopt_long.h, src/gl/tests/test-lstat.c, src/gl/tests/test-lstat.h, src/gl/tests/test-malloca.c, src/gl/tests/test-open.c, src/gl/tests/test-open.h, src/gl/tests/test-setenv.c, src/gl/tests/test-stat.c, src/gl/tests/test-stat.h, src/gl/tests/test-stdbool.c, src/gl/tests/test-stddef.c, src/gl/tests/test-stdint.c, src/gl/tests/test-stdlib.c, src/gl/tests/test-symlink.c, src/gl/tests/test-symlink.h, src/gl/tests/test-sys_stat.c, src/gl/tests/test-time.c, src/gl/tests/test-unistd.c, src/gl/tests/test-unsetenv.c, src/gl/tests/test-version-etc.c, src/gl/tests/test-version-etc.sh, src/gl/tests/test-wchar.c, src/gl/tests/time.in.h, src/gl/tests/unsetenv.c, src/gl/tests/verify.h, src/gl/tests/version-etc-fsf.c, src/gl/tests/wchar.in.h, src/gl/unistd.in.h, src/gl/version-etc.c, src/gl/version-etc.h: Update gnulib files. 2009-12-29 Simon Josefsson * NEWS: Add. 2009-12-29 Simon Josefsson * build-aux/arg-nonnull.h, lib/gl/m4/stddef_h.m4, lib/gl/m4/wchar_t.m4, lib/gl/stddef.in.h, src/gl/Makefile.am, src/gl/m4/alloca.m4, src/gl/m4/dos.m4, src/gl/m4/dup2.m4, src/gl/m4/eealloc.m4, src/gl/m4/environ.m4, src/gl/m4/errno_h.m4, src/gl/m4/extensions.m4, src/gl/m4/fcntl-o.m4, src/gl/m4/fcntl_h.m4, src/gl/m4/gnulib-cache.m4, src/gl/m4/longlong.m4, src/gl/m4/lstat.m4, src/gl/m4/malloc.m4, src/gl/m4/malloca.m4, src/gl/m4/mode_t.m4, src/gl/m4/multiarch.m4, src/gl/m4/open.m4, src/gl/m4/pathmax.m4, src/gl/m4/putenv.m4, src/gl/m4/setenv.m4, src/gl/m4/stat.m4, src/gl/m4/stdbool.m4, src/gl/m4/stddef_h.m4, src/gl/m4/stdint.m4, src/gl/m4/stdlib_h.m4, src/gl/m4/symlink.m4, src/gl/m4/sys_stat_h.m4, src/gl/m4/time_h.m4, src/gl/m4/wchar.m4, src/gl/m4/wchar_t.m4, src/gl/m4/wint_t.m4, src/gl/stddef.in.h, src/gl/tests/alloca.in.h, src/gl/tests/binary-io.h, src/gl/tests/dup2.c, src/gl/tests/errno.in.h, src/gl/tests/fcntl.in.h, src/gl/tests/intprops.h, src/gl/tests/lstat.c, src/gl/tests/macros.h, src/gl/tests/malloc.c, src/gl/tests/malloca.c, src/gl/tests/malloca.h, src/gl/tests/malloca.valgrind, src/gl/tests/open.c, src/gl/tests/pathmax.h, src/gl/tests/putenv.c, src/gl/tests/same-inode.h, src/gl/tests/setenv.c, src/gl/tests/signature.h, src/gl/tests/stat.c, src/gl/tests/stdbool.in.h, src/gl/tests/stdint.in.h, src/gl/tests/stdlib.in.h, src/gl/tests/symlink.c, src/gl/tests/sys_stat.in.h, src/gl/tests/test-alloca-opt.c, src/gl/tests/test-binary-io.c, src/gl/tests/test-binary-io.sh, src/gl/tests/test-dup2.c, src/gl/tests/test-environ.c, src/gl/tests/test-errno.c, src/gl/tests/test-fcntl-h.c, src/gl/tests/test-getopt.c, src/gl/tests/test-getopt.h, src/gl/tests/test-getopt_long.h, src/gl/tests/test-lstat.c, src/gl/tests/test-lstat.h, src/gl/tests/test-malloca.c, src/gl/tests/test-open.c, src/gl/tests/test-open.h, src/gl/tests/test-setenv.c, src/gl/tests/test-stat.c, src/gl/tests/test-stat.h, src/gl/tests/test-stdbool.c, src/gl/tests/test-stddef.c, src/gl/tests/test-stdint.c, src/gl/tests/test-stdlib.c, src/gl/tests/test-symlink.c, src/gl/tests/test-symlink.h, src/gl/tests/test-sys_stat.c, src/gl/tests/test-time.c, src/gl/tests/test-unsetenv.c, src/gl/tests/test-wchar.c, src/gl/tests/time.in.h, src/gl/tests/unsetenv.c, src/gl/tests/wchar.in.h: Update gnulib files. 2009-12-29 Simon Josefsson * build-aux/gendocs.sh, build-aux/gnupload, build-aux/link-warning.h, build-aux/useless-if-before-free, gl/m4/gnulib-common.m4, gl/m4/gnulib-comp.m4, gl/m4/gnulib-comp.m4~, gl/m4/ld-version-script.m4, gl/m4/lib-ld.m4, gl/m4/warnings.m4, lib/gl/Makefile.am, lib/gl/gettext.h, lib/gl/m4/extensions.m4, lib/gl/m4/gnulib-common.m4, lib/gl/m4/gnulib-comp.m4, lib/gl/m4/include_next.m4, lib/gl/m4/string_h.m4, lib/gl/override/lib/gettext.h.diff, lib/gl/string.in.h, lib/gl/strverscmp.c, maint.mk, src/gl/Makefile.am, src/gl/getopt.c, src/gl/getopt.in.h, src/gl/getopt1.c, src/gl/getopt_int.h, src/gl/gettext.h, src/gl/m4/getopt.m4, src/gl/m4/gnulib-common.m4, src/gl/m4/gnulib-comp.m4, src/gl/m4/include_next.m4, src/gl/m4/unistd_h.m4, src/gl/m4/version-etc.m4, src/gl/override/lib/gettext.h.diff, src/gl/progname.c, src/gl/progname.h, src/gl/tests/Makefile.am, src/gl/tests/test-unistd.c, src/gl/tests/test-version-etc.c, src/gl/tests/test-version-etc.sh, src/gl/tests/verify.h, src/gl/unistd.in.h, src/gl/version-etc.c, src/gl/version-etc.h: Update gnulib files. 2009-07-29 Simon Josefsson * README-alpha: Typo. 2009-07-23 Simon Josefsson * build-aux/vc-list-files, gl/m4/lib-link.m4, gl/m4/manywarnings.m4, lib/gl/Makefile.am, lib/gl/m4/include_next.m4, lib/gl/m4/string_h.m4, lib/gl/string.in.h, maint.mk, src/gl/Makefile.am, src/gl/m4/gnulib-comp.m4, src/gl/m4/include_next.m4, src/gl/m4/unistd_h.m4, src/gl/m4/version-etc.m4, src/gl/tests/Makefile.am, src/gl/tests/test-unistd.c, src/gl/tests/test-version-etc.c, src/gl/tests/test-version-etc.sh, src/gl/tests/verify.h, src/gl/tests/version-etc-fsf.c, src/gl/unistd.in.h, src/gl/version-etc.c, src/gl/version-etc.h: Update gnulib files. 2009-06-17 Simon Josefsson * doc/gss.texi: Typo. 2009-06-17 Simon Josefsson * doc/gss.texi: Typo. 2009-05-20 Simon Josefsson * cfg.mk, configure.ac, lib/Makefile.am, lib/krb5/Makefile.am, src/Makefile.am, tests/Makefile.am: Build fixes. 2009-05-08 Simon Josefsson * cfg.mk: Fix -Werror handling. 2009-05-06 Simon Josefsson * lib/krb5/context.c: Fix warning on Ubuntu 8.04. 2009-05-06 Simon Josefsson * build-aux/gnupload, build-aux/useless-if-before-free, build-aux/vc-list-files, doc/gendocs_template, gl/Makefile.am, gl/Makefile.am~, gl/m4/gnulib-comp.m4, gl/m4/gnulib-comp.m4~, gl/m4/lib-link.m4, gl/m4/lib-prefix.m4, lib/gl/gettext.h, maint.mk, src/gl/getopt1.c, src/gl/gettext.h: Update gnulib files. 2009-05-06 Simon Josefsson * README-alpha: Fix. 2009-05-06 Simon Josefsson * configure.ac: Fix warnings on Ubuntu 8.04. 2009-04-15 Simon Josefsson * build-aux/gendocs.sh, doc/gendocs_template, gl/m4/ld-version-script.m4, maint.mk: Update gnulib files. 2009-04-03 Simon Josefsson * NEWS, configure.ac: Bump versions. 2009-04-03 Simon Josefsson * ChangeLog: Generated. 2009-04-03 Simon Josefsson * NEWS: Version 0.1.1. 2009-04-03 Simon Josefsson * NEWS: Fix. 2009-04-03 Simon Josefsson * NEWS, lib/misc.c, tests/basic.c: Fix memory leaks. 2009-04-03 Simon Josefsson * configure.ac: Drop obsolete output def call. 2009-04-03 Simon Josefsson * configure.ac, lib/Makefile.am: Fix variable name. 2009-04-03 Simon Josefsson * lib/gl/Makefile.am, lib/gl/m4/gnulib-cache.m4, lib/gl/m4/gnulib-comp.m4, lib/gl/m4/ld-output-def.m4, m4/output-def.m4: Use ld-output-def from gnulib. 2009-04-03 Simon Josefsson * configure.ac, m4/valgrind.m4, tests/Makefile.am: Use valgrind for self tests. 2009-04-03 Simon Josefsson * NEWS: Add. 2009-04-02 Simon Josefsson * NEWS, lib/krb5/name.c: Don't use insecure gethostname for name canonicalization. 2009-04-02 Simon Josefsson * gl/Makefile.am, gl/Makefile.am~, gl/m4/gnulib-cache.m4, gl/m4/gnulib-cache.m4~, lib/gl/Makefile.am, lib/gl/errno.in.h, lib/gl/gethostname.c, lib/gl/m4/errno_h.m4, lib/gl/m4/gethostname.m4, lib/gl/m4/gnulib-cache.m4, lib/gl/m4/gnulib-comp.m4, lib/gl/m4/sockpfaf.m4, lib/gl/m4/sys_socket_h.m4, lib/gl/m4/unistd_h.m4, lib/gl/sys_socket.in.h, lib/gl/unistd.in.h, lib/gl/w32sock.h: Update gnulib files. 2009-04-02 Simon Josefsson * tests/basic.c: Don't print garbage. 2009-04-01 Simon Josefsson * lib/error.c: Need to use bindtextdomain in libgss too. 2009-04-01 Simon Josefsson * lib/krb5/name.c: Fix logic. 2009-04-01 Simon Josefsson * lib/krb5/name.c: Work around HOST_NAME_MAX problem on mingw. 2009-03-31 Simon Josefsson * NEWS: Add. 2009-03-31 Simon Josefsson * lib/Makefile.am, lib/krb5/Makefile.am, src/Makefile.am, tests/Makefile.am: Fix order of -I's. 2009-03-31 Simon Josefsson * lib/gl/Makefile.am, lib/gl/errno.in.h, lib/gl/gethostname.c, lib/gl/m4/errno_h.m4, lib/gl/m4/gethostname.m4, lib/gl/m4/gnulib-comp.m4, lib/gl/m4/sockpfaf.m4, lib/gl/sys_socket.in.h, lib/gl/w32sock.h: Update gnulib files. 2009-03-31 Simon Josefsson * lib/Makefile.am: Typo. 2009-03-31 Simon Josefsson * NEWS, configure.ac, lib/Makefile.am, m4/output-def.m4: Generate *.def file. 2009-03-31 Simon Josefsson * m4/pkg.m4: Needed by gtk-doc.m4. 2009-03-31 Simon Josefsson * m4/gtk-doc.m4: Update gtk-doc.m4. 2009-03-30 Simon Josefsson * NEWS: Fix. 2009-03-30 Simon Josefsson * NEWS, configure.ac: Bump versions. 2009-03-30 Simon Josefsson * ChangeLog: Generated. 2009-03-30 Simon Josefsson * doc/texinfo.css: Update texinfo css. 2009-03-30 Simon Josefsson * NEWS: Version 0.1.0. 2009-03-30 Simon Josefsson * NEWS: Fix. 2009-03-30 Simon Josefsson * NEWS, configure.ac, doc/reference/gss-docs.sgml, lib/headers/gss.h.in: Add GSS_VERSION_MAJOR, GSS_VERSION_MINOR, GSS_VERSION_PATCH, and GSS_VERSION_NUMBER. 2009-03-27 Simon Josefsson * src/Makefile.am: Link libcmd-gss to gnulib. 2009-03-27 Simon Josefsson * NEWS: Add. 2009-03-27 Simon Josefsson * NEWS: Fix. 2009-03-27 Simon Josefsson * NEWS: Add. 2009-03-27 Simon Josefsson * lib/libgss.map: Use better shared library version name. 2009-03-27 Simon Josefsson * NEWS: Add. 2009-03-27 Simon Josefsson * doc/reference/gss-docs.sgml: Fix gtk-doc manual. 2009-03-27 Simon Josefsson * NEWS: Fix. 2009-03-27 Simon Josefsson * NEWS: Add. 2009-03-27 Simon Josefsson * NEWS, configure.ac, lib/headers/gss/krb5.h: Bump version. 2009-03-27 Simon Josefsson * lib/ext.c, lib/libgss.map: Remove obsolete functions. 2009-03-27 Simon Josefsson * lib/libgss.map: Don't export krb5 functions. 2009-03-27 Simon Josefsson * lib/libgss.map: Separate official/inofficial krb5. 2009-03-27 Simon Josefsson * lib/headers/gss/krb5-ext.h, lib/internal.h, lib/krb5/k5internal.h, lib/krb5/oid.c: Fix compilation. 2009-03-27 Simon Josefsson * NEWS, configure.ac, lib/Makefile.am, lib/headers/gss.h.in, lib/headers/gss/krb5-ext.h, lib/headers/gss/krb5.h, lib/krb5/oid.c: Add GSS_KRB5_NT_MACHINE_UID_NAME*. Add gss/krb5-ext.h. 2009-03-27 Simon Josefsson * NEWS, configure.ac, lib/headers/gss/krb5.h, lib/libgss.map: Revert "Drop GSS_KRB5*_static symbols." This reverts commit 6f67203f18eb78151d959b7985a1afd53b49909d. 2009-03-27 Simon Josefsson * lib/krb5/oid.c: Revert "Fix krb5 OID implementation." This reverts commit eca0ae5c9ec8226918ee46d3f734ab06d7292ae7. 2009-03-27 Simon Josefsson * lib/krb5/oid.c: Fix krb5 OID implementation. 2009-03-27 Simon Josefsson * NEWS, configure.ac, lib/headers/gss/krb5.h, lib/libgss.map: Drop GSS_KRB5*_static symbols. 2009-03-27 Simon Josefsson * lib/krb5/error.c: Use static on internal symbols. 2009-03-27 Simon Josefsson * NEWS, THANKS, src/gl/Makefile.am, src/gl/getopt.c, src/gl/getopt.in.h, src/gl/getopt1.c, src/gl/getopt_int.h, src/gl/m4/getopt.m4, src/gl/m4/gnulib-cache.m4, src/gl/m4/gnulib-comp.m4, src/gl/m4/unistd_h.m4, src/gl/tests/Makefile.am, src/gl/tests/test-unistd.c, src/gl/unistd.in.h: Add getopt gnulib module to src/gl/. Reported by Dagobert Michelsen in . 2009-03-27 Simon Josefsson * NEWS, configure.ac: Bump versions. 2009-03-27 Simon Josefsson * configure.ac: Only test warning parmeters when using GCC. 2009-03-27 Simon Josefsson * ChangeLog: Generated. 2009-03-27 Simon Josefsson * NEWS: Version 0.0.26. 2009-03-27 Simon Josefsson * lib/Makefile.am: Dist libgss.map. 2009-03-27 Simon Josefsson * configure.ac: More debug output. 2009-03-27 Simon Josefsson * Makefile.am, configure.ac: Fix distcheck. 2009-03-27 Simon Josefsson * THANKS: Add. 2009-03-27 Simon Josefsson * AUTHORS: Update PGP key. 2009-03-27 Simon Josefsson * NEWS, gl/Makefile.am, gl/Makefile.am~, gl/m4/gnulib-cache.m4, gl/m4/gnulib-cache.m4~, gl/m4/gnulib-comp.m4, gl/m4/gnulib-comp.m4~, gl/m4/ld-version-script.m4, lib/Makefile.am, lib/libgss.map: Use library version script. 2009-03-27 Simon Josefsson * README-alpha: Fix. 2009-03-27 Simon Josefsson * tests/Makefile.am, tests/basic.c, tests/krb5context.c: Make self-tests compile. 2009-03-27 Simon Josefsson * doc/reference/Makefile.am: Update. 2009-03-27 Simon Josefsson * doc/reference/Makefile.am: Ignore more. 2009-03-27 Simon Josefsson * lib/gl/Makefile.am, lib/gl/gettext.h, lib/gl/m4/gnulib-cache.m4, lib/gl/m4/gnulib-comp.m4: Update gnulib files. 2009-03-27 Simon Josefsson * lib/Makefile.am, lib/gl/Makefile.am, lib/gl/getopt.c, lib/gl/getopt.in.h, lib/gl/getopt1.c, lib/gl/getopt_int.h, lib/gl/gettext.h, lib/gl/m4/getopt.m4, lib/gl/m4/gnulib-cache.m4, lib/gl/m4/gnulib-comp.m4: Update gnulib files. 2009-03-27 Simon Josefsson * Makefile.am, configure.ac, gl/Makefile.am, gl/Makefile.am~, gl/gethostname.c, gl/getopt.c, gl/getopt.in.h, gl/getopt1.c, gl/getopt_int.h, gl/gettext.h, gl/m4/extensions.m4, gl/m4/gethostname.m4, gl/m4/getopt.m4, gl/m4/gnulib-cache.m4, gl/m4/gnulib-cache.m4~, gl/m4/gnulib-comp.m4, gl/m4/gnulib-comp.m4~, gl/m4/include_next.m4, gl/m4/string_h.m4, gl/m4/strverscmp.m4, gl/m4/sys_socket_h.m4, gl/m4/unistd_h.m4, gl/override/lib/gettext.h.diff, gl/string.in.h, gl/strverscmp.c, gl/unistd.in.h, lib/Makefile.am, lib/gl/Makefile.am, lib/gl/dummy.c, lib/gl/gethostname.c, lib/gl/getopt.c, lib/gl/getopt.in.h, lib/gl/getopt1.c, lib/gl/getopt_int.h, lib/gl/gettext.h, lib/gl/m4/00gnulib.m4, lib/gl/m4/extensions.m4, lib/gl/m4/gethostname.m4, lib/gl/m4/getopt.m4, lib/gl/m4/gnulib-cache.m4, lib/gl/m4/gnulib-common.m4, lib/gl/m4/gnulib-comp.m4, lib/gl/m4/gnulib-tool.m4, lib/gl/m4/include_next.m4, lib/gl/m4/string_h.m4, lib/gl/m4/strverscmp.m4, lib/gl/m4/sys_socket_h.m4, lib/gl/m4/unistd_h.m4, lib/gl/override/lib/gettext.h.diff, lib/gl/string.in.h, lib/gl/strverscmp.c, lib/gl/unistd.in.h, lib/krb5/Makefile.am: Separate library gnulib files from top-level gnulib files. 2009-03-27 Simon Josefsson * lib/libgss.map: Add comment about obsolete symbols. 2009-03-27 Simon Josefsson * NEWS, doc/gss.texi, lib/headers/gss/ext.h: Drop gss_alloc_fail_function. 2009-03-27 Simon Josefsson * gl/unistd.in.h: Update gnulib files. 2009-03-19 Simon Josefsson * configure.ac, src/gss.c, tests/basic.c, tests/krb5context.c: Assume standard header files. 2009-03-19 Simon Josefsson * configure.ac: Drop unused. 2009-03-19 Simon Josefsson * GNUmakefile, build-aux/gnupload, maint.mk: Update gnulib files. 2009-03-05 Simon Josefsson * build-aux/gnupload: Update gnulib files. 2009-03-05 Simon Josefsson * lib/krb5/name.c: Avoid xgethostname. 2009-03-05 Simon Josefsson * gl/Makefile.am, gl/dummy.c, gl/m4/gnulib-cache.m4, gl/m4/gnulib-comp.m4, gl/m4/inline.m4, gl/m4/xalloc.m4, gl/xalloc.h, gl/xgethostname.c, gl/xgethostname.h, gl/xmalloc.c: Drop xalloc. 2009-03-05 Simon Josefsson * lib/asn1.c, lib/error.c, lib/ext.c, lib/internal.h, lib/krb5/cred.c, lib/krb5/error.c, lib/krb5/msg.c, lib/krb5/name.c: Reduce xalloc usage further. 2009-03-05 Simon Josefsson * lib/context.c, lib/cred.c, lib/ext.c, lib/internal.h, lib/krb5/checksum.c, lib/krb5/checksum.h, lib/krb5/context.c, lib/misc.c, lib/name.c: Reduce xalloc usage. 2009-03-04 Simon Josefsson * gl/Makefile.am, gl/m4/gnulib-common.m4, src/gl/Makefile.am, src/gl/m4/gnulib-common.m4, src/gl/m4/stdarg.m4: Update gnulib files. 2009-03-02 Simon Josefsson * lib/gss.map, lib/libgss.map: Rename. 2009-03-02 Simon Josefsson * lib/gss.map: Add. 2009-03-02 Simon Josefsson * lib/error.c: Use static on error constant arrays. 2009-02-26 Simon Josefsson * doc/gss.texi: Bump copyright year. 2009-02-26 Simon Josefsson * NEWS, doc/Makefile.am, doc/gdoc: Update gdoc. 2009-02-26 Simon Josefsson * configure.ac: Bump versions. 2009-02-26 Simon Josefsson * cfg.mk: Fix release rules. 2009-02-26 Simon Josefsson * ChangeLog: Generated. 2009-02-26 Simon Josefsson * NEWS: Version 0.0.25. 2009-02-26 Simon Josefsson * tests/Makefile.am, tests/basic.c, tests/krb5context.c: Fix header usage in self tests. 2009-02-26 Simon Josefsson * lib/krb5/Makefile.am: Fix. 2009-02-26 Simon Josefsson * lib/Makefile.am, lib/internal.h, lib/krb5/Makefile.am, lib/krb5/k5internal.h, lib/meta.c, lib/meta.h, src/Makefile.am, src/gss.c: Fix header file usage. 2009-02-26 Simon Josefsson * configure.ac, lib/Makefile.am, lib/api.h, lib/ext.h, lib/gss.h.in, lib/headers/gss.h.in, lib/headers/gss/api.h, lib/headers/gss/ext.h, lib/headers/gss/krb5.h, lib/krb5/krb5.h: Move header files around. 2009-02-26 Simon Josefsson * configure.ac: Print whether krb5 plugin is built. 2009-02-26 Simon Josefsson * configure.ac, gl/override/lib/progname.h.diff, src/Makefile.am, src/gl/gettext.h, src/gl/override/lib/gettext.h.diff, src/gl/override/lib/progname.h.diff, src/gl/progname.h: Fix gnulib files. 2009-02-26 Simon Josefsson * Makefile.am, configure.ac, gl/Makefile.am, gl/m4/gnulib-cache.m4, gl/m4/gnulib-comp.m4, gl/m4/stdarg.m4, gl/progname.c, gl/progname.h, gl/stdarg.in.h, gl/version-etc.c, gl/version-etc.h, src/Makefile.am, src/gl/Makefile.am, src/gl/gettext.h, src/gl/m4/00gnulib.m4, src/gl/m4/gnulib-cache.m4, src/gl/m4/gnulib-common.m4, src/gl/m4/gnulib-comp.m4, src/gl/m4/gnulib-tool.m4, src/gl/m4/include_next.m4, src/gl/m4/stdarg.m4, src/gl/progname.c, src/gl/progname.h, src/gl/stdarg.in.h, src/gl/tests/Makefile.am, src/gl/version-etc.c, src/gl/version-etc.h: Update gnulib files. 2009-02-26 Simon Josefsson * configure.ac: Fix tarname. 2009-02-26 Simon Josefsson * NEWS: Add. 2009-02-26 Simon Josefsson * configure.ac, gl/Makefile.am, gl/m4/gnulib-cache.m4, gl/m4/gnulib-comp.m4, gl/m4/stdarg.m4, gl/override/lib/progname.h.diff, gl/progname.c, gl/progname.h, gl/stdarg.in.h, gl/version-etc.c, gl/version-etc.h, src/Makefile.am, src/gss.c: Update gss --help and --version outputs. 2009-02-26 Simon Josefsson * po/id.po.in, po/vi.po.in: Sync with TP. 2009-02-26 Simon Josefsson * build-aux/gendocs.sh, build-aux/gnupload, doc/gendocs_template, gl/Makefile.am, gl/m4/00gnulib.m4, gl/m4/extensions.m4, gl/m4/gethostname.m4, gl/m4/gnulib-cache.m4, gl/m4/gnulib-common.m4, gl/m4/gnulib-comp.m4, gl/m4/include_next.m4, gl/m4/inline.m4, gl/m4/lib-ld.m4, gl/m4/lib-link.m4, gl/m4/strverscmp.m4, gl/m4/unistd_h.m4, gl/unistd.in.h: Update gnulib files. 2008-12-11 Simon Josefsson * NEWS: Add. 2008-12-11 Simon Josefsson * configure.ac, src/Makefile.am, tests/Makefile.am, tests/basic.c, tests/krb5context.c: Fix warnings. 2008-12-11 Simon Josefsson * build-aux/gnupload, configure.ac, gl/Makefile.am, gl/gettext.h, gl/m4/gnulib-cache.m4, gl/m4/gnulib-comp.m4, gl/m4/include_next.m4, gl/m4/manywarnings.m4, gl/m4/warnings.m4, gl/override/lib/gettext.h.diff, lib/Makefile.am, lib/krb5/Makefile.am, lib/krb5/context.c, lib/krb5/cred.c, lib/krb5/error.c, lib/krb5/msg.c, lib/krb5/name.c, lib/misc.c, lib/obsolete.c, maint.mk: Enable more warnings. Fix many warnings. 2008-11-25 Simon Josefsson * doc/reference/Makefile.am, gtk-doc.make, m4/gtk-doc.m4: Update gtk-doc files. 2008-11-12 Simon Josefsson * README: Mention license versions. 2008-11-12 Simon Josefsson * cfg.mk: Add coverage and mingw rules. 2008-11-12 Simon Josefsson * configure.ac: Enable automake warnings. Fix libtool warning. 2008-11-12 Simon Josefsson * GNUmakefile, Makefile.am, NEWS, cfg.mk, configure.ac, doc/Makefile.am, doc/fdl-1.3.texi, doc/fdl.texi, doc/gss.texi, gl/Makefile.am, gl/gethostname.c, gl/m4/gethostname.m4, gl/m4/gnulib-cache.m4, gl/m4/gnulib-common.m4, gl/m4/gnulib-comp.m4, gl/m4/include_next.m4, gl/m4/string_h.m4, gl/m4/sys_socket_h.m4, gl/m4/unistd_h.m4, gl/m4/warnings.m4, gl/string.in.h, gl/unistd.in.h, maint.mk: Update gnulib files. Use GFDLv1.3+. 2008-11-12 Simon Josefsson * gss.pc.in: Add URL fields. 2008-09-10 Simon Josefsson * NEWS, configure.ac: Bump versions. 2008-09-10 Simon Josefsson * ChangeLog: Generated. 2008-09-10 Simon Josefsson * NEWS: Version 0.0.24. 2008-09-10 Simon Josefsson * NEWS: Add. 2008-09-10 Simon Josefsson * AUTHORS: Update PGP key. 2008-09-10 Simon Josefsson * .cvsignore, build-aux/.cvsignore, doc/.cvsignore, doc/reference/.cvsignore, doc/reference/tmpl/.cvsignore, doc/reference/tmpl/gss-unused.sgml, gl/.cvsignore, gl/m4/.cvsignore, lib/.cvsignore, lib/krb5/.cvsignore, m4/.cvsignore, po/.cvsignore, src/.cvsignore, tests/.cvsignore: Remove unused. 2008-09-10 Simon Josefsson * doc/reference/Makefile.am: Update to modern gtk-doc makefile. 2008-09-10 Simon Josefsson * doc/reference/gss-docs.sgml: Sync with gss.texi. 2008-09-10 Simon Josefsson * doc/gss.texi: Fix license version. 2008-09-10 Simon Josefsson * gss.fms: Remove unused gss.fms. 2008-09-10 Simon Josefsson * lib/meta.c: Fix warning. 2008-09-10 Simon Josefsson * Makefile.am: Run distcheck with -Werror to catch regressions. 2008-09-10 Simon Josefsson * configure.ac: Fix project name. 2008-09-10 Simon Josefsson * lib/asn1.c, lib/name.c: Fix warnings. 2008-09-10 Simon Josefsson * Makefile.am, cfg.mk: Move release target to cfg.mk and update it. 2008-09-10 Simon Josefsson * .clcopying: Use liberal license. 2008-09-10 Simon Josefsson * doc/specification/draft-hartman-gss-naming-00.txt, doc/specification/draft-hartman-gss-naming-01.txt, doc/specification/draft-ietf-cat-gss-conv-00.txt, doc/specification/draft-ietf-cat-gsseasy-01.txt, doc/specification/draft-ietf-cat-gssv2-cbind-04.txt, doc/specification/draft-ietf-cat-krb5gss-mech2-00.txt, doc/specification/draft-ietf-cat-krb5gss-mech2-01.txt, doc/specification/draft-ietf-cat-krb5gss-mech2-02.txt, doc/specification/draft-ietf-cat-krb5gss-mech2-03.txt, doc/specification/draft-ietf-kitten-2478bis-00.txt, doc/specification/draft-ietf-kitten-2478bis-01.txt, doc/specification/draft-ietf-kitten-2478bis-02.txt, doc/specification/draft-ietf-kitten-2478bis-03.txt, doc/specification/draft-ietf-kitten-2478bis-04.txt, doc/specification/draft-ietf-kitten-2478bis-05.txt, doc/specification/draft-ietf-kitten-extended-mech-inquiry-00.txt, doc/specification/draft-ietf-kitten-extended-mech-inquiry-01.txt, doc/specification/draft-ietf-kitten-extended-mech-inquiry-02.txt, doc/specification/draft-ietf-kitten-extended-mech-inquiry-03.txt, doc/specification/draft-ietf-kitten-gss-naming-00.txt, doc/specification/draft-ietf-kitten-gss-naming-01.txt, doc/specification/draft-ietf-kitten-gss-naming-02.txt, doc/specification/draft-ietf-kitten-gss-naming-03.txt, doc/specification/draft-ietf-kitten-gss-naming-04.txt, doc/specification/draft-ietf-kitten-gss-naming-05.txt, doc/specification/draft-ietf-kitten-gssapi-channel-bindings-00.txt, doc/specification/draft-ietf-kitten-gssapi-channel-bindings-01.txt, doc/specification/draft-ietf-kitten-gssapi-channel-bindings-02.txt, doc/specification/draft-ietf-kitten-gssapi-channel-bindings-03.txt, doc/specification/draft-ietf-kitten-gssapi-csharp-bindings-00.txt, doc/specification/draft-ietf-kitten-gssapi-domain-based-names-00.tx t, doc/specification/draft-ietf-kitten-gssapi-domain-based-names-01.tx t, doc/specification/draft-ietf-kitten-gssapi-domain-based-names-02.tx t, doc/specification/draft-ietf-kitten-gssapi-domain-based-names-03.tx t, doc/specification/draft-ietf-kitten-gssapi-domain-based-names-05.tx t, doc/specification/draft-ietf-kitten-gssapi-extensions-iana-00.txt, doc/specification/draft-ietf-kitten-gssapi-extensions-iana-01.txt, doc/specification/draft-ietf-kitten-gssapi-extensions-iana-02.txt, doc/specification/draft-ietf-kitten-gssapi-naming-exts-00.txt, doc/specification/draft-ietf-kitten-gssapi-naming-exts-01.txt, doc/specification/draft-ietf-kitten-gssapi-naming-exts-02.txt, doc/specification/draft-ietf-kitten-gssapi-prf-00.txt, doc/specification/draft-ietf-kitten-gssapi-prf-01.txt, doc/specification/draft-ietf-kitten-gssapi-prf-02.txt, doc/specification/draft-ietf-kitten-gssapi-prf-03.txt, doc/specification/draft-ietf-kitten-gssapi-prf-04.txt, doc/specification/draft-ietf-kitten-gssapi-prf-06.txt, doc/specification/draft-ietf-kitten-gssapi-prf-07.txt, doc/specification/draft-ietf-kitten-gssapi-rfc2853-update-for-cshar p-00.txt, doc/specification/draft-ietf-kitten-gssapi-store-cred-00.txt, doc/specification/draft-ietf-kitten-gssapi-store-cred-01.txt, doc/specification/draft-ietf-kitten-gssapi-store-cred-02.txt, doc/specification/draft-ietf-kitten-gssapi-v3-guide-to-00.txt, doc/specification/draft-ietf-kitten-gssapi-v3-guide-to-01.txt, doc/specification/draft-ietf-kitten-krb5-gssapi-domain-based-names- 00.txt, doc/specification/draft-ietf-kitten-krb5-gssapi-domain-based-names- 02.txt, doc/specification/draft-ietf-kitten-krb5-gssapi-domain-based-names- 03.txt, doc/specification/draft-ietf-kitten-krb5-gssapi-prf-00.txt, doc/specification/draft-ietf-kitten-krb5-gssapi-prf-01.txt, doc/specification/draft-ietf-kitten-krb5-gssapi-prf-02.txt, doc/specification/draft-ietf-kitten-krb5-gssapi-prf-03.txt, doc/specification/draft-ietf-kitten-krb5-gssapi-prf-04.txt, doc/specification/draft-ietf-kitten-rfc2853bis-00.txt, doc/specification/draft-ietf-kitten-rfc2853bis-01.txt, doc/specification/draft-ietf-kitten-rfc2853bis-03.txt, doc/specification/draft-ietf-kitten-stackable-pseudo-mechs-00.txt, doc/specification/draft-ietf-kitten-stackable-pseudo-mechs-01.txt, doc/specification/draft-ietf-kitten-stackable-pseudo-mechs-02.txt, doc/specification/draft-ietf-krb-wg-gss-cb-hash-agility-00.txt, doc/specification/draft-ietf-krb-wg-gss-crypto-00.txt, doc/specification/draft-ietf-krb-wg-gssapi-cfx-00.txt, doc/specification/draft-ietf-krb-wg-gssapi-cfx-01.txt, doc/specification/draft-ietf-krb-wg-gssapi-cfx-02.txt, doc/specification/draft-ietf-krb-wg-gssapi-cfx-03.txt, doc/specification/draft-ietf-krb-wg-gssapi-cfx-04.txt, doc/specification/draft-ietf-krb-wg-gssapi-cfx-05.txt, doc/specification/draft-ietf-krb-wg-gssapi-cfx-06.txt, doc/specification/draft-ietf-krb-wg-gssapi-cfx-07.txt, doc/specification/draft-ietf-nfsv4-ccm-03.txt, doc/specification/draft-ietf-nfsv4-channel-bindings-02.txt, doc/specification/draft-ietf-nfsv4-channel-bindings-04.txt, doc/specification/draft-ietf-secsh-gsskeyex-09.txt, doc/specification/draft-johansson-http-gss-00.txt, doc/specification/draft-johansson-http-gss-01.txt, doc/specification/draft-morris-java-gssapi-update-for-csharp-00.txt , doc/specification/draft-raeburn-cat-gssapi-krb5-3des-00.txt, doc/specification/draft-raeburn-krb-gssapi-krb5-3des-01.txt, doc/specification/draft-williams-gssapi-channel-bindings-00.txt, doc/specification/draft-williams-gssapi-cred-store-00.txt, doc/specification/draft-williams-gssapi-domain-based-names-00.txt, doc/specification/draft-williams-gssapi-prf-00.txt, doc/specification/draft-williams-gssapi-stackable-pseudo-mechs-00.t xt, doc/specification/draft-williams-gssapi-store-deleg-creds-00.txt, doc/specification/draft-williams-gssapi-store-deleg-creds-01.txt, doc/specification/draft-williams-gssapi-v3-guide-to-00.txt, doc/specification/draft-williams-krb5-gssapi-domain-based-names-00. txt, doc/specification/draft-williams-krb5-gssapi-prf-00.txt, doc/specification/draft-zhu-spnego-2478bis-00.txt, doc/specification/draft-zhu-spnego-2478bis-01.txt, doc/specification/gssapi-service-names, doc/specification/rfc1508.txt, doc/specification/rfc1509.txt, doc/specification/rfc1961.txt, doc/specification/rfc1964.txt, doc/specification/rfc2025.txt, doc/specification/rfc2078.txt, doc/specification/rfc2203.txt, doc/specification/rfc2478.txt, doc/specification/rfc2479.txt, doc/specification/rfc2743.txt, doc/specification/rfc2744.txt, doc/specification/rfc2853.txt, doc/specification/rfc4121.txt, doc/specification/rfc4178.txt, doc/specification/rfc4401.txt, doc/specification/rfc4402.txt, doc/specification/rfc4768.txt: Remove. 2008-09-10 Simon Josefsson * GNUmakefile, build-aux/config.rpath, gl/Makefile.am, gl/m4/include_next.m4, gl/m4/lib-link.m4, gl/m4/lib-prefix.m4, gl/string.in.h, gl/unistd.in.h, maint.mk: Update gnulib files. 2008-08-21 Simon Josefsson * gl/Makefile.am, gl/m4/autobuild.m4, gl/m4/gnulib-comp.m4, gl/m4/string_h.m4, gl/m4/strverscmp.m4, gl/string.in.h, gl/strverscmp.h, lib/version.c: Update gnulib files. 2008-08-20 Simon Josefsson * Makefile.am: Don't copy archive to www directory. 2008-08-20 Simon Josefsson * configure.ac: Uses autobuild from gnulib. 2008-08-20 Simon Josefsson * GNUmakefile, build-aux/gnupload, doc/gendocs_template, gl/Makefile.am, gl/m4/autobuild.m4, gl/m4/gnulib-cache.m4, gl/m4/gnulib-comp.m4, gl/m4/gnulib-tool.m4, gl/xalloc.h, m4/autobuild.m4, maint.mk: Update gnulib files. 2008-08-20 Simon Josefsson * po/LINGUAS, po/id.po.in, po/zh_CN.po.in: Sync with TP. 2008-08-20 Simon Josefsson * README: Fix URLs. 2008-08-20 Simon Josefsson * doc/gss.texi: Fix URLs. 2008-05-20 Simon Josefsson * NEWS: Add. 2008-05-20 Simon Josefsson * doc/Makefile.am: Fix copyright year. 2008-05-20 Simon Josefsson * po/LINGUAS, po/ga.po.in, po/sk.po.in, po/sv.po.in, po/vi.po.in: Sync with TP. 2008-05-20 Simon Josefsson * Makefile.am, NEWS, cfg.mk, po/Makevars, po/fr.po, po/fr.po.in, po/pl.po, po/pl.po.in, po/ro.po, po/ro.po.in, po/rw.po, po/rw.po.in, po/sv.po, po/sv.po.in, po/vi.po, po/vi.po.in: Don't use gettext --no-location. 2008-05-20 Simon Josefsson * NEWS: Add. 2008-05-20 Simon Josefsson * .clcopying, .cvscopying, Makefile.am: Rename .cvscopying to .clcopying. 2008-05-20 Simon Josefsson * GNUmakefile, build-aux/gendocs.sh, build-aux/gnupload, gl/m4/extensions.m4, gl/m4/getopt.m4, gl/m4/gnulib-common.m4, gl/m4/gnulib-comp.m4, gl/m4/include_next.m4, gl/xalloc.h, gl/xmalloc.c: Update gnulib files. 2008-04-01 Simon Josefsson * gl/Makefile.am: Update gnulib files. 2008-03-25 Simon Josefsson * GNUmakefile, build-aux/GNUmakefile, build-aux/gendocs.sh, build-aux/maint.mk, cfg.mk, gl/Makefile.am, gl/getopt.c, gl/m4/gnulib-cache.m4, gl/m4/gnulib-comp.m4, gl/m4/include_next.m4, gl/m4/lib-link.m4, gl/m4/unistd_h.m4, gl/unistd.in.h, maint-cfg.mk, maint.mk: Update gnulib files. 2008-02-25 Simon Josefsson * doc/specification/draft-ietf-kitten-extended-mech-inquiry-03.txt, doc/specification/draft-ietf-kitten-gssapi-channel-bindings-03.txt, doc/specification/draft-ietf-kitten-gssapi-extensions-iana-02.txt: Add. 2008-02-06 Simon Josefsson * configure.ac: Bump versions. 2008-02-06 Simon Josefsson * NEWS: Add. 2008-02-06 Simon Josefsson * GNUmakefile, maint-cfg.mk: Need config.rpath workaround. 2008-02-06 Simon Josefsson * build-aux/config.rpath, build-aux/gendocs.sh, build-aux/gnupload, gl/Makefile.am, gl/gethostname.c, gl/m4/unistd_h.m4, gl/unistd.in.h, gl/xalloc.h: Update gnulib files. 2008-02-06 Simon Josefsson * Makefile.am: Brace expansion is not POSIX portable. 2007-12-26 Simon Josefsson * doc/specification/draft-ietf-kitten-gssapi-domain-based-names-05.tx t: Add. 2007-12-19 Simon Josefsson * ChangeLog: Generated. 2007-12-19 Simon Josefsson * doc/reference/Makefile.am: Sync with libidn. 2007-12-19 Simon Josefsson * NEWS: Version 0.0.23. 2007-12-19 Simon Josefsson * Makefile.am: Fix release target. 2007-12-19 Simon Josefsson * NEWS: Add. 2007-12-19 Simon Josefsson * doc/gendocs_template: Fix gendocs_template file. 2007-12-19 Simon Josefsson * gl/override/doc/gendocs_template: Fix gendocs_template file. 2007-12-19 Simon Josefsson * gl/override/doc/gendocs_template.diff, gl/override/doc/gpl.texi.diff: Fix gendocs_template file. 2007-12-19 Simon Josefsson * doc/Makefile.am: Use gpl-3.0.texi instead of gpl.texi. 2007-12-19 Simon Josefsson * doc/gss.texi: Fix gpl/fdl includes. 2007-12-19 Simon Josefsson * build-aux/GNUmakefile, build-aux/gendocs.sh, build-aux/gnupload, build-aux/maint.mk, doc/fdl.texi, gl/Makefile.am, gl/gethostname.c, gl/getopt.c, gl/getopt1.c, gl/getopt_int.h, gl/gettext.h, gl/m4/gnulib-cache.m4, gl/m4/gnulib-common.m4, gl/m4/gnulib-comp.m4, gl/m4/include_next.m4, gl/m4/lib-link.m4, gl/m4/strverscmp.m4, gl/m4/unistd_h.m4, gl/strverscmp.c, gl/strverscmp.h, gl/xalloc.h, gl/xgethostname.c, gl/xmalloc.c: Update gnulib files. 2007-12-19 Simon Josefsson * gl/getopt.in.h, gl/m4/extensions.m4, gl/unistd.in.h: Update gnulib files. 2007-12-19 Simon Josefsson * doc/gpl-3.0.texi, doc/gpl.texi, gl/getopt_.h, gl/unistd_.h: Update gnulib files. 2007-12-19 Simon Josefsson * GNUmakefile, maint-cfg.mk: Revert config.rpath hack. 2007-12-19 Simon Josefsson * NEWS, configure.ac: Use gettext 0.17. 2007-12-19 Simon Josefsson * NEWS, configure.ac: Bump versions. 2007-08-31 Simon Josefsson * configure.ac: Drop gnits mode. 2007-08-07 Simon Josefsson * doc/specification/draft-ietf-kitten-rfc2853bis-03.txt: Add. 2007-06-29 Simon Josefsson * ChangeLog: Generated. 2007-06-29 Simon Josefsson * NEWS: Version 0.0.22. 2007-06-29 Simon Josefsson * doc/gpl.texi: Add GPLv3. 2007-06-29 Simon Josefsson * build-aux/config.rpath, build-aux/maint.mk, gl/Makefile.am, gl/m4/absolute-header.m4, gl/m4/gnulib-comp.m4, gl/m4/include_next.m4, gl/m4/unistd_h.m4, gl/unistd_.h: Update gnulib files. 2007-06-29 Simon Josefsson * COPYING: Add GPLv3, since automake installs GPLv2. 2007-06-27 Simon Josefsson * NEWS: Add. 2007-06-27 Simon Josefsson * NEWS: Add. 2007-06-27 Simon Josefsson * lib/krb5/Makefile.am, lib/krb5/checksum.c, lib/krb5/checksum.h, lib/krb5/context.c, lib/krb5/cred.c, lib/krb5/error.c, lib/krb5/k5internal.h, lib/krb5/krb5.h, lib/krb5/msg.c, lib/krb5/name.c, lib/krb5/oid.c, lib/krb5/protos.h, lib/krb5/utils.c: Use GPLv3 instead of GPLv2. 2007-06-27 Simon Josefsson * .cvscopying, Makefile.am, configure.ac, doc/Makefile.am, doc/Makefile.gdoci, lib/Makefile.am, lib/api.h, lib/asn1.c, lib/context.c, lib/cred.c, lib/error.c, lib/ext.c, lib/ext.h, lib/gss.h.in, lib/internal.h, lib/meta.c, lib/meta.h, lib/misc.c, lib/msg.c, lib/name.c, lib/obsolete.c, lib/oid.c, lib/version.c, maint-cfg.mk, src/Makefile.am, src/gss.c, src/gss.ggo, tests/Makefile.am, tests/basic.c, tests/krb5context.c, tests/threadsafety: Use GPLv3 instead of GPLv2. 2007-06-14 Simon Josefsson * Makefile.am: Move from cvs to git. 2007-05-22 Simon Josefsson * NEWS, configure.ac: Bump versions. 2007-05-22 Simon Josefsson * Makefile.am: Fix release target. 2007-05-22 Simon Josefsson * ChangeLog: [no log message] 2007-05-22 Simon Josefsson * po/fr.po, po/pl.po, po/ro.po, po/rw.po, po/sv.po, po/vi.po: Sync with TP. 2007-05-22 Simon Josefsson * NEWS: Version 0.0.21. 2007-05-22 Simon Josefsson * NEWS: Fix. 2007-05-22 Simon Josefsson * NEWS, configure.ac: Bump versions. 2007-05-22 Simon Josefsson * src/Makefile.am: Don't remove gss_cmd.c and gss_cmd.h on 'make distclean'. Reported by Bernd Zeimetz , solution suggested by Russ Allbery . 2007-05-22 Simon Josefsson * gl/Makefile.am, gl/m4/unistd_h.m4, gl/unistd_.h: Update,. 2007-04-16 Simon Josefsson * ChangeLog: [no log message] 2007-04-16 Simon Josefsson * NEWS, configure.ac: Version 0.0.20. 2007-04-16 Simon Josefsson * gl/m4/gnulib-common.m4: Update. 2007-04-16 Simon Josefsson * build-aux/.cvsignore, gl/.cvsignore, gl/m4/.cvsignore: [no log message] 2007-04-16 Simon Josefsson * maint-cfg.mk: Fix. 2007-04-16 Simon Josefsson * NEWS: Add. 2007-04-16 Simon Josefsson * gendocs.sh, gnupload, maint.mk: UPdate. 2007-04-16 Simon Josefsson * GNUmakefile: Rewrite. 2007-04-16 Simon Josefsson * build-aux/GNUmakefile, build-aux/config.rpath, build-aux/gendocs.sh, build-aux/gnupload, build-aux/link-warning.h, build-aux/maint.mk, gl/.cvsignore, gl/Makefile.am, gl/getopt_.h, gl/m4/.cvsignore, gl/m4/absolute-header.m4, gl/m4/gnulib-cache.m4, gl/m4/gnulib-comp.m4, gl/m4/lib-link.m4, gl/m4/unistd_h.m4, gl/unistd_.h, gl/xalloc.h: Update. 2007-04-16 Simon Josefsson * configure.ac: Use build-aux/. 2007-03-08 Simon Josefsson * doc/specification/draft-johansson-http-gss-01.txt: Add. 2007-02-28 Simon Josefsson * doc/specification/draft-ietf-krb-wg-gss-cb-hash-agility-00.txt: Add. 2007-01-08 Simon Josefsson * po/fr.po, po/pl.po, po/ro.po, po/rw.po, po/sv.po, po/vi.po: Generated. 2007-01-08 Simon Josefsson * NEWS: Version 0.0.19. 2007-01-08 Simon Josefsson * ChangeLog, m4/.cvsignore: [no log message] 2007-01-08 Simon Josefsson * NEWS: Fix. 2007-01-08 Simon Josefsson * NEWS: Add. 2007-01-08 Simon Josefsson * configure.ac: Bump autoconf/automake/gettext version. 2007-01-08 Simon Josefsson * .cvscopying, Makefile.am, NEWS, README, README-alpha, THANKS, configure.ac, doc/Makefile.am, doc/Makefile.gdoci, doc/gdoc, doc/gss.texi, gss.pc.in, lib/Makefile.am, lib/api.h, lib/asn1.c, lib/context.c, lib/cred.c, lib/error.c, lib/ext.c, lib/ext.h, lib/gss.h.in, lib/internal.h, lib/krb5/Makefile.am, lib/krb5/checksum.c, lib/krb5/checksum.h, lib/krb5/context.c, lib/krb5/cred.c, lib/krb5/error.c, lib/krb5/k5internal.h, lib/krb5/krb5.h, lib/krb5/msg.c, lib/krb5/name.c, lib/krb5/oid.c, lib/krb5/protos.h, lib/krb5/utils.c, lib/meta.c, lib/meta.h, lib/misc.c, lib/msg.c, lib/name.c, lib/obsolete.c, lib/oid.c, lib/version.c, maint-cfg.mk, po/POTFILES.in, src/Makefile.am, src/gss.c, src/gss.ggo, tests/Makefile.am, tests/basic.c, tests/krb5context.c, tests/threadsafety: Bump copyright years. 2007-01-08 Simon Josefsson * AUTHORS: Update PGP key. 2007-01-08 Simon Josefsson * NEWS: Add. 2007-01-08 Simon Josefsson * gl/Makefile.am, gl/gettext.h, gl/m4/gnulib-cache.m4, gl/m4/gnulib-comp.m4, gl/m4/lib-link.m4: Update. 2007-01-08 Simon Josefsson * lib/asn1.c: (_gss_decapsulate_token): Use size_t for temporary variable, not int. For some reason, this broke 'make check' on amd64, see for details. Reported by Kurt Roeckx . 2006-12-26 Simon Josefsson * doc/specification/rfc4768.txt: Add. 2006-11-16 Simon Josefsson * lib/error.c: Remove (in internal.h). 2006-11-16 Simon Josefsson * lib/error.c: Need internal.h, for PACKAGE. 2006-11-16 Simon Josefsson * configure.ac: Bump versions. 2006-11-16 Simon Josefsson * NEWS: Add. 2006-11-16 Simon Josefsson * NEWS: Bump version. 2006-11-16 Simon Josefsson * gl/Makefile.am, gl/gettext.h, gl/m4/gnulib-comp.m4, gl/m4/inline.m4, gl/m4/lib-link.m4, gl/m4/xalloc.m4, gl/xalloc.h, gl/xmalloc.c, gnupload: Update. 2006-11-07 Simon Josefsson * doc/reference/gss-docs.tmpl: Remove. 2006-11-07 Simon Josefsson * doc/reference/gss-docs.sgml: Add. 2006-11-06 Simon Josefsson * ChangeLog: [no log message] 2006-11-06 Simon Josefsson * NEWS: Version 0.0.18. 2006-11-06 Simon Josefsson * po/fr.po, po/pl.po, po/ro.po, po/rw.po, po/sv.po, po/vi.po: Sync with TP. 2006-11-06 Simon Josefsson * doc/gpl.texi, doc/gss.texi, gl/Makefile.am, gl/m4/gnulib-cache.m4, gl/m4/gnulib-comp.m4, gl/override/doc/gpl.texi.diff, po/fr.po, po/pl.po, po/ro.po, po/rw.po, po/sv.po, po/vi.po: Fix license in manual. 2006-11-06 Simon Josefsson * gl/m4/xalloc.m4, gl/xalloc.h, gl/xmalloc.c: Update. 2006-11-06 Simon Josefsson * tests/krb5context.tkt: Cosmetics. 2006-11-06 Simon Josefsson * lib/asn1.c: Fix 'invalid MIC' due to signed badness. 2006-11-06 Simon Josefsson * m4/.cvsignore: [no log message] 2006-11-06 Simon Josefsson * lib/asn1.c: (_gss_asn1_get_length_der): Sync with latest libtasn1. Update callers. 2006-11-06 Simon Josefsson * lib/version.c: Fix typo. 2006-11-06 Simon Josefsson * Makefile.am, doc/gendocs.sh, doc/gendocs_template, gendocs.sh, gl/Makefile.am, gl/m4/gnulib-cache.m4, gl/m4/gnulib-comp.m4, gl/override/doc/gendocs_template, gnupload: Use gendocs and gnupload. 2006-11-06 Simon Josefsson * configure.ac: Require gettext 0.15. 2006-11-06 Simon Josefsson * NEWS: Add. 2006-11-06 Simon Josefsson * lib/krb5/cred.c: Don't require that credential is in default realm when searching for hostkeys (broke self-tests with Shishi 0.0.30). 2006-11-06 Simon Josefsson * gl/Makefile.am, gl/m4/gnulib-cache.m4, gl/m4/gnulib-comp.m4, gl/m4/strverscmp.m4, gl/strverscmp.c, gl/strverscmp.h: Add strverscmp. 2006-11-06 Simon Josefsson * lib/version.c: Use strverscmp. 2006-11-06 Simon Josefsson * gl/Makefile.am, gl/getopt_.h, gl/gettext.h, gl/m4/gnulib-comp.m4, gl/m4/lib-link.m4, gl/xalloc.h: Update. 2006-11-06 Simon Josefsson * doc/specification/draft-ietf-kitten-gssapi-store-cred-02.txt, doc/specification/draft-johansson-http-gss-00.txt: Add. 2006-09-22 Simon Josefsson * doc/fdl.texi, gl/Makefile.am, gl/gethostname.c, gl/getopt.c, gl/getopt1.c, gl/gettext.h, gl/m4/gnulib-cache.m4, gl/m4/gnulib-comp.m4, gl/m4/lib-link.m4, gl/m4/xalloc.m4, gl/xgethostname.c, gl/xmalloc.c: Update. 2006-09-22 Simon Josefsson * configure.ac: Bump versions. 2006-09-13 Simon Josefsson * doc/specification/draft-ietf-kitten-gss-naming-05.txt, doc/specification/draft-ietf-kitten-gssapi-domain-based-names-03.tx t, doc/specification/draft-ietf-kitten-krb5-gssapi-domain-based-names- 03.txt: Add. 2006-07-28 Simon Josefsson * doc/specification/draft-ietf-kitten-gssapi-domain-based-names-02.tx t: Add. 2006-07-11 Simon Josefsson * gl/Makefile.am, gl/m4/gnulib-cache.m4, gl/m4/gnulib-comp.m4: Update. 2006-07-10 Simon Josefsson * 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-06-30 Simon Josefsson * doc/specification/draft-ietf-kitten-extended-mech-inquiry-02.txt, doc/specification/draft-ietf-kitten-gssapi-channel-bindings-02.txt, doc/specification/draft-ietf-kitten-gssapi-naming-exts-02.txt, doc/specification/draft-ietf-kitten-krb5-gssapi-domain-based-names- 02.txt, doc/specification/draft-ietf-kitten-stackable-pseudo-mechs-02.txt, doc/specification/draft-ietf-nfsv4-channel-bindings-04.txt: Add. 2006-06-22 Simon Josefsson * configure.ac: Make portable to mingw. 2006-05-04 Simon Josefsson * NEWS, configure.ac: Bump versions. 2006-04-30 Simon Josefsson * ChangeLog: [no log message] 2006-04-30 Simon Josefsson * NEWS: Version 0.0.17. 2006-04-30 Simon Josefsson * doc/gss.texi: Fix direntry. 2006-04-30 Simon Josefsson * debian/changelog, debian/compat, debian/control, debian/copyright, debian/docs, debian/libgss0-dev.install, debian/libgss0.install, debian/rules, debian/watch: Remove. 2006-04-26 Simon Josefsson * gl/Makefile.am: Update. 2006-04-19 Simon Josefsson * po/Makevars: Use --no-location. 2006-04-19 Simon Josefsson * po/fr.po, po/pl.po, po/ro.po, po/rw.po, po/sv.po, po/vi.po: Update. 2006-04-19 Simon Josefsson * Makefile.am: Fix. 2006-04-19 Simon Josefsson * Makefile.am: Fix update-po. 2006-04-19 Simon Josefsson * NEWS: Add. 2006-04-19 Simon Josefsson * doc/gss.texi: Fix @direntry. 2006-04-19 Simon Josefsson * tests/Makefile.am: Fix libgnu path. 2006-04-19 Simon Josefsson * doc/gss.texi: Fix license. 2006-04-19 Simon Josefsson * NEWS: Add. 2006-04-19 Simon Josefsson * Makefile.am, lib/Makefile.am, lib/krb5/Makefile.am, src/Makefile.am, tests/Makefile.am: Remove indent. 2006-04-19 Simon Josefsson * po/fr.po, po/pl.po, po/ro.po, po/sv.po, po/vi.po: Sync with TP. 2006-04-19 Simon Josefsson * gl/Makefile.am, gl/m4/gnulib-comp.m4, gl/m4/unistd_h.m4, maint.mk: Update. 2006-03-22 Simon Josefsson * po/fr.po, po/pl.po, po/ro.po, po/rw.po, po/sv.po, po/vi.po: Sync with TP. 2006-03-22 Simon Josefsson * doc/Makefile.am: Fix copyright years. 2006-03-08 Simon Josefsson * doc/specification/draft-ietf-kitten-gss-naming-04.txt: Add. 2006-03-07 Simon Josefsson * lib/Makefile.am: Add -no-undefined, required to produce DLLs on mingw32. 2006-02-16 Simon Josefsson * maint.mk: Update. 2006-02-14 Simon Josefsson * GNUmakefile, Makefile.cfg, Makefile.maint, gl/m4/gnulib-comp.m4, maint-cfg.mk, maint.mk: Rename. 2006-02-14 Simon Josefsson * GNUmakefile, Makefile.maint, gl/Makefile.am, gl/getopt.c, gl/m4/getopt.m4, gl/m4/gnulib-cache.m4, gl/m4/gnulib-comp.m4, gl/m4/gnulib-tool.m4: Update. 2006-02-14 Simon Josefsson * autogen.sh: Remove. 2006-02-14 Simon Josefsson * Makefile.cfg: Add. 2006-02-14 Simon Josefsson * doc/specification/rfc4401.txt, doc/specification/rfc4402.txt: Add. 2006-02-01 Simon Josefsson * doc/specification/draft-ietf-kitten-rfc2853bis-01.txt: Add. 2006-01-18 Simon Josefsson * debian/control: Fix. 2006-01-18 Simon Josefsson * debian/dirs: Remove. 2006-01-18 Simon Josefsson * debian/rules: Comment out doc. 2006-01-18 Simon Josefsson * debian/libgss0-dev.install: Add gss tool. 2006-01-18 Simon Josefsson * debian/gss-doc.doc-base, debian/gss-doc.info, debian/gss-doc.manpages, debian/libgss0-dev.install: Remove gss-doc. 2006-01-18 Simon Josefsson * debian/control: Remove gss-doc package. 2006-01-18 Simon Josefsson * debian/changelog, debian/copyright: Fix. 2006-01-18 Simon Josefsson * gl/Makefile.am, gl/m4/gnulib-comp.m4, gl/m4/gnulib-tool.m4: Update. 2005-12-22 Simon Josefsson * debian/changelog, debian/compat, debian/control, debian/copyright, debian/dirs, debian/docs, debian/gss-doc.doc-base, debian/gss-doc.info, debian/gss-doc.manpages, debian/libgss0-dev.install, debian/libgss0.install, debian/rules, debian/watch: Add. 2005-12-15 Simon Josefsson * NEWS: Add. 2005-12-15 Simon Josefsson * lib/krb5/Makefile.am: Link to Shishi. 2005-12-15 Simon Josefsson * configure.ac: Fix. 2005-11-29 Simon Josefsson * doc/specification/draft-ietf-kitten-gssapi-csharp-bindings-00.txt: Add. 2005-10-27 Simon Josefsson * doc/specification/draft-ietf-kitten-gss-naming-03.txt: Add. 2005-10-23 Simon Josefsson * configure.ac, m4/check_headerlib.m4: Improve check for Shishi. 2005-10-23 Simon Josefsson * gl/Makefile.am, gl/getopt_.h, gl/m4/gnulib-cache.m4, gl/m4/gnulib-comp.m4, gl/m4/lib-ld.m4, gl/m4/lib-link.m4, gl/m4/lib-prefix.m4, gl/xgethostname.c: Update. 2005-10-23 Simon Josefsson * AUTHORS: Update PGP key. 2005-10-20 Simon Josefsson * doc/specification/draft-ietf-kitten-extended-mech-inquiry-01.txt, doc/specification/draft-ietf-kitten-gssapi-channel-bindings-01.txt, doc/specification/draft-ietf-kitten-gssapi-domain-based-names-01.tx t, doc/specification/draft-ietf-kitten-gssapi-extensions-iana-01.txt, doc/specification/draft-ietf-kitten-gssapi-store-cred-01.txt, doc/specification/draft-ietf-kitten-gssapi-v3-guide-to-01.txt, doc/specification/draft-ietf-kitten-stackable-pseudo-mechs-01.txt: Add 2005-10-17 Simon Josefsson * doc/specification/draft-ietf-kitten-gssapi-naming-exts-01.txt: Add. 2005-10-05 Simon Josefsson * doc/specification/rfc4178.txt: Add. 2005-09-20 Simon Josefsson * Makefile.am: Fix call to wget. 2005-09-20 Simon Josefsson * po/fr.po, po/pl.po, po/ro.po, po/rw.po, po/sv.po, po/vi.po: Sync with TP. 2005-09-20 Simon Josefsson * src/Makefile.am: Fix gnulib library name. 2005-09-20 Simon Josefsson * doc/reference/tmpl/.cvsignore: [no log message] 2005-09-20 Simon Josefsson * doc/reference/tmpl/gss-unused.sgml: Add. 2005-09-20 Simon Josefsson * gl/Makefile.am: Update. 2005-09-20 Simon Josefsson * gl/m4/gnulib-cache.m4: Fix. 2005-09-20 Simon Josefsson * configure.ac: Update gnulib code. 2005-09-20 Simon Josefsson * lib/Makefile.am: Change gnulib library name. 2005-09-20 Simon Josefsson * gl/Makefile.am, gl/getopt1.c, gl/m4/getopt.m4, gl/m4/gnulib-cache.m4, gl/m4/gnulib-comp.m4, gl/m4/gnulib-tool.m4, gl/m4/gnulib.m4, gl/xmalloc.c: Update. 2005-09-20 Simon Josefsson * gl/m4/gnulib-cache.m4: Update. 2005-08-30 Simon Josefsson * doc/specification/draft-ietf-kitten-gssapi-prf-07.txt: Add. 2005-08-27 Simon Josefsson * doc/specification/draft-ietf-kitten-gssapi-prf-06.txt: Add. 2005-08-22 Simon Josefsson * po/fr.po, po/pl.po, po/ro.po, po/rw.po, po/sv.po, po/vi.po: Sync with TP. 2005-08-11 Simon Josefsson * gss.fms: Update. 2005-08-11 Simon Josefsson * NEWS, configure.ac: Bump versions. 2005-08-11 Simon Josefsson * ChangeLog: [no log message] 2005-08-11 Simon Josefsson * NEWS: Version 0.0.16. 2005-08-11 Simon Josefsson * po/fr.po, po/pl.po, po/ro.po, po/sv.po, po/vi.po: Sync with TP. 2005-08-11 Simon Josefsson * configure.ac: Bump versions. 2005-08-11 Simon Josefsson * po/fr.po, po/pl.po, po/ro.po, po/rw.po, po/sv.po, po/vi.po: Sync with TP. 2005-08-11 Simon Josefsson * gl/m4/gnulib.m4: Update. 2005-08-11 Simon Josefsson * lib/ext.c: Fix namespace. 2005-08-11 Simon Josefsson * configure.ac: Avoid xalloc-die. 2005-08-10 Simon Josefsson * po/fr.po, po/pl.po, po/ro.po, po/rw.po, po/sv.po: Sync with TP. 2005-08-10 Simon Josefsson * NEWS: Add. 2005-08-10 Simon Josefsson * AUTHORS: Update PGP key. 2005-08-10 Simon Josefsson * gl/pack.c, gl/pack.h, tests/gettext.h: Remove. 2005-08-10 Simon Josefsson * gl/Makefile.am, gl/gethostname.c, gl/getopt.c, gl/getopt1.c, gl/getopt_.h, gl/getopt_int.h, gl/gettext.h, gl/m4/codeset.m4, gl/m4/gethostname.m4, gl/m4/getopt.m4, gl/m4/gettext.m4, gl/m4/glibc21.m4, gl/m4/gnulib.m4, gl/m4/iconv.m4, gl/m4/intdiv0.m4, gl/m4/intmax.m4, gl/m4/inttypes-pri.m4, gl/m4/inttypes.m4, gl/m4/inttypes_h.m4, gl/m4/isc-posix.m4, gl/m4/lcmessage.m4, gl/m4/lib-ld.m4, gl/m4/lib-link.m4, gl/m4/lib-prefix.m4, gl/m4/longdouble.m4, gl/m4/longlong.m4, gl/m4/nls.m4, gl/m4/onceonly_2_57.m4, gl/m4/po.m4, gl/m4/printf-posix.m4, gl/m4/progtest.m4, gl/m4/signed.m4, gl/m4/size_max.m4, gl/m4/stdint_h.m4, gl/m4/uintmax_t.m4, gl/m4/ulonglong.m4, gl/m4/wchar_t.m4, gl/m4/wint_t.m4, gl/m4/xalloc.m4, gl/m4/xsize.m4, gl/xalloc.h, gl/xgethostname.c, gl/xmalloc.c: Update. 2005-08-10 Simon Josefsson * Makefile.am, doc/Makefile.am, doc/Makefile.gdoci, doc/fdl.texi, doc/gendocs.sh, doc/gendocs_template, doc/gpl.texi, lib/Makefile.am, lib/api.h, lib/asn1.c, lib/context.c, lib/cred.c, lib/error.c, lib/ext.c, lib/ext.h, lib/gss.h.in, lib/internal.h, lib/krb5/Makefile.am, lib/krb5/checksum.c, lib/krb5/checksum.h, lib/krb5/context.c, lib/krb5/cred.c, lib/krb5/error.c, lib/krb5/k5internal.h, lib/krb5/krb5.h, lib/krb5/msg.c, lib/krb5/name.c, lib/krb5/oid.c, lib/krb5/protos.h, lib/krb5/utils.c, lib/meta.c, lib/meta.h, lib/misc.c, lib/msg.c, lib/name.c, lib/obsolete.c, lib/oid.c, lib/version.c, m4/check_headerlib.m4, src/Makefile.am, src/gss.c, src/gss.ggo, tests/Makefile.am, tests/basic.c, tests/gettext.h, tests/krb5context.c, tests/threadsafety: Update license. 2005-08-10 Simon Josefsson * configure.ac: Update license. 2005-08-10 Simon Josefsson * COPYING.DOC, README: Remove. 2005-07-16 Simon Josefsson * configure.ac: Simplify. 2005-07-15 Simon Josefsson * doc/specification/rfc4121.txt: Add. 2005-06-14 Simon Josefsson * doc/specification/draft-ietf-kitten-gssapi-prf-04.txt, doc/specification/draft-ietf-kitten-krb5-gssapi-prf-04.txt: Add. 2005-06-08 Simon Josefsson * doc/specification/draft-ietf-secsh-gsskeyex-09.txt: Add. 2005-06-03 Simon Josefsson * doc/specification/draft-ietf-kitten-gss-naming-02.txt: Add. 2005-05-16 Simon Josefsson * doc/specification/draft-ietf-kitten-gssapi-naming-exts-00.txt, doc/specification/draft-ietf-kitten-gssapi-prf-03.txt: Add. 2005-05-13 Simon Josefsson * doc/specification/draft-ietf-kitten-krb5-gssapi-prf-03.txt: Add. 2005-04-05 Simon Josefsson * NEWS: Add. 2005-04-05 Simon Josefsson * po/LINGUAS, po/rw.po: Add. 2005-03-14 Simon Josefsson * doc/gss.texi: Typos, reported by Mike Castle . 2005-03-14 Simon Josefsson * doc/gss.texi: Typo. 2005-03-14 Simon Josefsson * doc/gss.texi: Typo. 2005-03-14 Simon Josefsson * THANKS: Add. 2005-03-14 Simon Josefsson * doc/gss.texi: Typo, tiny patch from Mike Castle . 2005-02-23 Simon Josefsson * doc/specification/draft-ietf-kitten-gss-naming-01.txt: Add. 2005-02-16 Simon Josefsson * doc/specification/draft-ietf-kitten-gssapi-channel-bindings-00.txt, doc/specification/draft-ietf-kitten-gssapi-extensions-iana-00.txt, doc/specification/draft-ietf-kitten-gssapi-store-cred-00.txt: Add. 2005-02-16 Simon Josefsson * doc/specification/draft-ietf-kitten-krb5-gssapi-prf-02.txt: Add. 2005-02-15 Simon Josefsson * doc/specification/draft-ietf-kitten-gssapi-prf-02.txt, doc/specification/draft-ietf-kitten-gssapi-v3-guide-to-00.txt, doc/specification/draft-ietf-kitten-stackable-pseudo-mechs-00.txt: Add. 2005-02-15 Simon Josefsson * doc/specification/draft-ietf-kitten-extended-mech-inquiry-00.txt: Add. 2005-02-02 Simon Josefsson * doc/specification/draft-ietf-kitten-rfc2853bis-00.txt: Add. 2005-01-29 Simon Josefsson * THANKS: Fix. 2005-01-29 Simon Josefsson * THANKS, po/LINGUAS, po/vi.po: Add. 2005-01-24 Simon Josefsson * doc/specification/draft-ietf-kitten-2478bis-05.txt: Add. 2004-12-27 Simon Josefsson * doc/specification/draft-ietf-kitten-gssapi-prf-01.txt, doc/specification/draft-ietf-kitten-gssapi-rfc2853-update-for-cshar p-00.txt, doc/specification/draft-ietf-kitten-krb5-gssapi-prf-01.txt: Add. 2004-12-17 Simon Josefsson * doc/specification/draft-ietf-kitten-2478bis-04.txt: Add. 2004-12-16 Simon Josefsson * doc/gss.texi: Add. 2004-12-16 Simon Josefsson * NEWS: Fix. 2004-12-16 Simon Josefsson * NEWS: Add. 2004-12-16 Simon Josefsson * lib/ext.c, lib/ext.h: (gss_release_oid): Remove. 2004-12-16 Simon Josefsson * gl/getopt_.h, gl/m4/getopt.m4: Update. 2004-12-15 Simon Josefsson * doc/specification/draft-ietf-kitten-2478bis-03.txt: Add. 2004-12-06 Simon Josefsson * doc/specification/draft-ietf-kitten-gssapi-domain-based-names-00.tx t, doc/specification/draft-ietf-kitten-gssapi-prf-00.txt, doc/specification/draft-ietf-kitten-krb5-gssapi-domain-based-names- 00.txt, doc/specification/draft-ietf-kitten-krb5-gssapi-prf-00.txt: Add. 2004-12-03 Simon Josefsson * doc/specification/draft-ietf-kitten-2478bis-02.txt: Add. 2004-12-02 Simon Josefsson * doc/specification/draft-ietf-kitten-gss-naming-00.txt: Add. 2004-11-30 Simon Josefsson * doc/specification/draft-ietf-kitten-2478bis-01.txt: Add. 2004-11-23 Simon Josefsson * doc/specification/draft-ietf-kitten-2478bis-00.txt: Add. 2004-11-22 Simon Josefsson * doc/specification/draft-zhu-spnego-2478bis-01.txt: Add. 2004-11-22 Simon Josefsson * gss.fms: Add. 2004-11-22 Simon Josefsson * ChangeLog: [no log message] 2004-11-22 Simon Josefsson * Makefile.am: Fix make distcheck. 2004-11-22 Simon Josefsson * po/fr.po, po/pl.po, po/ro.po, po/sv.po: Generated. 2004-11-22 Simon Josefsson * NEWS: Version 0.0.15. 2004-11-22 Simon Josefsson * po/LINGUAS: Sync with TP. 2004-11-21 Simon Josefsson * tests/krb5context.c: Don't use asprintf. 2004-11-21 Simon Josefsson * po/LINGUAS: Sync with TP. 2004-11-21 Simon Josefsson * src/Makefile.am, tests/Makefile.am: Need libgl.la. 2004-11-21 Simon Josefsson * doc/gdoc: Sync some fixes from libidn. 2004-11-21 Simon Josefsson * gl/getopt_.h: Update. 2004-11-19 Simon Josefsson * gl/getopt.c, gl/getopt1.c, gl/getopt_.h, gl/getopt_int.h, gl/m4/getopt.m4: Update. 2004-11-19 Simon Josefsson * doc/gss.texi: Fix. 2004-11-08 Simon Josefsson * : Add. 2004-11-07 Simon Josefsson * doc/gendocs.sh, doc/gendocs_template: Update. 2004-11-07 Simon Josefsson * po/LINGUAS, po/fr.po, po/pl.po, po/ro.po, po/sv.po: Sync with TP. 2004-11-07 Simon Josefsson * lib/Makefile.am: Typo. 2004-11-07 Simon Josefsson * Makefile.am: Update update-po target. 2004-11-07 Simon Josefsson * Makefile.am: Fix release target. 2004-11-07 Simon Josefsson * NEWS: Add. 2004-11-07 Simon Josefsson * doc/reference/.cvsignore: Rewrite. 2004-11-07 Simon Josefsson * NEWS: Add. 2004-11-07 Simon Josefsson * lib/Makefile.am: Use Libtool -export-symbols-regex. 2004-11-07 Simon Josefsson * doc/reference/Makefile.am: Disable SGML mode, for now. 2004-11-07 Simon Josefsson * doc/reference/Makefile.am: Rewrite, use official GTK-DOC Makefile.am template. 2004-11-07 Simon Josefsson * autogen.sh: Use gtkdocize. 2004-11-07 Simon Josefsson * AUTHORS: Add PGP key URL. 2004-10-25 Simon Josefsson * doc/specification/draft-hartman-gss-naming-01.txt: Add. 2004-10-24 Simon Josefsson * doc/specification/draft-williams-gssapi-domain-based-names-00.txt, doc/specification/draft-williams-gssapi-prf-00.txt, doc/specification/draft-williams-gssapi-v3-guide-to-00.txt, doc/specification/draft-williams-krb5-gssapi-domain-based-names-00. txt, doc/specification/draft-williams-krb5-gssapi-prf-00.txt, doc/specification/draft-zhu-spnego-2478bis-00.txt: Add. 2004-10-15 Simon Josefsson * NEWS, configure.ac: Bump versions. 2004-10-15 Simon Josefsson * gl/Makefile.am, gl/m4/getopt.m4: Update. 2004-10-15 Simon Josefsson * gss.fms: Add. 2004-10-15 Simon Josefsson * ChangeLog: [no log message] 2004-10-15 Simon Josefsson * po/fr.po, po/pl.po, po/ro.po, po/sv.po: Generated. 2004-10-15 Simon Josefsson * NEWS: Version 0.0.14. 2004-10-15 Simon Josefsson * NEWS, tests/threadsafety: Fix. 2004-10-15 Simon Josefsson * tests/Makefile.am: Dist threadsafety. 2004-10-15 Simon Josefsson * AUTHORS: Update PGP key. 2004-10-14 Simon Josefsson * lib/asn1.c, lib/context.c, lib/ext.h, lib/krb5/checksum.c, lib/krb5/checksum.h, lib/krb5/context.c, lib/krb5/msg.c, lib/krb5/name.c, lib/meta.h, lib/name.c: Indent. 2004-10-14 Simon Josefsson * NEWS: Add. 2004-10-14 Simon Josefsson * lib/krb5/context.c: (gss_krb5_accept_sec_context): For src_name, don't duplicate type OID, just set pointer. 2004-10-14 Simon Josefsson * lib/krb5/context.c: Fix mem leak. 2004-10-14 Simon Josefsson * lib/krb5/cred.c: Fix mem leak. 2004-10-14 Simon Josefsson * NEWS, doc/gss.texi: Add. 2004-10-14 Simon Josefsson * lib/name.c: (gss_import_name, gss_duplicate_name): Don't clone OID. 2004-10-14 Simon Josefsson * NEWS: Add. 2004-10-14 Simon Josefsson * lib/krb5/context.c: (gss_krb5_accept_sec_context): Extract sequence numbers, for gss_wrap and gss_unwrap. 2004-10-14 Simon Josefsson * lib/krb5/context.c: (gss_krb5_accept_sec_context): Handle NULL ret_flags. 2004-10-14 Simon Josefsson * tests/krb5context.c: Enable debug by default. Remove --verbose. Indent. 2004-10-05 Simon Josefsson * gl/Makefile.am, gl/m4/gnulib.m4, gl/m4/xalloc.m4, gl/xalloc.h, gl/xmalloc.c, gl/xstrdup.c, lib/name.c: Update Gnulib. Fix callers. 2004-09-17 Simon Josefsson * lib/krb5/context.c: Use new API. 2004-09-16 Simon Josefsson * tests/Makefile.am: Add threadsafety. 2004-09-16 Simon Josefsson * tests/threadsafety: Add. 2004-09-16 Simon Josefsson * lib/ext.c: Fix gettext. 2004-09-16 Simon Josefsson * lib/ext.c: (xalloc_die): Don't use strerror, for thread safety. 2004-09-13 Simon Josefsson * Makefile.am: (POURL): New URL. 2004-09-13 Simon Josefsson * po/fr.po, po/pl.po, po/ro.po, po/sv.po: Sync with TP. 2004-09-13 Simon Josefsson * po/fr.po, po/pl.po, po/ro.po, po/sv.po: Sync with TP. 2004-09-13 Simon Josefsson * doc/reference/Makefile.am: (clean-local): Add style.css. 2004-09-13 Simon Josefsson * doc/reference/.cvsignore: [no log message] 2004-09-13 Simon Josefsson * doc/specification/draft-morris-java-gssapi-update-for-csharp-00.txt: Add. 2004-08-23 Simon Josefsson * m4/autobuild.m4: Update. 2004-08-20 Simon Josefsson * m4/gtk-doc.m4: Add. 2004-08-18 Simon Josefsson * NEWS, configure.ac: Bump version. 2004-08-18 Simon Josefsson * gl/m4/gnulib.m4: Update. 2004-08-18 Simon Josefsson * doc/gss.texi: Fix. 2004-08-16 Simon Josefsson * configure.ac, gl/Makefile.am, gl/m4/gnulib.m4: Update. 2004-08-12 Simon Josefsson * doc/specification/draft-williams-gssapi-channel-bindings-00.txt: Add. 2004-08-09 Simon Josefsson * doc/gss.texi: Typo. 2004-08-09 Simon Josefsson * doc/gss.texi: Typo. 2004-08-09 Simon Josefsson * doc/gss.texi: Typo. 2004-08-09 Simon Josefsson * doc/gss.texi: Typo. 2004-08-09 Simon Josefsson * doc/gss.texi: Alloc fix. 2004-08-09 Simon Josefsson * lib/ext.c: Fix. 2004-08-09 Simon Josefsson * lib/ext.c: Fix. 2004-08-09 Simon Josefsson * configure.ac, gl/Makefile.am, gl/m4/gnulib.m4, gl/m4/xalloc.m4, gl/xalloc.h, gl/xmalloc.c, gl/xstrdup.c, lib/ext.c, lib/ext.h: Use new xmalloc interface. Gnulib update. 2004-08-08 Simon Josefsson * gss.fms: Fix. 2004-08-08 Simon Josefsson * gss.fms: Add. 2004-08-07 Simon Josefsson * ChangeLog: [no log message] 2004-08-07 Simon Josefsson * po/fr.po, po/pl.po, po/ro.po, po/sv.po: Generated. 2004-08-07 Simon Josefsson * NEWS: Version 0.0.13. 2004-08-07 Simon Josefsson * gl/xgethostname.c: Fix. 2004-08-07 Simon Josefsson * NEWS: Add. 2004-08-07 Simon Josefsson * gl/Makefile.am: Fix. 2004-08-07 Simon Josefsson * configure.ac, gl/Makefile.am, gl/m4/codeset.m4, gl/m4/gettext.m4, gl/m4/glibc21.m4, gl/m4/gnulib.m4, gl/m4/iconv.m4, gl/m4/intdiv0.m4, gl/m4/intmax.m4, gl/m4/inttypes-pri.m4, gl/m4/inttypes.m4, gl/m4/inttypes_h.m4, gl/m4/isc-posix.m4, gl/m4/lcmessage.m4, gl/m4/lib-ld.m4, gl/m4/lib-link.m4, gl/m4/lib-prefix.m4, gl/m4/longdouble.m4, gl/m4/longlong.m4, gl/m4/nls.m4, gl/m4/onceonly_2_57.m4, gl/m4/po.m4, gl/m4/printf-posix.m4, gl/m4/progtest.m4, gl/m4/signed.m4, gl/m4/size_max.m4, gl/m4/stdint_h.m4, gl/m4/uintmax_t.m4, gl/m4/ulonglong.m4, gl/m4/wchar_t.m4, gl/m4/wint_t.m4, gl/m4/xsize.m4: Use new gnulib-tool stuff. 2004-08-07 Simon Josefsson * gl/xgethostname.c: Update. 2004-08-06 Simon Josefsson * Makefile.am: Fix. 2004-08-06 Simon Josefsson * po/LINGUAS: Sync with TP. 2004-08-06 Simon Josefsson * Makefile.am: Fix. 2004-08-06 Simon Josefsson * Makefile.am: Fix. 2004-08-06 Simon Josefsson * po/fr.po, po/ro.po: Sync with TP. 2004-08-06 Simon Josefsson * Makefile.am: Fix. 2004-08-06 Simon Josefsson * Makefile.am: (update-po): Add. 2004-08-06 Simon Josefsson * po/fr.po, po/ro.po, po/sv.po: Sync with TP. 2004-08-05 Simon Josefsson * po/.cvsignore: [no log message] 2004-08-05 Simon Josefsson * NEWS: Fix. 2004-08-05 Simon Josefsson * configure.ac: Bump versions. 2004-08-05 Simon Josefsson * po/LINGUAS, po/pl.po: Update. 2004-08-05 Simon Josefsson * NEWS, po/fr.po, po/ro.po: Add. 2004-08-03 Simon Josefsson * : Add. 2004-08-02 Simon Josefsson * : Add. 2004-08-02 Simon Josefsson * doc/gss.texi: Add. 2004-08-01 Simon Josefsson * ChangeLog: [no log message] 2004-08-01 Simon Josefsson * tests/Makefile.am: Fix objdir != srcdir. 2004-08-01 Simon Josefsson * po/pl.po, po/sv.po: Generated. 2004-08-01 Simon Josefsson * NEWS: Version 0.0.12. 2004-08-01 Simon Josefsson * tests/krb5context.c: Fix i18n. 2004-08-01 Simon Josefsson * tests/Makefile.am: Add -lintl. 2004-08-01 Simon Josefsson * m4/autobuild.m4: Add. 2004-08-01 Simon Josefsson * configure.ac: Use autobuild. 2004-08-01 Simon Josefsson * doc/reference/Makefile.am: Fix. 2004-08-01 Simon Josefsson * tests/Makefile.am: Dist krb5context.key. 2004-08-01 Simon Josefsson * tests/Makefile.am: Dist krb5context.tkt. 2004-08-01 Simon Josefsson * NEWS: Add. 2004-08-01 Simon Josefsson * tests/krb5context.tkt: Add. 2004-08-01 Simon Josefsson * README: Fix. 2004-08-01 Simon Josefsson * gl/getopt.c, gl/getopt1.c, gl/m4/getopt.m4: Sync. 2004-07-27 Simon Josefsson * doc/specification/draft-ietf-nfsv4-channel-bindings-02.txt: Add. 2004-07-13 Simon Josefsson * doc/specification/draft-hartman-gss-naming-00.txt: Add. 2004-07-13 Simon Josefsson * doc/specification/draft-ietf-nfsv4-ccm-03.txt: Add. 2004-07-11 Simon Josefsson * lib/krb5/cred.c: Fix mem leak. 2004-07-11 Simon Josefsson * tests/krb5context.c: Fix mem leak. 2004-07-11 Simon Josefsson * tests/krb5context.c: Fix. 2004-07-11 Simon Josefsson * tests/krb5context.c: Remove. 2004-07-11 Simon Josefsson * tests/krb5context.c: I18n. 2004-07-11 Simon Josefsson * tests/Makefile.am, tests/krb5context.c: Fix. 2004-07-11 Simon Josefsson * NEWS: Add. 2004-07-11 Simon Josefsson * NEWS, tests/Makefile.am, tests/krb5context.key: Add. 2004-07-11 Simon Josefsson * tests/Makefile.am, tests/krb5context.c: Fix. 2004-07-11 Simon Josefsson * tests/Makefile.am, tests/krb5context.c: Fix. 2004-07-11 Simon Josefsson * tests/krb5context.c: Cleanup. 2004-07-11 Simon Josefsson * tests/krb5context.c: Add. 2004-07-11 Simon Josefsson * lib/krb5/context.c: (gss_krb5_accept_sec_context): Support ret_flags of GSS_C_PROT_READY_FLAG. 2004-07-11 Simon Josefsson * lib/krb5/context.c: (gss_krb5_delete_sec_context): Don't shishi_done for acceptor contexts. 2004-07-11 Simon Josefsson * tests/krb5context.c: Add. 2004-07-11 Simon Josefsson * tests/Makefile.am: Fix env's. 2004-07-11 Simon Josefsson * lib/asn1.c: Fix signedness bug. 2004-07-11 Simon Josefsson * tests/Makefile.am: Don't install, for libtool. 2004-07-11 Simon Josefsson * tests/.cvsignore: [no log message] 2004-07-11 Simon Josefsson * tests/.cvsignore: [no log message] 2004-07-11 Simon Josefsson * tests/Makefile.am: Add krb5context. 2004-07-11 Simon Josefsson * tests/krb5context.c: Add. 2004-07-02 Simon Josefsson * gl/.cvsignore: [no log message] 2004-07-02 Simon Josefsson * NEWS, doc/gss.texi: Add. 2004-07-02 Simon Josefsson * gl/Makefile.am: Fix. 2004-07-02 Simon Josefsson * configure.ac, gl/Makefile.am, gl/getopt.c, gl/getopt.h, gl/getopt1.c, gl/getopt_.h, gl/m4/getopt.m4: Update getopt, mainly to get uClibc targets working, which lack getopt_long. 2004-06-02 Simon Josefsson * doc/specification/draft-williams-gssapi-cred-store-00.txt: Add. 2004-05-21 Simon Josefsson * doc/specification/draft-williams-gssapi-stackable-pseudo-mechs-00.t xt, doc/specification/draft-williams-gssapi-store-deleg-creds-01.txt: Add. 2004-04-22 Simon Josefsson * doc/gss.texi: Fix. 2004-04-21 Simon Josefsson * lib/krb5/context.c: Fix ret_flags. 2004-04-21 Simon Josefsson * lib/krb5/context.c: Permit absent sequence number in EncAPRepPart, according to gssapi-cfx. 2004-04-21 Simon Josefsson * lib/krb5/context.c: Fix mem leak. 2004-04-21 Simon Josefsson * lib/krb5/checksum.c, lib/krb5/checksum.h, lib/krb5/context.c: Cosmetic. 2004-04-21 Simon Josefsson * doc/gss.texi: Add. 2004-04-21 Simon Josefsson * lib/asn1.c, lib/ext.h, lib/krb5/context.c, lib/krb5/msg.c: (gss_decapsulate_token): Don't allocate output. Update callers. 2004-04-21 Simon Josefsson * lib/asn1.c, lib/ext.h, lib/krb5/context.c, lib/krb5/msg.c: (gss_decapsulate_token_check): Remove. (gss_decapsulate_token): Modify. Update callers. 2004-04-21 Simon Josefsson * lib/krb5/context.c: (gss_krb5_init_sec_context): Fix ret_flags. 2004-04-21 Simon Josefsson * lib/context.c: Add. 2004-04-21 Simon Josefsson * lib/krb5/checksum.c: Fix. 2004-04-21 Simon Josefsson * doc/gss.texi: Add. 2004-04-21 Simon Josefsson * AUTHORS: Update PGP key. 2004-04-21 Simon Josefsson * tests/basic.c: Typo. 2004-04-21 Simon Josefsson * lib/krb5/context.c: Fix mem leak. 2004-04-19 Simon Josefsson * lib/krb5/context.c: Fix warnings. Fix mem leak. 2004-04-19 Simon Josefsson * lib/ext.h: Use const. 2004-04-19 Simon Josefsson * lib/asn1.c: Fix warnings. 2004-04-19 Simon Josefsson * lib/krb5/utils.c: Fix cast. 2004-04-19 Simon Josefsson * lib/krb5/cred.c: Fix. 2004-04-19 Simon Josefsson * lib/krb5/cred.c: Typo. 2004-04-19 Simon Josefsson * lib/krb5/cred.c: (acquire_cred1): Avoid cast. Release memory. 2004-04-19 Simon Josefsson * lib/misc.c: Robustness. 2004-04-19 Simon Josefsson * lib/name.c: Add comment. 2004-04-19 Simon Josefsson * lib/name.c: Cosmetics. 2004-04-19 Simon Josefsson * lib/msg.c: Robustness. 2004-04-19 Simon Josefsson * lib/error.c: No need for internal.h. 2004-04-19 Simon Josefsson * lib/cred.c: Indent. 2004-04-19 Simon Josefsson * lib/cred.c: (gss_inquire_cred_by_mech): Simplify. 2004-04-19 Simon Josefsson * lib/cred.c: (gss_inquire_cred): Simplify. 2004-04-19 Simon Josefsson * lib/context.c: Robustness. 2004-04-19 Simon Josefsson * lib/meta.h: Typo. 2004-04-19 Simon Josefsson * lib/internal.h, lib/meta.h: Move trampoline structs to meta.h. 2004-04-19 Simon Josefsson * lib/error.c, lib/internal.h, lib/krb5/error.c: Move i18n to where they belong. 2004-04-19 Simon Josefsson * lib/meta.c: Include meta.h. 2004-04-19 Simon Josefsson * lib/context.c, lib/cred.c, lib/error.c, lib/internal.h, lib/krb5/name.c, lib/misc.c, lib/msg.c, lib/name.c: Remove gss_warn. Include meta.h when necessary. 2004-04-19 Simon Josefsson * lib/Makefile.am, lib/internal.h, lib/meta.h: Move meta.c prototypes from internal.h to meta.h. 2004-04-18 Simon Josefsson * gss.pc.in: Drop -R libs flag. 2004-04-18 Simon Josefsson * m4/.cvsignore: [no log message] 2004-04-18 Simon Josefsson * configure.ac: Require modern autoconf/automake/gettext. 2004-04-18 Simon Josefsson * NEWS, configure.ac: Bump versions. 2004-04-18 Simon Josefsson * ChangeLog: [no log message] 2004-04-18 Simon Josefsson * po/pl.po, po/sv.po: Generated. 2004-04-18 Simon Josefsson * NEWS: Version 0.0.11. 2004-04-18 Simon Josefsson * NEWS: Add. 2004-04-18 Simon Josefsson * lib/asn1.c, lib/error.c, lib/internal.h, lib/misc.c: Fix warnings. 2004-04-18 Simon Josefsson * lib/ext.h: Add. 2004-04-18 Simon Josefsson * gl/Makefile.am, gl/getopt.c, gl/getopt.h, gl/getopt1.c, gl/getopt_int.h, gl/xalloc.h: Sync with gnulib (and update my changes). 2004-04-18 Simon Josefsson * gl/xmalloc.c: Use strerror instead of perror, to avoid using errno as right hand expression. 2004-04-18 Simon Josefsson * lib/krb5/error.c, lib/krb5/k5internal.h, lib/krb5/msg.c: Fix warnings. 2004-04-17 Simon Josefsson * NEWS: Fix. 2004-04-17 Simon Josefsson * NEWS: Fix. 2004-04-17 Simon Josefsson * lib/krb5/msg.c: (gss_krb5_unwrap): Ditto for 3DES. 2004-04-17 Simon Josefsson * NEWS: Fix. 2004-04-17 Simon Josefsson * NEWS: Add. 2004-04-17 Simon Josefsson * lib/krb5/context.c: (gss_krb5_init_sec_context): Don't reset sequence numbers, msg.c now handle them correctly. 2004-04-17 Simon Josefsson * lib/krb5/msg.c: (gss_krb5_unwrap): Fix typo that broke sequence number logic for DES-MD5. 2004-03-30 Simon Josefsson * THANKS: Add. 2004-03-30 Simon Josefsson * lib/ext.c: (gss_release_oid): Doc fix, reported by Joe Orton . 2004-03-18 Simon Josefsson * doc/specification/draft-ietf-krb-wg-gssapi-cfx-07.txt: Add. 2004-03-05 Simon Josefsson * gl/Makefile.am, gl/pack.c, gl/pack.h: Add (untested). 2004-03-05 Simon Josefsson * doc/asciidoc: Sync with 5.0.5. 2004-02-29 Simon Josefsson * NEWS: Add. 2004-02-29 Simon Josefsson * po/.cvsignore: [no log message] 2004-02-29 Simon Josefsson * THANKS, po/LINGUAS, po/pl.po: Add Polish translation, from Jakub Bogusz . 2004-02-16 Simon Josefsson * doc/specification/draft-ietf-krb-wg-gssapi-cfx-06.txt: Add. 2004-02-13 Simon Josefsson * lib/api.h: Never use X/Open headers. (Removes bogus CPP sizeof tests.) 2004-02-13 Simon Josefsson * doc/gss.texi: Add. 2004-01-25 Simon Josefsson * lib/krb5/context.c: Doc fix. 2004-01-25 Simon Josefsson * lib/krb5/context.c: Workaround seq.nr. bug. 2004-01-25 Simon Josefsson * lib/krb5/context.c, lib/krb5/msg.c: Seq.nr. fixes. 2004-01-25 Simon Josefsson * lib/krb5/context.c: Fix time_re?. 2004-01-25 Simon Josefsson * lib/krb5/context.c: Fix return codes. 2004-01-25 Simon Josefsson * lib/krb5/context.c: Cleanup. 2004-01-25 Simon Josefsson * doc/Makefile.am: Typo. 2004-01-25 Simon Josefsson * doc/Makefile.am: Dist more. 2004-01-25 Simon Josefsson * doc/gdoc: Use asciidoc in ./. 2004-01-25 Simon Josefsson * doc/asciidoc, doc/asciidoc.conf: Add. 2004-01-25 Simon Josefsson * doc/texinfo.conf: Use newline. 2004-01-25 Simon Josefsson * doc/gss.texi: Fix. 2004-01-25 Simon Josefsson * doc/gss.texi: Add FDL. 2004-01-23 Simon Josefsson * doc/fdl.texi, doc/gss.texi: Use FDL 1.2. 2004-01-22 Simon Josefsson * NEWS, configure.ac: Bump versions. 2004-01-22 Simon Josefsson * doc/gendocs_template: Fix. 2004-01-22 Simon Josefsson * doc/gendocs.sh: Upstream sync. 2004-01-22 Simon Josefsson * Makefile.am: Fix release target. 2004-01-22 Simon Josefsson * ChangeLog: [no log message] 2004-01-22 Simon Josefsson * NEWS: Version 0.0.10. 2004-01-22 Simon Josefsson * po/sv.po: Generated. 2004-01-22 Simon Josefsson * NEWS: Add. 2004-01-22 Simon Josefsson * src/gss.c: Fix #include. 2004-01-22 Simon Josefsson * doc/reference/Makefile.am: Add HIGNORE. 2004-01-22 Simon Josefsson * po/sv.po: Update. 2004-01-22 Simon Josefsson * po/sv.po: Update. 2004-01-22 Simon Josefsson * lib/krb5/context.c: Fix API. 2004-01-22 Simon Josefsson * lib/krb5/context.c: Use new Shishi API. 2004-01-21 Simon Josefsson * lib/krb5/context.c: Docfix. 2004-01-21 Simon Josefsson * lib/krb5/context.c: Fix flags. 2004-01-21 Simon Josefsson * lib/krb5/checksum.c: Fix. 2004-01-21 Simon Josefsson * lib/krb5/checksum.c: Clear unsupported req_flag's. 2004-01-21 Simon Josefsson * lib/krb5/context.c: Fix errors. 2004-01-21 Simon Josefsson * lib/krb5/context.c: Use new API. 2004-01-21 Simon Josefsson * lib/asn1.c, lib/ext.h: Add. 2004-01-21 Simon Josefsson * lib/krb5/context.c: Always offer sequencing checks. 2004-01-21 Simon Josefsson * lib/krb5/context.c: Always offer integrity/privacy. 2004-01-21 Simon Josefsson * lib/krb5/context.c: Cleanup. 2004-01-21 Simon Josefsson * lib/context.c: Clear. 2004-01-21 Simon Josefsson * lib/krb5/Makefile.am, lib/krb5/k5internal.h: Add. 2004-01-21 Simon Josefsson * lib/context.c, lib/internal.h: Remove. 2004-01-21 Simon Josefsson * lib/krb5/context.c: Fix API. 2004-01-21 Simon Josefsson * lib/krb5/name.c: (gss_krb5_canonicalize_name): Zero terminate output_name string (internal convention). 2004-01-21 Simon Josefsson * lib/name.c: (gss_duplicate_name): Zero terminate dest_name string (internal convention). 2004-01-21 Simon Josefsson * lib/krb5/context.c: Fix. Doc fix. 2004-01-21 Simon Josefsson * lib/krb5/context.c: Fix. 2004-01-21 Simon Josefsson * lib/krb5/context.c: Use new API. 2004-01-21 Simon Josefsson * lib/krb5/checksum.c, lib/krb5/checksum.h: Add. 2004-01-21 Simon Josefsson * lib/krb5/Makefile.am: Add checksum.c. 2004-01-21 Simon Josefsson * lib/krb5/context.c: Fix. 2004-01-21 Simon Josefsson * doc/specification/gssapi-service-names: Add. 2004-01-21 Simon Josefsson * lib/internal.h: Revert. 2004-01-21 Simon Josefsson * lib/internal.h: (gss_cred_id_struct) Add usage. 2004-01-19 Simon Josefsson * : Add. 2004-01-19 Simon Josefsson * : Add. 2004-01-19 Simon Josefsson * doc/specification/draft-ietf-cat-gssv2-08.txt: Remove. 2004-01-18 Simon Josefsson * lib/krb5/context.c: Add. 2004-01-18 Simon Josefsson * lib/context.c: (gss_init_sec_context): Clear output_token. 2004-01-18 Simon Josefsson * lib/krb5/context.c: (gss_krb5_init_sec_context): Split up into three functions. 2004-01-18 Simon Josefsson * lib/krb5/k5internal.h: Fix. 2004-01-18 Simon Josefsson * lib/krb5/context.c: Allow application to retry request if earlier call failed. 2004-01-16 Simon Josefsson * po/sv.po: Generated. 2004-01-16 Simon Josefsson * po/sv.po: Fix. 2004-01-16 Simon Josefsson * NEWS: Add. 2004-01-16 Simon Josefsson * po/sv.po, src/gss.c: Typo. 2004-01-16 Simon Josefsson * po/sv.po: Update. 2004-01-16 Simon Josefsson * po/.cvsignore: [no log message] 2004-01-16 Simon Josefsson * src/gss.c: I18n. 2004-01-16 Simon Josefsson * po/gss.pot: Remove. 2004-01-16 Simon Josefsson * lib/error.c, lib/krb5/error.c: Revert. 2004-01-16 Simon Josefsson * po/LINGUAS: Remove (for now). 2004-01-16 Simon Josefsson * lib/obsolete.c, po/POTFILES.in: Fix. 2004-01-16 Simon Josefsson * lib/obsolete.c: Remove warnings, we should use compile time warnings instead. 2004-01-16 Simon Josefsson * lib/error.c, lib/krb5/error.c: I18n. 2004-01-16 Simon Josefsson * po/LINGUAS: Add en@quot en@boldquot. 2004-01-16 Simon Josefsson * src/Makefile.am, src/gss.c: I18n. 2004-01-16 Simon Josefsson * src/Makefile.am: I18n. 2004-01-16 Simon Josefsson * src/Makefile.am: I18n. 2004-01-16 Simon Josefsson * po/POTFILES.in: Add. 2004-01-16 Simon Josefsson * lib/krb5/name.c, src/gss.c: Indent. 2004-01-16 Simon Josefsson * po/gss.pot, po/sv.po: Generated. 2004-01-16 Simon Josefsson * src/gss.c: Fix. 2004-01-16 Simon Josefsson * configure.ac, doc/Makefile.am: Add man page for gss. 2004-01-16 Simon Josefsson * src/gss.c: Nicer output. 2004-01-16 Simon Josefsson * src/gss.ggo: Fix. 2004-01-16 Simon Josefsson * src/gss.c: Use long type for error code. 2004-01-16 Simon Josefsson * src/gss.ggo: Fix. 2004-01-16 Simon Josefsson * src/gss.ggo: Fix. 2004-01-16 Simon Josefsson * lib/krb5/name.c, lib/name.c: Fix warnings. 2004-01-15 Simon Josefsson * NEWS: Add. 2004-01-15 Simon Josefsson * lib/cred.c, lib/error.c, lib/ext.c, lib/ext.h, lib/internal.h, lib/krb5/context.c, lib/krb5/cred.c, lib/krb5/msg.c, lib/krb5/protos.h, lib/meta.c, lib/misc.c, lib/name.c, src/gss.c, tests/basic.c: Indent. 2004-01-15 Simon Josefsson * Makefile.am: Fix indent. 2004-01-15 Simon Josefsson * src/gss.ggo: Typo. 2004-01-15 Simon Josefsson * src/.cvsignore: [no log message] 2004-01-15 Simon Josefsson * Makefile.am, configure.ac, gl/Makefile.am, gl/getopt.c, gl/getopt.h, gl/getopt1.c, src/Makefile.am, src/gss.c, src/gss.ggo: Add command line tool in src/. Add getopt in gl/, for gengetopt parser in src/. 2004-01-15 Simon Josefsson * NEWS: Add. 2004-01-15 Simon Josefsson * lib/error.c: (gss_display_status): Fail on unknown errors. Print info for supplementary bits. Use message context to continue errors. 2004-01-15 Simon Josefsson * lib/krb5/Makefile.am: Fix warnings. 2004-01-15 Simon Josefsson * lib/krb5/context.c: Fix warning. 2004-01-15 Simon Josefsson * Makefile.am: (release): Use CSS. 2004-01-15 Simon Josefsson * NEWS, configure.ac: Bump versions. 2004-01-15 Simon Josefsson * ChangeLog: [no log message] 2004-01-15 Simon Josefsson * NEWS: Version 0.0.9. 2004-01-15 Simon Josefsson * po/gss.pot, po/sv.po: Generated. 2004-01-15 Simon Josefsson * lib/meta.c: Typo. 2004-01-15 Simon Josefsson * lib/meta.c: Empty variables still have size, fix _gss_mech_apis definition and usage. 2004-01-15 Simon Josefsson * lib/misc.c: Cleanup. 2004-01-15 Simon Josefsson * lib/obsolete.c: Fix warnings. 2004-01-15 Simon Josefsson * tests/Makefile.am: Add -I for gnulib. 2004-01-15 Simon Josefsson * po/gss.pot, po/sv.po: Generated. 2004-01-15 Simon Josefsson * lib/ext.c: Doc fix. 2004-01-15 Simon Josefsson * NEWS: Add. 2004-01-15 Simon Josefsson * lib/ext.c: Typo. 2004-01-15 Simon Josefsson * lib/ext.c: Typo. 2004-01-15 Simon Josefsson * lib/ext.h: (gss_userok): Add. 2004-01-15 Simon Josefsson * doc/gss.texi, lib/ext.c: Add gss_userok. 2004-01-15 Simon Josefsson * lib/.cvsignore: [no log message] 2004-01-15 Simon Josefsson * lib/.cvsignore: [no log message] 2004-01-15 Simon Josefsson * lib/internal.h: Typo. 2004-01-15 Simon Josefsson * lib/Makefile.am: Add ext.c. 2004-01-15 Simon Josefsson * lib/ext.c, lib/misc.c: (gss_oid_equal, gss_copy_oid, gss_duplicate_oid, gss_release_oid): Move from misc.c to ext.c. 2004-01-15 Simon Josefsson * lib/internal.h: (gss_warn): Add. 2004-01-15 Simon Josefsson * lib/ext.h: (gss_warn): Remove. 2004-01-15 Simon Josefsson * lib/version.c: Doc fix. 2004-01-15 Simon Josefsson * NEWS: Add. 2004-01-15 Simon Josefsson * lib/krb5/context.c: (gss_krb5_accept_sec_context): Support subkeys in AP-REQ. 2004-01-14 Simon Josefsson * lib/krb5/context.c: (gss_krb5_accept_sec_context): Fix error code. 2004-01-14 Simon Josefsson * lib/krb5/context.c: (gss_krb5_delete_sec_context): Don't delete key or tkt, they are (should be) deallocate as part of the ticket set. 2004-01-13 Simon Josefsson * lib/internal.h: (gss_ctx_id_struct): Remove peer. 2004-01-12 Simon Josefsson * doc/specification/draft-ietf-krb-wg-gssapi-cfx-05.txt: Add. 2004-01-12 Simon Josefsson * lib/krb5/context.c: (gss_krb5_accept_sec_context): Cleanup. 2004-01-12 Simon Josefsson * lib/context.c: Fix. 2004-01-12 Simon Josefsson * lib/krb5/context.c: Doc fix. 2004-01-12 Simon Josefsson * lib/krb5/context.c: Fix. 2004-01-12 Simon Josefsson * lib/krb5/context.c: Cleanup. 2004-01-12 Simon Josefsson * lib/context.c: (gss_delete_sec_context): Propagate error code. 2004-01-12 Simon Josefsson * lib/krb5/context.c: (gss_krb5_init_sec_context): Cleanup. 2004-01-12 Simon Josefsson * lib/krb5/context.c: (gss_krb5_init_sec_context): Don't allocate context. 2004-01-12 Simon Josefsson * lib/context.c: (gss_init_sec_context): Allocate context. 2004-01-12 Simon Josefsson * lib/context.c: Error handling. Fix. 2004-01-12 Simon Josefsson * lib/context.c: Error handling. 2004-01-12 Simon Josefsson * lib/context.c: Error handling. 2004-01-12 Simon Josefsson * lib/krb5/context.c: Deallocate. 2004-01-12 Simon Josefsson * lib/krb5/context.c, lib/krb5/cred.c, lib/krb5/k5internal.h: Remove ticket from credential structure. 2004-01-12 Simon Josefsson * lib/krb5/cred.c: Fix. 2004-01-12 Simon Josefsson * NEWS, lib/krb5/oid.c: Add. 2004-01-12 Simon Josefsson * lib/krb5/cred.c: (gss_krb5_inquire_cred_by_mech): Add. 2004-01-12 Simon Josefsson * lib/krb5/protos.h: (gss_krb5_inquire_cred_by_mech): Add. 2004-01-12 Simon Josefsson * lib/internal.h: (_gss_mech_api_struct): Add inquire_cred_by_mech. (_gss_find_mech): Use const for OID. 2004-01-12 Simon Josefsson * lib/meta.c: (_gss_mech_apis): Add gss_krb5_inquire_cred_by_mech. (_gss_find_mech): Use const for OID. 2004-01-12 Simon Josefsson * lib/cred.c: (gss_inquire_cred_by_mech): Implement. 2004-01-12 Simon Josefsson * lib/cred.c: Fix. 2004-01-12 Simon Josefsson * lib/krb5/cred.c: Fix. 2004-01-12 Simon Josefsson * NEWS, lib/cred.c, lib/krb5/cred.c: Fix. 2004-01-12 Simon Josefsson * lib/krb5/cred.c: Fix. 2004-01-12 Simon Josefsson * lib/krb5/name.c: Support GSS_C_NT_EXPORT_NAME. 2004-01-12 Simon Josefsson * lib/meta.c: Fix name-types. 2004-01-12 Simon Josefsson * NEWS: Add. 2004-01-12 Simon Josefsson * lib/name.c: (gss_export_name): Implement it. 2004-01-12 Simon Josefsson * lib/krb5/name.c: (gss_krb5_export_name): Use self-describing format. 2004-01-12 Simon Josefsson * lib/misc.c: Fix. 2004-01-11 Simon Josefsson * lib/meta.c: (_gss_mech_apis): Add gss_krb5_export_name. 2004-01-11 Simon Josefsson * lib/internal.h: (gss_name_struct): Use size_t. (_gss_mech_api_struct): Add export_name. 2004-01-11 Simon Josefsson * lib/krb5/name.c, lib/krb5/protos.h: (gss_krb5_export_name): Add. 2004-01-11 Simon Josefsson * NEWS: Add. 2004-01-11 Simon Josefsson * lib/krb5/name.c: (gss_krb5_canonicalize_name): Support GSS_KRB5_NT_PRINCIPAL_NAME. 2004-01-11 Simon Josefsson * NEWS: Add. 2004-01-11 Simon Josefsson * lib/krb5/cred.c: (gss_krb5_release_cred): Add. (gss_krb5_inquire_cred): Support cred_handle == GSS_C_NO_CREDENTIAL. (gss_krb5_acquire_cred): Don't allocate output_cred_handle (new API). 2004-01-11 Simon Josefsson * lib/cred.c: (gss_acquire_cred): Allocate output_cred_handle. (gss_release_cred): Deallocate cred_handle. Call backend. 2004-01-11 Simon Josefsson * lib/meta.c: (_gss_mech_apis): Add release_cred. 2004-01-11 Simon Josefsson * lib/internal.h: (_gss_mech_api_struct): Add release_cred. 2004-01-11 Simon Josefsson * lib/krb5/protos.h: (gss_krb5_release_cred): Add. 2004-01-11 Simon Josefsson * lib/name.c: Fix. 2004-01-11 Simon Josefsson * lib/misc.c: Fix. 2004-01-11 Simon Josefsson * lib/misc.c: Fix. 2004-01-11 Simon Josefsson * lib/meta.c: Remove dummy stuff. Add _gss_indicate_mechs1. 2004-01-11 Simon Josefsson * lib/krb5/msg.c, lib/krb5/protos.h: (gss_krb5_get_mic, gss_krb5_verify_mic): Add. 2004-01-11 Simon Josefsson * lib/misc.c: (gss_indicate_mechs): Use new API. Improve. 2004-01-11 Simon Josefsson * lib/name.c: (gss_inquire_mechs_for_name): Use new API. Improve. 2004-01-11 Simon Josefsson * lib/internal.h: Hide _gss_mech_apis. 2004-01-11 Simon Josefsson * lib/cred.c: (gss_acquire_cred, gss_inquire_cred): Cleanup. 2004-01-11 Simon Josefsson * tests/Makefile.am, tests/basic.c, tests/utils.c: Move utils.c into basic.c. 2004-01-11 Simon Josefsson * configure.ac: Check for locale.h, for self tests. 2004-01-11 Simon Josefsson * lib/ext.h: Typo. 2004-01-11 Simon Josefsson * lib/error.c: (gss_warn): Fix. 2004-01-11 Simon Josefsson * lib/error.c, lib/ext.h: Add gss_warn. 2004-01-11 Simon Josefsson * lib/gss.h.in: Remove #include's. 2004-01-11 Simon Josefsson * lib/ext.h: Include stddef.h. 2004-01-11 Simon Josefsson * lib/meta.c: Fix. 2004-01-11 Simon Josefsson * NEWS: Add. 2004-01-11 Simon Josefsson * gl/xmalloc.c: Typo. 2004-01-11 Simon Josefsson * doc/reference/.cvsignore: [no log message] 2004-01-11 Simon Josefsson * configure.ac, doc/Makefile.am, doc/reference/Makefile.am, doc/reference/gss-docs.tmpl: Add GTK-DOC API output. 2004-01-11 Simon Josefsson * lib/context.c, lib/cred.c, lib/error.c, lib/misc.c, lib/msg.c, lib/name.c: Doc fix. 2004-01-11 Simon Josefsson * lib/api.h: Full prototypes (mostly for GTK-DOC). Indent. 2004-01-11 Simon Josefsson * gl/Makefile.am, gl/gettext.h, lib/Makefile.am, lib/gettext.h: Move gettext from lib/ to gl/. 2004-01-11 Simon Josefsson * doc/gss.texi: Add. 2004-01-11 Simon Josefsson * lib/msg.c: Doc fix. 2004-01-11 Simon Josefsson * lib/msg.c: Fix. 2004-01-11 Simon Josefsson * po/gss.pot, po/sv.po: Generated. 2004-01-11 Simon Josefsson * tests/Makefile.am: Don't build tests unconditionally. 2004-01-11 Simon Josefsson * tests/basic.c, tests/utils.c: Fix. 2004-01-11 Simon Josefsson * autogen.sh: Fix 2004-01-11 Simon Josefsson * NEWS, configure.ac: Bump versions. 2004-01-11 Simon Josefsson * ChangeLog: [no log message] 2004-01-11 Simon Josefsson * NEWS: Version 0.0.8. 2004-01-11 Simon Josefsson * lib/asn1.c, lib/krb5/context.c, lib/krb5/cred.c, lib/krb5/k5internal.h, lib/krb5/msg.c, lib/misc.c, lib/name.c, tests/basic.c, tests/utils.c: Fix warnings. 2004-01-11 Simon Josefsson * .cvsignore: [no log message] 2004-01-11 Simon Josefsson * COPYING: Remove. 2004-01-11 Simon Josefsson * po/gss.pot, po/sv.po: Generated. 2004-01-11 Simon Josefsson * NEWS: Add. 2004-01-11 Simon Josefsson * NEWS: Add. 2004-01-11 Simon Josefsson * doc/gss.texi: Add. 2004-01-11 Simon Josefsson * doc/gss.texi: Use gdoc. 2004-01-11 Simon Josefsson * lib/misc.c: Add gss_release_oid. Error fixes. Doc fix. 2004-01-11 Simon Josefsson * lib/name.c: Doc fix. 2004-01-11 Simon Josefsson * lib/name.c: Fix. 2004-01-11 Simon Josefsson * doc/gss.texi: Use gdoc. 2004-01-11 Simon Josefsson * lib/cred.c: Doc fix. 2004-01-11 Simon Josefsson * doc/gss.texi: Use gdoc. 2004-01-11 Simon Josefsson * lib/misc.c: Typo. 2004-01-11 Simon Josefsson * lib/misc.c: Doc fix. 2004-01-11 Simon Josefsson * lib/error.c: Doc fix. 2004-01-11 Simon Josefsson * doc/gss.texi: Fix. 2004-01-11 Simon Josefsson * doc/gss.texi: Add. 2004-01-11 Simon Josefsson * doc/gss.texi: Use gdoc. 2004-01-11 Simon Josefsson * lib/name.c: Doc fix. 2004-01-11 Simon Josefsson * doc/gdoc: Fix. 2004-01-11 Simon Josefsson * doc/gss.texi: Fix per-msg API. 2004-01-11 Simon Josefsson * doc/gdoc: Fix. 2004-01-11 Simon Josefsson * lib/context.c: Fix error codes. 2004-01-11 Simon Josefsson * lib/name.c: Typo. 2004-01-11 Simon Josefsson * lib/name.c: Doc fix. 2004-01-11 Simon Josefsson * lib/name.c: Fix. 2004-01-11 Simon Josefsson * NEWS: Add. 2004-01-11 Simon Josefsson * lib/krb5/context.c, lib/krb5/cred.c, lib/krb5/k5internal.h: Fix gss_duplicate_name usage. 2004-01-11 Simon Josefsson * lib/name.c: (gss_duplicate_name): Allocate DEST_NAME. Fix return value. Doc fix. 2004-01-11 Simon Josefsson * lib/misc.c: Fix. 2004-01-11 Simon Josefsson * NEWS: Fix. 2004-01-11 Simon Josefsson * NEWS: Add. 2004-01-11 Simon Josefsson * lib/asn1.c, lib/context.c, lib/cred.c, lib/error.c, lib/ext.h, lib/krb5/context.c, lib/krb5/cred.c, lib/krb5/error.c, lib/krb5/k5internal.h, lib/krb5/msg.c, lib/krb5/name.c, lib/krb5/protos.h, lib/meta.c, lib/misc.c, lib/msg.c, lib/name.c, lib/obsolete.c, lib/version.c, po/gss.pot, po/sv.po, tests/basic.c: Indent. 2004-01-11 Simon Josefsson * lib/Makefile.am: Fix indent. 2004-01-11 Simon Josefsson * lib/Makefile.am, lib/krb5/Makefile.am: Distcheck fixes. 2004-01-11 Simon Josefsson * po/POTFILES.in: Fix. 2004-01-11 Simon Josefsson * tests/Makefile.am: Add -I for lib/krb5/. 2004-01-11 Simon Josefsson * lib/Makefile.am, lib/krb5.h, lib/krb5/Makefile.am, lib/krb5/krb5.h, lib/krb5/protos.h, lib/meta.c: Split krb5.h into krb5/krb5.h (public) and krb5/protos.h (private). 2004-01-11 Simon Josefsson * configure.ac, lib/Makefile.am, lib/krb5.c, lib/krb5/.cvsignore, lib/krb5/Makefile.am, lib/krb5/context.c, lib/krb5/cred.c, lib/krb5/error.c, lib/krb5/k5internal.h, lib/krb5/msg.c, lib/krb5/name.c, lib/krb5/oid.c, lib/krb5/utils.c: Split up lib/krb5.c into lib/krb/*.c. 2004-01-11 Simon Josefsson * lib/msg.c: Typo. 2004-01-10 Simon Josefsson * lib/context.c: Typo. 2004-01-10 Simon Josefsson * lib/msg.c: Doc fix. 2004-01-10 Simon Josefsson * lib/krb5.c: Typo. 2004-01-10 Simon Josefsson * lib/krb5.c: Cleanup ticket lifetime calculations. 2004-01-10 Simon Josefsson * lib/context.c, lib/internal.h, lib/krb5.c, lib/krb5.h, lib/meta.c: Make context_time work. 2004-01-10 Simon Josefsson * lib/context.c: Typo. 2004-01-10 Simon Josefsson * lib/context.c: (gss_delete_sec_context): Do mech specifics too. 2004-01-10 Simon Josefsson * lib/name.c: Doc fix. 2004-01-10 Simon Josefsson * lib/krb5.c, lib/krb5.h, lib/meta.c: Add delete_sec_context. 2004-01-10 Simon Josefsson * lib/internal.h: Add delete_sec_context. Remove xstrdup.h. Indent. 2004-01-10 Simon Josefsson * gl/Makefile.am, gl/xmalloc.c, gl/xstrdup.c, gl/xstrdup.h: Move xstrdup into xmalloc. 2004-01-10 Simon Josefsson * doc/Makefile.am: Dist texinfo.css. 2004-01-10 Simon Josefsson * doc/gendocs.sh, doc/gendocs_template: Sync with Texinfo. 2004-01-10 Simon Josefsson * doc/gss.texi: Fix title. 2004-01-10 Simon Josefsson * doc/Makefile.am, doc/gss.css, doc/texinfo.css: Rename gss.css to texinfo.css. 2004-01-10 Simon Josefsson * doc/gss.css: Fix. 2004-01-10 Simon Josefsson * doc/gss.css: Fix. 2004-01-10 Simon Josefsson * doc/Makefile.am: Use CSS for HTML. 2004-01-10 Simon Josefsson * doc/gss.css: Fix. 2004-01-10 Simon Josefsson * doc/gss.css: Add. 2004-01-09 Simon Josefsson * lib/context.c: Fix. 2004-01-09 Simon Josefsson * doc/Makefile.am: Gdoc fix. 2004-01-09 Simon Josefsson * doc/texinfo.conf: Add simple asciidoc texinfo configuration. 2004-01-09 Simon Josefsson * doc/gdoc: fix 2004-01-09 Simon Josefsson * doc/gdoc: use asciidoc on parameter too 2004-01-09 Simon Josefsson * doc/gss.texi: Use @finalout. 2004-01-09 Simon Josefsson * doc/gss.texi: Header template fix. 2004-01-09 Simon Josefsson * doc/gss.texi: Use gdoc more. 2004-01-09 Simon Josefsson * lib/context.c: Doc fix. 2004-01-09 Simon Josefsson * configure.ac: Check for perl, for gdoc. 2004-01-09 Simon Josefsson * doc/Makefile.am: Fix. 2004-01-09 Simon Josefsson * doc/.cvsignore: [no log message] 2004-01-09 Simon Josefsson * doc/Makefile.gdoci: Add. 2004-01-09 Simon Josefsson * doc/Makefile.am, doc/gss.texi: Use gdoc. 2004-01-09 Simon Josefsson * doc/.cvsignore: [no log message] 2004-01-09 Simon Josefsson * autogen.sh: Use gdoc. 2004-01-09 Simon Josefsson * lib/Makefile.am, tests/Makefile.am: Replace INCLUDES with AM_CPPFLAGS. 2004-01-09 Simon Josefsson * lib/context.c: Doc fix. 2004-01-09 Simon Josefsson * doc/gdoc: disable (most) section processing pipe data through asciidoc don't skip leading whitespace 2004-01-09 Simon Josefsson * doc/gdoc: Sync with libidn. 2004-01-01 Simon Josefsson * configure.ac: Work on autoconf 2.58 and libtool 1.5. 2003-11-30 Simon Josefsson * README: Fix. 2003-11-27 Simon Josefsson * doc/gss.texi: Fix. 2003-11-26 Simon Josefsson * NEWS, configure.ac: Bump versions. 2003-11-26 Simon Josefsson * ChangeLog: [no log message] 2003-11-26 Simon Josefsson * NEWS: Version 0.0.7. 2003-11-26 Simon Josefsson * Makefile.am: Fix release target. 2003-11-26 Simon Josefsson * Makefile.am: Fix. 2003-11-25 Simon Josefsson * configure.ac: Disable fortran etc libtool tests. 2003-11-24 Simon Josefsson * doc/specification/draft-ietf-krb-wg-gssapi-cfx-04.txt: Add. 2003-11-24 Simon Josefsson * lib/meta.c: Fix warnings. 2003-11-24 Simon Josefsson * gl/xmalloc.c: Fix. 2003-11-24 Simon Josefsson * gl/xmalloc.c: Use perror(). 2003-11-24 Simon Josefsson * gl/xmalloc.c: Don't use inline keyword. 2003-11-24 Simon Josefsson * m4/.cvsignore: [no log message] 2003-11-24 Simon Josefsson * NEWS: Fix. 2003-11-24 Simon Josefsson * lib/krb5.c: (gss_krb5_unwrap): Fix typo to make 3DES work. 2003-11-23 Simon Josefsson * doc/gendocs.sh: Sync with texinfo. 2003-11-23 Simon Josefsson * m4/codeset.m4, m4/gettext.m4, m4/glibc21.m4, m4/iconv.m4, m4/intdiv0.m4, m4/inttypes-pri.m4, m4/inttypes.m4, m4/inttypes_h.m4, m4/isc-posix.m4, m4/lcmessage.m4, m4/lib-ld.m4, m4/lib-link.m4, m4/lib-prefix.m4, m4/nls.m4, m4/po.m4, m4/progtest.m4, m4/stdint_h.m4, m4/uintmax_t.m4, m4/ulonglong.m4: Remove. 2003-11-23 Simon Josefsson * po/gss.pot, po/sv.po: Generated. 2003-11-23 Simon Josefsson * ANNOUNCE, Makefile.am, TODO: Remove ANNOUNCE and TODO. 2003-11-23 Simon Josefsson * doc/gss.texi: Add "Planned Features". 2003-11-23 Simon Josefsson * doc/gendocs.sh: Fix. 2003-11-23 Simon Josefsson * doc/gendocs.sh: Fix URLs. 2003-11-23 Simon Josefsson * Makefile.am: Use gendocs in release target. 2003-11-23 Simon Josefsson * doc/gendocs.sh, doc/gendocs_template: Add (from texinfo). 2003-11-23 Simon Josefsson * gl/xalloc.h: Remove unused stuff. 2003-11-23 Simon Josefsson * lib/error.c, lib/krb5.c, lib/meta.c: Use xstrdup. 2003-11-23 Simon Josefsson * configure.ac, gl/Makefile.am, gl/error.c, gl/error.h, gl/gethostname.c, gl/gettext.h, gl/m4/error.m4, gl/m4/malloc.m4, gl/m4/nls.m4, gl/m4/onceonly_2_57.m4, gl/m4/po.m4, gl/m4/realloc.m4, gl/m4/strerror_r.m4, gl/m4/unlocked-io.m4, gl/m4/xalloc.m4, gl/malloc.c, gl/realloc.c, gl/unlocked-io.h, gl/xalloc.h, gl/xgethostname.c, gl/xgethostname.h, gl/xmalloc.c, gl/xstrdup.c, gl/xstrdup.h, lib/Makefile.am, lib/internal.h, lib/krb5.c: Cleanup gnulib situation. 2003-11-23 Simon Josefsson * lib/internal.h: Simplify #include mess. 2003-11-23 Simon Josefsson * gl/.cvsignore: [no log message] 2003-11-22 Simon Josefsson * TODO: Fix. 2003-11-22 Simon Josefsson * doc/gss.texi: Fix. 2003-11-22 Simon Josefsson * NEWS: Add. 2003-11-22 Simon Josefsson * ANNOUNCE, configure.ac, lib/gss.h.in: Typo. 2003-11-22 Simon Josefsson * THANKS: Add. 2003-11-22 Simon Josefsson * Makefile.am, configure.ac, gl/Makefile.am, gl/m4/Makefile.am, m4/Makefile.am, m4/check_headerlib.m4, m4/pkg.m4: Simplify m4 situation (with help from automake 1.8 beta). 2003-11-22 Simon Josefsson * lib/gss.h.in: Don't include gss/krb5.h unconditionally because it may not be installed. Reported by Wojciech Polak . 2003-11-22 Simon Josefsson * configure.ac: Fix bug e-mail. Move libtool check. Use sj_CHECK_HEADERLIB for Shishi test. Add '#include ' substitution, for gss.h. 2003-11-22 Simon Josefsson * lib/Makefile.am: Fix LIBADD. 2003-11-21 Simon Josefsson * Makefile.am: Cleanup EXTRA_DIST. 2003-11-21 Simon Josefsson * Makefile.am: Remove. 2003-11-21 Simon Josefsson * doc/Makefile.am: Cleanup. 2003-11-21 Simon Josefsson * m4/.cvsignore: [no log message] 2003-11-21 Simon Josefsson * configure.ac: Remove AC_GNU_SOURCE hack. 2003-11-17 Simon Josefsson * configure.ac: Fix automake syntax. 2003-11-17 Simon Josefsson * configure.ac: Autoupdate fixes. 2003-11-02 Simon Josefsson * configure.ac: Fix for buggy libtool. 2003-11-01 Simon Josefsson * AUTHORS: Update PGP key. 2003-10-31 Simon Josefsson * doc/gdoc: Use @strong instead of @header, better rendered almost everywhere. 2003-10-28 Simon Josefsson * doc/specification/draft-ietf-krb-wg-gssapi-cfx-03.txt: Add. 2003-10-26 Simon Josefsson * doc/gdoc: Revert texinfo highlighting (texinfo @ interpolated by perl). Rewrite interpolate handling to make it more debuggable. 2003-10-26 Simon Josefsson * doc/gdoc: Fix. 2003-10-26 Simon Josefsson * doc/gdoc: Workaround interpolate problem. 2003-10-26 Simon Josefsson * doc/gdoc: Fix function regexp (old version completely broken??). 2003-10-26 Simon Josefsson * doc/gdoc: Fix 'section' regexp to require initial upper case, unless it start with [@&$%]. Before the following line was regarded as a section heading. following restrictions apply to the output parameters: 2003-10-26 Simon Josefsson * doc/gdoc: Print section headers for texinfo. 2003-10-26 Simon Josefsson * doc/gdoc: Fix texinfo cleanup (accidently added @ last checkin). 2003-10-26 Simon Josefsson * doc/gdoc: Move texinfo cleanup into texinfo function. 2003-10-26 Simon Josefsson * doc/gdoc: Add -listfunc output mode. Add -sourceversion, -includefuncprefix, -bugsto, -seeinfo, -copyright, -verbatimcopying for man pages. Translate { into @{ and } into @} in texinfo mode. White space fix for texinfo. Man page output mode mostly rewritten. 2003-10-26 Simon Josefsson * doc/gdoc: Add, straight from GNUTLS. 2003-10-11 Simon Josefsson * doc/specification/draft-ietf-krb-wg-gssapi-cfx-02.txt: Add. 2003-10-10 Simon Josefsson * configure.ac: Fix so version comment (matches libtool manual). 2003-10-07 Simon Josefsson * : Add. 2003-09-27 Simon Josefsson * doc/gss.texi: Add. 2003-09-22 Simon Josefsson * NEWS, configure.ac: Bump versions. 2003-09-22 Simon Josefsson * ChangeLog: [no log message] 2003-09-22 Simon Josefsson * NEWS: Version 0.0.6. 2003-09-22 Simon Josefsson * NEWS: Add. 2003-09-20 Simon Josefsson * lib/krb5.c: Fix API. 2003-09-08 Simon Josefsson * doc/specification/draft-williams-gssapi-store-deleg-creds-00.txt: Add. 2003-08-31 Simon Josefsson * README-alpha: Fix. 2003-08-31 Simon Josefsson * NEWS, configure.ac: Bump versions. 2003-08-31 Simon Josefsson * ChangeLog: [no log message] 2003-08-31 Simon Josefsson * NEWS: Version 0.0.5. 2003-08-31 Simon Josefsson * po/gss.pot, po/sv.po: Update. 2003-08-31 Simon Josefsson * tests/utils.c: Remove. 2003-08-31 Simon Josefsson * tests/basic.c: Add program_name, for gnulib. 2003-08-31 Simon Josefsson * Makefile.am, NEWS, configure.ac: Fix. 2003-08-30 Simon Josefsson * doc/specification/draft-ietf-cat-gssv2-08.txt, doc/specification/draft-ietf-cat-gssv2-cbind-04.txt, doc/specification/draft-ietf-krb-wg-gss-crypto-00.txt: Add. (Moved from Shishi.) 2003-08-30 Simon Josefsson * doc/specification/draft-ietf-krb-wg-gssapi-cfx-00.txt: Official version. 2003-08-30 Simon Josefsson * doc/specification/draft-ietf-krb-wg-gssapi-cfx-00.txt, doc/specification/draft-ietf-krb-wg-gssapi-cfx-01.txt: Add. 2003-08-29 Simon Josefsson * NEWS: Typo. 2003-08-29 Simon Josefsson * NEWS: Fix. 2003-08-29 Simon Josefsson * NEWS: Add. 2003-08-29 Simon Josefsson * lib/krb5.c: Support AP subkeys. 2003-08-12 Simon Josefsson * configure.ac: Simplify shishi test. 2003-08-12 Simon Josefsson * NEWS: Add. 2003-08-12 Simon Josefsson * configure.ac: Bump versions. 2003-08-12 Simon Josefsson * configure.ac: Remove help2man, texipdf checks (not used). Make shishi test work without pkg-config. 2003-08-09 Simon Josefsson * ChangeLog: [no log message] 2003-08-09 Simon Josefsson * NEWS: Version 0.0.4. 2003-08-09 Simon Josefsson * Makefile.am: Remove scp from release target. 2003-08-09 Simon Josefsson * Makefile.am: Fix release target. 2003-08-09 Simon Josefsson * po/gss.pot, po/sv.po: Generated. 2003-08-09 Simon Josefsson * NEWS: Fix. 2003-08-09 Simon Josefsson * lib/krb5.c: Don't hard code ad-hoc GSS Shishi checksum type. 2003-08-09 Simon Josefsson * lib/Makefile.am: Link gnulib properly. 2003-08-09 Simon Josefsson * lib/internal.h: Fix title. 2003-08-09 Simon Josefsson * lib/krb5.c: Set oid in cred struct. Add unfinished inquire_cred. 2003-08-09 Simon Josefsson * lib/krb5.h, lib/meta.c: Add inquire_cred. 2003-08-09 Simon Josefsson * lib/internal.h: Add mech OID to cred struct. Add inquire_cred to meta structure. 2003-08-09 Simon Josefsson * lib/cred.c: Add inquire_cred jump. 2003-08-09 Simon Josefsson * gl/Makefile.am: Use libtool. 2003-08-09 Simon Josefsson * gl/.cvsignore: [no log message] 2003-07-31 Simon Josefsson * ANNOUNCE, README: Use gnu.org web site. 2003-07-31 Simon Josefsson * Makefile.am: Distribute files via gnuftp. 2003-07-10 Simon Josefsson * po/Makevars: Use proper bug email address. 2003-07-10 Simon Josefsson * NEWS: Add. 2003-07-10 Simon Josefsson * configure.ac: Bump version. 2003-07-08 Simon Josefsson * lib/krb5.c: (gss_krb5_unwrap): Decrypt properly. 2003-07-08 Simon Josefsson * lib/krb5.c: Use new Shishi crypto API. 2003-07-06 Simon Josefsson * lib/krb5.c: Fixes. 2003-07-06 Simon Josefsson * TODO: Add. 2003-07-05 Simon Josefsson * lib/krb5.c: (gss_krb5_init_sec_context): Reuse shishi handle from credential, if available. 2003-07-02 Simon Josefsson * ChangeLog: [no log message] 2003-07-02 Simon Josefsson * NEWS: Version 0.0.3. 2003-07-02 Simon Josefsson * Makefile.am: Fix typo. 2003-07-02 Simon Josefsson * NEWS: Add. 2003-07-02 Simon Josefsson * Makefile.am: Add legal information to ChangeLog. 2003-07-02 Simon Josefsson * .cvscopying: Add. 2003-07-01 Simon Josefsson * doc/gss.texi: Add. 2003-06-30 Simon Josefsson * lib/krb5.c: Fixes. 2003-06-29 Simon Josefsson * lib/krb5.c: Cleanup. 2003-06-29 Simon Josefsson * lib/cred.c: (gss_release_cred): Fix minor_status. 2003-06-29 Simon Josefsson * lib/cred.c: Typo. 2003-06-29 Simon Josefsson * lib/misc.c: (gss_release_oid_set): Handle NULL set. 2003-06-29 Simon Josefsson * lib/misc.c: (gss_test_oid_set_member): Handle NULL member. 2003-06-29 Simon Josefsson * lib/cred.c: (gss_acquire_cred): Support desired_mechs. 2003-06-29 Simon Josefsson * po/gss.pot, po/sv.po: Generated. 2003-06-29 Simon Josefsson * m4/Makefile.am: Add. 2003-06-29 Simon Josefsson * gl/Makefile.am: Add m4. 2003-06-29 Simon Josefsson * po/.cvsignore: [no log message] 2003-06-29 Simon Josefsson * NEWS, m4/Makefile.am, m4/pkg.m4: Add. 2003-06-29 Simon Josefsson * po/.cvsignore: [no log message] 2003-06-29 Simon Josefsson * m4/gettext.m4, m4/inttypes_h.m4, m4/lib-ld.m4, m4/lib-link.m4, m4/lib-prefix.m4, m4/nls.m4, m4/po.m4, m4/progtest.m4, m4/stdint_h.m4, m4/uintmax_t.m4: Generated. 2003-06-29 Simon Josefsson * po/Makevars: Update to gettext 12.1. 2003-06-29 Simon Josefsson * configure.ac: Bump versions. 2003-06-29 Simon Josefsson * gl/m4/.cvsignore, m4/.cvsignore: [no log message] 2003-06-29 Simon Josefsson * Makefile.am, configure.ac, gl/m4/Makefile.am, gl/m4/error.m4, gl/m4/gethostname.m4, gl/m4/malloc.m4, gl/m4/nls.m4, gl/m4/onceonly_2_57.m4, gl/m4/po.m4, gl/m4/realloc.m4, gl/m4/strerror_r.m4, gl/m4/unlocked-io.m4, gl/m4/xalloc.m4, m4/Makefile.am, m4/error.m4, m4/gethostname.m4, m4/malloc.m4, m4/nls.m4, m4/onceonly_2_57.m4, m4/po.m4, m4/realloc.m4, m4/strerror_r.m4, m4/unlocked-io.m4, m4/xalloc.m4: Move gnulib m4's from m4/ to gl/m4/. 2003-06-29 Simon Josefsson * COPYING.DOC: Add. 2003-06-29 Simon Josefsson * README-alpha: Note for binary package builders. 2003-06-29 Simon Josefsson * lib/internal.h, lib/meta.c, lib/misc.c, lib/name.c: Move meta.c functions to where they belong. 2003-06-29 Simon Josefsson * lib/context.c, lib/cred.c: Add comment. 2003-06-29 Simon Josefsson * doc/gss.texi: Fix. 2003-06-29 Simon Josefsson * doc/gss.texi: Add. 2003-06-29 Simon Josefsson * doc/gss.texi: Add. 2003-06-29 Simon Josefsson * lib/cred.c, lib/krb5.c: Cleanup. 2003-06-29 Simon Josefsson * configure.ac, gl/Makefile.am, gl/gethostname.c, m4/Makefile.am, m4/gethostname.m4: Add gethostname() from gnulib. 2003-06-28 Simon Josefsson * Makefile.am: Fix release scp. 2003-06-28 Simon Josefsson * ChangeLog: [no log message] 2003-06-28 Simon Josefsson * NEWS: Version 0.0.2. 2003-06-28 Simon Josefsson * configure.ac: Don't abort if pkg-config isn't available. 2003-06-28 Simon Josefsson * po/gss.pot, po/sv.po: Generated. 2003-06-28 Simon Josefsson * lib/Makefile.am: Fix -I. 2003-06-28 Simon Josefsson * NEWS: Add. 2003-06-28 Simon Josefsson * configure.ac: Bump so version. 2003-06-28 Simon Josefsson * lib/asn1.c, lib/cred.c, lib/krb5.c, lib/misc.c, lib/name.c: Use xalloc. 2003-06-28 Simon Josefsson * doc/gss.texi: Mention xalloc. 2003-06-28 Simon Josefsson * gl/.cvsignore: [no log message] 2003-06-28 Simon Josefsson * Makefile.am, configure.ac, gl/Makefile.am, gl/error.c, gl/error.h, gl/gettext.h, gl/malloc.c, gl/realloc.c, gl/unlocked-io.h, gl/xalloc.h, gl/xmalloc.c, gl/xstrdup.c, lib/Makefile.am, lib/internal.h, m4/Makefile.am, m4/codeset.m4, m4/error.m4, m4/gettext.m4, m4/glibc21.m4, m4/iconv.m4, m4/intdiv0.m4, m4/inttypes-pri.m4, m4/inttypes.m4, m4/inttypes_h.m4, m4/isc-posix.m4, m4/lcmessage.m4, m4/lib-ld.m4, m4/lib-link.m4, m4/lib-prefix.m4, m4/malloc.m4, m4/nls.m4, m4/onceonly_2_57.m4, m4/po.m4, m4/progtest.m4, m4/realloc.m4, m4/stdint_h.m4, m4/strerror_r.m4, m4/uintmax_t.m4, m4/ulonglong.m4, m4/unlocked-io.m4, m4/xalloc.m4: Add xalloc (with deps) from gnulib. 2003-06-28 Simon Josefsson * NEWS: Add. 2003-06-28 Simon Josefsson * configure.ac: Bump version. 2003-06-28 Simon Josefsson * lib/context.c: Clear output token for delete_sec_context. 2003-06-28 Simon Josefsson * lib/krb5.c: Add accept_sec_context, acquire_cred. Fixes. (GSASL via GSS can connect to Mailutils IMAP server via native GSS.) 2003-06-28 Simon Josefsson * lib/name.c: Fix. 2003-06-28 Simon Josefsson * lib/cred.c: Add acquire_cred. 2003-06-28 Simon Josefsson * lib/internal.h, lib/krb5.h, lib/meta.c: Add accept_sec_context, acquire_cred. 2003-06-28 Simon Josefsson * lib/context.c: Add accept_sec_context. 2003-06-28 Simon Josefsson * lib/asn1.c, lib/ext.h: Add prefix encapsulation. 2003-06-27 Simon Josefsson * lib/asn1.c: Fix. 2003-06-27 Simon Josefsson * doc/gss.texi: Add. 2003-06-27 Simon Josefsson * doc/gss.texi: Fix. 2003-06-12 Simon Josefsson * ChangeLog: [no log message] 2003-06-12 Simon Josefsson * lib/krb5.c: Translate errors. 2003-06-12 Simon Josefsson * lib/error.c, lib/krb5.c, po/gss.pot, po/sv.po: Translation fixes. 2003-06-12 Simon Josefsson * po/gss.pot: Fix. 2003-06-12 Simon Josefsson * ChangeLog: [no log message] 2003-06-12 Simon Josefsson * Makefile.am: Fix release target. 2003-06-12 Simon Josefsson * lib/error.c, lib/krb5.c, lib/meta.c, lib/obsolete.c, po/POTFILES.in, po/gss.pot, po/sv.po: Translation fixes. 2003-06-12 Simon Josefsson * po/sv.po: Add. 2003-06-12 Simon Josefsson * README-alpha: TeX required. 2003-06-12 Simon Josefsson * NEWS: Version 0.0.1. 2003-06-12 Simon Josefsson * doc/gss.texi: Fix. 2003-06-12 Simon Josefsson * NEWS: Fix. 2003-06-12 Simon Josefsson * doc/.cvsignore: [no log message] 2003-06-12 Simon Josefsson * doc/gss.texi: Fix. 2003-06-12 Simon Josefsson * doc/gss.texi: Fix. 2003-06-12 Simon Josefsson * doc/gss.texi: Fix. 2003-06-12 Simon Josefsson * doc/gss.texi: Fix. 2003-06-12 Simon Josefsson * doc/gss.texi: Fix. 2003-06-10 Simon Josefsson * tests/utils.c: Fix. 2003-06-10 Simon Josefsson * NEWS, tests/gettext.h: Add. 2003-06-10 Simon Josefsson * tests/basic.c, tests/utils.c: Translation stuff. 2003-06-10 Simon Josefsson * configure.ac: Fix. 2003-06-10 Simon Josefsson * lib/error.c: String checks. 2003-06-10 Simon Josefsson * configure.ac: Check for locale.h. 2003-06-10 Simon Josefsson * tests/basic.c: Setup translation (should be done in ../lib/?). 2003-06-10 Simon Josefsson * tests/Makefile.am: Define LOCALEDIR. 2003-06-10 Simon Josefsson * po/sv.po: Add. 2003-06-10 Simon Josefsson * po/gss.pot: Fix. 2003-06-10 Simon Josefsson * po/LINGUAS: Add sv. 2003-06-10 Simon Josefsson * po/ggssapi.pot: Removed. (See gss.pot.) 2003-06-10 Simon Josefsson * po/POTFILES.in: Fix. 2003-06-10 Simon Josefsson * po/gss.pot: Add. 2003-06-09 Simon Josefsson * configure.ac: Bump versions. 2003-06-09 Simon Josefsson * Makefile.am: Fix. 2003-06-09 Simon Josefsson * Makefile.am: Only generate ChangeLog for releases. (Allows make dist to work when savannah is down.) 2003-06-09 Simon Josefsson * lib/krb5.c: Add oids. Add display_status. Fixes. 2003-06-09 Simon Josefsson * lib/error.c, lib/krb5.h: Add. 2003-06-09 Simon Josefsson * lib/misc.c: Move display_status to error.c. 2003-06-09 Simon Josefsson * lib/internal.h, lib/meta.c: Add display_status. 2003-06-09 Simon Josefsson * lib/cred.c, lib/name.c: Fix. 2003-06-09 Simon Josefsson * lib/oid.c: Move krb5 oids to krb5.c. 2003-06-09 Simon Josefsson * lib/Makefile.am: Make krb5 conditional. Remove old -I../intl. 2003-06-09 Simon Josefsson * configure.ac: Add krb5 conditional. 2003-06-05 Simon Josefsson * lib/meta.c, lib/misc.c: Clear minor_status. 2003-06-02 Simon Josefsson * Makefile.am: Fix release target. 2003-06-02 Simon Josefsson * ChangeLog: [no log message] 2003-06-02 Simon Josefsson * NEWS: Version 0.0.0. 2003-06-02 Simon Josefsson * ChangeLog: Add. (Autogenerated by cvs2cl.) 2003-06-02 Simon Josefsson * NEWS: Fix. 2003-06-02 Simon Josefsson * Makefile.am, argp/.cvsignore, argp/Makefile.am, argp/Versions, argp/acinclude.m4, argp/argp-ba.c, argp/argp-eexst.c, argp/argp-fmtstream.c, argp/argp-fmtstream.h, argp/argp-fs-xinl.c, argp/argp-help.c, argp/argp-namefrob.h, argp/argp-parse.c, argp/argp-pv.c, argp/argp-pvh.c, argp/argp-test.c, argp/argp-xinl.c, argp/argp.h, argp/config.h.in, argp/configure.ac, argp/libargp.m4, argp/mempcpy.c, argp/strchrnul.c, argp/strndup.c, configure.ac: Remove argp. 2003-06-02 Simon Josefsson * tests/utils.c: Remove gss/ prefix from includes. 2003-06-02 Simon Josefsson * tests/utils.c: Use gss/*.h instead of gss.h. 2003-06-02 Simon Josefsson * lib/Makefile.am: Dist gettext.h. 2003-06-02 Simon Josefsson * lib/version.c: Fix copying conditions. 2003-06-02 Simon Josefsson * ANNOUNCE, README-alpha, gss.pc.in: Fix. 2003-06-02 Simon Josefsson * NEWS: Add. 2003-06-02 Simon Josefsson * lib/krb5.c: DES works. 2003-05-30 Simon Josefsson * doc/specification/draft-ietf-cat-gss-conv-00.txt, doc/specification/draft-ietf-cat-gsseasy-01.txt: Add. 2003-05-30 Simon Josefsson * doc/specification/draft-ietf-cat-krb5gss-mech2-00.txt, doc/specification/draft-ietf-cat-krb5gss-mech2-01.txt, doc/specification/draft-ietf-cat-krb5gss-mech2-02.txt, doc/specification/draft-ietf-cat-krb5gss-mech2-03.txt, doc/specification/draft-raeburn-cat-gssapi-krb5-3des-00.txt, doc/specification/draft-raeburn-krb-gssapi-krb5-3des-01.txt: Add. 2003-05-30 Simon Josefsson * doc/gss.texi: Add. 2003-05-30 Simon Josefsson * lib/meta.c: Fix. (RFC permitted our usage model.) 2003-05-30 Simon Josefsson * doc/gss.texi: Add. Fix. 2003-05-30 Simon Josefsson * lib/ext.h: Add. 2003-05-30 Simon Josefsson * lib/misc.c: Fix. 2003-05-30 Simon Josefsson * lib/name.c: Fix. 2003-05-30 Simon Josefsson * tests/.cvsignore: [no log message] 2003-05-30 Simon Josefsson * tests/Makefile.am, tests/krb5.c: Remove krb5.c for now. 2003-05-30 Simon Josefsson * lib/meta.c, tests/basic.c: Add. 2003-05-30 Simon Josefsson * tests/basic.c: Add. 2003-05-30 Simon Josefsson * lib/internal.h: Fix. 2003-05-30 Simon Josefsson * lib/misc.c: Add. Fix. 2003-05-29 Simon Josefsson * tests/.cvsignore: [no log message] 2003-05-29 Simon Josefsson * tests/Makefile.am, tests/basic.c, tests/name.c: Rename name.c to basic.c. 2003-05-29 Simon Josefsson * lib/misc.c: Fix. 2003-05-29 Simon Josefsson * lib/krb5.c: Cleanup. 2003-05-29 Simon Josefsson * lib/krb5.c: Cleanup. 2003-05-29 Simon Josefsson * lib/internal.h: Remove. 2003-05-29 Simon Josefsson * lib/ext.h, lib/krb5.h: Add. 2003-05-29 Simon Josefsson * lib/asn1.c: Fix. 2003-05-29 Simon Josefsson * lib/internal.h: Add. 2003-05-29 Simon Josefsson * lib/meta.c, lib/misc.c: Fix. 2003-05-29 Simon Josefsson * lib/internal.h, lib/meta.c, lib/misc.c: Add. 2003-05-29 Simon Josefsson * lib/.cvsignore: [no log message] 2003-05-29 Simon Josefsson * lib/Makefile.am: Add meta.c. 2003-05-29 Simon Josefsson * lib/krb5.c: Fix. 2003-05-29 Simon Josefsson * lib/context.c, lib/msg.c, lib/name.c: Mech independent. 2003-05-29 Simon Josefsson * lib/internal.h, lib/meta.c: Add. 2003-05-29 Simon Josefsson * lib/meta.c: Add. 2003-05-29 Simon Josefsson * lib/krb5.h: Add. 2003-05-29 Simon Josefsson * lib/krb5.c: Fix. 2003-05-29 Simon Josefsson * lib/internal.h: Remove. 2003-05-29 Simon Josefsson * doc/gss.texi, lib/ext.h: Add. 2003-05-29 Simon Josefsson * lib/krb5.c, lib/misc.c: Fix. 2003-05-29 Simon Josefsson * lib/name.c: Fix. 2003-05-29 Simon Josefsson * lib/misc.c, lib/name.c: Fix. 2003-05-29 Simon Josefsson * lib/internal.h, lib/krb5.c, tests/utils.c: Fix includes. 2003-05-29 Simon Josefsson * lib/gss.h.in: Move things to ext.h. 2003-05-29 Simon Josefsson * lib/Makefile.am: Add ext.h. 2003-05-29 Simon Josefsson * lib/ext.h: Add. 2003-05-29 Simon Josefsson * doc/gss.texi: Fix. 2003-05-29 Simon Josefsson * ANNOUNCE: Fix. 2003-05-29 Simon Josefsson * lib/Makefile.am: Install api.h (former gssapi.h) and krb5.h in $(includedir)/gss/. Fix indents. 2003-05-29 Simon Josefsson * lib/api.h: Support xom.h (conditionally). 2003-05-29 Simon Josefsson * lib/api.h, lib/gssapi.h: Renamed gssapi.h to api.h. 2003-05-29 Simon Josefsson * lib/krb5.h: Add. 2003-05-29 Simon Josefsson * lib/gss.h.in: Add. Fix. 2003-05-29 Simon Josefsson * lib/asn1.c, lib/internal.h, lib/krb5.c: Fix. 2003-05-29 Simon Josefsson * lib/oid.c: Add krb5 OIDs (conditionally). 2003-05-29 Simon Josefsson * doc/Makefile.am: Drop src/ for now. 2003-05-29 Simon Josefsson * ANNOUNCE, README, THANKS: Fix. 2003-05-29 Simon Josefsson * Makefile.am, configure.ac, doc/gss.texi, src/.cvsignore, src/Makefile.am, src/gettext.h, src/gss.c, src/internal.h: Drop src/ for now. 2003-05-27 Simon Josefsson * doc/gss.texi: Fix pxref. 2003-05-27 Simon Josefsson * doc/gss.texi: Drop licenses. Add criticism todos. 2003-05-27 Simon Josefsson * doc/gss.texi: Fix license. 2003-05-27 Simon Josefsson * doc/gss.texi: Fix email. 2003-05-27 Simon Josefsson * doc/gss.texi: Fix title. 2003-05-26 Simon Josefsson * lib/krb5.c: Support mutual authentication (and other flags). Fix sequence number handling. Works as client via GSASL against Cyrus IMAP/SASL server. 2003-05-26 Simon Josefsson * tests/Makefile.am: Don't build krb5. 2003-05-26 Simon Josefsson * doc/gss.texi: Fix title. 2003-05-25 Simon Josefsson * lib/krb5.c: Add. (GSASL using GSS is now able to log on to GNU Mailutils imap4d linked to MIT GSSAPI.) 2003-05-25 Simon Josefsson * lib/internal.h, lib/krb5.c: Only krb5.c includes shishi. 2003-05-25 Simon Josefsson * lib/krb5.c: Add. 2003-05-18 Simon Josefsson * Makefile.am: Dist TODO. 2003-05-18 Simon Josefsson * NEWS: Fix. 2003-05-18 Simon Josefsson * lib/msg.c: Remove debug info. Call krb5. 2003-05-18 Simon Josefsson * lib/asn1.c, lib/internal.h, lib/krb5.c: Add. 2003-05-18 Simon Josefsson * lib/obsolete.c: Typo fix. 2003-05-18 Simon Josefsson * lib/context.c, lib/cred.c, lib/misc.c, lib/msg.c, lib/name.c: Remove documentation. 2003-05-18 Simon Josefsson * doc/Makefile.am: Fix man page name. 2003-05-18 Simon Josefsson * doc/gdoc, doc/gdoc-error: Removed (not needed anymore). 2003-05-18 Simon Josefsson * doc/gss.texi: Inline autogenerated API documentation. 2003-05-18 Simon Josefsson * configure.ac: Perl not needed. 2003-05-18 Simon Josefsson * doc/Makefile.am: Don't autogenerate API documentation. 2003-05-18 Simon Josefsson * doc/.cvsignore: [no log message] 2003-05-18 Simon Josefsson * lib/gssapi.h: Fix implementation type names. 2003-05-18 Simon Josefsson * lib/name.c: Fix. 2003-05-18 Simon Josefsson * lib/misc.c: Add. 2003-05-18 Simon Josefsson * lib/internal.h: Add. Fix. 2003-05-18 Simon Josefsson * lib/krb5.c: Cleanup. 2003-05-18 Simon Josefsson * lib/krb5.c: Cleanup. 2003-05-18 Simon Josefsson * lib/misc.c: Add. 2003-05-18 Simon Josefsson * lib/asn1.c: Cleanup. 2003-05-18 Simon Josefsson * AUTHORS: Fix. 2003-05-18 Simon Josefsson * README, README-alpha: Fix. 2003-05-18 Simon Josefsson * lib/.cvsignore: [no log message] 2003-05-18 Simon Josefsson * lib/krb5.c: AP-REQ works. 2003-05-18 Simon Josefsson * lib/msg.c: Add doc. Print debug info. 2003-05-17 Simon Josefsson * lib/asn1.c: Rewrite without libtasn1. 2003-05-17 Simon Josefsson * lib/internal.h: Fix. 2003-05-17 Simon Josefsson * lib/Makefile.am: Remove asn.1 stuff. 2003-05-17 Simon Josefsson * TODO, lib/gss.asn1: Remove. 2003-05-17 Simon Josefsson * configure.ac: Libtasn1 no longer required. 2003-05-10 Simon Josefsson * lib/Makefile.am: Fix last commit. 2003-05-10 Simon Josefsson * lib/Makefile.am: Dist gss_asn1_tab.c. 2003-05-10 Simon Josefsson * lib/Makefile.am: Use @ASN1PARSER@. 2003-05-08 Simon Josefsson * tests/.cvsignore: [no log message] 2003-05-08 Simon Josefsson * tests/Makefile.am: Build krb5. 2003-05-08 Simon Josefsson * tests/krb5.c: Krb5 test. 2003-05-08 Simon Josefsson * lib/krb5.c: Add. 2003-05-08 Simon Josefsson * lib/internal.h: Add krb5 stuff. 2003-05-08 Simon Josefsson * lib/context.c: Call krb5 for now. 2003-05-08 Simon Josefsson * lib/asn1.c: Wrap tokens in ASN.1. 2003-05-08 Simon Josefsson * lib/Makefile.am: Build asn1.c. Link with shishi. 2003-05-08 Simon Josefsson * ANNOUNCE, doc/gss.texi: Fix. 2003-05-08 Simon Josefsson * lib/gss.h.in: Fix. 2003-05-08 Simon Josefsson * lib/.cvsignore: [no log message] 2003-05-08 Simon Josefsson * TODO: Fix. 2003-05-08 Simon Josefsson * TODO: Add. 2003-05-08 Simon Josefsson * configure.ac: Look for asn1Parser. Fix errors. 2003-05-08 Simon Josefsson * configure.ac: Always require libtasn1. 2003-05-08 Simon Josefsson * README: Add prereq's. 2003-05-08 Simon Josefsson * tests/name.c: Fix. 2003-05-08 Simon Josefsson * lib/Makefile.am: Add krb5.c. Build gss_asn1_tab.c. 2003-05-08 Simon Josefsson * lib/.cvsignore: [no log message] 2003-05-08 Simon Josefsson * lib/gss.asn1, lib/krb5.c: Add. 2003-05-08 Simon Josefsson * configure.ac: For kerberos 5 support, find libtasn1 too. 2003-05-01 Simon Josefsson * doc/gss.texi: Add. 2003-05-01 Simon Josefsson * tests/.cvsignore: [no log message] 2003-05-01 Simon Josefsson * tests/Makefile.am: Build name. 2003-05-01 Simon Josefsson * tests/name.c: Typo. 2003-05-01 Simon Josefsson * tests/name.c, tests/utils.c: Add. 2003-05-01 Simon Josefsson * configure.ac: Test for Shishi. 2003-05-01 Simon Josefsson * doc/gss.texi: Document non-standard functions. 2003-05-01 Simon Josefsson * lib/.cvsignore: [no log message] 2003-05-01 Simon Josefsson * configure.ac, lib/Makefile.am, lib/ggssapi.h.in, lib/gss.h.in, lib/internal.h, lib/version.c: Rename ggssapi to gss. 2003-05-01 Simon Josefsson * lib/ggssapi.h.in: Add. 2003-05-01 Simon Josefsson * doc/gss.texi: Fix. 2003-05-01 Simon Josefsson * lib/error.c: Indent. 2003-05-01 Simon Josefsson * configure.ac, doc/Makefile.am, src/internal.h: Cleanup. 2003-05-01 Simon Josefsson * src/Makefile.am: Fix. 2003-05-01 Simon Josefsson * src/Makefile.am: Dist internal.h. 2003-05-01 Simon Josefsson * src/gss.c: Argp support. 2003-05-01 Simon Josefsson * src/internal.h: Include argp.h. 2003-05-01 Simon Josefsson * src/gettext.h, src/internal.h: Add. 2003-05-01 Simon Josefsson * .cvsignore: [no log message] 2003-05-01 Simon Josefsson * gss.pc.in: Rename ggssapi to gss. 2003-05-01 Simon Josefsson * ANNOUNCE, Makefile.am, README, configure.ac, doc/Makefile.am, doc/gss.texi, ggssapi.pc.in, gss.pc.in, src/Makefile.am, src/ggssapi.c, src/gss.c: Rename ggssapi to gss. 2003-05-01 Simon Josefsson * doc/.cvsignore, src/.cvsignore: [no log message] 2003-05-01 Simon Josefsson * doc/gss.texi: Add. 2003-05-01 Simon Josefsson * doc/ggssapi.texi, doc/gss.texi: Rename to gss.texi. 2003-05-01 Simon Josefsson * tests/Makefile.am: Fix library name. 2003-05-01 Simon Josefsson * src/Makefile.am: Rename ggssapi to gss. 2003-05-01 Simon Josefsson * lib/Makefile.am: Rename library to libgss.*. 2003-05-01 Simon Josefsson * lib/.cvsignore: [no log message] 2003-05-01 Simon Josefsson * doc/Makefile.am: Typo. 2003-05-01 Simon Josefsson * doc/gdoc: Escape { and }. 2003-05-01 Simon Josefsson * doc/.cvsignore, lib/.cvsignore: [no log message] 2003-05-01 Simon Josefsson * lib/Makefile.am: Add deps. Fix indent. 2003-05-01 Simon Josefsson * lib/internal.h: Include inttypes/stdint. Add hidden GSS structures. 2003-05-01 Simon Josefsson * lib/cred.c: Credential functions. 2003-05-01 Simon Josefsson * lib/context.c: Context functions. 2003-05-01 Simon Josefsson * lib/misc.c: Miscellaneous functions. 2003-05-01 Simon Josefsson * lib/msg.c: Per-message functions. 2003-05-01 Simon Josefsson * lib/name.c: Name manipulating functions. 2003-05-01 Simon Josefsson * lib/oid.c: Static OID definitions. 2003-05-01 Simon Josefsson * lib/obsolete.c: GSSAPI v1 bindings. 2003-05-01 Simon Josefsson * lib/gssapi.h: Fix prototypes (RFC is buggy). Indent. 2003-04-30 Simon Josefsson * lib/.cvsignore: [no log message] 2003-04-30 Simon Josefsson * lib/Makefile.am, lib/error.c: Add. 2003-04-30 Simon Josefsson * .cvsignore: Add. 2003-04-30 Simon Josefsson * po/LINGUAS: Empty, until we have something to translate. 2003-04-30 Simon Josefsson * lib/internal.h: Include gssapi.h too. 2003-04-30 Simon Josefsson * lib/gssapi.h: Replace cvs log with referral to ChangeLog. 2003-04-30 Simon Josefsson * lib/gssapi.h: Add CVS log to comment. 2003-04-30 Simon Josefsson * lib/gssapi.h: Add copying conditions. Include limits.h. 2003-04-30 Simon Josefsson * lib/gssapi.h: Never use xom.h. Define gss_ctx_id_t, gss_cred_id_t, gss_name_t, and gss_uint32. Fix routine errors. 2003-04-30 Simon Josefsson * lib/gssapi.h: Verbatim from RFC. 2003-04-30 Simon Josefsson * lib/Makefile.am: Add ggssapi.h. 2003-04-30 Simon Josefsson * doc/ggssapi.texi: Add. Fix links. 2003-04-30 Simon Josefsson * doc/Makefile.am: Add dep. 2003-04-30 Simon Josefsson * configure.ac: Build lib/ggssapi.h. 2003-04-30 Simon Josefsson * lib/.cvsignore, lib/gettext.h, lib/ggssapi.h.in, lib/internal.h, m4/.cvsignore, po/.cvsignore, po/LINGUAS, po/Makevars, po/POTFILES.in, po/ggssapi.pot, po/sv.po, src/.cvsignore: Add. 2003-04-30 Simon Josefsson * configure.ac: Don't build doc/reference/Makefile. 2003-04-30 Simon Josefsson * COPYING, m4/Makefile.am: Add. 2003-04-30 Simon Josefsson * configure.ac: Remove AC_REPLACE_FUNCS() until we know they are required. 2003-04-30 Simon Josefsson * Initial import, empty dummy project. ----- Copyright (C) 2003-2014 Simon Josefsson Copying and distribution of this file, with or without modification, are permitted provided the copyright notice and this notice are preserved. gss-1.0.3/AUTHORS0000664000000000000000000003772612415506454010275 00000000000000GSS AUTHORS -- Information about the authors. Copyright (C) 2003-2014 Simon Josefsson See the end for copying conditions. Simon Josefsson Designed and implemented GSS. -----BEGIN PGP PUBLIC KEY BLOCK----- URL: http://josefsson.org/54265e8c.txt Comment: This key is used to sign releases of GSS. mQHhBFOnKoEBDqCoGZ7KIeZI1cbNFHIVxywetihLsA24nv3bJa/kd7kgkjfxdlcl JNlJZPbQIttl4HE7M+mxPUVtvlJeIggI2xd6uyv/XrM9Wdy48hskNHX5umZ55yIP C+T1VYXIJYhFFJgTaahtfCrf6/gQKnC0TNhYiWw4GP33S1UgVTz5IBEr85W/QmN/ iUtM75wyq12ntRR+LSxSEmnEF5pzoP5SgVUXdAZAJQVvLcu8L9opAdHj4C3IcvvS HKvp4h2zvnOwRwjjiObKxRTtNaxHO8Sfofxw5aiifL39bxAKuJl6Rrhd09xKIvqb qu/m8GqWiSyO6N8tTDgxBKGfgba3D1AQ+J+VkFj31Obm3R3GEpFRo1i1mQLgKqbq Gs0aoZqVMkP3fItzkw+pOuldgL4P94IoXJsWjt0x7F0ojX0CWYbQ9rYHrBCe01Mn Rgn6j8glZj6hQs7sSMW5eGA0HNew6g0WEYGC2IsDQV2rGpsLnbx7r9P/qIA+q42o VjxxNMaa6WXfQf6eBiOSYa/9HsophhdK4+eJOoD/n85Vb4qvT0yEjQQurfBnbGte bIsakyX+eLpfwD6RpDAe7irZaBSOBKWdKOlbCdIezblK8JuSJS/LLMAfPVsasgMA EQEAAbQlU2ltb24gSm9zZWZzc29uIDxzaW1vbkBqb3NlZnNzb24ub3JnPokCEQQT AQoAJwIbAwUJAIPWAAgLCQgHDQwLCgUVCgkICwIeAQIXgAUCU6crKgIZAQAKCRAG ZKdpVCZejL6ODp9AHgC04sxWhI1K84mFfRZVriVVUDUm4K9wxfCDSK36PyNCL2TR CCYYaQqqBZucKil/tSbJyA/qwulgT0P87YqtqCDk9dd6vKlwat1QhkeO5HQVMmVY zk4bQ97OmxWFPV/hCFCGOj7Bol8MBIhXmqAZLuWUq4pLEjQUJB5Ji3XNBwHFaZJE aKj9T7aiv8EHpPNXwoCwMg3LD71H9P9eaCSUmUVUTtpUDfI2Hml6PSr4AfeAAXwA /HpQmRQDJpDp22nEX93xkHpmt3BteC7KuG0Tzorvaf/++Xq+fcyPbcu+l3BmcjtD NauZgM2/7DYeBbCXrmUFcW3crzLfS31npCjZXetYEnDOju0WprfiHa5HPkgOhpP8 mor1eeciWoikZsR5Ob8OILIrsJ38ivRv0gzh6lWf9euMY83V5dRmqDmbGiqu0mwR Mj1aGSvPskNWz1ffnzLAR/OS1Lyr6KiSSBQqC64dEMEU2e3O7wl6tuZXa6jq1cKH PRkfUwD+t74lcbvQKB7i727q2u3JVZuajT+nRu+X5JDf0+HRO970DBklPhquHmUk VNRWiLtampm4ADxmv7ht0LXQvX7CxJKpnVIXEOYrfRycR9Tf5Fo6nxJ4yI0jRi+I vAQQAQIABgUCU6cyowAKCRDtoh6UtWVxbyi0BP4yGWSKUvoTzj/xJVkOH5Q5xOU+ SKYewWjXwxf8GhfJiUYVTXwrrOLbhlInjGNHKwEJNoywPaerf7Yxkx/pvuOKGICC ulXMBzA7/QvTxivGjlpCdsyTgSoHH3ZcWbUK1qTbXuNpXlEcDtqYLIlBAYNFge1r Vcph7wgJUjnLTl1Nf4NW9wXckEPPDh1Cm9ap7cbyMc3axIyv8SLr5SUKYmFQiQEc BBABCAAGBQJTqCzGAAoJELygD9SyFowKgkoIAJXLgjiUINV2boM6qYTLEO7020e5 4d4iYeuSZl0z1ZzCR2IwlXWQzLf1ATCxiNElv6Bl/pNbLNwzhS1h8cL+yFhxYkrW 43EpmYLu43zwsm2dJ1e5m27FMCLSvmyHdPw+T4j05pzV5VSpIaUcpq1X9m07f6NM F/NkPOrZBi0NP8Y3nwtCS/hanp1aafPrgCa868t9Y1Vzt/4uoE016m4z1XsIhoRx o58E7t9uS+QaXbBZZEFnf/uiWS/l+sewK2wwkdXGzJ1Oph1oEO/bm5+EE2nktufD RmjL04bI3bHmRbVohKzZgAVBn/fHGE6d9dyKV64i/iL5mrdWSpdx4LA96cuIRgQQ EQoABgUCU9g1bgAKCRByBDZwveXx7saCAJ4kjup0u3Ql5ZVPBjMiw6xdPCmyYwCg kcYxCTgV/vXSKcVGT04YVt0djRCJAhwEEAEKAAYFAlPYNiQACgkQC8R9xk0TUwYa 8A/9FZpaGwTpmNbfrGkTqyYnApaj/JgNXkMAykWVwQSbK0ujSYin52uR0b4/ammB tvUaGsGNwPyybjuZOf3VF2eKXaiM3eXW3aU0M7iuqA+m7+cCBmrmF7hm+xuubN2B lDP78kjCVulAAKAgAU8VzpxfOFlhdiPKJhU6oaXQ9wigELcpxY25jXosYPvbx/oB R9+sY9XFNn94A+RwUjWjvl2npeXfrH6veBH2yqouyLJ53JEct4U3eA6sPP3Tmf09 QoO44YIPMkddiBMXGA071HwfAxlUKxvw817HBTUANu5giYIlkxRY9qphSk0BJxAj 761VlYNXeOpnKUz49GuIA/qTTTAfJxG6XrjOaZHbSrUZBh/xorApXHcMQQCAMig5 KDQe9DpjbTOpvDUweTQNCxJwEqPtQKQkFMPGFiEwmKvuKPc9UWWe6i0wQ/SPraY5 pfAkx6Ne2lCZkIeogK4CUGo4rrG+X/rb6QiRhSiAQx9DadY/Se4I3IVhh2zPNi4s BwT/tipd0D8O4sXqanfuwfwp6CUCkalEgMT3CUIDoXiSnomUQk8c7e4VrFOHiV7k dEym5chkcUHgejqI04MVJ/vkeve2TGFf4Mtu6EpV0GV/lpupCmYYIxFLBeM7ehZu +9skonmFUTVr0lTSdbY5UJkgoGbUQHtEdk1tYKmtREgNaAGIRgQQEQgABgUCU+yt 8QAKCRB4MCxLjb/sL00mAKDyk8+4axph/mes0lV+HCWErS4BjgCgvxNjuHvtahfK B8URqMsBCXeclc6JAhwEEAEIAAYFAlPsrncACgkQxDVw+AzClebNHA//ZBid3B6I B0YPweC3Btbfy1gXtanagzm8k0IgyO5/jZZ4GEbdouBpEuiicJXcPRrklB5UIhJu ZBcS4tohBkzF2u4we7ZYVPF2/POJttOMNYx0lwTSY0BAoKteFTMnoI8oVc6Kie2q RG+x8FmUxJ8UNCMlzXoGnYJOsJx1xvG+JHvLOrdvjUoLpOJDHTk4eCLDugz+l2bN drxeWy6p6DqlYDlcZBkniL+YpWWYGDNVy5aJ3baj/gdxYjPKDyGNpU6NdLhI4l6T Yd0hrhnjY0svA1rbdlu/1vM+y8penFkU5wh4s+huZ/Ej8gIEnbu3Zh62gTM1PRkt jyRa7arwaskSqULTWQgfSaRxAIdP+bf6wBscRscjpqtnIZfKWDl6iQ6DLEcFbCgO NiEpSjJrxdyUX8h105gQAxJJuVVffFGAyNSE9HDFycE309y5rKCO7BX+qcVIe2Ak lhPBRFH2xrEJNUrIfWLuwQFD7u4X7ab7m1Iu12oJBWCNFtiGioNllvKTw4iNjptY 8ZqJBZjL5Dly61ApFzSngCcjmszv/XK02JcTlSDZxgVjN0TQ1s3iWnyAHP+2n9q6 CnT6cYZD2Ikh/yulgLo2cJRDhRwvMCESPEbvPxGAPRyavQTIguVDmJgqCaU9zCzD iHuErG8leOAEStdmdHzpa8IiiG9zFkP5V9mJAhEEEwEKACcCGwMICwkIBw0MCwoF FQoJCAsCHgECF4ACGQEFAlP8nh4FCQEbNJMACgkQBmSnaVQmXoxcsg6gp2YDDtzq ENTd3/nUTDc8WCkEbeeWzVVkN5ehqB3otJR+rf9+tQjMAdl5gYpl1VkpBmdhyaHz eLiKEWWeGo8ilLArWpElvZnZiH4RegDZPdHZsWTPhGO3e0ePUlyyN0iYH8+7yXzV P2I4qgNsnIl7HiGLbw6wS9Pyf5urCTFBJxZaEpVW6ijuXM8zVY8X/my9SZprzA2T HQdf5fpNYJ9Wn3QM+qZSfoM/Vl0aRII0u6RXf5LjdwG0Om7iHZqjo/MhMd7+3REV 0Y6RGKO8PfcuF1OvNuT4zERjb00XVUNQLAWkuCirPf7qaj35+VdnG1WgHokKGqYJ FJVcVAokc7rEjD6rag4A3mHAfuWc7wPWuq2whhnnLNbbOCPsgJWxH0JfBuzhWlMO Y0tXQU1aUTWzdQKvSDUUcvEtoZfmtlenmjUOg/G4Iyh3oCXeJKeQVLY5xxxgfjXf 3CQxKP7CaV4+/AeEHbtweDqNrtth+ruaaLKroJRBm845JRO8APM1eRz2nfFlMQp+ cKIrpi4Tf+jzzRLmaIEi07f6jFmY8JH98Cf53ITk7UFQ+HCv8xIZOk6IEoXEgIjC zJACDw+7RSjSeBo+1S8g01b6bB7VKYmyvyi8A9+IiQIcBBABCgAGBQJTrHXzAAoJ EH/Z/MsAC+7u5+MQAJu8ulYkxnNEfNCAr+BQrhHlBcg2elmdLNlfqDSEXpqo+7Ow bqh1DECaOOmA/v13ma/VOfDGHIXgE+kJ/yFEH6d/ERT+oxKuw3BXmnHpGeRC4XxW h+mtn+g0S7w9OoMzgz2v139u81qX5GD6OzkjyJ4cyNVkT43kyONfdmMV/6LHuenF 2wUnZpU2Tqc0O4PF/rxbETIASLYbo8aJLiVDIHkAbK5HOvGNvV9nl8Pwf9cnsYMI 4ozCNV22BYXzvSzXUHNLoqI3S8ueFqyeKDgZA+dwCLsVWUrxMPN3hnzWLyb2NDIA WbBsc/C4sLOCTNKlYpPO7Yicj5cRqzvexxl0cBRaz8Dr+MPFvC+4Jmar3RF+tCFX BZSyamS2UwQ2yVF91DsAEsLaz9fY8B3PTdvbB457ME4Z8XAwshioUa9KRT+xokQL 7Y/2TB6xNP7Ys9HmI3KPSseDU9JwrOQ38ibgqfVl8pYTYxmfz6K29k0YB90qBW1T W0UO+i4mcAhtYOGhcHnUkb2xsIF6k8zC2HOxYcpm52MXdWlC6kOS34njZ2MOh8JE eGSLaqzRVQKuKyycQIP7pQ4Y1Ub1wTcd2A7y7pHLkYLxNN1mb5DGALHf23ws9iIp SZpzD2Hh60W84CpGeu+vmARtlaQ5LASHPBga1sJEfTfnmVbDsBqH5pjBrlANtCJT aW1vbiBKb3NlZnNzb24gPHNpbW9uQHl1Ymljby5jb20+iQIOBBMBCgAkBQJTpysh AhsDBQkAg9YACAsJCAcNDAsKBRUKCQgLAh4BAheAAAoJEAZkp2lUJl6Mxh8OmQEz Ydxc/7vhr+kcAbLsUllsUw3nFwrWGrnzbLDcDf9XHg6cnuMZoejnJXsCzc+GPhUL Wyp+30Ov9r1LwX8yag1AcoFpTx8Js7RW1bPm7XneoCUcdE1MG9v0/Mc34mn/yNz+ 8X7ZTLc6fY8rWL21hxW4JW3rRCIxn4ooztwHyaGFwlLOnhy7BU2RzYbsQA8Inxc6 jzTKl/Y8fdVwU5DkBnCntgqhZUSImsFNTFKarvW4PYvCUxqdyUCSZocO9N9SNJK2 KZKKur4jE0cFZ4GLGXZH3FSMAjk0JC/ju6DmHlIHaINKwCMAzk2Btf3pX2chjKBC Jn6T5l2Is7KcoxGiH6iRc79bqOjNBnu2K/dbqPakKAd/OqDxvLfw+jfh8X8ggJ8V 7HS/HZ167D4rXtLUA8WQvqiFl94Lo+bP8ZuEvbCAuDzYSbnwZ2lV5lAmYcbl2xuW 909onX5pKmtqGuwr8iSRpdjVQcl6KiFhCrPb+Ou4A8YcBNAOQBrvGKdzo/MmHH/t SZuDA3VgZcF+yjT3RJEN5rWNSoVZmbINRS+pX6IOL7kjNL43yZj064ooGa1o711E tb9WmXYGCxfNU9NWFmdOHYd3OJbuzj7Mv7qJp4X6p6seCIi8BBABAgAGBQJTpzKj AAoJEO2iHpS1ZXFvlnwFAKajFYcoF/HVza29tvcJ5ZVqpypshxq1cNUZPeX1z1Q6 GAlLBxcZXxuXCC4SyRsqhq1eYB5ttHM5lxWZJix0+ZQtqdq+gjOcx+POefmAdX+Y FpiaayvQ6oU77okElkZd2Suup7+Halt1V8S+kbMtcA2iEj1g8r1WoUFOgxAUmILR 7HoDpGT8dqHV0JShFFvyL0uL/mpKJVbOGsTKOS+THjKJARsEEAEIAAYFAlOoLMkA CgkQvKAP1LIWjAr58gf4vZp3EyzzC+5b08QKSmEdbPkkjpwIEmuUd22lrXEZmeKi tkVl5i66+HdSY8DAzqS+LHZkmmWoPVvkxwyRf/em9ba2A/ap1cwOOq6QuDmFj5Wq 2MkG01N/Nvz/DXOgpUNGkcYG0JK5p0Orlggz2eWkk0tT3S+Ay0tAV++wKko6JpGd Cmj42yLGvXE5slIGmtjDp2s4WBB5z2mjEFl3krzruvbECcfRXQyQXwdWgq83n5j4 C2r4vIjzunjWT9DS3Dqp53nZw4+jD0dIgukMT6JLhZhgc3UlnrKKwF2AywqN1Zg7 /PnPHCAvuk3CsHhza2aL76uKig7NTy+dJR/0w/gbiEYEEBEKAAYFAlPYNW4ACgkQ cgQ2cL3l8e5l2ACeMp+/AsOB+yvdu3iOBq/K2nobL/kAnRmgUKydh0hfhNXOqazR V70jdQw+iQIcBBABCgAGBQJT2DYkAAoJEAvEfcZNE1MGebYP/0ThLZI7sJkHV4bk 1aWkGo6xe1cOPi0x5M5YJujb9ZiQYN7M57qAVzKiC+580c0aL2SvaDFvItbPeUXl Q2SIxBJ+LTRsXjkzCPE2Lzj1hTWqWgw+48KIWNqJ0rNSOlDbsX6H1BV+2HOt1t3Z 0sm8OdtFTbwbpw6wwE5WN7lVSaHOXbo0w6ee6zr3BAVpBhPWBgb9ClPgBcWB9UoX O+hg0iW3o/Cr4trvTz15dds1yutiPRlSe96AQiy3krozviWB5Wp463XssHg5430D heYiFVEtQ7k7nf12ot3zgrerQDjqNaL2DYAwyhMFXxpKlP3WFU7AwWFxbYTjyo61 WUu81dDdU8Pgytaj6QC+v/fJ4JkO9hBJqRE8RbZv1X2T/KnMebV2Cl8VZxl+O++D uldaShbCQVDv+1J3LhNJRx1qTO/xOA/LMJld4rWp22vMJsrMKynqJSG1wJ3utwTq uBqE6U0UiXc24uVj7zAM6pCyrt1+m3rfasGBlHbGwdnc0zI6sFVp2uEgReonYXW5 pjzjR5XsKgZpiEkiacuPS4zCM558JCfUlF34AuYSdpVblW4VgoYfm8grxFFOKxpR 7I1oyh3J9NiGEc64lIUaPjArePjEqumTGUBW4oldfd3uMh+ajv3/k2+trPbLEHcJ KttLb2wG6HWCUQhBtSOUJuD0PdNCiEYEEBEIAAYFAlPsrfEACgkQeDAsS42/7C/c +wCgsOyagnQ0pXjlzyVKyeFJ64FKWS0AoIluzwm1T+sq/A7mwmmKFpwkGDeyiQIc BBABCAAGBQJT7K53AAoJEMQ1cPgMwpXmbvoP+wZpICh2MVS992iLp2Za40gT3lCO t2W3xm/OKZR1X9kLdKPYGEVOdIdz1OdgSeCqtKgjNTZcnnqPY/zZWXlNDDQEKYdF Ax23p/YTN0Y6AD1cgkPIMBa2XAi4/OjixEmIuDg7L078pk0mdpH9CDC5Z7cGMYqS gTzgpMbQ7P0NLvn0mNZH40X2SDoeQ40+dDhB8/Z7CwVTJOJkQJoLWXNU6rGv+9k9 z8e9jiE4l1PYeVI3ItgPVC8tiExCCQzMyKvHJQw1mRkyV/9rT6i2kQJY28xkmz3W J5QGss7SST78GQ9/nJvBIcJEMY2bsTdC7QjXnXOXBws5z+dzsP680lcBJThQ/rgy mfxf3G8Y99LMzSaGYWykujzSIkBVojRREq1hTHH4tr8Tsi7ikbp8oYd9QLZf/OSR y6S+5QPxSqNIVq4U3Ygfxs1esXE+BFR06qRs2DZPg2BRF8JsYafk+CQbCTiS+tdU fW9srmYYbsGUU+LULmkalvtc16Depm9FQNkI1voJPkUTuVgxRPsDB3kLoVv/1zF/ wJDk28wRxbJIU6p33Y/V/m5dkQClWgNYngrt3IsfPFkVPpOzNl/Jzecb3W4Q5GL7 lHTy0xrKbsXpbpJTjaefvezSZjBQla/yQIa8UoUuziKQhBVwqCQ9jAiM3nI3+x4k sPjodMTqXH5urSNJiQIOBBMBCgAkAhsDCAsJCAcNDAsKBRUKCQgLAh4BAheABQJT /J4gBQkBGzSTAAoJEAZkp2lUJl6MNGYOnjgCSBC86zV6tXT2JXFmASg0pKkVDN3x RAKSMAfTVTAcRmLZtCXRzpWvjcfpkM1dCMHGxdgWqAeeQeXNU4fRa+Hn03yWXKiq ZPdEhSXVvsGbbEi3utvzKOqJXlI/FJFT6vWWP7t4ybnr2XAr6jd/gmJX6NlZUqCl 1y2VOZRz1RUAkaS1wrzXQuaDArdewmQFTZkYClKTCADnaKiS/DV3wJ5GXc+0Lru+ t10rNKHDoNes7BvHTxibMgo7o/FlI1cmDdOFsaaLe1yNXsiyVaZYnfFLPdp9s172 skind5SB2a57tZ1yqe+Ul8jbagsOhP19a6q4hhPgoTCVUsq9l+duVkrJHwMppU3z J/p9oTLLu2VaQe041qkHGoOHFPQrcNQwkInOxr/cWnhR4FsSTC2dxZ/g/w/YpSsD 1JgO/N7ZEWLl0/fq4vKEeE3CJLSYCQgUQmc3X2LLcOWpNJBQ5DjTLdbjUGIBhemf yD+f4FTNMD0PVjB6B7crUmOiGDRPPmj4n6X6KBrU15N39umtIk5ITNHgQCbZ2cn7 WeSb6SqjWIUzYpVlLxm7hRDdRkODbeySFPQQfzgUEdE8C5dPnrr4gKEy65CHcNhl 1gvxJHQvn7I3IKml6YkCHAQQAQoABgUCU6x1+gAKCRB/2fzLAAvu7vNdEACnidc1 8hKvq7UtOKWTov1qCZSHF1WgrIRN3zCsWGaeZvIPKI3O9/ZxbQolGdhJLPV0OMOR RtC3R0RCqJPOoSDupjSeofbvgh8wUllr4v2kxNRFttK+ptc+vKQwgMMJUih4joik +WlmAfCQwX0HFd37wBIz8MChkwylrqyvaOP+i6uTlutToeAciG0T/xG7LIlubK55 wAfhcubbgDXJRnWjQfQ9jvga2Juvwqq62GcybsusB8ziHS+Zb7o64hpk1Xo4/cS0 a3IFx9Q8Nbc4CG5uyOe81Zg6MDwxmBvCnfs5f/ANl7KX0gCKBX7oLxPA2oxyOPPt q0RozWrK0EKD7z+9R+SYRCFu6+jZnS+s4O/U9N+V5T5V6YzzM1KKnwb3oEUN9reh qgrwMkZ3MgmHThB+ZRc6KBWWDhn2hhV7BJRcwMYx8M/tRG5sCjx9sltUHTJ+i/Wx Ld0UQVMLnNCUHN4CT2tpNdEmpoRUi1+atTKbsN368wopFtde8gpvyvxLcBKcUQdQ JBmP6M62VD40qjt2ORlfOt+GaHHIPbic/1PikSF6qgpKWv49dZPSW1aIB+XT9yHJ 7wn0rFENGW+5/eZYjTl9SaJcWkDjdDSTix/GnIUoyvAQiAU7dNiVlHkeVMfzDoEF iFcv8wA+ofHOb7ikoWBExcGS908KM+TXcfqWH7kBDQRTpywoAQgAuXfb7fU/BvEJ YrdGt6z75045hHILkH4r09D920I7jUbj28+7fCAG9Xqb57spkUjQ0tCFCNbIfcL1 KXOiDQ2ubRPqeENO1MpWhgw9s2ld7RQyQna8gS2pHfTNGEg+5em+x1StCAmcSEOU p1cITB7+0FjBK8kLkF1tb/PX6dJz8Z7e62BZZCZ4/W+zxxQBqYp08XNr4pnVEy39 qb6mYO7EofhNfsD1PN8mGj0Qp8jIVhwWazH7bKM8O5I5bM2Av4UvCw4cYNN8ajQW LItzHVypBZFxm920sQxGw6vDO3xFXIBEeedhZa2MGj+dYMZDWACIedG/ebkAS6LI N54jVdcIUwARAQABiQMYBBgBCgAPBQJTpywoAhsCBQkAg9YAASkJEAZkp2lUJl6M wF0gBBkBCgAGBQJTpywoAAoJEIYLf7sy+BGdltsH/06eRSPfHU5hntRfcPHAkWpF a2RbzSonftjnVicXYucXcC12ttvrNrPhQK+HGWdhmdeiKvhQkvjeprizB3bsp9Iq gUfzvBsWIJBNpCu8Y3rGevP9pzpp5IZnueFY6HE8A17uqvE2+msNHFWc5c71+IAm /S/hnsYQY7ckofJMR9M136aL0u8NaRvfI9bnKHp+0QV3O/Wjb0HFwjMGDO8rlzoi IJPHvVbnjz/Ehxj2bchpaBBXh1HbnBH9j3kjkrnsXksrBJtPZlYOTCgMuAowr7Kn B+0jASY5CUXO695JZJXTsIJcGf79Lfku/kajN8yRglb7utoI0v5bJzcmlhGOGsSm 5A6fZmqja0XP3VzC0YIB0152q94Xgboau+emtRuOrJLgggaeBP/X9U07rwmKYFHG Nf+EnnhotU4SMTKFUaHqr8I8TMlSuPpJDWX3BFQcCiAtBLza9BY8pfdGAc/gY+L7 OTNVQn5WbqUkLUmk2/w5IYJ+wi+0vYaps4/4F7E5XLWBjMECqV/eQcrGjnt49FEm LMnYPmgrAaXyOzrquaguaPyOpEuzSPkyeVvtNjiYso0HvJ/+Us2AqRS7qE+SNHYt G1r/IEVwttPkCH0EUqkoYrzfavCCYj5sHQRQ1XdzIP55KAOKp54CldSOR7h1db2s Ae4TWpV4muTVyZWl4LlkwnQI1JJi2hnt+QVfSk3FoPQx+hcK+pcv9BHZaFn4LW1G 7CN4Kj5rtVK9k8785oCZrE10Teo1WI9vBLSWXe5CgzEp/SdEkpMY8QjibGXBKkuj tv9X67+GnxKx8DYV6ig7/G38/dangyoxHVQrc/lndbBAgRc466vlHps7rZ3E/cx+ IANLOA7xqxu86YXvYKkTP14P7z3dv45VL1Wj/1v/ReeK+3oAB4TZv7mor8aGR1YI BkiiwIr+3TUm81SZwnfy71OPs+K/Q/phIz/UltWhZTpwvYU0OYXJiQMYBBgBCgAP AhsCBQJT/J4pBQkBGzL9ASnAXSAEGQEKAAYFAlOnLCgACgkQhgt/uzL4EZ2W2wf/ Tp5FI98dTmGe1F9w8cCRakVrZFvNKid+2OdWJxdi5xdwLXa22+s2s+FAr4cZZ2GZ 16Iq+FCS+N6muLMHduyn0iqBR/O8GxYgkE2kK7xjesZ68/2nOmnkhme54VjocTwD Xu6q8Tb6aw0cVZzlzvX4gCb9L+GexhBjtySh8kxH0zXfpovS7w1pG98j1ucoen7R BXc79aNvQcXCMwYM7yuXOiIgk8e9VuePP8SHGPZtyGloEFeHUducEf2PeSOSuexe SysEm09mVg5MKAy4CjCvsqcH7SMBJjkJRc7r3klkldOwglwZ/v0t+S7+RqM3zJGC Vvu62gjS/lsnNyaWEY4axAkQBmSnaVQmXowdPg6dHh785Hkes3sAzAtmep1ICQc6 +PQ24jhfgEezkyRO5yYHqqelNT3a88+77Np7kG72zSuD9K5gwg3vBnv9ZEhpctPd TvecRrjBjbX3C+JmINnLuqtk/vvEepTACdw1qwJyXK843OC+Ot9f6p3OBMtzh/AB OyaqakTI6ryBxDQa50TxazdlL3KB1spxfRsjOS09YdoJkHt5JsMovziy1yNmBdV5 a8L97AMmZdgeoFdM0dvPdSsZq9oe1kImJuqU5qdeK1ZEGyV/LZnO1JB9w38Q3+84 I9oW4bjVYXrx1jtDBVQmTm15ZOZltBSFFNpXP84e1Oiw/Dc0lE6aq0VAUgiuIWUq fWHlMfyD/HJ31qsD9gkqMMPVYs+OkA806lOkJGVUOCk2aqw8CGsl0/US7JPhcKnu cwk5c8CP+5LnZzZ8bFY5Ak2y7oBvYgWLkABV+aBSCIexRZHywsuVkY9+PmCJCJoN Q2LnKGSyYQwvuSdGHxVjmmX3Ak2StqOpYXH5HgVCUu59q561od+C6fjFd1ohmFZa /tO3oyXYqkNmNeDczcjfMtBjAmfRO8P07T7CMfQ2iobsiAkO8xDXTH+DMT6rLyWO 9mmmDneZ2Hsov6KEZC8MOooruQENBFOnLDgBCADUkPGt+o2InHUmNLqt1iVDnmiK GrayOmv8DpszHQPYRm/w1+fSyxvhFIsIBDREDFWpb6CtJ93SeLOGXVZy/xfDlPIL 0wPYaEiNO+D7k2aMnfn9NflKBoaN892gFACzhVaKKWlrv7Lz+mXHWpAO+iN9VnFf VrO2YPIkFAVGsS6VBwfxoljTm8T/o6KrJToanLVPeGEe9t06aVlMTqRPq+wv9Sv9 2XdkwT4Q7goFpcWmos8icd78csbMuhb2UgKE1BZDTM38xwhuFvXjc2ERHZ6S0/sN d6N0q2AL5eC0Nr9r5JtlUvaybTElQlj+wQT4DLXKtPoMRHIQAK0KBoPVugovABEB AAGJAfkEGAEKAA8FAlOnLDgCGwwFCQCD1gAACgkQBmSnaVQmXoweyQ6cDTNqqYh6 cSFwhmyxBmaEOW8mY6lgJZ1nB/GwdbdUXKb6DikNIihhclBaG1kNqw8GbywsRc2N EJEMC4GFMrOp87KohVbi17hL751S6CeGu7d45OQ3xNY2IC078afK0gyAA/ChCgim 9gJppspaKsQkrnEyO3eUtcPwpJiYCxrqy3SmEOESWCoccirGhgBKnziqtPkyS6xO LJKKPc3z9jkyeyO4w0MRxD43fNrxZc7za3W6ihNXxWF0eJA0CRTxHzcIZUN7hyRr PnuGXh1no30qlAFKcEt1n9+LihJ7vfD0WOQsM6Zbf0ihKUaB76yQOGEmJit+0oTe kWWbi+0c8a3M7Ue2VgMZaTO99LPuRPp0GGMayIh5JIJ3RKgTIrdOkoll87E9+xIo zYYbZ9TU8oSWO+E5Txf3YBbMNCswLMdaVsnhmDO9Cm6Fec76ge4aAllA8we+jmvW ZmF55wY93HURfS0knCbStHeiafglbLBSBrNxvsJpdFjKmaVJcISv/cBgKPxF5xkz tOIpGWAcpk/xzAff3TuNfkmDrFYcqQCaVb/CruMOcxApREGLwoZg0hjsiEna0bFZ kvYSikNIJs8hJGZQZ7/JWMFE1emiwHxgu6p46mKIiQH5BBgBCgAPAhsMBQJT/J4x BQkBGzL2AAoJEAZkp2lUJl6MSbIOn2k7+uTODcOAaGgPwztAOwJTjRLJo4Zx5qeI 01VgkP+0NCBk8koTpBqOsBlLDDV3VX1PqhAeZXRyqoDF2iztdjv2vINgV790UgID DJugEo7ti2cSYJlHbu+DhGwtcKSMMQ/Kw6aFpfvwPqxOD5rEwuvrwidqsrxmteQs BPFiKGjN+IHC8QvR80AHlDkYbFMqimcu1BMLTQD8O097175nya2NTQNNQK6fNq0r YZdORzLALZxHVZqz+/9XvAj+jKuPt9nsc7dHRGXP3a4ugxhbD8iCVp1tSnN2x08u 5EiUrDch1hzXuzn8ix4l7NdFmIj++PmDex41Nj+i+vmunT5452BwjQQ91QbE1UT7 khzHOTPArBXU0eKwGymAqKFcdu7hN0TenVp105inMMrz70zDm0as+gG5uNbh7N3U g0CpjCa6ATBt0wLhQLK0R9+S7dtDEhrS89H2JaAEQ/mAPwcmZu/SnWI3oVgUOImh 3YZJy7u3NA9UDKi0ibyiykv1s7shOibGe1hDqqvhq0FJEaIjHoyvc4Jg48KXs71L YxxV1hfJpakzeTZMCSg+FmlBs6nl6HTODsC69jubiR4skbn8WBNzVaQaiouqFRL/ e336cIZdAezBjrkBDQRTpyxNAQgAxT/lDk2Sfjl8naZmypnRjlaCSc/LHu5TLNd/ U/kzS68pNxBFhfhqmweFYM8c6xo8ADEo3kJADG+0m5/laWyX9SQzxQR6GCUJoOgl +JBUWhmU+gx22I4ImufVpHZBGE7Qeyj5GxVpXqP0WU9rt3/Hk3naz+3YUl9GszdJ Q7rv8Aa8Hnc0lfgIj69dK0Ggk6dVfLCm4c+a8jlx0FtBnKbOia2kczFvqKChV95T 6tKWWu6i/RerBOLAxb7TnW0SaGUtW/PGmaxDRsfCkq3DMwEavVAZ9aZbBBuP9wUb /wYBx2hfnfe28udkdFVciF6S5ZHadVJOA/XEKbYGh+FAMiNb6wARAQABiQH5BBgB CgAPBQJTpyxNAhsgBQkAg9YAAAoJEAZkp2lUJl6M/TYOmwVbSgyfRWp1twmk9pDX 33pJm2u3tXBsd6W4YoRmTHXZnnsXKqLQ0OWoTafYYfoCY10J4Zk3PFl/R9V/JPdt d54thklGvzv24yb/4l/9BuxRHbHPxN1jjOa8gSXU86Qc3XcBmp630d2GOuxsQg4Z Fs5U6AtWGZunsAcd2eC0c4g9Dn01b6cV/Y8gct2l5RJtucKLYM3tzEJE2ch7mcvd 6izRdqlIxIB5cr1prwmsFq40odh41yS9tPvTnV5TWM+dE4VvMNbjBV7nHSinpul7 Ew7iJIbpcNumLFC7ohddF7BMxbNYFZfvPp9PzDvEGEHr9q6CKlBmeMvV04Naqd/F DHuSLF5oeRSq0p/PLXHoA+i5RyiL8vEC4t52PG9WfNMPpz7CMAypQImv6+n0WgST zX/zEwKIp0d95rzWDTtJiKecXGofEGZdUiElv108+huHRqgqOehy+OFcDFZ5ImLI +CyhwUGhguQuF3Nxo93zsq0CC9n/nG5nVb5sSe0iMkm+GBoqYkNSWp2AypKmSPFm b6NlcpQpEyG4mEbEpnXRQK7oWvbU8CAAXlTo7E39eqwQEK9FH4wKtJbc38kKDjfo Iw/jTkUqdI7MlHuxWdiWCVluXE7VmYkB+QQYAQoADwIbIAUCU/yeOQUJARsy6gAK CRAGZKdpVCZejAYJDqCddnouKEWmX1QsJWL3Rih1h7m74P+DRTa3NHTkUl/ghVwY C5GBxLzWA0036kY+dlQIuTV8E3jFEQNVBfKFIZGaR2cdMDOKIzdJORnffhXxuFiN 20T8xtHASgs8+IY6DOApfmRgcVBTdb8rFP2ruHBBjOVm6LzPWI+RbcBXK8Yrmgm9 TMQHBYpsSHK0zTUKBpJ19ahhdNcCja6TWUf5NvJqFbOHva9GVb4mgyzYqXxaShQv zFTrpjmLeTCDKUdx2R/MS1NL9PFFtBvFXWMIvrnn/4Bk8yrHYtDdVQXXUjkX4rEl w+8uJY1W3Q9iHp1wSZScLReHIxsGHr6h9VMf08B+di0e+trQNJKQG+GXR5DNoVxq t0BC3yHHR4WanQswgZQ2cwyRTl4E+d8LE9ln90cM0xeY+A+WoJz5tYavH8181Wxt xHR7Qgf/33+i/GmMMZRFC7uaIF+w6OC/eK4lJiUlr21jVUa+iZKOgKu1G/0U6z2M zaBevLshFjCmSpSE3B2MSOVsrE8Z56RVFXuC+Sh+Ur+3sXydlovbsNRlXRQBawa0 Y/uNg1PG6PbGPXpsXC3K7puAszBvbuHF0n5FwXZdHYozM7uCbkZbok7tqXbvdJY1 DNs= =mzYz -----END PGP PUBLIC KEY BLOCK----- ---------------------------------------------------------------------- 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. gss-1.0.3/INSTALL0000644000000000000000000003661012415507621010240 00000000000000Installation Instructions ************************* Copyright (C) 1994-1996, 1999-2002, 2004-2013 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 command `./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. HP-UX `make' updates targets which have the same time stamps as their prerequisites, which makes it generally unusable when shipped generated files such as `configure' are involved. Use GNU `make' instead. On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot parse its `' 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 limitation. Until the limitation is lifted, you can use this workaround: CONFIG_SHELL=/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. gss-1.0.3/po/0000755000000000000000000000000012415510376007700 500000000000000gss-1.0.3/po/vi.gmo0000644000000000000000000002164412415507644010755 00000000000000Þ•@Y€æh4†»(Ôý,0D*u ».Ïþ# &? *f ‘ ­ =Æ $ #) M i (Š (³ Ü ú I ;b ;ž @Ú  3 T Qt Æ Ï Ù +ç 9 "M p mˆ 3ö &**Q9|'¶/Þ-'<&d ‹¬'¿ç)1G"X!{1—Ïgæo{VPÒ,#2PƒA¢>ä@#1d'–@¾,ÿ9,:fA¡'ã I'5q7§6ß4/K3{:¯êv C€EÄN -Y@‡ Èék|ŽN¤góC[Ÿ…½8C,|7©Ká@- An @° 9ñ P+!4|!±!(Ç!-ð!)"H"h"/~"&®"6Õ"— #%845;+. = 7/ , "!)0:@$19 ?*32<#-6>& (' MSB LSB +-----------------+-----------------+---------------------------------+ | Calling Error | Routine Error | Supplementary Info | | -h, --help Print help and exit. -V, --version Print version and exit. -l, --list-mechanisms List information about supported mechanisms in a human readable format. -m, --major=LONG Describe a `major status' error code value. -q, --quiet Silent operation (default=off). A credential was invalidA later token has already been processedA parameter was malformedA required input parameter could not be readA required output parameter could not be writtenA supplied name was of an unsupported typeA token had an invalid MICA token was invalidAn expected per-message token was not receivedAn invalid name was suppliedAn invalid status code was suppliedAn unsupported mechanism was requestedAttempt to use incomplete security contextAuthenticator has no subkeyBuffer is the wrong sizeCommand line interface to GSS, used to explain error codes. Context is already fully establishedCouldn't allocate gss_buffer_t dataCredential cache has no TGTCredential usage type is unknownGSS-API major status code %ld (0x%lx). Incorrect channel bindings were suppliedInvalid field length in tokenKerberos V5 GSS-API mechanismMandatory arguments to long options are mandatory for short options too. Masked calling error %ld (0x%lx) shifted into %ld (0x%lx): Masked routine error %ld (0x%lx) shifted into %ld (0x%lx): Masked supplementary info %ld (0x%lx) shifted into %ld (0x%lx): Message context invalidNo @ in SERVICE-NAME name stringNo context has been establishedNo credentials were supplied, or the credentials were unavailable or inaccessibleNo errorNo error No krb5 errorNo principal in keytab matches desired namePrincipal in credential cache does not match desired nameSTRING-UID-NAME contains nondigitsThe context has expiredThe gss_init_sec_context() or gss_accept_sec_context() function must be called again to complete its functionThe operation is forbidden by local security policyThe operation or option is unavailableThe provided name was not a mechanism nameThe quality-of-protection requested could not be providedThe referenced credentials have expiredThe requested credential element already existsThe token was a duplicate of an earlier tokenThe token's validity period has expiredTry `%s --help' for more information. UID does not resolve to usernameUnknown krb5 errorUnknown quality of protection specifiedUnknown signature type in tokenUnspecified error in underlying mechanismUsage: %s OPTIONS... Validation errordisplaying status code failed (%d)indicating mechanisms failed (%d)inquiring information about mechanism failed (%d)| +-----------------+-----------------+---------------------------------+ Bit 31 24 23 16 15 0 Project-Id-Version: gss-1.0.1 Report-Msgid-Bugs-To: bug-gss@gnu.org POT-Creation-Date: 2014-10-09 15:37+0200 PO-Revision-Date: 2012-03-21 07:27+0700 Last-Translator: Trần Ngá»c Quân Language-Team: Vietnamese Language: vi MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=1; plural=0; X-Generator: LocFactoryEditor 1.8 X-Poedit-Language: Vietnamese X-Poedit-Country: VIET NAM X-Poedit-SourceCharset: utf-8 MSB LSB +-----------------+-----------------+---------------------------------+ | Lá»—i gá»i | Lá»—i hàm | Thông tin bổ sung | | -h, --help Hiển thị trợ giúp rồi thoát. -V, --version Hiển thị phiên bản rồi thoát. -l, --list-mechanisms Lấy danh sách thông tin vá» các cÆ¡ cấu được há»— trợ theo định dạng con ngưá»i có thể Ä‘á»c hiểu. -m, --major=LONG Mô tả giá trị má»™t mã sai `major status'. -q, --quiet thá»±c hiện thầm lặng (mặc định = tắt). Có thông tin xác thá»±c không hợp lệMá»™t hiệu bài nằm sau đã được xá»­ lýCó má»™t tham số dạng saiMá»™t tham số nhập cần thiết không thể Ä‘á»c đượcMá»™t tham số xuất cần thiết không thể ghi đượcÄã cung cấp má»™t tên có kiểu không được há»— trợCó má»™t hiệu bài vá»›i MIC không hợp lệCó má»™t hiệu bài không hợp lệChưa nhận má»™t hiệu bài từng thông Ä‘iệp mong đợiÄã cung cấp má»™t tên không hợp lệÄã cung cấp má»™t mã trạng thái không hợp lệÄã yêu cầu má»™t cÆ¡ chế không được há»— trợÄã thá»­ sá»­ dụng ngữ cảnh bảo mật chưa hoàn tấtNhà xác thá»±c không có khoá phụVùng đệm kích cỡ saiGiao diện dòng lệnh vào GSS, dùng để giải thích mã lá»—i. Ngữ cảnh đã được thiết lập đầy đủKhông thể phân cấp dữ liệu « gss_buffer_t »Bá»™ nhá»› tạm thông tin xác thá»±c không có TGTKhông rõ kiểu sá»­ dụng thông tin xác thá»±cGSS-API mã trạng thái chính %ld (0x%lx). Äã cung cấp các tổ hợp kênh không đúngChiá»u dài trưá»ng không hợp lệ trong hiệu bàiCÆ¡ chế GSS-API Kerberos pb5Má»i đối số bắt buá»™c phải sá»­ dụng vá»›i tùy chá»n dài cÅ©ng bắt buá»™c vá»›i tùy chá»n ngắn. Lá»—i gói có mặt nạ %ld (0x%lx) đã rá»i vào %ld (0x%lx): Lá»—i hàm có mặt nạ %ld (0x%lx) đã địch vào %ld (0x%lx): Thông tin bổ sung có mặt nạ %ld (0x%lx) đã dịch vào %ld (0x%lx): Ngữ cảnh thông Ä‘iệp không hợp lệKhông có dấu @ trong chuá»—i SERVICE-NAME (tên dịch vụ)Chưa thiết lập ngữ cảnhChưa cung cấp thông tin xác thá»±c, hoặc thông tin xác thá»±c chưa sẵn sàng, hoặc không thể được truy cậpKhông có lá»—iKhông có lá»—i Không có lá»—i krb5Không có Ä‘iá»u chính trong keytab mà tương ứng vá»›i tên yêu cầuÄiá»u chính trong bá»™ nhá»› tạm thông tin xác thá»±c không tương ứng vá»›i tên yêu cầuSTRING-UID-NAME (chuá»—i-tên-UID) chứa ký tá»± khác chữ sốNgữ cảnh đã hết hạnHàm « gss_init_sec_context() » hay « gss_accept_sec_context() » phải được gá»i lần nữa để hoàn tất chức năngThao tác bị chính sách bảo mật cục bá»™ cấmThao tác hay tùy chá»n không sẵn sàngÄã cung cấp má»™t tên không phải tên cÆ¡ chếKhông thể cung cấp mức bảo vệ (quality-of-protection) yêu cầuÄã tham chiếu đến thông tin xác thá»±c đã hết hạnÄã yêu cầu má»™t phần tá»­ thông tin xác thá»±c đã cóHiệu bài là bản sao cá»§a má»™t hiệu bài nằm trướcThá»i gian hợp lệ cá»§a hiệu bài đã hết hạnHãy thá»­ câu lệnh trợ giúp « %s --help » để tìm thêm thông tin. UID không giải quyết thành tên ngưá»i dùngLá»—i krb5 không rõÄã ghi rõ mức bảo vệ không rõKhông rõ kiểu chữ ký trong hiệu bàiLá»—i không rõ trong cÆ¡ chế cÆ¡ sởSá»­ dụng: %s TÙY_CHỌN... Lá»—i hợp lệ hoáhiển thị mã trạng thái gặp lá»—i (%d)cÆ¡ cấu chỉ thị gặp lá»—i (%d)tìm hiểu thông tin vá» cÆ¡ cấu gặp lá»—i (%d)| +-----------------+-----------------+---------------------------------+ Bit 31 24 23 16 15 0 gss-1.0.3/po/sk.gmo0000644000000000000000000001461012415507644010747 00000000000000Þ•7ÔIŒ°æ±˜(±Ú,ô0!*R}˜.¬Û#ø&*CnŠ$£#Èì ()(R{;™;Õ@ R j ‹ Q« ý   + 9J "„ § m¿ 3- &a *ˆ 9³ 'í / -E 's &›  ã 'ö  )> h —y ^épZ$s˜9¶:ð(+Tm.°#Í*ñ7 TuŽ,®+Û%--([ „?¥>åJ$o ‰ª5 ø4(R]8°évú3q'¥+ÍOù0I)z'¤Ì3ç7S%g.¬Û—ð(*43+.,$#6 5 " '10 2&% / -!7) MSB LSB +-----------------+-----------------+---------------------------------+ | Calling Error | Routine Error | Supplementary Info | | A credential was invalidA later token has already been processedA parameter was malformedA required input parameter could not be readA required output parameter could not be writtenA supplied name was of an unsupported typeA token had an invalid MICA token was invalidAn expected per-message token was not receivedAn invalid name was suppliedAn invalid status code was suppliedAn unsupported mechanism was requestedAttempt to use incomplete security contextAuthenticator has no subkeyBuffer is the wrong sizeContext is already fully establishedCouldn't allocate gss_buffer_t dataCredential cache has no TGTCredential usage type is unknownGSS-API major status code %ld (0x%lx). Incorrect channel bindings were suppliedInvalid field length in tokenMasked calling error %ld (0x%lx) shifted into %ld (0x%lx): Masked routine error %ld (0x%lx) shifted into %ld (0x%lx): Masked supplementary info %ld (0x%lx) shifted into %ld (0x%lx): Message context invalidNo @ in SERVICE-NAME name stringNo context has been establishedNo credentials were supplied, or the credentials were unavailable or inaccessibleNo errorNo error No krb5 errorNo principal in keytab matches desired namePrincipal in credential cache does not match desired nameSTRING-UID-NAME contains nondigitsThe context has expiredThe gss_init_sec_context() or gss_accept_sec_context() function must be called again to complete its functionThe operation is forbidden by local security policyThe operation or option is unavailableThe provided name was not a mechanism nameThe quality-of-protection requested could not be providedThe referenced credentials have expiredThe requested credential element already existsThe token was a duplicate of an earlier tokenThe token's validity period has expiredTry `%s --help' for more information. UID does not resolve to usernameUnknown krb5 errorUnknown quality of protection specifiedUnknown signature type in tokenUnspecified error in underlying mechanismValidation error| +-----------------+-----------------+---------------------------------+ Bit 31 24 23 16 15 0 Project-Id-Version: gss 0.0.22 Report-Msgid-Bugs-To: bug-gss@gnu.org POT-Creation-Date: 2014-10-09 15:37+0200 PO-Revision-Date: 2007-09-14 23:40+0100 Last-Translator: Ivan Masár Language-Team: Slovak Language: sk MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit MSB LSB +-----------------+-----------------+---------------------------------+ | Chyba volania | Chyba rutiny | Doplňujúce informácie | | Poverenie bolo neplatnéUž bol spracovaný neskorší tokenFormát parametra bol chybnýPožadovaný vstupný parameter nebolo možné naÄítaÅ¥Požadovaný výstupný parameter nebolo možné zapísaÅ¥Dodaný názov bol nepodporovaného typuToken mal nesprávny MICToken bol neplatnýOÄakávaný token-na-správu nebol obdržanýBol dodaný neplatný názovBol dodaný neplatný stavový kódBol vyžiadaný nepodporovaný mechanizmusPokus o použitie neúplného bezpeÄnostného kontextuAutentifikátor nemá podkľúÄCHybná veľkosÅ¥ buferaKontext je už úplne zavedenýNebolo možné alokovaÅ¥ údaje gss_buffer_tVyrovnávacia pamäť oprávnení nemá TGTTyp použitia oprávnenia je neznámyGSS-API hlavné, stavový kód %ld (0x%lx). Boli dodané nesprávne väzby na kanálNeplatná dĺžka poľa v tokeneMaskovaná chyba volania %ld (0x%lx) posunutá na %ld (0x%lx): Maskovaná chyba rutiny %ld (0x%lx) posunutá na %ld (0x%lx): Maskované doplňujúce informácie %ld (0x%lx) posunuté na %ld (0x%lx): Neplatný kontext správyV reÅ¥azci SERVICE-NAME chýba @Nebol zavedený kontextPoverenie nebolo dodané, dostupné alebo prístupnéŽiadna chybaŽiadna chyba Žiadna chyba krb5Zmocniteľ v keytab sa zhoduje s požadovaným menomZmocniteľ vo vyrovnávacej pamäti oprávnení sa nezhoduje s požadovaným menomSTRING-UID-NAME obsahuje znaky, ktoré nie sú ÄísliceKontext vyprÅ¡alFunkciu gss_init_sec_context() alebo gss_accept_sec_context() je potrebné zavolaÅ¥ znova, aby dokonÄila svoju úlohuOperáciu zakazuje lokálna bezpeÄnostná politikaOperácia alebo voľba nie je dostupnáPoskytnutý názov nebol názvom mechanizmuNebolo možné poskytnúť požadovanú kvalitu-ochrany (quality-of-protection)Poverenie, na ktoré bolo odkazované, vyprÅ¡aloPožadovaný prvok poverenia už existujeToken bol duplikátom skorÅ¡ieho tokenuPlatnosÅ¥ tokenu vyprÅ¡alaSkúste viac informácií pomocou „%s --help“. UID nie je možné preložiÅ¥ na používateľské menoNeznáma chyba krb5Bola zadaná neznáma kvalita ochranyNeplatný typ podpisu v tokeneNeÅ¡pecifikovaná chyba v použitom mechanizmeChyba pri overovaní| +-----------------+-----------------+---------------------------------+ Bit 31 24 23 16 15 0 gss-1.0.3/po/insert-header.sin0000644000000000000000000000124012415507605013063 00000000000000# Sed script that inserts the file called HEADER before the header entry. # # At each occurrence of a line starting with "msgid ", we execute the following # commands. At the first occurrence, insert the file. At the following # occurrences, do nothing. The distinction between the first and the following # occurrences is achieved by looking at the hold space. /^msgid /{ x # Test if the hold space is empty. s/m/m/ ta # Yes it was empty. First occurrence. Read the file. r HEADER # Output the file's contents by reading the next line. But don't lose the # current line while doing this. g N bb :a # The hold space was nonempty. Following occurrences. Do nothing. x :b } gss-1.0.3/po/de.po0000644000000000000000000002724512415507644010566 00000000000000# German translation of gss. # Copyright © 2009 Free Software Foundation, Inc. # Copyright (C) 2010 Simon Josefsson # This file is distributed under the same license as the gss package. # Mario Blättermann , 2014. # msgid "" msgstr "" "Project-Id-Version: gss 1.0.1\n" "Report-Msgid-Bugs-To: bug-gss@gnu.org\n" "POT-Creation-Date: 2014-10-09 15:37+0200\n" "PO-Revision-Date: 2014-03-08 22:11+0100\n" "Last-Translator: Mario Blättermann \n" "Language-Team: German \n" "Language: de\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n!=1);\n" "X-Generator: Poedit 1.5.4\n" #: lib/meta.c:37 msgid "Kerberos V5 GSS-API mechanism" msgstr "Kerberos V5 GSS-API-Mechanismus" #: lib/error.c:37 msgid "A required input parameter could not be read" msgstr "Ein benötigter Eingabeparameter konnte nicht gelesen werden" #: lib/error.c:39 msgid "A required output parameter could not be written" msgstr "Ein benötigter Ausgabeparameter konnte nicht geschrieben werden" #: lib/error.c:41 msgid "A parameter was malformed" msgstr "Ein Parameter war beschädigt" #: lib/error.c:46 msgid "An unsupported mechanism was requested" msgstr "Ein nicht unterstützter Mechanismus wurde angefordert" #: lib/error.c:48 msgid "An invalid name was supplied" msgstr "Ein ungültiger Name wurde angegeben" #: lib/error.c:50 msgid "A supplied name was of an unsupported type" msgstr "Der Typ des angegebenen Namens wird nicht unterstützt" #: lib/error.c:52 msgid "Incorrect channel bindings were supplied" msgstr "Inkorrekte Kanalbindungen wurden angegeben" #: lib/error.c:54 msgid "An invalid status code was supplied" msgstr "Ein ungültiger Statuscode wurde angegeben" #: lib/error.c:56 msgid "A token had an invalid MIC" msgstr "Ein Token hat ein ungültiges MIC" #: lib/error.c:58 msgid "" "No credentials were supplied, or the credentials were unavailable or " "inaccessible" msgstr "" "Es wurden keine Anmeldedaten angegeben, oder die Anmeldedaten waren nicht " "verfügbar oder der Zugriff darauf nicht möglich" #: lib/error.c:61 msgid "No context has been established" msgstr "Es wurde kein Kontext aufgebaut" #: lib/error.c:63 msgid "A token was invalid" msgstr "Ein Token war ungültig" #: lib/error.c:65 msgid "A credential was invalid" msgstr "Eine Anmeldeinformation war ungültig" #: lib/error.c:67 msgid "The referenced credentials have expired" msgstr "Die referenzierten Anmeldedaten sind abgelaufen" #: lib/error.c:69 msgid "The context has expired" msgstr "Der Kontext ist abgelaufen" #: lib/error.c:71 msgid "Unspecified error in underlying mechanism" msgstr "Nicht näher bezeichneter Fehler im zugrundeliegenden Mechanismus" #: lib/error.c:73 msgid "The quality-of-protection requested could not be provided" msgstr "Die angeforderte Schutzqualität konnte nicht bereitgestellt werden" #: lib/error.c:75 msgid "The operation is forbidden by local security policy" msgstr "Der Vorgang ist durch die lokalen Sicherheitsregeln nicht erlaubt." #: lib/error.c:77 msgid "The operation or option is unavailable" msgstr "Der Vorgang oder die Option ist nicht verfügbar" #: lib/error.c:79 msgid "The requested credential element already exists" msgstr "Das angeforderte Anmeldedatenelement existiert bereits" #: lib/error.c:81 msgid "The provided name was not a mechanism name" msgstr "Der angegebene Name war nicht der Name eines Mechanismus" #: lib/error.c:86 msgid "" "The gss_init_sec_context() or gss_accept_sec_context() function must be " "called again to complete its function" msgstr "" "Die Funktion gss_init_sec_context() oder gss_accept_sec_context() muss " "erneut aufgerufen werden, um die Funktion abzuschließen" #: lib/error.c:89 msgid "The token was a duplicate of an earlier token" msgstr "Ein Token war ein Duplikat eines früheren Tokens" #: lib/error.c:91 msgid "The token's validity period has expired" msgstr "Die Gültigkeitsdauer des Tokens ist überschritten" #: lib/error.c:93 msgid "A later token has already been processed" msgstr "Ein neuerer Token wurde bereits verarbeitet" #: lib/error.c:95 msgid "An expected per-message token was not received" msgstr "Ein erwarteter meldungsgebundener Token wurde nicht empfangen" #: lib/error.c:312 msgid "No error" msgstr "Kein Fehler" #: lib/krb5/error.c:36 msgid "No @ in SERVICE-NAME name string" msgstr "Kein @ in Zeichenkette SERVICE-NAME" #: lib/krb5/error.c:38 msgid "STRING-UID-NAME contains nondigits" msgstr "STRING-UID-NAME enthält nicht nur ziffern" #: lib/krb5/error.c:40 msgid "UID does not resolve to username" msgstr "UID löst den Benutzernamen nicht auf" #: lib/krb5/error.c:42 msgid "Validation error" msgstr "Validierungsfehler" #: lib/krb5/error.c:44 msgid "Couldn't allocate gss_buffer_t data" msgstr "Daten für gss_buffer_t konnten nicht zugewiesen werden" #: lib/krb5/error.c:46 msgid "Message context invalid" msgstr "Meldungstext ungültig" #: lib/krb5/error.c:48 msgid "Buffer is the wrong size" msgstr "Puffer hat die falsche Größe" #: lib/krb5/error.c:50 msgid "Credential usage type is unknown" msgstr "Nutzunsgtyp der Anmeldedaten ist unbekannt" #: lib/krb5/error.c:52 msgid "Unknown quality of protection specified" msgstr "Unbekannte Schutzqualität angegeben" #: lib/krb5/error.c:55 msgid "Principal in credential cache does not match desired name" msgstr "" "Principal im Anmeldedaten-Zwischenspeicher entspricht nicht dem gewünschten " "Namen" #: lib/krb5/error.c:57 msgid "No principal in keytab matches desired name" msgstr "" "Kein Principal in der Schlüsseltabelle entspricht dem gewünschten Namen" #: lib/krb5/error.c:59 msgid "Credential cache has no TGT" msgstr "Anmeldedaten-Zwischenspeicher hat kein TGT" #: lib/krb5/error.c:61 msgid "Authenticator has no subkey" msgstr "Authentifizierer hat keinen Unterschlüssel" #: lib/krb5/error.c:63 msgid "Context is already fully established" msgstr "Kontext wurde bereits vollständig aufgebaut" #: lib/krb5/error.c:65 msgid "Unknown signature type in token" msgstr "Unbekannter Signaturtyp im Token" #: lib/krb5/error.c:67 msgid "Invalid field length in token" msgstr "Ungültige Feldlänge im Token" #: lib/krb5/error.c:69 msgid "Attempt to use incomplete security context" msgstr "Versuch, einen unvollständigen Sicherheitskontext zu verwenden" #: lib/krb5/error.c:86 msgid "No krb5 error" msgstr "Kein krb5-Fehler" #: lib/krb5/error.c:127 msgid "Unknown krb5 error" msgstr "Unbekannter krb5-Fehler" #: src/gss.c:67 #, c-format msgid "Try `%s --help' for more information.\n" msgstr "Rufen Sie »%s --help« auf, um mehr Informationen zu erhalten.\n" #: src/gss.c:71 #, c-format msgid "Usage: %s OPTIONS...\n" msgstr "Aufruf: %s OPTIONEN …\n" #: src/gss.c:74 msgid "" "Command line interface to GSS, used to explain error codes.\n" "\n" msgstr "Befehlszeilenschnittstelle zu GSS zur Erläuterung von Fehlercodes.\n" #: src/gss.c:78 msgid "" "Mandatory arguments to long options are mandatory for short options too.\n" msgstr "" "Vorgeschriebene Argumente für lange Optionen sind ebenfalls für die " "Kurzoptionen vorgeschrieben.\n" #: src/gss.c:81 msgid "" " -h, --help Print help and exit.\n" " -V, --version Print version and exit.\n" " -l, --list-mechanisms\n" " List information about supported mechanisms\n" " in a human readable format.\n" " -m, --major=LONG Describe a `major status' error code value.\n" msgstr "" " -h, --help Hilfe ausgeben und beenden.\n" " -V, --version Version ausgeben und beenden.\n" " -l, --list-mechanisms\n" " Informationen zu den unterstützten Mechanismen\n" " in einem menschenlesbaren Format ausgeben.\n" " -m, --major=LONG Den Wert eines »Major status«-Fehlercodes beschreiben.\n" #: src/gss.c:89 msgid "" " -a, --accept-sec-context[=MECH]\n" " Accept a security context as server.\n" " If MECH is not specified, no credentials\n" " will be acquired. Use \"*\" to use library\n" " default mechanism.\n" " -i, --init-sec-context=MECH\n" " Initialize a security context as client.\n" " MECH is the SASL name of mechanism, use -l\n" " to list supported mechanisms.\n" " -n, --server-name=SERVICE@HOSTNAME\n" " For -i and -a, set the name of the remote host.\n" " For example, \"imap@mail.example.com\".\n" msgstr "" #: src/gss.c:103 msgid " -q, --quiet Silent operation (default=off).\n" msgstr " -q, --quiet Stiller Modus (Vorgabe=aus).\n" #: src/gss.c:122 #, c-format msgid "" "GSS-API major status code %ld (0x%lx).\n" "\n" msgstr "" "GSS-API Major-Statuscode %ld (0x%lx).\n" "\n" #: src/gss.c:124 #, c-format msgid "" " MSB LSB\n" " +-----------------+-----------------+---------------------------------+\n" " | Calling Error | Routine Error | Supplementary Info |\n" " | " msgstr "" " MSB LSB\n" " +-----------------+-----------------+---------------------------------+\n" " | Aufruf-Fehler | Routine-Fehler | Zusätzliche Infos |\n" " | " #: src/gss.c:138 #, c-format msgid "" "|\n" " +-----------------+-----------------+---------------------------------+\n" "Bit 31 24 23 16 15 0\n" "\n" msgstr "" "|\n" " +-----------------+-----------------+---------------------------------+\n" "Bit 31 24 23 16 15 0\n" "\n" #: src/gss.c:148 #, c-format msgid "Masked routine error %ld (0x%lx) shifted into %ld (0x%lx):\n" msgstr "Maskierter Routine-Fehler %ld (0x%lx) verschoben in %ld (0x%lx):\n" #: src/gss.c:164 src/gss.c:198 src/gss.c:234 #, c-format msgid "displaying status code failed (%d)" msgstr "Anzeige des Statuscodes fehlgeschlagen (%d)" #: src/gss.c:184 #, c-format msgid "Masked calling error %ld (0x%lx) shifted into %ld (0x%lx):\n" msgstr "Maskierter Aufruf-Fehler %ld (0x%lx) verschoben in %ld (0x%lx):\n" #: src/gss.c:217 #, c-format msgid "Masked supplementary info %ld (0x%lx) shifted into %ld (0x%lx):\n" msgstr "Maskierte Zusatz-Info %ld (0x%lx) verschoben in %ld (0x%lx):\n" #: src/gss.c:251 #, c-format msgid "No error\n" msgstr "Kein Fehler\n" #: src/gss.c:269 #, c-format msgid "indicating mechanisms failed (%d)" msgstr "Indizierung der Mechanismen fehlgeschlagen (%d)" #: src/gss.c:285 #, c-format msgid "inquiring information about mechanism failed (%d)" msgstr "Ermittlung der Informationen zum Mechanismus ist fehlgeschlagen (%d)" #: src/gss.c:342 src/gss.c:483 #, fuzzy, c-format msgid "inquiring mechanism for SASL name (%d/%d)" msgstr "Indizierung der Mechanismen fehlgeschlagen (%d)" #: src/gss.c:355 src/gss.c:498 #, c-format msgid "could not import server name \"%s\" (%d/%d)" msgstr "" #: src/gss.c:374 #, fuzzy, c-format msgid "initializing security context failed (%d/%d)" msgstr "Anzeige des Statuscodes fehlgeschlagen (%d)" #: src/gss.c:378 src/gss.c:564 #, c-format msgid "base64 input too long" msgstr "" #: src/gss.c:380 src/gss.c:415 src/gss.c:545 src/gss.c:566 #, c-format msgid "malloc" msgstr "" #: src/gss.c:407 src/gss.c:537 #, c-format msgid "getline" msgstr "" #: src/gss.c:409 src/gss.c:539 #, c-format msgid "end of file" msgstr "" #: src/gss.c:413 src/gss.c:543 #, c-format msgid "base64 fail" msgstr "" #: src/gss.c:520 #, c-format msgid "could not acquire server credentials (%d/%d)" msgstr "" #: src/gss.c:560 #, fuzzy, c-format msgid "accepting security context failed (%d/%d)" msgstr "Anzeige des Statuscodes fehlgeschlagen (%d)" gss-1.0.3/po/pl.po0000644000000000000000000002614512415507644010607 00000000000000# Polish translation for gss. # Copyright (C) 2004, 2010 Free Software Foundation, Inc. # This file is distributed under the same license as the gss package. # Jakub Bogusz , 2004-2010. # msgid "" msgstr "" "Project-Id-Version: gss 1.0.1\n" "Report-Msgid-Bugs-To: bug-gss@gnu.org\n" "POT-Creation-Date: 2014-10-09 15:37+0200\n" "PO-Revision-Date: 2010-11-16 21:01+0100\n" "Last-Translator: Jakub Bogusz \n" "Language-Team: Polish \n" "Language: pl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=ISO-8859-2\n" "Content-Transfer-Encoding: 8bit\n" #: lib/meta.c:37 msgid "Kerberos V5 GSS-API mechanism" msgstr "Mechanizm Kerberos V5 GSS-API" #: lib/error.c:37 msgid "A required input parameter could not be read" msgstr "Wymagany parametr wej¶ciowy nie móg³ byæ odczytany" #: lib/error.c:39 msgid "A required output parameter could not be written" msgstr "Wymagany parametr wyj¶ciowy nie móg³ byæ zapisany" #: lib/error.c:41 msgid "A parameter was malformed" msgstr "Parametr by³ ¼le sformu³owany" #: lib/error.c:46 msgid "An unsupported mechanism was requested" msgstr "¯±dano nieobs³ugiwanego mechanizmu" #: lib/error.c:48 msgid "An invalid name was supplied" msgstr "Podano b³êdn± nazwê" #: lib/error.c:50 msgid "A supplied name was of an unsupported type" msgstr "Podana nazwa by³a nieobs³ugiwanego typu" #: lib/error.c:52 msgid "Incorrect channel bindings were supplied" msgstr "Podano niepoprawne powi±zania kana³u" #: lib/error.c:54 msgid "An invalid status code was supplied" msgstr "Podano b³êdny kod stanu" #: lib/error.c:56 msgid "A token had an invalid MIC" msgstr "Token mia³ b³êdny MIC" #: lib/error.c:58 msgid "" "No credentials were supplied, or the credentials were unavailable or " "inaccessible" msgstr "Nie podano danych uwierzytelniaj±cych lub by³y niedostêpne" #: lib/error.c:61 msgid "No context has been established" msgstr "Nie ustalono kontekstu" #: lib/error.c:63 msgid "A token was invalid" msgstr "Token by³ b³êdny" #: lib/error.c:65 msgid "A credential was invalid" msgstr "Dane uwierzytelniaj±ce by³y niepoprawne" #: lib/error.c:67 msgid "The referenced credentials have expired" msgstr "Wskazane dane uwierzytelniaj±ce wygas³y" #: lib/error.c:69 msgid "The context has expired" msgstr "Kontekst wygas³" #: lib/error.c:71 msgid "Unspecified error in underlying mechanism" msgstr "Nieokre¶lony b³±d w podrzêdnym mechanizmie" #: lib/error.c:73 msgid "The quality-of-protection requested could not be provided" msgstr "¯±dana jako¶æ zabezpieczenia nie mog³a byæ zapewniona" #: lib/error.c:75 msgid "The operation is forbidden by local security policy" msgstr "Operacja jest zabroniona przez lokaln± politykê bezpieczeñstwa" #: lib/error.c:77 msgid "The operation or option is unavailable" msgstr "Operacja lub opcja jest niedostêpna" #: lib/error.c:79 msgid "The requested credential element already exists" msgstr "¯±dany element danych uwierzytelniaj±cych ju¿ istnieje" #: lib/error.c:81 msgid "The provided name was not a mechanism name" msgstr "Dostarczona nazwa nie by³a nazw± mechanizmu" #: lib/error.c:86 msgid "" "The gss_init_sec_context() or gss_accept_sec_context() function must be " "called again to complete its function" msgstr "" "Funkcja gss_init_sec_context() lub gss_accept_sec_context() musi byæ " "wywo³ana ponownie aby dokoñczyæ funkcjê" #: lib/error.c:89 msgid "The token was a duplicate of an earlier token" msgstr "Token by³ duplikatem wcze¶niejszego" #: lib/error.c:91 msgid "The token's validity period has expired" msgstr "Okres poprawno¶ci tokenu min±³" #: lib/error.c:93 msgid "A later token has already been processed" msgstr "Pó¼niejszy token by³ ju¿ przetworzony" #: lib/error.c:95 msgid "An expected per-message token was not received" msgstr "Nie otrzymano oczekiwanego tokenu dla komunikatu" #: lib/error.c:312 msgid "No error" msgstr "Brak b³êdu" #: lib/krb5/error.c:36 msgid "No @ in SERVICE-NAME name string" msgstr "Brak @ w ³añcuchu nazwy SERVICE-NAME" #: lib/krb5/error.c:38 msgid "STRING-UID-NAME contains nondigits" msgstr "STRING-UID-NAME zawiera znaki nie bêd±ce cyframi" #: lib/krb5/error.c:40 msgid "UID does not resolve to username" msgstr "UID nie rozwi±zuje siê na nazwê u¿ytkownika" #: lib/krb5/error.c:42 msgid "Validation error" msgstr "B³±d kontroli poprawno¶ci" #: lib/krb5/error.c:44 msgid "Couldn't allocate gss_buffer_t data" msgstr "Nie mo¿na przydzieliæ danych gss_buffer_t" #: lib/krb5/error.c:46 msgid "Message context invalid" msgstr "B³êdny kontekst komunikatu" #: lib/krb5/error.c:48 msgid "Buffer is the wrong size" msgstr "Z³y rozmiar bufora" #: lib/krb5/error.c:50 msgid "Credential usage type is unknown" msgstr "Nieznany sposób u¿ycia danych uwierzytelniaj±cych" #: lib/krb5/error.c:52 msgid "Unknown quality of protection specified" msgstr "Podano nieznan± jako¶ zabezpieczenia" #: lib/krb5/error.c:55 msgid "Principal in credential cache does not match desired name" msgstr "" "Zarz±dca w buforze danych uwierzytelniaj±cych nie pasuje do ¿±danej nazwy" #: lib/krb5/error.c:57 msgid "No principal in keytab matches desired name" msgstr "¯aden zarz±dca w keytab nie pasuje do ¿±danej nazwy" #: lib/krb5/error.c:59 msgid "Credential cache has no TGT" msgstr "Bufor danych uwierzytelniaj±cych nie zawiera TGT" #: lib/krb5/error.c:61 msgid "Authenticator has no subkey" msgstr "Authenticator nie ma pola subkey" #: lib/krb5/error.c:63 msgid "Context is already fully established" msgstr "Kontekst ju¿ zosta³ w pe³ni ustalony" #: lib/krb5/error.c:65 msgid "Unknown signature type in token" msgstr "Nieznany rodzaj sygnatury w tokenie" #: lib/krb5/error.c:67 msgid "Invalid field length in token" msgstr "B³êdna d³ugo¶æ pola w tokenie" #: lib/krb5/error.c:69 msgid "Attempt to use incomplete security context" msgstr "Próba u¿ycia niepe³nego kontekstu bezpieczeñstwa" #: lib/krb5/error.c:86 msgid "No krb5 error" msgstr "Brak b³êdu krb5" #: lib/krb5/error.c:127 msgid "Unknown krb5 error" msgstr "Nieznany b³±d krb5" #: src/gss.c:67 #, c-format msgid "Try `%s --help' for more information.\n" msgstr "`%s --help' poda wiêcej informacji.\n" #: src/gss.c:71 #, c-format msgid "Usage: %s OPTIONS...\n" msgstr "Sk³adnia: %s OPCJE...\n" #: src/gss.c:74 msgid "" "Command line interface to GSS, used to explain error codes.\n" "\n" msgstr "" "Interfejs linii poleceñ do GSS s³u¿±cy do wyja¶niania kodów b³êdów.\n" "\n" #: src/gss.c:78 msgid "" "Mandatory arguments to long options are mandatory for short options too.\n" msgstr "" "Argumenty obowi±zkowe dla opcji d³ugich s± obowi±zkowe tak¿e dla opcji " "krótkich.\n" #: src/gss.c:81 msgid "" " -h, --help Print help and exit.\n" " -V, --version Print version and exit.\n" " -l, --list-mechanisms\n" " List information about supported mechanisms\n" " in a human readable format.\n" " -m, --major=LONG Describe a `major status' error code value.\n" msgstr "" " -h, --help Wypisanie tego opisu i zakoñczenie\n" " -V, --version Wypisanie numeru wersji i zakoñczenie\n" " -l, --list-mechanisms\n" " Informacje o obs³ugiwanych mechanizmach\n" " w postaci czytelnej dla cz³owieka\n" " -m, --major=LONG Opis \"g³ównego\" kodu b³êdu w postaci tekstowej\n" #: src/gss.c:89 msgid "" " -a, --accept-sec-context[=MECH]\n" " Accept a security context as server.\n" " If MECH is not specified, no credentials\n" " will be acquired. Use \"*\" to use library\n" " default mechanism.\n" " -i, --init-sec-context=MECH\n" " Initialize a security context as client.\n" " MECH is the SASL name of mechanism, use -l\n" " to list supported mechanisms.\n" " -n, --server-name=SERVICE@HOSTNAME\n" " For -i and -a, set the name of the remote host.\n" " For example, \"imap@mail.example.com\".\n" msgstr "" #: src/gss.c:103 msgid " -q, --quiet Silent operation (default=off).\n" msgstr " -q, --quiet Dzia³anie bez komunikatów (domy¶lnie wy³±czone)\n" #: src/gss.c:122 #, c-format msgid "" "GSS-API major status code %ld (0x%lx).\n" "\n" msgstr "" "G³ówny kod stanu GSS-API %ld (0x%lx).\n" "\n" #: src/gss.c:124 #, c-format msgid "" " MSB LSB\n" " +-----------------+-----------------+---------------------------------+\n" " | Calling Error | Routine Error | Supplementary Info |\n" " | " msgstr "" " MSB LSB\n" " +-----------------+-----------------+---------------------------------+\n" " | B³±d wywo³ania | B³±d procedury | Dodatkowe informacje |\n" " | " #: src/gss.c:138 #, c-format msgid "" "|\n" " +-----------------+-----------------+---------------------------------+\n" "Bit 31 24 23 16 15 0\n" "\n" msgstr "" "|\n" " +-----------------+-----------------+---------------------------------+\n" "Bit 31 24 23 16 15 0\n" "\n" #: src/gss.c:148 #, c-format msgid "Masked routine error %ld (0x%lx) shifted into %ld (0x%lx):\n" msgstr "Maskowany b³±d procedury %ld (0x%lx) przesuniêty do %ld (0x%lx):\n" #: src/gss.c:164 src/gss.c:198 src/gss.c:234 #, c-format msgid "displaying status code failed (%d)" msgstr "wy¶wietlenie kodu stanu nie powiod³o siê (%d)" #: src/gss.c:184 #, c-format msgid "Masked calling error %ld (0x%lx) shifted into %ld (0x%lx):\n" msgstr "Maskowany b³±d wywo³ania %ld (0x%lx) przesuniêty do %ld (0x%lx):\n" #: src/gss.c:217 #, c-format msgid "Masked supplementary info %ld (0x%lx) shifted into %ld (0x%lx):\n" msgstr "" "Maskowane dodatkowe informacje %ld (0x%lx) przesuniête do %ld (0x%lx):\n" #: src/gss.c:251 #, c-format msgid "No error\n" msgstr "Brak b³êdu\n" #: src/gss.c:269 #, c-format msgid "indicating mechanisms failed (%d)" msgstr "okre¶lanie mechanizmów nie powiod³o siê (%d)" #: src/gss.c:285 #, c-format msgid "inquiring information about mechanism failed (%d)" msgstr "pobieranie informacji o mechanizmach nie powiod³o siê (%d)" #: src/gss.c:342 src/gss.c:483 #, fuzzy, c-format msgid "inquiring mechanism for SASL name (%d/%d)" msgstr "okre¶lanie mechanizmów nie powiod³o siê (%d)" #: src/gss.c:355 src/gss.c:498 #, c-format msgid "could not import server name \"%s\" (%d/%d)" msgstr "" #: src/gss.c:374 #, fuzzy, c-format msgid "initializing security context failed (%d/%d)" msgstr "wy¶wietlenie kodu stanu nie powiod³o siê (%d)" #: src/gss.c:378 src/gss.c:564 #, c-format msgid "base64 input too long" msgstr "" #: src/gss.c:380 src/gss.c:415 src/gss.c:545 src/gss.c:566 #, c-format msgid "malloc" msgstr "" #: src/gss.c:407 src/gss.c:537 #, c-format msgid "getline" msgstr "" #: src/gss.c:409 src/gss.c:539 #, c-format msgid "end of file" msgstr "" #: src/gss.c:413 src/gss.c:543 #, c-format msgid "base64 fail" msgstr "" #: src/gss.c:520 #, c-format msgid "could not acquire server credentials (%d/%d)" msgstr "" #: src/gss.c:560 #, fuzzy, c-format msgid "accepting security context failed (%d/%d)" msgstr "wy¶wietlenie kodu stanu nie powiod³o siê (%d)" gss-1.0.3/po/fi.po0000644000000000000000000003366312415507644010575 00000000000000# Finnish messages for gss. # Copyright © 2009 Free Software Foundation, Inc. # Copyright © 2009 Simon Josefsson # This file is distributed under the same license as the gss package. # Jorma Karvonen , 2009, 2010. # msgid "" msgstr "" "Project-Id-Version: gss 1.0.1\n" "Report-Msgid-Bugs-To: bug-gss@gnu.org\n" "POT-Creation-Date: 2014-10-09 15:37+0200\n" "PO-Revision-Date: 2010-11-16 17:15+0200\n" "Last-Translator: Jorma Karvonen \n" "Language-Team: Finnish \n" "Language: fi\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: lib/meta.c:37 msgid "Kerberos V5 GSS-API mechanism" msgstr "Kerberos V5 GSS-API -mekanismi" #: lib/error.c:37 msgid "A required input parameter could not be read" msgstr "Vaadittua syöteparametriä ei voitu lukea" #: lib/error.c:39 msgid "A required output parameter could not be written" msgstr "Vaadittua tulosteparametriä ei voitu kirjoittaa" #: lib/error.c:41 msgid "A parameter was malformed" msgstr "Parametri on väärän muotoinen" #: lib/error.c:46 msgid "An unsupported mechanism was requested" msgstr "Kutsuttiin tukematonta mekanismia" #: lib/error.c:48 msgid "An invalid name was supplied" msgstr "Toimitettiin virheellinen nimi" #: lib/error.c:50 msgid "A supplied name was of an unsupported type" msgstr "Toimitettu nimi oli tyyppiä, jota ei tueta" #: lib/error.c:52 msgid "Incorrect channel bindings were supplied" msgstr "Toimitettiin virheellisiä kanavasidoksia" #: lib/error.c:54 msgid "An invalid status code was supplied" msgstr "Toimitettiin virheellinen tilakoodi" #: lib/error.c:56 msgid "A token had an invalid MIC" msgstr "Merkkijonolla oli virheellinen MIC" #: lib/error.c:58 msgid "" "No credentials were supplied, or the credentials were unavailable or " "inaccessible" msgstr "" "Valtuustietoja ei toimitettu, tai valtuustiedot eivät olleet käytettävissä " "tai saatavilla" #: lib/error.c:61 msgid "No context has been established" msgstr "Konteksia ei ole perustettu" #: lib/error.c:63 msgid "A token was invalid" msgstr "Merkkijono oli virheellinen" #: lib/error.c:65 msgid "A credential was invalid" msgstr "Valtuustieto oli virheellinen" #: lib/error.c:67 msgid "The referenced credentials have expired" msgstr "Viitevaltuustiedot ovat vanhentuneet" #: lib/error.c:69 msgid "The context has expired" msgstr "Konteksi on vanhentunut" #: lib/error.c:71 msgid "Unspecified error in underlying mechanism" msgstr "Määrittelemätön virhe alla olevassa mekanismissa" #: lib/error.c:73 msgid "The quality-of-protection requested could not be provided" msgstr "Ei voitu tarjota turvatasopyyntöä" #: lib/error.c:75 msgid "The operation is forbidden by local security policy" msgstr "Paikallinen turvakäytäntö on kieltänyt toiminnon" #: lib/error.c:77 msgid "The operation or option is unavailable" msgstr "Toiminto tai valitsin ei ole saatavilla" #: lib/error.c:79 msgid "The requested credential element already exists" msgstr "Pyydetty valtuustietoelementti on jo olemassa" #: lib/error.c:81 msgid "The provided name was not a mechanism name" msgstr "Toimitettu nimi ei ollut mekanisminimi" #: lib/error.c:86 msgid "" "The gss_init_sec_context() or gss_accept_sec_context() function must be " "called again to complete its function" msgstr "" "Funktio gss_init_sec_context() tai funktio gss_accept_sec_context() on " "kutsuttava uudelleen funktion saamiseksi valmiiksi" #: lib/error.c:89 msgid "The token was a duplicate of an earlier token" msgstr "Merkkijono oli aikaisemman merkkijonon kaksoiskappale" #: lib/error.c:91 msgid "The token's validity period has expired" msgstr "Merkkijonon kelpoisuuskausi on vanhentunut" #: lib/error.c:93 msgid "A later token has already been processed" msgstr "Jälkimmäinen merkkijono on jo prosessoitu" #: lib/error.c:95 msgid "An expected per-message token was not received" msgstr "Odotettua merkkijonokohtaista viestiä ei ole vastaanotettu" #: lib/error.c:312 msgid "No error" msgstr "Ei virhettä" #: lib/krb5/error.c:36 msgid "No @ in SERVICE-NAME name string" msgstr "Ei @-merkkiä PALVELU-NIMI-nimimerkkijonossa" #: lib/krb5/error.c:38 msgid "STRING-UID-NAME contains nondigits" msgstr "MERKKIJONO-UID-NIMI-merkkijono sisältää muutakin kuin numeroita" #: lib/krb5/error.c:40 msgid "UID does not resolve to username" msgstr "UID ei ratkaise käyttäjänimeä" #: lib/krb5/error.c:42 msgid "Validation error" msgstr "Kelpuutusvirhe" #: lib/krb5/error.c:44 msgid "Couldn't allocate gss_buffer_t data" msgstr "Ei voitu varata gss_buffer_t-dataa" #: lib/krb5/error.c:46 msgid "Message context invalid" msgstr "Viestikonteksi on virheellinen" #: lib/krb5/error.c:48 msgid "Buffer is the wrong size" msgstr "Puskuri on väärän kokoinen" #: lib/krb5/error.c:50 msgid "Credential usage type is unknown" msgstr "Valtuustiedon käyttötyyppi on tuntematon" #: lib/krb5/error.c:52 msgid "Unknown quality of protection specified" msgstr "Tuntematon suojelutaso määritelty" # security principal on entiteetti, joka on todennettu #: lib/krb5/error.c:55 msgid "Principal in credential cache does not match desired name" msgstr "" "Todennettu entiteetti valtuustietovälimuistissa ei täsmännyt halutun nimen " "kanssa" #: lib/krb5/error.c:57 msgid "No principal in keytab matches desired name" msgstr "" "Yksikään todennettu entiteetti keytab-tiedostossa ei täsmännyt halutun nimen " "kanssa" # TGT = Ticket-Granting Ticket on sanoma B, jonka todennuspalvelin lähettää asiakkaalle client authentication -menettelyssä. #: lib/krb5/error.c:59 msgid "Credential cache has no TGT" msgstr "" "Valtuustietovälimuistissa ei ole Ticket-Granting Ticket-sanomaa " "todennuspalvelimelta" #: lib/krb5/error.c:61 msgid "Authenticator has no subkey" msgstr "Todentajalla ei ole aliavainta" #: lib/krb5/error.c:63 msgid "Context is already fully established" msgstr "Konteksi on jo täysin perustettu" #: lib/krb5/error.c:65 msgid "Unknown signature type in token" msgstr "Tuntematon allekirjoitustyyppi merkkijonossa" #: lib/krb5/error.c:67 msgid "Invalid field length in token" msgstr "Virheellinen kenttäpituus merkkijonossa" #: lib/krb5/error.c:69 msgid "Attempt to use incomplete security context" msgstr "Yritys käyttää vaillinaista turvakonteksia" #: lib/krb5/error.c:86 msgid "No krb5 error" msgstr "Ei krb5-virhettä" #: lib/krb5/error.c:127 msgid "Unknown krb5 error" msgstr "Tuntematon krb5-virhe" #: src/gss.c:67 #, c-format msgid "Try `%s --help' for more information.\n" msgstr "Lisätietoja â€%s --helpâ€-komennolla.\n" #: src/gss.c:71 #, c-format msgid "Usage: %s OPTIONS...\n" msgstr "Käyttö: %s VALITSIMET...\n" #: src/gss.c:74 msgid "" "Command line interface to GSS, used to explain error codes.\n" "\n" msgstr "" "Komentorivirajapinta GSS:ään, käytetty selittämään virhekoodeja.\n" "\n" #: src/gss.c:78 msgid "" "Mandatory arguments to long options are mandatory for short options too.\n" msgstr "" "Pakolliset argumentit pitkille valitsimille ovat pakollisia myös lyhyille " "valitsimille.\n" #: src/gss.c:81 msgid "" " -h, --help Print help and exit.\n" " -V, --version Print version and exit.\n" " -l, --list-mechanisms\n" " List information about supported mechanisms\n" " in a human readable format.\n" " -m, --major=LONG Describe a `major status' error code value.\n" msgstr "" " -h, --help Tulosta opaste ja poistu.\n" " -V, --version Tulosta versio ja poistu.\n" " -l, --list-mechanisms\n" " Luettelotiedot tuetuista mekanismeista\n" " ihmisluettavassa muodossa.\n" " -m, --major=LONG Kuvaa â€major statusâ€-virhekoodiarvo.\n" #: src/gss.c:89 msgid "" " -a, --accept-sec-context[=MECH]\n" " Accept a security context as server.\n" " If MECH is not specified, no credentials\n" " will be acquired. Use \"*\" to use library\n" " default mechanism.\n" " -i, --init-sec-context=MECH\n" " Initialize a security context as client.\n" " MECH is the SASL name of mechanism, use -l\n" " to list supported mechanisms.\n" " -n, --server-name=SERVICE@HOSTNAME\n" " For -i and -a, set the name of the remote host.\n" " For example, \"imap@mail.example.com\".\n" msgstr "" #: src/gss.c:103 msgid " -q, --quiet Silent operation (default=off).\n" msgstr " -q, --quiet Hiljainen toiminta (oletus=pois käytöstä).\n" #: src/gss.c:122 #, c-format msgid "" "GSS-API major status code %ld (0x%lx).\n" "\n" msgstr "" "GSS-API major-tilakoodi %ld (0x%lx).\n" "\n" #: src/gss.c:124 #, c-format msgid "" " MSB LSB\n" " +-----------------+-----------------+---------------------------------+\n" " | Calling Error | Routine Error | Supplementary Info |\n" " | " msgstr "" " MSB " "LSB\n" " +-----------------+-----------------+---------------------------------" "+\n" " | Kutsuvirhe | Rutiinivirhe | Lisätietoja " "|\n" " | " #: src/gss.c:138 #, c-format msgid "" "|\n" " +-----------------+-----------------+---------------------------------+\n" "Bit 31 24 23 16 15 0\n" "\n" msgstr "" "|\n" " +-----------------+-----------------+---------------------------------" "+\n" "Bitti 31 24 23 16 15 0\n" "\n" #: src/gss.c:148 #, c-format msgid "Masked routine error %ld (0x%lx) shifted into %ld (0x%lx):\n" msgstr "" "Peitetty rutiinivirhe %ld (0x%lx) on siirretty kohteeseen %ld (0x%lx):\n" #: src/gss.c:164 src/gss.c:198 src/gss.c:234 #, c-format msgid "displaying status code failed (%d)" msgstr "tilakoodin näyttäminen epäonnistui (%d)" #: src/gss.c:184 #, c-format msgid "Masked calling error %ld (0x%lx) shifted into %ld (0x%lx):\n" msgstr "Peitetty kutsuvirhe %ld (0x%lx) on siirretty kohteeseen %ld (0x%lx):\n" #: src/gss.c:217 #, c-format msgid "Masked supplementary info %ld (0x%lx) shifted into %ld (0x%lx):\n" msgstr "Peitetty lisätieto %ld (0x%lx) on siirretty kohteeseen %ld (0x%lx):\n" #: src/gss.c:251 #, c-format msgid "No error\n" msgstr "Ei virhettä\n" #: src/gss.c:269 #, c-format msgid "indicating mechanisms failed (%d)" msgstr "osoitusmekanismi epäonnistui (%d)" #: src/gss.c:285 #, c-format msgid "inquiring information about mechanism failed (%d)" msgstr "tietojen kysyminen mekanismista epäonnistui (%d)" #: src/gss.c:342 src/gss.c:483 #, fuzzy, c-format msgid "inquiring mechanism for SASL name (%d/%d)" msgstr "osoitusmekanismi epäonnistui (%d)" #: src/gss.c:355 src/gss.c:498 #, c-format msgid "could not import server name \"%s\" (%d/%d)" msgstr "" #: src/gss.c:374 #, fuzzy, c-format msgid "initializing security context failed (%d/%d)" msgstr "tilakoodin näyttäminen epäonnistui (%d)" #: src/gss.c:378 src/gss.c:564 #, c-format msgid "base64 input too long" msgstr "" #: src/gss.c:380 src/gss.c:415 src/gss.c:545 src/gss.c:566 #, c-format msgid "malloc" msgstr "" #: src/gss.c:407 src/gss.c:537 #, c-format msgid "getline" msgstr "" #: src/gss.c:409 src/gss.c:539 #, c-format msgid "end of file" msgstr "" #: src/gss.c:413 src/gss.c:543 #, c-format msgid "base64 fail" msgstr "" #: src/gss.c:520 #, c-format msgid "could not acquire server credentials (%d/%d)" msgstr "" #: src/gss.c:560 #, fuzzy, c-format msgid "accepting security context failed (%d/%d)" msgstr "tilakoodin näyttäminen epäonnistui (%d)" #~ msgid "" #~ " -h, --help Print help and exit\n" #~ " -V, --version Print version and exit\n" #~ " -m, --major=LONG Describe a `major status' error code vaue in plain " #~ "text.\n" #~ " -q, --quiet Silent operation (default=off)\n" #~ msgstr "" #~ " -h, --help Tulosta opaste ja poistu\n" #~ " -V, --version Tulosta versio ja poistu\n" #~ " -m, --major=LONG Kuvaile `päätila'-virhekoodiarvo pelkkänä tekstinä.\n" #~ " -q, --quiet Hiljainen toiminta (oletus=ei ole käytössä)\n" #~ msgid "%s: missing parameter\n" #~ msgstr "%s: parametri puuttuu\n" #~ msgid "Usage: " #~ msgstr "Käyttö: " #~ msgid " -h, --help Print help and exit" #~ msgstr " -h, --help Tulosta opaste ja poistu" #~ msgid " -V, --version Print version and exit" #~ msgstr " -V, --version Tulosta versio ja poistu" #~ msgid "" #~ " -m, --major=LONG Describe a `major status' error code vaue in plain " #~ "text." #~ msgstr "" #~ " -m, --major=LONG Kuvaile â€major statusâ€-virhekoodiarvo selväkielisenä " #~ "tekstinä." #~ msgid "" #~ " -m, --major=LONG Describe a `major status' error code value in plain " #~ "text." #~ msgstr "" #~ " -m, --major=LONG Kuvaile â€major statusâ€-virhekoodiarvo selväkielisenä " #~ "tekstinä." #~ msgid "%s: cannot open file for writing: %s\n" #~ msgstr "%s: ei voida avata tiedosto kirjoittamista varten: %s\n" #~ msgid "%s: `--%s' (`-%c') option given more than once%s\n" #~ msgstr "%s: â€--%s†(â€-%câ€) valitsin annettu useammin kuin kerran%s\n" #~ msgid "%s: `--%s' option given more than once%s\n" #~ msgstr "%s: â€--%s†valitsin annettu useammin kuin kerran%s\n" #~ msgid "%s: invalid numeric value: %s\n" #~ msgstr "%s: virheellinen numeroarvo: %s\n" #~ msgid "%s: option unknown: %c%s\n" #~ msgstr "%s: valitsin tuntematon: %c%s\n" #~ msgid "" #~ " -h, --help Print help and exit\n" #~ " -V, --version Print version and exit\n" #~ " -m, --major=LONG Describe a `major status' error code value in plain " #~ "text.\n" #~ " -q, --quiet Silent operation (default=off)\n" #~ msgstr "" #~ " -h, --help Tulosta opaste ja poistu\n" #~ " -V, --version Tulosta versio ja poistu\n" #~ " -m, --major=LONG Kuvaile â€päätilaâ€-virhekoodiarvo pelkkänä tekstinä.\n" #~ " -q, --quiet Hiljainen toiminta (oletus=pois käytöstä)\n" gss-1.0.3/po/fr.gmo0000644000000000000000000002007612415507644010744 00000000000000Þ•@Y€æh4†»(Ôý,0D*u ».Ïþ# &? *f ‘ ­ =Æ $ #) M i (Š (³ Ü ú I ;b ;ž @Ú  3 T Qt Æ Ï Ù +ç 9 "M p mˆ 3ö &**Q9|'¶/Þ-'<&d ‹¬'¿ç)1G"X!{1—Ï‘gáù8Û7L$iŽ1«5Ý(<W-o$º&ß;&BiH‰(Ò6û&2(Y)‚-¬(ÚO!<q<®Dë0*Oz]˜ öL%Sr)Æðs=y,·+ä5$F)k.•(Ä-í2N/c'“2»î%)@;j—¦%845;+. = 7/ , "!)0:@$19 ?*32<#-6>& (' MSB LSB +-----------------+-----------------+---------------------------------+ | Calling Error | Routine Error | Supplementary Info | | -h, --help Print help and exit. -V, --version Print version and exit. -l, --list-mechanisms List information about supported mechanisms in a human readable format. -m, --major=LONG Describe a `major status' error code value. -q, --quiet Silent operation (default=off). A credential was invalidA later token has already been processedA parameter was malformedA required input parameter could not be readA required output parameter could not be writtenA supplied name was of an unsupported typeA token had an invalid MICA token was invalidAn expected per-message token was not receivedAn invalid name was suppliedAn invalid status code was suppliedAn unsupported mechanism was requestedAttempt to use incomplete security contextAuthenticator has no subkeyBuffer is the wrong sizeCommand line interface to GSS, used to explain error codes. Context is already fully establishedCouldn't allocate gss_buffer_t dataCredential cache has no TGTCredential usage type is unknownGSS-API major status code %ld (0x%lx). Incorrect channel bindings were suppliedInvalid field length in tokenKerberos V5 GSS-API mechanismMandatory arguments to long options are mandatory for short options too. Masked calling error %ld (0x%lx) shifted into %ld (0x%lx): Masked routine error %ld (0x%lx) shifted into %ld (0x%lx): Masked supplementary info %ld (0x%lx) shifted into %ld (0x%lx): Message context invalidNo @ in SERVICE-NAME name stringNo context has been establishedNo credentials were supplied, or the credentials were unavailable or inaccessibleNo errorNo error No krb5 errorNo principal in keytab matches desired namePrincipal in credential cache does not match desired nameSTRING-UID-NAME contains nondigitsThe context has expiredThe gss_init_sec_context() or gss_accept_sec_context() function must be called again to complete its functionThe operation is forbidden by local security policyThe operation or option is unavailableThe provided name was not a mechanism nameThe quality-of-protection requested could not be providedThe referenced credentials have expiredThe requested credential element already existsThe token was a duplicate of an earlier tokenThe token's validity period has expiredTry `%s --help' for more information. UID does not resolve to usernameUnknown krb5 errorUnknown quality of protection specifiedUnknown signature type in tokenUnspecified error in underlying mechanismUsage: %s OPTIONS... Validation errordisplaying status code failed (%d)indicating mechanisms failed (%d)inquiring information about mechanism failed (%d)| +-----------------+-----------------+---------------------------------+ Bit 31 24 23 16 15 0 Project-Id-Version: GNU gss 1.0.1 Report-Msgid-Bugs-To: bug-gss@gnu.org POT-Creation-Date: 2014-10-09 15:37+0200 PO-Revision-Date: 2010-12-21 10:59+0100 Last-Translator: Nicolas Provost Language-Team: French Language: fr MIME-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=(n > 1); MSB LSB +-----------------+-----------------+---------------------------------+ | Erreur appel |Routine erreur| Infos supplémentaires | | -h, --help Affiche l'aide et quitte. -V, --version Affiche la version et quitte. -l, --list-mechanisms Liste des infos sur les mécanismes disponibles dans un format humainement compréhensible. -m, --major=LONG Décrit un code d'erreur d'état principal. -q, --quiet Opère en silence (non par défaut). Une référence était invalideUn jeton antérieur a déjà été traitéUn paramètre était mal forméUn paramètre requis à l'entrée n'a pas pu être luUn paramètre requis à la sortie n'a pas pu être écritUn nom fourni était de type non supportéUn jeton a un MIC invalideUn jeton était invalideUn jeton attendu par message n'a pas été reçuUn nom invalide a été fourniUn code d'état invalide a été fourniUn mécanisme non supporté était requisTentative d'utilisation d'un contexte incomplet de sécuritéL'authentificateur n'a pas de sous-cléLe tampon est de taille erronéeInterface en ligne de commande GSS, pour détailler les codes d'erreur. Le contexte est déjà complètement établiImpossible d'allouer le tampon de données gss_buffer_tLa cache des références n'a pas de TGTL'usage du type de référence est inconnuGSS-API code majeur d'état %ld (0x%lx). Une liaison incorrecte de canal a été fournieLongueur invalide du champ dans le jetonMécanisme Kerberos V5 GSS-APILes arguments obligatoires des options longues le sont aussi pour les courtes. Erreur d'appel masquée %ld (0x%lx) décalé dans %ld (0x%lx): Erreur routine masquée %ld (0x%lx) décalé dans %ld (0x%lx): Infos supplémentaires masquées %ld (0x%lx) décalé dans %ld (0x%lx): Message de contexte non valideAucun @ dans la chaîne du nom SERVICE-NAMEAucun contexte n'a été établiAucune référence n'a été fournie ou les références n'étaient pas disponibles ou inaccessiblesAucune erreurAucune erreur Pas d'erreur KRB5Aucun nom principal dans la table des clés ne concorde avec le nom recherchéLe nom principal dans le cache des références ne concorde pas avec le nom recherchéSTRING-UID-NAME ne contient aucun chiffreLe contexte a expiréLa fonction gss_init_sec_context() ou gss_accept_sec_context() doit être appellée à nous pour compléter la fonctionL'opération est interdite par la politique locale de sécuritéL'opération ou l'option n'est pas disponibleLe nom fourni n'est pas un nom de mécanismeLa qualité de protection requise ne peut être fournieLes références fournies ont expiréesL'élément de référence requis existe déjàLe jeton est le duplicata d'un jeton précédentLa période de validité du jeton a expiréEssayer `%s --help' pour plus d'information. UID ne peut permettre d'identifier le nom d'usagerErreur KRB5 inconnueLa qualité de protection spécifiée est inconnueType de signature inconnu dans le jetonErreur non spécifiée dans le mécanisme sous-jacentUsage : %s OPTIONS... Erreur de validationéchec d'affichage du code d'état (%d)échec de récupération des mécanismes (%d)impossible d'obtenir des informations sur le mécanisme (%d)| +-----------------+-----------------+---------------------------------+ Bit 31 24 23 16 15 0 gss-1.0.3/po/stamp-po0000644000000000000000000000001212415507644011300 00000000000000timestamp gss-1.0.3/po/en@quot.po0000644000000000000000000003154012415507644011602 00000000000000# English translations for gss package. # Copyright (C) 2014 Simon Josefsson # This file is distributed under the same license as the gss package. # Automatically generated, 2014. # # All this catalog "translates" are quotation characters. # The msgids must be ASCII and therefore cannot contain real quotation # characters, only substitutes like grave accent (0x60), apostrophe (0x27) # and double quote (0x22). These substitutes look strange; see # http://www.cl.cam.ac.uk/~mgk25/ucs/quotes.html # # This catalog translates grave accent (0x60) and apostrophe (0x27) to # left single quotation mark (U+2018) and right single quotation mark (U+2019). # It also translates pairs of apostrophe (0x27) to # left single quotation mark (U+2018) and right single quotation mark (U+2019) # and pairs of quotation mark (0x22) to # left double quotation mark (U+201C) and right double quotation mark (U+201D). # # When output to an UTF-8 terminal, the quotation characters appear perfectly. # When output to an ISO-8859-1 terminal, the single quotation marks are # transliterated to apostrophes (by iconv in glibc 2.2 or newer) or to # grave/acute accent (by libiconv), and the double quotation marks are # transliterated to 0x22. # When output to an ASCII terminal, the single quotation marks are # transliterated to apostrophes, and the double quotation marks are # transliterated to 0x22. # msgid "" msgstr "" "Project-Id-Version: gss 1.0.3\n" "Report-Msgid-Bugs-To: bug-gss@gnu.org\n" "POT-Creation-Date: 2014-10-09 15:37+0200\n" "PO-Revision-Date: 2014-10-09 15:37+0200\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" "Language: en@quot\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: lib/meta.c:37 msgid "Kerberos V5 GSS-API mechanism" msgstr "Kerberos V5 GSS-API mechanism" #: lib/error.c:37 msgid "A required input parameter could not be read" msgstr "A required input parameter could not be read" #: lib/error.c:39 msgid "A required output parameter could not be written" msgstr "A required output parameter could not be written" #: lib/error.c:41 msgid "A parameter was malformed" msgstr "A parameter was malformed" #: lib/error.c:46 msgid "An unsupported mechanism was requested" msgstr "An unsupported mechanism was requested" #: lib/error.c:48 msgid "An invalid name was supplied" msgstr "An invalid name was supplied" #: lib/error.c:50 msgid "A supplied name was of an unsupported type" msgstr "A supplied name was of an unsupported type" #: lib/error.c:52 msgid "Incorrect channel bindings were supplied" msgstr "Incorrect channel bindings were supplied" #: lib/error.c:54 msgid "An invalid status code was supplied" msgstr "An invalid status code was supplied" #: lib/error.c:56 msgid "A token had an invalid MIC" msgstr "A token had an invalid MIC" #: lib/error.c:58 msgid "" "No credentials were supplied, or the credentials were unavailable or " "inaccessible" msgstr "" "No credentials were supplied, or the credentials were unavailable or " "inaccessible" #: lib/error.c:61 msgid "No context has been established" msgstr "No context has been established" #: lib/error.c:63 msgid "A token was invalid" msgstr "A token was invalid" #: lib/error.c:65 msgid "A credential was invalid" msgstr "A credential was invalid" #: lib/error.c:67 msgid "The referenced credentials have expired" msgstr "The referenced credentials have expired" #: lib/error.c:69 msgid "The context has expired" msgstr "The context has expired" #: lib/error.c:71 msgid "Unspecified error in underlying mechanism" msgstr "Unspecified error in underlying mechanism" #: lib/error.c:73 msgid "The quality-of-protection requested could not be provided" msgstr "The quality-of-protection requested could not be provided" #: lib/error.c:75 msgid "The operation is forbidden by local security policy" msgstr "The operation is forbidden by local security policy" #: lib/error.c:77 msgid "The operation or option is unavailable" msgstr "The operation or option is unavailable" #: lib/error.c:79 msgid "The requested credential element already exists" msgstr "The requested credential element already exists" #: lib/error.c:81 msgid "The provided name was not a mechanism name" msgstr "The provided name was not a mechanism name" #: lib/error.c:86 msgid "" "The gss_init_sec_context() or gss_accept_sec_context() function must be " "called again to complete its function" msgstr "" "The gss_init_sec_context() or gss_accept_sec_context() function must be " "called again to complete its function" #: lib/error.c:89 msgid "The token was a duplicate of an earlier token" msgstr "The token was a duplicate of an earlier token" #: lib/error.c:91 msgid "The token's validity period has expired" msgstr "The token's validity period has expired" #: lib/error.c:93 msgid "A later token has already been processed" msgstr "A later token has already been processed" #: lib/error.c:95 msgid "An expected per-message token was not received" msgstr "An expected per-message token was not received" #: lib/error.c:312 msgid "No error" msgstr "No error" #: lib/krb5/error.c:36 msgid "No @ in SERVICE-NAME name string" msgstr "No @ in SERVICE-NAME name string" #: lib/krb5/error.c:38 msgid "STRING-UID-NAME contains nondigits" msgstr "STRING-UID-NAME contains nondigits" #: lib/krb5/error.c:40 msgid "UID does not resolve to username" msgstr "UID does not resolve to username" #: lib/krb5/error.c:42 msgid "Validation error" msgstr "Validation error" #: lib/krb5/error.c:44 msgid "Couldn't allocate gss_buffer_t data" msgstr "Couldn't allocate gss_buffer_t data" #: lib/krb5/error.c:46 msgid "Message context invalid" msgstr "Message context invalid" #: lib/krb5/error.c:48 msgid "Buffer is the wrong size" msgstr "Buffer is the wrong size" #: lib/krb5/error.c:50 msgid "Credential usage type is unknown" msgstr "Credential usage type is unknown" #: lib/krb5/error.c:52 msgid "Unknown quality of protection specified" msgstr "Unknown quality of protection specified" #: lib/krb5/error.c:55 msgid "Principal in credential cache does not match desired name" msgstr "Principal in credential cache does not match desired name" #: lib/krb5/error.c:57 msgid "No principal in keytab matches desired name" msgstr "No principal in keytab matches desired name" #: lib/krb5/error.c:59 msgid "Credential cache has no TGT" msgstr "Credential cache has no TGT" #: lib/krb5/error.c:61 msgid "Authenticator has no subkey" msgstr "Authenticator has no subkey" #: lib/krb5/error.c:63 msgid "Context is already fully established" msgstr "Context is already fully established" #: lib/krb5/error.c:65 msgid "Unknown signature type in token" msgstr "Unknown signature type in token" #: lib/krb5/error.c:67 msgid "Invalid field length in token" msgstr "Invalid field length in token" #: lib/krb5/error.c:69 msgid "Attempt to use incomplete security context" msgstr "Attempt to use incomplete security context" #: lib/krb5/error.c:86 msgid "No krb5 error" msgstr "No krb5 error" #: lib/krb5/error.c:127 msgid "Unknown krb5 error" msgstr "Unknown krb5 error" #: src/gss.c:67 #, c-format msgid "Try `%s --help' for more information.\n" msgstr "Try ‘%s --help’ for more information.\n" #: src/gss.c:71 #, c-format msgid "Usage: %s OPTIONS...\n" msgstr "Usage: %s OPTIONS...\n" #: src/gss.c:74 msgid "" "Command line interface to GSS, used to explain error codes.\n" "\n" msgstr "" "Command line interface to GSS, used to explain error codes.\n" "\n" #: src/gss.c:78 msgid "" "Mandatory arguments to long options are mandatory for short options too.\n" msgstr "" "Mandatory arguments to long options are mandatory for short options too.\n" #: src/gss.c:81 msgid "" " -h, --help Print help and exit.\n" " -V, --version Print version and exit.\n" " -l, --list-mechanisms\n" " List information about supported mechanisms\n" " in a human readable format.\n" " -m, --major=LONG Describe a `major status' error code value.\n" msgstr "" " -h, --help Print help and exit.\n" " -V, --version Print version and exit.\n" " -l, --list-mechanisms\n" " List information about supported mechanisms\n" " in a human readable format.\n" " -m, --major=LONG Describe a ‘major status’ error code value.\n" #: src/gss.c:89 msgid "" " -a, --accept-sec-context[=MECH]\n" " Accept a security context as server.\n" " If MECH is not specified, no credentials\n" " will be acquired. Use \"*\" to use library\n" " default mechanism.\n" " -i, --init-sec-context=MECH\n" " Initialize a security context as client.\n" " MECH is the SASL name of mechanism, use -l\n" " to list supported mechanisms.\n" " -n, --server-name=SERVICE@HOSTNAME\n" " For -i and -a, set the name of the remote host.\n" " For example, \"imap@mail.example.com\".\n" msgstr "" " -a, --accept-sec-context[=MECH]\n" " Accept a security context as server.\n" " If MECH is not specified, no credentials\n" " will be acquired. Use “*†to use library\n" " default mechanism.\n" " -i, --init-sec-context=MECH\n" " Initialize a security context as client.\n" " MECH is the SASL name of mechanism, use -l\n" " to list supported mechanisms.\n" " -n, --server-name=SERVICE@HOSTNAME\n" " For -i and -a, set the name of the remote host.\n" " For example, “imap@mail.example.comâ€.\n" #: src/gss.c:103 msgid " -q, --quiet Silent operation (default=off).\n" msgstr " -q, --quiet Silent operation (default=off).\n" #: src/gss.c:122 #, c-format msgid "" "GSS-API major status code %ld (0x%lx).\n" "\n" msgstr "" "GSS-API major status code %ld (0x%lx).\n" "\n" #: src/gss.c:124 #, c-format msgid "" " MSB LSB\n" " +-----------------+-----------------+---------------------------------+\n" " | Calling Error | Routine Error | Supplementary Info |\n" " | " msgstr "" " MSB LSB\n" " +-----------------+-----------------+---------------------------------+\n" " | Calling Error | Routine Error | Supplementary Info |\n" " | " #: src/gss.c:138 #, c-format msgid "" "|\n" " +-----------------+-----------------+---------------------------------+\n" "Bit 31 24 23 16 15 0\n" "\n" msgstr "" "|\n" " +-----------------+-----------------+---------------------------------+\n" "Bit 31 24 23 16 15 0\n" "\n" #: src/gss.c:148 #, c-format msgid "Masked routine error %ld (0x%lx) shifted into %ld (0x%lx):\n" msgstr "Masked routine error %ld (0x%lx) shifted into %ld (0x%lx):\n" #: src/gss.c:164 src/gss.c:198 src/gss.c:234 #, c-format msgid "displaying status code failed (%d)" msgstr "displaying status code failed (%d)" #: src/gss.c:184 #, c-format msgid "Masked calling error %ld (0x%lx) shifted into %ld (0x%lx):\n" msgstr "Masked calling error %ld (0x%lx) shifted into %ld (0x%lx):\n" #: src/gss.c:217 #, c-format msgid "Masked supplementary info %ld (0x%lx) shifted into %ld (0x%lx):\n" msgstr "Masked supplementary info %ld (0x%lx) shifted into %ld (0x%lx):\n" #: src/gss.c:251 #, c-format msgid "No error\n" msgstr "No error\n" #: src/gss.c:269 #, c-format msgid "indicating mechanisms failed (%d)" msgstr "indicating mechanisms failed (%d)" #: src/gss.c:285 #, c-format msgid "inquiring information about mechanism failed (%d)" msgstr "inquiring information about mechanism failed (%d)" #: src/gss.c:342 src/gss.c:483 #, c-format msgid "inquiring mechanism for SASL name (%d/%d)" msgstr "inquiring mechanism for SASL name (%d/%d)" #: src/gss.c:355 src/gss.c:498 #, c-format msgid "could not import server name \"%s\" (%d/%d)" msgstr "could not import server name “%s†(%d/%d)" #: src/gss.c:374 #, c-format msgid "initializing security context failed (%d/%d)" msgstr "initializing security context failed (%d/%d)" #: src/gss.c:378 src/gss.c:564 #, c-format msgid "base64 input too long" msgstr "base64 input too long" #: src/gss.c:380 src/gss.c:415 src/gss.c:545 src/gss.c:566 #, c-format msgid "malloc" msgstr "malloc" #: src/gss.c:407 src/gss.c:537 #, c-format msgid "getline" msgstr "getline" #: src/gss.c:409 src/gss.c:539 #, c-format msgid "end of file" msgstr "end of file" #: src/gss.c:413 src/gss.c:543 #, c-format msgid "base64 fail" msgstr "base64 fail" #: src/gss.c:520 #, c-format msgid "could not acquire server credentials (%d/%d)" msgstr "could not acquire server credentials (%d/%d)" #: src/gss.c:560 #, c-format msgid "accepting security context failed (%d/%d)" msgstr "accepting security context failed (%d/%d)" gss-1.0.3/po/en@quot.header0000644000000000000000000000226312415507605012411 00000000000000# All this catalog "translates" are quotation characters. # The msgids must be ASCII and therefore cannot contain real quotation # characters, only substitutes like grave accent (0x60), apostrophe (0x27) # and double quote (0x22). These substitutes look strange; see # http://www.cl.cam.ac.uk/~mgk25/ucs/quotes.html # # This catalog translates grave accent (0x60) and apostrophe (0x27) to # left single quotation mark (U+2018) and right single quotation mark (U+2019). # It also translates pairs of apostrophe (0x27) to # left single quotation mark (U+2018) and right single quotation mark (U+2019) # and pairs of quotation mark (0x22) to # left double quotation mark (U+201C) and right double quotation mark (U+201D). # # When output to an UTF-8 terminal, the quotation characters appear perfectly. # When output to an ISO-8859-1 terminal, the single quotation marks are # transliterated to apostrophes (by iconv in glibc 2.2 or newer) or to # grave/acute accent (by libiconv), and the double quotation marks are # transliterated to 0x22. # When output to an ASCII terminal, the single quotation marks are # transliterated to apostrophes, and the double quotation marks are # transliterated to 0x22. # gss-1.0.3/po/hu.po0000644000000000000000000002712012415507644010602 00000000000000# Hungarian translation for gss. # Copyright (C) 2014 Free Software Foundation, Inc. # This file is distributed under the same license as the gss package. # # Balázs Úr , 2014. msgid "" msgstr "" "Project-Id-Version: gss 1.0.1\n" "Report-Msgid-Bugs-To: bug-gss@gnu.org\n" "POT-Creation-Date: 2014-10-09 15:37+0200\n" "PO-Revision-Date: 2014-06-26 22:18+0200\n" "Last-Translator: Balázs Úr \n" "Language-Team: Hungarian \n" "Language: hu\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Lokalize 1.5\n" #: lib/meta.c:37 msgid "Kerberos V5 GSS-API mechanism" msgstr "Kerberos V5 GSS-API mechanizmus" #: lib/error.c:37 msgid "A required input parameter could not be read" msgstr "Egy szükséges bemeneti paramétert nem sikerült beolvasni" #: lib/error.c:39 msgid "A required output parameter could not be written" msgstr "Egy szükséges kimeneti paramétert nem sikerült kiírni" #: lib/error.c:41 msgid "A parameter was malformed" msgstr "Egy paraméter helytelenül formázott" #: lib/error.c:46 msgid "An unsupported mechanism was requested" msgstr "Egy nem támogatott mechanizmust kértek" #: lib/error.c:48 msgid "An invalid name was supplied" msgstr "Egy érvénytelen nevet adtak meg" #: lib/error.c:50 msgid "A supplied name was of an unsupported type" msgstr "Egy megadott név típusa nem támogatott" #: lib/error.c:52 msgid "Incorrect channel bindings were supplied" msgstr "Érvénytelen csatornakötéseket adtak meg" #: lib/error.c:54 msgid "An invalid status code was supplied" msgstr "Egy érvénytelen állapotkódot adtak meg" #: lib/error.c:56 msgid "A token had an invalid MIC" msgstr "Egy tokennek érvénytelen MIC-je volt" #: lib/error.c:58 msgid "" "No credentials were supplied, or the credentials were unavailable or " "inaccessible" msgstr "" "Nem adtak meg hitelesítési adatokat, vagy a hitelesítési adatok " "elérhetetlenek vagy hozzáférhetetlenek voltak" #: lib/error.c:61 msgid "No context has been established" msgstr "Környezet nem lett létesítve" #: lib/error.c:63 msgid "A token was invalid" msgstr "Egy token érvénytelen volt" #: lib/error.c:65 msgid "A credential was invalid" msgstr "Egy hitelesítési adat érvénytelen volt" #: lib/error.c:67 msgid "The referenced credentials have expired" msgstr "A hivatkozott hitelesítési adatok lejártak" #: lib/error.c:69 msgid "The context has expired" msgstr "A környezet lejárt" #: lib/error.c:71 msgid "Unspecified error in underlying mechanism" msgstr "Meghatározhatatlan hiba az alapul szolgáló mechanizmusban" #: lib/error.c:73 msgid "The quality-of-protection requested could not be provided" msgstr "A kért minÅ‘ségi védelem nem lett biztosítva" #: lib/error.c:75 msgid "The operation is forbidden by local security policy" msgstr "A műveletet a helyi biztonsági házirend letiltotta" #: lib/error.c:77 msgid "The operation or option is unavailable" msgstr "A művelet vagy a kapcsoló nem érhetÅ‘ el" #: lib/error.c:79 msgid "The requested credential element already exists" msgstr "A kért hitelesítési adatelem már létezik" #: lib/error.c:81 msgid "The provided name was not a mechanism name" msgstr "A megadott név nem mechanizmus név volt" #: lib/error.c:86 msgid "" "The gss_init_sec_context() or gss_accept_sec_context() function must be " "called again to complete its function" msgstr "" "A gss_init_sec_context() vagy a gss_accept_sec_context() függvényt újra meg " "kell hívni a funkciójuk befejezéséhez" #: lib/error.c:89 msgid "The token was a duplicate of an earlier token" msgstr "A token egy korábbi token másolata volt" #: lib/error.c:91 msgid "The token's validity period has expired" msgstr "A token érvényességi idÅ‘szaka lejárt" #: lib/error.c:93 msgid "A later token has already been processed" msgstr "Egy késÅ‘bbi token már fel lett dolgozva" #: lib/error.c:95 msgid "An expected per-message token was not received" msgstr "Egy várt üzenetenkénti token nem érkezett meg" #: lib/error.c:312 msgid "No error" msgstr "Nincs hiba" #: lib/krb5/error.c:36 msgid "No @ in SERVICE-NAME name string" msgstr "Nincs @ a SERVICE-NAME nevű szövegben" #: lib/krb5/error.c:38 msgid "STRING-UID-NAME contains nondigits" msgstr "A STRING-UID-NAME nem csak számjegyeket tartalmaz" #: lib/krb5/error.c:40 msgid "UID does not resolve to username" msgstr "Az UID nem lett feloldva felhasználónévvé" #: lib/krb5/error.c:42 msgid "Validation error" msgstr "EllenÅ‘rzési hiba" #: lib/krb5/error.c:44 msgid "Couldn't allocate gss_buffer_t data" msgstr "Nem sikerült lefoglalni a gss_buffer_t adatokat" #: lib/krb5/error.c:46 msgid "Message context invalid" msgstr "Az üzenetkörnyezet érvénytelen" #: lib/krb5/error.c:48 msgid "Buffer is the wrong size" msgstr "A puffer rossz méretű" #: lib/krb5/error.c:50 msgid "Credential usage type is unknown" msgstr "A hitelesítési adatok használati típusa ismeretlen" #: lib/krb5/error.c:52 msgid "Unknown quality of protection specified" msgstr "Ismeretlen minÅ‘ségi védelem lett megadva" #: lib/krb5/error.c:55 msgid "Principal in credential cache does not match desired name" msgstr "" "A hitelesítési adatok gyorsítótárában lévÅ‘ résztvevÅ‘ nem egyezik a kívánt " "névvel" #: lib/krb5/error.c:57 msgid "No principal in keytab matches desired name" msgstr "Nincs a kívánt névvel egyezÅ‘ résztvevÅ‘ a kulcslapon" #: lib/krb5/error.c:59 msgid "Credential cache has no TGT" msgstr "A hitelesítési adatok gyorsítótárnak nincs TGT-je" #: lib/krb5/error.c:61 msgid "Authenticator has no subkey" msgstr "A hitelesítÅ‘nek nincs alkulcsa" #: lib/krb5/error.c:63 msgid "Context is already fully established" msgstr "A környezet már teljes mértékben létesítve" #: lib/krb5/error.c:65 msgid "Unknown signature type in token" msgstr "Ismeretlen aláírástípus a tokenben" #: lib/krb5/error.c:67 msgid "Invalid field length in token" msgstr "Érvénytelen mezÅ‘hossz a tokenben" #: lib/krb5/error.c:69 msgid "Attempt to use incomplete security context" msgstr "Befejezetlen biztonsági környezet használatának kísérlete" #: lib/krb5/error.c:86 msgid "No krb5 error" msgstr "Nincs krb5 hiba" #: lib/krb5/error.c:127 msgid "Unknown krb5 error" msgstr "Ismeretlen krb5 hiba" #: src/gss.c:67 #, c-format msgid "Try `%s --help' for more information.\n" msgstr "További információkért próbálja a(z) „%s --help†parancsot.\n" #: src/gss.c:71 #, c-format msgid "Usage: %s OPTIONS...\n" msgstr "Használat: %s KAPCSOLÓK…\n" #: src/gss.c:74 msgid "" "Command line interface to GSS, used to explain error codes.\n" "\n" msgstr "" "Parancssoros felület a GSS-hez, amely hibakódok magyarázatához használható.\n" "\n" #: src/gss.c:78 msgid "" "Mandatory arguments to long options are mandatory for short options too.\n" msgstr "" "A hosszú kapcsolók kötelezÅ‘ argumentumai a rövid kapcsolókhoz is " "kötelezÅ‘ek.\n" #: src/gss.c:81 msgid "" " -h, --help Print help and exit.\n" " -V, --version Print version and exit.\n" " -l, --list-mechanisms\n" " List information about supported mechanisms\n" " in a human readable format.\n" " -m, --major=LONG Describe a `major status' error code value.\n" msgstr "" " -h, --help Súgó kiírása és kilépés.\n" " -V, --version Verzió kiírása és kilépés.\n" " -l, --list-mechanisms\n" " Információk listázása a támogatott mechanizmusokról\n" " ember által olvasható formátumban.\n" " -m, --major=LONG Egy „fÅ‘ állapot†hibakód érték leírása.\n" #: src/gss.c:89 msgid "" " -a, --accept-sec-context[=MECH]\n" " Accept a security context as server.\n" " If MECH is not specified, no credentials\n" " will be acquired. Use \"*\" to use library\n" " default mechanism.\n" " -i, --init-sec-context=MECH\n" " Initialize a security context as client.\n" " MECH is the SASL name of mechanism, use -l\n" " to list supported mechanisms.\n" " -n, --server-name=SERVICE@HOSTNAME\n" " For -i and -a, set the name of the remote host.\n" " For example, \"imap@mail.example.com\".\n" msgstr "" #: src/gss.c:103 msgid " -q, --quiet Silent operation (default=off).\n" msgstr " -q, --quiet Csendes működés (alapértelmezett=off).\n" #: src/gss.c:122 #, c-format msgid "" "GSS-API major status code %ld (0x%lx).\n" "\n" msgstr "" "GSS-API fÅ‘ állapotkód %ld (0x%lx).\n" "\n" #: src/gss.c:124 #, c-format msgid "" " MSB LSB\n" " +-----------------+-----------------+---------------------------------+\n" " | Calling Error | Routine Error | Supplementary Info |\n" " | " msgstr "" " MSB LSB\n" " +-----------------+-----------------+---------------------------------+\n" " | Hívási hiba | Rutin hiba | KiegészítÅ‘ információk |\n" " | " #: src/gss.c:138 #, c-format msgid "" "|\n" " +-----------------+-----------------+---------------------------------+\n" "Bit 31 24 23 16 15 0\n" "\n" msgstr "" "|\n" " +-----------------+-----------------+---------------------------------+\n" "Bit 31 24 23 16 15 0\n" "\n" #: src/gss.c:148 #, c-format msgid "Masked routine error %ld (0x%lx) shifted into %ld (0x%lx):\n" msgstr "Maszkolt rutin hiba %ld (0x%lx) eltolva ebbe: %ld (0x%lx):\n" #: src/gss.c:164 src/gss.c:198 src/gss.c:234 #, c-format msgid "displaying status code failed (%d)" msgstr "az állapotkód megjelenítése nem sikerült (%d)" #: src/gss.c:184 #, c-format msgid "Masked calling error %ld (0x%lx) shifted into %ld (0x%lx):\n" msgstr "Maszkolt hívási hiba %ld (0x%lx) eltolva ebbe: %ld (0x%lx):\n" #: src/gss.c:217 #, c-format msgid "Masked supplementary info %ld (0x%lx) shifted into %ld (0x%lx):\n" msgstr "" "Maszkolt kiegészítÅ‘ információk %ld (0x%lx) eltolva ebbe: %ld (0x%lx):\n" #: src/gss.c:251 #, c-format msgid "No error\n" msgstr "Nincs hiba\n" #: src/gss.c:269 #, c-format msgid "indicating mechanisms failed (%d)" msgstr "a mechanizmusok jelzése nem sikerült (%d)" #: src/gss.c:285 #, c-format msgid "inquiring information about mechanism failed (%d)" msgstr "az érdeklÅ‘dés a mechanizmus információiról nem sikerült (%d)" #: src/gss.c:342 src/gss.c:483 #, fuzzy, c-format msgid "inquiring mechanism for SASL name (%d/%d)" msgstr "a mechanizmusok jelzése nem sikerült (%d)" #: src/gss.c:355 src/gss.c:498 #, c-format msgid "could not import server name \"%s\" (%d/%d)" msgstr "" #: src/gss.c:374 #, fuzzy, c-format msgid "initializing security context failed (%d/%d)" msgstr "az állapotkód megjelenítése nem sikerült (%d)" #: src/gss.c:378 src/gss.c:564 #, c-format msgid "base64 input too long" msgstr "" #: src/gss.c:380 src/gss.c:415 src/gss.c:545 src/gss.c:566 #, c-format msgid "malloc" msgstr "" #: src/gss.c:407 src/gss.c:537 #, c-format msgid "getline" msgstr "" #: src/gss.c:409 src/gss.c:539 #, c-format msgid "end of file" msgstr "" #: src/gss.c:413 src/gss.c:543 #, c-format msgid "base64 fail" msgstr "" #: src/gss.c:520 #, c-format msgid "could not acquire server credentials (%d/%d)" msgstr "" #: src/gss.c:560 #, fuzzy, c-format msgid "accepting security context failed (%d/%d)" msgstr "az állapotkód megjelenítése nem sikerült (%d)" gss-1.0.3/po/hu.gmo0000644000000000000000000002052012415507644010743 00000000000000Þ•@Y€æh4†»(Ôý,0D*u ».Ïþ# &? *f ‘ ­ =Æ $ #) M i (Š (³ Ü ú I ;b ;ž @Ú  3 T Qt Æ Ï Ù +ç 9 "M p mˆ 3ö &**Q9|'¶/Þ-'<&d ‹¬'¿ç)1G"X!{1—ϸgí P?_*Ÿ*Ê&õ<:Y)”&¾å1!4*V(?ª ê S#0w0¨6Ù6'G+o#›¿Uß>5;tL°"ý' Hth Ý èô9]>2œÏxä5]+“)¿0é--H)v) FÊ-?+T&€<§ä 2 +H Ct —¸ %845;+. = 7/ , "!)0:@$19 ?*32<#-6>& (' MSB LSB +-----------------+-----------------+---------------------------------+ | Calling Error | Routine Error | Supplementary Info | | -h, --help Print help and exit. -V, --version Print version and exit. -l, --list-mechanisms List information about supported mechanisms in a human readable format. -m, --major=LONG Describe a `major status' error code value. -q, --quiet Silent operation (default=off). A credential was invalidA later token has already been processedA parameter was malformedA required input parameter could not be readA required output parameter could not be writtenA supplied name was of an unsupported typeA token had an invalid MICA token was invalidAn expected per-message token was not receivedAn invalid name was suppliedAn invalid status code was suppliedAn unsupported mechanism was requestedAttempt to use incomplete security contextAuthenticator has no subkeyBuffer is the wrong sizeCommand line interface to GSS, used to explain error codes. Context is already fully establishedCouldn't allocate gss_buffer_t dataCredential cache has no TGTCredential usage type is unknownGSS-API major status code %ld (0x%lx). Incorrect channel bindings were suppliedInvalid field length in tokenKerberos V5 GSS-API mechanismMandatory arguments to long options are mandatory for short options too. Masked calling error %ld (0x%lx) shifted into %ld (0x%lx): Masked routine error %ld (0x%lx) shifted into %ld (0x%lx): Masked supplementary info %ld (0x%lx) shifted into %ld (0x%lx): Message context invalidNo @ in SERVICE-NAME name stringNo context has been establishedNo credentials were supplied, or the credentials were unavailable or inaccessibleNo errorNo error No krb5 errorNo principal in keytab matches desired namePrincipal in credential cache does not match desired nameSTRING-UID-NAME contains nondigitsThe context has expiredThe gss_init_sec_context() or gss_accept_sec_context() function must be called again to complete its functionThe operation is forbidden by local security policyThe operation or option is unavailableThe provided name was not a mechanism nameThe quality-of-protection requested could not be providedThe referenced credentials have expiredThe requested credential element already existsThe token was a duplicate of an earlier tokenThe token's validity period has expiredTry `%s --help' for more information. UID does not resolve to usernameUnknown krb5 errorUnknown quality of protection specifiedUnknown signature type in tokenUnspecified error in underlying mechanismUsage: %s OPTIONS... Validation errordisplaying status code failed (%d)indicating mechanisms failed (%d)inquiring information about mechanism failed (%d)| +-----------------+-----------------+---------------------------------+ Bit 31 24 23 16 15 0 Project-Id-Version: gss 1.0.1 Report-Msgid-Bugs-To: bug-gss@gnu.org POT-Creation-Date: 2014-10-09 15:37+0200 PO-Revision-Date: 2014-06-26 22:18+0200 Last-Translator: Balázs Úr Language-Team: Hungarian Language: hu MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=(n != 1); X-Generator: Lokalize 1.5 MSB LSB +-----------------+-----------------+---------------------------------+ | Hívási hiba | Rutin hiba | KiegészítÅ‘ információk | | -h, --help Súgó kiírása és kilépés. -V, --version Verzió kiírása és kilépés. -l, --list-mechanisms Információk listázása a támogatott mechanizmusokról ember által olvasható formátumban. -m, --major=LONG Egy „fÅ‘ állapot†hibakód érték leírása. -q, --quiet Csendes működés (alapértelmezett=off). Egy hitelesítési adat érvénytelen voltEgy késÅ‘bbi token már fel lett dolgozvaEgy paraméter helytelenül formázottEgy szükséges bemeneti paramétert nem sikerült beolvasniEgy szükséges kimeneti paramétert nem sikerült kiírniEgy megadott név típusa nem támogatottEgy tokennek érvénytelen MIC-je voltEgy token érvénytelen voltEgy várt üzenetenkénti token nem érkezett megEgy érvénytelen nevet adtak megEgy érvénytelen állapotkódot adtak megEgy nem támogatott mechanizmust kértekBefejezetlen biztonsági környezet használatának kísérleteA hitelesítÅ‘nek nincs alkulcsaA puffer rossz méretűParancssoros felület a GSS-hez, amely hibakódok magyarázatához használható. A környezet már teljes mértékben létesítveNem sikerült lefoglalni a gss_buffer_t adatokatA hitelesítési adatok gyorsítótárnak nincs TGT-jeA hitelesítési adatok használati típusa ismeretlenGSS-API fÅ‘ állapotkód %ld (0x%lx). Érvénytelen csatornakötéseket adtak megÉrvénytelen mezÅ‘hossz a tokenbenKerberos V5 GSS-API mechanizmusA hosszú kapcsolók kötelezÅ‘ argumentumai a rövid kapcsolókhoz is kötelezÅ‘ek. Maszkolt hívási hiba %ld (0x%lx) eltolva ebbe: %ld (0x%lx): Maszkolt rutin hiba %ld (0x%lx) eltolva ebbe: %ld (0x%lx): Maszkolt kiegészítÅ‘ információk %ld (0x%lx) eltolva ebbe: %ld (0x%lx): Az üzenetkörnyezet érvénytelenNincs @ a SERVICE-NAME nevű szövegbenKörnyezet nem lett létesítveNem adtak meg hitelesítési adatokat, vagy a hitelesítési adatok elérhetetlenek vagy hozzáférhetetlenek voltakNincs hibaNincs hiba Nincs krb5 hibaNincs a kívánt névvel egyezÅ‘ résztvevÅ‘ a kulcslaponA hitelesítési adatok gyorsítótárában lévÅ‘ résztvevÅ‘ nem egyezik a kívánt névvelA STRING-UID-NAME nem csak számjegyeket tartalmazA környezet lejártA gss_init_sec_context() vagy a gss_accept_sec_context() függvényt újra meg kell hívni a funkciójuk befejezéséhezA műveletet a helyi biztonsági házirend letiltottaA művelet vagy a kapcsoló nem érhetÅ‘ elA megadott név nem mechanizmus név voltA kért minÅ‘ségi védelem nem lett biztosítvaA hivatkozott hitelesítési adatok lejártakA kért hitelesítési adatelem már létezikA token egy korábbi token másolata voltA token érvényességi idÅ‘szaka lejártTovábbi információkért próbálja a(z) „%s --help†parancsot. Az UID nem lett feloldva felhasználónévvéIsmeretlen krb5 hibaIsmeretlen minÅ‘ségi védelem lett megadvaIsmeretlen aláírástípus a tokenbenMeghatározhatatlan hiba az alapul szolgáló mechanizmusbanHasználat: %s KAPCSOLÓK… EllenÅ‘rzési hibaaz állapotkód megjelenítése nem sikerült (%d)a mechanizmusok jelzése nem sikerült (%d)az érdeklÅ‘dés a mechanizmus információiról nem sikerült (%d)| +-----------------+-----------------+---------------------------------+ Bit 31 24 23 16 15 0 gss-1.0.3/po/id.gmo0000644000000000000000000001754312415507644010736 00000000000000Þ•@Y€æh4†»(Ôý,0D*u ».Ïþ# &? *f ‘ ­ =Æ $ #) M i (Š (³ Ü ú I ;b ;ž @Ú  3 T Qt Æ Ï Ù +ç 9 "M p mˆ 3ö &**Q9|'¶/Þ-'<&d ‹¬'¿ç)1G"X!{1—Ïgæé6Ð19 No1†3¸4ì!>.N}#œ)À/ê#!>J`"«*Î$ù((G&p—¶?Ô>:S<ŽË%ã T' |Š™C¬Ið:Zls.à(..W&†(­.Ö(/.)^ˆ0Ÿ&Ð'÷7"F(i7’˜Ê%845;+. = 7/ , "!)0:@$19 ?*32<#-6>& (' MSB LSB +-----------------+-----------------+---------------------------------+ | Calling Error | Routine Error | Supplementary Info | | -h, --help Print help and exit. -V, --version Print version and exit. -l, --list-mechanisms List information about supported mechanisms in a human readable format. -m, --major=LONG Describe a `major status' error code value. -q, --quiet Silent operation (default=off). A credential was invalidA later token has already been processedA parameter was malformedA required input parameter could not be readA required output parameter could not be writtenA supplied name was of an unsupported typeA token had an invalid MICA token was invalidAn expected per-message token was not receivedAn invalid name was suppliedAn invalid status code was suppliedAn unsupported mechanism was requestedAttempt to use incomplete security contextAuthenticator has no subkeyBuffer is the wrong sizeCommand line interface to GSS, used to explain error codes. Context is already fully establishedCouldn't allocate gss_buffer_t dataCredential cache has no TGTCredential usage type is unknownGSS-API major status code %ld (0x%lx). Incorrect channel bindings were suppliedInvalid field length in tokenKerberos V5 GSS-API mechanismMandatory arguments to long options are mandatory for short options too. Masked calling error %ld (0x%lx) shifted into %ld (0x%lx): Masked routine error %ld (0x%lx) shifted into %ld (0x%lx): Masked supplementary info %ld (0x%lx) shifted into %ld (0x%lx): Message context invalidNo @ in SERVICE-NAME name stringNo context has been establishedNo credentials were supplied, or the credentials were unavailable or inaccessibleNo errorNo error No krb5 errorNo principal in keytab matches desired namePrincipal in credential cache does not match desired nameSTRING-UID-NAME contains nondigitsThe context has expiredThe gss_init_sec_context() or gss_accept_sec_context() function must be called again to complete its functionThe operation is forbidden by local security policyThe operation or option is unavailableThe provided name was not a mechanism nameThe quality-of-protection requested could not be providedThe referenced credentials have expiredThe requested credential element already existsThe token was a duplicate of an earlier tokenThe token's validity period has expiredTry `%s --help' for more information. UID does not resolve to usernameUnknown krb5 errorUnknown quality of protection specifiedUnknown signature type in tokenUnspecified error in underlying mechanismUsage: %s OPTIONS... Validation errordisplaying status code failed (%d)indicating mechanisms failed (%d)inquiring information about mechanism failed (%d)| +-----------------+-----------------+---------------------------------+ Bit 31 24 23 16 15 0 Project-Id-Version: gss 1.0.1 Report-Msgid-Bugs-To: bug-gss@gnu.org POT-Creation-Date: 2014-10-09 15:37+0200 PO-Revision-Date: 2012-05-18 15:45+0700 Last-Translator: Andhika Padmawan Language-Team: Indonesian Language: id MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit MSB LSB +-------------------+---------------+---------------------------------+ | Galat Memanggil | Galat Rutin | Info Tambahan | | -h, --help Cetak bantuan lalu keluar. -V, --version Cetak versi lalu keluar. -l, --list-mechanisms Tampilkan informasi tentang mekanisme yang didukung dalam format yang dapat dibaca manusia. -m, --major=LONG Jelaskan nilai kode galat `major status'. -q, --quiet Operasi diam (standar=mati). Kredensial tidak sahToken selanjutnya telah diprosesParameter salah bentukParameter masukan yang dibutuhkan tak bisa dibacaParameter keluaran yang dibutuhkan tak bisa ditulisNama yang diberikan merupakan tipe yang tak didukungToken memiliki MIC tidak sahToken tidak sahToken per-pesan yang diharapkan tidak diterimaNama tidak sah telah diberikanKode status tidak sah telah dipasokMekanisme yang tak didukung telah dimintaCoba menggunakan konteks keamanan tidak lengkapOtentikator tidak memiliki subkunciPenyangga dalam ukuran yang salahAntarmuka baris perintah ke GSS, digunakan untuk menjelaskan kode galat. Konteks telah sepenuhnya terbangunTak dapat mengalokasikan data gss_buffer_tTembolok kredensial tak memiliki TGTTipe penggunaan kredensial tak diketahuiKode status mayor GSS-API %ld (0x%lx). Pengikat kanal tidak sah telah dipasokPanjang medan tak sah di tokenMekanisme Kerberos V5 GSS-APIArgumen wajib untuk opsi panjang juga wajib untuk opsi pendek. Galat memanggil bertopeng %ld (0x%lx) digeser ke %ld (0x%lx): Galat rutin bertopeng %ld (0x%lx) digeser ke %ld (0x%lx): Info tambahan bertopeng %ld (0x%lx) digeser ke %ld (0x%lx): Konteks pesan tidak sahTak ada @ di benang nama SERVICE-NAMETak ada konteks yang dibangunTak ada kredensial yang dipasok, atau kredensial tak tersedia atau tak dapat diaksesTak ada galatTak ada galat Tak ada galat krb5Tak ada prinsip di tab kunci yang cocok dengan nama yang diinginkanPrinsip dalam tembolok kredensial tidak cocok dengan nama yang diinginkanSTRING-UID-NAME berisi nondigitKonteks telah kadaluarsaFungsi gss_init_sec_context() atau gss_accept_sec_context() harus dipanggil ulang untuk melengkapi fungsinyaOperasi dilarang oleh kebijakan keamanan lokalOperasi atau opsi tak tersediaNama yang diberikan bukan nama mekanismeKualitas proteksi diminta tak dapat disediakanKredensial yang diacu telah kadaluarsaElemen kredensial yang diminta telah adaToken merupakan duplikat dari token sebelumnyaPeriode validitas token telah kadaluarsaCoba `%s --help' untuk informasi lebih lanjut. UID tak dapat memecahkan ke nama penggunaGalat krb5 tak dikenalKualitas proteksi tak diketahui telah ditentukanTipe tanda tangan tak dikenal di tokenGalat tak ditentukan di mekanisme dasarPenggunaan: %s OPSI... Galat validasimenampilkan kode status gagal (%d)mengindikasikan kegagalan mekanisme (%d)mencari tahu informasi tentang kegagalan mekanisme (%d)| +-----------------+-----------------+---------------------------------+ Bita 31 24 23 16 15 0 gss-1.0.3/po/eo.po0000644000000000000000000002574112415507644010600 00000000000000# Esperanto translation. # Copyright (C) 2011 Free Software Foundation, Inc. # This file is distributed under the same license as the gss package. # Felipe Castro , 2011. # msgid "" msgstr "" "Project-Id-Version: gss 1.0.1\n" "Report-Msgid-Bugs-To: bug-gss@gnu.org\n" "POT-Creation-Date: 2014-10-09 15:37+0200\n" "PO-Revision-Date: 2011-03-13 13:15-0300\n" "Last-Translator: Felipe Castro \n" "Language-Team: Esperanto \n" "Language: eo\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" #: lib/meta.c:37 msgid "Kerberos V5 GSS-API mechanism" msgstr "Mekanismo Kerberos V5 GSS-API" #: lib/error.c:37 msgid "A required input parameter could not be read" msgstr "Bezonata eniga parametro ne povis esti legata" #: lib/error.c:39 msgid "A required output parameter could not be written" msgstr "Bezonata eliga parametro ne povis esti skribata" #: lib/error.c:41 msgid "A parameter was malformed" msgstr "Parametro estis misformata" #: lib/error.c:46 msgid "An unsupported mechanism was requested" msgstr "Nesubtenata mekanismo estis petata" #: lib/error.c:48 msgid "An invalid name was supplied" msgstr "Malvalida nomo estis donata" #: lib/error.c:50 msgid "A supplied name was of an unsupported type" msgstr "Donata nomo estis el nesubtenata tipo" #: lib/error.c:52 msgid "Incorrect channel bindings were supplied" msgstr "MalÄusta kanal-ligoj estis donataj" #: lib/error.c:54 msgid "An invalid status code was supplied" msgstr "Malvalita stat-kodo estis donata" #: lib/error.c:56 msgid "A token had an invalid MIC" msgstr "Ä´etono havis malvalidan MIC" #: lib/error.c:58 msgid "" "No credentials were supplied, or the credentials were unavailable or " "inaccessible" msgstr "" "Neniu legitimilo estis donata, aŭ la legitimiloj estis nedisponeblaj aÅ­ " "neatingeblaj" #: lib/error.c:61 msgid "No context has been established" msgstr "Neniu kunteksto estas starigita" #: lib/error.c:63 msgid "A token was invalid" msgstr "Ä´etono estis malvalida" #: lib/error.c:65 msgid "A credential was invalid" msgstr "Legitimilo estis malvalida" #: lib/error.c:67 msgid "The referenced credentials have expired" msgstr "La referencitaj legitimiloj senvalidiÄis" #: lib/error.c:69 msgid "The context has expired" msgstr "La kunteksto senvalidiÄis" #: lib/error.c:71 msgid "Unspecified error in underlying mechanism" msgstr "Nespecifita eraro en implicita mekanismo" #: lib/error.c:73 msgid "The quality-of-protection requested could not be provided" msgstr "La peto kvalito-de-protekto ne povis esti provizata" #: lib/error.c:75 msgid "The operation is forbidden by local security policy" msgstr "La operacio estas malpermesata de loka sekurec-politiko" #: lib/error.c:77 msgid "The operation or option is unavailable" msgstr "La operacio aÅ­ elekto ne estas disponebla" #: lib/error.c:79 msgid "The requested credential element already exists" msgstr "La petita legitimila elemento jam ekzistas" #: lib/error.c:81 msgid "The provided name was not a mechanism name" msgstr "La donita nomo ne estis mekanismo-nomo" #: lib/error.c:86 msgid "" "The gss_init_sec_context() or gss_accept_sec_context() function must be " "called again to complete its function" msgstr "" "La funkcio gss_init_sec_context() aÅ­ gss_accept_sec_context() devas esti " "vokata refoje por plenumigi Äian funkcion" #: lib/error.c:89 msgid "The token was a duplicate of an earlier token" msgstr "La ĵetono estis ripetaĵo de pli frua ĵetono" #: lib/error.c:91 msgid "The token's validity period has expired" msgstr "La valideca templimo de ĵetono finiÄis" #: lib/error.c:93 msgid "A later token has already been processed" msgstr "Posta ĵetono jam estas procezita" #: lib/error.c:95 msgid "An expected per-message token was not received" msgstr "Atendita po-mesaÄa ĵetono ne estis ricevata" #: lib/error.c:312 msgid "No error" msgstr "Neniu eraro" #: lib/krb5/error.c:36 msgid "No @ in SERVICE-NAME name string" msgstr "Neniu @ en nom-ĉeno SERVICE-NAME" #: lib/krb5/error.c:38 msgid "STRING-UID-NAME contains nondigits" msgstr "STRING-UID-NAME enhavas ne-ciferojn" #: lib/krb5/error.c:40 msgid "UID does not resolve to username" msgstr "UID ne solviÄas al uzantnomo" #: lib/krb5/error.c:42 msgid "Validation error" msgstr "Validiga eraro" #: lib/krb5/error.c:44 msgid "Couldn't allocate gss_buffer_t data" msgstr "Ni ne povis rezervi datumaron gss_buffer_t" #: lib/krb5/error.c:46 msgid "Message context invalid" msgstr "MesaÄo-kunteksto estas malvalida" #: lib/krb5/error.c:48 msgid "Buffer is the wrong size" msgstr "Bufro havas malÄustan grandon" #: lib/krb5/error.c:50 msgid "Credential usage type is unknown" msgstr "Legitimila uzad-tipo estas nekonata" #: lib/krb5/error.c:52 msgid "Unknown quality of protection specified" msgstr "Nekonata kvalito de protekto estis indikata" #: lib/krb5/error.c:55 msgid "Principal in credential cache does not match desired name" msgstr "Ĉefo en legitimila kaÅmemoro ne kongruas al dezirata nomo" #: lib/krb5/error.c:57 msgid "No principal in keytab matches desired name" msgstr "Neniu ĉefo en keytab kongruas al dezirata nomo" #: lib/krb5/error.c:59 msgid "Credential cache has no TGT" msgstr "Legitimila kaÅmemoro havas neniu TGT" #: lib/krb5/error.c:61 msgid "Authenticator has no subkey" msgstr "AÅ­tentikanto havas neniun subkey" #: lib/krb5/error.c:63 msgid "Context is already fully established" msgstr "Kunteksto jam estas plene starigita" #: lib/krb5/error.c:65 msgid "Unknown signature type in token" msgstr "Nekonata subskriba tipo en ĵetono" #: lib/krb5/error.c:67 msgid "Invalid field length in token" msgstr "Malvalida kampo-longo en ĵetono" #: lib/krb5/error.c:69 msgid "Attempt to use incomplete security context" msgstr "Provo uzi malkompletan sekurecan kuntekston" #: lib/krb5/error.c:86 msgid "No krb5 error" msgstr "Neniu eraro krb5" #: lib/krb5/error.c:127 msgid "Unknown krb5 error" msgstr "Nekonata eraro krb5" #: src/gss.c:67 #, c-format msgid "Try `%s --help' for more information.\n" msgstr "Provu '%s --help' por pli da informoj.\n" #: src/gss.c:71 #, c-format msgid "Usage: %s OPTIONS...\n" msgstr "Uzado: %s ELEKTILOJ...\n" #: src/gss.c:74 msgid "" "Command line interface to GSS, used to explain error codes.\n" "\n" msgstr "" "Komand-linia interfaco al GSS, uzata por klarigi erar-kodojn.\n" "\n" #: src/gss.c:78 msgid "" "Mandatory arguments to long options are mandatory for short options too.\n" msgstr "" "Devigaj argumentoj por longaj elektiloj estas same devigaj por mallongaj.\n" #: src/gss.c:81 msgid "" " -h, --help Print help and exit.\n" " -V, --version Print version and exit.\n" " -l, --list-mechanisms\n" " List information about supported mechanisms\n" " in a human readable format.\n" " -m, --major=LONG Describe a `major status' error code value.\n" msgstr "" " -h, --help Montri tiun ĉi helpon kaj eliri.\n" " -V, --version Montri version kaj eliri.\n" " -l, --list-mechanisms\n" " Listigi informon pri subtenataj mekanismoj\n" " laŭ hom-legebla formo.\n" " -m, --major=LONG Priskribi 'plejgrav-statan' erar-kodan valoron.\n" #: src/gss.c:89 msgid "" " -a, --accept-sec-context[=MECH]\n" " Accept a security context as server.\n" " If MECH is not specified, no credentials\n" " will be acquired. Use \"*\" to use library\n" " default mechanism.\n" " -i, --init-sec-context=MECH\n" " Initialize a security context as client.\n" " MECH is the SASL name of mechanism, use -l\n" " to list supported mechanisms.\n" " -n, --server-name=SERVICE@HOSTNAME\n" " For -i and -a, set the name of the remote host.\n" " For example, \"imap@mail.example.com\".\n" msgstr "" #: src/gss.c:103 msgid " -q, --quiet Silent operation (default=off).\n" msgstr " -q, --quiet Silenta funkciado (apriore=ne).\n" #: src/gss.c:122 #, c-format msgid "" "GSS-API major status code %ld (0x%lx).\n" "\n" msgstr "" "GSS-API plejgrava stat-kodo %ld (0x%lx).\n" "\n" #: src/gss.c:124 #, c-format msgid "" " MSB LSB\n" " +-----------------+-----------------+---------------------------------+\n" " | Calling Error | Routine Error | Supplementary Info |\n" " | " msgstr "" " MSB LSB\n" " +-----------------+-----------------+---------------------------------+\n" " | Vok-Eraro | Procedur-Eraro | Kroma Informo |\n" " | " #: src/gss.c:138 #, c-format msgid "" "|\n" " +-----------------+-----------------+---------------------------------+\n" "Bit 31 24 23 16 15 0\n" "\n" msgstr "" "|\n" " +-----------------+-----------------+---------------------------------+\n" "Bito 31 24 23 16 15 0\n" "\n" #: src/gss.c:148 #, c-format msgid "Masked routine error %ld (0x%lx) shifted into %ld (0x%lx):\n" msgstr "Maskita procedura eraro %ld (0x%lx) ÅoviÄis al %ld (0x%lx):\n" #: src/gss.c:164 src/gss.c:198 src/gss.c:234 #, c-format msgid "displaying status code failed (%d)" msgstr "montrigo de stat-kodo malsukcesis (%d)" #: src/gss.c:184 #, c-format msgid "Masked calling error %ld (0x%lx) shifted into %ld (0x%lx):\n" msgstr "Maskita vok-eraro %ld (0x%lx) ÅoviÄis al %ld (0x%lx):\n" #: src/gss.c:217 #, c-format msgid "Masked supplementary info %ld (0x%lx) shifted into %ld (0x%lx):\n" msgstr "Maskita kroma informo %ld (0x%lx) ÅoviÄis al %ld (0x%lx):\n" #: src/gss.c:251 #, c-format msgid "No error\n" msgstr "Neniu eraro\n" #: src/gss.c:269 #, c-format msgid "indicating mechanisms failed (%d)" msgstr "indikado de mekanismoj malsukcesis (%d)" #: src/gss.c:285 #, c-format msgid "inquiring information about mechanism failed (%d)" msgstr "petado de informo pri mekanismo malsukcesis (%d)" #: src/gss.c:342 src/gss.c:483 #, fuzzy, c-format msgid "inquiring mechanism for SASL name (%d/%d)" msgstr "indikado de mekanismoj malsukcesis (%d)" #: src/gss.c:355 src/gss.c:498 #, c-format msgid "could not import server name \"%s\" (%d/%d)" msgstr "" #: src/gss.c:374 #, fuzzy, c-format msgid "initializing security context failed (%d/%d)" msgstr "montrigo de stat-kodo malsukcesis (%d)" #: src/gss.c:378 src/gss.c:564 #, c-format msgid "base64 input too long" msgstr "" #: src/gss.c:380 src/gss.c:415 src/gss.c:545 src/gss.c:566 #, c-format msgid "malloc" msgstr "" #: src/gss.c:407 src/gss.c:537 #, c-format msgid "getline" msgstr "" #: src/gss.c:409 src/gss.c:539 #, c-format msgid "end of file" msgstr "" #: src/gss.c:413 src/gss.c:543 #, c-format msgid "base64 fail" msgstr "" #: src/gss.c:520 #, c-format msgid "could not acquire server credentials (%d/%d)" msgstr "" #: src/gss.c:560 #, fuzzy, c-format msgid "accepting security context failed (%d/%d)" msgstr "montrigo de stat-kodo malsukcesis (%d)" gss-1.0.3/po/gss.pot0000644000000000000000000001731712415507644011155 00000000000000# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Simon Josefsson # This file is distributed under the same license as the PACKAGE package. # FIRST AUTHOR , YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: gss 1.0.3\n" "Report-Msgid-Bugs-To: bug-gss@gnu.org\n" "POT-Creation-Date: 2014-10-09 15:37+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME \n" "Language-Team: LANGUAGE \n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" #: lib/meta.c:37 msgid "Kerberos V5 GSS-API mechanism" msgstr "" #: lib/error.c:37 msgid "A required input parameter could not be read" msgstr "" #: lib/error.c:39 msgid "A required output parameter could not be written" msgstr "" #: lib/error.c:41 msgid "A parameter was malformed" msgstr "" #: lib/error.c:46 msgid "An unsupported mechanism was requested" msgstr "" #: lib/error.c:48 msgid "An invalid name was supplied" msgstr "" #: lib/error.c:50 msgid "A supplied name was of an unsupported type" msgstr "" #: lib/error.c:52 msgid "Incorrect channel bindings were supplied" msgstr "" #: lib/error.c:54 msgid "An invalid status code was supplied" msgstr "" #: lib/error.c:56 msgid "A token had an invalid MIC" msgstr "" #: lib/error.c:58 msgid "" "No credentials were supplied, or the credentials were unavailable or " "inaccessible" msgstr "" #: lib/error.c:61 msgid "No context has been established" msgstr "" #: lib/error.c:63 msgid "A token was invalid" msgstr "" #: lib/error.c:65 msgid "A credential was invalid" msgstr "" #: lib/error.c:67 msgid "The referenced credentials have expired" msgstr "" #: lib/error.c:69 msgid "The context has expired" msgstr "" #: lib/error.c:71 msgid "Unspecified error in underlying mechanism" msgstr "" #: lib/error.c:73 msgid "The quality-of-protection requested could not be provided" msgstr "" #: lib/error.c:75 msgid "The operation is forbidden by local security policy" msgstr "" #: lib/error.c:77 msgid "The operation or option is unavailable" msgstr "" #: lib/error.c:79 msgid "The requested credential element already exists" msgstr "" #: lib/error.c:81 msgid "The provided name was not a mechanism name" msgstr "" #: lib/error.c:86 msgid "" "The gss_init_sec_context() or gss_accept_sec_context() function must be " "called again to complete its function" msgstr "" #: lib/error.c:89 msgid "The token was a duplicate of an earlier token" msgstr "" #: lib/error.c:91 msgid "The token's validity period has expired" msgstr "" #: lib/error.c:93 msgid "A later token has already been processed" msgstr "" #: lib/error.c:95 msgid "An expected per-message token was not received" msgstr "" #: lib/error.c:312 msgid "No error" msgstr "" #: lib/krb5/error.c:36 msgid "No @ in SERVICE-NAME name string" msgstr "" #: lib/krb5/error.c:38 msgid "STRING-UID-NAME contains nondigits" msgstr "" #: lib/krb5/error.c:40 msgid "UID does not resolve to username" msgstr "" #: lib/krb5/error.c:42 msgid "Validation error" msgstr "" #: lib/krb5/error.c:44 msgid "Couldn't allocate gss_buffer_t data" msgstr "" #: lib/krb5/error.c:46 msgid "Message context invalid" msgstr "" #: lib/krb5/error.c:48 msgid "Buffer is the wrong size" msgstr "" #: lib/krb5/error.c:50 msgid "Credential usage type is unknown" msgstr "" #: lib/krb5/error.c:52 msgid "Unknown quality of protection specified" msgstr "" #: lib/krb5/error.c:55 msgid "Principal in credential cache does not match desired name" msgstr "" #: lib/krb5/error.c:57 msgid "No principal in keytab matches desired name" msgstr "" #: lib/krb5/error.c:59 msgid "Credential cache has no TGT" msgstr "" #: lib/krb5/error.c:61 msgid "Authenticator has no subkey" msgstr "" #: lib/krb5/error.c:63 msgid "Context is already fully established" msgstr "" #: lib/krb5/error.c:65 msgid "Unknown signature type in token" msgstr "" #: lib/krb5/error.c:67 msgid "Invalid field length in token" msgstr "" #: lib/krb5/error.c:69 msgid "Attempt to use incomplete security context" msgstr "" #: lib/krb5/error.c:86 msgid "No krb5 error" msgstr "" #: lib/krb5/error.c:127 msgid "Unknown krb5 error" msgstr "" #: src/gss.c:67 #, c-format msgid "Try `%s --help' for more information.\n" msgstr "" #: src/gss.c:71 #, c-format msgid "Usage: %s OPTIONS...\n" msgstr "" #: src/gss.c:74 msgid "" "Command line interface to GSS, used to explain error codes.\n" "\n" msgstr "" #: src/gss.c:78 msgid "" "Mandatory arguments to long options are mandatory for short options too.\n" msgstr "" #: src/gss.c:81 msgid "" " -h, --help Print help and exit.\n" " -V, --version Print version and exit.\n" " -l, --list-mechanisms\n" " List information about supported mechanisms\n" " in a human readable format.\n" " -m, --major=LONG Describe a `major status' error code value.\n" msgstr "" #: src/gss.c:89 msgid "" " -a, --accept-sec-context[=MECH]\n" " Accept a security context as server.\n" " If MECH is not specified, no credentials\n" " will be acquired. Use \"*\" to use library\n" " default mechanism.\n" " -i, --init-sec-context=MECH\n" " Initialize a security context as client.\n" " MECH is the SASL name of mechanism, use -l\n" " to list supported mechanisms.\n" " -n, --server-name=SERVICE@HOSTNAME\n" " For -i and -a, set the name of the remote host.\n" " For example, \"imap@mail.example.com\".\n" msgstr "" #: src/gss.c:103 msgid " -q, --quiet Silent operation (default=off).\n" msgstr "" #: src/gss.c:122 #, c-format msgid "" "GSS-API major status code %ld (0x%lx).\n" "\n" msgstr "" #: src/gss.c:124 #, c-format msgid "" " MSB LSB\n" " +-----------------+-----------------+---------------------------------+\n" " | Calling Error | Routine Error | Supplementary Info |\n" " | " msgstr "" #: src/gss.c:138 #, c-format msgid "" "|\n" " +-----------------+-----------------+---------------------------------+\n" "Bit 31 24 23 16 15 0\n" "\n" msgstr "" #: src/gss.c:148 #, c-format msgid "Masked routine error %ld (0x%lx) shifted into %ld (0x%lx):\n" msgstr "" #: src/gss.c:164 src/gss.c:198 src/gss.c:234 #, c-format msgid "displaying status code failed (%d)" msgstr "" #: src/gss.c:184 #, c-format msgid "Masked calling error %ld (0x%lx) shifted into %ld (0x%lx):\n" msgstr "" #: src/gss.c:217 #, c-format msgid "Masked supplementary info %ld (0x%lx) shifted into %ld (0x%lx):\n" msgstr "" #: src/gss.c:251 #, c-format msgid "No error\n" msgstr "" #: src/gss.c:269 #, c-format msgid "indicating mechanisms failed (%d)" msgstr "" #: src/gss.c:285 #, c-format msgid "inquiring information about mechanism failed (%d)" msgstr "" #: src/gss.c:342 src/gss.c:483 #, c-format msgid "inquiring mechanism for SASL name (%d/%d)" msgstr "" #: src/gss.c:355 src/gss.c:498 #, c-format msgid "could not import server name \"%s\" (%d/%d)" msgstr "" #: src/gss.c:374 #, c-format msgid "initializing security context failed (%d/%d)" msgstr "" #: src/gss.c:378 src/gss.c:564 #, c-format msgid "base64 input too long" msgstr "" #: src/gss.c:380 src/gss.c:415 src/gss.c:545 src/gss.c:566 #, c-format msgid "malloc" msgstr "" #: src/gss.c:407 src/gss.c:537 #, c-format msgid "getline" msgstr "" #: src/gss.c:409 src/gss.c:539 #, c-format msgid "end of file" msgstr "" #: src/gss.c:413 src/gss.c:543 #, c-format msgid "base64 fail" msgstr "" #: src/gss.c:520 #, c-format msgid "could not acquire server credentials (%d/%d)" msgstr "" #: src/gss.c:560 #, c-format msgid "accepting security context failed (%d/%d)" msgstr "" gss-1.0.3/po/zh_CN.po0000644000000000000000000002623112415507644011171 00000000000000# Chinese translations for gss package. # Copyright (C) 2008 Free Software Foundation, Inc. # This file is distributed under the same license as the gss package. # Ji ZhengYu , 2008. # msgid "" msgstr "" "Project-Id-Version: gss 1.0.1\n" "Report-Msgid-Bugs-To: bug-gss@gnu.org\n" "POT-Creation-Date: 2014-10-09 15:37+0200\n" "PO-Revision-Date: 2011-01-12 21:21中国标准时间\n" "Last-Translator: Ji ZhengYu \n" "Language-Team: Chinese (simplified) \n" "Language: zh_CN\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: lib/meta.c:37 msgid "Kerberos V5 GSS-API mechanism" msgstr "Kerberos V5 GSS-API 机制" #: lib/error.c:37 msgid "A required input parameter could not be read" msgstr "æ— æ³•è¯»å–æ‰€éœ€çš„è¾“å…¥å‚æ•°" #: lib/error.c:39 msgid "A required output parameter could not be written" msgstr "æ— æ³•å†™å…¥æ‰€éœ€çš„è¾“å‡ºå‚æ•°" #: lib/error.c:41 msgid "A parameter was malformed" msgstr "傿•°å½¢å¼é”™è¯¯" #: lib/error.c:46 msgid "An unsupported mechanism was requested" msgstr "è¯·æ±‚äº†ä¸€ä¸ªä¸æ”¯æŒçš„æœºåˆ¶" #: lib/error.c:48 msgid "An invalid name was supplied" msgstr "æä¾›äº†æ— æ•ˆçš„åç§°" #: lib/error.c:50 msgid "A supplied name was of an unsupported type" msgstr "所æä¾›çš„å字是一ç§ä¸æ”¯æŒçš„类型" #: lib/error.c:52 msgid "Incorrect channel bindings were supplied" msgstr "æä¾›äº†é”™è¯¯çš„绑定通é“" #: lib/error.c:54 msgid "An invalid status code was supplied" msgstr "æä¾›äº†æ— æ•ˆçš„状æ€ç " #: lib/error.c:56 msgid "A token had an invalid MIC" msgstr "有个标识拥有无效的 MIC" #: lib/error.c:58 msgid "" "No credentials were supplied, or the credentials were unavailable or " "inaccessible" msgstr "未æä¾›è¯ä¹¦ï¼Œæˆ–是è¯ä¹¦ä¸å¯ç”¨æˆ–无法访问" #: lib/error.c:61 msgid "No context has been established" msgstr "尚未创建内容" #: lib/error.c:63 msgid "A token was invalid" msgstr "标识无效" #: lib/error.c:65 msgid "A credential was invalid" msgstr "è¯ä¹¦æ— æ•ˆ" #: lib/error.c:67 msgid "The referenced credentials have expired" msgstr "å…³è”è¯ä¹¦è¿‡æœŸäº†" #: lib/error.c:69 msgid "The context has expired" msgstr "内容过期了" #: lib/error.c:71 msgid "Unspecified error in underlying mechanism" msgstr "åº•å±‚æœºåˆ¶ä¸­æœ‰ä¸æ˜Žé”™è¯¯" #: lib/error.c:73 msgid "The quality-of-protection requested could not be provided" msgstr "无法æä¾›æ‰€éœ€è¦çš„ä¿æŠ¤ç­‰çº§" #: lib/error.c:75 msgid "The operation is forbidden by local security policy" msgstr "æœ¬åœ°å®‰å…¨æœºåˆ¶ç¦æ­¢äº†æ­¤é¡¹æ“作" #: lib/error.c:77 msgid "The operation or option is unavailable" msgstr "æ­¤æ“作或选项ä¸å¯ç”¨" #: lib/error.c:79 msgid "The requested credential element already exists" msgstr "所需è¯ä¹¦ç»„ä»¶å·²ç»å­˜åœ¨" #: lib/error.c:81 msgid "The provided name was not a mechanism name" msgstr "所æä¾›çš„åç§°ä¸æ˜¯ä¿æŠ¤æœºåˆ¶çš„åç§°" #: lib/error.c:86 msgid "" "The gss_init_sec_context() or gss_accept_sec_context() function must be " "called again to complete its function" msgstr "" "è¦å®Œæˆå®ƒçš„åŠŸèƒ½å¿…é¡»å†æ¬¡è°ƒç”¨ gss_init_sec_context() 或 gss_accept_sec_context()" "函数" #: lib/error.c:89 msgid "The token was a duplicate of an earlier token" msgstr "此标识是一个更早期标识的镜åƒ" #: lib/error.c:91 msgid "The token's validity period has expired" msgstr "标识已超过了有效期" #: lib/error.c:93 msgid "A later token has already been processed" msgstr "å·²ç»å¤„ç†äº†ä¸€ä¸ªè¾ƒæ–°çš„æ ‡è¯†" #: lib/error.c:95 msgid "An expected per-message token was not received" msgstr "所需的 per-message 标识ä¸è¢«æŽ¥å—" #: lib/error.c:312 msgid "No error" msgstr "没有错误" #: lib/krb5/error.c:36 msgid "No @ in SERVICE-NAME name string" msgstr "在 SERVICE-NAME 字符串中没有 @" #: lib/krb5/error.c:38 msgid "STRING-UID-NAME contains nondigits" msgstr "STRING-UID-NAME 包å«éžæ•°å­—字符" #: lib/krb5/error.c:40 msgid "UID does not resolve to username" msgstr "UID 无法解æžä¸ºç”¨æˆ·å" #: lib/krb5/error.c:42 msgid "Validation error" msgstr "验è¯é”™è¯¯" #: lib/krb5/error.c:44 msgid "Couldn't allocate gss_buffer_t data" msgstr "æ— æ³•åˆ†é… gss_buffer_t data" #: lib/krb5/error.c:46 msgid "Message context invalid" msgstr "ä¿¡æ¯å†…容无效" #: lib/krb5/error.c:48 msgid "Buffer is the wrong size" msgstr "缓冲区大å°é”™è¯¯" #: lib/krb5/error.c:50 msgid "Credential usage type is unknown" msgstr "è¯ä¹¦ä½¿ç”¨ç±»åž‹æœªçŸ¥" #: lib/krb5/error.c:52 msgid "Unknown quality of protection specified" msgstr "æ‰€æŒ‡å®šçš„ä¿æŠ¤ç­‰çº§æœªçŸ¥" #: lib/krb5/error.c:55 msgid "Principal in credential cache does not match desired name" msgstr "è¯ä¹¦ç¼“存中的委托人与所è¦çš„åå­—ä¸åŒ¹é…" #: lib/krb5/error.c:57 msgid "No principal in keytab matches desired name" msgstr "keytab 中的委托人没有一个与所è¦çš„å字匹é…çš„" #: lib/krb5/error.c:59 msgid "Credential cache has no TGT" msgstr "è¯ä¹¦ç¼“存无 TGT" #: lib/krb5/error.c:61 msgid "Authenticator has no subkey" msgstr "éªŒè¯æ–¹æ²¡æœ‰å­å¯†é’¥" #: lib/krb5/error.c:63 msgid "Context is already fully established" msgstr "内容已ç»å®Œå…¨åˆ›å»ºå¥½äº†" #: lib/krb5/error.c:65 msgid "Unknown signature type in token" msgstr "标识中的签å类型未知" #: lib/krb5/error.c:67 msgid "Invalid field length in token" msgstr "标识中的域长度无效" #: lib/krb5/error.c:69 msgid "Attempt to use incomplete security context" msgstr "å°è¯•使用ä¸å®Œæ•´çš„安全内容" #: lib/krb5/error.c:86 msgid "No krb5 error" msgstr "错误: 找ä¸åˆ° krb5 æœåС噍" #: lib/krb5/error.c:127 msgid "Unknown krb5 error" msgstr "错误: 未知的 krb5 æœåС噍" #: src/gss.c:67 #, c-format msgid "Try `%s --help' for more information.\n" msgstr "å°è¯•用‘%s --help’æ¥èŽ·å–æ›´å¤šä¿¡æ¯ã€‚\n" #: src/gss.c:71 #, c-format msgid "Usage: %s OPTIONS...\n" msgstr "用法: %s 选项...\n" #: src/gss.c:74 msgid "" "Command line interface to GSS, used to explain error codes.\n" "\n" msgstr "" "GSS 命令行接å£ï¼Œç”¨äºŽè§£é‡Šé”™è¯¯ä»£ç ã€‚\n" "\n" #: src/gss.c:78 msgid "" "Mandatory arguments to long options are mandatory for short options too.\n" msgstr "é•¿é€‰é¡¹æ‰€å¿…é¡»çš„å‚æ•°çŸ­é€‰é¡¹ä¹Ÿæ˜¯å¿…须的。\n" #: src/gss.c:81 msgid "" " -h, --help Print help and exit.\n" " -V, --version Print version and exit.\n" " -l, --list-mechanisms\n" " List information about supported mechanisms\n" " in a human readable format.\n" " -m, --major=LONG Describe a `major status' error code value.\n" msgstr "" " -h, --help 显示帮助并退出\n" " -V, --version 显示版本信æ¯å¹¶é€€å‡º\n" " -l, --list-mechanisms\n" " 以易读的形å¼\n" " 列出所支æŒçš„加密方å¼ä¿¡æ¯\n" " -m, --major=LONG æè¿°ä¸€ä¸ªä¸»çжæ€é”™è¯¯ä»£ç \n" #: src/gss.c:89 msgid "" " -a, --accept-sec-context[=MECH]\n" " Accept a security context as server.\n" " If MECH is not specified, no credentials\n" " will be acquired. Use \"*\" to use library\n" " default mechanism.\n" " -i, --init-sec-context=MECH\n" " Initialize a security context as client.\n" " MECH is the SASL name of mechanism, use -l\n" " to list supported mechanisms.\n" " -n, --server-name=SERVICE@HOSTNAME\n" " For -i and -a, set the name of the remote host.\n" " For example, \"imap@mail.example.com\".\n" msgstr "" #: src/gss.c:103 msgid " -q, --quiet Silent operation (default=off).\n" msgstr " -q, --quiet æ“作时无显示(默认关闭)\n" #: src/gss.c:122 #, c-format msgid "" "GSS-API major status code %ld (0x%lx).\n" "\n" msgstr "" "GSS-API 主状æ€ç  %ld (0x%lx)。\n" "\n" #: src/gss.c:124 #, c-format msgid "" " MSB LSB\n" " +-----------------+-----------------+---------------------------------+\n" " | Calling Error | Routine Error | Supplementary Info |\n" " | " msgstr "" " MSB LSB\n" " +-----------------+-----------------+---------------------------------+\n" " | 调用错误 | 路由错误 | å¤‡æ³¨ä¿¡æ¯ |\n" " | " #: src/gss.c:138 #, c-format msgid "" "|\n" " +-----------------+-----------------+---------------------------------+\n" "Bit 31 24 23 16 15 0\n" "\n" msgstr "" "|\n" " +-----------------+-----------------+---------------------------------+\n" "ä½å…ƒ31 24 23 16 15 0\n" "\n" #: src/gss.c:148 #, c-format msgid "Masked routine error %ld (0x%lx) shifted into %ld (0x%lx):\n" msgstr "éšè”½çš„路由错误 %ld (0x%lx) 被移入 %ld (0x%lx):\n" #: src/gss.c:164 src/gss.c:198 src/gss.c:234 #, c-format msgid "displaying status code failed (%d)" msgstr "显示状æ€ç æ—¶å‡ºé”™ (%d)" #: src/gss.c:184 #, c-format msgid "Masked calling error %ld (0x%lx) shifted into %ld (0x%lx):\n" msgstr "éšè”½çš„调用错误 %ld (0x%lx) 被移入 %ld (0x%lx):\n" #: src/gss.c:217 #, c-format msgid "Masked supplementary info %ld (0x%lx) shifted into %ld (0x%lx):\n" msgstr "éšè”½çš„备注信æ¯é”™è¯¯ %ld (0x%lx) 被移入 %ld (0x%lx):\n" #: src/gss.c:251 #, c-format msgid "No error\n" msgstr "没有错误\n" #: src/gss.c:269 #, c-format msgid "indicating mechanisms failed (%d)" msgstr "æ­£æ˜¾ç¤ºåŠ å¯†æ–¹å¼æ—¶å‡ºé”™ (%d)" #: src/gss.c:285 #, c-format msgid "inquiring information about mechanism failed (%d)" msgstr "正查寻加密方å¼ä¿¡æ¯æ—¶å‡ºé”™ (%d)" #: src/gss.c:342 src/gss.c:483 #, fuzzy, c-format msgid "inquiring mechanism for SASL name (%d/%d)" msgstr "æ­£æ˜¾ç¤ºåŠ å¯†æ–¹å¼æ—¶å‡ºé”™ (%d)" #: src/gss.c:355 src/gss.c:498 #, c-format msgid "could not import server name \"%s\" (%d/%d)" msgstr "" #: src/gss.c:374 #, fuzzy, c-format msgid "initializing security context failed (%d/%d)" msgstr "显示状æ€ç æ—¶å‡ºé”™ (%d)" #: src/gss.c:378 src/gss.c:564 #, c-format msgid "base64 input too long" msgstr "" #: src/gss.c:380 src/gss.c:415 src/gss.c:545 src/gss.c:566 #, c-format msgid "malloc" msgstr "" #: src/gss.c:407 src/gss.c:537 #, c-format msgid "getline" msgstr "" #: src/gss.c:409 src/gss.c:539 #, c-format msgid "end of file" msgstr "" #: src/gss.c:413 src/gss.c:543 #, c-format msgid "base64 fail" msgstr "" #: src/gss.c:520 #, c-format msgid "could not acquire server credentials (%d/%d)" msgstr "" #: src/gss.c:560 #, fuzzy, c-format msgid "accepting security context failed (%d/%d)" msgstr "显示状æ€ç æ—¶å‡ºé”™ (%d)" #~ msgid "" #~ " -h, --help Print help and exit\n" #~ " -V, --version Print version and exit\n" #~ " -m, --major=LONG Describe a `major status' error code vaue in plain " #~ "text.\n" #~ " -q, --quiet Silent operation (default=off)\n" #~ msgstr "" #~ " -h, --help 打å°å¸®åŠ©å¹¶é€€å‡º\n" #~ " -V, --version 打å°ç‰ˆæœ¬å¹¶é€€å‡º\n" #~ " -m, --major=LONG 以普通文件æè¿°`主状æ€é”™è¯¯ä»£ç ã€‚\n" #~ " -q, --quiet 无输出模å¼(默认=off)\n" #~ msgid "%s: missing parameter\n" #~ msgstr "%s: ç¼ºå°‘å‚æ•°\n" gss-1.0.3/po/sv.po0000644000000000000000000002424012415507644010616 00000000000000# Swedish translation of GSS. # Copyright (C) 2008 Free Software Foundation, Inc. # This file is distributed under the same license as the gss package. # Simon Josefsson , 2004-2007. # Christer Andersson , 2008. # msgid "" msgstr "" "Project-Id-Version: gss 0.0.22\n" "Report-Msgid-Bugs-To: bug-gss@gnu.org\n" "POT-Creation-Date: 2014-10-09 15:37+0200\n" "PO-Revision-Date: 2008-01-17 08:19+0100\n" "Last-Translator: Christer Andersson \n" "Language-Team: Swedish \n" "Language: sv\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=ISO-8859-1\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: lib/meta.c:37 msgid "Kerberos V5 GSS-API mechanism" msgstr "" #: lib/error.c:37 msgid "A required input parameter could not be read" msgstr "Nödvändig indata kunde ej läsas" #: lib/error.c:39 msgid "A required output parameter could not be written" msgstr "Nödvändig utdata kunde ej skrivas" #: lib/error.c:41 msgid "A parameter was malformed" msgstr "Parameter felaktig" #: lib/error.c:46 msgid "An unsupported mechanism was requested" msgstr "Efterfrågad mekanism stöds ej" #: lib/error.c:48 msgid "An invalid name was supplied" msgstr "Felaktigt namn angiven" #: lib/error.c:50 msgid "A supplied name was of an unsupported type" msgstr "Typen på angivet namn stöds ej" #: lib/error.c:52 msgid "Incorrect channel bindings were supplied" msgstr "Ogiltig kanalbindning angiven" #: lib/error.c:54 msgid "An invalid status code was supplied" msgstr "Felaktig statuskod angiven" #: lib/error.c:56 msgid "A token had an invalid MIC" msgstr "Meddelande har felaktig integritetskontroll" #: lib/error.c:58 msgid "" "No credentials were supplied, or the credentials were unavailable or " "inaccessible" msgstr "" "Ingen credential tillgänglig, eller så var angiven credential otillgänglig" #: lib/error.c:61 msgid "No context has been established" msgstr "Ingen säkerhetskontext har upprättats" #: lib/error.c:63 msgid "A token was invalid" msgstr "Meddelande felaktig" #: lib/error.c:65 msgid "A credential was invalid" msgstr "Credential felaktig" #: lib/error.c:67 msgid "The referenced credentials have expired" msgstr "Angiven credential har gått ut" #: lib/error.c:69 msgid "The context has expired" msgstr "Giltighetstiden för säkerhetskontext har gått ut" #: lib/error.c:71 msgid "Unspecified error in underlying mechanism" msgstr "Okänt fel i underliggande mekanism" #: lib/error.c:73 msgid "The quality-of-protection requested could not be provided" msgstr "Efterfrågad skyddsnivå kan inte tillhandahållas" #: lib/error.c:75 msgid "The operation is forbidden by local security policy" msgstr "Funktionen förbjuden av lokal säkerhetspolicy" #: lib/error.c:77 msgid "The operation or option is unavailable" msgstr "Funktion eller parameter är inte tillgänglig" #: lib/error.c:79 msgid "The requested credential element already exists" msgstr "Efterfrågad credential existerar redan" #: lib/error.c:81 msgid "The provided name was not a mechanism name" msgstr "Givet namn är inte ett mekanism-namn" #: lib/error.c:86 msgid "" "The gss_init_sec_context() or gss_accept_sec_context() function must be " "called again to complete its function" msgstr "" "Funktionerna gss_init_sec_context() eller gss_accept_sec_context() måste " "anropas igen för att fullfölja operationen" #: lib/error.c:89 msgid "The token was a duplicate of an earlier token" msgstr "Meddelandet är en dubblett" #: lib/error.c:91 msgid "The token's validity period has expired" msgstr "Meddelandets giltighetstid har gått ut" #: lib/error.c:93 msgid "A later token has already been processed" msgstr "Senare meddelande redan behandlat" #: lib/error.c:95 msgid "An expected per-message token was not received" msgstr "Tidigare meddelande inte mottaget" #: lib/error.c:312 msgid "No error" msgstr "Inget fel" #: lib/krb5/error.c:36 msgid "No @ in SERVICE-NAME name string" msgstr "Tecknet @ saknas i SERVICE-NAME namnsträng" #: lib/krb5/error.c:38 msgid "STRING-UID-NAME contains nondigits" msgstr "STRING-UID-NAME innehåller ickesiffror" #: lib/krb5/error.c:40 msgid "UID does not resolve to username" msgstr "UID identifierar inget användarnamn" #: lib/krb5/error.c:42 msgid "Validation error" msgstr "Valideringsfel" #: lib/krb5/error.c:44 msgid "Couldn't allocate gss_buffer_t data" msgstr "Kan inte allokera gss_buffer_t data" #: lib/krb5/error.c:46 msgid "Message context invalid" msgstr "Ogiltig Meddelandekontext" #: lib/krb5/error.c:48 msgid "Buffer is the wrong size" msgstr "Buffer har fel storlek" #: lib/krb5/error.c:50 msgid "Credential usage type is unknown" msgstr "Credential har okänd typ" #: lib/krb5/error.c:52 msgid "Unknown quality of protection specified" msgstr "Okänd skyddsnivå begärd" #: lib/krb5/error.c:55 msgid "Principal in credential cache does not match desired name" msgstr "Namn på credential matchar inte begärt namn" #: lib/krb5/error.c:57 msgid "No principal in keytab matches desired name" msgstr "Inget namn i nyckelfil matchar begärt namn" #: lib/krb5/error.c:59 msgid "Credential cache has no TGT" msgstr "Credential-cache har ingen TGT" #: lib/krb5/error.c:61 msgid "Authenticator has no subkey" msgstr "Autenticerare har ingen nyckel" #: lib/krb5/error.c:63 msgid "Context is already fully established" msgstr "Ingen säkerhetskontext har upprättats" #: lib/krb5/error.c:65 msgid "Unknown signature type in token" msgstr "Okänd signaturtyp i token" #: lib/krb5/error.c:67 msgid "Invalid field length in token" msgstr "Felaktigt längdfält i token" #: lib/krb5/error.c:69 msgid "Attempt to use incomplete security context" msgstr "Försökte använda ofullständig säkerhetskontext" #: lib/krb5/error.c:86 msgid "No krb5 error" msgstr "Inget krb5 fel" #: lib/krb5/error.c:127 msgid "Unknown krb5 error" msgstr "Okänt krb5 fel" #: src/gss.c:67 #, c-format msgid "Try `%s --help' for more information.\n" msgstr "Försök med `%s --help' för mer information.\n" #: src/gss.c:71 #, c-format msgid "Usage: %s OPTIONS...\n" msgstr "" #: src/gss.c:74 msgid "" "Command line interface to GSS, used to explain error codes.\n" "\n" msgstr "" #: src/gss.c:78 msgid "" "Mandatory arguments to long options are mandatory for short options too.\n" msgstr "" #: src/gss.c:81 msgid "" " -h, --help Print help and exit.\n" " -V, --version Print version and exit.\n" " -l, --list-mechanisms\n" " List information about supported mechanisms\n" " in a human readable format.\n" " -m, --major=LONG Describe a `major status' error code value.\n" msgstr "" #: src/gss.c:89 msgid "" " -a, --accept-sec-context[=MECH]\n" " Accept a security context as server.\n" " If MECH is not specified, no credentials\n" " will be acquired. Use \"*\" to use library\n" " default mechanism.\n" " -i, --init-sec-context=MECH\n" " Initialize a security context as client.\n" " MECH is the SASL name of mechanism, use -l\n" " to list supported mechanisms.\n" " -n, --server-name=SERVICE@HOSTNAME\n" " For -i and -a, set the name of the remote host.\n" " For example, \"imap@mail.example.com\".\n" msgstr "" #: src/gss.c:103 msgid " -q, --quiet Silent operation (default=off).\n" msgstr "" #: src/gss.c:122 #, c-format msgid "" "GSS-API major status code %ld (0x%lx).\n" "\n" msgstr "" "GSS-API huvudstatuskod %ld (0x%lx).\n" "\n" #: src/gss.c:124 #, c-format msgid "" " MSB LSB\n" " +-----------------+-----------------+---------------------------------+\n" " | Calling Error | Routine Error | Supplementary Info |\n" " | " msgstr "" " MSB LSB\n" " +-----------------+-----------------+---------------------------------+\n" " | Anropsfel | Funktionsfel | Tilläggsinformation |\n" " | " #: src/gss.c:138 #, c-format msgid "" "|\n" " +-----------------+-----------------+---------------------------------+\n" "Bit 31 24 23 16 15 0\n" "\n" msgstr "" "|\n" " +-----------------+-----------------+---------------------------------+\n" "Bit 31 24 23 16 15 0\n" "\n" #: src/gss.c:148 #, c-format msgid "Masked routine error %ld (0x%lx) shifted into %ld (0x%lx):\n" msgstr "Maskat funktionsfel %ld (0x%lx) skiftad till %ld (0x%lx):\n" #: src/gss.c:164 src/gss.c:198 src/gss.c:234 #, fuzzy, c-format msgid "displaying status code failed (%d)" msgstr "%s: visning av statuskod misslyckades\n" #: src/gss.c:184 #, c-format msgid "Masked calling error %ld (0x%lx) shifted into %ld (0x%lx):\n" msgstr "Maskat anropsfel %ld (0x%lx) skiftad till %ld (0x%lx):\n" #: src/gss.c:217 #, c-format msgid "Masked supplementary info %ld (0x%lx) shifted into %ld (0x%lx):\n" msgstr "Maskad tillägssinformation %ld (0x%lx) skiftad till %ld (0x%lx):\n" #: src/gss.c:251 #, c-format msgid "No error\n" msgstr "Inget fel\n" #: src/gss.c:269 #, c-format msgid "indicating mechanisms failed (%d)" msgstr "" #: src/gss.c:285 #, c-format msgid "inquiring information about mechanism failed (%d)" msgstr "" #: src/gss.c:342 src/gss.c:483 #, c-format msgid "inquiring mechanism for SASL name (%d/%d)" msgstr "" #: src/gss.c:355 src/gss.c:498 #, c-format msgid "could not import server name \"%s\" (%d/%d)" msgstr "" #: src/gss.c:374 #, c-format msgid "initializing security context failed (%d/%d)" msgstr "" #: src/gss.c:378 src/gss.c:564 #, c-format msgid "base64 input too long" msgstr "" #: src/gss.c:380 src/gss.c:415 src/gss.c:545 src/gss.c:566 #, c-format msgid "malloc" msgstr "" #: src/gss.c:407 src/gss.c:537 #, c-format msgid "getline" msgstr "" #: src/gss.c:409 src/gss.c:539 #, c-format msgid "end of file" msgstr "" #: src/gss.c:413 src/gss.c:543 #, c-format msgid "base64 fail" msgstr "" #: src/gss.c:520 #, c-format msgid "could not acquire server credentials (%d/%d)" msgstr "" #: src/gss.c:560 #, c-format msgid "accepting security context failed (%d/%d)" msgstr "" #~ msgid "%s: missing parameter\n" #~ msgstr "%s: parameter saknas\n" gss-1.0.3/po/Makevars0000644000000000000000000000341712415507641011322 00000000000000# Makefile variables for PO directory in any package using GNU gettext. # Usually the message domain is the same as the package name. DOMAIN = $(PACKAGE) # These two variables depend on the location of this directory. subdir = po top_builddir = .. # These options get passed to xgettext. XGETTEXT_OPTIONS = --keyword=_ --keyword=N_ # This is the copyright holder that gets inserted into the header of the # $(DOMAIN).pot file. Set this to the copyright holder of the surrounding # package. (Note that the msgstr strings, extracted from the package's # sources, belong to the copyright holder of the package.) Translators are # expected to transfer the copyright for their translations to this person # or entity, or to disclaim their copyright. The empty string stands for # the public domain; in this case the translators are expected to disclaim # their copyright. COPYRIGHT_HOLDER = Simon Josefsson # This is the email address or URL to which the translators shall report # bugs in the untranslated strings: # - Strings which are not entire sentences, see the maintainer guidelines # in the GNU gettext documentation, section 'Preparing Strings'. # - Strings which use unclear terms or require additional context to be # understood. # - Strings which make invalid assumptions about notation of date, time or # money. # - Pluralisation problems. # - Incorrect English spelling. # - Incorrect formatting. # It can be your email address, or a mailing list address where translators # can write to without being subscribed, or the URL of a web page through # which the translators can contact you. MSGID_BUGS_ADDRESS = bug-gss@gnu.org # This is the list of locale categories, beyond LC_MESSAGES, for which the # message catalogs shall be used. It is usually empty. EXTRA_LOCALE_CATEGORIES = gss-1.0.3/po/fr.po0000644000000000000000000002674012415507644010604 00000000000000# Messages français pour GNU gss. # Copyright © 2010 Free Software Foundation, Inc. # Copyright (C) 2010 Simon Josefsson # This file is distributed under the same license as the gss package. # Michel Robitaille , traducteur depuis/since 1996. # Nicolas Provost , 2010. # msgid "" msgstr "" "Project-Id-Version: GNU gss 1.0.1\n" "Report-Msgid-Bugs-To: bug-gss@gnu.org\n" "POT-Creation-Date: 2014-10-09 15:37+0200\n" "PO-Revision-Date: 2010-12-21 10:59+0100\n" "Last-Translator: Nicolas Provost \n" "Language-Team: French \n" "Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=ISO-8859-1\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" #: lib/meta.c:37 msgid "Kerberos V5 GSS-API mechanism" msgstr "Mécanisme Kerberos V5 GSS-API" #: lib/error.c:37 msgid "A required input parameter could not be read" msgstr "Un paramètre requis à l'entrée n'a pas pu être lu" #: lib/error.c:39 msgid "A required output parameter could not be written" msgstr "Un paramètre requis à la sortie n'a pas pu être écrit" #: lib/error.c:41 msgid "A parameter was malformed" msgstr "Un paramètre était mal formé" #: lib/error.c:46 msgid "An unsupported mechanism was requested" msgstr "Un mécanisme non supporté était requis" #: lib/error.c:48 msgid "An invalid name was supplied" msgstr "Un nom invalide a été fourni" #: lib/error.c:50 msgid "A supplied name was of an unsupported type" msgstr "Un nom fourni était de type non supporté" #: lib/error.c:52 msgid "Incorrect channel bindings were supplied" msgstr "Une liaison incorrecte de canal a été fournie" #: lib/error.c:54 msgid "An invalid status code was supplied" msgstr "Un code d'état invalide a été fourni" #: lib/error.c:56 msgid "A token had an invalid MIC" msgstr "Un jeton a un MIC invalide" #: lib/error.c:58 msgid "" "No credentials were supplied, or the credentials were unavailable or " "inaccessible" msgstr "" "Aucune référence n'a été fournie ou les références n'étaient pas disponibles " "ou inaccessibles" #: lib/error.c:61 msgid "No context has been established" msgstr "Aucun contexte n'a été établi" #: lib/error.c:63 msgid "A token was invalid" msgstr "Un jeton était invalide" #: lib/error.c:65 msgid "A credential was invalid" msgstr "Une référence était invalide" #: lib/error.c:67 msgid "The referenced credentials have expired" msgstr "Les références fournies ont expirées" #: lib/error.c:69 msgid "The context has expired" msgstr "Le contexte a expiré" #: lib/error.c:71 msgid "Unspecified error in underlying mechanism" msgstr "Erreur non spécifiée dans le mécanisme sous-jacent" #: lib/error.c:73 msgid "The quality-of-protection requested could not be provided" msgstr "La qualité de protection requise ne peut être fournie" #: lib/error.c:75 msgid "The operation is forbidden by local security policy" msgstr "L'opération est interdite par la politique locale de sécurité" #: lib/error.c:77 msgid "The operation or option is unavailable" msgstr "L'opération ou l'option n'est pas disponible" #: lib/error.c:79 msgid "The requested credential element already exists" msgstr "L'élément de référence requis existe déjà" #: lib/error.c:81 msgid "The provided name was not a mechanism name" msgstr "Le nom fourni n'est pas un nom de mécanisme" #: lib/error.c:86 msgid "" "The gss_init_sec_context() or gss_accept_sec_context() function must be " "called again to complete its function" msgstr "" "La fonction gss_init_sec_context() ou gss_accept_sec_context() doit être " "appellée à nous pour compléter la fonction" #: lib/error.c:89 msgid "The token was a duplicate of an earlier token" msgstr "Le jeton est le duplicata d'un jeton précédent" #: lib/error.c:91 msgid "The token's validity period has expired" msgstr "La période de validité du jeton a expiré" #: lib/error.c:93 msgid "A later token has already been processed" msgstr "Un jeton antérieur a déjà été traité" #: lib/error.c:95 msgid "An expected per-message token was not received" msgstr "Un jeton attendu par message n'a pas été reçu" #: lib/error.c:312 msgid "No error" msgstr "Aucune erreur" #: lib/krb5/error.c:36 msgid "No @ in SERVICE-NAME name string" msgstr "Aucun @ dans la chaîne du nom SERVICE-NAME" #: lib/krb5/error.c:38 msgid "STRING-UID-NAME contains nondigits" msgstr "STRING-UID-NAME ne contient aucun chiffre" #: lib/krb5/error.c:40 msgid "UID does not resolve to username" msgstr "UID ne peut permettre d'identifier le nom d'usager" #: lib/krb5/error.c:42 msgid "Validation error" msgstr "Erreur de validation" #: lib/krb5/error.c:44 msgid "Couldn't allocate gss_buffer_t data" msgstr "Impossible d'allouer le tampon de données gss_buffer_t" #: lib/krb5/error.c:46 msgid "Message context invalid" msgstr "Message de contexte non valide" #: lib/krb5/error.c:48 msgid "Buffer is the wrong size" msgstr "Le tampon est de taille erronée" #: lib/krb5/error.c:50 msgid "Credential usage type is unknown" msgstr "L'usage du type de référence est inconnu" #: lib/krb5/error.c:52 msgid "Unknown quality of protection specified" msgstr "La qualité de protection spécifiée est inconnue" #: lib/krb5/error.c:55 msgid "Principal in credential cache does not match desired name" msgstr "" "Le nom principal dans le cache des références ne concorde pas avec le nom " "recherché" #: lib/krb5/error.c:57 msgid "No principal in keytab matches desired name" msgstr "" "Aucun nom principal dans la table des clés ne concorde avec le nom recherché" #: lib/krb5/error.c:59 msgid "Credential cache has no TGT" msgstr "La cache des références n'a pas de TGT" #: lib/krb5/error.c:61 msgid "Authenticator has no subkey" msgstr "L'authentificateur n'a pas de sous-clé" #: lib/krb5/error.c:63 msgid "Context is already fully established" msgstr "Le contexte est déjà complètement établi" #: lib/krb5/error.c:65 msgid "Unknown signature type in token" msgstr "Type de signature inconnu dans le jeton" #: lib/krb5/error.c:67 msgid "Invalid field length in token" msgstr "Longueur invalide du champ dans le jeton" #: lib/krb5/error.c:69 msgid "Attempt to use incomplete security context" msgstr "Tentative d'utilisation d'un contexte incomplet de sécurité" #: lib/krb5/error.c:86 msgid "No krb5 error" msgstr "Pas d'erreur KRB5" #: lib/krb5/error.c:127 msgid "Unknown krb5 error" msgstr "Erreur KRB5 inconnue" #: src/gss.c:67 #, c-format msgid "Try `%s --help' for more information.\n" msgstr "Essayer `%s --help' pour plus d'information.\n" #: src/gss.c:71 #, c-format msgid "Usage: %s OPTIONS...\n" msgstr "Usage : %s OPTIONS...\n" #: src/gss.c:74 msgid "" "Command line interface to GSS, used to explain error codes.\n" "\n" msgstr "" "Interface en ligne de commande GSS, pour détailler les codes d'erreur.\n" "\n" #: src/gss.c:78 msgid "" "Mandatory arguments to long options are mandatory for short options too.\n" msgstr "" "Les arguments obligatoires des options longues le sont aussi pour les " "courtes.\n" #: src/gss.c:81 msgid "" " -h, --help Print help and exit.\n" " -V, --version Print version and exit.\n" " -l, --list-mechanisms\n" " List information about supported mechanisms\n" " in a human readable format.\n" " -m, --major=LONG Describe a `major status' error code value.\n" msgstr "" " -h, --help Affiche l'aide et quitte.\n" " -V, --version Affiche la version et quitte.\n" " -l, --list-mechanisms\n" " Liste des infos sur les mécanismes disponibles\n" " dans un format humainement compréhensible.\n" " -m, --major=LONG Décrit un code d'erreur d'état principal.\n" #: src/gss.c:89 msgid "" " -a, --accept-sec-context[=MECH]\n" " Accept a security context as server.\n" " If MECH is not specified, no credentials\n" " will be acquired. Use \"*\" to use library\n" " default mechanism.\n" " -i, --init-sec-context=MECH\n" " Initialize a security context as client.\n" " MECH is the SASL name of mechanism, use -l\n" " to list supported mechanisms.\n" " -n, --server-name=SERVICE@HOSTNAME\n" " For -i and -a, set the name of the remote host.\n" " For example, \"imap@mail.example.com\".\n" msgstr "" #: src/gss.c:103 msgid " -q, --quiet Silent operation (default=off).\n" msgstr " -q, --quiet Opère en silence (non par défaut).\n" #: src/gss.c:122 #, c-format msgid "" "GSS-API major status code %ld (0x%lx).\n" "\n" msgstr "" "GSS-API code majeur d'état %ld (0x%lx).\n" "\n" #: src/gss.c:124 #, c-format msgid "" " MSB LSB\n" " +-----------------+-----------------+---------------------------------+\n" " | Calling Error | Routine Error | Supplementary Info |\n" " | " msgstr "" " MSB LSB\n" " +-----------------+-----------------+---------------------------------+\n" " | Erreur appel |Routine erreur| Infos supplémentaires |\n" " | " #: src/gss.c:138 #, c-format msgid "" "|\n" " +-----------------+-----------------+---------------------------------+\n" "Bit 31 24 23 16 15 0\n" "\n" msgstr "" "|\n" " +-----------------+-----------------+---------------------------------+\n" "Bit 31 24 23 16 15 0\n" "\n" #: src/gss.c:148 #, c-format msgid "Masked routine error %ld (0x%lx) shifted into %ld (0x%lx):\n" msgstr "Erreur routine masquée %ld (0x%lx) décalé dans %ld (0x%lx):\n" #: src/gss.c:164 src/gss.c:198 src/gss.c:234 #, c-format msgid "displaying status code failed (%d)" msgstr "échec d'affichage du code d'état (%d)" #: src/gss.c:184 #, c-format msgid "Masked calling error %ld (0x%lx) shifted into %ld (0x%lx):\n" msgstr "Erreur d'appel masquée %ld (0x%lx) décalé dans %ld (0x%lx):\n" #: src/gss.c:217 #, c-format msgid "Masked supplementary info %ld (0x%lx) shifted into %ld (0x%lx):\n" msgstr "Infos supplémentaires masquées %ld (0x%lx) décalé dans %ld (0x%lx):\n" #: src/gss.c:251 #, c-format msgid "No error\n" msgstr "Aucune erreur\n" #: src/gss.c:269 #, c-format msgid "indicating mechanisms failed (%d)" msgstr "échec de récupération des mécanismes (%d)" #: src/gss.c:285 #, c-format msgid "inquiring information about mechanism failed (%d)" msgstr "impossible d'obtenir des informations sur le mécanisme (%d)" #: src/gss.c:342 src/gss.c:483 #, fuzzy, c-format msgid "inquiring mechanism for SASL name (%d/%d)" msgstr "échec de récupération des mécanismes (%d)" #: src/gss.c:355 src/gss.c:498 #, c-format msgid "could not import server name \"%s\" (%d/%d)" msgstr "" #: src/gss.c:374 #, fuzzy, c-format msgid "initializing security context failed (%d/%d)" msgstr "échec d'affichage du code d'état (%d)" #: src/gss.c:378 src/gss.c:564 #, c-format msgid "base64 input too long" msgstr "" #: src/gss.c:380 src/gss.c:415 src/gss.c:545 src/gss.c:566 #, c-format msgid "malloc" msgstr "" #: src/gss.c:407 src/gss.c:537 #, c-format msgid "getline" msgstr "" #: src/gss.c:409 src/gss.c:539 #, c-format msgid "end of file" msgstr "" #: src/gss.c:413 src/gss.c:543 #, c-format msgid "base64 fail" msgstr "" #: src/gss.c:520 #, c-format msgid "could not acquire server credentials (%d/%d)" msgstr "" #: src/gss.c:560 #, fuzzy, c-format msgid "accepting security context failed (%d/%d)" msgstr "échec d'affichage du code d'état (%d)" #~ msgid "%s: missing parameter\n" #~ msgstr "%s: paramètre manquant\n" gss-1.0.3/po/quot.sed0000644000000000000000000000023112415507605011302 00000000000000s/"\([^"]*\)"/“\1â€/g s/`\([^`']*\)'/‘\1’/g s/ '\([^`']*\)' / ‘\1’ /g s/ '\([^`']*\)'$/ ‘\1’/g s/^'\([^`']*\)' /‘\1’ /g s/“â€/""/g gss-1.0.3/po/hr.gmo0000644000000000000000000001775012415507644010753 00000000000000Þ•@Y€æh4†»(Ôý,0D*u ».Ïþ# &? *f ‘ ­ =Æ $ #) M i (Š (³ Ü ú I ;b ;ž @Ú  3 T Qt Æ Ï Ù +ç 9 "M p mˆ 3ö &**Q9|'¶/Þ-'<&d ‹¬'¿ç)1G"X!{1—Ïøgè`RI=œÚõ),)V$€¥¿&Ôû  75XŽ&¨VÏ'&&Nu+”)À ê" .MLAš>ÜC_zšD² ÷ B$?g2§Úpî/_"²HÒ *<%g1­.ß(%!N+pœ³"Ï)ò3—P%845;+. = 7/ , "!)0:@$19 ?*32<#-6>& (' MSB LSB +-----------------+-----------------+---------------------------------+ | Calling Error | Routine Error | Supplementary Info | | -h, --help Print help and exit. -V, --version Print version and exit. -l, --list-mechanisms List information about supported mechanisms in a human readable format. -m, --major=LONG Describe a `major status' error code value. -q, --quiet Silent operation (default=off). A credential was invalidA later token has already been processedA parameter was malformedA required input parameter could not be readA required output parameter could not be writtenA supplied name was of an unsupported typeA token had an invalid MICA token was invalidAn expected per-message token was not receivedAn invalid name was suppliedAn invalid status code was suppliedAn unsupported mechanism was requestedAttempt to use incomplete security contextAuthenticator has no subkeyBuffer is the wrong sizeCommand line interface to GSS, used to explain error codes. Context is already fully establishedCouldn't allocate gss_buffer_t dataCredential cache has no TGTCredential usage type is unknownGSS-API major status code %ld (0x%lx). Incorrect channel bindings were suppliedInvalid field length in tokenKerberos V5 GSS-API mechanismMandatory arguments to long options are mandatory for short options too. Masked calling error %ld (0x%lx) shifted into %ld (0x%lx): Masked routine error %ld (0x%lx) shifted into %ld (0x%lx): Masked supplementary info %ld (0x%lx) shifted into %ld (0x%lx): Message context invalidNo @ in SERVICE-NAME name stringNo context has been establishedNo credentials were supplied, or the credentials were unavailable or inaccessibleNo errorNo error No krb5 errorNo principal in keytab matches desired namePrincipal in credential cache does not match desired nameSTRING-UID-NAME contains nondigitsThe context has expiredThe gss_init_sec_context() or gss_accept_sec_context() function must be called again to complete its functionThe operation is forbidden by local security policyThe operation or option is unavailableThe provided name was not a mechanism nameThe quality-of-protection requested could not be providedThe referenced credentials have expiredThe requested credential element already existsThe token was a duplicate of an earlier tokenThe token's validity period has expiredTry `%s --help' for more information. UID does not resolve to usernameUnknown krb5 errorUnknown quality of protection specifiedUnknown signature type in tokenUnspecified error in underlying mechanismUsage: %s OPTIONS... Validation errordisplaying status code failed (%d)indicating mechanisms failed (%d)inquiring information about mechanism failed (%d)| +-----------------+-----------------+---------------------------------+ Bit 31 24 23 16 15 0 Project-Id-Version: gss 1.0.1 Report-Msgid-Bugs-To: bug-gss@gnu.org POT-Creation-Date: 2014-10-09 15:37+0200 PO-Revision-Date: 2012-07-31 00:27+0200 Last-Translator: Tomislav Krznar Language-Team: Croatian Language: hr MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2); X-Generator: Lokalize 1.4 MSB LSB +-----------------+-----------------+---------------------------------+ |GreÅ¡ka pozivanja | GreÅ¡ka rutine | Dodatne informacije | | -h, --help IspiÅ¡i pomoć i izaÄ‘i. -V, --version IspiÅ¡i inaÄicu i izaÄ‘i. -l, --list-mechanisms IspiÅ¡i informacije o podržanim mehanizmima u ljudima Äitljivom obliku. -m, --major=DUG OpiÅ¡i vrijednost koda greÅ¡ke glavnog stanja („major statusâ€). -q, --quiet Tih rad (poÄetna vrijednost „offâ€). Vjerodajnica je neispravnaNoviji simbol je već obraÄ‘enParametar je izobliÄenNe mogu Äitati potreban ulazni parametarNe mogu pisati potreban izlazni parametarVrsta navedenog imena nije podržanaSimbol ima neispravan MICSimbol je neispravanOÄekivani simbol poruke nije primljenNavedeno je neispravno imeNaveden je neispravan kod stanjaTražen je nepodržani mehanizamPokuÅ¡aj koriÅ¡tenja nepotpunog sigurnosnog kontekstaOvjeritelj nema podkljuÄMeÄ‘uspremnik ima neispravnu veliÄinuSuÄelje naredbenog retka prema GSS-u, koriÅ¡teno za pojaÅ¡njavanje kodova greÅ¡aka. Kontekst je već u potpunosti izgraÄ‘enNe mogu alocirati gss_buffer_t podatkeSpremnik vjerodajnica nema TGTVrsta koriÅ¡tenja vjerodajnice je nepoznataGSS-API kod glavnog stanja %ld (0x%lx). Navedene su netoÄne veze kanalaNeispravna duljina polja u simboluKerberos V5 GSS-API mehanizamObavezni argumenti dugaÄkih opcija takoÄ‘er su obavezni i za kratke opcije. Maskirana greÅ¡ka pozivanja %ld (0x%lx) pomaknuta u %ld (0x%lx): Maskirana greÅ¡ka rutine %ld (0x%lx) pomaknuta u %ld (0x%lx): Maskirane dodatne informacije %ld (0x%lx) pomaknute u %ld (0x%lx): Kontekst poruke neispravanNedostaje @ u nizu SERVICE-NAMENije izgraÄ‘en kontekstNisu navedene vjerodajnice, nedostupne su ili im nije moguć pristupNema greÅ¡keNema greÅ¡ke Nema krb5 greÅ¡keNijedan upravitelj u tablici kljuÄeva ne odgovara željenom imenuUpravitelj u spremniku vjerodajnica ne odgovara željenom imenuSTRING-UID-NAME sadrži znakove koji nisu znamenkeKontekst je istekaoPotrebno je ponovo pozvati funkciju gss_init_sec_context() ili gss_accept_sec_context() za zavrÅ¡etak djelovanjaLokalna sigurnosna pravila zabranjuju operacijuOperacija ili opcija nije dostupnaNavedeno ime nije ime mehanizmaNe može se pružiti tražena kvaliteta zaÅ¡tite (quality-of-protection)Navedene vjerodajnice su istekleTraženi element vjerodajnice već postojiSimbol je duplikat prethodnog simbolaRok trajanja simbola je istekaoPokuÅ¡ajte „%s --help†za viÅ¡e informacija. UID se ne može povezati s korisniÄkim imenomNepoznata krb5 greÅ¡kaNavedena je nepoznata kvaliteta zaÅ¡titeNepoznata vrsta potpisa u simboluNeodreÄ‘ena greÅ¡ka u pozadinskom mehanizmuUporaba: %s OPCIJE... GreÅ¡ka provjere valjanostiprikaz koda stanja nije uspio (%d)prikazivanje mehanizama nije uspjelo (%d)traženje informacija o mehanizmu nije uspjelo (%d)| +-----------------+-----------------+---------------------------------+ Bit 31 24 23 16 15 0 gss-1.0.3/po/hr.po0000644000000000000000000002631212415507644010601 00000000000000# Translation of gss to Croatian. # Copyright (C) 2012 Free Software Foundation, Inc. # This file is distributed under the same license as the gss package. # # Tomislav Krznar , 2012. msgid "" msgstr "" "Project-Id-Version: gss 1.0.1\n" "Report-Msgid-Bugs-To: bug-gss@gnu.org\n" "POT-Creation-Date: 2014-10-09 15:37+0200\n" "PO-Revision-Date: 2012-07-31 00:27+0200\n" "Last-Translator: Tomislav Krznar \n" "Language-Team: Croatian \n" "Language: hr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" "X-Generator: Lokalize 1.4\n" #: lib/meta.c:37 msgid "Kerberos V5 GSS-API mechanism" msgstr "Kerberos V5 GSS-API mehanizam" #: lib/error.c:37 msgid "A required input parameter could not be read" msgstr "Ne mogu Äitati potreban ulazni parametar" #: lib/error.c:39 msgid "A required output parameter could not be written" msgstr "Ne mogu pisati potreban izlazni parametar" #: lib/error.c:41 msgid "A parameter was malformed" msgstr "Parametar je izobliÄen" #: lib/error.c:46 msgid "An unsupported mechanism was requested" msgstr "Tražen je nepodržani mehanizam" #: lib/error.c:48 msgid "An invalid name was supplied" msgstr "Navedeno je neispravno ime" #: lib/error.c:50 msgid "A supplied name was of an unsupported type" msgstr "Vrsta navedenog imena nije podržana" #: lib/error.c:52 msgid "Incorrect channel bindings were supplied" msgstr "Navedene su netoÄne veze kanala" #: lib/error.c:54 msgid "An invalid status code was supplied" msgstr "Naveden je neispravan kod stanja" #: lib/error.c:56 msgid "A token had an invalid MIC" msgstr "Simbol ima neispravan MIC" #: lib/error.c:58 msgid "" "No credentials were supplied, or the credentials were unavailable or " "inaccessible" msgstr "Nisu navedene vjerodajnice, nedostupne su ili im nije moguć pristup" #: lib/error.c:61 msgid "No context has been established" msgstr "Nije izgraÄ‘en kontekst" #: lib/error.c:63 msgid "A token was invalid" msgstr "Simbol je neispravan" #: lib/error.c:65 msgid "A credential was invalid" msgstr "Vjerodajnica je neispravna" #: lib/error.c:67 msgid "The referenced credentials have expired" msgstr "Navedene vjerodajnice su istekle" #: lib/error.c:69 msgid "The context has expired" msgstr "Kontekst je istekao" #: lib/error.c:71 msgid "Unspecified error in underlying mechanism" msgstr "NeodreÄ‘ena greÅ¡ka u pozadinskom mehanizmu" #: lib/error.c:73 msgid "The quality-of-protection requested could not be provided" msgstr "Ne može se pružiti tražena kvaliteta zaÅ¡tite (quality-of-protection)" #: lib/error.c:75 msgid "The operation is forbidden by local security policy" msgstr "Lokalna sigurnosna pravila zabranjuju operaciju" #: lib/error.c:77 msgid "The operation or option is unavailable" msgstr "Operacija ili opcija nije dostupna" #: lib/error.c:79 msgid "The requested credential element already exists" msgstr "Traženi element vjerodajnice već postoji" #: lib/error.c:81 msgid "The provided name was not a mechanism name" msgstr "Navedeno ime nije ime mehanizma" #: lib/error.c:86 msgid "" "The gss_init_sec_context() or gss_accept_sec_context() function must be " "called again to complete its function" msgstr "" "Potrebno je ponovo pozvati funkciju gss_init_sec_context() ili " "gss_accept_sec_context() za zavrÅ¡etak djelovanja" #: lib/error.c:89 msgid "The token was a duplicate of an earlier token" msgstr "Simbol je duplikat prethodnog simbola" #: lib/error.c:91 msgid "The token's validity period has expired" msgstr "Rok trajanja simbola je istekao" #: lib/error.c:93 msgid "A later token has already been processed" msgstr "Noviji simbol je već obraÄ‘en" #: lib/error.c:95 msgid "An expected per-message token was not received" msgstr "OÄekivani simbol poruke nije primljen" #: lib/error.c:312 msgid "No error" msgstr "Nema greÅ¡ke" #: lib/krb5/error.c:36 msgid "No @ in SERVICE-NAME name string" msgstr "Nedostaje @ u nizu SERVICE-NAME" #: lib/krb5/error.c:38 msgid "STRING-UID-NAME contains nondigits" msgstr "STRING-UID-NAME sadrži znakove koji nisu znamenke" #: lib/krb5/error.c:40 msgid "UID does not resolve to username" msgstr "UID se ne može povezati s korisniÄkim imenom" #: lib/krb5/error.c:42 msgid "Validation error" msgstr "GreÅ¡ka provjere valjanosti" #: lib/krb5/error.c:44 msgid "Couldn't allocate gss_buffer_t data" msgstr "Ne mogu alocirati gss_buffer_t podatke" #: lib/krb5/error.c:46 msgid "Message context invalid" msgstr "Kontekst poruke neispravan" #: lib/krb5/error.c:48 msgid "Buffer is the wrong size" msgstr "MeÄ‘uspremnik ima neispravnu veliÄinu" #: lib/krb5/error.c:50 msgid "Credential usage type is unknown" msgstr "Vrsta koriÅ¡tenja vjerodajnice je nepoznata" #: lib/krb5/error.c:52 msgid "Unknown quality of protection specified" msgstr "Navedena je nepoznata kvaliteta zaÅ¡tite" #: lib/krb5/error.c:55 msgid "Principal in credential cache does not match desired name" msgstr "Upravitelj u spremniku vjerodajnica ne odgovara željenom imenu" #: lib/krb5/error.c:57 msgid "No principal in keytab matches desired name" msgstr "Nijedan upravitelj u tablici kljuÄeva ne odgovara željenom imenu" #: lib/krb5/error.c:59 msgid "Credential cache has no TGT" msgstr "Spremnik vjerodajnica nema TGT" #: lib/krb5/error.c:61 msgid "Authenticator has no subkey" msgstr "Ovjeritelj nema podkljuÄ" #: lib/krb5/error.c:63 msgid "Context is already fully established" msgstr "Kontekst je već u potpunosti izgraÄ‘en" #: lib/krb5/error.c:65 msgid "Unknown signature type in token" msgstr "Nepoznata vrsta potpisa u simbolu" #: lib/krb5/error.c:67 msgid "Invalid field length in token" msgstr "Neispravna duljina polja u simbolu" #: lib/krb5/error.c:69 msgid "Attempt to use incomplete security context" msgstr "PokuÅ¡aj koriÅ¡tenja nepotpunog sigurnosnog konteksta" #: lib/krb5/error.c:86 msgid "No krb5 error" msgstr "Nema krb5 greÅ¡ke" #: lib/krb5/error.c:127 msgid "Unknown krb5 error" msgstr "Nepoznata krb5 greÅ¡ka" #: src/gss.c:67 #, c-format msgid "Try `%s --help' for more information.\n" msgstr "PokuÅ¡ajte „%s --help†za viÅ¡e informacija.\n" #: src/gss.c:71 #, c-format msgid "Usage: %s OPTIONS...\n" msgstr "Uporaba: %s OPCIJE...\n" #: src/gss.c:74 msgid "" "Command line interface to GSS, used to explain error codes.\n" "\n" msgstr "" "SuÄelje naredbenog retka prema GSS-u, koriÅ¡teno za pojaÅ¡njavanje kodova " "greÅ¡aka.\n" "\n" #: src/gss.c:78 msgid "" "Mandatory arguments to long options are mandatory for short options too.\n" msgstr "" "Obavezni argumenti dugaÄkih opcija takoÄ‘er su obavezni i za kratke opcije.\n" #: src/gss.c:81 msgid "" " -h, --help Print help and exit.\n" " -V, --version Print version and exit.\n" " -l, --list-mechanisms\n" " List information about supported mechanisms\n" " in a human readable format.\n" " -m, --major=LONG Describe a `major status' error code value.\n" msgstr "" " -h, --help IspiÅ¡i pomoć i izaÄ‘i.\n" " -V, --version IspiÅ¡i inaÄicu i izaÄ‘i.\n" " -l, --list-mechanisms\n" " IspiÅ¡i informacije o podržanim mehanizmima\n" " u ljudima Äitljivom obliku.\n" " -m, --major=DUG OpiÅ¡i vrijednost koda greÅ¡ke glavnog stanja\n" " („major statusâ€).\n" #: src/gss.c:89 msgid "" " -a, --accept-sec-context[=MECH]\n" " Accept a security context as server.\n" " If MECH is not specified, no credentials\n" " will be acquired. Use \"*\" to use library\n" " default mechanism.\n" " -i, --init-sec-context=MECH\n" " Initialize a security context as client.\n" " MECH is the SASL name of mechanism, use -l\n" " to list supported mechanisms.\n" " -n, --server-name=SERVICE@HOSTNAME\n" " For -i and -a, set the name of the remote host.\n" " For example, \"imap@mail.example.com\".\n" msgstr "" #: src/gss.c:103 msgid " -q, --quiet Silent operation (default=off).\n" msgstr " -q, --quiet Tih rad (poÄetna vrijednost „offâ€).\n" #: src/gss.c:122 #, c-format msgid "" "GSS-API major status code %ld (0x%lx).\n" "\n" msgstr "" "GSS-API kod glavnog stanja %ld (0x%lx).\n" "\n" #: src/gss.c:124 #, c-format msgid "" " MSB LSB\n" " +-----------------+-----------------+---------------------------------+\n" " | Calling Error | Routine Error | Supplementary Info |\n" " | " msgstr "" " MSB LSB\n" " +-----------------+-----------------+---------------------------------+\n" " |GreÅ¡ka pozivanja | GreÅ¡ka rutine | Dodatne informacije |\n" " | " #: src/gss.c:138 #, c-format msgid "" "|\n" " +-----------------+-----------------+---------------------------------+\n" "Bit 31 24 23 16 15 0\n" "\n" msgstr "" "|\n" " +-----------------+-----------------+---------------------------------+\n" "Bit 31 24 23 16 15 0\n" "\n" #: src/gss.c:148 #, c-format msgid "Masked routine error %ld (0x%lx) shifted into %ld (0x%lx):\n" msgstr "Maskirana greÅ¡ka rutine %ld (0x%lx) pomaknuta u %ld (0x%lx):\n" #: src/gss.c:164 src/gss.c:198 src/gss.c:234 #, c-format msgid "displaying status code failed (%d)" msgstr "prikaz koda stanja nije uspio (%d)" #: src/gss.c:184 #, c-format msgid "Masked calling error %ld (0x%lx) shifted into %ld (0x%lx):\n" msgstr "Maskirana greÅ¡ka pozivanja %ld (0x%lx) pomaknuta u %ld (0x%lx):\n" #: src/gss.c:217 #, c-format msgid "Masked supplementary info %ld (0x%lx) shifted into %ld (0x%lx):\n" msgstr "Maskirane dodatne informacije %ld (0x%lx) pomaknute u %ld (0x%lx):\n" #: src/gss.c:251 #, c-format msgid "No error\n" msgstr "Nema greÅ¡ke\n" #: src/gss.c:269 #, c-format msgid "indicating mechanisms failed (%d)" msgstr "prikazivanje mehanizama nije uspjelo (%d)" #: src/gss.c:285 #, c-format msgid "inquiring information about mechanism failed (%d)" msgstr "traženje informacija o mehanizmu nije uspjelo (%d)" #: src/gss.c:342 src/gss.c:483 #, fuzzy, c-format msgid "inquiring mechanism for SASL name (%d/%d)" msgstr "prikazivanje mehanizama nije uspjelo (%d)" #: src/gss.c:355 src/gss.c:498 #, c-format msgid "could not import server name \"%s\" (%d/%d)" msgstr "" #: src/gss.c:374 #, fuzzy, c-format msgid "initializing security context failed (%d/%d)" msgstr "prikaz koda stanja nije uspio (%d)" #: src/gss.c:378 src/gss.c:564 #, c-format msgid "base64 input too long" msgstr "" #: src/gss.c:380 src/gss.c:415 src/gss.c:545 src/gss.c:566 #, c-format msgid "malloc" msgstr "" #: src/gss.c:407 src/gss.c:537 #, c-format msgid "getline" msgstr "" #: src/gss.c:409 src/gss.c:539 #, c-format msgid "end of file" msgstr "" #: src/gss.c:413 src/gss.c:543 #, c-format msgid "base64 fail" msgstr "" #: src/gss.c:520 #, c-format msgid "could not acquire server credentials (%d/%d)" msgstr "" #: src/gss.c:560 #, fuzzy, c-format msgid "accepting security context failed (%d/%d)" msgstr "prikaz koda stanja nije uspio (%d)" gss-1.0.3/po/LINGUAS0000644000000000000000000000010712415507602010641 00000000000000en@boldquot en@quot de eo fi fr ga hr hu id it pl ro sk sr sv vi zh_CN gss-1.0.3/po/sv.gmo0000644000000000000000000001416412415507644010766 00000000000000Þ•7ÔIŒ°æ±˜(±Ú,ô0!*R}˜.¬Û#ø&*CnŠ$£#Èì ()(R{;™;Õ@ R j ‹ Q« ý   + 9J "„ § m¿ 3- &a *ˆ 9³ 'í / -E 's &›  ã 'ö  )> h —y ’椋!ŸÁÔ!ô+5a!u—®É.ç5%L#r–µ%Îô7.:fA¡ã*ý%(JN ™ £®*½+è&0;sl-à,$;/`&¯Ö&ñ,#Eix"ªÍ—Ü(*43+.,$#6 5 " '10 2&% / -!7) MSB LSB +-----------------+-----------------+---------------------------------+ | Calling Error | Routine Error | Supplementary Info | | A credential was invalidA later token has already been processedA parameter was malformedA required input parameter could not be readA required output parameter could not be writtenA supplied name was of an unsupported typeA token had an invalid MICA token was invalidAn expected per-message token was not receivedAn invalid name was suppliedAn invalid status code was suppliedAn unsupported mechanism was requestedAttempt to use incomplete security contextAuthenticator has no subkeyBuffer is the wrong sizeContext is already fully establishedCouldn't allocate gss_buffer_t dataCredential cache has no TGTCredential usage type is unknownGSS-API major status code %ld (0x%lx). Incorrect channel bindings were suppliedInvalid field length in tokenMasked calling error %ld (0x%lx) shifted into %ld (0x%lx): Masked routine error %ld (0x%lx) shifted into %ld (0x%lx): Masked supplementary info %ld (0x%lx) shifted into %ld (0x%lx): Message context invalidNo @ in SERVICE-NAME name stringNo context has been establishedNo credentials were supplied, or the credentials were unavailable or inaccessibleNo errorNo error No krb5 errorNo principal in keytab matches desired namePrincipal in credential cache does not match desired nameSTRING-UID-NAME contains nondigitsThe context has expiredThe gss_init_sec_context() or gss_accept_sec_context() function must be called again to complete its functionThe operation is forbidden by local security policyThe operation or option is unavailableThe provided name was not a mechanism nameThe quality-of-protection requested could not be providedThe referenced credentials have expiredThe requested credential element already existsThe token was a duplicate of an earlier tokenThe token's validity period has expiredTry `%s --help' for more information. UID does not resolve to usernameUnknown krb5 errorUnknown quality of protection specifiedUnknown signature type in tokenUnspecified error in underlying mechanismValidation error| +-----------------+-----------------+---------------------------------+ Bit 31 24 23 16 15 0 Project-Id-Version: gss 0.0.22 Report-Msgid-Bugs-To: bug-gss@gnu.org POT-Creation-Date: 2014-10-09 15:37+0200 PO-Revision-Date: 2008-01-17 08:19+0100 Last-Translator: Christer Andersson Language-Team: Swedish Language: sv MIME-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=(n != 1); MSB LSB +-----------------+-----------------+---------------------------------+ | Anropsfel | Funktionsfel | Tilläggsinformation | | Credential felaktigSenare meddelande redan behandlatParameter felaktigNödvändig indata kunde ej läsasNödvändig utdata kunde ej skrivasTypen på angivet namn stöds ejMeddelande har felaktig integritetskontrollMeddelande felaktigTidigare meddelande inte mottagetFelaktigt namn angivenFelaktig statuskod angivenEfterfrågad mekanism stöds ejFörsökte använda ofullständig säkerhetskontextAutenticerare har ingen nyckelBuffer har fel storlekIngen säkerhetskontext har upprättatsKan inte allokera gss_buffer_t dataCredential-cache har ingen TGTCredential har okänd typGSS-API huvudstatuskod %ld (0x%lx). Ogiltig kanalbindning angivenFelaktigt längdfält i tokenMaskat anropsfel %ld (0x%lx) skiftad till %ld (0x%lx): Maskat funktionsfel %ld (0x%lx) skiftad till %ld (0x%lx): Maskad tillägssinformation %ld (0x%lx) skiftad till %ld (0x%lx): Ogiltig MeddelandekontextTecknet @ saknas i SERVICE-NAME namnsträngIngen säkerhetskontext har upprättatsIngen credential tillgänglig, eller så var angiven credential otillgängligInget felInget fel Inget krb5 felInget namn i nyckelfil matchar begärt namnNamn på credential matchar inte begärt namnSTRING-UID-NAME innehåller ickesiffrorGiltighetstiden för säkerhetskontext har gått utFunktionerna gss_init_sec_context() eller gss_accept_sec_context() måste anropas igen för att fullfölja operationenFunktionen förbjuden av lokal säkerhetspolicyFunktion eller parameter är inte tillgängligGivet namn är inte ett mekanism-namnEfterfrågad skyddsnivå kan inte tillhandahållasAngiven credential har gått utEfterfrågad credential existerar redanMeddelandet är en dubblettMeddelandets giltighetstid har gått utFörsök med `%s --help' för mer information. UID identifierar inget användarnamnOkänt krb5 felOkänd skyddsnivå begärdOkänd signaturtyp i tokenOkänt fel i underliggande mekanismValideringsfel| +-----------------+-----------------+---------------------------------+ Bit 31 24 23 16 15 0 gss-1.0.3/po/en@boldquot.po0000644000000000000000000003202212415507644012437 00000000000000# English translations for gss package. # Copyright (C) 2014 Simon Josefsson # This file is distributed under the same license as the gss package. # Automatically generated, 2014. # # All this catalog "translates" are quotation characters. # The msgids must be ASCII and therefore cannot contain real quotation # characters, only substitutes like grave accent (0x60), apostrophe (0x27) # and double quote (0x22). These substitutes look strange; see # http://www.cl.cam.ac.uk/~mgk25/ucs/quotes.html # # This catalog translates grave accent (0x60) and apostrophe (0x27) to # left single quotation mark (U+2018) and right single quotation mark (U+2019). # It also translates pairs of apostrophe (0x27) to # left single quotation mark (U+2018) and right single quotation mark (U+2019) # and pairs of quotation mark (0x22) to # left double quotation mark (U+201C) and right double quotation mark (U+201D). # # When output to an UTF-8 terminal, the quotation characters appear perfectly. # When output to an ISO-8859-1 terminal, the single quotation marks are # transliterated to apostrophes (by iconv in glibc 2.2 or newer) or to # grave/acute accent (by libiconv), and the double quotation marks are # transliterated to 0x22. # When output to an ASCII terminal, the single quotation marks are # transliterated to apostrophes, and the double quotation marks are # transliterated to 0x22. # # This catalog furthermore displays the text between the quotation marks in # bold face, assuming the VT100/XTerm escape sequences. # msgid "" msgstr "" "Project-Id-Version: gss 1.0.3\n" "Report-Msgid-Bugs-To: bug-gss@gnu.org\n" "POT-Creation-Date: 2014-10-09 15:37+0200\n" "PO-Revision-Date: 2014-10-09 15:37+0200\n" "Last-Translator: Automatically generated\n" "Language-Team: none\n" "Language: en@boldquot\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: lib/meta.c:37 msgid "Kerberos V5 GSS-API mechanism" msgstr "Kerberos V5 GSS-API mechanism" #: lib/error.c:37 msgid "A required input parameter could not be read" msgstr "A required input parameter could not be read" #: lib/error.c:39 msgid "A required output parameter could not be written" msgstr "A required output parameter could not be written" #: lib/error.c:41 msgid "A parameter was malformed" msgstr "A parameter was malformed" #: lib/error.c:46 msgid "An unsupported mechanism was requested" msgstr "An unsupported mechanism was requested" #: lib/error.c:48 msgid "An invalid name was supplied" msgstr "An invalid name was supplied" #: lib/error.c:50 msgid "A supplied name was of an unsupported type" msgstr "A supplied name was of an unsupported type" #: lib/error.c:52 msgid "Incorrect channel bindings were supplied" msgstr "Incorrect channel bindings were supplied" #: lib/error.c:54 msgid "An invalid status code was supplied" msgstr "An invalid status code was supplied" #: lib/error.c:56 msgid "A token had an invalid MIC" msgstr "A token had an invalid MIC" #: lib/error.c:58 msgid "" "No credentials were supplied, or the credentials were unavailable or " "inaccessible" msgstr "" "No credentials were supplied, or the credentials were unavailable or " "inaccessible" #: lib/error.c:61 msgid "No context has been established" msgstr "No context has been established" #: lib/error.c:63 msgid "A token was invalid" msgstr "A token was invalid" #: lib/error.c:65 msgid "A credential was invalid" msgstr "A credential was invalid" #: lib/error.c:67 msgid "The referenced credentials have expired" msgstr "The referenced credentials have expired" #: lib/error.c:69 msgid "The context has expired" msgstr "The context has expired" #: lib/error.c:71 msgid "Unspecified error in underlying mechanism" msgstr "Unspecified error in underlying mechanism" #: lib/error.c:73 msgid "The quality-of-protection requested could not be provided" msgstr "The quality-of-protection requested could not be provided" #: lib/error.c:75 msgid "The operation is forbidden by local security policy" msgstr "The operation is forbidden by local security policy" #: lib/error.c:77 msgid "The operation or option is unavailable" msgstr "The operation or option is unavailable" #: lib/error.c:79 msgid "The requested credential element already exists" msgstr "The requested credential element already exists" #: lib/error.c:81 msgid "The provided name was not a mechanism name" msgstr "The provided name was not a mechanism name" #: lib/error.c:86 msgid "" "The gss_init_sec_context() or gss_accept_sec_context() function must be " "called again to complete its function" msgstr "" "The gss_init_sec_context() or gss_accept_sec_context() function must be " "called again to complete its function" #: lib/error.c:89 msgid "The token was a duplicate of an earlier token" msgstr "The token was a duplicate of an earlier token" #: lib/error.c:91 msgid "The token's validity period has expired" msgstr "The token's validity period has expired" #: lib/error.c:93 msgid "A later token has already been processed" msgstr "A later token has already been processed" #: lib/error.c:95 msgid "An expected per-message token was not received" msgstr "An expected per-message token was not received" #: lib/error.c:312 msgid "No error" msgstr "No error" #: lib/krb5/error.c:36 msgid "No @ in SERVICE-NAME name string" msgstr "No @ in SERVICE-NAME name string" #: lib/krb5/error.c:38 msgid "STRING-UID-NAME contains nondigits" msgstr "STRING-UID-NAME contains nondigits" #: lib/krb5/error.c:40 msgid "UID does not resolve to username" msgstr "UID does not resolve to username" #: lib/krb5/error.c:42 msgid "Validation error" msgstr "Validation error" #: lib/krb5/error.c:44 msgid "Couldn't allocate gss_buffer_t data" msgstr "Couldn't allocate gss_buffer_t data" #: lib/krb5/error.c:46 msgid "Message context invalid" msgstr "Message context invalid" #: lib/krb5/error.c:48 msgid "Buffer is the wrong size" msgstr "Buffer is the wrong size" #: lib/krb5/error.c:50 msgid "Credential usage type is unknown" msgstr "Credential usage type is unknown" #: lib/krb5/error.c:52 msgid "Unknown quality of protection specified" msgstr "Unknown quality of protection specified" #: lib/krb5/error.c:55 msgid "Principal in credential cache does not match desired name" msgstr "Principal in credential cache does not match desired name" #: lib/krb5/error.c:57 msgid "No principal in keytab matches desired name" msgstr "No principal in keytab matches desired name" #: lib/krb5/error.c:59 msgid "Credential cache has no TGT" msgstr "Credential cache has no TGT" #: lib/krb5/error.c:61 msgid "Authenticator has no subkey" msgstr "Authenticator has no subkey" #: lib/krb5/error.c:63 msgid "Context is already fully established" msgstr "Context is already fully established" #: lib/krb5/error.c:65 msgid "Unknown signature type in token" msgstr "Unknown signature type in token" #: lib/krb5/error.c:67 msgid "Invalid field length in token" msgstr "Invalid field length in token" #: lib/krb5/error.c:69 msgid "Attempt to use incomplete security context" msgstr "Attempt to use incomplete security context" #: lib/krb5/error.c:86 msgid "No krb5 error" msgstr "No krb5 error" #: lib/krb5/error.c:127 msgid "Unknown krb5 error" msgstr "Unknown krb5 error" #: src/gss.c:67 #, c-format msgid "Try `%s --help' for more information.\n" msgstr "Try ‘%s --help’ for more information.\n" #: src/gss.c:71 #, c-format msgid "Usage: %s OPTIONS...\n" msgstr "Usage: %s OPTIONS...\n" #: src/gss.c:74 msgid "" "Command line interface to GSS, used to explain error codes.\n" "\n" msgstr "" "Command line interface to GSS, used to explain error codes.\n" "\n" #: src/gss.c:78 msgid "" "Mandatory arguments to long options are mandatory for short options too.\n" msgstr "" "Mandatory arguments to long options are mandatory for short options too.\n" #: src/gss.c:81 msgid "" " -h, --help Print help and exit.\n" " -V, --version Print version and exit.\n" " -l, --list-mechanisms\n" " List information about supported mechanisms\n" " in a human readable format.\n" " -m, --major=LONG Describe a `major status' error code value.\n" msgstr "" " -h, --help Print help and exit.\n" " -V, --version Print version and exit.\n" " -l, --list-mechanisms\n" " List information about supported mechanisms\n" " in a human readable format.\n" " -m, --major=LONG Describe a ‘major status’ error code value.\n" #: src/gss.c:89 msgid "" " -a, --accept-sec-context[=MECH]\n" " Accept a security context as server.\n" " If MECH is not specified, no credentials\n" " will be acquired. Use \"*\" to use library\n" " default mechanism.\n" " -i, --init-sec-context=MECH\n" " Initialize a security context as client.\n" " MECH is the SASL name of mechanism, use -l\n" " to list supported mechanisms.\n" " -n, --server-name=SERVICE@HOSTNAME\n" " For -i and -a, set the name of the remote host.\n" " For example, \"imap@mail.example.com\".\n" msgstr "" " -a, --accept-sec-context[=MECH]\n" " Accept a security context as server.\n" " If MECH is not specified, no credentials\n" " will be acquired. Use “*†to use library\n" " default mechanism.\n" " -i, --init-sec-context=MECH\n" " Initialize a security context as client.\n" " MECH is the SASL name of mechanism, use -l\n" " to list supported mechanisms.\n" " -n, --server-name=SERVICE@HOSTNAME\n" " For -i and -a, set the name of the remote host.\n" " For example, “imap@mail.example.comâ€.\n" #: src/gss.c:103 msgid " -q, --quiet Silent operation (default=off).\n" msgstr " -q, --quiet Silent operation (default=off).\n" #: src/gss.c:122 #, c-format msgid "" "GSS-API major status code %ld (0x%lx).\n" "\n" msgstr "" "GSS-API major status code %ld (0x%lx).\n" "\n" #: src/gss.c:124 #, c-format msgid "" " MSB LSB\n" " +-----------------+-----------------+---------------------------------+\n" " | Calling Error | Routine Error | Supplementary Info |\n" " | " msgstr "" " MSB LSB\n" " +-----------------+-----------------+---------------------------------+\n" " | Calling Error | Routine Error | Supplementary Info |\n" " | " #: src/gss.c:138 #, c-format msgid "" "|\n" " +-----------------+-----------------+---------------------------------+\n" "Bit 31 24 23 16 15 0\n" "\n" msgstr "" "|\n" " +-----------------+-----------------+---------------------------------+\n" "Bit 31 24 23 16 15 0\n" "\n" #: src/gss.c:148 #, c-format msgid "Masked routine error %ld (0x%lx) shifted into %ld (0x%lx):\n" msgstr "Masked routine error %ld (0x%lx) shifted into %ld (0x%lx):\n" #: src/gss.c:164 src/gss.c:198 src/gss.c:234 #, c-format msgid "displaying status code failed (%d)" msgstr "displaying status code failed (%d)" #: src/gss.c:184 #, c-format msgid "Masked calling error %ld (0x%lx) shifted into %ld (0x%lx):\n" msgstr "Masked calling error %ld (0x%lx) shifted into %ld (0x%lx):\n" #: src/gss.c:217 #, c-format msgid "Masked supplementary info %ld (0x%lx) shifted into %ld (0x%lx):\n" msgstr "Masked supplementary info %ld (0x%lx) shifted into %ld (0x%lx):\n" #: src/gss.c:251 #, c-format msgid "No error\n" msgstr "No error\n" #: src/gss.c:269 #, c-format msgid "indicating mechanisms failed (%d)" msgstr "indicating mechanisms failed (%d)" #: src/gss.c:285 #, c-format msgid "inquiring information about mechanism failed (%d)" msgstr "inquiring information about mechanism failed (%d)" #: src/gss.c:342 src/gss.c:483 #, c-format msgid "inquiring mechanism for SASL name (%d/%d)" msgstr "inquiring mechanism for SASL name (%d/%d)" #: src/gss.c:355 src/gss.c:498 #, c-format msgid "could not import server name \"%s\" (%d/%d)" msgstr "could not import server name “%s†(%d/%d)" #: src/gss.c:374 #, c-format msgid "initializing security context failed (%d/%d)" msgstr "initializing security context failed (%d/%d)" #: src/gss.c:378 src/gss.c:564 #, c-format msgid "base64 input too long" msgstr "base64 input too long" #: src/gss.c:380 src/gss.c:415 src/gss.c:545 src/gss.c:566 #, c-format msgid "malloc" msgstr "malloc" #: src/gss.c:407 src/gss.c:537 #, c-format msgid "getline" msgstr "getline" #: src/gss.c:409 src/gss.c:539 #, c-format msgid "end of file" msgstr "end of file" #: src/gss.c:413 src/gss.c:543 #, c-format msgid "base64 fail" msgstr "base64 fail" #: src/gss.c:520 #, c-format msgid "could not acquire server credentials (%d/%d)" msgstr "could not acquire server credentials (%d/%d)" #: src/gss.c:560 #, c-format msgid "accepting security context failed (%d/%d)" msgstr "accepting security context failed (%d/%d)" gss-1.0.3/po/remove-potcdate.sin0000644000000000000000000000066012415507605013434 00000000000000# Sed script that remove the POT-Creation-Date line in the header entry # from a POT file. # # The distinction between the first and the following occurrences of the # pattern is achieved by looking at the hold space. /^"POT-Creation-Date: .*"$/{ x # Test if the hold space is empty. s/P/P/ ta # Yes it was empty. First occurrence. Remove the line. g d bb :a # The hold space was nonempty. Following occurrences. Do nothing. x :b } gss-1.0.3/po/ga.po0000644000000000000000000002542012415507644010556 00000000000000# Irish translations for gss. # Copyright (C) 2007 Free Software Foundation, Inc. # This file is distributed under the same license as the gss package. # Kevin Scannell , 2007. msgid "" msgstr "" "Project-Id-Version: gss 0.0.22\n" "Report-Msgid-Bugs-To: bug-gss@gnu.org\n" "POT-Creation-Date: 2014-10-09 15:37+0200\n" "PO-Revision-Date: 2007-09-17 11:04-0500\n" "Last-Translator: Kevin Scannell \n" "Language-Team: Irish \n" "Language: ga\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: lib/meta.c:37 msgid "Kerberos V5 GSS-API mechanism" msgstr "" #: lib/error.c:37 msgid "A required input parameter could not be read" msgstr "Níorbh fhéidir paraiméadar riachtanach ionchurtha a léamh" #: lib/error.c:39 msgid "A required output parameter could not be written" msgstr "Níorbh fhéidir paraiméadar riachtanach aschurtha a scríobh" #: lib/error.c:41 msgid "A parameter was malformed" msgstr "Paraiméadar míchumtha" #: lib/error.c:46 msgid "An unsupported mechanism was requested" msgstr "Iarratas ar mheicníocht gan tacaíocht" #: lib/error.c:48 msgid "An invalid name was supplied" msgstr "Ainm neamhbhailí" #: lib/error.c:50 msgid "A supplied name was of an unsupported type" msgstr "Ainm de chineál nach dtacaítear leis" #: lib/error.c:52 msgid "Incorrect channel bindings were supplied" msgstr "Ceangail mhíchearta chainéil" #: lib/error.c:54 msgid "An invalid status code was supplied" msgstr "Cód neamhbhailí stádais" #: lib/error.c:56 msgid "A token had an invalid MIC" msgstr "Bhí MIC neamhbhailí ag ceadchomhartha" #: lib/error.c:58 msgid "" "No credentials were supplied, or the credentials were unavailable or " "inaccessible" msgstr "" "Ní raibh aon dintiúir, bhí na dintiúir dofhaighte, nó bhíodar dorochtana" #: lib/error.c:61 msgid "No context has been established" msgstr "Níor bunaíodh aon chomhthéacs" #: lib/error.c:63 msgid "A token was invalid" msgstr "Ceadchomhartha neamhbhailí" #: lib/error.c:65 msgid "A credential was invalid" msgstr "Dintiúr neamhbhailí" #: lib/error.c:67 msgid "The referenced credentials have expired" msgstr "Chuaigh na dintiúir tagartha as feidhm" #: lib/error.c:69 msgid "The context has expired" msgstr "Tá an comhthéacs as dáta" #: lib/error.c:71 msgid "Unspecified error in underlying mechanism" msgstr "Earráid gan sonrú sa bhunmheicníocht" #: lib/error.c:73 msgid "The quality-of-protection requested could not be provided" msgstr "Níorbh fhéidir an cháilíocht cosanta iarrtha a sholáthar" #: lib/error.c:75 msgid "The operation is forbidden by local security policy" msgstr "Ní cheadaítear an oibríocht de bharr polasaí logánta slándála" #: lib/error.c:77 msgid "The operation or option is unavailable" msgstr "Níl aon fháil ar an oibríocht nó ar an rogha" #: lib/error.c:79 msgid "The requested credential element already exists" msgstr "Tá an dintiúr iarrtha ann cheana" #: lib/error.c:81 msgid "The provided name was not a mechanism name" msgstr "Ní ainm meicníochta é an t-ainm a tugadh" #: lib/error.c:86 msgid "" "The gss_init_sec_context() or gss_accept_sec_context() function must be " "called again to complete its function" msgstr "" "Caithfear gss_init_sec_context() nó gss_accept_sec_context() a glaoch chun a " "fheidhm a chur i gcrích" #: lib/error.c:89 msgid "The token was a duplicate of an earlier token" msgstr "Cóip den cheadchomhartha roimhe seo an ceadchomhartha seo" #: lib/error.c:91 msgid "The token's validity period has expired" msgstr "Tá tréimhse bhailíochta an cheadchomhartha thart" #: lib/error.c:93 msgid "A later token has already been processed" msgstr "Próiseáladh ceadchomhartha níos nuaí cheana" #: lib/error.c:95 msgid "An expected per-message token was not received" msgstr "Bhíothas súil le ceadchomhartha sa teachtaireacht agus ní bhfuarthas é" #: lib/error.c:312 msgid "No error" msgstr "Ní raibh aon earráid" #: lib/krb5/error.c:36 msgid "No @ in SERVICE-NAME name string" msgstr "@ ar iarraidh san ainm SERVICE-NAME" #: lib/krb5/error.c:38 msgid "STRING-UID-NAME contains nondigits" msgstr "Tá carachtair neamhuimhriúla i STRING-UID-NAME" #: lib/krb5/error.c:40 msgid "UID does not resolve to username" msgstr "Ní féidir an t-aitheantas úsáideora a réiteach mar ainm" #: lib/krb5/error.c:42 msgid "Validation error" msgstr "Earráid le linn deimhnithe" #: lib/krb5/error.c:44 msgid "Couldn't allocate gss_buffer_t data" msgstr "Níorbh fhéidir gss_buffer_t a dháileadh" #: lib/krb5/error.c:46 msgid "Message context invalid" msgstr "Tá comhthéacs na teachtaireachta neamhbhailí" #: lib/krb5/error.c:48 msgid "Buffer is the wrong size" msgstr "Méid mhícheart ar an maolán" #: lib/krb5/error.c:50 msgid "Credential usage type is unknown" msgstr "Cineál úsáide dintiúir nach bhfuil eolas air" #: lib/krb5/error.c:52 msgid "Unknown quality of protection specified" msgstr "Sonraíodh cáilíocht cosanta nach bhfuil eolas uirthi" #: lib/krb5/error.c:55 msgid "Principal in credential cache does not match desired name" msgstr "" "Ní mheaitseálann an príomhaí i dtaisce na ndintiúr leis an ainm iarrtha" #: lib/krb5/error.c:57 msgid "No principal in keytab matches desired name" msgstr "Níl aon phríomhaí i keytab a mheaitseálann an t-ainm iarrtha" #: lib/krb5/error.c:59 msgid "Credential cache has no TGT" msgstr "Níl TGT ag taisce na ndintiúr" #: lib/krb5/error.c:61 msgid "Authenticator has no subkey" msgstr "Níl fo-eochair ag an bhfíordheimhneoir" #: lib/krb5/error.c:63 msgid "Context is already fully established" msgstr "Socraíodh an comhthéacs go hiomlán cheana féin" #: lib/krb5/error.c:65 msgid "Unknown signature type in token" msgstr "Cineál anaithnid sínithe sa cheadchomhartha" #: lib/krb5/error.c:67 msgid "Invalid field length in token" msgstr "Fad neamhbhailí réimse sa cheadchomhartha" #: lib/krb5/error.c:69 msgid "Attempt to use incomplete security context" msgstr "Rinneadh iarracht ar chomhthéacs neamhiomlán slándála a úsáid" #: lib/krb5/error.c:86 msgid "No krb5 error" msgstr "Gan earráid krb5" #: lib/krb5/error.c:127 msgid "Unknown krb5 error" msgstr "Earráid anaithnid krb5" #: src/gss.c:67 #, c-format msgid "Try `%s --help' for more information.\n" msgstr "Bain triail as `%s --help' chun tuilleadh eolais a fháil.\n" #: src/gss.c:71 #, c-format msgid "Usage: %s OPTIONS...\n" msgstr "" #: src/gss.c:74 msgid "" "Command line interface to GSS, used to explain error codes.\n" "\n" msgstr "" #: src/gss.c:78 msgid "" "Mandatory arguments to long options are mandatory for short options too.\n" msgstr "" #: src/gss.c:81 msgid "" " -h, --help Print help and exit.\n" " -V, --version Print version and exit.\n" " -l, --list-mechanisms\n" " List information about supported mechanisms\n" " in a human readable format.\n" " -m, --major=LONG Describe a `major status' error code value.\n" msgstr "" #: src/gss.c:89 msgid "" " -a, --accept-sec-context[=MECH]\n" " Accept a security context as server.\n" " If MECH is not specified, no credentials\n" " will be acquired. Use \"*\" to use library\n" " default mechanism.\n" " -i, --init-sec-context=MECH\n" " Initialize a security context as client.\n" " MECH is the SASL name of mechanism, use -l\n" " to list supported mechanisms.\n" " -n, --server-name=SERVICE@HOSTNAME\n" " For -i and -a, set the name of the remote host.\n" " For example, \"imap@mail.example.com\".\n" msgstr "" #: src/gss.c:103 msgid " -q, --quiet Silent operation (default=off).\n" msgstr "" #: src/gss.c:122 #, c-format msgid "" "GSS-API major status code %ld (0x%lx).\n" "\n" msgstr "" "Mórchód stádais GSS-API %ld (0x%lx).\n" "\n" #: src/gss.c:124 #, c-format msgid "" " MSB LSB\n" " +-----------------+-----------------+---------------------------------+\n" " | Calling Error | Routine Error | Supplementary Info |\n" " | " msgstr "" " GMS " "GLS\n" " +-----------------+-----------------+---------------------------------" "+\n" " | Earráid Glaoite | Earráid Gnáthamh| Eolas Forlíontach " "|\n" " | " #: src/gss.c:138 #, c-format msgid "" "|\n" " +-----------------+-----------------+---------------------------------+\n" "Bit 31 24 23 16 15 0\n" "\n" msgstr "" "|\n" " +-----------------+-----------------+---------------------------------" "+\n" "Giotán31 24 23 16 15 0\n" "\n" #: src/gss.c:148 #, c-format msgid "Masked routine error %ld (0x%lx) shifted into %ld (0x%lx):\n" msgstr "Aistríodh earráid mhasctha ghnáthaimh %ld (0x%lx) go %ld (0x%lx):\n" #: src/gss.c:164 src/gss.c:198 src/gss.c:234 #, fuzzy, c-format msgid "displaying status code failed (%d)" msgstr "%s: níorbh fhéidir an cód stádais a thaispeáint\n" #: src/gss.c:184 #, c-format msgid "Masked calling error %ld (0x%lx) shifted into %ld (0x%lx):\n" msgstr "Aistríodh earráid mhasctha ghlaoite %ld (0x%lx) go %ld (0x%lx):\n" #: src/gss.c:217 #, c-format msgid "Masked supplementary info %ld (0x%lx) shifted into %ld (0x%lx):\n" msgstr "Aistríodh eolas masctha forlíontach %ld (0x%lx) go %ld (0x%lx):\n" #: src/gss.c:251 #, c-format msgid "No error\n" msgstr "Ní raibh aon earráid\n" #: src/gss.c:269 #, c-format msgid "indicating mechanisms failed (%d)" msgstr "" #: src/gss.c:285 #, c-format msgid "inquiring information about mechanism failed (%d)" msgstr "" #: src/gss.c:342 src/gss.c:483 #, c-format msgid "inquiring mechanism for SASL name (%d/%d)" msgstr "" #: src/gss.c:355 src/gss.c:498 #, c-format msgid "could not import server name \"%s\" (%d/%d)" msgstr "" #: src/gss.c:374 #, c-format msgid "initializing security context failed (%d/%d)" msgstr "" #: src/gss.c:378 src/gss.c:564 #, c-format msgid "base64 input too long" msgstr "" #: src/gss.c:380 src/gss.c:415 src/gss.c:545 src/gss.c:566 #, c-format msgid "malloc" msgstr "" #: src/gss.c:407 src/gss.c:537 #, c-format msgid "getline" msgstr "" #: src/gss.c:409 src/gss.c:539 #, c-format msgid "end of file" msgstr "" #: src/gss.c:413 src/gss.c:543 #, c-format msgid "base64 fail" msgstr "" #: src/gss.c:520 #, c-format msgid "could not acquire server credentials (%d/%d)" msgstr "" #: src/gss.c:560 #, c-format msgid "accepting security context failed (%d/%d)" msgstr "" #~ msgid "%s: missing parameter\n" #~ msgstr "%s: paraiméadar ar iarraidh\n" #~ msgid "called again to complete its function" #~ msgstr "glaoch arís chun a fheidhm a chur i gcrích" gss-1.0.3/po/POTFILES.in0000664000000000000000000000016212012453517011372 00000000000000# List of source files containing translatable strings for GSS. lib/meta.c lib/error.c lib/krb5/error.c src/gss.c gss-1.0.3/po/it.po0000644000000000000000000002664312415507644010613 00000000000000# Italian translation for GNU gss. # Copyright (C) 2010 Free Software Foundation, Inc. # This file is distributed under the same license as the gss package. # Sergio Zanchetta , 2010. # msgid "" msgstr "" "Project-Id-Version: gss-1.0.1\n" "Report-Msgid-Bugs-To: bug-gss@gnu.org\n" "POT-Creation-Date: 2014-10-09 15:37+0200\n" "PO-Revision-Date: 2010-12-02 18:21+0100\n" "Last-Translator: Sergio Zanchetta \n" "Language-Team: Italian \n" "Language: it\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural= (n != 1)\n" #: lib/meta.c:37 msgid "Kerberos V5 GSS-API mechanism" msgstr "Meccanismo GSS-API di Kerberos V5" #: lib/error.c:37 msgid "A required input parameter could not be read" msgstr "Un parametro di input necessario non può essere letto" #: lib/error.c:39 msgid "A required output parameter could not be written" msgstr "Un parametro di output necessario non può essere scritto" #: lib/error.c:41 msgid "A parameter was malformed" msgstr "Un parametro era malformato" #: lib/error.c:46 msgid "An unsupported mechanism was requested" msgstr "È stato richiesto un meccanismo non supportato" #: lib/error.c:48 msgid "An invalid name was supplied" msgstr "È stato fornito un nome non valido" #: lib/error.c:50 msgid "A supplied name was of an unsupported type" msgstr "Un nome fornito era di un tipo non supportato" #: lib/error.c:52 msgid "Incorrect channel bindings were supplied" msgstr "Sono state fornite associazioni di canale non corrette" #: lib/error.c:54 msgid "An invalid status code was supplied" msgstr "È stato fornito un codice di stato non valido" #: lib/error.c:56 msgid "A token had an invalid MIC" msgstr "Un token aveva un MIC non valido" #: lib/error.c:58 msgid "" "No credentials were supplied, or the credentials were unavailable or " "inaccessible" msgstr "" "Non è stata fornita alcuna credenziale oppure le credenziali erano " "indisponibili o inaccessibili" #: lib/error.c:61 msgid "No context has been established" msgstr "Non è stato definito alcun contesto" #: lib/error.c:63 msgid "A token was invalid" msgstr "Un token non era valido" #: lib/error.c:65 msgid "A credential was invalid" msgstr "Una credenziale non era valida" #: lib/error.c:67 msgid "The referenced credentials have expired" msgstr "Le credenziali di riferimento sono scadute" #: lib/error.c:69 msgid "The context has expired" msgstr "Il contesto è scaduto" #: lib/error.c:71 msgid "Unspecified error in underlying mechanism" msgstr "Errore non specificato nel meccanismo sottostante" #: lib/error.c:73 msgid "The quality-of-protection requested could not be provided" msgstr "La qualità di protezione richiesta non può essere fornita" #: lib/error.c:75 msgid "The operation is forbidden by local security policy" msgstr "L'operazione è proibita dalle politiche di sicurezza locali" #: lib/error.c:77 msgid "The operation or option is unavailable" msgstr "L'operazione o l'opzione non è disponibile" #: lib/error.c:79 msgid "The requested credential element already exists" msgstr "L'elemento di credenziale richiesto esiste già" #: lib/error.c:81 msgid "The provided name was not a mechanism name" msgstr "Il nome fornito non era un nome di meccanismo" #: lib/error.c:86 msgid "" "The gss_init_sec_context() or gss_accept_sec_context() function must be " "called again to complete its function" msgstr "" "La funzione gss_init_sec_context() oppure gss_accept_sec_context() deve " "essere chiamata di nuovo per essere completata" #: lib/error.c:89 msgid "The token was a duplicate of an earlier token" msgstr "Il token era un duplicato di uno precedente" #: lib/error.c:91 msgid "The token's validity period has expired" msgstr "Il periodo di validità del token è scaduto" #: lib/error.c:93 msgid "A later token has already been processed" msgstr "Un token successivo è già stato elaborato" #: lib/error.c:95 msgid "An expected per-message token was not received" msgstr "Un token per-message atteso non è stato ricevuto" #: lib/error.c:312 msgid "No error" msgstr "Nessun errore" #: lib/krb5/error.c:36 msgid "No @ in SERVICE-NAME name string" msgstr "Nessun @ nella stringa di nome SERVICE-NAME" #: lib/krb5/error.c:38 msgid "STRING-UID-NAME contains nondigits" msgstr "STRING-UID-NAME contiene caratteri non numerici" #: lib/krb5/error.c:40 msgid "UID does not resolve to username" msgstr "UID non risolve il nome utente" #: lib/krb5/error.c:42 msgid "Validation error" msgstr "Errore di validazione" #: lib/krb5/error.c:44 msgid "Couldn't allocate gss_buffer_t data" msgstr "Impossibile allocare dati gss_buffer_t" #: lib/krb5/error.c:46 msgid "Message context invalid" msgstr "Contesto del messaggio non valido" #: lib/krb5/error.c:48 msgid "Buffer is the wrong size" msgstr "Il buffer è di dimensione errata" #: lib/krb5/error.c:50 msgid "Credential usage type is unknown" msgstr "Il tipo d'uso delle credenziali è sconosciuto" #: lib/krb5/error.c:52 msgid "Unknown quality of protection specified" msgstr "Qualità di protezione specificata sconosciuta" #: lib/krb5/error.c:55 msgid "Principal in credential cache does not match desired name" msgstr "" "Il principal nella cache delle credenziali non corrisponde al nome desiderato" #: lib/krb5/error.c:57 msgid "No principal in keytab matches desired name" msgstr "Nessun principal nel keytab corrisponde al nome desiderato" #: lib/krb5/error.c:59 msgid "Credential cache has no TGT" msgstr "La cache delle credenziali non contiene TGT" #: lib/krb5/error.c:61 msgid "Authenticator has no subkey" msgstr "L'autenticatore non ha una sottochiave" #: lib/krb5/error.c:63 msgid "Context is already fully established" msgstr "Il contesto è già completamente definito" #: lib/krb5/error.c:65 msgid "Unknown signature type in token" msgstr "Tipo di firma sconosciuto nel token" #: lib/krb5/error.c:67 msgid "Invalid field length in token" msgstr "Lunghezza di campo non valida nel token" #: lib/krb5/error.c:69 msgid "Attempt to use incomplete security context" msgstr "Tentativo d'uso di un contesto di sicurezza incompleto" #: lib/krb5/error.c:86 msgid "No krb5 error" msgstr "Nessun errore krb5" #: lib/krb5/error.c:127 msgid "Unknown krb5 error" msgstr "Errore krb5 sconosciuto" #: src/gss.c:67 #, c-format msgid "Try `%s --help' for more information.\n" msgstr "Usare \"%s --help\" per maggiori informazioni.\n" #: src/gss.c:71 #, c-format msgid "Usage: %s OPTIONS...\n" msgstr "Uso: %s OPZIONI...\n" #: src/gss.c:74 msgid "" "Command line interface to GSS, used to explain error codes.\n" "\n" msgstr "" "Interfaccia a riga di comando per GSS, usata per illustrare i codici di " "errore.\n" "\n" #: src/gss.c:78 msgid "" "Mandatory arguments to long options are mandatory for short options too.\n" msgstr "" "Gli argomenti obbligatori per le opzioni lunghe lo sono anche per le opzioni " "corte.\n" #: src/gss.c:81 msgid "" " -h, --help Print help and exit.\n" " -V, --version Print version and exit.\n" " -l, --list-mechanisms\n" " List information about supported mechanisms\n" " in a human readable format.\n" " -m, --major=LONG Describe a `major status' error code value.\n" msgstr "" " -h, --help Stampa questo aiuto ed esce.\n" " -V, --version Stampa la versione ed esce.\n" " -l, --list-mechanisms\n" " Elenca le informazioni sui meccanismi supportati\n" " in forma leggibile.\n" " -m, --major=LONG Descrive un codice di errore \"major status\".\n" #: src/gss.c:89 msgid "" " -a, --accept-sec-context[=MECH]\n" " Accept a security context as server.\n" " If MECH is not specified, no credentials\n" " will be acquired. Use \"*\" to use library\n" " default mechanism.\n" " -i, --init-sec-context=MECH\n" " Initialize a security context as client.\n" " MECH is the SASL name of mechanism, use -l\n" " to list supported mechanisms.\n" " -n, --server-name=SERVICE@HOSTNAME\n" " For -i and -a, set the name of the remote host.\n" " For example, \"imap@mail.example.com\".\n" msgstr "" #: src/gss.c:103 msgid " -q, --quiet Silent operation (default=off).\n" msgstr " -q, --quiet Silent operation (default=off).\n" #: src/gss.c:122 #, c-format msgid "" "GSS-API major status code %ld (0x%lx).\n" "\n" msgstr "" "Codice di stato principale %ld (0x%lx) di GSS-API.\n" "\n" #: src/gss.c:124 #, c-format msgid "" " MSB LSB\n" " +-----------------+-----------------+---------------------------------+\n" " | Calling Error | Routine Error | Supplementary Info |\n" " | " msgstr "" " MSB " "LSB\n" " +----------------------+---------------------" "+------------------------------+\n" " | Errore di chiamata | Errore di routine | Informazioni " "aggiuntive |\n" " | " #: src/gss.c:138 #, c-format msgid "" "|\n" " +-----------------+-----------------+---------------------------------+\n" "Bit 31 24 23 16 15 0\n" "\n" msgstr "" "|\n" " +----------------------+---------------------" "+------------------------------+\n" "Bit 31 24 23 16 15 " "0\n" "\n" #: src/gss.c:148 #, c-format msgid "Masked routine error %ld (0x%lx) shifted into %ld (0x%lx):\n" msgstr "Errore della routine nascosta %ld (0x%lx) spostato in %ld (0x%lx):\n" #: src/gss.c:164 src/gss.c:198 src/gss.c:234 #, c-format msgid "displaying status code failed (%d)" msgstr "displaying status code failed (%d)" #: src/gss.c:184 #, c-format msgid "Masked calling error %ld (0x%lx) shifted into %ld (0x%lx):\n" msgstr "Errore della chiamata nascosta %ld (0x%lx) spostato in %ld (0x%lx):\n" #: src/gss.c:217 #, c-format msgid "Masked supplementary info %ld (0x%lx) shifted into %ld (0x%lx):\n" msgstr "" "Informazione aggiuntiva nascosta %ld (0x%lx) spostata in %ld (0x%lx):\n" #: src/gss.c:251 #, c-format msgid "No error\n" msgstr "Nessun errore\n" #: src/gss.c:269 #, c-format msgid "indicating mechanisms failed (%d)" msgstr "segnalazione del meccanismo non riuscita (%d)" #: src/gss.c:285 #, c-format msgid "inquiring information about mechanism failed (%d)" msgstr "richiesta informazioni sul meccanismo non riuscita (%d)" #: src/gss.c:342 src/gss.c:483 #, fuzzy, c-format msgid "inquiring mechanism for SASL name (%d/%d)" msgstr "segnalazione del meccanismo non riuscita (%d)" #: src/gss.c:355 src/gss.c:498 #, c-format msgid "could not import server name \"%s\" (%d/%d)" msgstr "" #: src/gss.c:374 #, fuzzy, c-format msgid "initializing security context failed (%d/%d)" msgstr "displaying status code failed (%d)" #: src/gss.c:378 src/gss.c:564 #, c-format msgid "base64 input too long" msgstr "" #: src/gss.c:380 src/gss.c:415 src/gss.c:545 src/gss.c:566 #, c-format msgid "malloc" msgstr "" #: src/gss.c:407 src/gss.c:537 #, c-format msgid "getline" msgstr "" #: src/gss.c:409 src/gss.c:539 #, c-format msgid "end of file" msgstr "" #: src/gss.c:413 src/gss.c:543 #, c-format msgid "base64 fail" msgstr "" #: src/gss.c:520 #, c-format msgid "could not acquire server credentials (%d/%d)" msgstr "" #: src/gss.c:560 #, fuzzy, c-format msgid "accepting security context failed (%d/%d)" msgstr "displaying status code failed (%d)" gss-1.0.3/po/Makefile.in.in0000644000000000000000000004155312415507605012303 00000000000000# Makefile for PO directory in any package using GNU gettext. # Copyright (C) 1995-1997, 2000-2007, 2009-2010 by Ulrich Drepper # # This file can be copied and used freely without restrictions. It can # be used in projects which are not available under the GNU General Public # License but which still want to provide support for the GNU gettext # functionality. # Please note that the actual code of GNU gettext is covered by the GNU # General Public License and is *not* in the public domain. # # Origin: gettext-0.19 GETTEXT_MACRO_VERSION = 0.19 PACKAGE = @PACKAGE@ VERSION = @VERSION@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ SED = @SED@ SHELL = /bin/sh @SET_MAKE@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ datarootdir = @datarootdir@ datadir = @datadir@ localedir = @localedir@ gettextsrcdir = $(datadir)/gettext/po INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ # We use $(mkdir_p). # In automake <= 1.9.x, $(mkdir_p) is defined either as "mkdir -p --" or as # "$(mkinstalldirs)" or as "$(install_sh) -d". For these automake versions, # @install_sh@ does not start with $(SHELL), so we add it. # In automake >= 1.10, @mkdir_p@ is derived from ${MKDIR_P}, which is defined # either as "/path/to/mkdir -p" or ".../install-sh -c -d". For these automake # versions, $(mkinstalldirs) and $(install_sh) are unused. mkinstalldirs = $(SHELL) @install_sh@ -d install_sh = $(SHELL) @install_sh@ MKDIR_P = @MKDIR_P@ mkdir_p = @mkdir_p@ GMSGFMT_ = @GMSGFMT@ GMSGFMT_no = @GMSGFMT@ GMSGFMT_yes = @GMSGFMT_015@ GMSGFMT = $(GMSGFMT_$(USE_MSGCTXT)) MSGFMT_ = @MSGFMT@ MSGFMT_no = @MSGFMT@ MSGFMT_yes = @MSGFMT_015@ MSGFMT = $(MSGFMT_$(USE_MSGCTXT)) XGETTEXT_ = @XGETTEXT@ XGETTEXT_no = @XGETTEXT@ XGETTEXT_yes = @XGETTEXT_015@ XGETTEXT = $(XGETTEXT_$(USE_MSGCTXT)) MSGMERGE = msgmerge MSGMERGE_UPDATE = @MSGMERGE@ --update MSGINIT = msginit MSGCONV = msgconv MSGFILTER = msgfilter POFILES = @POFILES@ GMOFILES = @GMOFILES@ UPDATEPOFILES = @UPDATEPOFILES@ DUMMYPOFILES = @DUMMYPOFILES@ DISTFILES.common = Makefile.in.in remove-potcdate.sin \ $(DISTFILES.common.extra1) $(DISTFILES.common.extra2) $(DISTFILES.common.extra3) DISTFILES = $(DISTFILES.common) Makevars POTFILES.in \ $(POFILES) $(GMOFILES) \ $(DISTFILES.extra1) $(DISTFILES.extra2) $(DISTFILES.extra3) POTFILES = \ CATALOGS = @CATALOGS@ POFILESDEPS_ = $(srcdir)/$(DOMAIN).pot POFILESDEPS_yes = $(POFILESDEPS_) POFILESDEPS_no = POFILESDEPS = $(POFILESDEPS_$(PO_DEPENDS_ON_POT)) DISTFILESDEPS_ = update-po DISTFILESDEPS_yes = $(DISTFILESDEPS_) DISTFILESDEPS_no = DISTFILESDEPS = $(DISTFILESDEPS_$(DIST_DEPENDS_ON_UPDATE_PO)) # Makevars gets inserted here. (Don't remove this line!) .SUFFIXES: .SUFFIXES: .po .gmo .mo .sed .sin .nop .po-create .po-update .po.mo: @echo "$(MSGFMT) -c -o $@ $<"; \ $(MSGFMT) -c -o t-$@ $< && mv t-$@ $@ .po.gmo: @lang=`echo $* | sed -e 's,.*/,,'`; \ test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \ echo "$${cdcmd}rm -f $${lang}.gmo && $(GMSGFMT) -c --statistics --verbose -o $${lang}.gmo $${lang}.po"; \ cd $(srcdir) && rm -f $${lang}.gmo && $(GMSGFMT) -c --statistics --verbose -o t-$${lang}.gmo $${lang}.po && mv t-$${lang}.gmo $${lang}.gmo .sin.sed: sed -e '/^#/d' $< > t-$@ mv t-$@ $@ all: all-@USE_NLS@ all-yes: stamp-po all-no: # Ensure that the gettext macros and this Makefile.in.in are in sync. CHECK_MACRO_VERSION = \ test "$(GETTEXT_MACRO_VERSION)" = "@GETTEXT_MACRO_VERSION@" \ || { echo "*** error: gettext infrastructure mismatch: using a Makefile.in.in from gettext version $(GETTEXT_MACRO_VERSION) but the autoconf macros are from gettext version @GETTEXT_MACRO_VERSION@" 1>&2; \ exit 1; \ } # $(srcdir)/$(DOMAIN).pot is only created when needed. When xgettext finds no # internationalized messages, no $(srcdir)/$(DOMAIN).pot is created (because # we don't want to bother translators with empty POT files). We assume that # LINGUAS is empty in this case, i.e. $(POFILES) and $(GMOFILES) are empty. # In this case, stamp-po is a nop (i.e. a phony target). # stamp-po is a timestamp denoting the last time at which the CATALOGS have # been loosely updated. Its purpose is that when a developer or translator # checks out the package via CVS, and the $(DOMAIN).pot file is not in CVS, # "make" will update the $(DOMAIN).pot and the $(CATALOGS), but subsequent # invocations of "make" will do nothing. This timestamp would not be necessary # if updating the $(CATALOGS) would always touch them; however, the rule for # $(POFILES) has been designed to not touch files that don't need to be # changed. stamp-po: $(srcdir)/$(DOMAIN).pot @$(CHECK_MACRO_VERSION) test ! -f $(srcdir)/$(DOMAIN).pot || \ test -z "$(GMOFILES)" || $(MAKE) $(GMOFILES) @test ! -f $(srcdir)/$(DOMAIN).pot || { \ echo "touch stamp-po" && \ echo timestamp > stamp-poT && \ mv stamp-poT stamp-po; \ } # Note: Target 'all' must not depend on target '$(DOMAIN).pot-update', # otherwise packages like GCC can not be built if only parts of the source # have been downloaded. # This target rebuilds $(DOMAIN).pot; it is an expensive operation. # Note that $(DOMAIN).pot is not touched if it doesn't need to be changed. # The determination of whether the package xyz is a GNU one is based on the # heuristic whether some file in the top level directory mentions "GNU xyz". # If GNU 'find' is available, we avoid grepping through monster files. $(DOMAIN).pot-update: $(POTFILES) $(srcdir)/POTFILES.in remove-potcdate.sed package_gnu="$(PACKAGE_GNU)"; \ test -n "$$package_gnu" || { \ if { if (LC_ALL=C find --version) 2>/dev/null | grep GNU >/dev/null; then \ LC_ALL=C find -L $(top_srcdir) -maxdepth 1 -type f \ -size -10000000c -exec grep 'GNU @PACKAGE@' \ /dev/null '{}' ';' 2>/dev/null; \ else \ LC_ALL=C grep 'GNU @PACKAGE@' $(top_srcdir)/* 2>/dev/null; \ fi; \ } | grep -v 'libtool:' >/dev/null; then \ package_gnu=yes; \ else \ package_gnu=no; \ fi; \ }; \ if test "$$package_gnu" = "yes"; then \ package_prefix='GNU '; \ else \ package_prefix=''; \ fi; \ if test -n '$(MSGID_BUGS_ADDRESS)' || test '$(PACKAGE_BUGREPORT)' = '@'PACKAGE_BUGREPORT'@'; then \ msgid_bugs_address='$(MSGID_BUGS_ADDRESS)'; \ else \ msgid_bugs_address='$(PACKAGE_BUGREPORT)'; \ fi; \ case `$(XGETTEXT) --version | sed 1q | sed -e 's,^[^0-9]*,,'` in \ '' | 0.[0-9] | 0.[0-9].* | 0.1[0-5] | 0.1[0-5].* | 0.16 | 0.16.[0-1]*) \ $(XGETTEXT) --default-domain=$(DOMAIN) --directory=$(top_srcdir) \ --add-comments=TRANSLATORS: $(XGETTEXT_OPTIONS) @XGETTEXT_EXTRA_OPTIONS@ \ --files-from=$(srcdir)/POTFILES.in \ --copyright-holder='$(COPYRIGHT_HOLDER)' \ --msgid-bugs-address="$$msgid_bugs_address" \ ;; \ *) \ $(XGETTEXT) --default-domain=$(DOMAIN) --directory=$(top_srcdir) \ --add-comments=TRANSLATORS: $(XGETTEXT_OPTIONS) @XGETTEXT_EXTRA_OPTIONS@ \ --files-from=$(srcdir)/POTFILES.in \ --copyright-holder='$(COPYRIGHT_HOLDER)' \ --package-name="$${package_prefix}@PACKAGE@" \ --package-version='@VERSION@' \ --msgid-bugs-address="$$msgid_bugs_address" \ ;; \ esac test ! -f $(DOMAIN).po || { \ if test -f $(srcdir)/$(DOMAIN).pot; then \ sed -f remove-potcdate.sed < $(srcdir)/$(DOMAIN).pot > $(DOMAIN).1po && \ sed -f remove-potcdate.sed < $(DOMAIN).po > $(DOMAIN).2po && \ if cmp $(DOMAIN).1po $(DOMAIN).2po >/dev/null 2>&1; then \ rm -f $(DOMAIN).1po $(DOMAIN).2po $(DOMAIN).po; \ else \ rm -f $(DOMAIN).1po $(DOMAIN).2po $(srcdir)/$(DOMAIN).pot && \ mv $(DOMAIN).po $(srcdir)/$(DOMAIN).pot; \ fi; \ else \ mv $(DOMAIN).po $(srcdir)/$(DOMAIN).pot; \ fi; \ } # This rule has no dependencies: we don't need to update $(DOMAIN).pot at # every "make" invocation, only create it when it is missing. # Only "make $(DOMAIN).pot-update" or "make dist" will force an update. $(srcdir)/$(DOMAIN).pot: $(MAKE) $(DOMAIN).pot-update # This target rebuilds a PO file if $(DOMAIN).pot has changed. # Note that a PO file is not touched if it doesn't need to be changed. $(POFILES): $(POFILESDEPS) @lang=`echo $@ | sed -e 's,.*/,,' -e 's/\.po$$//'`; \ if test -f "$(srcdir)/$${lang}.po"; then \ test -f $(srcdir)/$(DOMAIN).pot || $(MAKE) $(srcdir)/$(DOMAIN).pot; \ test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \ echo "$${cdcmd}$(MSGMERGE_UPDATE) $(MSGMERGE_OPTIONS) --lang=$${lang} $${lang}.po $(DOMAIN).pot"; \ cd $(srcdir) \ && { case `$(MSGMERGE_UPDATE) --version | sed 1q | sed -e 's,^[^0-9]*,,'` in \ '' | 0.[0-9] | 0.[0-9].* | 0.1[0-7] | 0.1[0-7].*) \ $(MSGMERGE_UPDATE) $(MSGMERGE_OPTIONS) $${lang}.po $(DOMAIN).pot;; \ *) \ $(MSGMERGE_UPDATE) $(MSGMERGE_OPTIONS) --lang=$${lang} $${lang}.po $(DOMAIN).pot;; \ esac; \ }; \ else \ $(MAKE) $${lang}.po-create; \ fi install: install-exec install-data install-exec: install-data: install-data-@USE_NLS@ if test "$(PACKAGE)" = "gettext-tools"; then \ $(mkdir_p) $(DESTDIR)$(gettextsrcdir); \ for file in $(DISTFILES.common) Makevars.template; do \ $(INSTALL_DATA) $(srcdir)/$$file \ $(DESTDIR)$(gettextsrcdir)/$$file; \ done; \ for file in Makevars; do \ rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \ done; \ else \ : ; \ fi install-data-no: all install-data-yes: all @catalogs='$(CATALOGS)'; \ for cat in $$catalogs; do \ cat=`basename $$cat`; \ lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \ dir=$(localedir)/$$lang/LC_MESSAGES; \ $(mkdir_p) $(DESTDIR)$$dir; \ if test -r $$cat; then realcat=$$cat; else realcat=$(srcdir)/$$cat; fi; \ $(INSTALL_DATA) $$realcat $(DESTDIR)$$dir/$(DOMAIN).mo; \ echo "installing $$realcat as $(DESTDIR)$$dir/$(DOMAIN).mo"; \ for lc in '' $(EXTRA_LOCALE_CATEGORIES); do \ if test -n "$$lc"; then \ if (cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc 2>/dev/null) | grep ' -> ' >/dev/null; then \ link=`cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc | sed -e 's/^.* -> //'`; \ mv $(DESTDIR)$(localedir)/$$lang/$$lc $(DESTDIR)$(localedir)/$$lang/$$lc.old; \ mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \ (cd $(DESTDIR)$(localedir)/$$lang/$$lc.old && \ for file in *; do \ if test -f $$file; then \ ln -s ../$$link/$$file $(DESTDIR)$(localedir)/$$lang/$$lc/$$file; \ fi; \ done); \ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc.old; \ else \ if test -d $(DESTDIR)$(localedir)/$$lang/$$lc; then \ :; \ else \ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc; \ mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \ fi; \ fi; \ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \ ln -s ../LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo 2>/dev/null || \ ln $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo 2>/dev/null || \ cp -p $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \ echo "installing $$realcat link as $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo"; \ fi; \ done; \ done install-strip: install installdirs: installdirs-exec installdirs-data installdirs-exec: installdirs-data: installdirs-data-@USE_NLS@ if test "$(PACKAGE)" = "gettext-tools"; then \ $(mkdir_p) $(DESTDIR)$(gettextsrcdir); \ else \ : ; \ fi installdirs-data-no: installdirs-data-yes: @catalogs='$(CATALOGS)'; \ for cat in $$catalogs; do \ cat=`basename $$cat`; \ lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \ dir=$(localedir)/$$lang/LC_MESSAGES; \ $(mkdir_p) $(DESTDIR)$$dir; \ for lc in '' $(EXTRA_LOCALE_CATEGORIES); do \ if test -n "$$lc"; then \ if (cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc 2>/dev/null) | grep ' -> ' >/dev/null; then \ link=`cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc | sed -e 's/^.* -> //'`; \ mv $(DESTDIR)$(localedir)/$$lang/$$lc $(DESTDIR)$(localedir)/$$lang/$$lc.old; \ mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \ (cd $(DESTDIR)$(localedir)/$$lang/$$lc.old && \ for file in *; do \ if test -f $$file; then \ ln -s ../$$link/$$file $(DESTDIR)$(localedir)/$$lang/$$lc/$$file; \ fi; \ done); \ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc.old; \ else \ if test -d $(DESTDIR)$(localedir)/$$lang/$$lc; then \ :; \ else \ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc; \ mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \ fi; \ fi; \ fi; \ done; \ done # Define this as empty until I found a useful application. installcheck: uninstall: uninstall-exec uninstall-data uninstall-exec: uninstall-data: uninstall-data-@USE_NLS@ if test "$(PACKAGE)" = "gettext-tools"; then \ for file in $(DISTFILES.common) Makevars.template; do \ rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \ done; \ else \ : ; \ fi uninstall-data-no: uninstall-data-yes: catalogs='$(CATALOGS)'; \ for cat in $$catalogs; do \ cat=`basename $$cat`; \ lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \ for lc in LC_MESSAGES $(EXTRA_LOCALE_CATEGORIES); do \ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \ done; \ done check: all info dvi ps pdf html tags TAGS ctags CTAGS ID: mostlyclean: rm -f remove-potcdate.sed rm -f stamp-poT rm -f core core.* $(DOMAIN).po $(DOMAIN).1po $(DOMAIN).2po *.new.po rm -fr *.o clean: mostlyclean distclean: clean rm -f Makefile Makefile.in POTFILES *.mo maintainer-clean: distclean @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." rm -f stamp-po $(GMOFILES) distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) dist distdir: test -z "$(DISTFILESDEPS)" || $(MAKE) $(DISTFILESDEPS) @$(MAKE) dist2 # This is a separate target because 'update-po' must be executed before. dist2: stamp-po $(DISTFILES) dists="$(DISTFILES)"; \ if test "$(PACKAGE)" = "gettext-tools"; then \ dists="$$dists Makevars.template"; \ fi; \ if test -f $(srcdir)/$(DOMAIN).pot; then \ dists="$$dists $(DOMAIN).pot stamp-po"; \ fi; \ if test -f $(srcdir)/ChangeLog; then \ dists="$$dists ChangeLog"; \ fi; \ for i in 0 1 2 3 4 5 6 7 8 9; do \ if test -f $(srcdir)/ChangeLog.$$i; then \ dists="$$dists ChangeLog.$$i"; \ fi; \ done; \ if test -f $(srcdir)/LINGUAS; then dists="$$dists LINGUAS"; fi; \ for file in $$dists; do \ if test -f $$file; then \ cp -p $$file $(distdir) || exit 1; \ else \ cp -p $(srcdir)/$$file $(distdir) || exit 1; \ fi; \ done update-po: Makefile $(MAKE) $(DOMAIN).pot-update test -z "$(UPDATEPOFILES)" || $(MAKE) $(UPDATEPOFILES) $(MAKE) update-gmo # General rule for creating PO files. .nop.po-create: @lang=`echo $@ | sed -e 's/\.po-create$$//'`; \ echo "File $$lang.po does not exist. If you are a translator, you can create it through 'msginit'." 1>&2; \ exit 1 # General rule for updating PO files. .nop.po-update: @lang=`echo $@ | sed -e 's/\.po-update$$//'`; \ if test "$(PACKAGE)" = "gettext-tools"; then PATH=`pwd`/../src:$$PATH; fi; \ tmpdir=`pwd`; \ echo "$$lang:"; \ test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \ echo "$${cdcmd}$(MSGMERGE) $(MSGMERGE_OPTIONS) --lang=$$lang $$lang.po $(DOMAIN).pot -o $$lang.new.po"; \ cd $(srcdir); \ if { case `$(MSGMERGE) --version | sed 1q | sed -e 's,^[^0-9]*,,'` in \ '' | 0.[0-9] | 0.[0-9].* | 0.1[0-7] | 0.1[0-7].*) \ $(MSGMERGE) $(MSGMERGE_OPTIONS) -o $$tmpdir/$$lang.new.po $$lang.po $(DOMAIN).pot;; \ *) \ $(MSGMERGE) $(MSGMERGE_OPTIONS) --lang=$$lang -o $$tmpdir/$$lang.new.po $$lang.po $(DOMAIN).pot;; \ esac; \ }; then \ if cmp $$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \ rm -f $$tmpdir/$$lang.new.po; \ else \ if mv -f $$tmpdir/$$lang.new.po $$lang.po; then \ :; \ else \ echo "msgmerge for $$lang.po failed: cannot move $$tmpdir/$$lang.new.po to $$lang.po" 1>&2; \ exit 1; \ fi; \ fi; \ else \ echo "msgmerge for $$lang.po failed!" 1>&2; \ rm -f $$tmpdir/$$lang.new.po; \ fi $(DUMMYPOFILES): update-gmo: Makefile $(GMOFILES) @: # Recreate Makefile by invoking config.status. Explicitly invoke the shell, # because execution permission bits may not work on the current file system. # Use @SHELL@, which is the shell determined by autoconf for the use by its # scripts, not $(SHELL) which is hardwired to /bin/sh and may be deficient. Makefile: Makefile.in.in Makevars $(top_builddir)/config.status @POMAKEFILEDEPS@ cd $(top_builddir) \ && @SHELL@ ./config.status $(subdir)/$@.in po-directories force: # Tell versions [3.59,3.63) of GNU make not to export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: gss-1.0.3/po/Makevars.in0000664000000000000000000000343612012453517011725 00000000000000# Makefile variables for PO directory in any package using GNU gettext. # Usually the message domain is the same as the package name. DOMAIN = $(PACKAGE)@PO_SUFFIX@ # These two variables depend on the location of this directory. subdir = po top_builddir = .. # These options get passed to xgettext. XGETTEXT_OPTIONS = --keyword=_ --keyword=N_ # This is the copyright holder that gets inserted into the header of the # $(DOMAIN).pot file. Set this to the copyright holder of the surrounding # package. (Note that the msgstr strings, extracted from the package's # sources, belong to the copyright holder of the package.) Translators are # expected to transfer the copyright for their translations to this person # or entity, or to disclaim their copyright. The empty string stands for # the public domain; in this case the translators are expected to disclaim # their copyright. COPYRIGHT_HOLDER = Simon Josefsson # This is the email address or URL to which the translators shall report # bugs in the untranslated strings: # - Strings which are not entire sentences, see the maintainer guidelines # in the GNU gettext documentation, section 'Preparing Strings'. # - Strings which use unclear terms or require additional context to be # understood. # - Strings which make invalid assumptions about notation of date, time or # money. # - Pluralisation problems. # - Incorrect English spelling. # - Incorrect formatting. # It can be your email address, or a mailing list address where translators # can write to without being subscribed, or the URL of a web page through # which the translators can contact you. MSGID_BUGS_ADDRESS = @PACKAGE_BUGREPORT@ # This is the list of locale categories, beyond LC_MESSAGES, for which the # message catalogs shall be used. It is usually empty. EXTRA_LOCALE_CATEGORIES = gss-1.0.3/po/ro.gmo0000644000000000000000000001516112415507644010754 00000000000000Þ•7ÔIŒ°æ±˜(±Ú,ô0!*R}˜.¬Û#ø&*CnŠ$£#Èì ()(R{;™;Õ@ R j ‹ Q« ý   + 9J "„ § m¿ 3- &a *ˆ 9³ 'í / -E 's &›  ã 'ö  )> h —y ¦æ¸*Ÿ&Êñ76F7}µÔ+ì'8.`<&Ì&ó*#E8i0¢)Ó-ý"+9N;ˆEÄ  "And Óáð<G@!ˆªs¾82)k-•5Ã/ù6)2`-“6Á2ø+-C$q/–Æ—Ù(*43+.,$#6 5 " '10 2&% / -!7) MSB LSB +-----------------+-----------------+---------------------------------+ | Calling Error | Routine Error | Supplementary Info | | A credential was invalidA later token has already been processedA parameter was malformedA required input parameter could not be readA required output parameter could not be writtenA supplied name was of an unsupported typeA token had an invalid MICA token was invalidAn expected per-message token was not receivedAn invalid name was suppliedAn invalid status code was suppliedAn unsupported mechanism was requestedAttempt to use incomplete security contextAuthenticator has no subkeyBuffer is the wrong sizeContext is already fully establishedCouldn't allocate gss_buffer_t dataCredential cache has no TGTCredential usage type is unknownGSS-API major status code %ld (0x%lx). Incorrect channel bindings were suppliedInvalid field length in tokenMasked calling error %ld (0x%lx) shifted into %ld (0x%lx): Masked routine error %ld (0x%lx) shifted into %ld (0x%lx): Masked supplementary info %ld (0x%lx) shifted into %ld (0x%lx): Message context invalidNo @ in SERVICE-NAME name stringNo context has been establishedNo credentials were supplied, or the credentials were unavailable or inaccessibleNo errorNo error No krb5 errorNo principal in keytab matches desired namePrincipal in credential cache does not match desired nameSTRING-UID-NAME contains nondigitsThe context has expiredThe gss_init_sec_context() or gss_accept_sec_context() function must be called again to complete its functionThe operation is forbidden by local security policyThe operation or option is unavailableThe provided name was not a mechanism nameThe quality-of-protection requested could not be providedThe referenced credentials have expiredThe requested credential element already existsThe token was a duplicate of an earlier tokenThe token's validity period has expiredTry `%s --help' for more information. UID does not resolve to usernameUnknown krb5 errorUnknown quality of protection specifiedUnknown signature type in tokenUnspecified error in underlying mechanismValidation error| +-----------------+-----------------+---------------------------------+ Bit 31 24 23 16 15 0 Project-Id-Version: gss 0.0.11 Report-Msgid-Bugs-To: bug-gss@gnu.org POT-Creation-Date: 2014-10-09 15:37+0200 PO-Revision-Date: 2004-04-22 12:00-0500 Last-Translator: Laurentiu Buzdugan Language-Team: Romanian Language: ro MIME-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-2 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=(n != 1); MSB LSB +-----------------+-----------------+---------------------------------+ | Eroare Apel | Eroare Rutinã | Informaþii Suplimentare | | O legitimaþie (credential) a fost invalidãUn token ulterior a fost deja procesatUn parametru a fost incorectNu a putut fi citit un parametru de intrare obligatoriuNu a putut fi scris un parametru de ieºire obligatoriuUn nume furnizat a fost de un tip care nu este suportatUn token a avut un MIC invalidUn token a fost invalidUn token pe mesaj aºteptat nu a fost primitA fost furnizat un nume invalidA fost furnizat un cod de stare invalidA fost cerut un mecanism care nu este suportatÎncercare de folosire a unui context de securitate incompletAuthenticator-u nu are nici o subcheieBuffer-ul este de dimensiune incorectãContextul este deja stabilit în totalitateNu am putut aloca data gss_buffer_tCache-ul de legitimaþii (credentials) nu are nici un TGTTipul de folosire a legitimaþiei este necunoscutCod de stare GSS-API major %ld (0x%lx). Au for furnizate legãturi de canale incorecteLungimea câmpuui invalidã în tokenEroare apel mascatã %ld (0x%lx) shiftatã în %ld (0x%lx): Eroare rutinã mascatã %ld (0x%lx) shiftatã în %ld (0x%lx): Informaþia suplimentarã mascatã %ld (0x%lx) shiftatã în %ld (0x%lx): Context mesaj invalidNici un @ în numele SERVICE-NAMENici un context nu a fost stabilitNici o legitimaþie (credential) nu a fost furnizatã, sau legitimaþiile nu au fost disponibile sau inaccesibileNici o eroareNici o eroare Nici o eroare krb5Nici un principal în keytab nu se potriveºte cu numele doritPrincipalul în cache-ul de legitimaþii nu se potriveºte cu numele doritSTRING-UID-NAME conþine non-cifreContextul a expiratFuncþiile gss_init_sec_context() sau gss_accept_sec_context() trebuie chemate din nou pentru a-ºi îndeplini funcþiaOperaþia este interzisã de politica de securitate localãOperaþia sau opþiunea nu este disponibilãNumele furnizat nu a fost un nume de mecanismCalitatea-de-protecþie cerutã nu a putut fi furnizatãLegitimaþiile (credentials) referite au expiratElementul de legitimare (credential) cerut existã dejaToken-ul a fost un duplicat al unui token anteriorPerioada de validitate a token-ului a expiratÎncercaþi `%s --help' pentru informaþii suplimentare. UID nu este rezolvat ca username (nume utilizator)Eroare krb5 necunoscutãCalitate de protecþie specificatã necunoscutãTip de semnãturã necunoscut în tokenO eraoare nespecificatã în mecanismul subiacentEroare de validare| +-----------------+-----------------+---------------------------------+ Bit 31 24 23 16 15 0 gss-1.0.3/po/sk.po0000644000000000000000000002460712415507644010612 00000000000000# Translation of gss package to Slovak. # Copyright (C) 2007 Free Software Foundation, Inc. # This file is distributed under the same license as the gss package. # Ivan Masár , 2007. # msgid "" msgstr "" "Project-Id-Version: gss 0.0.22\n" "Report-Msgid-Bugs-To: bug-gss@gnu.org\n" "POT-Creation-Date: 2014-10-09 15:37+0200\n" "PO-Revision-Date: 2007-09-14 23:40+0100\n" "Last-Translator: Ivan Masár \n" "Language-Team: Slovak \n" "Language: sk\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" #: lib/meta.c:37 msgid "Kerberos V5 GSS-API mechanism" msgstr "" #: lib/error.c:37 msgid "A required input parameter could not be read" msgstr "Požadovaný vstupný parameter nebolo možné naÄítaÅ¥" #: lib/error.c:39 msgid "A required output parameter could not be written" msgstr "Požadovaný výstupný parameter nebolo možné zapísaÅ¥" #: lib/error.c:41 msgid "A parameter was malformed" msgstr "Formát parametra bol chybný" #: lib/error.c:46 msgid "An unsupported mechanism was requested" msgstr "Bol vyžiadaný nepodporovaný mechanizmus" #: lib/error.c:48 msgid "An invalid name was supplied" msgstr "Bol dodaný neplatný názov" #: lib/error.c:50 msgid "A supplied name was of an unsupported type" msgstr "Dodaný názov bol nepodporovaného typu" #: lib/error.c:52 msgid "Incorrect channel bindings were supplied" msgstr "Boli dodané nesprávne väzby na kanál" #: lib/error.c:54 msgid "An invalid status code was supplied" msgstr "Bol dodaný neplatný stavový kód" #: lib/error.c:56 msgid "A token had an invalid MIC" msgstr "Token mal nesprávny MIC" #: lib/error.c:58 msgid "" "No credentials were supplied, or the credentials were unavailable or " "inaccessible" msgstr "Poverenie nebolo dodané, dostupné alebo prístupné" #: lib/error.c:61 msgid "No context has been established" msgstr "Nebol zavedený kontext" #: lib/error.c:63 msgid "A token was invalid" msgstr "Token bol neplatný" #: lib/error.c:65 msgid "A credential was invalid" msgstr "Poverenie bolo neplatné" #: lib/error.c:67 msgid "The referenced credentials have expired" msgstr "Poverenie, na ktoré bolo odkazované, vyprÅ¡alo" #: lib/error.c:69 msgid "The context has expired" msgstr "Kontext vyprÅ¡al" #: lib/error.c:71 msgid "Unspecified error in underlying mechanism" msgstr "NeÅ¡pecifikovaná chyba v použitom mechanizme" #: lib/error.c:73 msgid "The quality-of-protection requested could not be provided" msgstr "" "Nebolo možné poskytnúť požadovanú kvalitu-ochrany (quality-of-protection)" #: lib/error.c:75 msgid "The operation is forbidden by local security policy" msgstr "Operáciu zakazuje lokálna bezpeÄnostná politika" #: lib/error.c:77 msgid "The operation or option is unavailable" msgstr "Operácia alebo voľba nie je dostupná" #: lib/error.c:79 msgid "The requested credential element already exists" msgstr "Požadovaný prvok poverenia už existuje" #: lib/error.c:81 msgid "The provided name was not a mechanism name" msgstr "Poskytnutý názov nebol názvom mechanizmu" #: lib/error.c:86 msgid "" "The gss_init_sec_context() or gss_accept_sec_context() function must be " "called again to complete its function" msgstr "" "Funkciu gss_init_sec_context() alebo gss_accept_sec_context() je potrebné " "zavolaÅ¥ znova, aby dokonÄila svoju úlohu" #: lib/error.c:89 msgid "The token was a duplicate of an earlier token" msgstr "Token bol duplikátom skorÅ¡ieho tokenu" #: lib/error.c:91 msgid "The token's validity period has expired" msgstr "PlatnosÅ¥ tokenu vyprÅ¡ala" #: lib/error.c:93 msgid "A later token has already been processed" msgstr "Už bol spracovaný neskorší token" #: lib/error.c:95 msgid "An expected per-message token was not received" msgstr "OÄakávaný token-na-správu nebol obdržaný" #: lib/error.c:312 msgid "No error" msgstr "Žiadna chyba" #: lib/krb5/error.c:36 msgid "No @ in SERVICE-NAME name string" msgstr "V reÅ¥azci SERVICE-NAME chýba @" #: lib/krb5/error.c:38 msgid "STRING-UID-NAME contains nondigits" msgstr "STRING-UID-NAME obsahuje znaky, ktoré nie sú Äíslice" #: lib/krb5/error.c:40 msgid "UID does not resolve to username" msgstr "UID nie je možné preložiÅ¥ na používateľské meno" #: lib/krb5/error.c:42 msgid "Validation error" msgstr "Chyba pri overovaní" #: lib/krb5/error.c:44 msgid "Couldn't allocate gss_buffer_t data" msgstr "Nebolo možné alokovaÅ¥ údaje gss_buffer_t" #: lib/krb5/error.c:46 msgid "Message context invalid" msgstr "Neplatný kontext správy" #: lib/krb5/error.c:48 msgid "Buffer is the wrong size" msgstr "CHybná veľkosÅ¥ bufera" #: lib/krb5/error.c:50 msgid "Credential usage type is unknown" msgstr "Typ použitia oprávnenia je neznámy" #: lib/krb5/error.c:52 msgid "Unknown quality of protection specified" msgstr "Bola zadaná neznáma kvalita ochrany" #: lib/krb5/error.c:55 msgid "Principal in credential cache does not match desired name" msgstr "" "Zmocniteľ vo vyrovnávacej pamäti oprávnení sa nezhoduje s požadovaným menom" #: lib/krb5/error.c:57 msgid "No principal in keytab matches desired name" msgstr "Zmocniteľ v keytab sa zhoduje s požadovaným menom" #: lib/krb5/error.c:59 msgid "Credential cache has no TGT" msgstr "Vyrovnávacia pamäť oprávnení nemá TGT" #: lib/krb5/error.c:61 msgid "Authenticator has no subkey" msgstr "Autentifikátor nemá podkľúÄ" #: lib/krb5/error.c:63 msgid "Context is already fully established" msgstr "Kontext je už úplne zavedený" #: lib/krb5/error.c:65 msgid "Unknown signature type in token" msgstr "Neplatný typ podpisu v tokene" #: lib/krb5/error.c:67 msgid "Invalid field length in token" msgstr "Neplatná dĺžka poľa v tokene" #: lib/krb5/error.c:69 msgid "Attempt to use incomplete security context" msgstr "Pokus o použitie neúplného bezpeÄnostného kontextu" #: lib/krb5/error.c:86 msgid "No krb5 error" msgstr "Žiadna chyba krb5" #: lib/krb5/error.c:127 msgid "Unknown krb5 error" msgstr "Neznáma chyba krb5" #: src/gss.c:67 #, c-format msgid "Try `%s --help' for more information.\n" msgstr "Skúste viac informácií pomocou „%s --help“.\n" #: src/gss.c:71 #, c-format msgid "Usage: %s OPTIONS...\n" msgstr "" #: src/gss.c:74 msgid "" "Command line interface to GSS, used to explain error codes.\n" "\n" msgstr "" #: src/gss.c:78 msgid "" "Mandatory arguments to long options are mandatory for short options too.\n" msgstr "" #: src/gss.c:81 msgid "" " -h, --help Print help and exit.\n" " -V, --version Print version and exit.\n" " -l, --list-mechanisms\n" " List information about supported mechanisms\n" " in a human readable format.\n" " -m, --major=LONG Describe a `major status' error code value.\n" msgstr "" #: src/gss.c:89 msgid "" " -a, --accept-sec-context[=MECH]\n" " Accept a security context as server.\n" " If MECH is not specified, no credentials\n" " will be acquired. Use \"*\" to use library\n" " default mechanism.\n" " -i, --init-sec-context=MECH\n" " Initialize a security context as client.\n" " MECH is the SASL name of mechanism, use -l\n" " to list supported mechanisms.\n" " -n, --server-name=SERVICE@HOSTNAME\n" " For -i and -a, set the name of the remote host.\n" " For example, \"imap@mail.example.com\".\n" msgstr "" #: src/gss.c:103 msgid " -q, --quiet Silent operation (default=off).\n" msgstr "" #: src/gss.c:122 #, c-format msgid "" "GSS-API major status code %ld (0x%lx).\n" "\n" msgstr "" "GSS-API hlavné, stavový kód %ld (0x%lx).\n" "\n" #: src/gss.c:124 #, c-format msgid "" " MSB LSB\n" " +-----------------+-----------------+---------------------------------+\n" " | Calling Error | Routine Error | Supplementary Info |\n" " | " msgstr "" " MSB LSB\n" " +-----------------+-----------------+---------------------------------+\n" " | Chyba volania | Chyba rutiny | Doplňujúce informácie |\n" " | " #: src/gss.c:138 #, c-format msgid "" "|\n" " +-----------------+-----------------+---------------------------------+\n" "Bit 31 24 23 16 15 0\n" "\n" msgstr "" "|\n" " +-----------------+-----------------+---------------------------------+\n" "Bit 31 24 23 16 15 0\n" "\n" #: src/gss.c:148 #, c-format msgid "Masked routine error %ld (0x%lx) shifted into %ld (0x%lx):\n" msgstr "Maskovaná chyba rutiny %ld (0x%lx) posunutá na %ld (0x%lx):\n" #: src/gss.c:164 src/gss.c:198 src/gss.c:234 #, fuzzy, c-format msgid "displaying status code failed (%d)" msgstr "%s: zobrazenie stavového kódu zlyhalo\n" #: src/gss.c:184 #, c-format msgid "Masked calling error %ld (0x%lx) shifted into %ld (0x%lx):\n" msgstr "Maskovaná chyba volania %ld (0x%lx) posunutá na %ld (0x%lx):\n" #: src/gss.c:217 #, c-format msgid "Masked supplementary info %ld (0x%lx) shifted into %ld (0x%lx):\n" msgstr "Maskované doplňujúce informácie %ld (0x%lx) posunuté na %ld (0x%lx):\n" #: src/gss.c:251 #, c-format msgid "No error\n" msgstr "Žiadna chyba\n" #: src/gss.c:269 #, c-format msgid "indicating mechanisms failed (%d)" msgstr "" #: src/gss.c:285 #, c-format msgid "inquiring information about mechanism failed (%d)" msgstr "" #: src/gss.c:342 src/gss.c:483 #, c-format msgid "inquiring mechanism for SASL name (%d/%d)" msgstr "" #: src/gss.c:355 src/gss.c:498 #, c-format msgid "could not import server name \"%s\" (%d/%d)" msgstr "" #: src/gss.c:374 #, c-format msgid "initializing security context failed (%d/%d)" msgstr "" #: src/gss.c:378 src/gss.c:564 #, c-format msgid "base64 input too long" msgstr "" #: src/gss.c:380 src/gss.c:415 src/gss.c:545 src/gss.c:566 #, c-format msgid "malloc" msgstr "" #: src/gss.c:407 src/gss.c:537 #, c-format msgid "getline" msgstr "" #: src/gss.c:409 src/gss.c:539 #, c-format msgid "end of file" msgstr "" #: src/gss.c:413 src/gss.c:543 #, c-format msgid "base64 fail" msgstr "" #: src/gss.c:520 #, c-format msgid "could not acquire server credentials (%d/%d)" msgstr "" #: src/gss.c:560 #, c-format msgid "accepting security context failed (%d/%d)" msgstr "" #~ msgid "%s: missing parameter\n" #~ msgstr "%s: chýba parameter\n" gss-1.0.3/po/pl.gmo0000644000000000000000000001756212415507644010756 00000000000000Þ•@Y€æh4†»(Ôý,0D*u ».Ïþ# &? *f ‘ ­ =Æ $ #) M i (Š (³ Ü ú I ;b ;ž @Ú  3 T Qt Æ Ï Ù +ç 9 "M p mˆ 3ö &**Q9|'¶/Þ-'<&d ‹¬'¿ç)1G"X!{1—Ïxgæà>ÇD'K%s™2·1ê'DZ0kœ°"È0ë =EP$–)»0å1'H$p•³QÑA#AeG§ï$ /:F  Œ˜3¨IÜ0&Wlg>Ô#+75c'™6Á#ø$;+`Œ$Ÿ#Ä*è*-D,r:Ÿ—Ú%845;+. = 7/ , "!)0:@$19 ?*32<#-6>& (' MSB LSB +-----------------+-----------------+---------------------------------+ | Calling Error | Routine Error | Supplementary Info | | -h, --help Print help and exit. -V, --version Print version and exit. -l, --list-mechanisms List information about supported mechanisms in a human readable format. -m, --major=LONG Describe a `major status' error code value. -q, --quiet Silent operation (default=off). A credential was invalidA later token has already been processedA parameter was malformedA required input parameter could not be readA required output parameter could not be writtenA supplied name was of an unsupported typeA token had an invalid MICA token was invalidAn expected per-message token was not receivedAn invalid name was suppliedAn invalid status code was suppliedAn unsupported mechanism was requestedAttempt to use incomplete security contextAuthenticator has no subkeyBuffer is the wrong sizeCommand line interface to GSS, used to explain error codes. Context is already fully establishedCouldn't allocate gss_buffer_t dataCredential cache has no TGTCredential usage type is unknownGSS-API major status code %ld (0x%lx). Incorrect channel bindings were suppliedInvalid field length in tokenKerberos V5 GSS-API mechanismMandatory arguments to long options are mandatory for short options too. Masked calling error %ld (0x%lx) shifted into %ld (0x%lx): Masked routine error %ld (0x%lx) shifted into %ld (0x%lx): Masked supplementary info %ld (0x%lx) shifted into %ld (0x%lx): Message context invalidNo @ in SERVICE-NAME name stringNo context has been establishedNo credentials were supplied, or the credentials were unavailable or inaccessibleNo errorNo error No krb5 errorNo principal in keytab matches desired namePrincipal in credential cache does not match desired nameSTRING-UID-NAME contains nondigitsThe context has expiredThe gss_init_sec_context() or gss_accept_sec_context() function must be called again to complete its functionThe operation is forbidden by local security policyThe operation or option is unavailableThe provided name was not a mechanism nameThe quality-of-protection requested could not be providedThe referenced credentials have expiredThe requested credential element already existsThe token was a duplicate of an earlier tokenThe token's validity period has expiredTry `%s --help' for more information. UID does not resolve to usernameUnknown krb5 errorUnknown quality of protection specifiedUnknown signature type in tokenUnspecified error in underlying mechanismUsage: %s OPTIONS... Validation errordisplaying status code failed (%d)indicating mechanisms failed (%d)inquiring information about mechanism failed (%d)| +-----------------+-----------------+---------------------------------+ Bit 31 24 23 16 15 0 Project-Id-Version: gss 1.0.1 Report-Msgid-Bugs-To: bug-gss@gnu.org POT-Creation-Date: 2014-10-09 15:37+0200 PO-Revision-Date: 2010-11-16 21:01+0100 Last-Translator: Jakub Bogusz Language-Team: Polish Language: pl MIME-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-2 Content-Transfer-Encoding: 8bit MSB LSB +-----------------+-----------------+---------------------------------+ | B³±d wywo³ania | B³±d procedury | Dodatkowe informacje | | -h, --help Wypisanie tego opisu i zakoñczenie -V, --version Wypisanie numeru wersji i zakoñczenie -l, --list-mechanisms Informacje o obs³ugiwanych mechanizmach w postaci czytelnej dla cz³owieka -m, --major=LONG Opis "g³ównego" kodu b³êdu w postaci tekstowej -q, --quiet Dzia³anie bez komunikatów (domy¶lnie wy³±czone) Dane uwierzytelniaj±ce by³y niepoprawnePó¼niejszy token by³ ju¿ przetworzonyParametr by³ ¼le sformu³owanyWymagany parametr wej¶ciowy nie móg³ byæ odczytanyWymagany parametr wyj¶ciowy nie móg³ byæ zapisanyPodana nazwa by³a nieobs³ugiwanego typuToken mia³ b³êdny MICToken by³ b³êdnyNie otrzymano oczekiwanego tokenu dla komunikatuPodano b³êdn± nazwêPodano b³êdny kod stanu¯±dano nieobs³ugiwanego mechanizmuPróba u¿ycia niepe³nego kontekstu bezpieczeñstwaAuthenticator nie ma pola subkeyZ³y rozmiar buforaInterfejs linii poleceñ do GSS s³u¿±cy do wyja¶niania kodów b³êdów. Kontekst ju¿ zosta³ w pe³ni ustalonyNie mo¿na przydzieliæ danych gss_buffer_tBufor danych uwierzytelniaj±cych nie zawiera TGTNieznany sposób u¿ycia danych uwierzytelniaj±cychG³ówny kod stanu GSS-API %ld (0x%lx). Podano niepoprawne powi±zania kana³uB³êdna d³ugo¶æ pola w tokenieMechanizm Kerberos V5 GSS-APIArgumenty obowi±zkowe dla opcji d³ugich s± obowi±zkowe tak¿e dla opcji krótkich. Maskowany b³±d wywo³ania %ld (0x%lx) przesuniêty do %ld (0x%lx): Maskowany b³±d procedury %ld (0x%lx) przesuniêty do %ld (0x%lx): Maskowane dodatkowe informacje %ld (0x%lx) przesuniête do %ld (0x%lx): B³êdny kontekst komunikatuBrak @ w ³añcuchu nazwy SERVICE-NAMENie ustalono kontekstuNie podano danych uwierzytelniaj±cych lub by³y niedostêpneBrak b³êduBrak b³êdu Brak b³êdu krb5¯aden zarz±dca w keytab nie pasuje do ¿±danej nazwyZarz±dca w buforze danych uwierzytelniaj±cych nie pasuje do ¿±danej nazwySTRING-UID-NAME zawiera znaki nie bêd±ce cyframiKontekst wygas³Funkcja gss_init_sec_context() lub gss_accept_sec_context() musi byæ wywo³ana ponownie aby dokoñczyæ funkcjêOperacja jest zabroniona przez lokaln± politykê bezpieczeñstwaOperacja lub opcja jest niedostêpnaDostarczona nazwa nie by³a nazw± mechanizmu¯±dana jako¶æ zabezpieczenia nie mog³a byæ zapewnionaWskazane dane uwierzytelniaj±ce wygas³y¯±dany element danych uwierzytelniaj±cych ju¿ istniejeToken by³ duplikatem wcze¶niejszegoOkres poprawno¶ci tokenu min±³`%s --help' poda wiêcej informacji. UID nie rozwi±zuje siê na nazwê u¿ytkownikaNieznany b³±d krb5Podano nieznan± jako¶ zabezpieczeniaNieznany rodzaj sygnatury w tokenieNieokre¶lony b³±d w podrzêdnym mechanizmieSk³adnia: %s OPCJE... B³±d kontroli poprawno¶ciwy¶wietlenie kodu stanu nie powiod³o siê (%d)okre¶lanie mechanizmów nie powiod³o siê (%d)pobieranie informacji o mechanizmach nie powiod³o siê (%d)| +-----------------+-----------------+---------------------------------+ Bit 31 24 23 16 15 0 gss-1.0.3/po/en@boldquot.header0000644000000000000000000000247112415507605013253 00000000000000# All this catalog "translates" are quotation characters. # The msgids must be ASCII and therefore cannot contain real quotation # characters, only substitutes like grave accent (0x60), apostrophe (0x27) # and double quote (0x22). These substitutes look strange; see # http://www.cl.cam.ac.uk/~mgk25/ucs/quotes.html # # This catalog translates grave accent (0x60) and apostrophe (0x27) to # left single quotation mark (U+2018) and right single quotation mark (U+2019). # It also translates pairs of apostrophe (0x27) to # left single quotation mark (U+2018) and right single quotation mark (U+2019) # and pairs of quotation mark (0x22) to # left double quotation mark (U+201C) and right double quotation mark (U+201D). # # When output to an UTF-8 terminal, the quotation characters appear perfectly. # When output to an ISO-8859-1 terminal, the single quotation marks are # transliterated to apostrophes (by iconv in glibc 2.2 or newer) or to # grave/acute accent (by libiconv), and the double quotation marks are # transliterated to 0x22. # When output to an ASCII terminal, the single quotation marks are # transliterated to apostrophes, and the double quotation marks are # transliterated to 0x22. # # This catalog furthermore displays the text between the quotation marks in # bold face, assuming the VT100/XTerm escape sequences. # gss-1.0.3/po/id.po0000644000000000000000000002723312415507644010567 00000000000000# Indonesian translations for gss package. # Copyright (C) 2010 Free Software Foundation, Inc. # This file is distributed under the same license as the gss package. # Andhika Padmawan , 2010-2012. # msgid "" msgstr "" "Project-Id-Version: gss 1.0.1\n" "Report-Msgid-Bugs-To: bug-gss@gnu.org\n" "POT-Creation-Date: 2014-10-09 15:37+0200\n" "PO-Revision-Date: 2012-05-18 15:45+0700\n" "Last-Translator: Andhika Padmawan \n" "Language-Team: Indonesian \n" "Language: id\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=utf-8\n" "Content-Transfer-Encoding: 8bit\n" #: lib/meta.c:37 msgid "Kerberos V5 GSS-API mechanism" msgstr "Mekanisme Kerberos V5 GSS-API" #: lib/error.c:37 msgid "A required input parameter could not be read" msgstr "Parameter masukan yang dibutuhkan tak bisa dibaca" #: lib/error.c:39 msgid "A required output parameter could not be written" msgstr "Parameter keluaran yang dibutuhkan tak bisa ditulis" #: lib/error.c:41 msgid "A parameter was malformed" msgstr "Parameter salah bentuk" #: lib/error.c:46 msgid "An unsupported mechanism was requested" msgstr "Mekanisme yang tak didukung telah diminta" #: lib/error.c:48 msgid "An invalid name was supplied" msgstr "Nama tidak sah telah diberikan" #: lib/error.c:50 msgid "A supplied name was of an unsupported type" msgstr "Nama yang diberikan merupakan tipe yang tak didukung" #: lib/error.c:52 msgid "Incorrect channel bindings were supplied" msgstr "Pengikat kanal tidak sah telah dipasok" #: lib/error.c:54 msgid "An invalid status code was supplied" msgstr "Kode status tidak sah telah dipasok" #: lib/error.c:56 msgid "A token had an invalid MIC" msgstr "Token memiliki MIC tidak sah" #: lib/error.c:58 msgid "" "No credentials were supplied, or the credentials were unavailable or " "inaccessible" msgstr "" "Tak ada kredensial yang dipasok, atau kredensial tak tersedia atau tak dapat " "diakses" #: lib/error.c:61 msgid "No context has been established" msgstr "Tak ada konteks yang dibangun" #: lib/error.c:63 msgid "A token was invalid" msgstr "Token tidak sah" #: lib/error.c:65 msgid "A credential was invalid" msgstr "Kredensial tidak sah" #: lib/error.c:67 msgid "The referenced credentials have expired" msgstr "Kredensial yang diacu telah kadaluarsa" #: lib/error.c:69 msgid "The context has expired" msgstr "Konteks telah kadaluarsa" #: lib/error.c:71 msgid "Unspecified error in underlying mechanism" msgstr "Galat tak ditentukan di mekanisme dasar" #: lib/error.c:73 msgid "The quality-of-protection requested could not be provided" msgstr "Kualitas proteksi diminta tak dapat disediakan" #: lib/error.c:75 msgid "The operation is forbidden by local security policy" msgstr "Operasi dilarang oleh kebijakan keamanan lokal" #: lib/error.c:77 msgid "The operation or option is unavailable" msgstr "Operasi atau opsi tak tersedia" #: lib/error.c:79 msgid "The requested credential element already exists" msgstr "Elemen kredensial yang diminta telah ada" #: lib/error.c:81 msgid "The provided name was not a mechanism name" msgstr "Nama yang diberikan bukan nama mekanisme" #: lib/error.c:86 msgid "" "The gss_init_sec_context() or gss_accept_sec_context() function must be " "called again to complete its function" msgstr "" "Fungsi gss_init_sec_context() atau gss_accept_sec_context() harus dipanggil " "ulang untuk melengkapi fungsinya" #: lib/error.c:89 msgid "The token was a duplicate of an earlier token" msgstr "Token merupakan duplikat dari token sebelumnya" #: lib/error.c:91 msgid "The token's validity period has expired" msgstr "Periode validitas token telah kadaluarsa" #: lib/error.c:93 msgid "A later token has already been processed" msgstr "Token selanjutnya telah diproses" #: lib/error.c:95 msgid "An expected per-message token was not received" msgstr "Token per-pesan yang diharapkan tidak diterima" #: lib/error.c:312 msgid "No error" msgstr "Tak ada galat" #: lib/krb5/error.c:36 msgid "No @ in SERVICE-NAME name string" msgstr "Tak ada @ di benang nama SERVICE-NAME" #: lib/krb5/error.c:38 msgid "STRING-UID-NAME contains nondigits" msgstr "STRING-UID-NAME berisi nondigit" #: lib/krb5/error.c:40 msgid "UID does not resolve to username" msgstr "UID tak dapat memecahkan ke nama pengguna" #: lib/krb5/error.c:42 msgid "Validation error" msgstr "Galat validasi" #: lib/krb5/error.c:44 msgid "Couldn't allocate gss_buffer_t data" msgstr "Tak dapat mengalokasikan data gss_buffer_t" #: lib/krb5/error.c:46 msgid "Message context invalid" msgstr "Konteks pesan tidak sah" #: lib/krb5/error.c:48 msgid "Buffer is the wrong size" msgstr "Penyangga dalam ukuran yang salah" #: lib/krb5/error.c:50 msgid "Credential usage type is unknown" msgstr "Tipe penggunaan kredensial tak diketahui" #: lib/krb5/error.c:52 msgid "Unknown quality of protection specified" msgstr "Kualitas proteksi tak diketahui telah ditentukan" #: lib/krb5/error.c:55 msgid "Principal in credential cache does not match desired name" msgstr "" "Prinsip dalam tembolok kredensial tidak cocok dengan nama yang diinginkan" #: lib/krb5/error.c:57 msgid "No principal in keytab matches desired name" msgstr "Tak ada prinsip di tab kunci yang cocok dengan nama yang diinginkan" #: lib/krb5/error.c:59 msgid "Credential cache has no TGT" msgstr "Tembolok kredensial tak memiliki TGT" #: lib/krb5/error.c:61 msgid "Authenticator has no subkey" msgstr "Otentikator tidak memiliki subkunci" #: lib/krb5/error.c:63 msgid "Context is already fully established" msgstr "Konteks telah sepenuhnya terbangun" #: lib/krb5/error.c:65 msgid "Unknown signature type in token" msgstr "Tipe tanda tangan tak dikenal di token" #: lib/krb5/error.c:67 msgid "Invalid field length in token" msgstr "Panjang medan tak sah di token" #: lib/krb5/error.c:69 msgid "Attempt to use incomplete security context" msgstr "Coba menggunakan konteks keamanan tidak lengkap" #: lib/krb5/error.c:86 msgid "No krb5 error" msgstr "Tak ada galat krb5" #: lib/krb5/error.c:127 msgid "Unknown krb5 error" msgstr "Galat krb5 tak dikenal" #: src/gss.c:67 #, c-format msgid "Try `%s --help' for more information.\n" msgstr "Coba `%s --help' untuk informasi lebih lanjut.\n" #: src/gss.c:71 #, c-format msgid "Usage: %s OPTIONS...\n" msgstr "Penggunaan: %s OPSI...\n" #: src/gss.c:74 msgid "" "Command line interface to GSS, used to explain error codes.\n" "\n" msgstr "" "Antarmuka baris perintah ke GSS, digunakan untuk menjelaskan kode galat.\n" "\n" #: src/gss.c:78 msgid "" "Mandatory arguments to long options are mandatory for short options too.\n" msgstr "Argumen wajib untuk opsi panjang juga wajib untuk opsi pendek.\n" #: src/gss.c:81 msgid "" " -h, --help Print help and exit.\n" " -V, --version Print version and exit.\n" " -l, --list-mechanisms\n" " List information about supported mechanisms\n" " in a human readable format.\n" " -m, --major=LONG Describe a `major status' error code value.\n" msgstr "" " -h, --help Cetak bantuan lalu keluar.\n" " -V, --version Cetak versi lalu keluar.\n" " -l, --list-mechanisms\n" " Tampilkan informasi tentang mekanisme yang didukung\n" " dalam format yang dapat dibaca manusia.\n" " -m, --major=LONG Jelaskan nilai kode galat `major status'.\n" #: src/gss.c:89 msgid "" " -a, --accept-sec-context[=MECH]\n" " Accept a security context as server.\n" " If MECH is not specified, no credentials\n" " will be acquired. Use \"*\" to use library\n" " default mechanism.\n" " -i, --init-sec-context=MECH\n" " Initialize a security context as client.\n" " MECH is the SASL name of mechanism, use -l\n" " to list supported mechanisms.\n" " -n, --server-name=SERVICE@HOSTNAME\n" " For -i and -a, set the name of the remote host.\n" " For example, \"imap@mail.example.com\".\n" msgstr "" #: src/gss.c:103 msgid " -q, --quiet Silent operation (default=off).\n" msgstr " -q, --quiet Operasi diam (standar=mati).\n" #: src/gss.c:122 #, c-format msgid "" "GSS-API major status code %ld (0x%lx).\n" "\n" msgstr "" "Kode status mayor GSS-API %ld (0x%lx).\n" "\n" #: src/gss.c:124 #, c-format msgid "" " MSB LSB\n" " +-----------------+-----------------+---------------------------------+\n" " | Calling Error | Routine Error | Supplementary Info |\n" " | " msgstr "" " MSB LSB\n" " +-------------------+---------------+---------------------------------+\n" " | Galat Memanggil | Galat Rutin | Info Tambahan |\n" " | " #: src/gss.c:138 #, c-format msgid "" "|\n" " +-----------------+-----------------+---------------------------------+\n" "Bit 31 24 23 16 15 0\n" "\n" msgstr "" "|\n" " +-----------------+-----------------+---------------------------------+\n" "Bita 31 24 23 16 15 0\n" "\n" #: src/gss.c:148 #, c-format msgid "Masked routine error %ld (0x%lx) shifted into %ld (0x%lx):\n" msgstr "Galat rutin bertopeng %ld (0x%lx) digeser ke %ld (0x%lx):\n" #: src/gss.c:164 src/gss.c:198 src/gss.c:234 #, c-format msgid "displaying status code failed (%d)" msgstr "menampilkan kode status gagal (%d)" #: src/gss.c:184 #, c-format msgid "Masked calling error %ld (0x%lx) shifted into %ld (0x%lx):\n" msgstr "Galat memanggil bertopeng %ld (0x%lx) digeser ke %ld (0x%lx):\n" #: src/gss.c:217 #, c-format msgid "Masked supplementary info %ld (0x%lx) shifted into %ld (0x%lx):\n" msgstr "Info tambahan bertopeng %ld (0x%lx) digeser ke %ld (0x%lx):\n" #: src/gss.c:251 #, c-format msgid "No error\n" msgstr "Tak ada galat\n" #: src/gss.c:269 #, c-format msgid "indicating mechanisms failed (%d)" msgstr "mengindikasikan kegagalan mekanisme (%d)" #: src/gss.c:285 #, c-format msgid "inquiring information about mechanism failed (%d)" msgstr "mencari tahu informasi tentang kegagalan mekanisme (%d)" #: src/gss.c:342 src/gss.c:483 #, fuzzy, c-format msgid "inquiring mechanism for SASL name (%d/%d)" msgstr "mengindikasikan kegagalan mekanisme (%d)" #: src/gss.c:355 src/gss.c:498 #, c-format msgid "could not import server name \"%s\" (%d/%d)" msgstr "" #: src/gss.c:374 #, fuzzy, c-format msgid "initializing security context failed (%d/%d)" msgstr "menampilkan kode status gagal (%d)" #: src/gss.c:378 src/gss.c:564 #, c-format msgid "base64 input too long" msgstr "" #: src/gss.c:380 src/gss.c:415 src/gss.c:545 src/gss.c:566 #, c-format msgid "malloc" msgstr "" #: src/gss.c:407 src/gss.c:537 #, c-format msgid "getline" msgstr "" #: src/gss.c:409 src/gss.c:539 #, c-format msgid "end of file" msgstr "" #: src/gss.c:413 src/gss.c:543 #, c-format msgid "base64 fail" msgstr "" #: src/gss.c:520 #, c-format msgid "could not acquire server credentials (%d/%d)" msgstr "" #: src/gss.c:560 #, fuzzy, c-format msgid "accepting security context failed (%d/%d)" msgstr "menampilkan kode status gagal (%d)" #~ msgid "" #~ " -h, --help Print help and exit\n" #~ " -V, --version Print version and exit\n" #~ " -m, --major=LONG Describe a `major status' error code vaue in plain " #~ "text.\n" #~ " -q, --quiet Silent operation (default=off)\n" #~ msgstr "" #~ " -h, --help Cetak bantuan dan keluar\n" #~ " -V, --version Cetak versi dan keluar\n" #~ " -m, --major=LONG Jelaskan nilai kode galat `status utama' dalam teks " #~ "biasa.\n" #~ " -q, --quiet Operasi diam (standar=off)\n" #~ msgid "%s: missing parameter\n" #~ msgstr "%s: kehilangan parameter\n" gss-1.0.3/po/boldquot.sed0000644000000000000000000000033112415507605012144 00000000000000s/"\([^"]*\)"/“\1â€/g s/`\([^`']*\)'/‘\1’/g s/ '\([^`']*\)' / ‘\1’ /g s/ '\([^`']*\)'$/ ‘\1’/g s/^'\([^`']*\)' /‘\1’ /g s/“â€/""/g s/“/“/g s/â€/â€/g s/‘/‘/g s/’/’/g gss-1.0.3/po/ro.po0000644000000000000000000002517312415507644010614 00000000000000# Mesajele în limba românã pentru gss. # Copyright (C) 2003 Free Software Foundation, Inc. # Acest fiºier este distribuit sub aceeaºi licenþã ca ºi pachetul gss. # Laurentiu Buzdugan , 2003. # # # msgid "" msgstr "" "Project-Id-Version: gss 0.0.11\n" "Report-Msgid-Bugs-To: bug-gss@gnu.org\n" "POT-Creation-Date: 2014-10-09 15:37+0200\n" "PO-Revision-Date: 2004-04-22 12:00-0500\n" "Last-Translator: Laurentiu Buzdugan \n" "Language-Team: Romanian \n" "Language: ro\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=ISO-8859-2\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: lib/meta.c:37 msgid "Kerberos V5 GSS-API mechanism" msgstr "" #: lib/error.c:37 msgid "A required input parameter could not be read" msgstr "Nu a putut fi citit un parametru de intrare obligatoriu" #: lib/error.c:39 msgid "A required output parameter could not be written" msgstr "Nu a putut fi scris un parametru de ieºire obligatoriu" #: lib/error.c:41 msgid "A parameter was malformed" msgstr "Un parametru a fost incorect" #: lib/error.c:46 msgid "An unsupported mechanism was requested" msgstr "A fost cerut un mecanism care nu este suportat" #: lib/error.c:48 msgid "An invalid name was supplied" msgstr "A fost furnizat un nume invalid" #: lib/error.c:50 msgid "A supplied name was of an unsupported type" msgstr "Un nume furnizat a fost de un tip care nu este suportat" #: lib/error.c:52 msgid "Incorrect channel bindings were supplied" msgstr "Au for furnizate legãturi de canale incorecte" #: lib/error.c:54 msgid "An invalid status code was supplied" msgstr "A fost furnizat un cod de stare invalid" #: lib/error.c:56 msgid "A token had an invalid MIC" msgstr "Un token a avut un MIC invalid" #: lib/error.c:58 msgid "" "No credentials were supplied, or the credentials were unavailable or " "inaccessible" msgstr "" "Nici o legitimaþie (credential) nu a fost furnizatã, sau legitimaþiile nu au " "fost disponibile sau inaccesibile" #: lib/error.c:61 msgid "No context has been established" msgstr "Nici un context nu a fost stabilit" #: lib/error.c:63 msgid "A token was invalid" msgstr "Un token a fost invalid" #: lib/error.c:65 msgid "A credential was invalid" msgstr "O legitimaþie (credential) a fost invalidã" #: lib/error.c:67 msgid "The referenced credentials have expired" msgstr "Legitimaþiile (credentials) referite au expirat" #: lib/error.c:69 msgid "The context has expired" msgstr "Contextul a expirat" #: lib/error.c:71 msgid "Unspecified error in underlying mechanism" msgstr "O eraoare nespecificatã în mecanismul subiacent" #: lib/error.c:73 msgid "The quality-of-protection requested could not be provided" msgstr "Calitatea-de-protecþie cerutã nu a putut fi furnizatã" #: lib/error.c:75 msgid "The operation is forbidden by local security policy" msgstr "Operaþia este interzisã de politica de securitate localã" #: lib/error.c:77 msgid "The operation or option is unavailable" msgstr "Operaþia sau opþiunea nu este disponibilã" #: lib/error.c:79 msgid "The requested credential element already exists" msgstr "Elementul de legitimare (credential) cerut existã deja" #: lib/error.c:81 msgid "The provided name was not a mechanism name" msgstr "Numele furnizat nu a fost un nume de mecanism" #: lib/error.c:86 msgid "" "The gss_init_sec_context() or gss_accept_sec_context() function must be " "called again to complete its function" msgstr "" "Funcþiile gss_init_sec_context() sau gss_accept_sec_context() trebuie " "chemate din nou pentru a-ºi îndeplini funcþia" #: lib/error.c:89 msgid "The token was a duplicate of an earlier token" msgstr "Token-ul a fost un duplicat al unui token anterior" #: lib/error.c:91 msgid "The token's validity period has expired" msgstr "Perioada de validitate a token-ului a expirat" #: lib/error.c:93 msgid "A later token has already been processed" msgstr "Un token ulterior a fost deja procesat" #: lib/error.c:95 msgid "An expected per-message token was not received" msgstr "Un token pe mesaj aºteptat nu a fost primit" #: lib/error.c:312 msgid "No error" msgstr "Nici o eroare" #: lib/krb5/error.c:36 msgid "No @ in SERVICE-NAME name string" msgstr "Nici un @ în numele SERVICE-NAME" #: lib/krb5/error.c:38 msgid "STRING-UID-NAME contains nondigits" msgstr "STRING-UID-NAME conþine non-cifre" #: lib/krb5/error.c:40 msgid "UID does not resolve to username" msgstr "UID nu este rezolvat ca username (nume utilizator)" #: lib/krb5/error.c:42 msgid "Validation error" msgstr "Eroare de validare" #: lib/krb5/error.c:44 msgid "Couldn't allocate gss_buffer_t data" msgstr "Nu am putut aloca data gss_buffer_t" #: lib/krb5/error.c:46 msgid "Message context invalid" msgstr "Context mesaj invalid" #: lib/krb5/error.c:48 msgid "Buffer is the wrong size" msgstr "Buffer-ul este de dimensiune incorectã" #: lib/krb5/error.c:50 msgid "Credential usage type is unknown" msgstr "Tipul de folosire a legitimaþiei este necunoscut" #: lib/krb5/error.c:52 msgid "Unknown quality of protection specified" msgstr "Calitate de protecþie specificatã necunoscutã" #: lib/krb5/error.c:55 msgid "Principal in credential cache does not match desired name" msgstr "" "Principalul în cache-ul de legitimaþii nu se potriveºte cu numele dorit" #: lib/krb5/error.c:57 msgid "No principal in keytab matches desired name" msgstr "Nici un principal în keytab nu se potriveºte cu numele dorit" #: lib/krb5/error.c:59 msgid "Credential cache has no TGT" msgstr "Cache-ul de legitimaþii (credentials) nu are nici un TGT" #: lib/krb5/error.c:61 msgid "Authenticator has no subkey" msgstr "Authenticator-u nu are nici o subcheie" #: lib/krb5/error.c:63 msgid "Context is already fully established" msgstr "Contextul este deja stabilit în totalitate" #: lib/krb5/error.c:65 msgid "Unknown signature type in token" msgstr "Tip de semnãturã necunoscut în token" #: lib/krb5/error.c:67 msgid "Invalid field length in token" msgstr "Lungimea câmpuui invalidã în token" #: lib/krb5/error.c:69 msgid "Attempt to use incomplete security context" msgstr "Încercare de folosire a unui context de securitate incomplet" #: lib/krb5/error.c:86 msgid "No krb5 error" msgstr "Nici o eroare krb5" #: lib/krb5/error.c:127 msgid "Unknown krb5 error" msgstr "Eroare krb5 necunoscutã" #: src/gss.c:67 #, c-format msgid "Try `%s --help' for more information.\n" msgstr "Încercaþi `%s --help' pentru informaþii suplimentare.\n" #: src/gss.c:71 #, c-format msgid "Usage: %s OPTIONS...\n" msgstr "" #: src/gss.c:74 msgid "" "Command line interface to GSS, used to explain error codes.\n" "\n" msgstr "" #: src/gss.c:78 msgid "" "Mandatory arguments to long options are mandatory for short options too.\n" msgstr "" #: src/gss.c:81 msgid "" " -h, --help Print help and exit.\n" " -V, --version Print version and exit.\n" " -l, --list-mechanisms\n" " List information about supported mechanisms\n" " in a human readable format.\n" " -m, --major=LONG Describe a `major status' error code value.\n" msgstr "" #: src/gss.c:89 msgid "" " -a, --accept-sec-context[=MECH]\n" " Accept a security context as server.\n" " If MECH is not specified, no credentials\n" " will be acquired. Use \"*\" to use library\n" " default mechanism.\n" " -i, --init-sec-context=MECH\n" " Initialize a security context as client.\n" " MECH is the SASL name of mechanism, use -l\n" " to list supported mechanisms.\n" " -n, --server-name=SERVICE@HOSTNAME\n" " For -i and -a, set the name of the remote host.\n" " For example, \"imap@mail.example.com\".\n" msgstr "" #: src/gss.c:103 msgid " -q, --quiet Silent operation (default=off).\n" msgstr "" #: src/gss.c:122 #, c-format msgid "" "GSS-API major status code %ld (0x%lx).\n" "\n" msgstr "" "Cod de stare GSS-API major %ld (0x%lx).\n" "\n" #: src/gss.c:124 #, c-format msgid "" " MSB LSB\n" " +-----------------+-----------------+---------------------------------+\n" " | Calling Error | Routine Error | Supplementary Info |\n" " | " msgstr "" " MSB LSB\n" " +-----------------+-----------------+---------------------------------+\n" " | Eroare Apel | Eroare Rutinã | Informaþii Suplimentare |\n" " | " #: src/gss.c:138 #, c-format msgid "" "|\n" " +-----------------+-----------------+---------------------------------+\n" "Bit 31 24 23 16 15 0\n" "\n" msgstr "" "|\n" " +-----------------+-----------------+---------------------------------+\n" "Bit 31 24 23 16 15 0\n" "\n" #: src/gss.c:148 #, c-format msgid "Masked routine error %ld (0x%lx) shifted into %ld (0x%lx):\n" msgstr "Eroare rutinã mascatã %ld (0x%lx) shiftatã în %ld (0x%lx):\n" #: src/gss.c:164 src/gss.c:198 src/gss.c:234 #, fuzzy, c-format msgid "displaying status code failed (%d)" msgstr "%s: afiºarea codului de stare a eºuat\n" #: src/gss.c:184 #, c-format msgid "Masked calling error %ld (0x%lx) shifted into %ld (0x%lx):\n" msgstr "Eroare apel mascatã %ld (0x%lx) shiftatã în %ld (0x%lx):\n" #: src/gss.c:217 #, c-format msgid "Masked supplementary info %ld (0x%lx) shifted into %ld (0x%lx):\n" msgstr "Informaþia suplimentarã mascatã %ld (0x%lx) shiftatã în %ld (0x%lx):\n" #: src/gss.c:251 #, c-format msgid "No error\n" msgstr "Nici o eroare\n" #: src/gss.c:269 #, c-format msgid "indicating mechanisms failed (%d)" msgstr "" #: src/gss.c:285 #, c-format msgid "inquiring information about mechanism failed (%d)" msgstr "" #: src/gss.c:342 src/gss.c:483 #, c-format msgid "inquiring mechanism for SASL name (%d/%d)" msgstr "" #: src/gss.c:355 src/gss.c:498 #, c-format msgid "could not import server name \"%s\" (%d/%d)" msgstr "" #: src/gss.c:374 #, c-format msgid "initializing security context failed (%d/%d)" msgstr "" #: src/gss.c:378 src/gss.c:564 #, c-format msgid "base64 input too long" msgstr "" #: src/gss.c:380 src/gss.c:415 src/gss.c:545 src/gss.c:566 #, c-format msgid "malloc" msgstr "" #: src/gss.c:407 src/gss.c:537 #, c-format msgid "getline" msgstr "" #: src/gss.c:409 src/gss.c:539 #, c-format msgid "end of file" msgstr "" #: src/gss.c:413 src/gss.c:543 #, c-format msgid "base64 fail" msgstr "" #: src/gss.c:520 #, c-format msgid "could not acquire server credentials (%d/%d)" msgstr "" #: src/gss.c:560 #, c-format msgid "accepting security context failed (%d/%d)" msgstr "" #~ msgid "%s: missing parameter\n" #~ msgstr "%s: parametru lipsã\n" gss-1.0.3/po/it.gmo0000644000000000000000000002025212415507644010745 00000000000000Þ•@Y€æh4†»(Ôý,0D*u ».Ïþ# &? *f ‘ ­ =Æ $ #) M i (Š (³ Ü ú I ;b ;ž @Ú  3 T Qt Æ Ï Ù +ç 9 "M p mˆ 3ö &**Q9|'¶/Þ-'<&d ‹¬'¿ç)1G"X!{1—ÏŠgøò'ë4H+g“6¯9æ-  No1‡#¹.Ý/ 6<&s!šQ¼*&9+`.Œ4»6ð''!OTqDÆC FO!–+¸$äa  kyˆ:›MÖ/$Tvk<â+-K;y*µ/à+,<-i—¶.Î#ý1!Sg"}- 7Σ %845;+. = 7/ , "!)0:@$19 ?*32<#-6>& (' MSB LSB +-----------------+-----------------+---------------------------------+ | Calling Error | Routine Error | Supplementary Info | | -h, --help Print help and exit. -V, --version Print version and exit. -l, --list-mechanisms List information about supported mechanisms in a human readable format. -m, --major=LONG Describe a `major status' error code value. -q, --quiet Silent operation (default=off). A credential was invalidA later token has already been processedA parameter was malformedA required input parameter could not be readA required output parameter could not be writtenA supplied name was of an unsupported typeA token had an invalid MICA token was invalidAn expected per-message token was not receivedAn invalid name was suppliedAn invalid status code was suppliedAn unsupported mechanism was requestedAttempt to use incomplete security contextAuthenticator has no subkeyBuffer is the wrong sizeCommand line interface to GSS, used to explain error codes. Context is already fully establishedCouldn't allocate gss_buffer_t dataCredential cache has no TGTCredential usage type is unknownGSS-API major status code %ld (0x%lx). Incorrect channel bindings were suppliedInvalid field length in tokenKerberos V5 GSS-API mechanismMandatory arguments to long options are mandatory for short options too. Masked calling error %ld (0x%lx) shifted into %ld (0x%lx): Masked routine error %ld (0x%lx) shifted into %ld (0x%lx): Masked supplementary info %ld (0x%lx) shifted into %ld (0x%lx): Message context invalidNo @ in SERVICE-NAME name stringNo context has been establishedNo credentials were supplied, or the credentials were unavailable or inaccessibleNo errorNo error No krb5 errorNo principal in keytab matches desired namePrincipal in credential cache does not match desired nameSTRING-UID-NAME contains nondigitsThe context has expiredThe gss_init_sec_context() or gss_accept_sec_context() function must be called again to complete its functionThe operation is forbidden by local security policyThe operation or option is unavailableThe provided name was not a mechanism nameThe quality-of-protection requested could not be providedThe referenced credentials have expiredThe requested credential element already existsThe token was a duplicate of an earlier tokenThe token's validity period has expiredTry `%s --help' for more information. UID does not resolve to usernameUnknown krb5 errorUnknown quality of protection specifiedUnknown signature type in tokenUnspecified error in underlying mechanismUsage: %s OPTIONS... Validation errordisplaying status code failed (%d)indicating mechanisms failed (%d)inquiring information about mechanism failed (%d)| +-----------------+-----------------+---------------------------------+ Bit 31 24 23 16 15 0 Project-Id-Version: gss-1.0.1 Report-Msgid-Bugs-To: bug-gss@gnu.org POT-Creation-Date: 2014-10-09 15:37+0200 PO-Revision-Date: 2010-12-02 18:21+0100 Last-Translator: Sergio Zanchetta Language-Team: Italian Language: it MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural= (n != 1) MSB LSB +----------------------+---------------------+------------------------------+ | Errore di chiamata | Errore di routine | Informazioni aggiuntive | | -h, --help Stampa questo aiuto ed esce. -V, --version Stampa la versione ed esce. -l, --list-mechanisms Elenca le informazioni sui meccanismi supportati in forma leggibile. -m, --major=LONG Descrive un codice di errore "major status". -q, --quiet Silent operation (default=off). Una credenziale non era validaUn token successivo è già stato elaboratoUn parametro era malformatoUn parametro di input necessario non può essere lettoUn parametro di output necessario non può essere scrittoUn nome fornito era di un tipo non supportatoUn token aveva un MIC non validoUn token non era validoUn token per-message atteso non è stato ricevutoÈ stato fornito un nome non validoÈ stato fornito un codice di stato non validoÈ stato richiesto un meccanismo non supportatoTentativo d'uso di un contesto di sicurezza incompletoL'autenticatore non ha una sottochiaveIl buffer è di dimensione errataInterfaccia a riga di comando per GSS, usata per illustrare i codici di errore. Il contesto è già completamente definitoImpossibile allocare dati gss_buffer_tLa cache delle credenziali non contiene TGTIl tipo d'uso delle credenziali è sconosciutoCodice di stato principale %ld (0x%lx) di GSS-API. Sono state fornite associazioni di canale non corretteLunghezza di campo non valida nel tokenMeccanismo GSS-API di Kerberos V5Gli argomenti obbligatori per le opzioni lunghe lo sono anche per le opzioni corte. Errore della chiamata nascosta %ld (0x%lx) spostato in %ld (0x%lx): Errore della routine nascosta %ld (0x%lx) spostato in %ld (0x%lx): Informazione aggiuntiva nascosta %ld (0x%lx) spostata in %ld (0x%lx): Contesto del messaggio non validoNessun @ nella stringa di nome SERVICE-NAMENon è stato definito alcun contestoNon è stata fornita alcuna credenziale oppure le credenziali erano indisponibili o inaccessibiliNessun erroreNessun errore Nessun errore krb5Nessun principal nel keytab corrisponde al nome desideratoIl principal nella cache delle credenziali non corrisponde al nome desideratoSTRING-UID-NAME contiene caratteri non numericiIl contesto è scadutoLa funzione gss_init_sec_context() oppure gss_accept_sec_context() deve essere chiamata di nuovo per essere completataL'operazione è proibita dalle politiche di sicurezza localiL'operazione o l'opzione non è disponibileIl nome fornito non era un nome di meccanismoLa qualità di protezione richiesta non può essere fornitaLe credenziali di riferimento sono scaduteL'elemento di credenziale richiesto esiste giàIl token era un duplicato di uno precedenteIl periodo di validità del token è scadutoUsare "%s --help" per maggiori informazioni. UID non risolve il nome utenteErrore krb5 sconosciutoQualità di protezione specificata sconosciutaTipo di firma sconosciuto nel tokenErrore non specificato nel meccanismo sottostanteUso: %s OPZIONI... Errore di validazionedisplaying status code failed (%d)segnalazione del meccanismo non riuscita (%d)richiesta informazioni sul meccanismo non riuscita (%d)| +----------------------+---------------------+------------------------------+ Bit 31 24 23 16 15 0 gss-1.0.3/po/ga.gmo0000644000000000000000000001521712415507644010725 00000000000000Þ•7ÔIŒ°æ±˜(±Ú,ô0!*R}˜.¬Û#ø&*CnŠ$£#Èì ()(R{;™;Õ@ R j ‹ Q« ý   + 9J "„ § m¿ 3- &a *ˆ 9³ 'í / -E 's &›  ã 'ö  )> h —y oòt/Šº=Ò>&O'vžJº'2CZ(žÇ2æ*D0d)•¿+ÞB EMB“/Ö# *NKš±É@ÛL0išf¶D0b+“=¿'ý"%:H3ƒ;·<ó07H-€'®Öœò(*43+.,$#6 5 " '10 2&% / -!7) MSB LSB +-----------------+-----------------+---------------------------------+ | Calling Error | Routine Error | Supplementary Info | | A credential was invalidA later token has already been processedA parameter was malformedA required input parameter could not be readA required output parameter could not be writtenA supplied name was of an unsupported typeA token had an invalid MICA token was invalidAn expected per-message token was not receivedAn invalid name was suppliedAn invalid status code was suppliedAn unsupported mechanism was requestedAttempt to use incomplete security contextAuthenticator has no subkeyBuffer is the wrong sizeContext is already fully establishedCouldn't allocate gss_buffer_t dataCredential cache has no TGTCredential usage type is unknownGSS-API major status code %ld (0x%lx). Incorrect channel bindings were suppliedInvalid field length in tokenMasked calling error %ld (0x%lx) shifted into %ld (0x%lx): Masked routine error %ld (0x%lx) shifted into %ld (0x%lx): Masked supplementary info %ld (0x%lx) shifted into %ld (0x%lx): Message context invalidNo @ in SERVICE-NAME name stringNo context has been establishedNo credentials were supplied, or the credentials were unavailable or inaccessibleNo errorNo error No krb5 errorNo principal in keytab matches desired namePrincipal in credential cache does not match desired nameSTRING-UID-NAME contains nondigitsThe context has expiredThe gss_init_sec_context() or gss_accept_sec_context() function must be called again to complete its functionThe operation is forbidden by local security policyThe operation or option is unavailableThe provided name was not a mechanism nameThe quality-of-protection requested could not be providedThe referenced credentials have expiredThe requested credential element already existsThe token was a duplicate of an earlier tokenThe token's validity period has expiredTry `%s --help' for more information. UID does not resolve to usernameUnknown krb5 errorUnknown quality of protection specifiedUnknown signature type in tokenUnspecified error in underlying mechanismValidation error| +-----------------+-----------------+---------------------------------+ Bit 31 24 23 16 15 0 Project-Id-Version: gss 0.0.22 Report-Msgid-Bugs-To: bug-gss@gnu.org POT-Creation-Date: 2014-10-09 15:37+0200 PO-Revision-Date: 2007-09-17 11:04-0500 Last-Translator: Kevin Scannell Language-Team: Irish Language: ga MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit GMS GLS +-----------------+-----------------+---------------------------------+ | Earráid Glaoite | Earráid Gnáthamh| Eolas Forlíontach | | Dintiúr neamhbhailíPróiseáladh ceadchomhartha níos nuaí cheanaParaiméadar míchumthaNíorbh fhéidir paraiméadar riachtanach ionchurtha a léamhNíorbh fhéidir paraiméadar riachtanach aschurtha a scríobhAinm de chineál nach dtacaítear leisBhí MIC neamhbhailí ag ceadchomharthaCeadchomhartha neamhbhailíBhíothas súil le ceadchomhartha sa teachtaireacht agus ní bhfuarthas éAinm neamhbhailíCód neamhbhailí stádaisIarratas ar mheicníocht gan tacaíochtRinneadh iarracht ar chomhthéacs neamhiomlán slándála a úsáidNíl fo-eochair ag an bhfíordheimhneoirMéid mhícheart ar an maolánSocraíodh an comhthéacs go hiomlán cheana féinNíorbh fhéidir gss_buffer_t a dháileadhNíl TGT ag taisce na ndintiúrCineál úsáide dintiúir nach bhfuil eolas airMórchód stádais GSS-API %ld (0x%lx). Ceangail mhíchearta chainéilFad neamhbhailí réimse sa cheadchomharthaAistríodh earráid mhasctha ghlaoite %ld (0x%lx) go %ld (0x%lx): Aistríodh earráid mhasctha ghnáthaimh %ld (0x%lx) go %ld (0x%lx): Aistríodh eolas masctha forlíontach %ld (0x%lx) go %ld (0x%lx): Tá comhthéacs na teachtaireachta neamhbhailí@ ar iarraidh san ainm SERVICE-NAMENíor bunaíodh aon chomhthéacsNí raibh aon dintiúir, bhí na dintiúir dofhaighte, nó bhíodar dorochtanaNí raibh aon earráidNí raibh aon earráid Gan earráid krb5Níl aon phríomhaí i keytab a mheaitseálann an t-ainm iarrthaNí mheaitseálann an príomhaí i dtaisce na ndintiúr leis an ainm iarrthaTá carachtair neamhuimhriúla i STRING-UID-NAMETá an comhthéacs as dátaCaithfear gss_init_sec_context() nó gss_accept_sec_context() a glaoch chun a fheidhm a chur i gcríchNí cheadaítear an oibríocht de bharr polasaí logánta slándálaNíl aon fháil ar an oibríocht nó ar an roghaNí ainm meicníochta é an t-ainm a tugadhNíorbh fhéidir an cháilíocht cosanta iarrtha a sholátharChuaigh na dintiúir tagartha as feidhmTá an dintiúr iarrtha ann cheanaCóip den cheadchomhartha roimhe seo an ceadchomhartha seoTá tréimhse bhailíochta an cheadchomhartha thartBain triail as `%s --help' chun tuilleadh eolais a fháil. Ní féidir an t-aitheantas úsáideora a réiteach mar ainmEarráid anaithnid krb5Sonraíodh cáilíocht cosanta nach bhfuil eolas uirthiCineál anaithnid sínithe sa cheadchomharthaEarráid gan sonrú sa bhunmheicníochtEarráid le linn deimhnithe| +-----------------+-----------------+---------------------------------+ Giotán31 24 23 16 15 0 gss-1.0.3/po/zh_CN.gmo0000644000000000000000000001665312415507644011344 00000000000000Þ•@Y€æh4†»(Ôý,0D*u ».Ïþ# &? *f ‘ ­ =Æ $ #) M i (Š (³ Ü ú I ;b ;ž @Ú  3 T Qt Æ Ï Ù +ç 9 "M p mˆ 3ö &**Q9|'¶/Þ-'<&d ‹¬'¿ç)1G"X!{1—Ï}gòåØ5á $$I!\!~- Î î(û$=!Y${ ¹3Ï"AU%n”³Ï7ê9"9\?–Ö%é6" Y f t=•6Ó% 0a@'¢Ê-æ$9O*n™1µç %Dc‚ ˜¥#Ã)ç™%845;+. = 7/ , "!)0:@$19 ?*32<#-6>& (' MSB LSB +-----------------+-----------------+---------------------------------+ | Calling Error | Routine Error | Supplementary Info | | -h, --help Print help and exit. -V, --version Print version and exit. -l, --list-mechanisms List information about supported mechanisms in a human readable format. -m, --major=LONG Describe a `major status' error code value. -q, --quiet Silent operation (default=off). A credential was invalidA later token has already been processedA parameter was malformedA required input parameter could not be readA required output parameter could not be writtenA supplied name was of an unsupported typeA token had an invalid MICA token was invalidAn expected per-message token was not receivedAn invalid name was suppliedAn invalid status code was suppliedAn unsupported mechanism was requestedAttempt to use incomplete security contextAuthenticator has no subkeyBuffer is the wrong sizeCommand line interface to GSS, used to explain error codes. Context is already fully establishedCouldn't allocate gss_buffer_t dataCredential cache has no TGTCredential usage type is unknownGSS-API major status code %ld (0x%lx). Incorrect channel bindings were suppliedInvalid field length in tokenKerberos V5 GSS-API mechanismMandatory arguments to long options are mandatory for short options too. Masked calling error %ld (0x%lx) shifted into %ld (0x%lx): Masked routine error %ld (0x%lx) shifted into %ld (0x%lx): Masked supplementary info %ld (0x%lx) shifted into %ld (0x%lx): Message context invalidNo @ in SERVICE-NAME name stringNo context has been establishedNo credentials were supplied, or the credentials were unavailable or inaccessibleNo errorNo error No krb5 errorNo principal in keytab matches desired namePrincipal in credential cache does not match desired nameSTRING-UID-NAME contains nondigitsThe context has expiredThe gss_init_sec_context() or gss_accept_sec_context() function must be called again to complete its functionThe operation is forbidden by local security policyThe operation or option is unavailableThe provided name was not a mechanism nameThe quality-of-protection requested could not be providedThe referenced credentials have expiredThe requested credential element already existsThe token was a duplicate of an earlier tokenThe token's validity period has expiredTry `%s --help' for more information. UID does not resolve to usernameUnknown krb5 errorUnknown quality of protection specifiedUnknown signature type in tokenUnspecified error in underlying mechanismUsage: %s OPTIONS... Validation errordisplaying status code failed (%d)indicating mechanisms failed (%d)inquiring information about mechanism failed (%d)| +-----------------+-----------------+---------------------------------+ Bit 31 24 23 16 15 0 Project-Id-Version: gss 1.0.1 Report-Msgid-Bugs-To: bug-gss@gnu.org POT-Creation-Date: 2014-10-09 15:37+0200 PO-Revision-Date: 2011-01-12 21:21中国标准时间 Last-Translator: Ji ZhengYu Language-Team: Chinese (simplified) Language: zh_CN MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit MSB LSB +-----------------+-----------------+---------------------------------+ | 调用错误 | 路由错误 | å¤‡æ³¨ä¿¡æ¯ | | -h, --help 显示帮助并退出 -V, --version 显示版本信æ¯å¹¶é€€å‡º -l, --list-mechanisms ä»¥æ˜“è¯»çš„å½¢å¼ åˆ—å‡ºæ‰€æ”¯æŒçš„加密方å¼ä¿¡æ¯ -m, --major=LONG æè¿°ä¸€ä¸ªä¸»çжæ€é”™è¯¯ä»£ç  -q, --quiet æ“作时无显示(默认关闭) è¯ä¹¦æ— æ•ˆå·²ç»å¤„ç†äº†ä¸€ä¸ªè¾ƒæ–°çš„æ ‡è¯†å‚æ•°å½¢å¼é”™è¯¯æ— æ³•è¯»å–æ‰€éœ€çš„è¾“å…¥å‚æ•°æ— æ³•å†™å…¥æ‰€éœ€çš„è¾“å‡ºå‚æ•°æ‰€æä¾›çš„å字是一ç§ä¸æ”¯æŒçš„类型有个标识拥有无效的 MIC标识无效所需的 per-message 标识ä¸è¢«æŽ¥å—æä¾›äº†æ— æ•ˆçš„åç§°æä¾›äº†æ— æ•ˆçš„状æ€ç è¯·æ±‚äº†ä¸€ä¸ªä¸æ”¯æŒçš„æœºåˆ¶å°è¯•使用ä¸å®Œæ•´çš„å®‰å…¨å†…å®¹éªŒè¯æ–¹æ²¡æœ‰å­å¯†é’¥ç¼“冲区大å°é”™è¯¯GSS 命令行接å£ï¼Œç”¨äºŽè§£é‡Šé”™è¯¯ä»£ç ã€‚ 内容已ç»å®Œå…¨åˆ›å»ºå¥½äº†æ— æ³•åˆ†é… gss_buffer_t dataè¯ä¹¦ç¼“存无 TGTè¯ä¹¦ä½¿ç”¨ç±»åž‹æœªçŸ¥GSS-API 主状æ€ç  %ld (0x%lx)。 æä¾›äº†é”™è¯¯çš„ç»‘å®šé€šé“æ ‡è¯†ä¸­çš„域长度无效Kerberos V5 GSS-API æœºåˆ¶é•¿é€‰é¡¹æ‰€å¿…é¡»çš„å‚æ•°çŸ­é€‰é¡¹ä¹Ÿæ˜¯å¿…须的。 éšè”½çš„调用错误 %ld (0x%lx) 被移入 %ld (0x%lx): éšè”½çš„路由错误 %ld (0x%lx) 被移入 %ld (0x%lx): éšè”½çš„备注信æ¯é”™è¯¯ %ld (0x%lx) 被移入 %ld (0x%lx): ä¿¡æ¯å†…容无效在 SERVICE-NAME 字符串中没有 @尚未创建内容未æä¾›è¯ä¹¦ï¼Œæˆ–是è¯ä¹¦ä¸å¯ç”¨æˆ–无法访问没有错误没有错误 错误: 找ä¸åˆ° krb5 æœåС噍keytab 中的委托人没有一个与所è¦çš„å字匹é…çš„è¯ä¹¦ç¼“存中的委托人与所è¦çš„åå­—ä¸åŒ¹é…STRING-UID-NAME 包å«éžæ•°å­—字符内容过期了è¦å®Œæˆå®ƒçš„åŠŸèƒ½å¿…é¡»å†æ¬¡è°ƒç”¨ gss_init_sec_context() 或 gss_accept_sec_context()å‡½æ•°æœ¬åœ°å®‰å…¨æœºåˆ¶ç¦æ­¢äº†æ­¤é¡¹æ“作此æ“作或选项ä¸å¯ç”¨æ‰€æä¾›çš„åç§°ä¸æ˜¯ä¿æŠ¤æœºåˆ¶çš„å称无法æä¾›æ‰€éœ€è¦çš„ä¿æŠ¤ç­‰çº§å…³è”è¯ä¹¦è¿‡æœŸäº†æ‰€éœ€è¯ä¹¦ç»„ä»¶å·²ç»å­˜åœ¨æ­¤æ ‡è¯†æ˜¯ä¸€ä¸ªæ›´æ—©æœŸæ ‡è¯†çš„é•œåƒæ ‡è¯†å·²è¶…过了有效期å°è¯•用‘%s --help’æ¥èŽ·å–æ›´å¤šä¿¡æ¯ã€‚ UID 无法解æžä¸ºç”¨æˆ·å错误: 未知的 krb5 æœåŠ¡å™¨æ‰€æŒ‡å®šçš„ä¿æŠ¤ç­‰çº§æœªçŸ¥æ ‡è¯†ä¸­çš„ç­¾åç±»åž‹æœªçŸ¥åº•å±‚æœºåˆ¶ä¸­æœ‰ä¸æ˜Žé”™è¯¯ç”¨æ³•: %s 选项... 验è¯é”™è¯¯æ˜¾ç¤ºçжæ€ç æ—¶å‡ºé”™ (%d)æ­£æ˜¾ç¤ºåŠ å¯†æ–¹å¼æ—¶å‡ºé”™ (%d)正查寻加密方å¼ä¿¡æ¯æ—¶å‡ºé”™ (%d)| +-----------------+-----------------+---------------------------------+ ä½å…ƒ31 24 23 16 15 0 gss-1.0.3/po/en@quot.gmo0000644000000000000000000002325712415507644011754 00000000000000Þ•KteÌ`æalHµ 4Ó  (! J ,d 0‘ * í  . K #h &Œ *³ Þ ú = $Q #v š ¶ (× ()GIe;¯;ë@'h €¡QÁ  &+49`"š½mÕ3C&w*ž9É'/+-['‰&± Øù' 4)T~”)¥ ÏÛ,ñ)"H kw!,¡1Î)*—1iÉæ3t!4±æ(ÿ(,B0o* Ëæ.ú)#F&j*‘¼Ø=ñ$/#Tx ”(µ(Þ%IC;;É@ F ^  QŸ ñ ú !+!9>!"x!›!m³!3!"&U"*|"9§"'á"/ #-9#'g#*# º#Û#'î#$)6$`$v$)‡$ ±$½$,Ó$-%".% Q%]%!e%,‡%1´%)æ%&—&)=,<89"&F:- 2%7'AJ0!G I3+E.?>KBHC;( D4@ $/6#*51  MSB LSB +-----------------+-----------------+---------------------------------+ | Calling Error | Routine Error | Supplementary Info | | -a, --accept-sec-context[=MECH] Accept a security context as server. If MECH is not specified, no credentials will be acquired. Use "*" to use library default mechanism. -i, --init-sec-context=MECH Initialize a security context as client. MECH is the SASL name of mechanism, use -l to list supported mechanisms. -n, --server-name=SERVICE@HOSTNAME For -i and -a, set the name of the remote host. For example, "imap@mail.example.com". -h, --help Print help and exit. -V, --version Print version and exit. -l, --list-mechanisms List information about supported mechanisms in a human readable format. -m, --major=LONG Describe a `major status' error code value. -q, --quiet Silent operation (default=off). A credential was invalidA later token has already been processedA parameter was malformedA required input parameter could not be readA required output parameter could not be writtenA supplied name was of an unsupported typeA token had an invalid MICA token was invalidAn expected per-message token was not receivedAn invalid name was suppliedAn invalid status code was suppliedAn unsupported mechanism was requestedAttempt to use incomplete security contextAuthenticator has no subkeyBuffer is the wrong sizeCommand line interface to GSS, used to explain error codes. Context is already fully establishedCouldn't allocate gss_buffer_t dataCredential cache has no TGTCredential usage type is unknownGSS-API major status code %ld (0x%lx). Incorrect channel bindings were suppliedInvalid field length in tokenKerberos V5 GSS-API mechanismMandatory arguments to long options are mandatory for short options too. Masked calling error %ld (0x%lx) shifted into %ld (0x%lx): Masked routine error %ld (0x%lx) shifted into %ld (0x%lx): Masked supplementary info %ld (0x%lx) shifted into %ld (0x%lx): Message context invalidNo @ in SERVICE-NAME name stringNo context has been establishedNo credentials were supplied, or the credentials were unavailable or inaccessibleNo errorNo error No krb5 errorNo principal in keytab matches desired namePrincipal in credential cache does not match desired nameSTRING-UID-NAME contains nondigitsThe context has expiredThe gss_init_sec_context() or gss_accept_sec_context() function must be called again to complete its functionThe operation is forbidden by local security policyThe operation or option is unavailableThe provided name was not a mechanism nameThe quality-of-protection requested could not be providedThe referenced credentials have expiredThe requested credential element already existsThe token was a duplicate of an earlier tokenThe token's validity period has expiredTry `%s --help' for more information. UID does not resolve to usernameUnknown krb5 errorUnknown quality of protection specifiedUnknown signature type in tokenUnspecified error in underlying mechanismUsage: %s OPTIONS... Validation erroraccepting security context failed (%d/%d)base64 failbase64 input too longcould not acquire server credentials (%d/%d)could not import server name "%s" (%d/%d)displaying status code failed (%d)end of filegetlineindicating mechanisms failed (%d)initializing security context failed (%d/%d)inquiring information about mechanism failed (%d)inquiring mechanism for SASL name (%d/%d)malloc| +-----------------+-----------------+---------------------------------+ Bit 31 24 23 16 15 0 Project-Id-Version: gss 1.0.3 Report-Msgid-Bugs-To: bug-gss@gnu.org POT-Creation-Date: 2014-10-09 15:37+0200 PO-Revision-Date: 2014-10-09 15:37+0200 Last-Translator: Automatically generated Language-Team: none Language: en@quot MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=(n != 1); MSB LSB +-----------------+-----------------+---------------------------------+ | Calling Error | Routine Error | Supplementary Info | | -a, --accept-sec-context[=MECH] Accept a security context as server. If MECH is not specified, no credentials will be acquired. Use “*†to use library default mechanism. -i, --init-sec-context=MECH Initialize a security context as client. MECH is the SASL name of mechanism, use -l to list supported mechanisms. -n, --server-name=SERVICE@HOSTNAME For -i and -a, set the name of the remote host. For example, “imap@mail.example.comâ€. -h, --help Print help and exit. -V, --version Print version and exit. -l, --list-mechanisms List information about supported mechanisms in a human readable format. -m, --major=LONG Describe a ‘major status’ error code value. -q, --quiet Silent operation (default=off). A credential was invalidA later token has already been processedA parameter was malformedA required input parameter could not be readA required output parameter could not be writtenA supplied name was of an unsupported typeA token had an invalid MICA token was invalidAn expected per-message token was not receivedAn invalid name was suppliedAn invalid status code was suppliedAn unsupported mechanism was requestedAttempt to use incomplete security contextAuthenticator has no subkeyBuffer is the wrong sizeCommand line interface to GSS, used to explain error codes. Context is already fully establishedCouldn't allocate gss_buffer_t dataCredential cache has no TGTCredential usage type is unknownGSS-API major status code %ld (0x%lx). Incorrect channel bindings were suppliedInvalid field length in tokenKerberos V5 GSS-API mechanismMandatory arguments to long options are mandatory for short options too. Masked calling error %ld (0x%lx) shifted into %ld (0x%lx): Masked routine error %ld (0x%lx) shifted into %ld (0x%lx): Masked supplementary info %ld (0x%lx) shifted into %ld (0x%lx): Message context invalidNo @ in SERVICE-NAME name stringNo context has been establishedNo credentials were supplied, or the credentials were unavailable or inaccessibleNo errorNo error No krb5 errorNo principal in keytab matches desired namePrincipal in credential cache does not match desired nameSTRING-UID-NAME contains nondigitsThe context has expiredThe gss_init_sec_context() or gss_accept_sec_context() function must be called again to complete its functionThe operation is forbidden by local security policyThe operation or option is unavailableThe provided name was not a mechanism nameThe quality-of-protection requested could not be providedThe referenced credentials have expiredThe requested credential element already existsThe token was a duplicate of an earlier tokenThe token's validity period has expiredTry ‘%s --help’ for more information. UID does not resolve to usernameUnknown krb5 errorUnknown quality of protection specifiedUnknown signature type in tokenUnspecified error in underlying mechanismUsage: %s OPTIONS... Validation erroraccepting security context failed (%d/%d)base64 failbase64 input too longcould not acquire server credentials (%d/%d)could not import server name “%s†(%d/%d)displaying status code failed (%d)end of filegetlineindicating mechanisms failed (%d)initializing security context failed (%d/%d)inquiring information about mechanism failed (%d)inquiring mechanism for SASL name (%d/%d)malloc| +-----------------+-----------------+---------------------------------+ Bit 31 24 23 16 15 0 gss-1.0.3/po/fi.gmo0000644000000000000000000002016112415507644010726 00000000000000Þ•@Y€æh4†»(Ôý,0D*u ».Ïþ# &? *f ‘ ­ =Æ $ #) M i (Š (³ Ü ú I ;b ;ž @Ú  3 T Qt Æ Ï Ù +ç 9 "M p mˆ 3ö &**Q9|'¶/Þ-'<&d ‹¬'¿ç)1G"X!{1—Ï¥gï ýC]+{ §*È0ó+$"Ps;Ë#ê!-0^}H›!ä"U)*&ª)Ñ(û$YCEGãE+q,½]Ù 7 DRWdT¼BTyl4æ'&C#j$Ž-³5á*)B!lŽ#¤,È4õ*F*U"€1£›Õ%845;+. = 7/ , "!)0:@$19 ?*32<#-6>& (' MSB LSB +-----------------+-----------------+---------------------------------+ | Calling Error | Routine Error | Supplementary Info | | -h, --help Print help and exit. -V, --version Print version and exit. -l, --list-mechanisms List information about supported mechanisms in a human readable format. -m, --major=LONG Describe a `major status' error code value. -q, --quiet Silent operation (default=off). A credential was invalidA later token has already been processedA parameter was malformedA required input parameter could not be readA required output parameter could not be writtenA supplied name was of an unsupported typeA token had an invalid MICA token was invalidAn expected per-message token was not receivedAn invalid name was suppliedAn invalid status code was suppliedAn unsupported mechanism was requestedAttempt to use incomplete security contextAuthenticator has no subkeyBuffer is the wrong sizeCommand line interface to GSS, used to explain error codes. Context is already fully establishedCouldn't allocate gss_buffer_t dataCredential cache has no TGTCredential usage type is unknownGSS-API major status code %ld (0x%lx). Incorrect channel bindings were suppliedInvalid field length in tokenKerberos V5 GSS-API mechanismMandatory arguments to long options are mandatory for short options too. Masked calling error %ld (0x%lx) shifted into %ld (0x%lx): Masked routine error %ld (0x%lx) shifted into %ld (0x%lx): Masked supplementary info %ld (0x%lx) shifted into %ld (0x%lx): Message context invalidNo @ in SERVICE-NAME name stringNo context has been establishedNo credentials were supplied, or the credentials were unavailable or inaccessibleNo errorNo error No krb5 errorNo principal in keytab matches desired namePrincipal in credential cache does not match desired nameSTRING-UID-NAME contains nondigitsThe context has expiredThe gss_init_sec_context() or gss_accept_sec_context() function must be called again to complete its functionThe operation is forbidden by local security policyThe operation or option is unavailableThe provided name was not a mechanism nameThe quality-of-protection requested could not be providedThe referenced credentials have expiredThe requested credential element already existsThe token was a duplicate of an earlier tokenThe token's validity period has expiredTry `%s --help' for more information. UID does not resolve to usernameUnknown krb5 errorUnknown quality of protection specifiedUnknown signature type in tokenUnspecified error in underlying mechanismUsage: %s OPTIONS... Validation errordisplaying status code failed (%d)indicating mechanisms failed (%d)inquiring information about mechanism failed (%d)| +-----------------+-----------------+---------------------------------+ Bit 31 24 23 16 15 0 Project-Id-Version: gss 1.0.1 Report-Msgid-Bugs-To: bug-gss@gnu.org POT-Creation-Date: 2014-10-09 15:37+0200 PO-Revision-Date: 2010-11-16 17:15+0200 Last-Translator: Jorma Karvonen Language-Team: Finnish Language: fi MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=(n != 1); MSB LSB +-----------------+-----------------+---------------------------------+ | Kutsuvirhe | Rutiinivirhe | Lisätietoja | | -h, --help Tulosta opaste ja poistu. -V, --version Tulosta versio ja poistu. -l, --list-mechanisms Luettelotiedot tuetuista mekanismeista ihmisluettavassa muodossa. -m, --major=LONG Kuvaa â€major statusâ€-virhekoodiarvo. -q, --quiet Hiljainen toiminta (oletus=pois käytöstä). Valtuustieto oli virheellinenJälkimmäinen merkkijono on jo prosessoituParametri on väärän muotoinenVaadittua syöteparametriä ei voitu lukeaVaadittua tulosteparametriä ei voitu kirjoittaaToimitettu nimi oli tyyppiä, jota ei tuetaMerkkijonolla oli virheellinen MICMerkkijono oli virheellinenOdotettua merkkijonokohtaista viestiä ei ole vastaanotettuToimitettiin virheellinen nimiToimitettiin virheellinen tilakoodiKutsuttiin tukematonta mekanismiaYritys käyttää vaillinaista turvakonteksiaTodentajalla ei ole aliavaintaPuskuri on väärän kokoinenKomentorivirajapinta GSS:ään, käytetty selittämään virhekoodeja. Konteksi on jo täysin perustettuEi voitu varata gss_buffer_t-dataaValtuustietovälimuistissa ei ole Ticket-Granting Ticket-sanomaa todennuspalvelimeltaValtuustiedon käyttötyyppi on tuntematonGSS-API major-tilakoodi %ld (0x%lx). Toimitettiin virheellisiä kanavasidoksiaVirheellinen kenttäpituus merkkijonossaKerberos V5 GSS-API -mekanismiPakolliset argumentit pitkille valitsimille ovat pakollisia myös lyhyille valitsimille. Peitetty kutsuvirhe %ld (0x%lx) on siirretty kohteeseen %ld (0x%lx): Peitetty rutiinivirhe %ld (0x%lx) on siirretty kohteeseen %ld (0x%lx): Peitetty lisätieto %ld (0x%lx) on siirretty kohteeseen %ld (0x%lx): Viestikonteksi on virheellinenEi @-merkkiä PALVELU-NIMI-nimimerkkijonossaKonteksia ei ole perustettuValtuustietoja ei toimitettu, tai valtuustiedot eivät olleet käytettävissä tai saatavillaEi virhettäEi virhettä Ei krb5-virhettäYksikään todennettu entiteetti keytab-tiedostossa ei täsmännyt halutun nimen kanssaTodennettu entiteetti valtuustietovälimuistissa ei täsmännyt halutun nimen kanssaMERKKIJONO-UID-NIMI-merkkijono sisältää muutakin kuin numeroitaKonteksi on vanhentunutFunktio gss_init_sec_context() tai funktio gss_accept_sec_context() on kutsuttava uudelleen funktion saamiseksi valmiiksiPaikallinen turvakäytäntö on kieltänyt toiminnonToiminto tai valitsin ei ole saatavillaToimitettu nimi ei ollut mekanisminimiEi voitu tarjota turvatasopyyntöäViitevaltuustiedot ovat vanhentuneetPyydetty valtuustietoelementti on jo olemassaMerkkijono oli aikaisemman merkkijonon kaksoiskappaleMerkkijonon kelpoisuuskausi on vanhentunutLisätietoja â€%s --helpâ€-komennolla. UID ei ratkaise käyttäjänimeäTuntematon krb5-virheTuntematon suojelutaso määriteltyTuntematon allekirjoitustyyppi merkkijonossaMäärittelemätön virhe alla olevassa mekanismissaKäyttö: %s VALITSIMET... Kelpuutusvirhetilakoodin näyttäminen epäonnistui (%d)osoitusmekanismi epäonnistui (%d)tietojen kysyminen mekanismista epäonnistui (%d)| +-----------------+-----------------+---------------------------------+ Bitti 31 24 23 16 15 0 gss-1.0.3/po/eo.gmo0000644000000000000000000001743112415507644010741 00000000000000Þ•@Y€æh4†»(Ôý,0D*u ».Ïþ# &? *f ‘ ­ =Æ $ #) M i (Š (³ Ü ú I ;b ;ž @Ú  3 T Qt Æ Ï Ù +ç 9 "M p mˆ 3ö &**Q9|'¶/Þ-'<&d ‹¬'¿ç)1G"X!{1—ÏsgæÛ,Â4ï$!?a-|/ª%Ú-5c " +Ã!ï?0#p*”%¿#å* #4 XyJ—8â><Z!—!¹ÛWû S _l/};­#é t(7*Õ&3')[*….°(ß'0N+b"Ž(±Úò&'(0P—%845;+. = 7/ , "!)0:@$19 ?*32<#-6>& (' MSB LSB +-----------------+-----------------+---------------------------------+ | Calling Error | Routine Error | Supplementary Info | | -h, --help Print help and exit. -V, --version Print version and exit. -l, --list-mechanisms List information about supported mechanisms in a human readable format. -m, --major=LONG Describe a `major status' error code value. -q, --quiet Silent operation (default=off). A credential was invalidA later token has already been processedA parameter was malformedA required input parameter could not be readA required output parameter could not be writtenA supplied name was of an unsupported typeA token had an invalid MICA token was invalidAn expected per-message token was not receivedAn invalid name was suppliedAn invalid status code was suppliedAn unsupported mechanism was requestedAttempt to use incomplete security contextAuthenticator has no subkeyBuffer is the wrong sizeCommand line interface to GSS, used to explain error codes. Context is already fully establishedCouldn't allocate gss_buffer_t dataCredential cache has no TGTCredential usage type is unknownGSS-API major status code %ld (0x%lx). Incorrect channel bindings were suppliedInvalid field length in tokenKerberos V5 GSS-API mechanismMandatory arguments to long options are mandatory for short options too. Masked calling error %ld (0x%lx) shifted into %ld (0x%lx): Masked routine error %ld (0x%lx) shifted into %ld (0x%lx): Masked supplementary info %ld (0x%lx) shifted into %ld (0x%lx): Message context invalidNo @ in SERVICE-NAME name stringNo context has been establishedNo credentials were supplied, or the credentials were unavailable or inaccessibleNo errorNo error No krb5 errorNo principal in keytab matches desired namePrincipal in credential cache does not match desired nameSTRING-UID-NAME contains nondigitsThe context has expiredThe gss_init_sec_context() or gss_accept_sec_context() function must be called again to complete its functionThe operation is forbidden by local security policyThe operation or option is unavailableThe provided name was not a mechanism nameThe quality-of-protection requested could not be providedThe referenced credentials have expiredThe requested credential element already existsThe token was a duplicate of an earlier tokenThe token's validity period has expiredTry `%s --help' for more information. UID does not resolve to usernameUnknown krb5 errorUnknown quality of protection specifiedUnknown signature type in tokenUnspecified error in underlying mechanismUsage: %s OPTIONS... Validation errordisplaying status code failed (%d)indicating mechanisms failed (%d)inquiring information about mechanism failed (%d)| +-----------------+-----------------+---------------------------------+ Bit 31 24 23 16 15 0 Project-Id-Version: gss 1.0.1 Report-Msgid-Bugs-To: bug-gss@gnu.org POT-Creation-Date: 2014-10-09 15:37+0200 PO-Revision-Date: 2011-03-13 13:15-0300 Last-Translator: Felipe Castro Language-Team: Esperanto Language: eo MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit MSB LSB +-----------------+-----------------+---------------------------------+ | Vok-Eraro | Procedur-Eraro | Kroma Informo | | -h, --help Montri tiun ĉi helpon kaj eliri. -V, --version Montri version kaj eliri. -l, --list-mechanisms Listigi informon pri subtenataj mekanismoj laŭ hom-legebla formo. -m, --major=LONG Priskribi 'plejgrav-statan' erar-kodan valoron. -q, --quiet Silenta funkciado (apriore=ne). Legitimilo estis malvalidaPosta ĵetono jam estas procezitaParametro estis misformataBezonata eniga parametro ne povis esti legataBezonata eliga parametro ne povis esti skribataDonata nomo estis el nesubtenata tipoÄ´etono havis malvalidan MICÄ´etono estis malvalidaAtendita po-mesaÄa ĵetono ne estis ricevataMalvalida nomo estis donataMalvalita stat-kodo estis donataNesubtenata mekanismo estis petataProvo uzi malkompletan sekurecan kuntekstonAÅ­tentikanto havas neniun subkeyBufro havas malÄustan grandonKomand-linia interfaco al GSS, uzata por klarigi erar-kodojn. Kunteksto jam estas plene starigitaNi ne povis rezervi datumaron gss_buffer_tLegitimila kaÅmemoro havas neniu TGTLegitimila uzad-tipo estas nekonataGSS-API plejgrava stat-kodo %ld (0x%lx). MalÄusta kanal-ligoj estis donatajMalvalida kampo-longo en ĵetonoMekanismo Kerberos V5 GSS-APIDevigaj argumentoj por longaj elektiloj estas same devigaj por mallongaj. Maskita vok-eraro %ld (0x%lx) ÅoviÄis al %ld (0x%lx): Maskita procedura eraro %ld (0x%lx) ÅoviÄis al %ld (0x%lx): Maskita kroma informo %ld (0x%lx) ÅoviÄis al %ld (0x%lx): MesaÄo-kunteksto estas malvalidaNeniu @ en nom-ĉeno SERVICE-NAMENeniu kunteksto estas starigitaNeniu legitimilo estis donata, aŭ la legitimiloj estis nedisponeblaj aÅ­ neatingeblajNeniu eraroNeniu eraro Neniu eraro krb5Neniu ĉefo en keytab kongruas al dezirata nomoĈefo en legitimila kaÅmemoro ne kongruas al dezirata nomoSTRING-UID-NAME enhavas ne-ciferojnLa kunteksto senvalidiÄisLa funkcio gss_init_sec_context() aÅ­ gss_accept_sec_context() devas esti vokata refoje por plenumigi Äian funkcionLa operacio estas malpermesata de loka sekurec-politikoLa operacio aÅ­ elekto ne estas disponeblaLa donita nomo ne estis mekanismo-nomoLa peto kvalito-de-protekto ne povis esti provizataLa referencitaj legitimiloj senvalidiÄisLa petita legitimila elemento jam ekzistasLa ĵetono estis ripetaĵo de pli frua ĵetonoLa valideca templimo de ĵetono finiÄisProvu '%s --help' por pli da informoj. UID ne solviÄas al uzantnomoNekonata eraro krb5Nekonata kvalito de protekto estis indikataNekonata subskriba tipo en ĵetonoNespecifita eraro en implicita mekanismoUzado: %s ELEKTILOJ... Validiga eraromontrigo de stat-kodo malsukcesis (%d)indikado de mekanismoj malsukcesis (%d)petado de informo pri mekanismo malsukcesis (%d)| +-----------------+-----------------+---------------------------------+ Bito 31 24 23 16 15 0 gss-1.0.3/po/de.gmo0000644000000000000000000002060512415507644010723 00000000000000Þ•@Y€æh4†»(Ôý,0D*u ».Ïþ# &? *f ‘ ­ =Æ $ #) M i (Š (³ Ü ú I ;b ;ž @Ú  3 T Qt Æ Ï Ù +ç 9 "M p mˆ 3ö &**Q9|'¶/Þ-'<&d ‹¬'¿ç)1G"X!{1—ÏÄgç,J1_%‘+·ã<@>6!¶Ø=ð$.*S6~?µ+õ!D@,…7²*ê*'@*h“²cÒ@6Aw=¹÷#2{R Î ÚçIøRB*•ÀÛB[0ž8ÏC/L6|1³3å@%Z€$˜ ½AÞ 9 +L /x D¨ —í %845;+. = 7/ , "!)0:@$19 ?*32<#-6>& (' MSB LSB +-----------------+-----------------+---------------------------------+ | Calling Error | Routine Error | Supplementary Info | | -h, --help Print help and exit. -V, --version Print version and exit. -l, --list-mechanisms List information about supported mechanisms in a human readable format. -m, --major=LONG Describe a `major status' error code value. -q, --quiet Silent operation (default=off). A credential was invalidA later token has already been processedA parameter was malformedA required input parameter could not be readA required output parameter could not be writtenA supplied name was of an unsupported typeA token had an invalid MICA token was invalidAn expected per-message token was not receivedAn invalid name was suppliedAn invalid status code was suppliedAn unsupported mechanism was requestedAttempt to use incomplete security contextAuthenticator has no subkeyBuffer is the wrong sizeCommand line interface to GSS, used to explain error codes. Context is already fully establishedCouldn't allocate gss_buffer_t dataCredential cache has no TGTCredential usage type is unknownGSS-API major status code %ld (0x%lx). Incorrect channel bindings were suppliedInvalid field length in tokenKerberos V5 GSS-API mechanismMandatory arguments to long options are mandatory for short options too. Masked calling error %ld (0x%lx) shifted into %ld (0x%lx): Masked routine error %ld (0x%lx) shifted into %ld (0x%lx): Masked supplementary info %ld (0x%lx) shifted into %ld (0x%lx): Message context invalidNo @ in SERVICE-NAME name stringNo context has been establishedNo credentials were supplied, or the credentials were unavailable or inaccessibleNo errorNo error No krb5 errorNo principal in keytab matches desired namePrincipal in credential cache does not match desired nameSTRING-UID-NAME contains nondigitsThe context has expiredThe gss_init_sec_context() or gss_accept_sec_context() function must be called again to complete its functionThe operation is forbidden by local security policyThe operation or option is unavailableThe provided name was not a mechanism nameThe quality-of-protection requested could not be providedThe referenced credentials have expiredThe requested credential element already existsThe token was a duplicate of an earlier tokenThe token's validity period has expiredTry `%s --help' for more information. UID does not resolve to usernameUnknown krb5 errorUnknown quality of protection specifiedUnknown signature type in tokenUnspecified error in underlying mechanismUsage: %s OPTIONS... Validation errordisplaying status code failed (%d)indicating mechanisms failed (%d)inquiring information about mechanism failed (%d)| +-----------------+-----------------+---------------------------------+ Bit 31 24 23 16 15 0 Project-Id-Version: gss 1.0.1 Report-Msgid-Bugs-To: bug-gss@gnu.org POT-Creation-Date: 2014-10-09 15:37+0200 PO-Revision-Date: 2014-03-08 22:11+0100 Last-Translator: Mario Blättermann Language-Team: German Language: de MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=(n!=1); X-Generator: Poedit 1.5.4 MSB LSB +-----------------+-----------------+---------------------------------+ | Aufruf-Fehler | Routine-Fehler | Zusätzliche Infos | | -h, --help Hilfe ausgeben und beenden. -V, --version Version ausgeben und beenden. -l, --list-mechanisms Informationen zu den unterstützten Mechanismen in einem menschenlesbaren Format ausgeben. -m, --major=LONG Den Wert eines »Major status«-Fehlercodes beschreiben. -q, --quiet Stiller Modus (Vorgabe=aus). Eine Anmeldeinformation war ungültigEin neuerer Token wurde bereits verarbeitetEin Parameter war beschädigtEin benötigter Eingabeparameter konnte nicht gelesen werdenEin benötigter Ausgabeparameter konnte nicht geschrieben werdenDer Typ des angegebenen Namens wird nicht unterstütztEin Token hat ein ungültiges MICEin Token war ungültigEin erwarteter meldungsgebundener Token wurde nicht empfangenEin ungültiger Name wurde angegebenEin ungültiger Statuscode wurde angegebenEin nicht unterstützter Mechanismus wurde angefordertVersuch, einen unvollständigen Sicherheitskontext zu verwendenAuthentifizierer hat keinen UnterschlüsselPuffer hat die falsche GrößeBefehlszeilenschnittstelle zu GSS zur Erläuterung von Fehlercodes. Kontext wurde bereits vollständig aufgebautDaten für gss_buffer_t konnten nicht zugewiesen werdenAnmeldedaten-Zwischenspeicher hat kein TGTNutzunsgtyp der Anmeldedaten ist unbekanntGSS-API Major-Statuscode %ld (0x%lx). Inkorrekte Kanalbindungen wurden angegebenUngültige Feldlänge im TokenKerberos V5 GSS-API-MechanismusVorgeschriebene Argumente für lange Optionen sind ebenfalls für die Kurzoptionen vorgeschrieben. Maskierter Aufruf-Fehler %ld (0x%lx) verschoben in %ld (0x%lx): Maskierter Routine-Fehler %ld (0x%lx) verschoben in %ld (0x%lx): Maskierte Zusatz-Info %ld (0x%lx) verschoben in %ld (0x%lx): Meldungstext ungültigKein @ in Zeichenkette SERVICE-NAMEEs wurde kein Kontext aufgebautEs wurden keine Anmeldedaten angegeben, oder die Anmeldedaten waren nicht verfügbar oder der Zugriff darauf nicht möglichKein FehlerKein Fehler Kein krb5-FehlerKein Principal in der Schlüsseltabelle entspricht dem gewünschten NamenPrincipal im Anmeldedaten-Zwischenspeicher entspricht nicht dem gewünschten NamenSTRING-UID-NAME enthält nicht nur ziffernDer Kontext ist abgelaufenDie Funktion gss_init_sec_context() oder gss_accept_sec_context() muss erneut aufgerufen werden, um die Funktion abzuschließenDer Vorgang ist durch die lokalen Sicherheitsregeln nicht erlaubt.Der Vorgang oder die Option ist nicht verfügbarDer angegebene Name war nicht der Name eines MechanismusDie angeforderte Schutzqualität konnte nicht bereitgestellt werdenDie referenzierten Anmeldedaten sind abgelaufenDas angeforderte Anmeldedatenelement existiert bereitsEin Token war ein Duplikat eines früheren TokensDie Gültigkeitsdauer des Tokens ist überschrittenRufen Sie »%s --help« auf, um mehr Informationen zu erhalten. UID löst den Benutzernamen nicht aufUnbekannter krb5-FehlerUnbekannte Schutzqualität angegebenUnbekannter Signaturtyp im TokenNicht näher bezeichneter Fehler im zugrundeliegenden MechanismusAufruf: %s OPTIONEN … ValidierungsfehlerAnzeige des Statuscodes fehlgeschlagen (%d)Indizierung der Mechanismen fehlgeschlagen (%d)Ermittlung der Informationen zum Mechanismus ist fehlgeschlagen (%d)| +-----------------+-----------------+---------------------------------+ Bit 31 24 23 16 15 0 gss-1.0.3/po/vi.po0000644000000000000000000003162312415507644010607 00000000000000# Vietnamese Translation for GSS. # Copyright © 2012 Free Software Foundation, Inc. # Copyright © 2012 Simon Josefsson (msgid) # This file is distributed under the same license as the gss package. # Clytie Siddall , 2005-2010. # Trần Ngá»c Quân , 2012. # msgid "" msgstr "" "Project-Id-Version: gss-1.0.1\n" "Report-Msgid-Bugs-To: bug-gss@gnu.org\n" "POT-Creation-Date: 2014-10-09 15:37+0200\n" "PO-Revision-Date: 2012-03-21 07:27+0700\n" "Last-Translator: Trần Ngá»c Quân \n" "Language-Team: Vietnamese \n" "Language: vi\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Generator: LocFactoryEditor 1.8\n" "X-Poedit-Language: Vietnamese\n" "X-Poedit-Country: VIET NAM\n" "X-Poedit-SourceCharset: utf-8\n" #: lib/meta.c:37 msgid "Kerberos V5 GSS-API mechanism" msgstr "CÆ¡ chế GSS-API Kerberos pb5" #: lib/error.c:37 msgid "A required input parameter could not be read" msgstr "Má»™t tham số nhập cần thiết không thể Ä‘á»c được" #: lib/error.c:39 msgid "A required output parameter could not be written" msgstr "Má»™t tham số xuất cần thiết không thể ghi được" #: lib/error.c:41 msgid "A parameter was malformed" msgstr "Có má»™t tham số dạng sai" #: lib/error.c:46 msgid "An unsupported mechanism was requested" msgstr "Äã yêu cầu má»™t cÆ¡ chế không được há»— trợ" #: lib/error.c:48 msgid "An invalid name was supplied" msgstr "Äã cung cấp má»™t tên không hợp lệ" #: lib/error.c:50 msgid "A supplied name was of an unsupported type" msgstr "Äã cung cấp má»™t tên có kiểu không được há»— trợ" #: lib/error.c:52 msgid "Incorrect channel bindings were supplied" msgstr "Äã cung cấp các tổ hợp kênh không đúng" #: lib/error.c:54 msgid "An invalid status code was supplied" msgstr "Äã cung cấp má»™t mã trạng thái không hợp lệ" #: lib/error.c:56 msgid "A token had an invalid MIC" msgstr "Có má»™t hiệu bài vá»›i MIC không hợp lệ" #: lib/error.c:58 msgid "" "No credentials were supplied, or the credentials were unavailable or " "inaccessible" msgstr "" "Chưa cung cấp thông tin xác thá»±c, hoặc thông tin xác thá»±c chưa sẵn sàng, " "hoặc không thể được truy cập" #: lib/error.c:61 msgid "No context has been established" msgstr "Chưa thiết lập ngữ cảnh" #: lib/error.c:63 msgid "A token was invalid" msgstr "Có má»™t hiệu bài không hợp lệ" #: lib/error.c:65 msgid "A credential was invalid" msgstr "Có thông tin xác thá»±c không hợp lệ" #: lib/error.c:67 msgid "The referenced credentials have expired" msgstr "Äã tham chiếu đến thông tin xác thá»±c đã hết hạn" #: lib/error.c:69 msgid "The context has expired" msgstr "Ngữ cảnh đã hết hạn" #: lib/error.c:71 msgid "Unspecified error in underlying mechanism" msgstr "Lá»—i không rõ trong cÆ¡ chế cÆ¡ sở" #: lib/error.c:73 msgid "The quality-of-protection requested could not be provided" msgstr "Không thể cung cấp mức bảo vệ (quality-of-protection) yêu cầu" #: lib/error.c:75 msgid "The operation is forbidden by local security policy" msgstr "Thao tác bị chính sách bảo mật cục bá»™ cấm" #: lib/error.c:77 msgid "The operation or option is unavailable" msgstr "Thao tác hay tùy chá»n không sẵn sàng" #: lib/error.c:79 msgid "The requested credential element already exists" msgstr "Äã yêu cầu má»™t phần tá»­ thông tin xác thá»±c đã có" #: lib/error.c:81 msgid "The provided name was not a mechanism name" msgstr "Äã cung cấp má»™t tên không phải tên cÆ¡ chế" #: lib/error.c:86 msgid "" "The gss_init_sec_context() or gss_accept_sec_context() function must be " "called again to complete its function" msgstr "" "Hàm « gss_init_sec_context() » hay « gss_accept_sec_context() » phải được " "gá»i lần nữa để hoàn tất chức năng" #: lib/error.c:89 msgid "The token was a duplicate of an earlier token" msgstr "Hiệu bài là bản sao cá»§a má»™t hiệu bài nằm trước" #: lib/error.c:91 msgid "The token's validity period has expired" msgstr "Thá»i gian hợp lệ cá»§a hiệu bài đã hết hạn" #: lib/error.c:93 msgid "A later token has already been processed" msgstr "Má»™t hiệu bài nằm sau đã được xá»­ lý" #: lib/error.c:95 msgid "An expected per-message token was not received" msgstr "Chưa nhận má»™t hiệu bài từng thông Ä‘iệp mong đợi" #: lib/error.c:312 msgid "No error" msgstr "Không có lá»—i" #: lib/krb5/error.c:36 msgid "No @ in SERVICE-NAME name string" msgstr "Không có dấu @ trong chuá»—i SERVICE-NAME (tên dịch vụ)" #: lib/krb5/error.c:38 msgid "STRING-UID-NAME contains nondigits" msgstr "STRING-UID-NAME (chuá»—i-tên-UID) chứa ký tá»± khác chữ số" #: lib/krb5/error.c:40 msgid "UID does not resolve to username" msgstr "UID không giải quyết thành tên ngưá»i dùng" #: lib/krb5/error.c:42 msgid "Validation error" msgstr "Lá»—i hợp lệ hoá" #: lib/krb5/error.c:44 msgid "Couldn't allocate gss_buffer_t data" msgstr "Không thể phân cấp dữ liệu « gss_buffer_t »" #: lib/krb5/error.c:46 msgid "Message context invalid" msgstr "Ngữ cảnh thông Ä‘iệp không hợp lệ" #: lib/krb5/error.c:48 msgid "Buffer is the wrong size" msgstr "Vùng đệm kích cỡ sai" #: lib/krb5/error.c:50 msgid "Credential usage type is unknown" msgstr "Không rõ kiểu sá»­ dụng thông tin xác thá»±c" #: lib/krb5/error.c:52 msgid "Unknown quality of protection specified" msgstr "Äã ghi rõ mức bảo vệ không rõ" #: lib/krb5/error.c:55 msgid "Principal in credential cache does not match desired name" msgstr "" "Äiá»u chính trong bá»™ nhá»› tạm thông tin xác thá»±c không tương ứng vá»›i tên yêu " "cầu" #: lib/krb5/error.c:57 msgid "No principal in keytab matches desired name" msgstr "Không có Ä‘iá»u chính trong keytab mà tương ứng vá»›i tên yêu cầu" #: lib/krb5/error.c:59 msgid "Credential cache has no TGT" msgstr "Bá»™ nhá»› tạm thông tin xác thá»±c không có TGT" #: lib/krb5/error.c:61 msgid "Authenticator has no subkey" msgstr "Nhà xác thá»±c không có khoá phụ" #: lib/krb5/error.c:63 msgid "Context is already fully established" msgstr "Ngữ cảnh đã được thiết lập đầy đủ" #: lib/krb5/error.c:65 msgid "Unknown signature type in token" msgstr "Không rõ kiểu chữ ký trong hiệu bài" #: lib/krb5/error.c:67 msgid "Invalid field length in token" msgstr "Chiá»u dài trưá»ng không hợp lệ trong hiệu bài" #: lib/krb5/error.c:69 msgid "Attempt to use incomplete security context" msgstr "Äã thá»­ sá»­ dụng ngữ cảnh bảo mật chưa hoàn tất" #: lib/krb5/error.c:86 msgid "No krb5 error" msgstr "Không có lá»—i krb5" #: lib/krb5/error.c:127 msgid "Unknown krb5 error" msgstr "Lá»—i krb5 không rõ" #: src/gss.c:67 #, c-format msgid "Try `%s --help' for more information.\n" msgstr "Hãy thá»­ câu lệnh trợ giúp « %s --help » để tìm thêm thông tin.\n" #: src/gss.c:71 #, c-format msgid "Usage: %s OPTIONS...\n" msgstr "Sá»­ dụng: %s TÙY_CHỌN...\n" #: src/gss.c:74 msgid "" "Command line interface to GSS, used to explain error codes.\n" "\n" msgstr "" "Giao diện dòng lệnh vào GSS, dùng để giải thích mã lá»—i.\n" "\n" #: src/gss.c:78 msgid "" "Mandatory arguments to long options are mandatory for short options too.\n" msgstr "" "Má»i đối số bắt buá»™c phải sá»­ dụng vá»›i tùy chá»n dài cÅ©ng bắt buá»™c vá»›i tùy chá»n " "ngắn.\n" #: src/gss.c:81 msgid "" " -h, --help Print help and exit.\n" " -V, --version Print version and exit.\n" " -l, --list-mechanisms\n" " List information about supported mechanisms\n" " in a human readable format.\n" " -m, --major=LONG Describe a `major status' error code value.\n" msgstr "" " -h, --help Hiển thị trợ giúp rồi thoát.\n" " -V, --version Hiển thị phiên bản rồi thoát.\n" " -l, --list-mechanisms\n" " Lấy danh sách thông tin vá» các cÆ¡ cấu được há»— trợ\n" " theo định dạng con ngưá»i có thể Ä‘á»c hiểu.\n" " -m, --major=LONG Mô tả giá trị má»™t mã sai `major status'.\n" #: src/gss.c:89 msgid "" " -a, --accept-sec-context[=MECH]\n" " Accept a security context as server.\n" " If MECH is not specified, no credentials\n" " will be acquired. Use \"*\" to use library\n" " default mechanism.\n" " -i, --init-sec-context=MECH\n" " Initialize a security context as client.\n" " MECH is the SASL name of mechanism, use -l\n" " to list supported mechanisms.\n" " -n, --server-name=SERVICE@HOSTNAME\n" " For -i and -a, set the name of the remote host.\n" " For example, \"imap@mail.example.com\".\n" msgstr "" #: src/gss.c:103 msgid " -q, --quiet Silent operation (default=off).\n" msgstr " -q, --quiet thá»±c hiện thầm lặng (mặc định = tắt).\n" #: src/gss.c:122 #, c-format msgid "" "GSS-API major status code %ld (0x%lx).\n" "\n" msgstr "" "GSS-API mã trạng thái chính %ld (0x%lx).\n" "\n" #: src/gss.c:124 #, c-format msgid "" " MSB LSB\n" " +-----------------+-----------------+---------------------------------+\n" " | Calling Error | Routine Error | Supplementary Info |\n" " | " msgstr "" " MSB LSB\n" " +-----------------+-----------------+---------------------------------+\n" " | Lá»—i gá»i | Lá»—i hàm | Thông tin bổ sung |\n" " | " #: src/gss.c:138 #, c-format msgid "" "|\n" " +-----------------+-----------------+---------------------------------+\n" "Bit 31 24 23 16 15 0\n" "\n" msgstr "" "|\n" " +-----------------+-----------------+---------------------------------+\n" "Bit 31 24 23 16 15 0\n" "\n" #: src/gss.c:148 #, c-format msgid "Masked routine error %ld (0x%lx) shifted into %ld (0x%lx):\n" msgstr "Lá»—i hàm có mặt nạ %ld (0x%lx) đã địch vào %ld (0x%lx):\n" #: src/gss.c:164 src/gss.c:198 src/gss.c:234 #, c-format msgid "displaying status code failed (%d)" msgstr "hiển thị mã trạng thái gặp lá»—i (%d)" #: src/gss.c:184 #, c-format msgid "Masked calling error %ld (0x%lx) shifted into %ld (0x%lx):\n" msgstr "Lá»—i gói có mặt nạ %ld (0x%lx) đã rá»i vào %ld (0x%lx):\n" #: src/gss.c:217 #, c-format msgid "Masked supplementary info %ld (0x%lx) shifted into %ld (0x%lx):\n" msgstr "Thông tin bổ sung có mặt nạ %ld (0x%lx) đã dịch vào %ld (0x%lx):\n" #: src/gss.c:251 #, c-format msgid "No error\n" msgstr "Không có lá»—i\n" #: src/gss.c:269 #, c-format msgid "indicating mechanisms failed (%d)" msgstr "cÆ¡ cấu chỉ thị gặp lá»—i (%d)" #: src/gss.c:285 #, c-format msgid "inquiring information about mechanism failed (%d)" msgstr "tìm hiểu thông tin vá» cÆ¡ cấu gặp lá»—i (%d)" #: src/gss.c:342 src/gss.c:483 #, fuzzy, c-format msgid "inquiring mechanism for SASL name (%d/%d)" msgstr "cÆ¡ cấu chỉ thị gặp lá»—i (%d)" #: src/gss.c:355 src/gss.c:498 #, c-format msgid "could not import server name \"%s\" (%d/%d)" msgstr "" #: src/gss.c:374 #, fuzzy, c-format msgid "initializing security context failed (%d/%d)" msgstr "hiển thị mã trạng thái gặp lá»—i (%d)" #: src/gss.c:378 src/gss.c:564 #, c-format msgid "base64 input too long" msgstr "" #: src/gss.c:380 src/gss.c:415 src/gss.c:545 src/gss.c:566 #, c-format msgid "malloc" msgstr "" #: src/gss.c:407 src/gss.c:537 #, c-format msgid "getline" msgstr "" #: src/gss.c:409 src/gss.c:539 #, c-format msgid "end of file" msgstr "" #: src/gss.c:413 src/gss.c:543 #, c-format msgid "base64 fail" msgstr "" #: src/gss.c:520 #, c-format msgid "could not acquire server credentials (%d/%d)" msgstr "" #: src/gss.c:560 #, fuzzy, c-format msgid "accepting security context failed (%d/%d)" msgstr "hiển thị mã trạng thái gặp lá»—i (%d)" #~ msgid "" #~ " -h, --help Print help and exit\n" #~ " -V, --version Print version and exit\n" #~ " -m, --major=LONG Describe a `major status' error code vaue in plain " #~ "text.\n" #~ " -q, --quiet Silent operation (default=off)\n" #~ msgstr "" #~ " -h, --help Hiển thị trợ giúp, sau đó thoát\n" #~ " -V, --version Hiển thị số thứ tá»± phiên bản, sau đó thoát\n" #~ " -m, --major=DÀI Diá»…n tả má»™t giá trị mã lá»—i « trạng thái chính » bằng " #~ "nhập thô.\n" #~ " -q, --quiet Thao tác mà không xuất chi tiết (mặc định là bị tắt)\n" gss-1.0.3/po/sr.gmo0000644000000000000000000002353312415507644010762 00000000000000Þ•@Y€æh4†»(Ôý,0D*u ».Ïþ# &? *f ‘ ­ =Æ $ #) M i (Š (³ Ü ú I ;b ;ž @Ú  3 T Qt Æ Ï Ù +ç 9 "M p mˆ 3ö &**Q9|'¶/Þ-'<&d ‹¬'¿ç)1G"X!{1—Ïgn©†>04o0¤0ÕZZaD¼-$/CT9˜BÒ?aUJ·?ƒBKÆC<VJ“;ÞP6k3¢…Öa\k¾c*2Ž;Á0ý€.¯ÅÜlügi =Ñ $!¿4!]ô!8R"G‹"\Ó"90#Nj#E¹#<ÿ#G<$?„$'Ä$Dì$81%Fj%'±%Ù%9õ%</&Sl&šÀ&%845;+. = 7/ , "!)0:@$19 ?*32<#-6>& (' MSB LSB +-----------------+-----------------+---------------------------------+ | Calling Error | Routine Error | Supplementary Info | | -h, --help Print help and exit. -V, --version Print version and exit. -l, --list-mechanisms List information about supported mechanisms in a human readable format. -m, --major=LONG Describe a `major status' error code value. -q, --quiet Silent operation (default=off). A credential was invalidA later token has already been processedA parameter was malformedA required input parameter could not be readA required output parameter could not be writtenA supplied name was of an unsupported typeA token had an invalid MICA token was invalidAn expected per-message token was not receivedAn invalid name was suppliedAn invalid status code was suppliedAn unsupported mechanism was requestedAttempt to use incomplete security contextAuthenticator has no subkeyBuffer is the wrong sizeCommand line interface to GSS, used to explain error codes. Context is already fully establishedCouldn't allocate gss_buffer_t dataCredential cache has no TGTCredential usage type is unknownGSS-API major status code %ld (0x%lx). Incorrect channel bindings were suppliedInvalid field length in tokenKerberos V5 GSS-API mechanismMandatory arguments to long options are mandatory for short options too. Masked calling error %ld (0x%lx) shifted into %ld (0x%lx): Masked routine error %ld (0x%lx) shifted into %ld (0x%lx): Masked supplementary info %ld (0x%lx) shifted into %ld (0x%lx): Message context invalidNo @ in SERVICE-NAME name stringNo context has been establishedNo credentials were supplied, or the credentials were unavailable or inaccessibleNo errorNo error No krb5 errorNo principal in keytab matches desired namePrincipal in credential cache does not match desired nameSTRING-UID-NAME contains nondigitsThe context has expiredThe gss_init_sec_context() or gss_accept_sec_context() function must be called again to complete its functionThe operation is forbidden by local security policyThe operation or option is unavailableThe provided name was not a mechanism nameThe quality-of-protection requested could not be providedThe referenced credentials have expiredThe requested credential element already existsThe token was a duplicate of an earlier tokenThe token's validity period has expiredTry `%s --help' for more information. UID does not resolve to usernameUnknown krb5 errorUnknown quality of protection specifiedUnknown signature type in tokenUnspecified error in underlying mechanismUsage: %s OPTIONS... Validation errordisplaying status code failed (%d)indicating mechanisms failed (%d)inquiring information about mechanism failed (%d)| +-----------------+-----------------+---------------------------------+ Bit 31 24 23 16 15 0 Project-Id-Version: gss-1.0.1 Report-Msgid-Bugs-To: bug-gss@gnu.org POT-Creation-Date: 2014-10-09 15:37+0200 PO-Revision-Date: 2011-12-06 09:50+0200 Last-Translator: МироÑлав Ðиколић Language-Team: Serbian Language: sr MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2); X-Generator: Virtaal 0.7.0 МСБ ЛСБ +-----------------+-----------------+---------------------------------+ | Грешка позива | Грешка уÑтаљеноÑти | Додатни подаци | | -h, --help ИÑпиÑује помоћ и излази. -V, --version ИÑпиÑује издање и излази. -l, --list-mechanisms Ðаводи податке о подржаним поÑтупцима у људима читљивом облику. -m, --major=ДУГО ОпиÑује „главно Ñтање“ вредноÑти кода грешке. -q, --quiet Тиха радња (оÑновно=off). ПуномоћÑтво беше неиÑправноКаÑнији чин је већ обрађенПараметар беше неиÑправанЗахтевани улазни параметар не може бити прочитанЗахтевани излазни параметар не може бити запиÑанИÑпоручено име беше неподржане врÑтеЧин имаше неиÑправан МИЦЧин беше неиÑправанОчекивани по-поруци чин није примљенÐеиÑправно име беше иÑпорученоÐеиÑправан код Ñтања беше иÑпорученÐеподржани поÑтупак беше захтеванПокушавам да кориÑтим непотпуни контекÑÑ‚ ÑигурноÑтиПотврђивач идентитета не Ñадржи подкључМеђумеморија је погрешне величинеСучеље линије наредби за ГСС, коришћено за објашњавање кодова грешака. КонтекÑÑ‚ је већ у потпуноÑти уÑпоÑтављенÐе могу да доделим „gss_buffer_t“ податкеОÑтава пуномоћÑтва не Ñадржи ТГТВрÑта употребе пуномоћÑтва је непознатаГСС-ÐПИ главни код Ñтања %ld (0x%lx). ÐеиÑправна везица канала бејаше иÑпорученаÐеиÑправна дужина поља у Ñ‡Ð¸Ð½ÑƒÐšÐµÑ€Ð±ÐµÑ€Ð¾Ñ Ð’5 ГСС-ÐПИ поÑтупакОбавезни аргументи за дуге опције Ñу обавезни и за кратке опције такође. МаÑкирана грешка позива %ld (0x%lx) је потиÑнута у %ld (0x%lx): МаÑкирана грешка уÑтаљеноÑти %ld (0x%lx) је потиÑнута у %ld (0x%lx): МаÑкирани додатни подаци %ld (0x%lx) Ñу потиÑнути у %ld (0x%lx): ÐеиÑправан контекÑÑ‚ порукеÐема @ у ниÑци имена ÐÐЗИВ-УСЛУГЕÐије уÑпоÑтављен контекÑÑ‚ÐиÑу иÑпоручена пуномоћÑтва, или бејаху недоÑтупна или неприÑтупачнаÐема грешкеÐема грешке Ðема крб5 грешакаÐиједан принцип у језичку кључа не одговара жељеном називуПринцип у оÑтави пуномоћÑтва не одговара жељеном називуÐÐЗИВ-УИБ-ÐИСКРне Ñадржи бројевеКонтекÑÑ‚ је иÑтекаоФункција „gss_init_sec_context()“ или „gss_accept_sec_context()“ мора бити позвана још једном да би довршила Ñвоју функцијуРадња је забрањена локалном политиком безбедноÑтиРадња или опција је недоÑтупнаОбезебеђено име није било име поÑтупкаЗатражени квалитет заштите не може бити обезбеђенТражена пуномоћÑтва Ñу иÑтеклаЗатражени елемент пуномоћÑтва већ поÑтојиЧин беше дупликат једног ранијег чинаТрајање важноÑти чина је иÑтеклоПробајте „%s --help“ за више информација. УИБ не доводи до кориÑничког именаÐепозната крб5 грешкаÐаведен је непознат квалитет заштитеÐепозната врÑта потпиÑа у чинуÐеодређена грешка у оÑновном поÑтупкуКоришћење: %s ОПЦИЈЕ... Грешка провереприказ кода Ñтања није уÑпео (%d)поÑтупак указивања није уÑпео (%d)трагање за подацима о поÑтупку није уÑпело (%d)| +-----------------+-----------------+---------------------------------+ Бит 31 24 23 16 15 0 gss-1.0.3/po/Rules-quot0000644000000000000000000000414212415507605011625 00000000000000# This file, Rules-quot, can be copied and used freely without restrictions. # Special Makefile rules for English message catalogs with quotation marks. DISTFILES.common.extra1 = quot.sed boldquot.sed en@quot.header en@boldquot.header insert-header.sin Rules-quot .SUFFIXES: .insert-header .po-update-en en@quot.po-create: $(MAKE) en@quot.po-update en@boldquot.po-create: $(MAKE) en@boldquot.po-update en@quot.po-update: en@quot.po-update-en en@boldquot.po-update: en@boldquot.po-update-en .insert-header.po-update-en: @lang=`echo $@ | sed -e 's/\.po-update-en$$//'`; \ if test "$(PACKAGE)" = "gettext-tools"; then PATH=`pwd`/../src:$$PATH; GETTEXTLIBDIR=`cd $(top_srcdir)/src && pwd`; export GETTEXTLIBDIR; fi; \ tmpdir=`pwd`; \ echo "$$lang:"; \ ll=`echo $$lang | sed -e 's/@.*//'`; \ LC_ALL=C; export LC_ALL; \ cd $(srcdir); \ if $(MSGINIT) -i $(DOMAIN).pot --no-translator -l $$lang -o - 2>/dev/null \ | $(SED) -f $$tmpdir/$$lang.insert-header | $(MSGCONV) -t UTF-8 | \ { case `$(MSGFILTER) --version | sed 1q | sed -e 's,^[^0-9]*,,'` in \ '' | 0.[0-9] | 0.[0-9].* | 0.1[0-8] | 0.1[0-8].*) \ $(MSGFILTER) $(SED) -f `echo $$lang | sed -e 's/.*@//'`.sed \ ;; \ *) \ $(MSGFILTER) `echo $$lang | sed -e 's/.*@//'` \ ;; \ esac } 2>/dev/null > $$tmpdir/$$lang.new.po \ ; then \ if cmp $$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \ rm -f $$tmpdir/$$lang.new.po; \ else \ if mv -f $$tmpdir/$$lang.new.po $$lang.po; then \ :; \ else \ echo "creation of $$lang.po failed: cannot move $$tmpdir/$$lang.new.po to $$lang.po" 1>&2; \ exit 1; \ fi; \ fi; \ else \ echo "creation of $$lang.po failed!" 1>&2; \ rm -f $$tmpdir/$$lang.new.po; \ fi en@quot.insert-header: insert-header.sin sed -e '/^#/d' -e 's/HEADER/en@quot.header/g' $(srcdir)/insert-header.sin > en@quot.insert-header en@boldquot.insert-header: insert-header.sin sed -e '/^#/d' -e 's/HEADER/en@boldquot.header/g' $(srcdir)/insert-header.sin > en@boldquot.insert-header mostlyclean: mostlyclean-quot mostlyclean-quot: rm -f *.insert-header gss-1.0.3/po/sr.po0000644000000000000000000003220512415507644010612 00000000000000# Serbian translation of gss # Copyright (C) 2011 Free Software Foundation, Inc. # This file is distributed under the same license as the gss package. # МироÑлав Ðиколић , 2011. msgid "" msgstr "" "Project-Id-Version: gss-1.0.1\n" "Report-Msgid-Bugs-To: bug-gss@gnu.org\n" "POT-Creation-Date: 2014-10-09 15:37+0200\n" "PO-Revision-Date: 2011-12-06 09:50+0200\n" "Last-Translator: МироÑлав Ðиколић \n" "Language-Team: Serbian \n" "Language: sr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" "X-Generator: Virtaal 0.7.0\n" #: lib/meta.c:37 msgid "Kerberos V5 GSS-API mechanism" msgstr "ÐšÐµÑ€Ð±ÐµÑ€Ð¾Ñ Ð’5 ГСС-ÐПИ поÑтупак" #: lib/error.c:37 msgid "A required input parameter could not be read" msgstr "Захтевани улазни параметар не може бити прочитан" #: lib/error.c:39 msgid "A required output parameter could not be written" msgstr "Захтевани излазни параметар не може бити запиÑан" #: lib/error.c:41 msgid "A parameter was malformed" msgstr "Параметар беше неиÑправан" #: lib/error.c:46 msgid "An unsupported mechanism was requested" msgstr "Ðеподржани поÑтупак беше захтеван" #: lib/error.c:48 msgid "An invalid name was supplied" msgstr "ÐеиÑправно име беше иÑпоручено" #: lib/error.c:50 msgid "A supplied name was of an unsupported type" msgstr "ИÑпоручено име беше неподржане врÑте" #: lib/error.c:52 msgid "Incorrect channel bindings were supplied" msgstr "ÐеиÑправна везица канала бејаше иÑпоручена" #: lib/error.c:54 msgid "An invalid status code was supplied" msgstr "ÐеиÑправан код Ñтања беше иÑпоручен" #: lib/error.c:56 msgid "A token had an invalid MIC" msgstr "Чин имаше неиÑправан МИЦ" #: lib/error.c:58 msgid "" "No credentials were supplied, or the credentials were unavailable or " "inaccessible" msgstr "ÐиÑу иÑпоручена пуномоћÑтва, или бејаху недоÑтупна или неприÑтупачна" #: lib/error.c:61 msgid "No context has been established" msgstr "Ðије уÑпоÑтављен контекÑÑ‚" #: lib/error.c:63 msgid "A token was invalid" msgstr "Чин беше неиÑправан" #: lib/error.c:65 msgid "A credential was invalid" msgstr "ПуномоћÑтво беше неиÑправно" #: lib/error.c:67 msgid "The referenced credentials have expired" msgstr "Тражена пуномоћÑтва Ñу иÑтекла" #: lib/error.c:69 msgid "The context has expired" msgstr "КонтекÑÑ‚ је иÑтекао" #: lib/error.c:71 msgid "Unspecified error in underlying mechanism" msgstr "Ðеодређена грешка у оÑновном поÑтупку" #: lib/error.c:73 msgid "The quality-of-protection requested could not be provided" msgstr "Затражени квалитет заштите не може бити обезбеђен" #: lib/error.c:75 msgid "The operation is forbidden by local security policy" msgstr "Радња је забрањена локалном политиком безбедноÑти" #: lib/error.c:77 msgid "The operation or option is unavailable" msgstr "Радња или опција је недоÑтупна" #: lib/error.c:79 msgid "The requested credential element already exists" msgstr "Затражени елемент пуномоћÑтва већ поÑтоји" #: lib/error.c:81 msgid "The provided name was not a mechanism name" msgstr "Обезебеђено име није било име поÑтупка" #: lib/error.c:86 msgid "" "The gss_init_sec_context() or gss_accept_sec_context() function must be " "called again to complete its function" msgstr "" "Функција „gss_init_sec_context()“ или „gss_accept_sec_context()“ мора бити " "позвана још једном да би довршила Ñвоју функцију" #: lib/error.c:89 msgid "The token was a duplicate of an earlier token" msgstr "Чин беше дупликат једног ранијег чина" #: lib/error.c:91 msgid "The token's validity period has expired" msgstr "Трајање важноÑти чина је иÑтекло" #: lib/error.c:93 msgid "A later token has already been processed" msgstr "КаÑнији чин је већ обрађен" #: lib/error.c:95 msgid "An expected per-message token was not received" msgstr "Очекивани по-поруци чин није примљен" #: lib/error.c:312 msgid "No error" msgstr "Ðема грешке" #: lib/krb5/error.c:36 msgid "No @ in SERVICE-NAME name string" msgstr "Ðема @ у ниÑци имена ÐÐЗИВ-УСЛУГЕ" #: lib/krb5/error.c:38 msgid "STRING-UID-NAME contains nondigits" msgstr "ÐÐЗИВ-УИБ-ÐИСКРне Ñадржи бројеве" #: lib/krb5/error.c:40 msgid "UID does not resolve to username" msgstr "УИБ не доводи до кориÑничког имена" #: lib/krb5/error.c:42 msgid "Validation error" msgstr "Грешка провере" #: lib/krb5/error.c:44 msgid "Couldn't allocate gss_buffer_t data" msgstr "Ðе могу да доделим „gss_buffer_t“ податке" #: lib/krb5/error.c:46 msgid "Message context invalid" msgstr "ÐеиÑправан контекÑÑ‚ поруке" #: lib/krb5/error.c:48 msgid "Buffer is the wrong size" msgstr "Међумеморија је погрешне величине" #: lib/krb5/error.c:50 msgid "Credential usage type is unknown" msgstr "Ð’Ñ€Ñта употребе пуномоћÑтва је непозната" #: lib/krb5/error.c:52 msgid "Unknown quality of protection specified" msgstr "Ðаведен је непознат квалитет заштите" #: lib/krb5/error.c:55 msgid "Principal in credential cache does not match desired name" msgstr "Принцип у оÑтави пуномоћÑтва не одговара жељеном називу" #: lib/krb5/error.c:57 msgid "No principal in keytab matches desired name" msgstr "Ðиједан принцип у језичку кључа не одговара жељеном називу" #: lib/krb5/error.c:59 msgid "Credential cache has no TGT" msgstr "ОÑтава пуномоћÑтва не Ñадржи ТГТ" #: lib/krb5/error.c:61 msgid "Authenticator has no subkey" msgstr "Потврђивач идентитета не Ñадржи подкључ" #: lib/krb5/error.c:63 msgid "Context is already fully established" msgstr "КонтекÑÑ‚ је већ у потпуноÑти уÑпоÑтављен" #: lib/krb5/error.c:65 msgid "Unknown signature type in token" msgstr "Ðепозната врÑта потпиÑа у чину" #: lib/krb5/error.c:67 msgid "Invalid field length in token" msgstr "ÐеиÑправна дужина поља у чину" #: lib/krb5/error.c:69 msgid "Attempt to use incomplete security context" msgstr "Покушавам да кориÑтим непотпуни контекÑÑ‚ ÑигурноÑти" #: lib/krb5/error.c:86 msgid "No krb5 error" msgstr "Ðема крб5 грешака" #: lib/krb5/error.c:127 msgid "Unknown krb5 error" msgstr "Ðепозната крб5 грешка" #: src/gss.c:67 #, c-format msgid "Try `%s --help' for more information.\n" msgstr "Пробајте „%s --help“ за више информација.\n" #: src/gss.c:71 #, c-format msgid "Usage: %s OPTIONS...\n" msgstr "Коришћење: %s ОПЦИЈЕ...\n" #: src/gss.c:74 msgid "" "Command line interface to GSS, used to explain error codes.\n" "\n" msgstr "" "Сучеље линије наредби за ГСС, коришћено за објашњавање кодова грешака.\n" "\n" #: src/gss.c:78 msgid "" "Mandatory arguments to long options are mandatory for short options too.\n" msgstr "" "Обавезни аргументи за дуге опције Ñу обавезни и за кратке опције такође.\n" #: src/gss.c:81 msgid "" " -h, --help Print help and exit.\n" " -V, --version Print version and exit.\n" " -l, --list-mechanisms\n" " List information about supported mechanisms\n" " in a human readable format.\n" " -m, --major=LONG Describe a `major status' error code value.\n" msgstr "" " -h, --help ИÑпиÑује помоћ и излази.\n" " -V, --version ИÑпиÑује издање и излази.\n" " -l, --list-mechanisms\n" " Ðаводи податке о подржаним поÑтупцима\n" " у људима читљивом облику.\n" " -m, --major=ДУГО ОпиÑује „главно Ñтање“ вредноÑти кода грешке.\n" #: src/gss.c:89 msgid "" " -a, --accept-sec-context[=MECH]\n" " Accept a security context as server.\n" " If MECH is not specified, no credentials\n" " will be acquired. Use \"*\" to use library\n" " default mechanism.\n" " -i, --init-sec-context=MECH\n" " Initialize a security context as client.\n" " MECH is the SASL name of mechanism, use -l\n" " to list supported mechanisms.\n" " -n, --server-name=SERVICE@HOSTNAME\n" " For -i and -a, set the name of the remote host.\n" " For example, \"imap@mail.example.com\".\n" msgstr "" #: src/gss.c:103 msgid " -q, --quiet Silent operation (default=off).\n" msgstr " -q, --quiet Тиха радња (оÑновно=off).\n" #: src/gss.c:122 #, c-format msgid "" "GSS-API major status code %ld (0x%lx).\n" "\n" msgstr "" "ГСС-ÐПИ главни код Ñтања %ld (0x%lx).\n" "\n" #: src/gss.c:124 #, c-format msgid "" " MSB LSB\n" " +-----------------+-----------------+---------------------------------+\n" " | Calling Error | Routine Error | Supplementary Info |\n" " | " msgstr "" " МСБ ЛСБ\n" " +-----------------+-----------------+---------------------------------+\n" " | Грешка позива | Грешка уÑтаљеноÑти | Додатни подаци |\n" " | " #: src/gss.c:138 #, c-format msgid "" "|\n" " +-----------------+-----------------+---------------------------------+\n" "Bit 31 24 23 16 15 0\n" "\n" msgstr "" "|\n" " +-----------------+-----------------+---------------------------------+\n" "Бит 31 24 23 16 15 0\n" "\n" #: src/gss.c:148 #, c-format msgid "Masked routine error %ld (0x%lx) shifted into %ld (0x%lx):\n" msgstr "МаÑкирана грешка уÑтаљеноÑти %ld (0x%lx) је потиÑнута у %ld (0x%lx):\n" #: src/gss.c:164 src/gss.c:198 src/gss.c:234 #, c-format msgid "displaying status code failed (%d)" msgstr "приказ кода Ñтања није уÑпео (%d)" #: src/gss.c:184 #, c-format msgid "Masked calling error %ld (0x%lx) shifted into %ld (0x%lx):\n" msgstr "МаÑкирана грешка позива %ld (0x%lx) је потиÑнута у %ld (0x%lx):\n" #: src/gss.c:217 #, c-format msgid "Masked supplementary info %ld (0x%lx) shifted into %ld (0x%lx):\n" msgstr "МаÑкирани додатни подаци %ld (0x%lx) Ñу потиÑнути у %ld (0x%lx):\n" #: src/gss.c:251 #, c-format msgid "No error\n" msgstr "Ðема грешке\n" #: src/gss.c:269 #, c-format msgid "indicating mechanisms failed (%d)" msgstr "поÑтупак указивања није уÑпео (%d)" #: src/gss.c:285 #, c-format msgid "inquiring information about mechanism failed (%d)" msgstr "трагање за подацима о поÑтупку није уÑпело (%d)" #: src/gss.c:342 src/gss.c:483 #, fuzzy, c-format msgid "inquiring mechanism for SASL name (%d/%d)" msgstr "поÑтупак указивања није уÑпео (%d)" #: src/gss.c:355 src/gss.c:498 #, c-format msgid "could not import server name \"%s\" (%d/%d)" msgstr "" #: src/gss.c:374 #, fuzzy, c-format msgid "initializing security context failed (%d/%d)" msgstr "приказ кода Ñтања није уÑпео (%d)" #: src/gss.c:378 src/gss.c:564 #, c-format msgid "base64 input too long" msgstr "" #: src/gss.c:380 src/gss.c:415 src/gss.c:545 src/gss.c:566 #, c-format msgid "malloc" msgstr "" #: src/gss.c:407 src/gss.c:537 #, c-format msgid "getline" msgstr "" #: src/gss.c:409 src/gss.c:539 #, c-format msgid "end of file" msgstr "" #: src/gss.c:413 src/gss.c:543 #, c-format msgid "base64 fail" msgstr "" #: src/gss.c:520 #, c-format msgid "could not acquire server credentials (%d/%d)" msgstr "" #: src/gss.c:560 #, fuzzy, c-format msgid "accepting security context failed (%d/%d)" msgstr "приказ кода Ñтања није уÑпео (%d)" gss-1.0.3/po/en@boldquot.gmo0000644000000000000000000002333312415507644012610 00000000000000Þ•KteÌ`æalHµ 4Ó  (! J ,d 0‘ * í  . K #h &Œ *³ Þ ú = $Q #v š ¶ (× ()GIe;¯;ë@'h €¡QÁ  &+49`"š½mÕ3C&w*ž9É'/+-['‰&± Øù' 4)T~”)¥ ÏÛ,ñ)"H kw!,¡1Î)*—1mÉæ7„)£4Í(D,^0‹*¼ç.E#b&†*­Øô= $K#p” °(Ñ(ú#AI_;©;å@! b z › Q»  ! ! !+.!9Z!"”!·!mÏ!3="&q"*˜"9Ã"'ý"/%#-U#'ƒ#2«# Þ#ÿ#'$:$)Z$„$š$)«$ Õ$á$,÷$5$%"Z% }%‰%!‘%,³%1à%)&<&—C&)=,<89"&F:- 2%7'AJ0!G I3+E.?>KBHC;( D4@ $/6#*51  MSB LSB +-----------------+-----------------+---------------------------------+ | Calling Error | Routine Error | Supplementary Info | | -a, --accept-sec-context[=MECH] Accept a security context as server. If MECH is not specified, no credentials will be acquired. Use "*" to use library default mechanism. -i, --init-sec-context=MECH Initialize a security context as client. MECH is the SASL name of mechanism, use -l to list supported mechanisms. -n, --server-name=SERVICE@HOSTNAME For -i and -a, set the name of the remote host. For example, "imap@mail.example.com". -h, --help Print help and exit. -V, --version Print version and exit. -l, --list-mechanisms List information about supported mechanisms in a human readable format. -m, --major=LONG Describe a `major status' error code value. -q, --quiet Silent operation (default=off). A credential was invalidA later token has already been processedA parameter was malformedA required input parameter could not be readA required output parameter could not be writtenA supplied name was of an unsupported typeA token had an invalid MICA token was invalidAn expected per-message token was not receivedAn invalid name was suppliedAn invalid status code was suppliedAn unsupported mechanism was requestedAttempt to use incomplete security contextAuthenticator has no subkeyBuffer is the wrong sizeCommand line interface to GSS, used to explain error codes. Context is already fully establishedCouldn't allocate gss_buffer_t dataCredential cache has no TGTCredential usage type is unknownGSS-API major status code %ld (0x%lx). Incorrect channel bindings were suppliedInvalid field length in tokenKerberos V5 GSS-API mechanismMandatory arguments to long options are mandatory for short options too. Masked calling error %ld (0x%lx) shifted into %ld (0x%lx): Masked routine error %ld (0x%lx) shifted into %ld (0x%lx): Masked supplementary info %ld (0x%lx) shifted into %ld (0x%lx): Message context invalidNo @ in SERVICE-NAME name stringNo context has been establishedNo credentials were supplied, or the credentials were unavailable or inaccessibleNo errorNo error No krb5 errorNo principal in keytab matches desired namePrincipal in credential cache does not match desired nameSTRING-UID-NAME contains nondigitsThe context has expiredThe gss_init_sec_context() or gss_accept_sec_context() function must be called again to complete its functionThe operation is forbidden by local security policyThe operation or option is unavailableThe provided name was not a mechanism nameThe quality-of-protection requested could not be providedThe referenced credentials have expiredThe requested credential element already existsThe token was a duplicate of an earlier tokenThe token's validity period has expiredTry `%s --help' for more information. UID does not resolve to usernameUnknown krb5 errorUnknown quality of protection specifiedUnknown signature type in tokenUnspecified error in underlying mechanismUsage: %s OPTIONS... Validation erroraccepting security context failed (%d/%d)base64 failbase64 input too longcould not acquire server credentials (%d/%d)could not import server name "%s" (%d/%d)displaying status code failed (%d)end of filegetlineindicating mechanisms failed (%d)initializing security context failed (%d/%d)inquiring information about mechanism failed (%d)inquiring mechanism for SASL name (%d/%d)malloc| +-----------------+-----------------+---------------------------------+ Bit 31 24 23 16 15 0 Project-Id-Version: gss 1.0.3 Report-Msgid-Bugs-To: bug-gss@gnu.org POT-Creation-Date: 2014-10-09 15:37+0200 PO-Revision-Date: 2014-10-09 15:37+0200 Last-Translator: Automatically generated Language-Team: none Language: en@boldquot MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=(n != 1); MSB LSB +-----------------+-----------------+---------------------------------+ | Calling Error | Routine Error | Supplementary Info | | -a, --accept-sec-context[=MECH] Accept a security context as server. If MECH is not specified, no credentials will be acquired. Use “*†to use library default mechanism. -i, --init-sec-context=MECH Initialize a security context as client. MECH is the SASL name of mechanism, use -l to list supported mechanisms. -n, --server-name=SERVICE@HOSTNAME For -i and -a, set the name of the remote host. For example, “imap@mail.example.comâ€. -h, --help Print help and exit. -V, --version Print version and exit. -l, --list-mechanisms List information about supported mechanisms in a human readable format. -m, --major=LONG Describe a ‘major status’ error code value. -q, --quiet Silent operation (default=off). A credential was invalidA later token has already been processedA parameter was malformedA required input parameter could not be readA required output parameter could not be writtenA supplied name was of an unsupported typeA token had an invalid MICA token was invalidAn expected per-message token was not receivedAn invalid name was suppliedAn invalid status code was suppliedAn unsupported mechanism was requestedAttempt to use incomplete security contextAuthenticator has no subkeyBuffer is the wrong sizeCommand line interface to GSS, used to explain error codes. Context is already fully establishedCouldn't allocate gss_buffer_t dataCredential cache has no TGTCredential usage type is unknownGSS-API major status code %ld (0x%lx). Incorrect channel bindings were suppliedInvalid field length in tokenKerberos V5 GSS-API mechanismMandatory arguments to long options are mandatory for short options too. Masked calling error %ld (0x%lx) shifted into %ld (0x%lx): Masked routine error %ld (0x%lx) shifted into %ld (0x%lx): Masked supplementary info %ld (0x%lx) shifted into %ld (0x%lx): Message context invalidNo @ in SERVICE-NAME name stringNo context has been establishedNo credentials were supplied, or the credentials were unavailable or inaccessibleNo errorNo error No krb5 errorNo principal in keytab matches desired namePrincipal in credential cache does not match desired nameSTRING-UID-NAME contains nondigitsThe context has expiredThe gss_init_sec_context() or gss_accept_sec_context() function must be called again to complete its functionThe operation is forbidden by local security policyThe operation or option is unavailableThe provided name was not a mechanism nameThe quality-of-protection requested could not be providedThe referenced credentials have expiredThe requested credential element already existsThe token was a duplicate of an earlier tokenThe token's validity period has expiredTry ‘%s --help’ for more information. UID does not resolve to usernameUnknown krb5 errorUnknown quality of protection specifiedUnknown signature type in tokenUnspecified error in underlying mechanismUsage: %s OPTIONS... Validation erroraccepting security context failed (%d/%d)base64 failbase64 input too longcould not acquire server credentials (%d/%d)could not import server name “%s†(%d/%d)displaying status code failed (%d)end of filegetlineindicating mechanisms failed (%d)initializing security context failed (%d/%d)inquiring information about mechanism failed (%d)inquiring mechanism for SASL name (%d/%d)malloc| +-----------------+-----------------+---------------------------------+ Bit 31 24 23 16 15 0 gss-1.0.3/m4/0000755000000000000000000000000012415510375007601 500000000000000gss-1.0.3/m4/lib-ld.m40000644000000000000000000000714312415507605011135 00000000000000# lib-ld.m4 serial 6 dnl Copyright (C) 1996-2003, 2009-2014 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 Subroutines of libtool.m4, dnl with replacements s/_*LT_PATH/AC_LIB_PROG/ and s/lt_/acl_/ to avoid dnl collision with libtool.m4. dnl From libtool-2.4. Sets the variable with_gnu_ld to yes or no. AC_DEFUN([AC_LIB_PROG_LD_GNU], [AC_CACHE_CHECK([if the linker ($LD) is GNU ld], [acl_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 2>&1 \ && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 \ || PATH_SEPARATOR=';' } fi 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([acl_cv_path_LD], [if test -z "$LD"; then acl_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$acl_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then acl_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 `"$acl_cv_path_LD" -v 2>&1 , 1995-2000. dnl Bruno Haible , 2000-2006, 2008-2010. dnl Macro to add for using GNU gettext. dnl Usage: AM_GNU_GETTEXT([INTLSYMBOL], [NEEDSYMBOL], [INTLDIR]). dnl INTLSYMBOL can be one of 'external', 'no-libtool', 'use-libtool'. The dnl default (if it is not specified or empty) is 'no-libtool'. dnl INTLSYMBOL should be 'external' for packages with no intl directory, dnl and 'no-libtool' or 'use-libtool' for packages with an intl directory. dnl If INTLSYMBOL is 'use-libtool', then a libtool library dnl $(top_builddir)/intl/libintl.la will be created (shared and/or static, dnl depending on --{enable,disable}-{shared,static} and on the presence of dnl AM-DISABLE-SHARED). If INTLSYMBOL is 'no-libtool', a static library dnl $(top_builddir)/intl/libintl.a will be created. dnl If NEEDSYMBOL is specified and is 'need-ngettext', then GNU gettext dnl implementations (in libc or libintl) without the ngettext() function dnl will be ignored. If NEEDSYMBOL is specified and is dnl 'need-formatstring-macros', then GNU gettext implementations that don't dnl support the ISO C 99 formatstring macros will be ignored. dnl INTLDIR is used to find the intl libraries. If empty, dnl the value '$(top_builddir)/intl/' is used. dnl dnl The result of the configuration is one of three cases: dnl 1) GNU gettext, as included in the intl subdirectory, will be compiled dnl and used. dnl Catalog format: GNU --> install in $(datadir) dnl Catalog extension: .mo after installation, .gmo in source tree dnl 2) GNU gettext has been found in the system's C library. dnl Catalog format: GNU --> install in $(datadir) dnl Catalog extension: .mo after installation, .gmo in source tree dnl 3) No internationalization, always use English msgid. dnl Catalog format: none dnl Catalog extension: none dnl If INTLSYMBOL is 'external', only cases 2 and 3 can occur. dnl The use of .gmo is historical (it was needed to avoid overwriting the dnl GNU format catalogs when building on a platform with an X/Open gettext), dnl but we keep it in order not to force irrelevant filename changes on the dnl maintainers. dnl AC_DEFUN([AM_GNU_GETTEXT], [ dnl Argument checking. ifelse([$1], [], , [ifelse([$1], [external], , [ifelse([$1], [no-libtool], , [ifelse([$1], [use-libtool], , [errprint([ERROR: invalid first argument to AM_GNU_GETTEXT ])])])])]) ifelse(ifelse([$1], [], [old])[]ifelse([$1], [no-libtool], [old]), [old], [AC_DIAGNOSE([obsolete], [Use of AM_GNU_GETTEXT without [external] argument is deprecated.])]) ifelse([$2], [], , [ifelse([$2], [need-ngettext], , [ifelse([$2], [need-formatstring-macros], , [errprint([ERROR: invalid second argument to AM_GNU_GETTEXT ])])])]) define([gt_included_intl], ifelse([$1], [external], ifdef([AM_GNU_GETTEXT_][INTL_SUBDIR], [yes], [no]), [yes])) define([gt_libtool_suffix_prefix], ifelse([$1], [use-libtool], [l], [])) gt_NEEDS_INIT AM_GNU_GETTEXT_NEED([$2]) AC_REQUIRE([AM_PO_SUBDIRS])dnl ifelse(gt_included_intl, yes, [ AC_REQUIRE([AM_INTL_SUBDIR])dnl ]) dnl Prerequisites of AC_LIB_LINKFLAGS_BODY. AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) AC_REQUIRE([AC_LIB_RPATH]) dnl Sometimes libintl requires libiconv, so first search for libiconv. dnl Ideally we would do this search only after the dnl if test "$USE_NLS" = "yes"; then dnl if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" != "yes"; }; then dnl tests. But if configure.in invokes AM_ICONV after AM_GNU_GETTEXT dnl the configure script would need to contain the same shell code dnl again, outside any 'if'. There are two solutions: dnl - Invoke AM_ICONV_LINKFLAGS_BODY here, outside any 'if'. dnl - Control the expansions in more detail using AC_PROVIDE_IFELSE. dnl Since AC_PROVIDE_IFELSE is only in autoconf >= 2.52 and not dnl documented, we avoid it. ifelse(gt_included_intl, yes, , [ AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY]) ]) dnl Sometimes, on Mac OS X, libintl requires linking with CoreFoundation. gt_INTL_MACOSX dnl Set USE_NLS. AC_REQUIRE([AM_NLS]) ifelse(gt_included_intl, yes, [ BUILD_INCLUDED_LIBINTL=no USE_INCLUDED_LIBINTL=no ]) LIBINTL= LTLIBINTL= POSUB= dnl Add a version number to the cache macros. case " $gt_needs " in *" need-formatstring-macros "*) gt_api_version=3 ;; *" need-ngettext "*) gt_api_version=2 ;; *) gt_api_version=1 ;; esac gt_func_gnugettext_libc="gt_cv_func_gnugettext${gt_api_version}_libc" gt_func_gnugettext_libintl="gt_cv_func_gnugettext${gt_api_version}_libintl" dnl If we use NLS figure out what method if test "$USE_NLS" = "yes"; then gt_use_preinstalled_gnugettext=no ifelse(gt_included_intl, yes, [ AC_MSG_CHECKING([whether included gettext is requested]) AC_ARG_WITH([included-gettext], [ --with-included-gettext use the GNU gettext library included here], nls_cv_force_use_gnu_gettext=$withval, nls_cv_force_use_gnu_gettext=no) AC_MSG_RESULT([$nls_cv_force_use_gnu_gettext]) nls_cv_use_gnu_gettext="$nls_cv_force_use_gnu_gettext" if test "$nls_cv_force_use_gnu_gettext" != "yes"; then ]) dnl User does not insist on using GNU NLS library. Figure out what dnl to use. If GNU gettext is available we use this. Else we have dnl to fall back to GNU NLS library. if test $gt_api_version -ge 3; then gt_revision_test_code=' #ifndef __GNU_GETTEXT_SUPPORTED_REVISION #define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1) #endif changequote(,)dnl typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1]; changequote([,])dnl ' else gt_revision_test_code= fi if test $gt_api_version -ge 2; then gt_expression_test_code=' + * ngettext ("", "", 0)' else gt_expression_test_code= fi AC_CACHE_CHECK([for GNU gettext in libc], [$gt_func_gnugettext_libc], [AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[ #include $gt_revision_test_code extern int _nl_msg_cat_cntr; extern int *_nl_domain_bindings; ]], [[ bindtextdomain ("", ""); return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_domain_bindings ]])], [eval "$gt_func_gnugettext_libc=yes"], [eval "$gt_func_gnugettext_libc=no"])]) if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" != "yes"; }; then dnl Sometimes libintl requires libiconv, so first search for libiconv. ifelse(gt_included_intl, yes, , [ AM_ICONV_LINK ]) dnl Search for libintl and define LIBINTL, LTLIBINTL and INCINTL dnl accordingly. Don't use AC_LIB_LINKFLAGS_BODY([intl],[iconv]) dnl because that would add "-liconv" to LIBINTL and LTLIBINTL dnl even if libiconv doesn't exist. AC_LIB_LINKFLAGS_BODY([intl]) AC_CACHE_CHECK([for GNU gettext in libintl], [$gt_func_gnugettext_libintl], [gt_save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$CPPFLAGS $INCINTL" gt_save_LIBS="$LIBS" LIBS="$LIBS $LIBINTL" dnl Now see whether libintl exists and does not depend on libiconv. AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[ #include $gt_revision_test_code extern int _nl_msg_cat_cntr; extern #ifdef __cplusplus "C" #endif const char *_nl_expand_alias (const char *); ]], [[ bindtextdomain ("", ""); return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_expand_alias ("") ]])], [eval "$gt_func_gnugettext_libintl=yes"], [eval "$gt_func_gnugettext_libintl=no"]) dnl Now see whether libintl exists and depends on libiconv. if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" != yes; } && test -n "$LIBICONV"; then LIBS="$LIBS $LIBICONV" AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[ #include $gt_revision_test_code extern int _nl_msg_cat_cntr; extern #ifdef __cplusplus "C" #endif const char *_nl_expand_alias (const char *); ]], [[ bindtextdomain ("", ""); return * gettext ("")$gt_expression_test_code + _nl_msg_cat_cntr + *_nl_expand_alias ("") ]])], [LIBINTL="$LIBINTL $LIBICONV" LTLIBINTL="$LTLIBINTL $LTLIBICONV" eval "$gt_func_gnugettext_libintl=yes" ]) fi CPPFLAGS="$gt_save_CPPFLAGS" LIBS="$gt_save_LIBS"]) fi dnl If an already present or preinstalled GNU gettext() is found, dnl use it. But if this macro is used in GNU gettext, and GNU dnl gettext is already preinstalled in libintl, we update this dnl libintl. (Cf. the install rule in intl/Makefile.in.) if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" = "yes"; } \ || { { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; } \ && test "$PACKAGE" != gettext-runtime \ && test "$PACKAGE" != gettext-tools; }; then gt_use_preinstalled_gnugettext=yes else dnl Reset the values set by searching for libintl. LIBINTL= LTLIBINTL= INCINTL= fi ifelse(gt_included_intl, yes, [ if test "$gt_use_preinstalled_gnugettext" != "yes"; then dnl GNU gettext is not found in the C library. dnl Fall back on included GNU gettext library. nls_cv_use_gnu_gettext=yes fi fi if test "$nls_cv_use_gnu_gettext" = "yes"; then dnl Mark actions used to generate GNU NLS library. BUILD_INCLUDED_LIBINTL=yes USE_INCLUDED_LIBINTL=yes LIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.[]gt_libtool_suffix_prefix[]a $LIBICONV $LIBTHREAD" LTLIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.[]gt_libtool_suffix_prefix[]a $LTLIBICONV $LTLIBTHREAD" LIBS=`echo " $LIBS " | sed -e 's/ -lintl / /' -e 's/^ //' -e 's/ $//'` fi CATOBJEXT= if test "$gt_use_preinstalled_gnugettext" = "yes" \ || test "$nls_cv_use_gnu_gettext" = "yes"; then dnl Mark actions to use GNU gettext tools. CATOBJEXT=.gmo fi ]) if test -n "$INTL_MACOSX_LIBS"; then if test "$gt_use_preinstalled_gnugettext" = "yes" \ || test "$nls_cv_use_gnu_gettext" = "yes"; then dnl Some extra flags are needed during linking. LIBINTL="$LIBINTL $INTL_MACOSX_LIBS" LTLIBINTL="$LTLIBINTL $INTL_MACOSX_LIBS" fi fi if test "$gt_use_preinstalled_gnugettext" = "yes" \ || test "$nls_cv_use_gnu_gettext" = "yes"; then AC_DEFINE([ENABLE_NLS], [1], [Define to 1 if translation of program messages to the user's native language is requested.]) else USE_NLS=no fi fi AC_MSG_CHECKING([whether to use NLS]) AC_MSG_RESULT([$USE_NLS]) if test "$USE_NLS" = "yes"; then AC_MSG_CHECKING([where the gettext function comes from]) if test "$gt_use_preinstalled_gnugettext" = "yes"; then if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then gt_source="external libintl" else gt_source="libc" fi else gt_source="included intl directory" fi AC_MSG_RESULT([$gt_source]) fi if test "$USE_NLS" = "yes"; then if test "$gt_use_preinstalled_gnugettext" = "yes"; then if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then AC_MSG_CHECKING([how to link with libintl]) AC_MSG_RESULT([$LIBINTL]) AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCINTL]) fi dnl For backward compatibility. Some packages may be using this. AC_DEFINE([HAVE_GETTEXT], [1], [Define if the GNU gettext() function is already present or preinstalled.]) AC_DEFINE([HAVE_DCGETTEXT], [1], [Define if the GNU dcgettext() function is already present or preinstalled.]) fi dnl We need to process the po/ directory. POSUB=po fi ifelse(gt_included_intl, yes, [ dnl If this is used in GNU gettext we have to set BUILD_INCLUDED_LIBINTL dnl to 'yes' because some of the testsuite requires it. if test "$PACKAGE" = gettext-runtime || test "$PACKAGE" = gettext-tools; then BUILD_INCLUDED_LIBINTL=yes fi dnl Make all variables we use known to autoconf. AC_SUBST([BUILD_INCLUDED_LIBINTL]) AC_SUBST([USE_INCLUDED_LIBINTL]) AC_SUBST([CATOBJEXT]) dnl For backward compatibility. Some configure.ins may be using this. nls_cv_header_intl= nls_cv_header_libgt= dnl For backward compatibility. Some Makefiles may be using this. DATADIRNAME=share AC_SUBST([DATADIRNAME]) dnl For backward compatibility. Some Makefiles may be using this. INSTOBJEXT=.mo AC_SUBST([INSTOBJEXT]) dnl For backward compatibility. Some Makefiles may be using this. GENCAT=gencat AC_SUBST([GENCAT]) dnl For backward compatibility. Some Makefiles may be using this. INTLOBJS= if test "$USE_INCLUDED_LIBINTL" = yes; then INTLOBJS="\$(GETTOBJS)" fi AC_SUBST([INTLOBJS]) dnl Enable libtool support if the surrounding package wishes it. INTL_LIBTOOL_SUFFIX_PREFIX=gt_libtool_suffix_prefix AC_SUBST([INTL_LIBTOOL_SUFFIX_PREFIX]) ]) dnl For backward compatibility. Some Makefiles may be using this. INTLLIBS="$LIBINTL" AC_SUBST([INTLLIBS]) dnl Make all documented variables known to autoconf. AC_SUBST([LIBINTL]) AC_SUBST([LTLIBINTL]) AC_SUBST([POSUB]) ]) dnl gt_NEEDS_INIT ensures that the gt_needs variable is initialized. m4_define([gt_NEEDS_INIT], [ m4_divert_text([DEFAULTS], [gt_needs=]) m4_define([gt_NEEDS_INIT], []) ]) dnl Usage: AM_GNU_GETTEXT_NEED([NEEDSYMBOL]) AC_DEFUN([AM_GNU_GETTEXT_NEED], [ m4_divert_text([INIT_PREPARE], [gt_needs="$gt_needs $1"]) ]) dnl Usage: AM_GNU_GETTEXT_VERSION([gettext-version]) AC_DEFUN([AM_GNU_GETTEXT_VERSION], []) gss-1.0.3/m4/extern-inline.m40000644000000000000000000000670712415507605012560 00000000000000dnl 'extern inline' a la ISO C99. dnl Copyright 2012-2014 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_EXTERN_INLINE], [ AH_VERBATIM([extern_inline], [/* Please see the Gnulib manual for how to use these macros. Suppress extern inline with HP-UX cc, as it appears to be broken; see . Suppress extern inline with Sun C in standards-conformance mode, as it mishandles inline functions that call each other. E.g., for 'inline void f (void) { } inline void g (void) { f (); }', c99 incorrectly complains 'reference to static identifier "f" in extern inline function'. This bug was observed with Sun C 5.12 SunOS_i386 2011/11/16. Suppress the use of extern inline on problematic Apple configurations. OS X 10.8 and earlier mishandle it; see, e.g., . OS X 10.9 has a macro __header_inline indicating the bug is fixed for C and for clang but remains for g++; see . Perhaps Apple will fix this some day. */ #if (defined __APPLE__ \ && (defined __header_inline \ ? (defined __cplusplus && defined __GNUC_STDC_INLINE__ \ && ! defined __clang__) \ : ((! defined _DONT_USE_CTYPE_INLINE_ \ && (defined __GNUC__ || defined __cplusplus)) \ || (defined _FORTIFY_SOURCE && 0 < _FORTIFY_SOURCE \ && defined __GNUC__ && ! defined __cplusplus)))) # define _GL_EXTERN_INLINE_APPLE_BUG #endif #if ((__GNUC__ \ ? defined __GNUC_STDC_INLINE__ && __GNUC_STDC_INLINE__ \ : (199901L <= __STDC_VERSION__ \ && !defined __HP_cc \ && !(defined __SUNPRO_C && __STDC__))) \ && !defined _GL_EXTERN_INLINE_APPLE_BUG) # define _GL_INLINE inline # define _GL_EXTERN_INLINE extern inline # define _GL_EXTERN_INLINE_IN_USE #elif (2 < __GNUC__ + (7 <= __GNUC_MINOR__) && !defined __STRICT_ANSI__ \ && !defined _GL_EXTERN_INLINE_APPLE_BUG) # if defined __GNUC_GNU_INLINE__ && __GNUC_GNU_INLINE__ /* __gnu_inline__ suppresses a GCC 4.2 diagnostic. */ # define _GL_INLINE extern inline __attribute__ ((__gnu_inline__)) # else # define _GL_INLINE extern inline # endif # define _GL_EXTERN_INLINE extern # define _GL_EXTERN_INLINE_IN_USE #else # define _GL_INLINE static _GL_UNUSED # define _GL_EXTERN_INLINE static _GL_UNUSED #endif #if 4 < __GNUC__ + (6 <= __GNUC_MINOR__) # if defined __GNUC_STDC_INLINE__ && __GNUC_STDC_INLINE__ # define _GL_INLINE_HEADER_CONST_PRAGMA # else # define _GL_INLINE_HEADER_CONST_PRAGMA \ _Pragma ("GCC diagnostic ignored \"-Wsuggest-attribute=const\"") # endif /* Suppress GCC's bogus "no previous prototype for 'FOO'" and "no previous declaration for 'FOO'" diagnostics, when FOO is an inline function in the header; see . */ # define _GL_INLINE_HEADER_BEGIN \ _Pragma ("GCC diagnostic push") \ _Pragma ("GCC diagnostic ignored \"-Wmissing-prototypes\"") \ _Pragma ("GCC diagnostic ignored \"-Wmissing-declarations\"") \ _GL_INLINE_HEADER_CONST_PRAGMA # define _GL_INLINE_HEADER_END \ _Pragma ("GCC diagnostic pop") #else # define _GL_INLINE_HEADER_BEGIN # define _GL_INLINE_HEADER_END #endif]) ]) gss-1.0.3/m4/pkg.m40000664000000000000000000001214512012453517010546 00000000000000# pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*- # # Copyright © 2004 Scott James Remnant . # # 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 .])], [$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 gss-1.0.3/m4/libtool.m40000644000000000000000000106011112415507612011427 00000000000000# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*- # # Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2003, 2004, 2005, # 2006, 2007, 2008, 2009, 2010, 2011 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, 2009, 2010, 2011 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 57 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_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl 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 _LT_SHELL_INIT([SHELL=${CONFIG_SHELL-/bin/sh}]) 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 "$cc_temp" | $SED "s%.*/%%; 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 AC_REQUIRE([_LT_PREPARE_SED_QUOTE_VARS])dnl AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl _LT_DECL([], [PATH_SEPARATOR], [1], [The PATH separator for the build system])dnl 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_PATH_CONVERSION_FUNCTIONS])dnl m4_require([_LT_CMD_RELOAD])dnl m4_require([_LT_CHECK_MAGIC_METHOD])dnl m4_require([_LT_CHECK_SHAREDLIB_FROM_LINKLIB])dnl m4_require([_LT_CMD_OLD_ARCHIVE])dnl m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl m4_require([_LT_WITH_SYSROOT])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 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 # 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_PREPARE_SED_QUOTE_VARS # -------------------------- # Define a few sed substitution that help us do robust quoting. m4_defun([_LT_PREPARE_SED_QUOTE_VARS], [# Backslashify 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' ]) # _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 "$][$1" | $SED "$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: # # ='`$ECHO "$" | $SED "$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' # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF \$[]1 _LTECHO_EOF' } # Quote evaled strings. for var in lt_decl_all_varnames([[ \ ]], lt_decl_quote_varnames); do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[[\\\\\\\`\\"\\\$]]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$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 \\\\""\\\\\$\$var"\\\\"\` in *[[\\\\\\\`\\"\\\$]]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done _LT_OUTPUT_LIBTOOL_INIT ]) # _LT_GENERATED_FILE_INIT(FILE, [COMMENT]) # ------------------------------------ # Generate a child script FILE with all initialization necessary to # reuse the environment learned by the parent script, and make the # file executable. If COMMENT is supplied, it is inserted after the # `#!' sequence but before initialization text begins. After this # macro, additional text can be appended to FILE to form the body of # the child script. The macro ends with non-zero status if the # file could not be fully written (such as if the disk is full). m4_ifdef([AS_INIT_GENERATED], [m4_defun([_LT_GENERATED_FILE_INIT],[AS_INIT_GENERATED($@)])], [m4_defun([_LT_GENERATED_FILE_INIT], [m4_require([AS_PREPARE])]dnl [m4_pushdef([AS_MESSAGE_LOG_FD])]dnl [lt_write_fail=0 cat >$1 <<_ASEOF || lt_write_fail=1 #! $SHELL # Generated by $as_me. $2 SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$1 <<\_ASEOF || lt_write_fail=1 AS_SHELL_SANITIZE _AS_PREPARE exec AS_MESSAGE_FD>&1 _ASEOF test $lt_write_fail = 0 && chmod +x $1[]dnl m4_popdef([AS_MESSAGE_LOG_FD])])])# _LT_GENERATED_FILE_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]) _LT_GENERATED_FILE_INIT(["$CONFIG_LT"], [# Run this file to recreate a libtool stub with the current configuration.]) cat >>"$CONFIG_LT" <<\_LTEOF lt_cl_silent=false 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 ." 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) 2011 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. 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) ])# 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 '$q' "$ltmain" >> "$cfgfile" \ || (rm -f "$cfgfile"; exit 1) _LT_PROG_REPLACE_SHELLFNS 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)], [Go], [_LT_LANG(GO)], [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 m4_ifndef([AC_PROG_GO], [ ############################################################ # NOTE: This macro has been submitted for inclusion into # # GNU Autoconf as AC_PROG_GO. When it is available in # # a released version of Autoconf we should remove this # # macro and use it instead. # ############################################################ m4_defun([AC_PROG_GO], [AC_LANG_PUSH(Go)dnl AC_ARG_VAR([GOC], [Go compiler command])dnl AC_ARG_VAR([GOFLAGS], [Go compiler flags])dnl _AC_ARG_VAR_LDFLAGS()dnl AC_CHECK_TOOL(GOC, gccgo) if test -z "$GOC"; then if test -n "$ac_tool_prefix"; then AC_CHECK_PROG(GOC, [${ac_tool_prefix}gccgo], [${ac_tool_prefix}gccgo]) fi fi if test -z "$GOC"; then AC_CHECK_PROG(GOC, gccgo, gccgo, false) fi ])#m4_defun ])#m4_ifndef # _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([AC_PROG_GO], [LT_LANG(GO)], [m4_define([AC_PROG_GO], defn([AC_PROG_GO])[LT_LANG(GO)])]) 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)]) AU_DEFUN([AC_LIBTOOL_RC], [LT_LANG(Windows Resource)]) 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], []) dnl AC_DEFUN([AC_LIBTOOL_RC], []) # _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 there is a non-empty error log, and "single_module" # appears in it, assume the flag caused a linker warning if test -s conftest.err && $GREP single_module conftest.err; then cat conftest.err >&AS_MESSAGE_LOG_FD # Otherwise, if the output was created with a 0 exit code from # the compiler, it worked. elif test -f libconftest.dylib && test $_lt_result -eq 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" ]) AC_CACHE_CHECK([for -force_load linker flag],[lt_cv_ld_force_load], [lt_cv_ld_force_load=no cat > conftest.c << _LT_EOF int forced_loaded() { return 2;} _LT_EOF echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&AS_MESSAGE_LOG_FD $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&AS_MESSAGE_LOG_FD echo "$AR cru libconftest.a conftest.o" >&AS_MESSAGE_LOG_FD $AR cru libconftest.a conftest.o 2>&AS_MESSAGE_LOG_FD echo "$RANLIB libconftest.a" >&AS_MESSAGE_LOG_FD $RANLIB libconftest.a 2>&AS_MESSAGE_LOG_FD cat > conftest.c << _LT_EOF int main() { return 0;} _LT_EOF echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&AS_MESSAGE_LOG_FD $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err _lt_result=$? if test -s conftest.err && $GREP force_load conftest.err; then cat conftest.err >&AS_MESSAGE_LOG_FD elif test -f conftest && test $_lt_result -eq 0 && $GREP forced_load conftest >/dev/null 2>&1 ; then lt_cv_ld_force_load=yes else cat conftest.err >&AS_MESSAGE_LOG_FD fi rm -f conftest.err libconftest.a conftest conftest.c rm -rf conftest.dSYM ]) 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" != ":" && test "$lt_cv_ld_force_load" = "no"; then _lt_dsymutil='~$DSYMUTIL $lib || :' else _lt_dsymutil= fi ;; esac ]) # _LT_DARWIN_LINKER_FEATURES([TAG]) # --------------------------------- # 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 if test "$lt_cv_ld_force_load" = "yes"; then _LT_TAGVAR(whole_archive_flag_spec, $1)='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience ${wl}-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' m4_case([$1], [F77], [_LT_TAGVAR(compiler_needs_object, $1)=yes], [FC], [_LT_TAGVAR(compiler_needs_object, $1)=yes]) else _LT_TAGVAR(whole_archive_flag_spec, $1)='' fi _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=func_echo_all _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([TAGNAME]) # ---------------------------------- # 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. # Store the results from the different compilers for each TAGNAME. # Allow to override them for all tags through lt_cv_aix_libpath. m4_defun([_LT_SYS_MODULE_PATH_AIX], [m4_require([_LT_DECL_SED])dnl if test "${lt_cv_aix_libpath+set}" = set; then aix_libpath=$lt_cv_aix_libpath else AC_CACHE_VAL([_LT_TAGVAR([lt_cv_aix_libpath_], [$1])], [AC_LINK_IFELSE([AC_LANG_PROGRAM],[ lt_aix_libpath_sed='[ /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }]' _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`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 "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi],[]) if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then _LT_TAGVAR([lt_cv_aix_libpath_], [$1])="/usr/lib:/lib" fi ]) aix_libpath=$_LT_TAGVAR([lt_cv_aix_libpath_], [$1]) fi ])# _LT_SYS_MODULE_PATH_AIX # _LT_SHELL_INIT(ARG) # ------------------- m4_define([_LT_SHELL_INIT], [m4_divert_text([M4SH-INIT], [$1 ])])# _LT_SHELL_INIT # _LT_PROG_ECHO_BACKSLASH # ----------------------- # Find how we can fake an echo command that does not interpret backslash. # In particular, with Autoconf 2.60 or later we add some code to the start # of the generated configure script which will find a shell with a builtin # printf (which we can use as an echo command). m4_defun([_LT_PROG_ECHO_BACKSLASH], [ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO AC_MSG_CHECKING([how to print strings]) # Test print first, because it will be a builtin if present. if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='print -r --' elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='printf %s\n' else # Use this function as a fallback that always works. func_fallback_echo () { eval 'cat <<_LTECHO_EOF $[]1 _LTECHO_EOF' } ECHO='func_fallback_echo' fi # func_echo_all arg... # Invoke $ECHO with all args, space-separated. func_echo_all () { $ECHO "$*" } case "$ECHO" in printf*) AC_MSG_RESULT([printf]) ;; print*) AC_MSG_RESULT([print -r]) ;; *) AC_MSG_RESULT([cat]) ;; esac m4_ifdef([_AS_DETECT_SUGGESTED], [_AS_DETECT_SUGGESTED([ test -n "${ZSH_VERSION+set}${BASH_VERSION+set}" || ( ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO PATH=/empty FPATH=/empty; export PATH FPATH test "X`printf %s $ECHO`" = "X$ECHO" \ || test "X`print -r -- $ECHO`" = "X$ECHO" )])]) _LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts]) _LT_DECL([], [ECHO], [1], [An echo program that protects backslashes]) ])# _LT_PROG_ECHO_BACKSLASH # _LT_WITH_SYSROOT # ---------------- AC_DEFUN([_LT_WITH_SYSROOT], [AC_MSG_CHECKING([for sysroot]) AC_ARG_WITH([sysroot], [ --with-sysroot[=DIR] Search for dependent libraries within DIR (or the compiler's sysroot if not specified).], [], [with_sysroot=no]) dnl lt_sysroot will always be passed unquoted. We quote it here dnl in case the user passed a directory name. lt_sysroot= case ${with_sysroot} in #( yes) if test "$GCC" = yes; then lt_sysroot=`$CC --print-sysroot 2>/dev/null` fi ;; #( /*) lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` ;; #( no|'') ;; #( *) AC_MSG_RESULT([${with_sysroot}]) AC_MSG_ERROR([The sysroot must be an absolute path.]) ;; esac AC_MSG_RESULT([${lt_sysroot:-no}]) _LT_DECL([], [lt_sysroot], [0], [The root where to search for ]dnl [dependent libraries, and in which our libraries should be installed.])]) # _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 '$LINENO' "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*|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*) case `/usr/bin/file conftest.o` in *x86-64*) LD="${LD-ld} -m elf32_x86_64" ;; *) LD="${LD-ld} -m elf_i386" ;; esac ;; powerpc64le-*) LD="${LD-ld} -m elf32lppclinux" ;; powerpc64-*) 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" ;; powerpcle-*) LD="${LD-ld} -m elf64lppc" ;; powerpc-*) 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 ;; *-*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*) case $host in i?86-*-solaris*) LD="${LD-ld} -m elf_x86_64" ;; sparc*-*-solaris*) LD="${LD-ld} -m elf64_sparc" ;; esac # GNU ld 2.21 introduced _sol2 emulations. Use them if available. if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then LD="${LD-ld}_sol2" fi ;; *) 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_PROG_AR # ----------- m4_defun([_LT_PROG_AR], [AC_CHECK_TOOLS(AR, [ar], false) : ${AR=ar} : ${AR_FLAGS=cru} _LT_DECL([], [AR], [1], [The archiver]) _LT_DECL([], [AR_FLAGS], [1], [Flags to create an archive]) AC_CACHE_CHECK([for archiver @FILE support], [lt_cv_ar_at_file], [lt_cv_ar_at_file=no AC_COMPILE_IFELSE([AC_LANG_PROGRAM], [echo conftest.$ac_objext > conftest.lst lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&AS_MESSAGE_LOG_FD' AC_TRY_EVAL([lt_ar_try]) if test "$ac_status" -eq 0; then # Ensure the archiver fails upon bogus file names. rm -f conftest.$ac_objext libconftest.a AC_TRY_EVAL([lt_ar_try]) if test "$ac_status" -ne 0; then lt_cv_ar_at_file=@ fi fi rm -f conftest.* libconftest.a ]) ]) if test "x$lt_cv_ar_at_file" = xno; then archiver_list_spec= else archiver_list_spec=$lt_cv_ar_at_file fi _LT_DECL([], [archiver_list_spec], [1], [How to feed a file listing to the archiver]) ])# _LT_PROG_AR # _LT_CMD_OLD_ARCHIVE # ------------------- m4_defun([_LT_CMD_OLD_ARCHIVE], [_LT_PROG_AR 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 \$tool_oldlib" ;; *) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib" ;; esac old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib" fi case $host_os in darwin*) lock_old_archive_extraction=yes ;; *) lock_old_archive_extraction=no ;; esac _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_DECL([], [lock_old_archive_extraction], [0], [Whether to use a lock for old archive extraction]) ])# _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:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&AS_MESSAGE_LOG_FD echo "$as_me:$LINENO: \$? = $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 "$_lt_compiler_boilerplate" | $SED '/^$/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 "$_lt_linker_boilerplate" | $SED '/^$/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; ;; mint*) # On MiNT this can take a long time and run out of memory. 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 ;; os2*) # The test takes a long time on OS/2. lt_cv_sys_max_cmd_len=8192 ;; 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" && \ test undefined != "$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"`env echo "$teststring$teststring" 2>/dev/null` \ = "X$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 $LINENO "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include #endif #include #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 /* When -fvisbility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ #if defined(__GNUC__) && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) int fnord () __attribute__((visibility("default"))); #endif int fnord () { return 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; else puts (dlerror ()); } /* 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:$LINENO: $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:$LINENO: \$? = $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 "$_lt_compiler_boilerplate" | $SED '/^$/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 m4_require([_LT_CHECK_SHELL_FEATURES])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 case $host_os in mingw* | cegcc*) lt_sed_strip_eq="s,=\([[A-Za-z]]:\),\1,g" ;; *) lt_sed_strip_eq="s,=/,/,g" ;; esac lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` case $lt_search_path_spec in *\;*) # 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 's/;/ /g'` ;; *) lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` ;; esac # 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; } }'` # AWK program above erroneously prepends '/' to C:/dos/paths # for these hosts. case $host_os in mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ $SED 's,/\([[A-Za-z]]:\),\1,g'` ;; esac sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` 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 # correct to gnu/linux during the next big refactor 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 # correct to gnu/linux during the next big refactor 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.so # instead of lib.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=`func_echo_all "$lib" | $SED '\''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 # correct to gnu/linux during the next big refactor 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,$cc_basename in yes,*) # gcc 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}' m4_if([$1], [],[ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"]) ;; mingw* | cegcc*) # MinGW DLLs use traditional 'lib' prefix soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' ;; 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 dynamic_linker='Win32 ld.exe' ;; *,cl*) # Native MSVC libname_spec='$name' soname_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext}' library_names_spec='${libname}.dll.lib' case $build_os in mingw*) sys_lib_search_path_spec= lt_save_ifs=$IFS IFS=';' for lt_path in $LIB do IFS=$lt_save_ifs # Let DOS variable expansion print the short 8.3 style file name. lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" done IFS=$lt_save_ifs # Convert to MSYS style. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([[a-zA-Z]]\\):| /\\1|g' -e 's|^ ||'` ;; cygwin*) # Convert to unix form, then to dos form, then back to unix form # but this time dos style (no spaces!) so that the unix form looks # like /cygdrive/c/PROGRA~1:/cygdr... sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` ;; *) sys_lib_search_path_spec="$LIB" if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then # It is most probably a Windows format PATH. 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 # FIXME: find the short name or the path components, as spaces are # common. (e.g. "Program Files" -> "PROGRA~1") ;; esac # 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' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes dynamic_linker='Win32 link.exe' ;; *) # Assume MSVC wrapper library_names_spec='${libname}`echo ${release} | $SED -e 's/[[.]]/-/g'`${versuffix}${shared_ext} $libname.lib' dynamic_linker='Win32 ld.exe' ;; esac # 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 # correct to gnu/linux during the next big refactor 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 ;; 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[[23]].*) 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 ;; haiku*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no dynamic_linker="$host_os runtime_loader" 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=LIBRARY_PATH shlibpath_overrides_runpath=yes sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' 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' # or fails outright, so override atomically: install_override_mode=555 ;; interix[[3-9]]*) version_type=linux # correct to gnu/linux during the next big refactor 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 # correct to gnu/linux during the next big refactor 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 glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) version_type=linux # correct to gnu/linux during the next big refactor 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 AC_CACHE_VAL([lt_cv_shlibpath_overrides_runpath], [lt_cv_shlibpath_overrides_runpath=no 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], [lt_cv_shlibpath_overrides_runpath=yes])]) LDFLAGS=$save_LDFLAGS libdir=$save_libdir ]) shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath # 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;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 # correct to gnu/linux during the next big refactor 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 # correct to gnu/linux during the next big refactor 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 # correct to gnu/linux during the next big refactor 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 # correct to gnu/linux during the next big refactor 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 # correct to gnu/linux during the next big refactor 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 # correct to gnu/linux during the next big refactor 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([], [install_override_mode], [1], [Permission mode override for installation of shared libraries]) _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 m4_require([_LT_PROG_ECHO_BACKSLASH])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 &1 /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 # Keep this pattern in sync with the one in func_win32_libid. lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' 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 ;; haiku*) 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])(-bit)?( [LM]SB)? 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 glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu | 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_glob= want_nocaseglob=no if test "$build" = "$host"; then case $host_os in mingw* | pw32*) if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then want_nocaseglob=yes else file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[[\1]]\/[[\1]]\/g;/g"` fi ;; esac fi 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_DECL([], [file_magic_glob], [1], [How to find potential files when deplibs_check_method = "file_magic"]) _LT_DECL([], [want_nocaseglob], [1], [Find potential files using nocaseglob 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. if test -n "$DUMPBIN"; then : # Let the user override the test. else AC_CHECK_TOOLS(DUMPBIN, [dumpbin "link -dump"], :) case `$DUMPBIN -symbols /dev/null 2>&1 | sed '1q'` in *COFF*) DUMPBIN="$DUMPBIN -symbols" ;; *) DUMPBIN=: ;; esac fi 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:$LINENO: $ac_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$ac_compile" 2>conftest.err) cat conftest.err >&AS_MESSAGE_LOG_FD (eval echo "\"\$as_me:$LINENO: $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:$LINENO: 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_CHECK_SHAREDLIB_FROM_LINKLIB # -------------------------------- # how to determine the name of the shared library # associated with a specific link library. # -- PORTME fill in with the dynamic library characteristics m4_defun([_LT_CHECK_SHAREDLIB_FROM_LINKLIB], [m4_require([_LT_DECL_EGREP]) m4_require([_LT_DECL_OBJDUMP]) m4_require([_LT_DECL_DLLTOOL]) AC_CACHE_CHECK([how to associate runtime and link libraries], lt_cv_sharedlib_from_linklib_cmd, [lt_cv_sharedlib_from_linklib_cmd='unknown' case $host_os in cygwin* | mingw* | pw32* | cegcc*) # two different shell functions defined in ltmain.sh # decide which to use based on capabilities of $DLLTOOL case `$DLLTOOL --help 2>&1` in *--identify-strict*) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib ;; *) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback ;; esac ;; *) # fallback: assume linklib IS sharedlib lt_cv_sharedlib_from_linklib_cmd="$ECHO" ;; esac ]) sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO _LT_DECL([], [sharedlib_from_linklib_cmd], [1], [Command to associate shared and link libraries]) ])# _LT_CHECK_SHAREDLIB_FROM_LINKLIB # _LT_PATH_MANIFEST_TOOL # ---------------------- # locate the manifest tool m4_defun([_LT_PATH_MANIFEST_TOOL], [AC_CHECK_TOOL(MANIFEST_TOOL, mt, :) test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt AC_CACHE_CHECK([if $MANIFEST_TOOL is a manifest tool], [lt_cv_path_mainfest_tool], [lt_cv_path_mainfest_tool=no echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&AS_MESSAGE_LOG_FD $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out cat conftest.err >&AS_MESSAGE_LOG_FD if $GREP 'Manifest Tool' conftest.out > /dev/null; then lt_cv_path_mainfest_tool=yes fi rm -f conftest*]) if test "x$lt_cv_path_mainfest_tool" != xyes; then MANIFEST_TOOL=: fi _LT_DECL([], [MANIFEST_TOOL], [1], [Manifest tool])dnl ])# _LT_PATH_MANIFEST_TOOL # LT_LIB_M # -------- # check for math library AC_DEFUN([LT_LIB_M], [AC_REQUIRE([AC_CANONICAL_HOST])dnl LIBM= case $host in *-*-beos* | *-*-cegcc* | *-*-cygwin* | *-*-haiku* | *-*-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 case $cc_basename in nvcc*) _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -Xcompiler -fno-builtin' ;; *) _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' ;; esac _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([AC_PROG_AWK])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};"\ " /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\ " /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 lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" # 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 /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ #if defined(_WIN32) || defined(__CYGWIN__) || defined(_WIN32_WCE) /* DATA imports from DLLs on WIN32 con't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */ # define LT@&t@_DLSYM_CONST #elif defined(__osf__) /* This system does not cope well with relocations in const data. */ # define LT@&t@_DLSYM_CONST #else # define LT@&t@_DLSYM_CONST const #endif #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. */ LT@&t@_DLSYM_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_globsym_save_LIBS=$LIBS lt_globsym_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_globsym_save_LIBS CFLAGS=$lt_globsym_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 # Response file support. if test "$lt_cv_nm_interface" = "MS dumpbin"; then nm_file_list_spec='@' elif $NM --help 2>/dev/null | grep '[[@]]FILE' >/dev/null; then nm_file_list_spec='@' 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_DECL([], [nm_file_list_spec], [1], [Specify filename containing input files for $NM]) ]) # _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)= 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)= ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. _LT_TAGVAR(lt_prog_compiler_static, $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 ;; 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). m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; 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 | 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* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL 8.0, 9.0 on PPC and BlueGene _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* | sunCC*) # 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' ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. _LT_TAGVAR(lt_prog_compiler_static, $1)= ;; 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 case $cc_basename in nvcc*) # Cuda Compiler Driver 2.2 _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Xlinker ' if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then _LT_TAGVAR(lt_prog_compiler_pic, $1)="-Xcompiler $_LT_TAGVAR(lt_prog_compiler_pic, $1)" fi ;; 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 | 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' ;; nagfor*) # NAG Fortran compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,-Wl,,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) # 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* | bgxl* | bgf* | mpixl*) # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene _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\ Ceres\ Fortran* | *Sun*Fortran*\ [[1-7]].* | *Sun*Fortran*\ 8.[[0-3]]*) # 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)='' ;; *Sun\ F* | *Sun*Fortran*) _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 ' ;; *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,' ;; *Intel*\ [[CF]]*Compiler*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; *Portland\ Group*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; 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* | sunf77* | sunf90* | sunf95*) _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_CACHE_CHECK([for $compiler option to produce PIC], [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)], [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_prog_compiler_pic, $1)]) _LT_TAGVAR(lt_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_cv_prog_compiler_pic, $1) # # 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]) _LT_TAGDECL([wl], [lt_prog_compiler_wl], [1], [How to pass a linker flag through the compiler]) # # 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_PATH_MANIFEST_TOOL])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' _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] 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 # Also, AIX nm treats weak defined symbols like other global defined # symbols, whereas GNU nm marks them as "W". 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") || (\$ 2 == "W")) && ([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*) case $cc_basename in cl*) _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' ;; *) _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] ;; esac ;; linux* | k*bsd*-gnu | 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 ], [ 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_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 | gnu*) _LT_TAGVAR(link_all_deplibs, $1)=no ;; esac _LT_TAGVAR(ld_shlibs, $1)=yes # On some targets, GNU ld is compatible enough with the native linker # that we're better off using the native interface for both. lt_use_gnu_ld_interface=no if test "$with_gnu_ld" = yes; then case $host_os in aix*) # The AIX port of GNU ld has always aspired to compatibility # with the native linker. However, as the warning in the GNU ld # block says, versions before 2.19.5* couldn't really create working # shared libraries, regardless of the interface used. case `$LD -v 2>&1` in *\ \(GNU\ Binutils\)\ 2.19.5*) ;; *\ \(GNU\ Binutils\)\ 2.[[2-9]]*) ;; *\ \(GNU\ Binutils\)\ [[3-9]]*) ;; *) lt_use_gnu_ld_interface=yes ;; esac ;; *) lt_use_gnu_ld_interface=yes ;; esac fi if test "$lt_use_gnu_ld_interface" = 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.19, 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 install binutils *** 2.20 or above, or modify your PATH so that a non-GNU linker is found. *** You will then need to restart the configuration process. _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 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(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols' _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/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] 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 ;; haiku*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(link_all_deplibs, $1)=yes ;; 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=' $pic_flag' 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; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' tmp_addflag=' $pic_flag' ;; pgf77* | pgf90* | pgf95* | pgfortran*) # 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; func_echo_all \"$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]]* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL C 8.0 on PPC (deal with xlf below) tmp_sharedflag='-qmkshrobj' tmp_addflag= ;; nvcc*) # Cuda Compiler Driver 2.2 _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` ${wl}--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes ;; 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; func_echo_all \"$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* | bgf* | bgxlf* | mpixlf*) # 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)='${wl}-rpath ${wl}$libdir' _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_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 $linker_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 $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $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 $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $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 $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $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 # Also, AIX nm treats weak defined symbols like other global # defined symbols, whereas GNU nm marks them as "W". 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") || (\$ 2 == "W")) && ([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([$1]) _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 func_echo_all "${wl}${allow_undefined_flag}"; 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([$1]) _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' if test "$with_gnu_ld" = yes; then # We only use this code for GNU lds that support --whole-archive. _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' fi _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. case $cc_basename in cl*) # Native MSVC _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=yes _LT_TAGVAR(file_list_spec, $1)='@' # 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 $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then sed -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; else sed -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' _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' # Don't use ranlib _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile="$lt_outputfile.exe" lt_tool_outputfile="$lt_tool_outputfile.exe" ;; esac~ if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # Assume MSVC wrapper _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 `func_echo_all "$deplibs" | $SED '\''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(enable_shared_with_static_runtimes, $1)=yes ;; esac ;; 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 ;; # 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 $pic_flag -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 $pic_flag ${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 && test "$with_gnu_ld" = no; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${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_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 && test "$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 $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag ${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' ;; *) m4_if($1, [], [ # Older versions of the 11.00 compiler do not understand -b yet # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) _LT_LINKER_OPTION([if $CC understands -b], _LT_TAGVAR(lt_cv_prog_compiler__b, $1), [-b], [_LT_TAGVAR(archive_cmds, $1)='$CC -b ${wl}+h ${wl}$soname ${wl}+b ${wl}$install_libdir -o $lib $libobjs $deplibs $compiler_flags'], [_LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_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 $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${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. # This should be the same for all languages, so no per-tag cache variable. AC_CACHE_CHECK([whether the $host_os linker accepts -exported_symbol], [lt_cv_irix_exported_symbol], [save_LDFLAGS="$LDFLAGS" LDFLAGS="$LDFLAGS -shared ${wl}-exported_symbol ${wl}foo ${wl}-update_registry ${wl}/dev/null" AC_LINK_IFELSE( [AC_LANG_SOURCE( [AC_LANG_CASE([C], [[int foo (void) { return 0; }]], [C++], [[int foo (void) { return 0; }]], [Fortran 77], [[ subroutine foo end]], [Fortran], [[ subroutine foo end]])])], [lt_cv_irix_exported_symbol=yes], [lt_cv_irix_exported_symbol=no]) LDFLAGS="$save_LDFLAGS"]) if test "$lt_cv_irix_exported_symbol" = yes; then _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations ${wl}-exports_file ${wl}$export_symbols -o $lib' fi else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -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" && func_echo_all "-set_version $verstring"` -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" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${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" && func_echo_all "-set_version $verstring"` -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} $pic_flag $libobjs $deplibs $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${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" && func_echo_all "-set_version $verstring"` -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 "-set_version $verstring"` -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 $pic_flag ${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 $pic_flag ${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_CACHE_CHECK([whether -lc should be explicitly linked in], [lt_cv_]_LT_TAGVAR(archive_cmds_need_lc, $1), [$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_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=no else lt_cv_[]_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* ]) _LT_TAGVAR(archive_cmds_need_lc, $1)=$lt_cv_[]_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_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([], [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([], [postlink_cmds], [2], [Commands necessary for finishing linking programs]) _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_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], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_PATH_MANIFEST_TOOL])dnl 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 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_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(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_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_CFLAGS=$CFLAGS 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++"} CFLAGS=$CXXFLAGS 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 $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC $pic_flag -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 -v "^Configured with:" | $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([$1]) _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 func_echo_all "${wl}${allow_undefined_flag}"; 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([$1]) _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' if test "$with_gnu_ld" = yes; then # We only use this code for GNU lds that support --whole-archive. _LT_TAGVAR(whole_archive_flag_spec, $1)='${wl}--whole-archive$convenience ${wl}--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' fi _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 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*) case $GXX,$cc_basename in ,cl* | no,cl*) # Native MSVC # 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 _LT_TAGVAR(always_export_symbols, $1)=yes _LT_TAGVAR(file_list_spec, $1)='@' # 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 $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-dll~linknames=' _LT_TAGVAR(archive_expsym_cmds, $1)='if test "x`$SED 1q $export_symbols`" = xEXPORTS; then $SED -n -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' -e '1\\\!p' < $export_symbols > $output_objdir/$soname.exp; else $SED -e 's/\\\\\\\(.*\\\\\\\)/-link\\\ -EXPORT:\\\\\\\1/' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes # Don't use ranlib _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile="$lt_outputfile.exe" lt_tool_outputfile="$lt_tool_outputfile.exe" ;; esac~ func_to_tool_file "$lt_outputfile"~ if test "$MANIFEST_TOOL" != ":" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # g++ # _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(export_dynamic_flag_spec, $1)='${wl}--export-all-symbols' _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 ;; esac ;; 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 ;; freebsd2.*) # 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 ;; haiku*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags ${wl}-soname $wl$soname -o $lib' _LT_TAGVAR(link_all_deplibs, $1)=yes ;; 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; func_echo_all "$list"' ;; *) if test "$GXX" = yes; then _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag ${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; func_echo_all "$list"' ;; *) 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 $pic_flag ${wl}+h ${wl}$soname ${wl}+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag ${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" && func_echo_all "-set_version $verstring"` -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 $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` -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 | 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; func_echo_all "$list"' _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 | sort | $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 | sort | $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 | sort | $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 | sort | $NL2SP` $postdep_objects $compiler_flags ${wl}-soname ${wl}$soname ${wl}-retain-symbols-file ${wl}$export_symbols -o $lib' ;; *) # Version 6 and above 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; func_echo_all \"$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=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed' ;; xl* | mpixl* | bgxl*) # 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; func_echo_all \"$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='func_echo_all' # 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=func_echo_all 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" && func_echo_all "${wl}-set_version $verstring"` -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" && func_echo_all "-set_version $verstring"` -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 "-set_version $verstring"` -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=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list=""; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) 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" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${wl}-update_registry ${wl}${output_objdir}/so_locations -o $lib' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib ${allow_undefined_flag} $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags ${wl}-msym ${wl}-soname ${wl}$soname `test -n "$verstring" && func_echo_all "${wl}-set_version ${wl}$verstring"` ${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 -v "^Configured with:" | $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* | sunCC*) # 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='func_echo_all' # 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 $pic_flag -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 $pic_flag -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 -v "^Configured with:" | $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 -v "^Configured with:" | $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(old_archive_cmds, $1)='$CC -Tprelink_objects $oldobjs~ '"$_LT_TAGVAR(old_archive_cmds, $1)" _LT_TAGVAR(reload_cmds, $1)='$CC -Tprelink_objects $reload_objs~ '"$_LT_TAGVAR(reload_cmds, $1)" ;; *) _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 CFLAGS=$lt_save_CFLAGS 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_FUNC_STRIPNAME_CNF # ---------------------- # func_stripname_cnf 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). # # This function is identical to the (non-XSI) version of func_stripname, # except this one can be used by m4 code that may be executed by configure, # rather than the libtool script. m4_defun([_LT_FUNC_STRIPNAME_CNF],[dnl AC_REQUIRE([_LT_DECL_SED]) AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH]) func_stripname_cnf () { case ${2} in .*) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%\\\\${2}\$%%"`;; *) func_stripname_result=`$ECHO "${3}" | $SED "s%^${1}%%; s%${2}\$%%"`;; esac } # func_stripname_cnf ])# _LT_FUNC_STRIPNAME_CNF # _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 AC_REQUIRE([_LT_FUNC_STRIPNAME_CNF])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 ], [$1], [GO], [cat > conftest.$ac_ext <<_LT_EOF package foo func foo() { } _LT_EOF ]) _lt_libdeps_save_CFLAGS=$CFLAGS case "$CC $CFLAGS " in #( *\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;; *\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;; *\ -fuse-linker-plugin*\ *) CFLAGS="$CFLAGS -fno-use-linker-plugin" ;; esac 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 ${prev}${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 fi # Expand the sysroot to ease extracting the directories later. if test -z "$prev"; then case $p in -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;; -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;; -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;; esac fi case $p in =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;; esac if test "$pre_test_object_deps_done" = no; then case ${prev} 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 prev= ;; *.lto.$objext) ;; # Ignore GCC LTO objects *.$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 CFLAGS=$_lt_libdeps_save_CFLAGS # 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* | sunCC*) # 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_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_LANG_PUSH(Fortran 77) if test -z "$F77" || test "X$F77" = "Xno"; then _lt_disable_F77=yes fi _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_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(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_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 lt_save_CFLAGS=$CFLAGS CC=${F77-"f77"} CFLAGS=$FFLAGS 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" CFLAGS="$lt_save_CFLAGS" fi # test "$_lt_disable_F77" != yes AC_LANG_POP ])# _LT_LANG_F77_CONFIG # _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_LANG_PUSH(Fortran) if test -z "$FC" || test "X$FC" = "Xno"; then _lt_disable_FC=yes fi _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_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(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_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 lt_save_CFLAGS=$CFLAGS CC=${FC-"f95"} CFLAGS=$FCFLAGS 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 CFLAGS=$lt_save_CFLAGS 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_CFLAGS=$CFLAGS lt_save_GCC=$GCC GCC=yes CC=${GCJ-"gcj"} CFLAGS=$GCJFLAGS 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 _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_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 CFLAGS=$lt_save_CFLAGS ])# _LT_LANG_GCJ_CONFIG # _LT_LANG_GO_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for the GNU Go compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to `libtool'. m4_defun([_LT_LANG_GO_CONFIG], [AC_REQUIRE([LT_PROG_GO])dnl AC_LANG_SAVE # Source file extension for Go test sources. ac_ext=go # Object file extension for compiled Go test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="package main; func main() { }" # Code to be used in simple link tests lt_simple_link_test_code='package main; func main() { }' # 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_CFLAGS=$CFLAGS lt_save_GCC=$GCC GCC=yes CC=${GOC-"gccgo"} CFLAGS=$GOFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_TAGVAR(LD, $1)="$LD" _LT_CC_BASENAME([$compiler]) # Go 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 _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_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 CFLAGS=$lt_save_CFLAGS ])# _LT_LANG_GO_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_CFLAGS=$CFLAGS lt_save_GCC=$GCC GCC= CC=${RC-"windres"} CFLAGS= 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 CFLAGS=$lt_save_CFLAGS ])# _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_GO # ---------- AC_DEFUN([LT_PROG_GO], [AC_CHECK_TOOL(GOC, gccgo,) ]) # 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_DLLTOOL # ---------------- # Ensure DLLTOOL variable is set. m4_defun([_LT_DECL_DLLTOOL], [AC_CHECK_TOOL(DLLTOOL, dlltool, false) test -z "$DLLTOOL" && DLLTOOL=dlltool _LT_DECL([], [DLLTOOL], [1], [DLL creation program]) AC_SUBST([DLLTOOL]) ]) # _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%"$_lt_dummy"}, \ = c,a/b,b/c, \ && 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_FUNCTION_REPLACE (FUNCNAME, REPLACEMENT-BODY) # ------------------------------------------------------ # In `$cfgfile', look for function FUNCNAME delimited by `^FUNCNAME ()$' and # '^} FUNCNAME ', and replace its body with REPLACEMENT-BODY. m4_defun([_LT_PROG_FUNCTION_REPLACE], [dnl { sed -e '/^$1 ()$/,/^} # $1 /c\ $1 ()\ {\ m4_bpatsubsts([$2], [$], [\\], [^\([ ]\)], [\\\1]) } # Extended-shell $1 implementation' "$cfgfile" > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: ]) # _LT_PROG_REPLACE_SHELLFNS # ------------------------- # Replace existing portable implementations of several shell functions with # equivalent extended shell implementations where those features are available.. m4_defun([_LT_PROG_REPLACE_SHELLFNS], [if test x"$xsi_shell" = xyes; then _LT_PROG_FUNCTION_REPLACE([func_dirname], [dnl case ${1} in */*) func_dirname_result="${1%/*}${2}" ;; * ) func_dirname_result="${3}" ;; esac]) _LT_PROG_FUNCTION_REPLACE([func_basename], [dnl func_basename_result="${1##*/}"]) _LT_PROG_FUNCTION_REPLACE([func_dirname_and_basename], [dnl case ${1} in */*) func_dirname_result="${1%/*}${2}" ;; * ) func_dirname_result="${3}" ;; esac func_basename_result="${1##*/}"]) _LT_PROG_FUNCTION_REPLACE([func_stripname], [dnl # 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}"}]) _LT_PROG_FUNCTION_REPLACE([func_split_long_opt], [dnl func_split_long_opt_name=${1%%=*} func_split_long_opt_arg=${1#*=}]) _LT_PROG_FUNCTION_REPLACE([func_split_short_opt], [dnl func_split_short_opt_arg=${1#??} func_split_short_opt_name=${1%"$func_split_short_opt_arg"}]) _LT_PROG_FUNCTION_REPLACE([func_lo2o], [dnl case ${1} in *.lo) func_lo2o_result=${1%.lo}.${objext} ;; *) func_lo2o_result=${1} ;; esac]) _LT_PROG_FUNCTION_REPLACE([func_xform], [ func_xform_result=${1%.*}.lo]) _LT_PROG_FUNCTION_REPLACE([func_arith], [ func_arith_result=$(( $[*] ))]) _LT_PROG_FUNCTION_REPLACE([func_len], [ func_len_result=${#1}]) fi if test x"$lt_shell_append" = xyes; then _LT_PROG_FUNCTION_REPLACE([func_append], [ eval "${1}+=\\${2}"]) _LT_PROG_FUNCTION_REPLACE([func_append_quoted], [dnl func_quote_for_eval "${2}" dnl m4 expansion turns \\\\ into \\, and then the shell eval turns that into \ eval "${1}+=\\\\ \\$func_quote_for_eval_result"]) # Save a `func_append' function call where possible by direct use of '+=' sed -e 's%func_append \([[a-zA-Z_]]\{1,\}\) "%\1+="%g' $cfgfile > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: else # Save a `func_append' function call even when '+=' is not available sed -e 's%func_append \([[a-zA-Z_]]\{1,\}\) "%\1="$\1%g' $cfgfile > $cfgfile.tmp \ && mv -f "$cfgfile.tmp" "$cfgfile" \ || (rm -f "$cfgfile" && cp "$cfgfile.tmp" "$cfgfile" && rm -f "$cfgfile.tmp") test 0 -eq $? || _lt_function_replace_fail=: fi if test x"$_lt_function_replace_fail" = x":"; then AC_MSG_WARN([Unable to substitute extended shell functions in $ofile]) fi ]) # _LT_PATH_CONVERSION_FUNCTIONS # ----------------------------- # Determine which file name conversion functions should be used by # func_to_host_file (and, implicitly, by func_to_host_path). These are needed # for certain cross-compile configurations and native mingw. m4_defun([_LT_PATH_CONVERSION_FUNCTIONS], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl AC_MSG_CHECKING([how to convert $build file names to $host format]) AC_CACHE_VAL(lt_cv_to_host_file_cmd, [case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 ;; esac ;; *-*-cygwin* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_noop ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin ;; esac ;; * ) # unhandled hosts (and "normal" native builds) lt_cv_to_host_file_cmd=func_convert_file_noop ;; esac ]) to_host_file_cmd=$lt_cv_to_host_file_cmd AC_MSG_RESULT([$lt_cv_to_host_file_cmd]) _LT_DECL([to_host_file_cmd], [lt_cv_to_host_file_cmd], [0], [convert $build file names to $host format])dnl AC_MSG_CHECKING([how to convert $build file names to toolchain format]) AC_CACHE_VAL(lt_cv_to_tool_file_cmd, [#assume ordinary cross tools, or native build. lt_cv_to_tool_file_cmd=func_convert_file_noop case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 ;; esac ;; esac ]) to_tool_file_cmd=$lt_cv_to_tool_file_cmd AC_MSG_RESULT([$lt_cv_to_tool_file_cmd]) _LT_DECL([to_tool_file_cmd], [lt_cv_to_tool_file_cmd], [0], [convert $build files to toolchain format])dnl ])# _LT_PATH_CONVERSION_FUNCTIONS gss-1.0.3/m4/lib-link.m40000644000000000000000000010044312415507605011470 00000000000000# lib-link.m4 serial 26 (gettext-0.18.2) dnl Copyright (C) 2001-2014 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. AC_PREREQ([2.54]) dnl AC_LIB_LINKFLAGS(name [, dependencies]) searches for libname and dnl the libraries corresponding to explicit and implicit dependencies. dnl Sets and AC_SUBSTs the LIB${NAME} and LTLIB${NAME} variables and dnl augments the CPPFLAGS variable. dnl Sets and AC_SUBSTs the LIB${NAME}_PREFIX variable to nonempty if libname dnl was found in ${LIB${NAME}_PREFIX}/$acl_libdirstem. AC_DEFUN([AC_LIB_LINKFLAGS], [ AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) AC_REQUIRE([AC_LIB_RPATH]) pushdef([Name],[m4_translit([$1],[./+-], [____])]) pushdef([NAME],[m4_translit([$1],[abcdefghijklmnopqrstuvwxyz./+-], [ABCDEFGHIJKLMNOPQRSTUVWXYZ____])]) AC_CACHE_CHECK([how to link with lib[]$1], [ac_cv_lib[]Name[]_libs], [ AC_LIB_LINKFLAGS_BODY([$1], [$2]) ac_cv_lib[]Name[]_libs="$LIB[]NAME" ac_cv_lib[]Name[]_ltlibs="$LTLIB[]NAME" ac_cv_lib[]Name[]_cppflags="$INC[]NAME" ac_cv_lib[]Name[]_prefix="$LIB[]NAME[]_PREFIX" ]) LIB[]NAME="$ac_cv_lib[]Name[]_libs" LTLIB[]NAME="$ac_cv_lib[]Name[]_ltlibs" INC[]NAME="$ac_cv_lib[]Name[]_cppflags" LIB[]NAME[]_PREFIX="$ac_cv_lib[]Name[]_prefix" AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME) AC_SUBST([LIB]NAME) AC_SUBST([LTLIB]NAME) AC_SUBST([LIB]NAME[_PREFIX]) dnl Also set HAVE_LIB[]NAME so that AC_LIB_HAVE_LINKFLAGS can reuse the dnl results of this search when this library appears as a dependency. HAVE_LIB[]NAME=yes popdef([NAME]) popdef([Name]) ]) dnl AC_LIB_HAVE_LINKFLAGS(name, dependencies, includes, testcode, [missing-message]) dnl searches for libname and the libraries corresponding to explicit and dnl implicit dependencies, together with the specified include files and dnl the ability to compile and link the specified testcode. The missing-message dnl defaults to 'no' and may contain additional hints for the user. dnl If found, it sets and AC_SUBSTs HAVE_LIB${NAME}=yes and the LIB${NAME} dnl and LTLIB${NAME} variables and augments the CPPFLAGS variable, and dnl #defines HAVE_LIB${NAME} to 1. Otherwise, it sets and AC_SUBSTs dnl HAVE_LIB${NAME}=no and LIB${NAME} and LTLIB${NAME} to empty. dnl Sets and AC_SUBSTs the LIB${NAME}_PREFIX variable to nonempty if libname dnl was found in ${LIB${NAME}_PREFIX}/$acl_libdirstem. AC_DEFUN([AC_LIB_HAVE_LINKFLAGS], [ AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) AC_REQUIRE([AC_LIB_RPATH]) pushdef([Name],[m4_translit([$1],[./+-], [____])]) pushdef([NAME],[m4_translit([$1],[abcdefghijklmnopqrstuvwxyz./+-], [ABCDEFGHIJKLMNOPQRSTUVWXYZ____])]) dnl Search for lib[]Name and define LIB[]NAME, LTLIB[]NAME and INC[]NAME dnl accordingly. AC_LIB_LINKFLAGS_BODY([$1], [$2]) dnl Add $INC[]NAME to CPPFLAGS before performing the following checks, dnl because if the user has installed lib[]Name and not disabled its use dnl via --without-lib[]Name-prefix, he wants to use it. ac_save_CPPFLAGS="$CPPFLAGS" AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME) AC_CACHE_CHECK([for lib[]$1], [ac_cv_lib[]Name], [ ac_save_LIBS="$LIBS" dnl If $LIB[]NAME contains some -l options, add it to the end of LIBS, dnl because these -l options might require -L options that are present in dnl LIBS. -l options benefit only from the -L options listed before it. dnl Otherwise, add it to the front of LIBS, because it may be a static dnl library that depends on another static library that is present in LIBS. dnl Static libraries benefit only from the static libraries listed after dnl it. case " $LIB[]NAME" in *" -l"*) LIBS="$LIBS $LIB[]NAME" ;; *) LIBS="$LIB[]NAME $LIBS" ;; esac AC_LINK_IFELSE( [AC_LANG_PROGRAM([[$3]], [[$4]])], [ac_cv_lib[]Name=yes], [ac_cv_lib[]Name='m4_if([$5], [], [no], [[$5]])']) LIBS="$ac_save_LIBS" ]) if test "$ac_cv_lib[]Name" = yes; then HAVE_LIB[]NAME=yes AC_DEFINE([HAVE_LIB]NAME, 1, [Define if you have the lib][$1 library.]) AC_MSG_CHECKING([how to link with lib[]$1]) AC_MSG_RESULT([$LIB[]NAME]) else HAVE_LIB[]NAME=no dnl If $LIB[]NAME didn't lead to a usable library, we don't need dnl $INC[]NAME either. CPPFLAGS="$ac_save_CPPFLAGS" LIB[]NAME= LTLIB[]NAME= LIB[]NAME[]_PREFIX= fi AC_SUBST([HAVE_LIB]NAME) AC_SUBST([LIB]NAME) AC_SUBST([LTLIB]NAME) AC_SUBST([LIB]NAME[_PREFIX]) popdef([NAME]) popdef([Name]) ]) dnl Determine the platform dependent parameters needed to use rpath: dnl acl_libext, dnl acl_shlibext, dnl acl_libname_spec, dnl acl_library_names_spec, dnl acl_hardcode_libdir_flag_spec, dnl acl_hardcode_libdir_separator, dnl acl_hardcode_direct, dnl acl_hardcode_minus_L. AC_DEFUN([AC_LIB_RPATH], [ dnl Tell automake >= 1.10 to complain if config.rpath is missing. m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([config.rpath])]) AC_REQUIRE([AC_PROG_CC]) dnl we use $CC, $GCC, $LDFLAGS AC_REQUIRE([AC_LIB_PROG_LD]) dnl we use $LD, $with_gnu_ld AC_REQUIRE([AC_CANONICAL_HOST]) dnl we use $host AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT]) dnl we use $ac_aux_dir AC_CACHE_CHECK([for shared library run path origin], [acl_cv_rpath], [ CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \ ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh . ./conftest.sh rm -f ./conftest.sh acl_cv_rpath=done ]) wl="$acl_cv_wl" acl_libext="$acl_cv_libext" acl_shlibext="$acl_cv_shlibext" acl_libname_spec="$acl_cv_libname_spec" acl_library_names_spec="$acl_cv_library_names_spec" acl_hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec" acl_hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator" acl_hardcode_direct="$acl_cv_hardcode_direct" acl_hardcode_minus_L="$acl_cv_hardcode_minus_L" dnl Determine whether the user wants rpath handling at all. AC_ARG_ENABLE([rpath], [ --disable-rpath do not hardcode runtime library paths], :, enable_rpath=yes) ]) dnl AC_LIB_FROMPACKAGE(name, package) dnl declares that libname comes from the given package. The configure file dnl will then not have a --with-libname-prefix option but a dnl --with-package-prefix option. Several libraries can come from the same dnl package. This declaration must occur before an AC_LIB_LINKFLAGS or similar dnl macro call that searches for libname. AC_DEFUN([AC_LIB_FROMPACKAGE], [ pushdef([NAME],[m4_translit([$1],[abcdefghijklmnopqrstuvwxyz./+-], [ABCDEFGHIJKLMNOPQRSTUVWXYZ____])]) define([acl_frompackage_]NAME, [$2]) popdef([NAME]) pushdef([PACK],[$2]) pushdef([PACKUP],[m4_translit(PACK,[abcdefghijklmnopqrstuvwxyz./+-], [ABCDEFGHIJKLMNOPQRSTUVWXYZ____])]) define([acl_libsinpackage_]PACKUP, m4_ifdef([acl_libsinpackage_]PACKUP, [m4_defn([acl_libsinpackage_]PACKUP)[, ]],)[lib$1]) popdef([PACKUP]) popdef([PACK]) ]) dnl AC_LIB_LINKFLAGS_BODY(name [, dependencies]) searches for libname and dnl the libraries corresponding to explicit and implicit dependencies. dnl Sets the LIB${NAME}, LTLIB${NAME} and INC${NAME} variables. dnl Also, sets the LIB${NAME}_PREFIX variable to nonempty if libname was found dnl in ${LIB${NAME}_PREFIX}/$acl_libdirstem. AC_DEFUN([AC_LIB_LINKFLAGS_BODY], [ AC_REQUIRE([AC_LIB_PREPARE_MULTILIB]) pushdef([NAME],[m4_translit([$1],[abcdefghijklmnopqrstuvwxyz./+-], [ABCDEFGHIJKLMNOPQRSTUVWXYZ____])]) pushdef([PACK],[m4_ifdef([acl_frompackage_]NAME, [acl_frompackage_]NAME, lib[$1])]) pushdef([PACKUP],[m4_translit(PACK,[abcdefghijklmnopqrstuvwxyz./+-], [ABCDEFGHIJKLMNOPQRSTUVWXYZ____])]) pushdef([PACKLIBS],[m4_ifdef([acl_frompackage_]NAME, [acl_libsinpackage_]PACKUP, lib[$1])]) dnl Autoconf >= 2.61 supports dots in --with options. pushdef([P_A_C_K],[m4_if(m4_version_compare(m4_defn([m4_PACKAGE_VERSION]),[2.61]),[-1],[m4_translit(PACK,[.],[_])],PACK)]) dnl By default, look in $includedir and $libdir. use_additional=yes AC_LIB_WITH_FINAL_PREFIX([ eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" ]) AC_ARG_WITH(P_A_C_K[-prefix], [[ --with-]]P_A_C_K[[-prefix[=DIR] search for ]PACKLIBS[ in DIR/include and DIR/lib --without-]]P_A_C_K[[-prefix don't search for ]PACKLIBS[ in includedir and libdir]], [ if test "X$withval" = "Xno"; then use_additional=no else if test "X$withval" = "X"; then AC_LIB_WITH_FINAL_PREFIX([ eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" ]) else additional_includedir="$withval/include" additional_libdir="$withval/$acl_libdirstem" if test "$acl_libdirstem2" != "$acl_libdirstem" \ && ! test -d "$withval/$acl_libdirstem"; then additional_libdir="$withval/$acl_libdirstem2" fi fi fi ]) dnl Search the library and its dependencies in $additional_libdir and dnl $LDFLAGS. Using breadth-first-seach. LIB[]NAME= LTLIB[]NAME= INC[]NAME= LIB[]NAME[]_PREFIX= dnl HAVE_LIB${NAME} is an indicator that LIB${NAME}, LTLIB${NAME} have been dnl computed. So it has to be reset here. HAVE_LIB[]NAME= rpathdirs= ltrpathdirs= names_already_handled= names_next_round='$1 $2' while test -n "$names_next_round"; do names_this_round="$names_next_round" names_next_round= for name in $names_this_round; do already_handled= for n in $names_already_handled; do if test "$n" = "$name"; then already_handled=yes break fi done if test -z "$already_handled"; then names_already_handled="$names_already_handled $name" dnl See if it was already located by an earlier AC_LIB_LINKFLAGS dnl or AC_LIB_HAVE_LINKFLAGS call. uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./+-|ABCDEFGHIJKLMNOPQRSTUVWXYZ____|'` eval value=\"\$HAVE_LIB$uppername\" if test -n "$value"; then if test "$value" = yes; then eval value=\"\$LIB$uppername\" test -z "$value" || LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$value" eval value=\"\$LTLIB$uppername\" test -z "$value" || LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$value" else dnl An earlier call to AC_LIB_HAVE_LINKFLAGS has determined dnl that this library doesn't exist. So just drop it. : fi else dnl Search the library lib$name in $additional_libdir and $LDFLAGS dnl and the already constructed $LIBNAME/$LTLIBNAME. found_dir= found_la= found_so= found_a= eval libname=\"$acl_libname_spec\" # typically: libname=lib$name if test -n "$acl_shlibext"; then shrext=".$acl_shlibext" # typically: shrext=.so else shrext= fi if test $use_additional = yes; then dir="$additional_libdir" dnl The same code as in the loop below: dnl First look for a shared library. if test -n "$acl_shlibext"; then if test -f "$dir/$libname$shrext"; then found_dir="$dir" found_so="$dir/$libname$shrext" else if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then ver=`(cd "$dir" && \ for f in "$libname$shrext".*; do echo "$f"; done \ | sed -e "s,^$libname$shrext\\\\.,," \ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ | sed 1q ) 2>/dev/null` if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then found_dir="$dir" found_so="$dir/$libname$shrext.$ver" fi else eval library_names=\"$acl_library_names_spec\" for f in $library_names; do if test -f "$dir/$f"; then found_dir="$dir" found_so="$dir/$f" break fi done fi fi fi dnl Then look for a static library. if test "X$found_dir" = "X"; then if test -f "$dir/$libname.$acl_libext"; then found_dir="$dir" found_a="$dir/$libname.$acl_libext" fi fi if test "X$found_dir" != "X"; then if test -f "$dir/$libname.la"; then found_la="$dir/$libname.la" fi fi fi if test "X$found_dir" = "X"; then for x in $LDFLAGS $LTLIB[]NAME; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) case "$x" in -L*) dir=`echo "X$x" | sed -e 's/^X-L//'` dnl First look for a shared library. if test -n "$acl_shlibext"; then if test -f "$dir/$libname$shrext"; then found_dir="$dir" found_so="$dir/$libname$shrext" else if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then ver=`(cd "$dir" && \ for f in "$libname$shrext".*; do echo "$f"; done \ | sed -e "s,^$libname$shrext\\\\.,," \ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ | sed 1q ) 2>/dev/null` if test -n "$ver" && test -f "$dir/$libname$shrext.$ver"; then found_dir="$dir" found_so="$dir/$libname$shrext.$ver" fi else eval library_names=\"$acl_library_names_spec\" for f in $library_names; do if test -f "$dir/$f"; then found_dir="$dir" found_so="$dir/$f" break fi done fi fi fi dnl Then look for a static library. if test "X$found_dir" = "X"; then if test -f "$dir/$libname.$acl_libext"; then found_dir="$dir" found_a="$dir/$libname.$acl_libext" fi fi if test "X$found_dir" != "X"; then if test -f "$dir/$libname.la"; then found_la="$dir/$libname.la" fi fi ;; esac if test "X$found_dir" != "X"; then break fi done fi if test "X$found_dir" != "X"; then dnl Found the library. LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$found_dir -l$name" if test "X$found_so" != "X"; then dnl Linking with a shared library. We attempt to hardcode its dnl directory into the executable's runpath, unless it's the dnl standard /usr/lib. if test "$enable_rpath" = no \ || test "X$found_dir" = "X/usr/$acl_libdirstem" \ || test "X$found_dir" = "X/usr/$acl_libdirstem2"; then dnl No hardcoding is needed. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" else dnl Use an explicit option to hardcode DIR into the resulting dnl binary. dnl Potentially add DIR to ltrpathdirs. dnl The ltrpathdirs will be appended to $LTLIBNAME at the end. haveit= for x in $ltrpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $found_dir" fi dnl The hardcoding into $LIBNAME is system dependent. if test "$acl_hardcode_direct" = yes; then dnl Using DIR/libNAME.so during linking hardcodes DIR into the dnl resulting binary. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" else if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then dnl Use an explicit option to hardcode DIR into the resulting dnl binary. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" dnl Potentially add DIR to rpathdirs. dnl The rpathdirs will be appended to $LIBNAME at the end. haveit= for x in $rpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $found_dir" fi else dnl Rely on "-L$found_dir". dnl But don't add it if it's already contained in the LDFLAGS dnl or the already constructed $LIBNAME haveit= for x in $LDFLAGS $LIB[]NAME; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-L$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir" fi if test "$acl_hardcode_minus_L" != no; then dnl FIXME: Not sure whether we should use dnl "-L$found_dir -l$name" or "-L$found_dir $found_so" dnl here. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" else dnl We cannot use $acl_hardcode_runpath_var and LD_RUN_PATH dnl here, because this doesn't fit in flags passed to the dnl compiler. So give up. No hardcoding. This affects only dnl very old systems. dnl FIXME: Not sure whether we should use dnl "-L$found_dir -l$name" or "-L$found_dir $found_so" dnl here. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name" fi fi fi fi else if test "X$found_a" != "X"; then dnl Linking with a static library. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_a" else dnl We shouldn't come here, but anyway it's good to have a dnl fallback. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir -l$name" fi fi dnl Assume the include files are nearby. additional_includedir= case "$found_dir" in */$acl_libdirstem | */$acl_libdirstem/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'` if test "$name" = '$1'; then LIB[]NAME[]_PREFIX="$basedir" fi additional_includedir="$basedir/include" ;; */$acl_libdirstem2 | */$acl_libdirstem2/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem2/"'*$,,'` if test "$name" = '$1'; then LIB[]NAME[]_PREFIX="$basedir" fi additional_includedir="$basedir/include" ;; esac if test "X$additional_includedir" != "X"; then dnl Potentially add $additional_includedir to $INCNAME. dnl But don't add it dnl 1. if it's the standard /usr/include, dnl 2. if it's /usr/local/include and we are using GCC on Linux, dnl 3. if it's already present in $CPPFLAGS or the already dnl constructed $INCNAME, dnl 4. if it doesn't exist as a directory. if test "X$additional_includedir" != "X/usr/include"; then haveit= if test "X$additional_includedir" = "X/usr/local/include"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then for x in $CPPFLAGS $INC[]NAME; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-I$additional_includedir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_includedir"; then dnl Really add $additional_includedir to $INCNAME. INC[]NAME="${INC[]NAME}${INC[]NAME:+ }-I$additional_includedir" fi fi fi fi fi dnl Look for dependencies. if test -n "$found_la"; then dnl Read the .la file. It defines the variables dnl dlname, library_names, old_library, dependency_libs, current, dnl age, revision, installed, dlopen, dlpreopen, libdir. save_libdir="$libdir" case "$found_la" in */* | *\\*) . "$found_la" ;; *) . "./$found_la" ;; esac libdir="$save_libdir" dnl We use only dependency_libs. for dep in $dependency_libs; do case "$dep" in -L*) additional_libdir=`echo "X$dep" | sed -e 's/^X-L//'` dnl Potentially add $additional_libdir to $LIBNAME and $LTLIBNAME. dnl But don't add it dnl 1. if it's the standard /usr/lib, dnl 2. if it's /usr/local/lib and we are using GCC on Linux, dnl 3. if it's already present in $LDFLAGS or the already dnl constructed $LIBNAME, dnl 4. if it doesn't exist as a directory. if test "X$additional_libdir" != "X/usr/$acl_libdirstem" \ && test "X$additional_libdir" != "X/usr/$acl_libdirstem2"; then haveit= if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem" \ || test "X$additional_libdir" = "X/usr/local/$acl_libdirstem2"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then haveit= for x in $LDFLAGS $LIB[]NAME; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_libdir"; then dnl Really add $additional_libdir to $LIBNAME. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$additional_libdir" fi fi haveit= for x in $LDFLAGS $LTLIB[]NAME; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_libdir"; then dnl Really add $additional_libdir to $LTLIBNAME. LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$additional_libdir" fi fi fi fi ;; -R*) dir=`echo "X$dep" | sed -e 's/^X-R//'` if test "$enable_rpath" != no; then dnl Potentially add DIR to rpathdirs. dnl The rpathdirs will be appended to $LIBNAME at the end. haveit= for x in $rpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $dir" fi dnl Potentially add DIR to ltrpathdirs. dnl The ltrpathdirs will be appended to $LTLIBNAME at the end. haveit= for x in $ltrpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $dir" fi fi ;; -l*) dnl Handle this in the next round. names_next_round="$names_next_round "`echo "X$dep" | sed -e 's/^X-l//'` ;; *.la) dnl Handle this in the next round. Throw away the .la's dnl directory; it is already contained in a preceding -L dnl option. names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` ;; *) dnl Most likely an immediate library name. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$dep" LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$dep" ;; esac done fi else dnl Didn't find the library; assume it is in the system directories dnl known to the linker and runtime loader. (All the system dnl directories known to the linker should also be known to the dnl runtime loader, otherwise the system is severely misconfigured.) LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name" LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-l$name" fi fi fi done done if test "X$rpathdirs" != "X"; then if test -n "$acl_hardcode_libdir_separator"; then dnl Weird platform: only the last -rpath option counts, the user must dnl pass all path elements in one option. We can arrange that for a dnl single library, but not when more than one $LIBNAMEs are used. alldirs= for found_dir in $rpathdirs; do alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir" done dnl Note: acl_hardcode_libdir_flag_spec uses $libdir and $wl. acl_save_libdir="$libdir" libdir="$alldirs" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag" else dnl The -rpath options are cumulative. for found_dir in $rpathdirs; do acl_save_libdir="$libdir" libdir="$found_dir" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag" done fi fi if test "X$ltrpathdirs" != "X"; then dnl When using libtool, the option that works for both libraries and dnl executables is -R. The -R options are cumulative. for found_dir in $ltrpathdirs; do LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-R$found_dir" done fi popdef([P_A_C_K]) popdef([PACKLIBS]) popdef([PACKUP]) popdef([PACK]) popdef([NAME]) ]) dnl AC_LIB_APPENDTOVAR(VAR, CONTENTS) appends the elements of CONTENTS to VAR, dnl unless already present in VAR. dnl Works only for CPPFLAGS, not for LIB* variables because that sometimes dnl contains two or three consecutive elements that belong together. AC_DEFUN([AC_LIB_APPENDTOVAR], [ for element in [$2]; do haveit= for x in $[$1]; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X$element"; then haveit=yes break fi done if test -z "$haveit"; then [$1]="${[$1]}${[$1]:+ }$element" fi done ]) dnl For those cases where a variable contains several -L and -l options dnl referring to unknown libraries and directories, this macro determines the dnl necessary additional linker options for the runtime path. dnl AC_LIB_LINKFLAGS_FROM_LIBS([LDADDVAR], [LIBSVALUE], [USE-LIBTOOL]) dnl sets LDADDVAR to linker options needed together with LIBSVALUE. dnl If USE-LIBTOOL evaluates to non-empty, linking with libtool is assumed, dnl otherwise linking without libtool is assumed. AC_DEFUN([AC_LIB_LINKFLAGS_FROM_LIBS], [ AC_REQUIRE([AC_LIB_RPATH]) AC_REQUIRE([AC_LIB_PREPARE_MULTILIB]) $1= if test "$enable_rpath" != no; then if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then dnl Use an explicit option to hardcode directories into the resulting dnl binary. rpathdirs= next= for opt in $2; do if test -n "$next"; then dir="$next" dnl No need to hardcode the standard /usr/lib. if test "X$dir" != "X/usr/$acl_libdirstem" \ && test "X$dir" != "X/usr/$acl_libdirstem2"; then rpathdirs="$rpathdirs $dir" fi next= else case $opt in -L) next=yes ;; -L*) dir=`echo "X$opt" | sed -e 's,^X-L,,'` dnl No need to hardcode the standard /usr/lib. if test "X$dir" != "X/usr/$acl_libdirstem" \ && test "X$dir" != "X/usr/$acl_libdirstem2"; then rpathdirs="$rpathdirs $dir" fi next= ;; *) next= ;; esac fi done if test "X$rpathdirs" != "X"; then if test -n ""$3""; then dnl libtool is used for linking. Use -R options. for dir in $rpathdirs; do $1="${$1}${$1:+ }-R$dir" done else dnl The linker is used for linking directly. if test -n "$acl_hardcode_libdir_separator"; then dnl Weird platform: only the last -rpath option counts, the user dnl must pass all path elements in one option. alldirs= for dir in $rpathdirs; do alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$dir" done acl_save_libdir="$libdir" libdir="$alldirs" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" $1="$flag" else dnl The -rpath options are cumulative. for dir in $rpathdirs; do acl_save_libdir="$libdir" libdir="$dir" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" $1="${$1}${$1:+ }$flag" done fi fi fi fi fi AC_SUBST([$1]) ]) gss-1.0.3/m4/nls.m40000644000000000000000000000231512415507605010562 00000000000000# nls.m4 serial 5 (gettext-0.18) dnl Copyright (C) 1995-2003, 2005-2006, 2008-2014 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 dnl This file can can be used in projects which are not available under dnl the GNU General Public License or the GNU Library General Public dnl License but which still want to provide support for the GNU gettext dnl functionality. dnl Please note that the actual code of the GNU gettext library is covered dnl by the GNU Library General Public License, and the rest of the GNU dnl gettext package package is covered by the GNU General Public License. dnl They are *not* in the public domain. dnl Authors: dnl Ulrich Drepper , 1995-2000. dnl Bruno Haible , 2000-2003. AC_PREREQ([2.50]) AC_DEFUN([AM_NLS], [ AC_MSG_CHECKING([whether NLS is requested]) dnl Default is enabled NLS AC_ARG_ENABLE([nls], [ --disable-nls do not use Native Language Support], USE_NLS=$enableval, USE_NLS=yes) AC_MSG_RESULT([$USE_NLS]) AC_SUBST([USE_NLS]) ]) gss-1.0.3/m4/lt~obsolete.m40000644000000000000000000001375612415507613012352 00000000000000# lt~obsolete.m4 -- aclocal satisfying obsolete definitions. -*-Autoconf-*- # # Copyright (C) 2004, 2005, 2007, 2009 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 5 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_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])]) m4_ifndef([_LT_REQUIRED_DARWIN_CHECKS], [AC_DEFUN([_LT_REQUIRED_DARWIN_CHECKS])]) m4_ifndef([_LT_AC_PROG_CXXCPP], [AC_DEFUN([_LT_AC_PROG_CXXCPP])]) m4_ifndef([_LT_PREPARE_SED_QUOTE_VARS], [AC_DEFUN([_LT_PREPARE_SED_QUOTE_VARS])]) m4_ifndef([_LT_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_PROG_ECHO_BACKSLASH])]) m4_ifndef([_LT_PROG_F77], [AC_DEFUN([_LT_PROG_F77])]) m4_ifndef([_LT_PROG_FC], [AC_DEFUN([_LT_PROG_FC])]) m4_ifndef([_LT_PROG_CXX], [AC_DEFUN([_LT_PROG_CXX])]) gss-1.0.3/m4/ltsugar.m40000644000000000000000000001042412415507613011446 00000000000000# 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 ]) gss-1.0.3/m4/gtk-doc.m40000664000000000000000000000424112012453517011313 00000000000000dnl -*- mode: autoconf -*- # serial 1 dnl Usage: dnl GTK_DOC_CHECK([minimum-gtk-doc-version]) AC_DEFUN([GTK_DOC_CHECK], [ AC_REQUIRE([PKG_PROG_PKG_CONFIG]) 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"]) ]) gss-1.0.3/m4/po-suffix.m40000664000000000000000000000203512415506237011707 00000000000000# po-suffix.m4 serial 1 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. dnl From Simon Josefsson # sj_PO_SUFFIX() # -------------- # Allow user to add a suffix to translation domain, to get better # co-installability of shared libraries. AC_DEFUN([sj_PO_SUFFIX], [ AC_MSG_CHECKING([for gettext translation domain suffix to use]) AC_ARG_WITH([po-suffix], AC_HELP_STRING([--with-po-suffix=STR], [add suffix to gettext translation domain]), po_suffix=$withval, po_suffix=no) if test "$po_suffix" = "yes"; then PO_SUFFIX=$1 elif test "$po_suffix" != "no" ; then PO_SUFFIX=$po_suffix fi if test -n "$PO_SUFFIX"; then AC_MSG_RESULT([$PO_SUFFIX]) else AC_MSG_RESULT([none]) fi AC_SUBST([PO_SUFFIX]) AC_DEFINE_UNQUOTED([PO_SUFFIX], "$PO_SUFFIX", [Gettext translation domain suffix.]) ]) gss-1.0.3/m4/intlmacosx.m40000644000000000000000000000475312415507605012157 00000000000000# intlmacosx.m4 serial 5 (gettext-0.18.2) dnl Copyright (C) 2004-2014 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 dnl This file can can be used in projects which are not available under dnl the GNU General Public License or the GNU Library General Public dnl License but which still want to provide support for the GNU gettext dnl functionality. dnl Please note that the actual code of the GNU gettext library is covered dnl by the GNU Library General Public License, and the rest of the GNU dnl gettext package package is covered by the GNU General Public License. dnl They are *not* in the public domain. dnl Checks for special options needed on Mac OS X. dnl Defines INTL_MACOSX_LIBS. AC_DEFUN([gt_INTL_MACOSX], [ dnl Check for API introduced in Mac OS X 10.2. AC_CACHE_CHECK([for CFPreferencesCopyAppValue], [gt_cv_func_CFPreferencesCopyAppValue], [gt_save_LIBS="$LIBS" LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include ]], [[CFPreferencesCopyAppValue(NULL, NULL)]])], [gt_cv_func_CFPreferencesCopyAppValue=yes], [gt_cv_func_CFPreferencesCopyAppValue=no]) LIBS="$gt_save_LIBS"]) if test $gt_cv_func_CFPreferencesCopyAppValue = yes; then AC_DEFINE([HAVE_CFPREFERENCESCOPYAPPVALUE], [1], [Define to 1 if you have the Mac OS X function CFPreferencesCopyAppValue in the CoreFoundation framework.]) fi dnl Check for API introduced in Mac OS X 10.3. AC_CACHE_CHECK([for CFLocaleCopyCurrent], [gt_cv_func_CFLocaleCopyCurrent], [gt_save_LIBS="$LIBS" LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include ]], [[CFLocaleCopyCurrent();]])], [gt_cv_func_CFLocaleCopyCurrent=yes], [gt_cv_func_CFLocaleCopyCurrent=no]) LIBS="$gt_save_LIBS"]) if test $gt_cv_func_CFLocaleCopyCurrent = yes; then AC_DEFINE([HAVE_CFLOCALECOPYCURRENT], [1], [Define to 1 if you have the Mac OS X function CFLocaleCopyCurrent in the CoreFoundation framework.]) fi INTL_MACOSX_LIBS= if test $gt_cv_func_CFPreferencesCopyAppValue = yes || test $gt_cv_func_CFLocaleCopyCurrent = yes; then INTL_MACOSX_LIBS="-Wl,-framework -Wl,CoreFoundation" fi AC_SUBST([INTL_MACOSX_LIBS]) ]) gss-1.0.3/m4/ltversion.m40000644000000000000000000000126212415507613012012 00000000000000# 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. # @configure_input@ # serial 3337 ltversion.m4 # This file is part of GNU Libtool m4_define([LT_PACKAGE_VERSION], [2.4.2]) m4_define([LT_PACKAGE_REVISION], [1.3337]) AC_DEFUN([LTVERSION_VERSION], [macro_version='2.4.2' macro_revision='1.3337' _LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?]) _LT_DECL(, macro_revision, 0) ]) gss-1.0.3/m4/ltoptions.m40000644000000000000000000003007312415507612012021 00000000000000# Helper functions for option handling. -*- Autoconf -*- # # Copyright (C) 2004, 2005, 2007, 2008, 2009 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 7 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], [1], [Assembler program])dnl test -z "$DLLTOOL" && DLLTOOL=dlltool _LT_DECL([], [DLLTOOL], [1], [DLL creation program])dnl test -z "$OBJDUMP" && OBJDUMP=objdump _LT_DECL([], [OBJDUMP], [1], [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@<:@=PKGS@:>@], [try to use only PIC/non-PIC objects @<:@default=use both@:>@])], [lt_p=${PACKAGE-default} case $withval in yes|no) pic_mode=$withval ;; *) pic_mode=default # Look at the argument we got. We use all the common list separators. lt_save_ifs="$IFS"; IFS="${IFS}$PATH_SEPARATOR," for lt_pkg in $withval; do IFS="$lt_save_ifs" if test "X$lt_pkg" = "X$lt_p"; then pic_mode=yes fi done IFS="$lt_save_ifs" ;; esac], [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])]) gss-1.0.3/m4/progtest.m40000644000000000000000000000604012415507605011634 00000000000000# progtest.m4 serial 7 (gettext-0.18.2) dnl Copyright (C) 1996-2003, 2005, 2008-2014 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 dnl This file can can be used in projects which are not available under dnl the GNU General Public License or the GNU Library General Public dnl License but which still want to provide support for the GNU gettext dnl functionality. dnl Please note that the actual code of the GNU gettext library is covered dnl by the GNU Library General Public License, and the rest of the GNU dnl gettext package package is covered by the GNU General Public License. dnl They are *not* in the public domain. dnl Authors: dnl Ulrich Drepper , 1996. AC_PREREQ([2.50]) # Search path for a program which passes the given test. dnl AM_PATH_PROG_WITH_TEST(VARIABLE, PROG-TO-CHECK-FOR, dnl TEST-PERFORMED-ON-FOUND_PROGRAM [, VALUE-IF-NOT-FOUND [, PATH]]) AC_DEFUN([AM_PATH_PROG_WITH_TEST], [ # Prepare PATH_SEPARATOR. # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then # Determine PATH_SEPARATOR by trying to find /bin/sh in a PATH which # contains only /bin. Note that ksh looks also at the FPATH variable, # so we have to set that as well for the test. 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 # Find out how to test for executable files. Don't use a zero-byte file, # as systems may use methods other than mode bits to determine executability. cat >conf$$.file <<_ASEOF #! /bin/sh exit 0 _ASEOF chmod +x conf$$.file if test -x conf$$.file >/dev/null 2>&1; then ac_executable_p="test -x" else ac_executable_p="test -f" fi rm -f conf$$.file # Extract the first word of "$2", so it can be a program name with args. set dummy $2; ac_word=[$]2 AC_MSG_CHECKING([for $ac_word]) AC_CACHE_VAL([ac_cv_path_$1], [case "[$]$1" in [[\\/]]* | ?:[[\\/]]*) ac_cv_path_$1="[$]$1" # Let the user override the test with a path. ;; *) ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in ifelse([$5], , $PATH, [$5]); do IFS="$ac_save_IFS" test -z "$ac_dir" && ac_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then echo "$as_me: trying $ac_dir/$ac_word..." >&AS_MESSAGE_LOG_FD if [$3]; then ac_cv_path_$1="$ac_dir/$ac_word$ac_exec_ext" break 2 fi fi done done IFS="$ac_save_IFS" dnl If no 4th arg is given, leave the cache variable unset, dnl so AC_PATH_PROGS will keep looking. ifelse([$4], , , [ test -z "[$]ac_cv_path_$1" && ac_cv_path_$1="$4" ])dnl ;; esac])dnl $1="$ac_cv_path_$1" if test ifelse([$4], , [-n "[$]$1"], ["[$]$1" != "$4"]); then AC_MSG_RESULT([$][$1]) else AC_MSG_RESULT([no]) fi AC_SUBST([$1])dnl ]) gss-1.0.3/m4/lib-prefix.m40000644000000000000000000002042212415507605012026 00000000000000# lib-prefix.m4 serial 7 (gettext-0.18) dnl Copyright (C) 2001-2005, 2008-2014 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 AC_LIB_ARG_WITH is synonymous to AC_ARG_WITH in autoconf-2.13, and dnl similar to AC_ARG_WITH in autoconf 2.52...2.57 except that is doesn't dnl require excessive bracketing. ifdef([AC_HELP_STRING], [AC_DEFUN([AC_LIB_ARG_WITH], [AC_ARG_WITH([$1],[[$2]],[$3],[$4])])], [AC_DEFUN([AC_][LIB_ARG_WITH], [AC_ARG_WITH([$1],[$2],[$3],[$4])])]) dnl AC_LIB_PREFIX adds to the CPPFLAGS and LDFLAGS the flags that are needed dnl to access previously installed libraries. The basic assumption is that dnl a user will want packages to use other packages he previously installed dnl with the same --prefix option. dnl This macro is not needed if only AC_LIB_LINKFLAGS is used to locate dnl libraries, but is otherwise very convenient. AC_DEFUN([AC_LIB_PREFIX], [ AC_BEFORE([$0], [AC_LIB_LINKFLAGS]) AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) AC_REQUIRE([AC_LIB_PREPARE_MULTILIB]) AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) dnl By default, look in $includedir and $libdir. use_additional=yes AC_LIB_WITH_FINAL_PREFIX([ eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" ]) AC_LIB_ARG_WITH([lib-prefix], [ --with-lib-prefix[=DIR] search for libraries in DIR/include and DIR/lib --without-lib-prefix don't search for libraries in includedir and libdir], [ if test "X$withval" = "Xno"; then use_additional=no else if test "X$withval" = "X"; then AC_LIB_WITH_FINAL_PREFIX([ eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" ]) else additional_includedir="$withval/include" additional_libdir="$withval/$acl_libdirstem" fi fi ]) if test $use_additional = yes; then dnl Potentially add $additional_includedir to $CPPFLAGS. dnl But don't add it dnl 1. if it's the standard /usr/include, dnl 2. if it's already present in $CPPFLAGS, dnl 3. if it's /usr/local/include and we are using GCC on Linux, dnl 4. if it doesn't exist as a directory. if test "X$additional_includedir" != "X/usr/include"; then haveit= for x in $CPPFLAGS; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-I$additional_includedir"; then haveit=yes break fi done if test -z "$haveit"; then if test "X$additional_includedir" = "X/usr/local/include"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then if test -d "$additional_includedir"; then dnl Really add $additional_includedir to $CPPFLAGS. CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }-I$additional_includedir" fi fi fi fi dnl Potentially add $additional_libdir to $LDFLAGS. dnl But don't add it dnl 1. if it's the standard /usr/lib, dnl 2. if it's already present in $LDFLAGS, dnl 3. if it's /usr/local/lib and we are using GCC on Linux, dnl 4. if it doesn't exist as a directory. if test "X$additional_libdir" != "X/usr/$acl_libdirstem"; then haveit= for x in $LDFLAGS; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem"; then if test -n "$GCC"; then case $host_os in linux*) haveit=yes;; esac fi fi if test -z "$haveit"; then if test -d "$additional_libdir"; then dnl Really add $additional_libdir to $LDFLAGS. LDFLAGS="${LDFLAGS}${LDFLAGS:+ }-L$additional_libdir" fi fi fi fi fi ]) dnl AC_LIB_PREPARE_PREFIX creates variables acl_final_prefix, dnl acl_final_exec_prefix, containing the values to which $prefix and dnl $exec_prefix will expand at the end of the configure script. AC_DEFUN([AC_LIB_PREPARE_PREFIX], [ dnl Unfortunately, prefix and exec_prefix get only finally determined dnl at the end of configure. if test "X$prefix" = "XNONE"; then acl_final_prefix="$ac_default_prefix" else acl_final_prefix="$prefix" fi if test "X$exec_prefix" = "XNONE"; then acl_final_exec_prefix='${prefix}' else acl_final_exec_prefix="$exec_prefix" fi acl_save_prefix="$prefix" prefix="$acl_final_prefix" eval acl_final_exec_prefix=\"$acl_final_exec_prefix\" prefix="$acl_save_prefix" ]) dnl AC_LIB_WITH_FINAL_PREFIX([statement]) evaluates statement, with the dnl variables prefix and exec_prefix bound to the values they will have dnl at the end of the configure script. AC_DEFUN([AC_LIB_WITH_FINAL_PREFIX], [ acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" $1 exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" ]) dnl AC_LIB_PREPARE_MULTILIB creates dnl - a variable acl_libdirstem, containing the basename of the libdir, either dnl "lib" or "lib64" or "lib/64", dnl - a variable acl_libdirstem2, as a secondary possible value for dnl acl_libdirstem, either the same as acl_libdirstem or "lib/sparcv9" or dnl "lib/amd64". AC_DEFUN([AC_LIB_PREPARE_MULTILIB], [ dnl There is no formal standard regarding lib and lib64. dnl On glibc systems, the current practice is that on a system supporting dnl 32-bit and 64-bit instruction sets or ABIs, 64-bit libraries go under dnl $prefix/lib64 and 32-bit libraries go under $prefix/lib. We determine dnl the compiler's default mode by looking at the compiler's library search dnl path. If at least one of its elements ends in /lib64 or points to a dnl directory whose absolute pathname ends in /lib64, we assume a 64-bit ABI. dnl Otherwise we use the default, namely "lib". dnl On Solaris systems, the current practice is that on a system supporting dnl 32-bit and 64-bit instruction sets or ABIs, 64-bit libraries go under dnl $prefix/lib/64 (which is a symlink to either $prefix/lib/sparcv9 or dnl $prefix/lib/amd64) and 32-bit libraries go under $prefix/lib. AC_REQUIRE([AC_CANONICAL_HOST]) acl_libdirstem=lib acl_libdirstem2= case "$host_os" in solaris*) dnl See Solaris 10 Software Developer Collection > Solaris 64-bit Developer's Guide > The Development Environment dnl . dnl "Portable Makefiles should refer to any library directories using the 64 symbolic link." dnl But we want to recognize the sparcv9 or amd64 subdirectory also if the dnl symlink is missing, so we set acl_libdirstem2 too. AC_CACHE_CHECK([for 64-bit host], [gl_cv_solaris_64bit], [AC_EGREP_CPP([sixtyfour bits], [ #ifdef _LP64 sixtyfour bits #endif ], [gl_cv_solaris_64bit=yes], [gl_cv_solaris_64bit=no]) ]) if test $gl_cv_solaris_64bit = yes; then acl_libdirstem=lib/64 case "$host_cpu" in sparc*) acl_libdirstem2=lib/sparcv9 ;; i*86 | x86_64) acl_libdirstem2=lib/amd64 ;; esac fi ;; *) searchpath=`(LC_ALL=C $CC -print-search-dirs) 2>/dev/null | sed -n -e 's,^libraries: ,,p' | sed -e 's,^=,,'` if test -n "$searchpath"; then acl_save_IFS="${IFS= }"; IFS=":" for searchdir in $searchpath; do if test -d "$searchdir"; then case "$searchdir" in */lib64/ | */lib64 ) acl_libdirstem=lib64 ;; */../ | */.. ) # Better ignore directories of this form. They are misleading. ;; *) searchdir=`cd "$searchdir" && pwd` case "$searchdir" in */lib64 ) acl_libdirstem=lib64 ;; esac ;; esac fi done IFS="$acl_save_IFS" fi ;; esac test -n "$acl_libdirstem2" || acl_libdirstem2="$acl_libdirstem" ]) gss-1.0.3/m4/iconv.m40000644000000000000000000002162012415507605011104 00000000000000# iconv.m4 serial 18 (gettext-0.18.2) dnl Copyright (C) 2000-2002, 2007-2014 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. AC_DEFUN([AM_ICONV_LINKFLAGS_BODY], [ dnl Prerequisites of AC_LIB_LINKFLAGS_BODY. AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) AC_REQUIRE([AC_LIB_RPATH]) dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV dnl accordingly. AC_LIB_LINKFLAGS_BODY([iconv]) ]) AC_DEFUN([AM_ICONV_LINK], [ dnl Some systems have iconv in libc, some have it in libiconv (OSF/1 and dnl those with the standalone portable GNU libiconv installed). AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV dnl accordingly. AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY]) dnl Add $INCICONV to CPPFLAGS before performing the following checks, dnl because if the user has installed libiconv and not disabled its use dnl via --without-libiconv-prefix, he wants to use it. The first dnl AC_LINK_IFELSE will then fail, the second AC_LINK_IFELSE will succeed. am_save_CPPFLAGS="$CPPFLAGS" AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCICONV]) AC_CACHE_CHECK([for iconv], [am_cv_func_iconv], [ am_cv_func_iconv="no, consider installing GNU libiconv" am_cv_lib_iconv=no AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[ #include #include ]], [[iconv_t cd = iconv_open("",""); iconv(cd,NULL,NULL,NULL,NULL); iconv_close(cd);]])], [am_cv_func_iconv=yes]) if test "$am_cv_func_iconv" != yes; then am_save_LIBS="$LIBS" LIBS="$LIBS $LIBICONV" AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[ #include #include ]], [[iconv_t cd = iconv_open("",""); iconv(cd,NULL,NULL,NULL,NULL); iconv_close(cd);]])], [am_cv_lib_iconv=yes] [am_cv_func_iconv=yes]) LIBS="$am_save_LIBS" fi ]) if test "$am_cv_func_iconv" = yes; then AC_CACHE_CHECK([for working iconv], [am_cv_func_iconv_works], [ dnl This tests against bugs in AIX 5.1, AIX 6.1..7.1, HP-UX 11.11, dnl Solaris 10. am_save_LIBS="$LIBS" if test $am_cv_lib_iconv = yes; then LIBS="$LIBS $LIBICONV" fi AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include #include int main () { int result = 0; /* Test against AIX 5.1 bug: Failures are not distinguishable from successful returns. */ { iconv_t cd_utf8_to_88591 = iconv_open ("ISO8859-1", "UTF-8"); if (cd_utf8_to_88591 != (iconv_t)(-1)) { static const char input[] = "\342\202\254"; /* EURO SIGN */ char buf[10]; const char *inptr = input; size_t inbytesleft = strlen (input); char *outptr = buf; size_t outbytesleft = sizeof (buf); size_t res = iconv (cd_utf8_to_88591, (char **) &inptr, &inbytesleft, &outptr, &outbytesleft); if (res == 0) result |= 1; iconv_close (cd_utf8_to_88591); } } /* Test against Solaris 10 bug: Failures are not distinguishable from successful returns. */ { iconv_t cd_ascii_to_88591 = iconv_open ("ISO8859-1", "646"); if (cd_ascii_to_88591 != (iconv_t)(-1)) { static const char input[] = "\263"; char buf[10]; const char *inptr = input; size_t inbytesleft = strlen (input); char *outptr = buf; size_t outbytesleft = sizeof (buf); size_t res = iconv (cd_ascii_to_88591, (char **) &inptr, &inbytesleft, &outptr, &outbytesleft); if (res == 0) result |= 2; iconv_close (cd_ascii_to_88591); } } /* Test against AIX 6.1..7.1 bug: Buffer overrun. */ { iconv_t cd_88591_to_utf8 = iconv_open ("UTF-8", "ISO-8859-1"); if (cd_88591_to_utf8 != (iconv_t)(-1)) { static const char input[] = "\304"; static char buf[2] = { (char)0xDE, (char)0xAD }; const char *inptr = input; size_t inbytesleft = 1; char *outptr = buf; size_t outbytesleft = 1; size_t res = iconv (cd_88591_to_utf8, (char **) &inptr, &inbytesleft, &outptr, &outbytesleft); if (res != (size_t)(-1) || outptr - buf > 1 || buf[1] != (char)0xAD) result |= 4; iconv_close (cd_88591_to_utf8); } } #if 0 /* This bug could be worked around by the caller. */ /* Test against HP-UX 11.11 bug: Positive return value instead of 0. */ { iconv_t cd_88591_to_utf8 = iconv_open ("utf8", "iso88591"); if (cd_88591_to_utf8 != (iconv_t)(-1)) { static const char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337"; char buf[50]; const char *inptr = input; size_t inbytesleft = strlen (input); char *outptr = buf; size_t outbytesleft = sizeof (buf); size_t res = iconv (cd_88591_to_utf8, (char **) &inptr, &inbytesleft, &outptr, &outbytesleft); if ((int)res > 0) result |= 8; iconv_close (cd_88591_to_utf8); } } #endif /* Test against HP-UX 11.11 bug: No converter from EUC-JP to UTF-8 is provided. */ if (/* Try standardized names. */ iconv_open ("UTF-8", "EUC-JP") == (iconv_t)(-1) /* Try IRIX, OSF/1 names. */ && iconv_open ("UTF-8", "eucJP") == (iconv_t)(-1) /* Try AIX names. */ && iconv_open ("UTF-8", "IBM-eucJP") == (iconv_t)(-1) /* Try HP-UX names. */ && iconv_open ("utf8", "eucJP") == (iconv_t)(-1)) result |= 16; return result; }]])], [am_cv_func_iconv_works=yes], [am_cv_func_iconv_works=no], [ changequote(,)dnl case "$host_os" in aix* | hpux*) am_cv_func_iconv_works="guessing no" ;; *) am_cv_func_iconv_works="guessing yes" ;; esac changequote([,])dnl ]) LIBS="$am_save_LIBS" ]) case "$am_cv_func_iconv_works" in *no) am_func_iconv=no am_cv_lib_iconv=no ;; *) am_func_iconv=yes ;; esac else am_func_iconv=no am_cv_lib_iconv=no fi if test "$am_func_iconv" = yes; then AC_DEFINE([HAVE_ICONV], [1], [Define if you have the iconv() function and it works.]) fi if test "$am_cv_lib_iconv" = yes; then AC_MSG_CHECKING([how to link with libiconv]) AC_MSG_RESULT([$LIBICONV]) else dnl If $LIBICONV didn't lead to a usable library, we don't need $INCICONV dnl either. CPPFLAGS="$am_save_CPPFLAGS" LIBICONV= LTLIBICONV= fi AC_SUBST([LIBICONV]) AC_SUBST([LTLIBICONV]) ]) dnl Define AM_ICONV using AC_DEFUN_ONCE for Autoconf >= 2.64, in order to dnl avoid warnings like dnl "warning: AC_REQUIRE: `AM_ICONV' was expanded before it was required". dnl This is tricky because of the way 'aclocal' is implemented: dnl - It requires defining an auxiliary macro whose name ends in AC_DEFUN. dnl Otherwise aclocal's initial scan pass would miss the macro definition. dnl - It requires a line break inside the AC_DEFUN_ONCE and AC_DEFUN expansions. dnl Otherwise aclocal would emit many "Use of uninitialized value $1" dnl warnings. m4_define([gl_iconv_AC_DEFUN], m4_version_prereq([2.64], [[AC_DEFUN_ONCE( [$1], [$2])]], [m4_ifdef([gl_00GNULIB], [[AC_DEFUN_ONCE( [$1], [$2])]], [[AC_DEFUN( [$1], [$2])]])])) gl_iconv_AC_DEFUN([AM_ICONV], [ AM_ICONV_LINK if test "$am_cv_func_iconv" = yes; then AC_MSG_CHECKING([for iconv declaration]) AC_CACHE_VAL([am_cv_proto_iconv], [ AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[ #include #include extern #ifdef __cplusplus "C" #endif #if defined(__STDC__) || defined(_MSC_VER) || defined(__cplusplus) size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft); #else size_t iconv(); #endif ]], [[]])], [am_cv_proto_iconv_arg1=""], [am_cv_proto_iconv_arg1="const"]) am_cv_proto_iconv="extern size_t iconv (iconv_t cd, $am_cv_proto_iconv_arg1 char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);"]) am_cv_proto_iconv=`echo "[$]am_cv_proto_iconv" | tr -s ' ' | sed -e 's/( /(/'` AC_MSG_RESULT([ $am_cv_proto_iconv]) AC_DEFINE_UNQUOTED([ICONV_CONST], [$am_cv_proto_iconv_arg1], [Define as const if the declaration of iconv() needs const.]) dnl Also substitute ICONV_CONST in the gnulib generated . m4_ifdef([gl_ICONV_H_DEFAULTS], [AC_REQUIRE([gl_ICONV_H_DEFAULTS]) if test -n "$am_cv_proto_iconv_arg1"; then ICONV_CONST="const" fi ]) fi ]) gss-1.0.3/m4/wchar_t.m40000644000000000000000000000146212415507605011417 00000000000000# wchar_t.m4 serial 4 (gettext-0.18.2) dnl Copyright (C) 2002-2003, 2008-2014 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 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_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include 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 ]) gss-1.0.3/m4/po.m40000644000000000000000000004503712415507605010414 00000000000000# po.m4 serial 22 (gettext-0.19) dnl Copyright (C) 1995-2014 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 dnl This file can can be used in projects which are not available under dnl the GNU General Public License or the GNU Library General Public dnl License but which still want to provide support for the GNU gettext dnl functionality. dnl Please note that the actual code of the GNU gettext library is covered dnl by the GNU Library General Public License, and the rest of the GNU dnl gettext package package is covered by the GNU General Public License. dnl They are *not* in the public domain. dnl Authors: dnl Ulrich Drepper , 1995-2000. dnl Bruno Haible , 2000-2003. AC_PREREQ([2.60]) dnl Checks for all prerequisites of the po subdirectory. AC_DEFUN([AM_PO_SUBDIRS], [ AC_REQUIRE([AC_PROG_MAKE_SET])dnl AC_REQUIRE([AC_PROG_INSTALL])dnl AC_REQUIRE([AC_PROG_MKDIR_P])dnl AC_REQUIRE([AC_PROG_SED])dnl AC_REQUIRE([AM_NLS])dnl dnl Release version of the gettext macros. This is used to ensure that dnl the gettext macros and po/Makefile.in.in are in sync. AC_SUBST([GETTEXT_MACRO_VERSION], [0.19]) dnl Perform the following tests also if --disable-nls has been given, dnl because they are needed for "make dist" to work. dnl Search for GNU msgfmt in the PATH. dnl The first test excludes Solaris msgfmt and early GNU msgfmt versions. dnl The second test excludes FreeBSD msgfmt. AM_PATH_PROG_WITH_TEST(MSGFMT, msgfmt, [$ac_dir/$ac_word --statistics /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1 && (if $ac_dir/$ac_word --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi)], :) AC_PATH_PROG([GMSGFMT], [gmsgfmt], [$MSGFMT]) dnl Test whether it is GNU msgfmt >= 0.15. changequote(,)dnl case `$MSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) MSGFMT_015=: ;; *) MSGFMT_015=$MSGFMT ;; esac changequote([,])dnl AC_SUBST([MSGFMT_015]) changequote(,)dnl case `$GMSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) GMSGFMT_015=: ;; *) GMSGFMT_015=$GMSGFMT ;; esac changequote([,])dnl AC_SUBST([GMSGFMT_015]) dnl Search for GNU xgettext 0.12 or newer in the PATH. dnl The first test excludes Solaris xgettext and early GNU xgettext versions. dnl The second test excludes FreeBSD xgettext. AM_PATH_PROG_WITH_TEST(XGETTEXT, xgettext, [$ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1 && (if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi)], :) dnl Remove leftover from FreeBSD xgettext call. rm -f messages.po dnl Test whether it is GNU xgettext >= 0.15. changequote(,)dnl case `$XGETTEXT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) XGETTEXT_015=: ;; *) XGETTEXT_015=$XGETTEXT ;; esac changequote([,])dnl AC_SUBST([XGETTEXT_015]) dnl Search for GNU msgmerge 0.11 or newer in the PATH. AM_PATH_PROG_WITH_TEST(MSGMERGE, msgmerge, [$ac_dir/$ac_word --update -q /dev/null /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1], :) dnl Installation directories. dnl Autoconf >= 2.60 defines localedir. For older versions of autoconf, we dnl have to define it here, so that it can be used in po/Makefile. test -n "$localedir" || localedir='${datadir}/locale' AC_SUBST([localedir]) dnl Support for AM_XGETTEXT_OPTION. test -n "${XGETTEXT_EXTRA_OPTIONS+set}" || XGETTEXT_EXTRA_OPTIONS= AC_SUBST([XGETTEXT_EXTRA_OPTIONS]) AC_CONFIG_COMMANDS([po-directories], [[ for ac_file in $CONFIG_FILES; do # Support "outfile[:infile[:infile...]]" case "$ac_file" in *:*) ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; esac # PO directories have a Makefile.in generated from Makefile.in.in. case "$ac_file" in */Makefile.in) # Adjust a relative srcdir. ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'` ac_dir_suffix=/`echo "$ac_dir"|sed 's%^\./%%'` ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'` # In autoconf-2.13 it is called $ac_given_srcdir. # In autoconf-2.50 it is called $srcdir. test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir" case "$ac_given_srcdir" in .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;; /*) top_srcdir="$ac_given_srcdir" ;; *) top_srcdir="$ac_dots$ac_given_srcdir" ;; esac # Treat a directory as a PO directory if and only if it has a # POTFILES.in file. This allows packages to have multiple PO # directories under different names or in different locations. if test -f "$ac_given_srcdir/$ac_dir/POTFILES.in"; then rm -f "$ac_dir/POTFILES" test -n "$as_me" && echo "$as_me: creating $ac_dir/POTFILES" || echo "creating $ac_dir/POTFILES" gt_tab=`printf '\t'` cat "$ac_given_srcdir/$ac_dir/POTFILES.in" | sed -e "/^#/d" -e "/^[ ${gt_tab}]*\$/d" -e "s,.*, $top_srcdir/& \\\\," | sed -e "\$s/\(.*\) \\\\/\1/" > "$ac_dir/POTFILES" POMAKEFILEDEPS="POTFILES.in" # ALL_LINGUAS, POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES depend # on $ac_dir but don't depend on user-specified configuration # parameters. if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then # The LINGUAS file contains the set of available languages. if test -n "$OBSOLETE_ALL_LINGUAS"; then test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete" fi ALL_LINGUAS_=`sed -e "/^#/d" -e "s/#.*//" "$ac_given_srcdir/$ac_dir/LINGUAS"` # Hide the ALL_LINGUAS assignment from automake < 1.5. eval 'ALL_LINGUAS''=$ALL_LINGUAS_' POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS" else # The set of available languages was given in configure.in. # Hide the ALL_LINGUAS assignment from automake < 1.5. eval 'ALL_LINGUAS''=$OBSOLETE_ALL_LINGUAS' fi # Compute POFILES # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).po) # Compute UPDATEPOFILES # as $(foreach lang, $(ALL_LINGUAS), $(lang).po-update) # Compute DUMMYPOFILES # as $(foreach lang, $(ALL_LINGUAS), $(lang).nop) # Compute GMOFILES # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).gmo) case "$ac_given_srcdir" in .) srcdirpre= ;; *) srcdirpre='$(srcdir)/' ;; esac POFILES= UPDATEPOFILES= DUMMYPOFILES= GMOFILES= for lang in $ALL_LINGUAS; do POFILES="$POFILES $srcdirpre$lang.po" UPDATEPOFILES="$UPDATEPOFILES $lang.po-update" DUMMYPOFILES="$DUMMYPOFILES $lang.nop" GMOFILES="$GMOFILES $srcdirpre$lang.gmo" done # CATALOGS depends on both $ac_dir and the user's LINGUAS # environment variable. INST_LINGUAS= if test -n "$ALL_LINGUAS"; then for presentlang in $ALL_LINGUAS; do useit=no if test "%UNSET%" != "$LINGUAS"; then desiredlanguages="$LINGUAS" else desiredlanguages="$ALL_LINGUAS" fi for desiredlang in $desiredlanguages; do # Use the presentlang catalog if desiredlang is # a. equal to presentlang, or # b. a variant of presentlang (because in this case, # presentlang can be used as a fallback for messages # which are not translated in the desiredlang catalog). case "$desiredlang" in "$presentlang"*) useit=yes;; esac done if test $useit = yes; then INST_LINGUAS="$INST_LINGUAS $presentlang" fi done fi CATALOGS= if test -n "$INST_LINGUAS"; then for lang in $INST_LINGUAS; do CATALOGS="$CATALOGS $lang.gmo" done fi test -n "$as_me" && echo "$as_me: creating $ac_dir/Makefile" || echo "creating $ac_dir/Makefile" sed -e "/^POTFILES =/r $ac_dir/POTFILES" -e "/^# Makevars/r $ac_given_srcdir/$ac_dir/Makevars" -e "s|@POFILES@|$POFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@POMAKEFILEDEPS@|$POMAKEFILEDEPS|g" "$ac_dir/Makefile.in" > "$ac_dir/Makefile" for f in "$ac_given_srcdir/$ac_dir"/Rules-*; do if test -f "$f"; then case "$f" in *.orig | *.bak | *~) ;; *) cat "$f" >> "$ac_dir/Makefile" ;; esac fi done fi ;; esac done]], [# Capture the value of obsolete ALL_LINGUAS because we need it to compute # POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES, CATALOGS. But hide it # from automake < 1.5. eval 'OBSOLETE_ALL_LINGUAS''="$ALL_LINGUAS"' # Capture the value of LINGUAS because we need it to compute CATALOGS. LINGUAS="${LINGUAS-%UNSET%}" ]) ]) dnl Postprocesses a Makefile in a directory containing PO files. AC_DEFUN([AM_POSTPROCESS_PO_MAKEFILE], [ # When this code is run, in config.status, two variables have already been # set: # - OBSOLETE_ALL_LINGUAS is the value of LINGUAS set in configure.in, # - LINGUAS is the value of the environment variable LINGUAS at configure # time. changequote(,)dnl # Adjust a relative srcdir. ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'` ac_dir_suffix=/`echo "$ac_dir"|sed 's%^\./%%'` ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'` # In autoconf-2.13 it is called $ac_given_srcdir. # In autoconf-2.50 it is called $srcdir. test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir" case "$ac_given_srcdir" in .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;; /*) top_srcdir="$ac_given_srcdir" ;; *) top_srcdir="$ac_dots$ac_given_srcdir" ;; esac # Find a way to echo strings without interpreting backslash. if test "X`(echo '\t') 2>/dev/null`" = 'X\t'; then gt_echo='echo' else if test "X`(printf '%s\n' '\t') 2>/dev/null`" = 'X\t'; then gt_echo='printf %s\n' else echo_func () { cat < "$ac_file.tmp" tab=`printf '\t'` if grep -l '@TCLCATALOGS@' "$ac_file" > /dev/null; then # Add dependencies that cannot be formulated as a simple suffix rule. for lang in $ALL_LINGUAS; do frobbedlang=`echo $lang | sed -e 's/\..*$//' -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'` cat >> "$ac_file.tmp" < /dev/null; then # Add dependencies that cannot be formulated as a simple suffix rule. for lang in $ALL_LINGUAS; do frobbedlang=`echo $lang | sed -e 's/_/-/g' -e 's/^sr-CS/sr-SP/' -e 's/@latin$/-Latn/' -e 's/@cyrillic$/-Cyrl/' -e 's/^sr-SP$/sr-SP-Latn/' -e 's/^uz-UZ$/uz-UZ-Latn/'` cat >> "$ac_file.tmp" <> "$ac_file.tmp" < in . ** API and ABI modifications. GSS_KRB5_NT_MACHINE_UID_NAME: ADDED GSS_KRB5_NT_MACHINE_UID_NAME_static: ADDED gss_alloc_fail_function: REMOVED gss_krb5*: REMOVED GSS_VERSION_MAJOR: ADDED GSS_VERSION_MINOR: ADDED GSS_VERSION_PATCH: ADDED GSS_VERSION_NUMBER: ADDED * Version 0.0.26 (released 2009-03-27) ** libgss: The library will now return error codes when out of memory. The gss_alloc_fail_function variable is no longer declared, but is still available in the library for ABI compatibility. ** libgss: Use a LD version script on platforms where it is supported. Currently only GNU LD and the Solaris linker supports it. This helps Debian package tools to produce better dependencies. Before we used Libtool -export-symbols-regex that created an anonymous version tag. We use -export-symbols-regex when the system does not support LD version scripts, but that only affect symbol visibility. ** API and ABI modifications. gss_alloc_fail_function: No longer declared in header file. * Version 0.0.25 (released 2009-02-26) ** gss: Improve --help and --version output. ** doc: Change license on the manual to GFDLv1.3+. ** More compiler warnings enabled, and many warnings fixed. ** API and ABI modifications. No changes since last version. * Version 0.0.24 (released 2008-09-10) ** Fix non-portable use of brace expansion in makefiles. ** Update gnulib files. ** Fix some warnings and make distcheck build the software with -Werror. ** Translations files not stored directly in git to avoid merge conflicts. This allows us to avoid use of --no-location which makes the translation teams happier. ** API and ABI modifications. No changes since last version. * Version 0.0.23 (released 2007-12-19) ** Use gettext 0.17. ** Update gnulib files. ** API and ABI modifications. No changes since last version. * Version 0.0.22 (released 2007-06-29) ** GSS is now licensed under the GPL version 3 or later. ** GSS is now developed using Git instead of CVS. A public git mirror is available from . ** API and ABI modifications. No changes since last version. * Version 0.0.21 (released 2007-05-22) ** Fix 'make distclean'. Now src/gss_cmd.c and src/gss_cmd.h is only removed by 'make maintainer-clean'. Thanks to Bernd Zeimetz and Russ Allbery . ** Gnulib file update. ** API and ABI modifications. No changes since last version. * Version 0.0.20 (released 2007-04-16) ** Gnulib file update. ** API and ABI modifications. No changes since last version. * Version 0.0.19 (released 2007-01-09) ** Corrected years in copyright notices. ** Fixed a 64-bit bug in asn1.c:gss_decapsulate_token(). The bug resulted in 'make check' failures on AMD64 systems. Reported by Kurt Roeckx . ** Now autoconf 2.61, automake 1.10, and gettext 0.16 is required. ** Gnulib file update. ** API and ABI modifications. No changes since last version. * Version 0.0.18 (released 2006-11-06) ** Kerberos V5 gss_acquire_cred doesn't use the default realm when looking ** for hostkeys. This was the reason that 'make check' failed earlier. ** Gnulib file update, including a rewrite of `gss_check_version'. ** API and ABI modifications. No changes since last version. * Version 0.0.17 (released 2006-04-30) ** Debian packages are available from http://josefsson.org/gss/debian/ ** The library is linked with -no-undefined, for mingw32 cross compiles. ** The link test for Shishi was improved. ** Gnulib files were updated. ** API and ABI modifications. No changes since last version. * Version 0.0.16 (released 2005-08-11) ** Kinyarwanda translation added, by Steve Murphy. ** The help-gss@gnu.org mailing list is now mentioned in documentation. ** The license template in files were updated with the new FSF address. ** API and ABI modifications. gss_release_oid: REMOVED. It seem it was the wrong thing to export this API, although the underlaying question (who is responsible for managing dynamically allocated OIDs? How?) is still unanswered. * Version 0.0.15 (released 2004-11-22) ** Documentation improvements. For example, you can now browse the GSS manual using DevHelp. ** Libtool's -export-symbols-regex is now used to only export official APIs. Before, applications might accidentally access internal functions. Note that this is not supported on all platforms, so you must still make sure you are not using undocumented symbols in GSS. * Version 0.0.14 (released 2004-10-15) ** gss_import_name and gss_duplicate_name no longer clone the OID. Instead, only the pointer to the OID is cloned. It seem unclear where a cloned OID would be deallocated. ** Fixed handling of sequence numbers in gss_accept_sec_context, for servers. ** Fix crash in gss_accept_sec_context for NULL values of ret_flags. ** Fix memory leaks. ** Sync with new Shishi 0.0.18 API. * Version 0.0.13 (released 2004-08-08) ** Revamp of gnulib compatibility files. ** More translations. French (by Michel Robitaille) and Romanian (by Laurentiu Buzdugan). * Version 0.0.12 (released 2004-08-01) ** Added rudimentary self tests of Kerberos 5 context init/accept. Tests client and server authentication, with and without mutual authentication, and that various aspects of the API like ret_flags work. ** Various fixes, discovered while writing the Kerberos 5 self test. ** Cross compile builds should work. It should work for any sane cross compile target, but the only tested platform is uClibc/uClinux on Motorola Coldfire. * Version 0.0.11 (released 2004-04-18) ** Minor cleanups to the core header file. Using xom.h is no longer supported (the file doesn't exist on modern systems). ** Kerberos 5 sequence number handling fixed. First, gss_init_sec_context set the sequence numbers correctly, before the incorrect sequence numbers prevented gss_(un)wrap from working correctly. Secondly, gss_unwrap now check the sequence numbers correctly. This was prompted by the addition of randomized sequence numbers by default in Shishi 0.0.15. ** The compatibility files in gl/ where synced with Gnulib. ** Various bugfixes and cleanups. ** Polish translation added, by Jakub Bogusz. * Version 0.0.10 (released 2004-01-22) ** A command line tool "gss" added in src/. The tool can be used to split up an GSS-API error code into the calling error, the routine error and the supplementary info bits, and to print text describing the error condition. ** gss_display_status can return multiple description texts (using context). ** The Swedish translation has been updated. ** Various cleanups and improvements. * Version 0.0.9 (released 2004-01-15) ** Implemented gss_export_name and gss_krb5_inquire_cred_by_mech. The Kerberos 5 backend also support them. ** gss_inquire_cred support default credentials. ** Kerberos 5 gss_canonicalize_name now support all mandatory name types. ** Kerberos 5 gss_accept_sec_context now support sub-session keys in AP-REQ. ** Added new extended function API: gss_userok. This is the same as invoking gss_export_name on a name, removing the OID, and then comparing the remaining material using memcmp. ** API documentation in HTML format from GTK-DOC included in doc/reference/. * Version 0.0.8 (released 2004-01-11) ** Moved all backend specific code into sub-directories of lib/. This means everything related to the Kerberos 5 backend is now located in lib/krb5/. The backend is built into its own library (libgss-shishi.so), to facilitate future possible use of dlopen to dynamically load backends. ** The gss_duplicate_name function now allocate the output result properly. ** Man pages for all public functions are included. ** Documentation fixes. For example, all official APIs are now documented. * Version 0.0.7 (released 2003-11-26) ** Fixed typo that broke gss_wrap for 3DES with Kerberos 5. ** Improvements to build environment. The gss.h header file no longer include gss/krb5.h when the Kerberos 5 mechanism is disabled. ** Autoconf 2.59, Automake 1.8 beta, Libtool CVS used. * Version 0.0.6 (released 2003-09-22) ** Update for Shishi 0.0.7 API. * Version 0.0.5 (released 2003-08-31) ** Kerberos 5: Subkeys are supported. Shishi 0.0.4 required. ** Bug fixes. * Version 0.0.4 (released 2003-08-10) ** GSS is a GNU project. ** Kerberos 5 crypto fixes. This release accompany Shishi 0.0.1. * Version 0.0.3 (released 2003-07-02) ** Includes compatibility functionality from gnulib in gl/. ** Documentation improvements. The file README-alpha contains some hints for binary packagers. Essentially, don't distribute shared libraries, as this package is too immature to bump the shared object version for every modification currently. ** Bugfixes and cleanups. * Version 0.0.2 (released 2003-06-28) ** Server mode works (a little). GNU MailUtils can use GSS for its native GSSAPI authentication in server mode, which then interoperate with (at least) the GNU SASL command line client using GSS. ** Memory allocated via xalloc from gnulib. This takes care of out of memory errors, see the new section in the manual named "Out of Memory handling". * Version 0.0.1 (released 2003-06-12) ** Error handling. ** Swedish translation. ** Improved manual. ** Bug fixes. * Version 0.0.0 (released 2003-06-02) ** Initial release. The source code framework is in place, an outline of the documentation is ready, and there are some simple self tests. The Kerberos 5 mechanism (RFC 1964) supports mutual authentication and the standard DES cipher. The non-standard 3DES cipher is also implemented, but unfortunately there are no specifications for AES. GNU SASL can use this version to connect to GNU Mailutils and Cyrus IMAP servers that use the GSS implementations from MIT Kerberos or Heimdal. Server mode is not supported yet. ---------------------------------------------------------------------- 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.