summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--CHANGES28
-rw-r--r--Makefile.in8
-rw-r--r--bin/dnssec/dnssec-dsfromkey.c8
-rw-r--r--bin/named/config.c9
-rw-r--r--bin/named/include/named/zoneconf.h6
-rw-r--r--bin/named/named.conf.53
-rw-r--r--bin/named/named.conf.docbook3
-rw-r--r--bin/named/named.conf.html7
-rw-r--r--bin/named/query.c82
-rw-r--r--bin/named/server.c125
-rw-r--r--bin/named/update.c1209
-rw-r--r--bin/named/zoneconf.c203
-rw-r--r--bin/tests/adb_test.c11
-rw-r--r--bin/tests/cfg_test.c6
-rw-r--r--bin/tests/db_test.c13
-rwxr-xr-xbin/tests/dst/gsstest.c33
-rw-r--r--bin/tests/log_test.c4
-rw-r--r--bin/tests/nsecify.c5
-rw-r--r--bin/tests/printmsg.c53
-rw-r--r--bin/tests/rbt_test.c7
-rw-r--r--bin/tests/rdata_test.c19
-rw-r--r--bin/tests/shutdown_test.c8
-rw-r--r--bin/tests/startperf/README16
-rw-r--r--bin/tests/startperf/clean.sh20
-rw-r--r--bin/tests/startperf/makenames.pl8
-rw-r--r--bin/tests/startperf/mkzonefile.pl51
-rw-r--r--bin/tests/startperf/setup.sh31
-rw-r--r--bin/tests/system/cacheclean/tests.sh54
-rw-r--r--bin/tests/system/conf.sh.in4
-rw-r--r--bin/tests/system/dnssec/tests.sh8
-rw-r--r--bin/tests/system/inline/clean.sh27
-rw-r--r--bin/tests/system/inline/ns1/named.conf42
-rw-r--r--bin/tests/system/inline/ns2/bits.db.in134
-rw-r--r--bin/tests/system/inline/ns2/named.conf40
-rw-r--r--bin/tests/system/inline/ns3/named.conf55
-rw-r--r--bin/tests/system/inline/ns3/sign.sh34
-rw-r--r--bin/tests/system/inline/ns4/named.conf40
-rw-r--r--bin/tests/system/inline/ns4/noixfr.db.in134
-rw-r--r--bin/tests/system/inline/setup.sh39
-rw-r--r--bin/tests/system/inline/tests.sh329
-rw-r--r--bin/tests/system/ixfr/clean.sh6
-rw-r--r--bin/tests/system/ixfr/ns3/mytest0.db31
-rw-r--r--bin/tests/system/ixfr/ns3/mytest1.db31
-rw-r--r--bin/tests/system/ixfr/ns3/mytest2.db31
-rw-r--r--bin/tests/system/ixfr/ns3/named.conf53
-rw-r--r--bin/tests/system/ixfr/ns3/subtest0.db29
-rw-r--r--bin/tests/system/ixfr/ns3/subtest1.db29
-rw-r--r--bin/tests/system/ixfr/ns4/named.conf54
-rw-r--r--bin/tests/system/ixfr/setup.sh10
-rw-r--r--bin/tests/system/ixfr/tests.sh70
-rw-r--r--bin/tests/system/upforwd/ans4/ans.pl351
-rw-r--r--bin/tests/system/upforwd/ns3/named.conf11
-rw-r--r--bin/tests/system/upforwd/ns3/nomaster.db19
-rw-r--r--bin/tests/system/upforwd/setup.sh5
-rw-r--r--bin/tests/system/upforwd/tests.sh25
-rw-r--r--contrib/dlz/drivers/sdlz_helper.c4
-rw-r--r--doc/arm/Bv9ARM-book.xml23
-rw-r--r--doc/arm/Bv9ARM.ch04.html42
-rw-r--r--doc/arm/Bv9ARM.ch06.html70
-rw-r--r--doc/arm/Bv9ARM.ch07.html14
-rw-r--r--doc/arm/Bv9ARM.ch08.html18
-rw-r--r--doc/arm/Bv9ARM.ch09.html220
-rw-r--r--doc/arm/Bv9ARM.html64
-rwxr-xr-xdoc/arm/Bv9ARM.pdf3530
-rw-r--r--doc/arm/man.arpaname.html8
-rw-r--r--doc/arm/man.ddns-confgen.html10
-rw-r--r--doc/arm/man.dig.html20
-rw-r--r--doc/arm/man.dnssec-dsfromkey.html16
-rw-r--r--doc/arm/man.dnssec-keyfromlabel.html14
-rw-r--r--doc/arm/man.dnssec-keygen.html16
-rw-r--r--doc/arm/man.dnssec-revoke.html10
-rw-r--r--doc/arm/man.dnssec-settime.html14
-rw-r--r--doc/arm/man.dnssec-signzone.html12
-rw-r--r--doc/arm/man.genrandom.html10
-rw-r--r--doc/arm/man.host.html10
-rw-r--r--doc/arm/man.isc-hmac-fixup.html10
-rw-r--r--doc/arm/man.named-checkconf.html12
-rw-r--r--doc/arm/man.named-checkzone.html12
-rw-r--r--doc/arm/man.named-journalprint.html8
-rw-r--r--doc/arm/man.named.html16
-rw-r--r--doc/arm/man.nsec3hash.html10
-rw-r--r--doc/arm/man.nsupdate.html14
-rw-r--r--doc/arm/man.rndc-confgen.html12
-rw-r--r--doc/arm/man.rndc.conf.html12
-rw-r--r--doc/arm/man.rndc.html12
-rw-r--r--doc/misc/options8
-rw-r--r--lib/bind9/check.c23
-rw-r--r--lib/dns/cache.c20
-rw-r--r--lib/dns/dnssec.c6
-rw-r--r--lib/dns/dst_api.c6
-rw-r--r--lib/dns/gssapictx.c20
-rw-r--r--lib/dns/include/dns/events.h7
-rw-r--r--lib/dns/include/dns/journal.h27
-rw-r--r--lib/dns/include/dns/update.h14
-rw-r--r--lib/dns/include/dns/view.h13
-rw-r--r--lib/dns/include/dns/zone.h59
-rw-r--r--lib/dns/include/dns/zt.h36
-rw-r--r--lib/dns/journal.c83
-rw-r--r--lib/dns/masterdump.c7
-rw-r--r--lib/dns/rbt.c6
-rw-r--r--lib/dns/rdataset.c8
-rw-r--r--lib/dns/spnego.c13
-rw-r--r--lib/dns/tests/Makefile.in15
-rw-r--r--lib/dns/tests/dbiterator_test.c11
-rw-r--r--lib/dns/tests/dnstest.c136
-rw-r--r--lib/dns/tests/dnstest.h33
-rw-r--r--lib/dns/tests/master_test.c57
-rw-r--r--lib/dns/tests/testdata/zt/zone1.db27
-rw-r--r--lib/dns/tests/zonemgr_test.c39
-rw-r--r--lib/dns/tests/zt_test.c262
-rw-r--r--lib/dns/tsig.c26
-rw-r--r--lib/dns/update.c1831
-rw-r--r--lib/dns/view.c18
-rw-r--r--lib/dns/win32/libdns.def5
-rw-r--r--lib/dns/xfrin.c5
-rw-r--r--lib/dns/zone.c736
-rw-r--r--lib/dns/zt.c101
-rw-r--r--lib/isc/include/isc/list.h17
-rw-r--r--lib/isc/include/isc/namespace.h7
-rw-r--r--lib/isc/include/isc/task.h64
-rw-r--r--lib/isc/include/isc/taskpool.h15
-rw-r--r--lib/isc/include/isc/util.h12
-rw-r--r--lib/isc/task.c275
-rw-r--r--lib/isc/task_api.c32
-rw-r--r--lib/isc/task_p.h12
-rw-r--r--lib/isc/taskpool.c15
-rw-r--r--lib/isc/tests/Makefile.in12
-rw-r--r--lib/isc/tests/isctest.c25
-rw-r--r--lib/isc/tests/isctest.h4
-rw-r--r--lib/isc/tests/socket_test.c20
-rw-r--r--lib/isc/tests/task_test.c411
-rw-r--r--lib/isc/tests/taskpool_test.c52
-rw-r--r--lib/isc/unix/socket.c6
-rw-r--r--lib/isc/win32/libisc.def5
-rw-r--r--lib/isccfg/aclconf.c4
-rw-r--r--lib/isccfg/namedconf.c4
-rw-r--r--lib/lwres/getnameinfo.c33
-rw-r--r--lib/lwres/lwinetpton.c13
-rw-r--r--make/rules.in4
-rw-r--r--unit/atf-src/Makefile.am3
-rw-r--r--unit/atf-src/Makefile.in3
-rw-r--r--unit/unittest.sh.in11
-rw-r--r--version4
143 files changed, 8771 insertions, 3864 deletions
diff --git a/CHANGES b/CHANGES
index 00e1411a..8421fb4d 100644
--- a/CHANGES
+++ b/CHANGES
@@ -1,3 +1,31 @@
+
+ --- 9.9.0a2 released ---
+
+3155. [bug] Fixed a build failure when using contrib DLZ
+ drivers (e.g., mysql, postgresql, etc). [RT #25710]
+
+3154. [bug] Attempting to print an empty rdataset could trigger
+ an assert. [RT #25452]
+
+3153. [func] Extend request-ixfr to zone level and remove the
+ side effect of forcing an AXFR. [RT #25156]
+
+3152. [cleanup] Some versions of gcc and clang failed due to
+ incorrect use of __builtin_expect. [RT #25183]
+
+3151. [bug] Queries for type RRSIG or SIG could be handled
+ incorrectly. [RT #21050]
+
+3150. [func] Improved startup and reconfiguration time by
+ enabling zones to load in multiple threads. [RT #25333]
+
+3149. [placeholder]
+
+3148. [bug] Processing of normal queries could be stalled when
+ forwarding a UPDATE message. [RT #24711]
+
+3147. [func] Initial inline signing support. [RT #23657]
+
--- 9.9.0a1 released ---
3146. [test] Fixed gcc4.6.0 errors in ATF. [RT #25598]
diff --git a/Makefile.in b/Makefile.in
index 8b8c7238..27c9d7cc 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -13,7 +13,7 @@
# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
# PERFORMANCE OF THIS SOFTWARE.
-# $Id: Makefile.in,v 1.60 2011-03-01 23:48:05 tbox Exp $
+# $Id: Makefile.in,v 1.62 2011-09-06 04:06:37 marka Exp $
srcdir = @srcdir@
VPATH = @srcdir@
@@ -64,8 +64,10 @@ tags:
check: test
test:
- (cd bin/tests && ${MAKE} ${MAKEDEFS} test)
- (test -f unit/unittest.sh && $(SHELL) unit/unittest.sh)
+ status=0; \
+ (cd bin/tests && ${MAKE} ${MAKEDEFS} test) || status=1; \
+ (test -f unit/unittest.sh && $(SHELL) unit/unittest.sh) || status=1; \
+ exit $$status
FAQ: FAQ.xml
${XSLTPROC} doc/xsl/isc-docbook-text.xsl FAQ.xml | \
diff --git a/bin/dnssec/dnssec-dsfromkey.c b/bin/dnssec/dnssec-dsfromkey.c
index 78ac939c..75ea71ab 100644
--- a/bin/dnssec/dnssec-dsfromkey.c
+++ b/bin/dnssec/dnssec-dsfromkey.c
@@ -14,7 +14,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: dnssec-dsfromkey.c,v 1.22 2011-08-18 04:52:35 marka Exp $ */
+/* $Id: dnssec-dsfromkey.c,v 1.23 2011-09-03 05:51:29 each Exp $ */
/*! \file */
@@ -292,10 +292,10 @@ emit(unsigned int dtype, isc_boolean_t showall, char *lookaside,
fatal("can't print class");
isc_buffer_usedregion(&nameb, &r);
- printf("%.*s ", (int)r.length, r.base);
+ printf("%.*s ", (int)r.length, r.base);
isc_buffer_usedregion(&classb, &r);
- printf("%.*s", (int)r.length, r.base);
+ printf("%.*s", (int)r.length, r.base);
if (lookaside == NULL)
printf(" DS ");
@@ -303,7 +303,7 @@ emit(unsigned int dtype, isc_boolean_t showall, char *lookaside,
printf(" DLV ");
isc_buffer_usedregion(&textb, &r);
- printf("%.*s\n", (int)r.length, r.base);
+ printf("%.*s\n", (int)r.length, r.base);
}
ISC_PLATFORM_NORETURN_PRE static void
diff --git a/bin/named/config.c b/bin/named/config.c
index f04c7023..91e3eb2a 100644
--- a/bin/named/config.c
+++ b/bin/named/config.c
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: config.c,v 1.119 2011-07-01 02:25:47 marka Exp $ */
+/* $Id: config.c,v 1.121 2011-08-30 23:46:51 tbox Exp $ */
/*! \file */
@@ -199,6 +199,7 @@ options {\n\
sig-signing-nodes 100;\n\
sig-signing-signatures 10;\n\
sig-signing-type 65534;\n\
+ inline-signing no;\n\
zone-statistics false;\n\
max-journal-size unlimited;\n\
ixfr-from-differences false;\n\
@@ -294,7 +295,8 @@ ns_checknames_get(const cfg_obj_t **maps, const char *which,
if (maps[i] == NULL)
return (ISC_R_NOTFOUND);
checknames = NULL;
- if (cfg_map_get(maps[i], "check-names", &checknames) == ISC_R_SUCCESS) {
+ if (cfg_map_get(maps[i], "check-names",
+ &checknames) == ISC_R_SUCCESS) {
/*
* Zone map entry is not a list.
*/
@@ -307,7 +309,8 @@ ns_checknames_get(const cfg_obj_t **maps, const char *which,
element = cfg_list_next(element)) {
value = cfg_listelt_value(element);
type = cfg_tuple_get(value, "type");
- if (strcasecmp(cfg_obj_asstring(type), which) == 0) {
+ if (strcasecmp(cfg_obj_asstring(type),
+ which) == 0) {
*obj = cfg_tuple_get(value, "mode");
return (ISC_R_SUCCESS);
}
diff --git a/bin/named/include/named/zoneconf.h b/bin/named/include/named/zoneconf.h
index 65cf72f9..463729c7 100644
--- a/bin/named/include/named/zoneconf.h
+++ b/bin/named/include/named/zoneconf.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004-2007, 2010 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004-2007, 2010, 2011 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 1999-2002 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: zoneconf.h,v 1.28 2010-12-20 23:47:20 tbox Exp $ */
+/* $Id: zoneconf.h,v 1.30 2011-08-30 23:46:51 tbox Exp $ */
#ifndef NS_ZONECONF_H
#define NS_ZONECONF_H 1
@@ -33,7 +33,7 @@ ISC_LANG_BEGINDECLS
isc_result_t
ns_zone_configure(const cfg_obj_t *config, const cfg_obj_t *vconfig,
const cfg_obj_t *zconfig, cfg_aclconfctx_t *ac,
- dns_zone_t *zone);
+ dns_zone_t *zone, dns_zone_t *raw);
/*%<
* Configure or reconfigure a zone according to the named.conf
* data in 'cctx' and 'czone'.
diff --git a/bin/named/named.conf.5 b/bin/named/named.conf.5
index f1776fe0..71979ea3 100644
--- a/bin/named/named.conf.5
+++ b/bin/named/named.conf.5
@@ -12,7 +12,7 @@
.\" OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
.\" PERFORMANCE OF THIS SOFTWARE.
.\"
-.\" $Id: named.conf.5,v 1.47 2011-05-09 01:14:45 tbox Exp $
+.\" $Id: named.conf.5,v 1.48 2011-09-07 01:14:42 tbox Exp $
.\"
.hy 0
.ad l
@@ -564,6 +564,7 @@ zone \fIstring\fR \fIoptional_class\fR {
max\-refresh\-time \fIinteger\fR;
min\-refresh\-time \fIinteger\fR;
multi\-master \fIboolean\fR;
+ request\-ixfr \fIboolean\fR;
sig\-validity\-interval \fIinteger\fR;
transfer\-source ( \fIipv4_address\fR | * )
[ port ( \fIinteger\fR | * ) ];
diff --git a/bin/named/named.conf.docbook b/bin/named/named.conf.docbook
index 72a47cdb..eb48d25a 100644
--- a/bin/named/named.conf.docbook
+++ b/bin/named/named.conf.docbook
@@ -17,7 +17,7 @@
- PERFORMANCE OF THIS SOFTWARE.
-->
-<!-- $Id: named.conf.docbook,v 1.52 2011-05-06 21:23:50 each Exp $ -->
+<!-- $Id: named.conf.docbook,v 1.53 2011-09-06 22:29:32 smann Exp $ -->
<refentry>
<refentryinfo>
<date>Aug 13, 2004</date>
@@ -630,6 +630,7 @@ zone <replaceable>string</replaceable> <replaceable>optional_class</replaceable>
max-refresh-time <replaceable>integer</replaceable>;
min-refresh-time <replaceable>integer</replaceable>;
multi-master <replaceable>boolean</replaceable>;
+ request-ixfr <replaceable>boolean</replaceable>;
sig-validity-interval <replaceable>integer</replaceable>;
transfer-source ( <replaceable>ipv4_address</replaceable> | * )
diff --git a/bin/named/named.conf.html b/bin/named/named.conf.html
index 82265c56..833eaedb 100644
--- a/bin/named/named.conf.html
+++ b/bin/named/named.conf.html
@@ -13,7 +13,7 @@
- OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- PERFORMANCE OF THIS SOFTWARE.
-->
-<!-- $Id: named.conf.html,v 1.56 2011-05-09 01:14:45 tbox Exp $ -->
+<!-- $Id: named.conf.html,v 1.57 2011-09-07 01:14:42 tbox Exp $ -->
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
@@ -594,6 +594,7 @@ zone <em class="replaceable"><code>string</code></em> <em class="replaceable"><c
max-refresh-time <em class="replaceable"><code>integer</code></em>;<br>
min-refresh-time <em class="replaceable"><code>integer</code></em>;<br>
multi-master <em class="replaceable"><code>boolean</code></em>;<br>
+ request-ixfr <em class="replaceable"><code>boolean</code></em>;<br>
sig-validity-interval <em class="replaceable"><code>integer</code></em>;<br>
<br>
transfer-source ( <em class="replaceable"><code>ipv4_address</code></em> | * )<br>
@@ -622,12 +623,12 @@ zone <em class="replaceable"><code>string</code></em> <em class="replaceable"><c
</p></div>
</div>
<div class="refsect1" lang="en">
-<a name="id2545678"></a><h2>FILES</h2>
+<a name="id2545682"></a><h2>FILES</h2>
<p><code class="filename">/etc/named.conf</code>
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2545690"></a><h2>SEE ALSO</h2>
+<a name="id2545693"></a><h2>SEE ALSO</h2>
<p><span class="citerefentry"><span class="refentrytitle">named</span>(8)</span>,
<span class="citerefentry"><span class="refentrytitle">named-checkconf</span>(8)</span>,
<span class="citerefentry"><span class="refentrytitle">rndc</span>(8)</span>,
diff --git a/bin/named/query.c b/bin/named/query.c
index 5a0c30fb..96c01e98 100644
--- a/bin/named/query.c
+++ b/bin/named/query.c
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: query.c,v 1.367 2011-06-09 03:10:17 marka Exp $ */
+/* $Id: query.c,v 1.369 2011-09-02 23:46:31 tbox Exp $ */
/*! \file */
@@ -5771,7 +5771,7 @@ query_find(ns_client_t *client, dns_fetchevent_t *event, dns_rdatatype_t qtype)
case DNS_R_EMPTYNAME:
case DNS_R_NXRRSET:
- nxrrset:
+ iszone_nxrrset:
INSIST(is_zone);
#ifdef dns64_bis_return_excluded_addresses
@@ -5838,6 +5838,7 @@ query_find(ns_client_t *client, dns_fetchevent_t *event, dns_rdatatype_t qtype)
/*
* Look for a NSEC3 record if we don't have a NSEC record.
*/
+ nxrrset_rrsig:
if (!dns_rdataset_isassociated(rdataset) &&
WANTDNSSEC(client)) {
if ((fname->attributes & DNS_NAMEATTR_WILDCARD) == 0) {
@@ -5966,6 +5967,7 @@ query_find(ns_client_t *client, dns_fetchevent_t *event, dns_rdatatype_t qtype)
*/
query_releasename(client, &fname);
}
+
/*
* Add SOA. If the query was for a SOA record force the
* ttl to zero so that it is possible for clients to find
@@ -6477,68 +6479,42 @@ query_find(ns_client_t *client, dns_fetchevent_t *event, dns_rdatatype_t qtype)
if (fname != NULL)
dns_message_puttempname(client->message, &fname);
- if (n == 0 && is_zone) {
+ if (n == 0) {
/*
- * We didn't match any rdatasets.
+ * No matching rdatasets found in cache. If we were
+ * searching for RRSIG/SIG, that's probably okay;
+ * otherwise this is an error condition.
*/
if ((qtype == dns_rdatatype_rrsig ||
qtype == dns_rdatatype_sig) &&
result == ISC_R_NOMORE) {
- /*
- * XXXRTH If this is a secure zone and we
- * didn't find any SIGs, we should generate
- * an error unless we were searching for
- * glue. Ugh.
- */
if (!is_zone) {
- /*
- * Note: this is dead code because
- * is_zone is always true due to the
- * condition above. But naive
- * recursion would cause infinite
- * attempts of recursion because
- * the answer to (RR)SIG queries
- * won't be cached. Until we figure
- * out what we should do and implement
- * it we intentionally keep this code
- * dead.
- */
authoritative = ISC_FALSE;
dns_rdatasetiter_destroy(&rdsiter);
- if (RECURSIONOK(client)) {
- result = query_recurse(client,
- qtype,
- client->query.qname,
- NULL, NULL,
- resuming);
- if (result == ISC_R_SUCCESS)
- client->query.attributes |=
- NS_QUERYATTR_RECURSING;
- else
- RECURSE_ERROR(result);
- }
+ client->attributes &= ~NS_CLIENTATTR_RA;
goto addauth;
}
- /*
- * We were searching for SIG records in
- * a nonsecure zone. Send a "no error,
- * no data" response.
- */
- /*
- * Add SOA.
- */
- result = query_addsoa(client, db, version,
- ISC_UINT32_MAX,
- ISC_FALSE);
- if (result == ISC_R_SUCCESS)
- result = ISC_R_NOMORE;
- } else {
- /*
- * Something went wrong.
- */
+
+ if (dns_db_issecure(db)) {
+ char namebuf[DNS_NAME_FORMATSIZE];
+ dns_name_format(client->query.qname,
+ namebuf,
+ sizeof(namebuf));
+ ns_client_log(client,
+ DNS_LOGCATEGORY_DNSSEC,
+ NS_LOGMODULE_QUERY,
+ ISC_LOG_WARNING,
+ "missing signature "
+ "for %s", namebuf);
+ }
+
+ dns_rdatasetiter_destroy(&rdsiter);
+ fname = query_newname(client, dbuf, &b);
+ goto nxrrset_rrsig;
+ } else
result = DNS_R_SERVFAIL;
- }
}
+
dns_rdatasetiter_destroy(&rdsiter);
if (result != ISC_R_NOMORE) {
QUERY_ERROR(DNS_R_SERVFAIL);
@@ -6741,7 +6717,7 @@ query_find(ns_client_t *client, dns_fetchevent_t *event, dns_rdatatype_t qtype)
}
#endif
if (is_zone)
- goto nxrrset;
+ goto iszone_nxrrset;
else
goto ncache_nxrrset;
} else if (result != ISC_R_SUCCESS) {
diff --git a/bin/named/server.c b/bin/named/server.c
index 66794466..74adc2c2 100644
--- a/bin/named/server.c
+++ b/bin/named/server.c
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: server.c,v 1.616 2011-08-02 20:36:11 each Exp $ */
+/* $Id: server.c,v 1.619 2011-09-06 22:29:32 smann Exp $ */
/*! \file */
@@ -39,6 +39,7 @@
#include <isc/parseint.h>
#include <isc/portset.h>
#include <isc/print.h>
+#include <isc/refcount.h>
#include <isc/resource.h>
#include <isc/sha2.h>
#include <isc/socket.h>
@@ -215,6 +216,16 @@ struct cfg_context {
cfg_aclconfctx_t * actx;
};
+/*%
+ * Holds state information for the initial zone loading process.
+ * Uses the isc_refcount structure to count the number of views
+ * with pending zone loads, dereferencing as each view finishes.
+ */
+typedef struct {
+ ns_server_t *server;
+ isc_refcount_t refs;
+} ns_zoneload_t;
+
/*
* These zones should not leak onto the Internet.
*/
@@ -2540,11 +2551,6 @@ configure_view(dns_view_t *view, cfg_obj_t *config, cfg_obj_t *vconfig,
ns_g_mctx, &view->upfwdacl));
obj = NULL;
- result = ns_config_get(maps, "request-ixfr", &obj);
- INSIST(result == ISC_R_SUCCESS);
- view->requestixfr = cfg_obj_asboolean(obj);
-
- obj = NULL;
result = ns_config_get(maps, "provide-ixfr", &obj);
INSIST(result == ISC_R_SUCCESS);
view->provideixfr = cfg_obj_asboolean(obj);
@@ -3225,6 +3231,7 @@ configure_zone(const cfg_obj_t *config, const cfg_obj_t *zconfig,
{
dns_view_t *pview = NULL; /* Production view */
dns_zone_t *zone = NULL; /* New or reused zone */
+ dns_zone_t *raw = NULL; /* New or reused raw zone */
dns_zone_t *dupzone = NULL;
const cfg_obj_t *options = NULL;
const cfg_obj_t *zoptions = NULL;
@@ -3232,6 +3239,7 @@ configure_zone(const cfg_obj_t *config, const cfg_obj_t *zconfig,
const cfg_obj_t *forwarders = NULL;
const cfg_obj_t *forwardtype = NULL;
const cfg_obj_t *only = NULL;
+ const cfg_obj_t *signing = NULL;
isc_result_t result;
isc_result_t tresult;
isc_buffer_t buffer;
@@ -3378,7 +3386,7 @@ configure_zone(const cfg_obj_t *config, const cfg_obj_t *zconfig,
dns_zone_setstats(zone, ns_g_server->zonestats);
}
CHECK(ns_zone_configure(config, vconfig, zconfig, aclconf,
- zone));
+ zone, NULL));
dns_zone_attach(zone, &view->redirect);
goto cleanup;
}
@@ -3469,10 +3477,30 @@ configure_zone(const cfg_obj_t *config, const cfg_obj_t *zconfig,
*/
dns_zone_setadded(zone, added);
+ signing = NULL;
+ if ((strcasecmp(ztypestr, "master") == 0 ||
+ strcasecmp(ztypestr, "slave") == 0) &&
+ cfg_map_get(zoptions, "inline-signing", &signing) == ISC_R_SUCCESS &&
+ cfg_obj_asboolean(signing))
+ {
+ dns_zone_getraw(zone, &raw);
+ if (raw == NULL) {
+ CHECK(dns_zone_create(&raw, mctx));
+ CHECK(dns_zone_setorigin(raw, origin));
+ dns_zone_setview(raw, view);
+ if (view->acache != NULL)
+ dns_zone_setacache(raw, view->acache);
+ CHECK(dns_zonemgr_managezone(ns_g_server->zonemgr,
+ raw));
+ dns_zone_setstats(raw, ns_g_server->zonestats);
+ dns_zone_link(zone, raw);
+ }
+ }
+
/*
* Configure the zone.
*/
- CHECK(ns_zone_configure(config, vconfig, zconfig, aclconf, zone));
+ CHECK(ns_zone_configure(config, vconfig, zconfig, aclconf, zone, raw));
/*
* Add the zone to its view in the new view list.
@@ -3482,6 +3510,8 @@ configure_zone(const cfg_obj_t *config, const cfg_obj_t *zconfig,
cleanup:
if (zone != NULL)
dns_zone_detach(&zone);
+ if (raw != NULL)
+ dns_zone_detach(&raw);
if (pview != NULL)
dns_view_detach(&pview);
@@ -5192,34 +5222,87 @@ load_configuration(const char *filename, ns_server_t *server,
}
static isc_result_t
-load_zones(ns_server_t *server, isc_boolean_t stop) {
+view_loaded(void *arg) {
+ isc_result_t result;
+ ns_zoneload_t *zl = (ns_zoneload_t *) arg;
+ ns_server_t *server = zl->server;
+ unsigned int refs;
+
+
+ /*
+ * Force zone maintenance. Do this after loading
+ * so that we know when we need to force AXFR of
+ * slave zones whose master files are missing.
+ *
+ * We use the zoneload reference counter to let us
+ * know when all views are finished.
+ */
+ isc_refcount_decrement(&zl->refs, &refs);
+ if (refs != 0)
+ return (ISC_R_SUCCESS);
+
+ isc_refcount_destroy(&zl->refs);
+ isc_mem_put(server->mctx, zl, sizeof (*zl));
+
+ isc_log_write(ns_g_lctx, NS_LOGCATEGORY_GENERAL, NS_LOGMODULE_SERVER,
+ ISC_LOG_NOTICE, "all zones loaded");
+ CHECKFATAL(dns_zonemgr_forcemaint(server->zonemgr),
+ "forcing zone maintenance");
+
+ ns_os_started();
+ isc_log_write(ns_g_lctx, NS_LOGCATEGORY_GENERAL, NS_LOGMODULE_SERVER,
+ ISC_LOG_NOTICE, "running");
+
+ return (ISC_R_SUCCESS);
+}
+
+static isc_result_t
+load_zones(ns_server_t *server) {
isc_result_t result;
dns_view_t *view;
+ ns_zoneload_t *zl;
+ unsigned int refs = 0;
+
+ zl = isc_mem_get(server->mctx, sizeof (*zl));
+ if (zl == NULL)
+ return (ISC_R_NOMEMORY);
+ zl->server = server;
result = isc_task_beginexclusive(server->task);
RUNTIME_CHECK(result == ISC_R_SUCCESS);
+ isc_refcount_init(&zl->refs, 1);
+
/*
- * Load zone data from disk.
+ * Schedule zones to be loaded from disk.
*/
for (view = ISC_LIST_HEAD(server->viewlist);
view != NULL;
view = ISC_LIST_NEXT(view, link))
{
- CHECK(dns_view_load(view, stop));
if (view->managed_keys != NULL)
CHECK(dns_zone_load(view->managed_keys));
if (view->redirect != NULL)
CHECK(dns_zone_load(view->redirect));
+ isc_refcount_increment(&zl->refs, NULL);
+ CHECK(dns_view_asyncload(view, view_loaded, zl));
}
- /*
- * Force zone maintenance. Do this after loading
- * so that we know when we need to force AXFR of
- * slave zones whose master files are missing.
- */
- CHECK(dns_zonemgr_forcemaint(server->zonemgr));
cleanup:
+ isc_refcount_decrement(&zl->refs, &refs);
+ if (result != ISC_R_SUCCESS || refs == 0) {
+ isc_refcount_destroy(&zl->refs);
+ isc_mem_put(server->mctx, zl, sizeof (*zl));
+ } else {
+ /*
+ * Place the task manager into privileged mode. This
+ * ensures that after we leave task-exclusive mode, no
+ * other tasks will be able to run except for the ones
+ * that are loading zones.
+ */
+ isc_taskmgr_setmode(ns_g_taskmgr, isc_taskmgrmode_privileged);
+ }
+
isc_task_endexclusive(server->task);
return (result);
}
@@ -5307,11 +5390,7 @@ run_server(isc_task_t *task, isc_event_t *event) {
isc_hash_init();
- CHECKFATAL(load_zones(server, ISC_FALSE), "loading zones");
-
- ns_os_started();
- isc_log_write(ns_g_lctx, NS_LOGCATEGORY_GENERAL, NS_LOGMODULE_SERVER,
- ISC_LOG_NOTICE, "running");
+ CHECKFATAL(load_zones(server), "loading zones");
}
void
@@ -5746,7 +5825,7 @@ reload(ns_server_t *server) {
isc_result_t result;
CHECK(loadconfig(server));
- result = load_zones(server, ISC_FALSE);
+ result = load_zones(server);
if (result == ISC_R_SUCCESS)
isc_log_write(ns_g_lctx, NS_LOGCATEGORY_GENERAL,
NS_LOGMODULE_SERVER, ISC_LOG_INFO,
diff --git a/bin/named/update.c b/bin/named/update.c
index 69562ad7..34243945 100644
--- a/bin/named/update.c
+++ b/bin/named/update.c
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: update.c,v 1.195 2011-07-01 02:25:47 marka Exp $ */
+/* $Id: update.c,v 1.197 2011-08-31 06:49:09 marka Exp $ */
#include <config.h>
@@ -269,6 +269,11 @@ update_log(ns_client_t *client, dns_zone_t *zone,
namebuf, classbuf, message);
}
+static void
+update_log_cb(void *arg, dns_zone_t *zone, int level, const char *message) {
+ update_log(arg, zone, level, "%s", message);
+}
+
/*%
* Increment updated-related statistics counters.
*/
@@ -722,45 +727,6 @@ rrset_exists(dns_db_t *db, dns_dbversion_t *ver, dns_name_t *name,
}
/*%
- * Set '*visible' to true if the RRset exists and is part of the
- * visible zone. Otherwise '*visible' is set to false unless a
- * error occurs.
- */
-static isc_result_t
-rrset_visible(dns_db_t *db, dns_dbversion_t *ver, dns_name_t *name,
- dns_rdatatype_t type, isc_boolean_t *visible)
-{
- isc_result_t result;
- dns_fixedname_t fixed;
-
- dns_fixedname_init(&fixed);
- result = dns_db_find(db, name, ver, type, DNS_DBFIND_NOWILD,
- (isc_stdtime_t) 0, NULL,
- dns_fixedname_name(&fixed), NULL, NULL);
- switch (result) {
- case ISC_R_SUCCESS:
- *visible = ISC_TRUE;
- break;
- /*
- * Glue, obscured, deleted or replaced records.
- */
- case DNS_R_DELEGATION:
- case DNS_R_DNAME:
- case DNS_R_CNAME:
- case DNS_R_NXDOMAIN:
- case DNS_R_NXRRSET:
- case DNS_R_EMPTYNAME:
- case DNS_R_COVERINGNSEC:
- *visible = ISC_FALSE;
- result = ISC_R_SUCCESS;
- break;
- default:
- break;
- }
- return (result);
-}
-
-/*%
* Helper function for cname_incompatible_rrset_exists.
*/
static isc_result_t
@@ -1175,16 +1141,6 @@ true_p(dns_rdata_t *update_rr, dns_rdata_t *db_rr) {
}
/*%
- * Return true if the record is a RRSIG.
- */
-static isc_boolean_t
-rrsig_p(dns_rdata_t *update_rr, dns_rdata_t *db_rr) {
- UNUSED(update_rr);
- return ((db_rr->type == dns_rdatatype_rrsig) ?
- ISC_TRUE : ISC_FALSE);
-}
-
-/*%
* Return true iff the two RRs have identical rdata.
*/
static isc_boolean_t
@@ -1498,1131 +1454,6 @@ check_soa_increment(dns_db_t *db, dns_dbversion_t *ver,
}
/**************************************************************************/
-/*
- * Incremental updating of NSECs and RRSIGs.
- */
-
-#define MAXZONEKEYS 32 /*%< Maximum number of zone keys supported. */
-
-/*%
- * We abuse the dns_diff_t type to represent a set of domain names
- * affected by the update.
- */
-static isc_result_t
-namelist_append_name(dns_diff_t *list, dns_name_t *name) {
- isc_result_t result;
- dns_difftuple_t *tuple = NULL;
- static dns_rdata_t dummy_rdata = DNS_RDATA_INIT;
-
- CHECK(dns_difftuple_create(list->mctx, DNS_DIFFOP_EXISTS, name, 0,
- &dummy_rdata, &tuple));
- dns_diff_append(list, &tuple);
- failure:
- return (result);
-}
-
-static isc_result_t
-namelist_append_subdomain(dns_db_t *db, dns_name_t *name, dns_diff_t *affected)
-{
- isc_result_t result;
- dns_fixedname_t fixedname;
- dns_name_t *child;
- dns_dbiterator_t *dbit = NULL;
-
- dns_fixedname_init(&fixedname);
- child = dns_fixedname_name(&fixedname);
-
- CHECK(dns_db_createiterator(db, DNS_DB_NONSEC3, &dbit));
-
- for (result = dns_dbiterator_seek(dbit, name);
- result == ISC_R_SUCCESS;
- result = dns_dbiterator_next(dbit))
- {
- dns_dbnode_t *node = NULL;
- CHECK(dns_dbiterator_current(dbit, &node, child));
- dns_db_detachnode(db, &node);
- if (! dns_name_issubdomain(child, name))
- break;
- CHECK(namelist_append_name(affected, child));
- }
- if (result == ISC_R_NOMORE)
- result = ISC_R_SUCCESS;
- failure:
- if (dbit != NULL)
- dns_dbiterator_destroy(&dbit);
- return (result);
-}
-
-
-
-/*%
- * Helper function for non_nsec_rrset_exists().
- */
-static isc_result_t
-is_non_nsec_action(void *data, dns_rdataset_t *rrset) {
- UNUSED(data);
- if (!(rrset->type == dns_rdatatype_nsec ||
- rrset->type == dns_rdatatype_nsec3 ||
- (rrset->type == dns_rdatatype_rrsig &&
- (rrset->covers == dns_rdatatype_nsec ||
- rrset->covers == dns_rdatatype_nsec3))))
- return (ISC_R_EXISTS);
- return (ISC_R_SUCCESS);
-}
-
-/*%
- * Check whether there is an rrset other than a NSEC or RRSIG NSEC,
- * i.e., anything that justifies the continued existence of a name
- * after a secure update.
- *
- * If such an rrset exists, set '*exists' to ISC_TRUE.
- * Otherwise, set it to ISC_FALSE.
- */
-static isc_result_t
-non_nsec_rrset_exists(dns_db_t *db, dns_dbversion_t *ver,
- dns_name_t *name, isc_boolean_t *exists)
-{
- isc_result_t result;
- result = foreach_rrset(db, ver, name, is_non_nsec_action, NULL);
- RETURN_EXISTENCE_FLAG;
-}
-
-/*%
- * A comparison function for sorting dns_diff_t:s by name.
- */
-static int
-name_order(const void *av, const void *bv) {
- dns_difftuple_t const * const *ap = av;
- dns_difftuple_t const * const *bp = bv;
- dns_difftuple_t const *a = *ap;
- dns_difftuple_t const *b = *bp;
- return (dns_name_compare(&a->name, &b->name));
-}
-
-static isc_result_t
-uniqify_name_list(dns_diff_t *list) {
- isc_result_t result;
- dns_difftuple_t *p, *q;
-
- CHECK(dns_diff_sort(list, name_order));
-
- p = ISC_LIST_HEAD(list->tuples);
- while (p != NULL) {
- do {
- q = ISC_LIST_NEXT(p, link);
- if (q == NULL || ! dns_name_equal(&p->name, &q->name))
- break;
- ISC_LIST_UNLINK(list->tuples, q, link);
- dns_difftuple_free(&q);
- } while (1);
- p = ISC_LIST_NEXT(p, link);
- }
- failure:
- return (result);
-}
-
-static isc_result_t
-is_active(dns_db_t *db, dns_dbversion_t *ver, dns_name_t *name,
- isc_boolean_t *flag, isc_boolean_t *cut, isc_boolean_t *unsecure)
-{
- isc_result_t result;
- dns_fixedname_t foundname;
- dns_fixedname_init(&foundname);
- result = dns_db_find(db, name, ver, dns_rdatatype_any,
- DNS_DBFIND_GLUEOK | DNS_DBFIND_NOWILD,
- (isc_stdtime_t) 0, NULL,
- dns_fixedname_name(&foundname),
- NULL, NULL);
- if (result == ISC_R_SUCCESS || result == DNS_R_EMPTYNAME) {
- *flag = ISC_TRUE;
- *cut = ISC_FALSE;
- if (unsecure != NULL)
- *unsecure = ISC_FALSE;
- return (ISC_R_SUCCESS);
- } else if (result == DNS_R_ZONECUT) {
- *flag = ISC_TRUE;
- *cut = ISC_TRUE;
- if (unsecure != NULL) {
- /*
- * We are at the zonecut. Check to see if there
- * is a DS RRset.
- */
- if (dns_db_find(db, name, ver, dns_rdatatype_ds, 0,
- (isc_stdtime_t) 0, NULL,
- dns_fixedname_name(&foundname),
- NULL, NULL) == DNS_R_NXRRSET)
- *unsecure = ISC_TRUE;
- else
- *unsecure = ISC_FALSE;
- }
- return (ISC_R_SUCCESS);
- } else if (result == DNS_R_GLUE || result == DNS_R_DNAME ||
- result == DNS_R_DELEGATION || result == DNS_R_NXDOMAIN) {
- *flag = ISC_FALSE;
- *cut = ISC_FALSE;
- if (unsecure != NULL)
- *unsecure = ISC_FALSE;
- return (ISC_R_SUCCESS);
- } else {
- /*
- * Silence compiler.
- */
- *flag = ISC_FALSE;
- *cut = ISC_FALSE;
- if (unsecure != NULL)
- *unsecure = ISC_FALSE;
- return (result);
- }
-}
-
-/*%
- * Find the next/previous name that has a NSEC record.
- * In other words, skip empty database nodes and names that
- * have had their NSECs removed because they are obscured by
- * a zone cut.
- */
-static isc_result_t
-next_active(ns_client_t *client, dns_zone_t *zone, dns_db_t *db,
- dns_dbversion_t *ver, dns_name_t *oldname, dns_name_t *newname,
- isc_boolean_t forward)
-{
- isc_result_t result;
- dns_dbiterator_t *dbit = NULL;
- isc_boolean_t has_nsec = ISC_FALSE;
- unsigned int wraps = 0;
- isc_boolean_t secure = dns_db_issecure(db);
-
- CHECK(dns_db_createiterator(db, 0, &dbit));
-
- CHECK(dns_dbiterator_seek(dbit, oldname));
- do {
- dns_dbnode_t *node = NULL;
-
- if (forward)
- result = dns_dbiterator_next(dbit);
- else
- result = dns_dbiterator_prev(dbit);
- if (result == ISC_R_NOMORE) {
- /*
- * Wrap around.
- */
- if (forward)
- CHECK(dns_dbiterator_first(dbit));
- else
- CHECK(dns_dbiterator_last(dbit));
- wraps++;
- if (wraps == 2) {
- update_log(client, zone, ISC_LOG_ERROR,
- "secure zone with no NSECs");
- result = DNS_R_BADZONE;
- goto failure;
- }
- }
- CHECK(dns_dbiterator_current(dbit, &node, newname));
- dns_db_detachnode(db, &node);
-
- /*
- * The iterator may hold the tree lock, and
- * rrset_exists() calls dns_db_findnode() which
- * may try to reacquire it. To avoid deadlock
- * we must pause the iterator first.
- */
- CHECK(dns_dbiterator_pause(dbit));
- if (secure) {
- CHECK(rrset_exists(db, ver, newname,
- dns_rdatatype_nsec, 0, &has_nsec));
- } else {
- dns_fixedname_t ffound;
- dns_name_t *found;
- dns_fixedname_init(&ffound);
- found = dns_fixedname_name(&ffound);
- result = dns_db_find(db, newname, ver,
- dns_rdatatype_soa,
- DNS_DBFIND_NOWILD, 0, NULL, found,
- NULL, NULL);
- if (result == ISC_R_SUCCESS ||
- result == DNS_R_EMPTYNAME ||
- result == DNS_R_NXRRSET ||
- result == DNS_R_CNAME ||
- (result == DNS_R_DELEGATION &&
- dns_name_equal(newname, found))) {
- has_nsec = ISC_TRUE;
- result = ISC_R_SUCCESS;
- } else if (result != DNS_R_NXDOMAIN)
- break;
- }
- } while (! has_nsec);
- failure:
- if (dbit != NULL)
- dns_dbiterator_destroy(&dbit);
-
- return (result);
-}
-
-/*%
- * Add a NSEC record for "name", recording the change in "diff".
- * The existing NSEC is removed.
- */
-static isc_result_t
-add_nsec(ns_client_t *client, dns_zone_t *zone, dns_db_t *db,
- dns_dbversion_t *ver, dns_name_t *name, dns_ttl_t nsecttl,
- dns_diff_t *diff)
-{
- isc_result_t result;
- dns_dbnode_t *node = NULL;
- unsigned char buffer[DNS_NSEC_BUFFERSIZE];
- dns_rdata_t rdata = DNS_RDATA_INIT;
- dns_difftuple_t *tuple = NULL;
- dns_fixedname_t fixedname;
- dns_name_t *target;
-
- dns_fixedname_init(&fixedname);
- target = dns_fixedname_name(&fixedname);
-
- /*
- * Find the successor name, aka NSEC target.
- */
- CHECK(next_active(client, zone, db, ver, name, target, ISC_TRUE));
-
- /*
- * Create the NSEC RDATA.
- */
- CHECK(dns_db_findnode(db, name, ISC_FALSE, &node));
- dns_rdata_init(&rdata);
- CHECK(dns_nsec_buildrdata(db, ver, node, target, buffer, &rdata));
- dns_db_detachnode(db, &node);
-
- /*
- * Delete the old NSEC and record the change.
- */
- CHECK(delete_if(true_p, db, ver, name, dns_rdatatype_nsec, 0,
- NULL, diff));
- /*
- * Add the new NSEC and record the change.
- */
- CHECK(dns_difftuple_create(diff->mctx, DNS_DIFFOP_ADD, name,
- nsecttl, &rdata, &tuple));
- CHECK(do_one_tuple(&tuple, db, ver, diff));
- INSIST(tuple == NULL);
-
- failure:
- if (node != NULL)
- dns_db_detachnode(db, &node);
- return (result);
-}
-
-/*%
- * Add a placeholder NSEC record for "name", recording the change in "diff".
- */
-static isc_result_t
-add_placeholder_nsec(dns_db_t *db, dns_dbversion_t *ver, dns_name_t *name,
- dns_diff_t *diff)
-{
- isc_result_t result;
- dns_difftuple_t *tuple = NULL;
- isc_region_t r;
- unsigned char data[1] = { 0 }; /* The root domain, no bits. */
- dns_rdata_t rdata = DNS_RDATA_INIT;
-
- r.base = data;
- r.length = sizeof(data);
- dns_rdata_fromregion(&rdata, dns_db_class(db), dns_rdatatype_nsec, &r);
- CHECK(dns_difftuple_create(diff->mctx, DNS_DIFFOP_ADD, name, 0,
- &rdata, &tuple));
- CHECK(do_one_tuple(&tuple, db, ver, diff));
- failure:
- return (result);
-}
-
-static isc_result_t
-find_zone_keys(dns_zone_t *zone, dns_db_t *db, dns_dbversion_t *ver,
- isc_mem_t *mctx, unsigned int maxkeys,
- dst_key_t **keys, unsigned int *nkeys)
-{
- isc_result_t result;
- dns_dbnode_t *node = NULL;
- const char *directory = dns_zone_getkeydirectory(zone);
- CHECK(dns_db_findnode(db, dns_db_origin(db), ISC_FALSE, &node));
- CHECK(dns_dnssec_findzonekeys2(db, ver, node, dns_db_origin(db),
- directory, mctx, maxkeys, keys, nkeys));
- failure:
- if (node != NULL)
- dns_db_detachnode(db, &node);
- return (result);
-}
-
-/*%
- * Add RRSIG records for an RRset, recording the change in "diff".
- */
-static isc_result_t
-add_sigs(ns_client_t *client, dns_zone_t *zone, dns_db_t *db,
- dns_dbversion_t *ver, dns_name_t *name, dns_rdatatype_t type,
- dns_diff_t *diff, dst_key_t **keys, unsigned int nkeys,
- isc_stdtime_t inception, isc_stdtime_t expire,
- isc_boolean_t check_ksk, isc_boolean_t keyset_kskonly)
-{
- isc_result_t result;
- dns_dbnode_t *node = NULL;
- dns_rdataset_t rdataset;
- dns_rdata_t sig_rdata = DNS_RDATA_INIT;
- isc_buffer_t buffer;
- unsigned char data[1024]; /* XXX */
- unsigned int i, j;
- isc_boolean_t added_sig = ISC_FALSE;
- isc_mem_t *mctx = client->mctx;
-
- dns_rdataset_init(&rdataset);
- isc_buffer_init(&buffer, data, sizeof(data));
-
- /* Get the rdataset to sign. */
- if (type == dns_rdatatype_nsec3)
- CHECK(dns_db_findnsec3node(db, name, ISC_FALSE, &node));
- else
- CHECK(dns_db_findnode(db, name, ISC_FALSE, &node));
- CHECK(dns_db_findrdataset(db, node, ver, type, 0,
- (isc_stdtime_t) 0, &rdataset, NULL));
- dns_db_detachnode(db, &node);
-
-#define REVOKE(x) ((dst_key_flags(x) & DNS_KEYFLAG_REVOKE) != 0)
-#define KSK(x) ((dst_key_flags(x) & DNS_KEYFLAG_KSK) != 0)
-#define ALG(x) dst_key_alg(x)
-
- /*
- * If we are honoring KSK flags then we need to check that we
- * have both KSK and non-KSK keys that are not revoked per
- * algorithm.
- */
- for (i = 0; i < nkeys; i++) {
- isc_boolean_t both = ISC_FALSE;
-
- if (!dst_key_isprivate(keys[i]))
- continue;
-
- if (check_ksk && !REVOKE(keys[i])) {
- isc_boolean_t have_ksk, have_nonksk;
- if (KSK(keys[i])) {
- have_ksk = ISC_TRUE;
- have_nonksk = ISC_FALSE;
- } else {
- have_ksk = ISC_FALSE;
- have_nonksk = ISC_TRUE;
- }
- for (j = 0; j < nkeys; j++) {
- if (j == i || ALG(keys[i]) != ALG(keys[j]))
- continue;
- if (REVOKE(keys[j]))
- continue;
- if (KSK(keys[j]))
- have_ksk = ISC_TRUE;
- else
- have_nonksk = ISC_TRUE;
- both = have_ksk && have_nonksk;
- if (both)
- break;
- }
- }
-
- if (both) {
- if (type == dns_rdatatype_dnskey) {
- if (!KSK(keys[i]) && keyset_kskonly)
- continue;
- } else if (KSK(keys[i]))
- continue;
- } else if (REVOKE(keys[i]) && type != dns_rdatatype_dnskey)
- continue;
-
- /* Calculate the signature, creating a RRSIG RDATA. */
- CHECK(dns_dnssec_sign(name, &rdataset, keys[i],
- &inception, &expire,
- mctx, &buffer, &sig_rdata));
-
- /* Update the database and journal with the RRSIG. */
- /* XXX inefficient - will cause dataset merging */
- CHECK(update_one_rr(db, ver, diff, DNS_DIFFOP_ADDRESIGN, name,
- rdataset.ttl, &sig_rdata));
- dns_rdata_reset(&sig_rdata);
- isc_buffer_init(&buffer, data, sizeof(data));
- added_sig = ISC_TRUE;
- }
- if (!added_sig) {
- update_log(client, zone, ISC_LOG_ERROR,
- "found no active private keys, "
- "unable to generate any signatures");
- result = ISC_R_NOTFOUND;
- }
-
- failure:
- if (dns_rdataset_isassociated(&rdataset))
- dns_rdataset_disassociate(&rdataset);
- if (node != NULL)
- dns_db_detachnode(db, &node);
- return (result);
-}
-
-/*
- * Delete expired RRsigs and any RRsigs we are about to re-sign.
- * See also zone.c:del_sigs().
- */
-static isc_result_t
-del_keysigs(dns_db_t *db, dns_dbversion_t *ver, dns_name_t *name,
- dns_diff_t *diff, dst_key_t **keys, unsigned int nkeys)
-{
- isc_result_t result;
- dns_dbnode_t *node = NULL;
- dns_rdataset_t rdataset;
- dns_rdata_t rdata = DNS_RDATA_INIT;
- unsigned int i;
- dns_rdata_rrsig_t rrsig;
- isc_boolean_t found;
-
- dns_rdataset_init(&rdataset);
-
- result = dns_db_findnode(db, name, ISC_FALSE, &node);
- if (result == ISC_R_NOTFOUND)
- return (ISC_R_SUCCESS);
- if (result != ISC_R_SUCCESS)
- goto failure;
- result = dns_db_findrdataset(db, node, ver, dns_rdatatype_rrsig,
- dns_rdatatype_dnskey, (isc_stdtime_t) 0,
- &rdataset, NULL);
- dns_db_detachnode(db, &node);
-
- if (result == ISC_R_NOTFOUND)
- return (ISC_R_SUCCESS);
- if (result != ISC_R_SUCCESS)
- goto failure;
-
- for (result = dns_rdataset_first(&rdataset);
- result == ISC_R_SUCCESS;
- result = dns_rdataset_next(&rdataset)) {
- dns_rdataset_current(&rdataset, &rdata);
- result = dns_rdata_tostruct(&rdata, &rrsig, NULL);
- RUNTIME_CHECK(result == ISC_R_SUCCESS);
- found = ISC_FALSE;
- for (i = 0; i < nkeys; i++) {
- if (rrsig.keyid == dst_key_id(keys[i])) {
- found = ISC_TRUE;
- if (!dst_key_isprivate(keys[i])) {
- /*
- * The re-signing code in zone.c
- * will mark this as offline.
- * Just skip the record for now.
- */
- break;
- }
- result = update_one_rr(db, ver, diff,
- DNS_DIFFOP_DEL, name,
- rdataset.ttl, &rdata);
- break;
- }
- }
- /*
- * If there is not a matching DNSKEY then delete the RRSIG.
- */
- if (!found)
- result = update_one_rr(db, ver, diff, DNS_DIFFOP_DEL,
- name, rdataset.ttl, &rdata);
- dns_rdata_reset(&rdata);
- if (result != ISC_R_SUCCESS)
- break;
- }
- dns_rdataset_disassociate(&rdataset);
- if (result == ISC_R_NOMORE)
- result = ISC_R_SUCCESS;
-failure:
- if (node != NULL)
- dns_db_detachnode(db, &node);
- return (result);
-}
-
-static isc_result_t
-add_exposed_sigs(ns_client_t *client, dns_zone_t *zone, dns_db_t *db,
- dns_dbversion_t *ver, dns_name_t *name, isc_boolean_t cut,
- dns_diff_t *diff, dst_key_t **keys, unsigned int nkeys,
- isc_stdtime_t inception, isc_stdtime_t expire,
- isc_boolean_t check_ksk, isc_boolean_t keyset_kskonly)
-{
- isc_result_t result;
- dns_dbnode_t *node;
- dns_rdatasetiter_t *iter;
-
- node = NULL;
- result = dns_db_findnode(db, name, ISC_FALSE, &node);
- if (result == ISC_R_NOTFOUND)
- return (ISC_R_SUCCESS);
- if (result != ISC_R_SUCCESS)
- return (result);
-
- iter = NULL;
- result = dns_db_allrdatasets(db, node, ver,
- (isc_stdtime_t) 0, &iter);
- if (result != ISC_R_SUCCESS)
- goto cleanup_node;
-
- for (result = dns_rdatasetiter_first(iter);
- result == ISC_R_SUCCESS;
- result = dns_rdatasetiter_next(iter))
- {
- dns_rdataset_t rdataset;
- dns_rdatatype_t type;
- isc_boolean_t flag;
-
- dns_rdataset_init(&rdataset);
- dns_rdatasetiter_current(iter, &rdataset);
- type = rdataset.type;
- dns_rdataset_disassociate(&rdataset);
-
- /*
- * We don't need to sign unsigned NSEC records at the cut
- * as they are handled elsewhere.
- */
- if ((type == dns_rdatatype_rrsig) ||
- (cut && type != dns_rdatatype_ds))
- continue;
- result = rrset_exists(db, ver, name, dns_rdatatype_rrsig,
- type, &flag);
- if (result != ISC_R_SUCCESS)
- goto cleanup_iterator;
- if (flag)
- continue;;
- result = add_sigs(client, zone, db, ver, name, type, diff,
- keys, nkeys, inception, expire,
- check_ksk, keyset_kskonly);
- if (result != ISC_R_SUCCESS)
- goto cleanup_iterator;
- }
- if (result == ISC_R_NOMORE)
- result = ISC_R_SUCCESS;
-
- cleanup_iterator:
- dns_rdatasetiter_destroy(&iter);
-
- cleanup_node:
- dns_db_detachnode(db, &node);
-
- return (result);
-}
-
-/*%
- * Update RRSIG, NSEC and NSEC3 records affected by an update. The original
- * update, including the SOA serial update but excluding the RRSIG & NSEC
- * changes, is in "diff" and has already been applied to "newver" of "db".
- * The database version prior to the update is "oldver".
- *
- * The necessary RRSIG, NSEC and NSEC3 changes will be applied to "newver"
- * and added (as a minimal diff) to "diff".
- *
- * The RRSIGs generated will be valid for 'sigvalidityinterval' seconds.
- */
-static isc_result_t
-update_signatures(ns_client_t *client, dns_zone_t *zone, dns_db_t *db,
- dns_dbversion_t *oldver, dns_dbversion_t *newver,
- dns_diff_t *diff, isc_uint32_t sigvalidityinterval)
-{
- isc_result_t result;
- dns_difftuple_t *t;
- dns_diff_t diffnames;
- dns_diff_t affected;
- dns_diff_t sig_diff;
- dns_diff_t nsec_diff;
- dns_diff_t nsec_mindiff;
- isc_boolean_t flag, build_nsec, build_nsec3;
- dst_key_t *zone_keys[MAXZONEKEYS];
- unsigned int nkeys = 0;
- unsigned int i;
- isc_stdtime_t now, inception, expire;
- dns_ttl_t nsecttl;
- dns_rdata_soa_t soa;
- dns_rdata_t rdata = DNS_RDATA_INIT;
- dns_rdataset_t rdataset;
- dns_dbnode_t *node = NULL;
- isc_boolean_t check_ksk, keyset_kskonly;
- isc_boolean_t unsecure;
- isc_boolean_t cut;
- dns_rdatatype_t privatetype = dns_zone_getprivatetype(zone);
-
- dns_diff_init(client->mctx, &diffnames);
- dns_diff_init(client->mctx, &affected);
-
- dns_diff_init(client->mctx, &sig_diff);
- sig_diff.resign = dns_zone_getsigresigninginterval(zone);
- dns_diff_init(client->mctx, &nsec_diff);
- dns_diff_init(client->mctx, &nsec_mindiff);
-
- result = find_zone_keys(zone, db, newver, client->mctx,
- MAXZONEKEYS, zone_keys, &nkeys);
- if (result != ISC_R_SUCCESS) {
- update_log(client, zone, ISC_LOG_ERROR,
- "could not get zone keys for secure dynamic update");
- goto failure;
- }
-
- isc_stdtime_get(&now);
- inception = now - 3600; /* Allow for some clock skew. */
- expire = now + sigvalidityinterval;
-
- /*
- * Do we look at the KSK flag on the DNSKEY to determining which
- * keys sign which RRsets? First check the zone option then
- * check the keys flags to make sure at least one has a ksk set
- * and one doesn't.
- */
- check_ksk = ISC_TF((dns_zone_getoptions(zone) &
- DNS_ZONEOPT_UPDATECHECKKSK) != 0);
- keyset_kskonly = ISC_TF((dns_zone_getoptions(zone) &
- DNS_ZONEOPT_DNSKEYKSKONLY) != 0);
-
- /*
- * Get the NSEC/NSEC3 TTL from the SOA MINIMUM field.
- */
- CHECK(dns_db_findnode(db, dns_db_origin(db), ISC_FALSE, &node));
- dns_rdataset_init(&rdataset);
- CHECK(dns_db_findrdataset(db, node, newver, dns_rdatatype_soa, 0,
- (isc_stdtime_t) 0, &rdataset, NULL));
- CHECK(dns_rdataset_first(&rdataset));
- dns_rdataset_current(&rdataset, &rdata);
- CHECK(dns_rdata_tostruct(&rdata, &soa, NULL));
- nsecttl = soa.minimum;
- dns_rdataset_disassociate(&rdataset);
- dns_db_detachnode(db, &node);
-
- /*
- * Find all RRsets directly affected by the update, and
- * update their RRSIGs. Also build a list of names affected
- * by the update in "diffnames".
- */
- CHECK(dns_diff_sort(diff, temp_order));
-
- t = ISC_LIST_HEAD(diff->tuples);
- while (t != NULL) {
- dns_name_t *name = &t->name;
- /* Now "name" is a new, unique name affected by the update. */
-
- CHECK(namelist_append_name(&diffnames, name));
-
- while (t != NULL && dns_name_equal(&t->name, name)) {
- dns_rdatatype_t type;
- type = t->rdata.type;
-
- /*
- * Now "name" and "type" denote a new unique RRset
- * affected by the update.
- */
-
- /* Don't sign RRSIGs. */
- if (type == dns_rdatatype_rrsig)
- goto skip;
-
- /*
- * Delete all old RRSIGs covering this type, since they
- * are all invalid when the signed RRset has changed.
- * We may not be able to recreate all of them - tough.
- * Special case changes to the zone's DNSKEY records
- * to support offline KSKs.
- */
- if (type == dns_rdatatype_dnskey)
- del_keysigs(db, newver, name, &sig_diff,
- zone_keys, nkeys);
- else
- CHECK(delete_if(true_p, db, newver, name,
- dns_rdatatype_rrsig, type,
- NULL, &sig_diff));
-
- /*
- * If this RRset is still visible after the update,
- * add a new signature for it.
- */
- CHECK(rrset_visible(db, newver, name, type, &flag));
- if (flag) {
- CHECK(add_sigs(client, zone, db, newver, name,
- type, &sig_diff, zone_keys,
- nkeys, inception, expire,
- check_ksk, keyset_kskonly));
- }
- skip:
- /* Skip any other updates to the same RRset. */
- while (t != NULL &&
- dns_name_equal(&t->name, name) &&
- t->rdata.type == type)
- {
- t = ISC_LIST_NEXT(t, link);
- }
- }
- }
- update_log(client, zone, ISC_LOG_DEBUG(3), "updated data signatures");
-
- /* Remove orphaned NSECs and RRSIG NSECs. */
- for (t = ISC_LIST_HEAD(diffnames.tuples);
- t != NULL;
- t = ISC_LIST_NEXT(t, link))
- {
- CHECK(non_nsec_rrset_exists(db, newver, &t->name, &flag));
- if (! flag) {
- CHECK(delete_if(true_p, db, newver, &t->name,
- dns_rdatatype_any, 0,
- NULL, &sig_diff));
- }
- }
- update_log(client, zone, ISC_LOG_DEBUG(3),
- "removed any orphaned NSEC records");
-
- /*
- * See if we need to build NSEC or NSEC3 chains.
- */
- CHECK(dns_private_chains(db, newver, privatetype, &build_nsec,
- &build_nsec3));
- if (!build_nsec)
- goto update_nsec3;
-
- update_log(client, zone, ISC_LOG_DEBUG(3), "rebuilding NSEC chain");
-
- /*
- * When a name is created or deleted, its predecessor needs to
- * have its NSEC updated.
- */
- for (t = ISC_LIST_HEAD(diffnames.tuples);
- t != NULL;
- t = ISC_LIST_NEXT(t, link))
- {
- isc_boolean_t existed, exists;
- dns_fixedname_t fixedname;
- dns_name_t *prevname;
-
- dns_fixedname_init(&fixedname);
- prevname = dns_fixedname_name(&fixedname);
-
- CHECK(name_exists(db, oldver, &t->name, &existed));
- CHECK(name_exists(db, newver, &t->name, &exists));
- if (exists == existed)
- continue;
-
- /*
- * Find the predecessor.
- * When names become obscured or unobscured in this update
- * transaction, we may find the wrong predecessor because
- * the NSECs have not yet been updated to reflect the delegation
- * change. This should not matter because in this case,
- * the correct predecessor is either the delegation node or
- * a newly unobscured node, and those nodes are on the
- * "affected" list in any case.
- */
- CHECK(next_active(client, zone, db, newver,
- &t->name, prevname, ISC_FALSE));
- CHECK(namelist_append_name(&affected, prevname));
- }
-
- /*
- * Find names potentially affected by delegation changes
- * (obscured by adding an NS or DNAME, or unobscured by
- * removing one).
- */
- for (t = ISC_LIST_HEAD(diffnames.tuples);
- t != NULL;
- t = ISC_LIST_NEXT(t, link))
- {
- isc_boolean_t ns_existed, dname_existed;
- isc_boolean_t ns_exists, dname_exists;
-
- CHECK(rrset_exists(db, oldver, &t->name, dns_rdatatype_ns, 0,
- &ns_existed));
- CHECK(rrset_exists(db, oldver, &t->name, dns_rdatatype_dname, 0,
- &dname_existed));
- CHECK(rrset_exists(db, newver, &t->name, dns_rdatatype_ns, 0,
- &ns_exists));
- CHECK(rrset_exists(db, newver, &t->name, dns_rdatatype_dname, 0,
- &dname_exists));
- if ((ns_exists || dname_exists) == (ns_existed || dname_existed))
- continue;
- /*
- * There was a delegation change. Mark all subdomains
- * of t->name as potentially needing a NSEC update.
- */
- CHECK(namelist_append_subdomain(db, &t->name, &affected));
- }
-
- ISC_LIST_APPENDLIST(affected.tuples, diffnames.tuples, link);
- INSIST(ISC_LIST_EMPTY(diffnames.tuples));
-
- CHECK(uniqify_name_list(&affected));
-
- /*
- * Determine which names should have NSECs, and delete/create
- * NSECs to make it so. We don't know the final NSEC targets yet,
- * so we just create placeholder NSECs with arbitrary contents
- * to indicate that their respective owner names should be part of
- * the NSEC chain.
- */
- for (t = ISC_LIST_HEAD(affected.tuples);
- t != NULL;
- t = ISC_LIST_NEXT(t, link))
- {
- isc_boolean_t exists;
- dns_name_t *name = &t->name;
-
- CHECK(name_exists(db, newver, name, &exists));
- if (! exists)
- continue;
- CHECK(is_active(db, newver, name, &flag, &cut, NULL));
- if (!flag) {
- /*
- * This name is obscured. Delete any
- * existing NSEC record.
- */
- CHECK(delete_if(true_p, db, newver, name,
- dns_rdatatype_nsec, 0,
- NULL, &nsec_diff));
- CHECK(delete_if(rrsig_p, db, newver, name,
- dns_rdatatype_any, 0, NULL, diff));
- } else {
- /*
- * This name is not obscured. It needs to have a
- * NSEC unless it is the at the origin, in which
- * case it should already exist if there is a complete
- * NSEC chain and if there isn't a complete NSEC chain
- * we don't want to add one as that would signal that
- * there is a complete NSEC chain.
- */
- if (!dns_name_equal(name, dns_db_origin(db))) {
- CHECK(rrset_exists(db, newver, name,
- dns_rdatatype_nsec, 0,
- &flag));
- if (!flag)
- CHECK(add_placeholder_nsec(db, newver,
- name, diff));
- }
- CHECK(add_exposed_sigs(client, zone, db, newver, name,
- cut, &sig_diff, zone_keys, nkeys,
- inception, expire, check_ksk,
- keyset_kskonly));
- }
- }
-
- /*
- * Now we know which names are part of the NSEC chain.
- * Make them all point at their correct targets.
- */
- for (t = ISC_LIST_HEAD(affected.tuples);
- t != NULL;
- t = ISC_LIST_NEXT(t, link))
- {
- CHECK(rrset_exists(db, newver, &t->name,
- dns_rdatatype_nsec, 0, &flag));
- if (flag) {
- /*
- * There is a NSEC, but we don't know if it is correct.
- * Delete it and create a correct one to be sure.
- * If the update was unnecessary, the diff minimization
- * will take care of eliminating it from the journal,
- * IXFRs, etc.
- *
- * The RRSIG bit should always be set in the NSECs
- * we generate, because they will all get RRSIG NSECs.
- * (XXX what if the zone keys are missing?).
- * Because the RRSIG NSECs have not necessarily been
- * created yet, the correctness of the bit mask relies
- * on the assumption that NSECs are only created if
- * there is other data, and if there is other data,
- * there are other RRSIGs.
- */
- CHECK(add_nsec(client, zone, db, newver, &t->name,
- nsecttl, &nsec_diff));
- }
- }
-
- /*
- * Minimize the set of NSEC updates so that we don't
- * have to regenerate the RRSIG NSECs for NSECs that were
- * replaced with identical ones.
- */
- while ((t = ISC_LIST_HEAD(nsec_diff.tuples)) != NULL) {
- ISC_LIST_UNLINK(nsec_diff.tuples, t, link);
- dns_diff_appendminimal(&nsec_mindiff, &t);
- }
-
- update_log(client, zone, ISC_LOG_DEBUG(3),
- "signing rebuilt NSEC chain");
-
- /* Update RRSIG NSECs. */
- for (t = ISC_LIST_HEAD(nsec_mindiff.tuples);
- t != NULL;
- t = ISC_LIST_NEXT(t, link))
- {
- if (t->op == DNS_DIFFOP_DEL) {
- CHECK(delete_if(true_p, db, newver, &t->name,
- dns_rdatatype_rrsig, dns_rdatatype_nsec,
- NULL, &sig_diff));
- } else if (t->op == DNS_DIFFOP_ADD) {
- CHECK(add_sigs(client, zone, db, newver, &t->name,
- dns_rdatatype_nsec, &sig_diff,
- zone_keys, nkeys, inception, expire,
- check_ksk, keyset_kskonly));
- } else {
- INSIST(0);
- }
- }
-
- update_nsec3:
-
- /* Record our changes for the journal. */
- while ((t = ISC_LIST_HEAD(sig_diff.tuples)) != NULL) {
- ISC_LIST_UNLINK(sig_diff.tuples, t, link);
- dns_diff_appendminimal(diff, &t);
- }
- while ((t = ISC_LIST_HEAD(nsec_mindiff.tuples)) != NULL) {
- ISC_LIST_UNLINK(nsec_mindiff.tuples, t, link);
- dns_diff_appendminimal(diff, &t);
- }
-
- INSIST(ISC_LIST_EMPTY(sig_diff.tuples));
- INSIST(ISC_LIST_EMPTY(nsec_diff.tuples));
- INSIST(ISC_LIST_EMPTY(nsec_mindiff.tuples));
-
- if (!build_nsec3) {
- update_log(client, zone, ISC_LOG_DEBUG(3),
- "no NSEC3 chains to rebuild");
- goto failure;
- }
-
- update_log(client, zone, ISC_LOG_DEBUG(3), "rebuilding NSEC3 chains");
-
- dns_diff_clear(&diffnames);
- dns_diff_clear(&affected);
-
- CHECK(dns_diff_sort(diff, temp_order));
-
- /*
- * Find names potentially affected by delegation changes
- * (obscured by adding an NS or DNAME, or unobscured by
- * removing one).
- */
- t = ISC_LIST_HEAD(diff->tuples);
- while (t != NULL) {
- dns_name_t *name = &t->name;
-
- isc_boolean_t ns_existed, dname_existed;
- isc_boolean_t ns_exists, dname_exists;
- isc_boolean_t exists, existed;
-
- if (t->rdata.type == dns_rdatatype_nsec ||
- t->rdata.type == dns_rdatatype_rrsig) {
- t = ISC_LIST_NEXT(t, link);
- continue;
- }
-
- CHECK(namelist_append_name(&affected, name));
-
- CHECK(rrset_exists(db, oldver, name, dns_rdatatype_ns, 0,
- &ns_existed));
- CHECK(rrset_exists(db, oldver, name, dns_rdatatype_dname, 0,
- &dname_existed));
- CHECK(rrset_exists(db, newver, name, dns_rdatatype_ns, 0,
- &ns_exists));
- CHECK(rrset_exists(db, newver, name, dns_rdatatype_dname, 0,
- &dname_exists));
-
- exists = ns_exists || dname_exists;
- existed = ns_existed || dname_existed;
- if (exists == existed)
- goto nextname;
- /*
- * There was a delegation change. Mark all subdomains
- * of t->name as potentially needing a NSEC3 update.
- */
- CHECK(namelist_append_subdomain(db, name, &affected));
-
- nextname:
- while (t != NULL && dns_name_equal(&t->name, name))
- t = ISC_LIST_NEXT(t, link);
- }
-
- for (t = ISC_LIST_HEAD(affected.tuples);
- t != NULL;
- t = ISC_LIST_NEXT(t, link)) {
- dns_name_t *name = &t->name;
-
- unsecure = ISC_FALSE; /* Silence compiler warning. */
- CHECK(is_active(db, newver, name, &flag, &cut, &unsecure));
-
- if (!flag) {
- CHECK(delete_if(rrsig_p, db, newver, name,
- dns_rdatatype_any, 0, NULL, diff));
- CHECK(dns_nsec3_delnsec3sx(db, newver, name,
- privatetype, &nsec_diff));
- } else {
- CHECK(add_exposed_sigs(client, zone, db, newver, name,
- cut, &sig_diff, zone_keys, nkeys,
- inception, expire, check_ksk,
- keyset_kskonly));
- CHECK(dns_nsec3_addnsec3sx(db, newver, name, nsecttl,
- unsecure, privatetype,
- &nsec_diff));
- }
- }
-
- /*
- * Minimize the set of NSEC3 updates so that we don't
- * have to regenerate the RRSIG NSEC3s for NSEC3s that were
- * replaced with identical ones.
- */
- while ((t = ISC_LIST_HEAD(nsec_diff.tuples)) != NULL) {
- ISC_LIST_UNLINK(nsec_diff.tuples, t, link);
- dns_diff_appendminimal(&nsec_mindiff, &t);
- }
-
- update_log(client, zone, ISC_LOG_DEBUG(3),
- "signing rebuilt NSEC3 chain");
-
- /* Update RRSIG NSEC3s. */
- for (t = ISC_LIST_HEAD(nsec_mindiff.tuples);
- t != NULL;
- t = ISC_LIST_NEXT(t, link))
- {
- if (t->op == DNS_DIFFOP_DEL) {
- CHECK(delete_if(true_p, db, newver, &t->name,
- dns_rdatatype_rrsig,
- dns_rdatatype_nsec3,
- NULL, &sig_diff));
- } else if (t->op == DNS_DIFFOP_ADD) {
- CHECK(add_sigs(client, zone, db, newver, &t->name,
- dns_rdatatype_nsec3,
- &sig_diff, zone_keys, nkeys,
- inception, expire, check_ksk,
- keyset_kskonly));
- } else {
- INSIST(0);
- }
- }
-
- /* Record our changes for the journal. */
- while ((t = ISC_LIST_HEAD(sig_diff.tuples)) != NULL) {
- ISC_LIST_UNLINK(sig_diff.tuples, t, link);
- dns_diff_appendminimal(diff, &t);
- }
- while ((t = ISC_LIST_HEAD(nsec_mindiff.tuples)) != NULL) {
- ISC_LIST_UNLINK(nsec_mindiff.tuples, t, link);
- dns_diff_appendminimal(diff, &t);
- }
-
- INSIST(ISC_LIST_EMPTY(sig_diff.tuples));
- INSIST(ISC_LIST_EMPTY(nsec_diff.tuples));
- INSIST(ISC_LIST_EMPTY(nsec_mindiff.tuples));
-
- failure:
- dns_diff_clear(&sig_diff);
- dns_diff_clear(&nsec_diff);
- dns_diff_clear(&nsec_mindiff);
-
- dns_diff_clear(&affected);
- dns_diff_clear(&diffnames);
-
- for (i = 0; i < nkeys; i++)
- dst_key_free(&zone_keys[i]);
-
- return (result);
-}
-
-
-/**************************************************************************/
/*%
* The actual update code in all its glory. We try to follow
* the RFC2136 pseudocode as closely as possible.
@@ -2684,7 +1515,7 @@ ns_update_start(ns_client_t *client, isc_result_t sigresult) {
isc_result_t result;
dns_name_t *zonename;
dns_rdataset_t *zone_rdataset;
- dns_zone_t *zone = NULL;
+ dns_zone_t *zone = NULL, *raw = NULL;
/*
* Interpret the zone section.
@@ -2718,6 +1549,17 @@ ns_update_start(ns_client_t *client, isc_result_t sigresult) {
if (result != ISC_R_SUCCESS)
FAILC(DNS_R_NOTAUTH, "not authoritative for update zone");
+ /*
+ * If there is a raw (unsigned) zone associated with this
+ * zone then it processes the UPDATE request.
+ */
+ dns_zone_getraw(zone, &raw);
+ if (raw != NULL) {
+ dns_zone_detach(&zone);
+ dns_zone_attach(raw, &zone);
+ dns_zone_detach(&raw);
+ }
+
switch(dns_zone_gettype(zone)) {
case dns_zone_master:
case dns_zone_dlz:
@@ -4229,9 +3071,14 @@ update_action(isc_task_t *task, isc_event_t *event) {
&diff));
} else if (has_dnskey && isdnssec(db, ver, privatetype)) {
isc_uint32_t interval;
+ dns_update_log_t log;
+
interval = dns_zone_getsigvalidityinterval(zone);
- result = update_signatures(client, zone, db, oldver,
- ver, &diff, interval);
+ log.func = update_log_cb;
+ log.arg = client;
+ result = dns_update_signatures(&log, zone, db, oldver,
+ ver, &diff, interval);
+
if (result != ISC_R_SUCCESS) {
update_log(client, zone,
ISC_LOG_ERROR,
@@ -4499,6 +3346,12 @@ send_forward_event(ns_client_t *client, dns_zone_t *zone) {
isc_task_t *zonetask = NULL;
ns_client_t *evclient;
+ /*
+ * This may take some time so replace this client.
+ */
+ if (!client->mortal && (client->attributes & NS_CLIENTATTR_TCP) == 0)
+ CHECK(ns_client_replace(client));
+
event = (update_event_t *)
isc_event_allocate(client->mctx, client, DNS_EVENT_UPDATE,
forward_action, NULL, sizeof(*event));
diff --git a/bin/named/zoneconf.c b/bin/named/zoneconf.c
index e440fbcc..3173074b 100644
--- a/bin/named/zoneconf.c
+++ b/bin/named/zoneconf.c
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: zoneconf.c,v 1.178 2011-07-01 02:25:47 marka Exp $ */
+/* $Id: zoneconf.c,v 1.182 2011-09-06 22:29:32 smann Exp $ */
/*% */
@@ -786,7 +786,7 @@ checknames(dns_zonetype_t ztype, const cfg_obj_t **maps,
isc_result_t
ns_zone_configure(const cfg_obj_t *config, const cfg_obj_t *vconfig,
const cfg_obj_t *zconfig, cfg_aclconfctx_t *ac,
- dns_zone_t *zone)
+ dns_zone_t *zone, dns_zone_t *raw)
{
isc_result_t result;
const char *zname;
@@ -820,6 +820,7 @@ ns_zone_configure(const cfg_obj_t *config, const cfg_obj_t *vconfig,
isc_stats_t *zoneqrystats;
isc_boolean_t zonestats_on;
int seconds;
+ dns_zone_t *mayberaw = (raw != NULL) ? raw : zone;
i = 0;
if (zconfig != NULL) {
@@ -851,9 +852,16 @@ ns_zone_configure(const cfg_obj_t *config, const cfg_obj_t *vconfig,
RETERR(ns_config_getclass(cfg_tuple_get(zconfig, "class"),
vclass, &zclass));
dns_zone_setclass(zone, zclass);
+ if (raw != NULL)
+ dns_zone_setclass(raw, zclass);
ztype = zonetype_fromconfig(zoptions);
- dns_zone_settype(zone, ztype);
+ if (raw != NULL) {
+ dns_zone_settype(raw, ztype);
+ dns_zone_settype(zone, dns_zone_master);
+ } else
+ dns_zone_settype(zone, ztype);
+
obj = NULL;
result = cfg_map_get(zoptions, "database", &obj);
@@ -914,18 +922,40 @@ ns_zone_configure(const cfg_obj_t *config, const cfg_obj_t *vconfig,
else
INSIST(0);
}
- RETERR(dns_zone_setfile2(zone, filename, masterformat));
+
+ if (raw != NULL) {
+#define SIGNED ".signed"
+ size_t signedlen = strlen(filename) + sizeof(SIGNED);
+ char *signedname;
+
+ RETERR(dns_zone_setfile2(raw, filename, masterformat));
+ signedname = isc_mem_get(mctx, signedlen);
+ if (signedname == NULL)
+ return (ISC_R_NOMEMORY);
+
+ (void)snprintf(signedname, signedlen, "%s" SIGNED, filename);
+ result = dns_zone_setfile2(zone, signedname,
+ dns_masterformat_raw);
+ isc_mem_put(mctx, signedname, signedlen);
+ if (result != ISC_R_SUCCESS)
+ return (result);
+ } else
+ RETERR(dns_zone_setfile2(zone, filename, masterformat));
obj = NULL;
result = cfg_map_get(zoptions, "journal", &obj);
if (result == ISC_R_SUCCESS)
- RETERR(dns_zone_setjournal(zone, cfg_obj_asstring(obj)));
+ RETERR(dns_zone_setjournal(mayberaw, cfg_obj_asstring(obj)));
+ /*
+ * Notify messages are processed by the raw zone if it exists.
+ */
if (ztype == dns_zone_slave)
RETERR(configure_zone_acl(zconfig, vconfig, config,
- allow_notify, ac, zone,
+ allow_notify, ac, mayberaw,
dns_zone_setnotifyacl,
dns_zone_clearnotifyacl));
+
/*
* XXXAG This probably does not make sense for stubs.
*/
@@ -955,6 +985,8 @@ ns_zone_configure(const cfg_obj_t *config, const cfg_obj_t *vconfig,
else
INSIST(0);
}
+ if (raw != NULL)
+ dns_zone_setdialup(raw, dialup);
dns_zone_setdialup(zone, dialup);
obj = NULL;
@@ -994,6 +1026,8 @@ ns_zone_configure(const cfg_obj_t *config, const cfg_obj_t *vconfig,
else
INSIST(0);
}
+ if (raw != NULL)
+ dns_zone_setnotifytype(raw, dns_notifytype_no);
dns_zone_setnotifytype(zone, notifytype);
obj = NULL;
@@ -1052,6 +1086,8 @@ ns_zone_configure(const cfg_obj_t *config, const cfg_obj_t *vconfig,
obj = NULL;
result = ns_config_get(maps, "max-journal-size", &obj);
INSIST(result == ISC_R_SUCCESS && obj != NULL);
+ if (raw != NULL)
+ dns_zone_setjournalsize(raw, -1);
dns_zone_setjournalsize(zone, -1);
if (cfg_obj_isstring(obj)) {
const char *str = cfg_obj_asstring(obj);
@@ -1071,6 +1107,8 @@ ns_zone_configure(const cfg_obj_t *config, const cfg_obj_t *vconfig,
}
journal_size = (isc_uint32_t)value;
}
+ if (raw != NULL)
+ dns_zone_setjournalsize(raw, journal_size);
dns_zone_setjournalsize(zone, journal_size);
obj = NULL;
@@ -1086,7 +1124,19 @@ ns_zone_configure(const cfg_obj_t *config, const cfg_obj_t *vconfig,
ixfrdiff = ISC_TRUE;
else
ixfrdiff = ISC_FALSE;
- dns_zone_setoption(zone, DNS_ZONEOPT_IXFRFROMDIFFS, ixfrdiff);
+ if (raw != NULL) {
+ dns_zone_setoption(raw, DNS_ZONEOPT_IXFRFROMDIFFS,
+ ISC_TRUE);
+ dns_zone_setoption(zone, DNS_ZONEOPT_IXFRFROMDIFFS,
+ ISC_FALSE);
+ } else
+ dns_zone_setoption(zone, DNS_ZONEOPT_IXFRFROMDIFFS,
+ ixfrdiff);
+
+ obj = NULL;
+ result = ns_config_get(maps, "request-ixfr", &obj);
+ INSIST(result == ISC_R_SUCCESS);
+ dns_zone_setrequestixfr(zone, cfg_obj_asboolean(obj));
checknames(ztype, maps, &obj);
INSIST(obj != NULL);
@@ -1099,8 +1149,21 @@ ns_zone_configure(const cfg_obj_t *config, const cfg_obj_t *vconfig,
fail = check = ISC_FALSE;
} else
INSIST(0);
- dns_zone_setoption(zone, DNS_ZONEOPT_CHECKNAMES, check);
- dns_zone_setoption(zone, DNS_ZONEOPT_CHECKNAMESFAIL, fail);
+ if (raw != NULL) {
+ dns_zone_setoption(raw, DNS_ZONEOPT_CHECKNAMES,
+ check);
+ dns_zone_setoption(raw, DNS_ZONEOPT_CHECKNAMESFAIL,
+ fail);
+ dns_zone_setoption(zone, DNS_ZONEOPT_CHECKNAMES,
+ ISC_FALSE);
+ dns_zone_setoption(zone, DNS_ZONEOPT_CHECKNAMESFAIL,
+ ISC_FALSE);
+ } else {
+ dns_zone_setoption(zone, DNS_ZONEOPT_CHECKNAMES,
+ check);
+ dns_zone_setoption(zone, DNS_ZONEOPT_CHECKNAMESFAIL,
+ fail);
+ }
obj = NULL;
result = ns_config_get(maps, "notify-delay", &obj);
@@ -1159,11 +1222,11 @@ ns_zone_configure(const cfg_obj_t *config, const cfg_obj_t *vconfig,
dns_acl_t *updateacl;
RETERR(configure_zone_acl(zconfig, vconfig, config,
- allow_update, ac, zone,
+ allow_update, ac, mayberaw,
dns_zone_setupdateacl,
dns_zone_clearupdateacl));
- updateacl = dns_zone_getupdateacl(zone);
+ updateacl = dns_zone_getupdateacl(mayberaw);
if (updateacl != NULL && dns_acl_isinsecure(updateacl))
isc_log_write(ns_g_lctx, DNS_LOGCATEGORY_SECURITY,
NS_LOGMODULE_SERVER, ISC_LOG_WARNING,
@@ -1171,7 +1234,11 @@ ns_zone_configure(const cfg_obj_t *config, const cfg_obj_t *vconfig,
"address, which is insecure",
zname);
- RETERR(configure_zone_ssutable(zoptions, zone, zname));
+ RETERR(configure_zone_ssutable(zoptions, mayberaw, zname));
+ }
+
+ if (ztype == dns_zone_master || raw != NULL) {
+ isc_boolean_t allow = ISC_FALSE, maint = ISC_FALSE;
obj = NULL;
result = ns_config_get(maps, "sig-validity-interval", &obj);
@@ -1236,10 +1303,28 @@ ns_zone_configure(const cfg_obj_t *config, const cfg_obj_t *vconfig,
INSIST(result == ISC_R_SUCCESS && obj != NULL);
RETERR(dns_zone_setrefreshkeyinterval(zone,
cfg_obj_asuint32(obj)));
- } else if (ztype == dns_zone_slave) {
+
+ obj = NULL;
+ result = cfg_map_get(zoptions, "auto-dnssec", &obj);
+ if (result == ISC_R_SUCCESS) {
+ const char *arg = cfg_obj_asstring(obj);
+ if (strcasecmp(arg, "allow") == 0)
+ allow = ISC_TRUE;
+ else if (strcasecmp(arg, "maintain") == 0)
+ allow = maint = ISC_TRUE;
+ else if (strcasecmp(arg, "off") == 0)
+ ;
+ else
+ INSIST(0);
+ dns_zone_setkeyopt(zone, DNS_ZONEKEY_ALLOW, allow);
+ dns_zone_setkeyopt(zone, DNS_ZONEKEY_MAINTAIN, maint);
+ }
+ }
+
+ if (ztype == dns_zone_slave) {
RETERR(configure_zone_acl(zconfig, vconfig, config,
- allow_update_forwarding, ac, zone,
- dns_zone_setforwardacl,
+ allow_update_forwarding, ac,
+ mayberaw, dns_zone_setforwardacl,
dns_zone_clearforwardacl));
}
@@ -1247,15 +1332,13 @@ ns_zone_configure(const cfg_obj_t *config, const cfg_obj_t *vconfig,
* Primary master functionality.
*/
if (ztype == dns_zone_master) {
- isc_boolean_t allow = ISC_FALSE, maint = ISC_FALSE;
-
obj = NULL;
result = ns_config_get(maps, "check-wildcard", &obj);
if (result == ISC_R_SUCCESS)
check = cfg_obj_asboolean(obj);
else
check = ISC_FALSE;
- dns_zone_setoption(zone, DNS_ZONEOPT_CHECKWILDCARD, check);
+ dns_zone_setoption(mayberaw, DNS_ZONEOPT_CHECKWILDCARD, check);
obj = NULL;
result = ns_config_get(maps, "check-dup-records", &obj);
@@ -1269,8 +1352,8 @@ ns_zone_configure(const cfg_obj_t *config, const cfg_obj_t *vconfig,
fail = check = ISC_FALSE;
} else
INSIST(0);
- dns_zone_setoption(zone, DNS_ZONEOPT_CHECKDUPRR, check);
- dns_zone_setoption(zone, DNS_ZONEOPT_CHECKDUPRRFAIL, fail);
+ dns_zone_setoption(mayberaw, DNS_ZONEOPT_CHECKDUPRR, check);
+ dns_zone_setoption(mayberaw, DNS_ZONEOPT_CHECKDUPRRFAIL, fail);
obj = NULL;
result = ns_config_get(maps, "check-mx", &obj);
@@ -1284,13 +1367,13 @@ ns_zone_configure(const cfg_obj_t *config, const cfg_obj_t *vconfig,
fail = check = ISC_FALSE;
} else
INSIST(0);
- dns_zone_setoption(zone, DNS_ZONEOPT_CHECKMX, check);
- dns_zone_setoption(zone, DNS_ZONEOPT_CHECKMXFAIL, fail);
+ dns_zone_setoption(mayberaw, DNS_ZONEOPT_CHECKMX, check);
+ dns_zone_setoption(mayberaw, DNS_ZONEOPT_CHECKMXFAIL, fail);
obj = NULL;
result = ns_config_get(maps, "check-integrity", &obj);
INSIST(result == ISC_R_SUCCESS && obj != NULL);
- dns_zone_setoption(zone, DNS_ZONEOPT_CHECKINTEGRITY,
+ dns_zone_setoption(mayberaw, DNS_ZONEOPT_CHECKINTEGRITY,
cfg_obj_asboolean(obj));
obj = NULL;
@@ -1305,8 +1388,8 @@ ns_zone_configure(const cfg_obj_t *config, const cfg_obj_t *vconfig,
warn = ignore = ISC_TRUE;
} else
INSIST(0);
- dns_zone_setoption(zone, DNS_ZONEOPT_WARNMXCNAME, warn);
- dns_zone_setoption(zone, DNS_ZONEOPT_IGNOREMXCNAME, ignore);
+ dns_zone_setoption(mayberaw, DNS_ZONEOPT_WARNMXCNAME, warn);
+ dns_zone_setoption(mayberaw, DNS_ZONEOPT_IGNOREMXCNAME, ignore);
obj = NULL;
result = ns_config_get(maps, "check-srv-cname", &obj);
@@ -1320,32 +1403,17 @@ ns_zone_configure(const cfg_obj_t *config, const cfg_obj_t *vconfig,
warn = ignore = ISC_TRUE;
} else
INSIST(0);
- dns_zone_setoption(zone, DNS_ZONEOPT_WARNSRVCNAME, warn);
- dns_zone_setoption(zone, DNS_ZONEOPT_IGNORESRVCNAME, ignore);
+ dns_zone_setoption(mayberaw, DNS_ZONEOPT_WARNSRVCNAME, warn);
+ dns_zone_setoption(mayberaw, DNS_ZONEOPT_IGNORESRVCNAME,
+ ignore);
obj = NULL;
result = ns_config_get(maps, "dnssec-secure-to-insecure", &obj);
INSIST(result == ISC_R_SUCCESS && obj != NULL);
- dns_zone_setoption(zone, DNS_ZONEOPT_SECURETOINSECURE,
+ dns_zone_setoption(mayberaw, DNS_ZONEOPT_SECURETOINSECURE,
cfg_obj_asboolean(obj));
obj = NULL;
- result = cfg_map_get(zoptions, "auto-dnssec", &obj);
- if (result == ISC_R_SUCCESS) {
- const char *arg = cfg_obj_asstring(obj);
- if (strcasecmp(arg, "allow") == 0)
- allow = ISC_TRUE;
- else if (strcasecmp(arg, "maintain") == 0)
- allow = maint = ISC_TRUE;
- else if (strcasecmp(arg, "off") == 0)
- ;
- else
- INSIST(0);
- dns_zone_setkeyopt(zone, DNS_ZONEKEY_ALLOW, allow);
- dns_zone_setkeyopt(zone, DNS_ZONEKEY_MAINTAIN, maint);
- }
-
- obj = NULL;
result = cfg_map_get(zoptions, "dnssec-update-mode", &obj);
if (result == ISC_R_SUCCESS) {
const char *arg = cfg_obj_asstring(obj);
@@ -1385,12 +1453,12 @@ ns_zone_configure(const cfg_obj_t *config, const cfg_obj_t *vconfig,
RETERR(ns_config_getipandkeylist(config, obj, mctx,
&addrs, &keynames,
&count));
- result = dns_zone_setmasterswithkeys(zone, addrs,
+ result = dns_zone_setmasterswithkeys(mayberaw, addrs,
keynames, count);
ns_config_putipandkeylist(mctx, &addrs, &keynames,
count);
} else
- result = dns_zone_setmasters(zone, NULL, 0);
+ result = dns_zone_setmasters(mayberaw, NULL, 0);
RETERR(result);
multi = ISC_FALSE;
@@ -1400,59 +1468,63 @@ ns_zone_configure(const cfg_obj_t *config, const cfg_obj_t *vconfig,
INSIST(result == ISC_R_SUCCESS && obj != NULL);
multi = cfg_obj_asboolean(obj);
}
- dns_zone_setoption(zone, DNS_ZONEOPT_MULTIMASTER, multi);
+ dns_zone_setoption(mayberaw, DNS_ZONEOPT_MULTIMASTER, multi);
obj = NULL;
result = ns_config_get(maps, "max-transfer-time-in", &obj);
INSIST(result == ISC_R_SUCCESS && obj != NULL);
- dns_zone_setmaxxfrin(zone, cfg_obj_asuint32(obj) * 60);
+ dns_zone_setmaxxfrin(mayberaw, cfg_obj_asuint32(obj) * 60);
obj = NULL;
result = ns_config_get(maps, "max-transfer-idle-in", &obj);
INSIST(result == ISC_R_SUCCESS && obj != NULL);
- dns_zone_setidlein(zone, cfg_obj_asuint32(obj) * 60);
+ dns_zone_setidlein(mayberaw, cfg_obj_asuint32(obj) * 60);
obj = NULL;
result = ns_config_get(maps, "max-refresh-time", &obj);
INSIST(result == ISC_R_SUCCESS && obj != NULL);
- dns_zone_setmaxrefreshtime(zone, cfg_obj_asuint32(obj));
+ dns_zone_setmaxrefreshtime(mayberaw, cfg_obj_asuint32(obj));
obj = NULL;
result = ns_config_get(maps, "min-refresh-time", &obj);
INSIST(result == ISC_R_SUCCESS && obj != NULL);
- dns_zone_setminrefreshtime(zone, cfg_obj_asuint32(obj));
+ dns_zone_setminrefreshtime(mayberaw, cfg_obj_asuint32(obj));
obj = NULL;
result = ns_config_get(maps, "max-retry-time", &obj);
INSIST(result == ISC_R_SUCCESS && obj != NULL);
- dns_zone_setmaxretrytime(zone, cfg_obj_asuint32(obj));
+ dns_zone_setmaxretrytime(mayberaw, cfg_obj_asuint32(obj));
obj = NULL;
result = ns_config_get(maps, "min-retry-time", &obj);
INSIST(result == ISC_R_SUCCESS && obj != NULL);
- dns_zone_setminretrytime(zone, cfg_obj_asuint32(obj));
+ dns_zone_setminretrytime(mayberaw, cfg_obj_asuint32(obj));
obj = NULL;
result = ns_config_get(maps, "transfer-source", &obj);
INSIST(result == ISC_R_SUCCESS && obj != NULL);
- RETERR(dns_zone_setxfrsource4(zone, cfg_obj_assockaddr(obj)));
+ RETERR(dns_zone_setxfrsource4(mayberaw,
+ cfg_obj_assockaddr(obj)));
ns_add_reserved_dispatch(ns_g_server, cfg_obj_assockaddr(obj));
obj = NULL;
result = ns_config_get(maps, "transfer-source-v6", &obj);
INSIST(result == ISC_R_SUCCESS && obj != NULL);
- RETERR(dns_zone_setxfrsource6(zone, cfg_obj_assockaddr(obj)));
+ RETERR(dns_zone_setxfrsource6(mayberaw,
+ cfg_obj_assockaddr(obj)));
ns_add_reserved_dispatch(ns_g_server, cfg_obj_assockaddr(obj));
obj = NULL;
result = ns_config_get(maps, "alt-transfer-source", &obj);
INSIST(result == ISC_R_SUCCESS && obj != NULL);
- RETERR(dns_zone_setaltxfrsource4(zone, cfg_obj_assockaddr(obj)));
+ RETERR(dns_zone_setaltxfrsource4(mayberaw,
+ cfg_obj_assockaddr(obj)));
obj = NULL;
result = ns_config_get(maps, "alt-transfer-source-v6", &obj);
INSIST(result == ISC_R_SUCCESS && obj != NULL);
- RETERR(dns_zone_setaltxfrsource6(zone, cfg_obj_assockaddr(obj)));
+ RETERR(dns_zone_setaltxfrsource6(mayberaw,
+ cfg_obj_assockaddr(obj)));
obj = NULL;
(void)ns_config_get(maps, "use-alt-transfer-source", &obj);
@@ -1468,11 +1540,11 @@ ns_zone_configure(const cfg_obj_t *config, const cfg_obj_t *vconfig,
alt = ISC_FALSE;
} else
alt = cfg_obj_asboolean(obj);
- dns_zone_setoption(zone, DNS_ZONEOPT_USEALTXFRSRC, alt);
+ dns_zone_setoption(mayberaw, DNS_ZONEOPT_USEALTXFRSRC, alt);
obj = NULL;
(void)ns_config_get(maps, "try-tcp-refresh", &obj);
- dns_zone_setoption(zone, DNS_ZONEOPT_TRYTCPREFRESH,
+ dns_zone_setoption(mayberaw, DNS_ZONEOPT_TRYTCPREFRESH,
cfg_obj_asboolean(obj));
break;
@@ -1540,7 +1612,18 @@ ns_zone_reusable(dns_zone_t *zone, const cfg_obj_t *zconfig) {
if (!((cfilename == NULL && zfilename == NULL) ||
(cfilename != NULL && zfilename != NULL &&
strcmp(cfilename, zfilename) == 0)))
- return (ISC_FALSE);
+ return (ISC_FALSE);
+
+ obj = NULL;
+ (void)cfg_map_get(zoptions, "signing", &obj);
+ if (obj == NULL || !cfg_obj_asboolean(obj)) {
+ dns_zone_t *raw = NULL;
+ dns_zone_getraw(zone, &raw);
+ if (raw != NULL) {
+ dns_zone_detach(&raw);
+ return (ISC_FALSE);
+ }
+ }
return (ISC_TRUE);
}
diff --git a/bin/tests/adb_test.c b/bin/tests/adb_test.c
index dc1f16ac..1bbe02a3 100644
--- a/bin/tests/adb_test.c
+++ b/bin/tests/adb_test.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004, 2005, 2007, 2009 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004, 2005, 2007, 2009, 2011 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 1999-2001 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: adb_test.c,v 1.70 2009-09-02 23:48:01 tbox Exp $ */
+/* $Id: adb_test.c,v 1.73 2011-08-30 23:46:51 tbox Exp $ */
/*! \file */
@@ -264,9 +264,8 @@ lookup(const char *target) {
result = dns_adb_createfind(adb, t2, lookup_callback, client,
&client->name, dns_rootname, 0, options,
now, NULL, view->dstport, &client->find);
-#if 0
- check_result(result, "dns_adb_createfind()");
-#endif
+ if (result != ISC_R_SUCCESS)
+ printf("DNS_ADB_CREATEFIND -> %s\n", dns_result_totext(result));
dns_adb_dumpfind(client->find, stderr);
if ((client->find->options & DNS_ADBFIND_WANTEVENT) != 0) {
@@ -414,7 +413,9 @@ main(int argc, char **argv) {
dns_view_detach(&view);
adb = NULL;
+ fprintf(stderr, "Destroying socket manager\n");
isc_socketmgr_destroy(&socketmgr);
+ fprintf(stderr, "Destroying timer manager\n");
isc_timermgr_destroy(&timermgr);
fprintf(stderr, "Destroying task manager\n");
diff --git a/bin/tests/cfg_test.c b/bin/tests/cfg_test.c
index 9fb74cf3..461b80ab 100644
--- a/bin/tests/cfg_test.c
+++ b/bin/tests/cfg_test.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004, 2005, 2007, 2009, 2010 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004, 2005, 2007, 2009-2011 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 2001, 2002 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: cfg_test.c,v 1.23 2010-01-11 23:48:37 tbox Exp $ */
+/* $Id: cfg_test.c,v 1.25 2011-09-05 23:46:54 tbox Exp $ */
/*! \file */
@@ -49,7 +49,7 @@ check_result(isc_result_t result, const char *format, ...) {
static void
output(void *closure, const char *text, int textlen) {
UNUSED(closure);
- (void) isc_util_fwrite(text, 1, textlen, stdout);
+ (void) fwrite(text, 1, textlen, stdout);
}
static void
diff --git a/bin/tests/db_test.c b/bin/tests/db_test.c
index d2e81cfb..c742ae9f 100644
--- a/bin/tests/db_test.c
+++ b/bin/tests/db_test.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004, 2005, 2007-2009 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004, 2005, 2007-2009, 2011 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 1999-2001 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: db_test.c,v 1.68 2009-09-02 23:48:01 tbox Exp $ */
+/* $Id: db_test.c,v 1.70 2011-08-29 23:46:44 tbox Exp $ */
/*! \file
* \author
@@ -70,14 +70,10 @@ static isc_boolean_t ascending = ISC_TRUE;
static void
print_result(const char *message, isc_result_t result) {
- size_t len;
- if (message == NULL) {
- len = 0;
+ if (message == NULL)
message = "";
- }
- len = strlen(message);
- printf("%s%sresult %08x: %s\n", message, (len == 0U) ? "" : " ",
+ printf("%s%sresult %08x: %s\n", message, (*message == '\0') ? "" : " ",
result, isc_result_totext(result));
}
@@ -449,6 +445,7 @@ main(int argc, char *argv[]) {
argc -= isc_commandline_index;
argv += isc_commandline_index;
+ POST(argv);
if (argc != 0)
printf("ignoring trailing arguments\n");
diff --git a/bin/tests/dst/gsstest.c b/bin/tests/dst/gsstest.c
index 505d471b..b9aee2ce 100755
--- a/bin/tests/dst/gsstest.c
+++ b/bin/tests/dst/gsstest.c
@@ -14,12 +14,13 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: gsstest.c,v 1.16 2011-03-28 05:14:51 marka Exp $ */
+/* $Id: gsstest.c,v 1.18 2011-09-05 17:39:37 each Exp $ */
#include <config.h>
#include <stdlib.h>
#include <string.h>
+#include <time.h>
#include <isc/app.h>
#include <isc/base64.h>
@@ -146,14 +147,14 @@ recvresponse(isc_task_t *task, isc_event_t *event) {
REQUIRE(reqev != NULL);
+ query = reqev->ev_arg;
+
if (reqev->result != ISC_R_SUCCESS) {
fprintf(stderr, "I:request event result: %s\n",
isc_result_totext(reqev->result));
goto end;
}
- query = reqev->ev_arg;
-
response = NULL;
result = dns_message_create(mctx, DNS_MESSAGE_INTENTPARSE, &response);
CHECK("dns_message_create", result);
@@ -174,7 +175,7 @@ recvresponse(isc_task_t *task, isc_event_t *event) {
if (response)
dns_message_destroy(&response);
-end:
+ end:
if (query)
dns_message_destroy(&query);
@@ -220,6 +221,8 @@ sendquery(isc_task_t *task, isc_event_t *event)
CHECK("dns_name_fromtext", result);
result = dns_message_create(mctx, DNS_MESSAGE_INTENTRENDER, &message);
+ if (result != ISC_R_SUCCESS)
+ goto end;
message->opcode = dns_opcode_query;
message->rdclass = dns_rdataclass_in;
@@ -256,13 +259,13 @@ sendquery(isc_task_t *task, isc_event_t *event)
return;
- end:
- if (qname != NULL)
- dns_message_puttempname(message, &qname);
- if (qrdataset != NULL)
- dns_message_puttemprdataset(message, &qrdataset);
- if (message != NULL)
- dns_message_destroy(&message);
+ end:
+ if (qname != NULL)
+ dns_message_puttempname(message, &qname);
+ if (qrdataset != NULL)
+ dns_message_puttemprdataset(message, &qrdataset);
+ if (message != NULL)
+ dns_message_destroy(&message);
}
static void
@@ -280,14 +283,14 @@ initctx2(isc_task_t *task, isc_event_t *event) {
REQUIRE(reqev != NULL);
+ query = reqev->ev_arg;
+
if (reqev->result != ISC_R_SUCCESS) {
fprintf(stderr, "I:request event result: %s\n",
isc_result_totext(reqev->result));
goto end;
}
- query = reqev->ev_arg;
-
response = NULL;
result = dns_message_create(mctx, DNS_MESSAGE_INTENTPARSE, &response);
CHECK("dns_message_create", result);
@@ -331,7 +334,7 @@ initctx2(isc_task_t *task, isc_event_t *event) {
if (response)
dns_message_destroy(&response);
-end:
+ end:
if (query)
dns_message_destroy(&query);
@@ -406,7 +409,7 @@ initctx1(isc_task_t *task, isc_event_t *event) {
CHECK("dns_request_create", result);
return;
-end:
+ end:
event = isc_event_allocate(mctx, (void *)1, 1, console, NULL,
sizeof(*event));
isc_task_send(task, &event);return;
diff --git a/bin/tests/log_test.c b/bin/tests/log_test.c
index 25aaa949..b6735b3c 100644
--- a/bin/tests/log_test.c
+++ b/bin/tests/log_test.c
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: log_test.c,v 1.28 2011-01-14 00:51:43 tbox Exp $ */
+/* $Id: log_test.c,v 1.29 2011-08-28 23:46:51 marka Exp $ */
/* Principal Authors: DCL */
@@ -27,6 +27,7 @@
#include <isc/commandline.h>
#include <isc/mem.h>
#include <isc/string.h>
+#include <isc/util.h>
#include <dns/log.h>
@@ -94,6 +95,7 @@ main(int argc, char **argv) {
argc -= isc_commandline_index;
argv += isc_commandline_index;
+ POST(argv);
if (argc > 0) {
fprintf(stderr, usage, progname);
diff --git a/bin/tests/nsecify.c b/bin/tests/nsecify.c
index b4b43c55..243cc724 100644
--- a/bin/tests/nsecify.c
+++ b/bin/tests/nsecify.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004, 2007-2009 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004, 2007-2009, 2011 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 1999-2001, 2003 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: nsecify.c,v 1.10 2009-09-02 23:48:01 tbox Exp $ */
+/* $Id: nsecify.c,v 1.12 2011-08-29 23:46:44 tbox Exp $ */
#include <config.h>
@@ -157,6 +157,7 @@ nsecify(char *filename) {
result = dns_db_createiterator(db, 0, &dbiter);
check_result(result, "dns_db_createiterator()");
result = dns_dbiterator_first(dbiter);
+ check_result(result, "dns_dbiterator_first()");
node = NULL;
result = next_active(db, wversion, dbiter, name, &node);
while (result == ISC_R_SUCCESS) {
diff --git a/bin/tests/printmsg.c b/bin/tests/printmsg.c
index e12f3ab6..b0279ee7 100644
--- a/bin/tests/printmsg.c
+++ b/bin/tests/printmsg.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004, 2007 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004, 2007, 2011 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 1998-2001 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: printmsg.c,v 1.29 2007-06-19 23:46:59 tbox Exp $ */
+/* $Id: printmsg.c,v 1.31 2011-08-25 23:46:42 tbox Exp $ */
#include <config.h>
@@ -77,7 +77,9 @@ printsection(dns_message_t *msg, dns_section_t sectionid,
isc_region_t r;
dns_name_t empty_name;
char t[65536];
+#ifdef USEINITALWS
isc_boolean_t first;
+#endif
isc_boolean_t no_rdata;
if (sectionid == DNS_SECTION_QUESTION)
@@ -100,7 +102,9 @@ printsection(dns_message_t *msg, dns_section_t sectionid,
dns_message_currentname(msg, sectionid, &name);
isc_buffer_init(&target, t, sizeof(t));
+#ifdef USEINITALWS
first = ISC_TRUE;
+#endif
print_name = name;
for (rdataset = ISC_LIST_HEAD(name->list);
@@ -159,7 +163,6 @@ printrdata(dns_message_t *msg, dns_rdataset_t *rdataset, dns_name_t *owner,
isc_result_t
printmessage(dns_message_t *msg) {
- isc_boolean_t did_flag = ISC_FALSE;
isc_result_t result;
dns_rdataset_t *opt, *tsig;
dns_name_t *tsigname;
@@ -169,35 +172,21 @@ printmessage(dns_message_t *msg) {
printf(";; ->>HEADER<<- opcode: %s, status: %s, id: %u\n",
opcodetext[msg->opcode], rcodetext[msg->rcode], msg->id);
- printf(";; flags: ");
- if ((msg->flags & DNS_MESSAGEFLAG_QR) != 0) {
- printf("qr");
- did_flag = ISC_TRUE;
- }
- if ((msg->flags & DNS_MESSAGEFLAG_AA) != 0) {
- printf("%saa", did_flag ? " " : "");
- did_flag = ISC_TRUE;
- }
- if ((msg->flags & DNS_MESSAGEFLAG_TC) != 0) {
- printf("%stc", did_flag ? " " : "");
- did_flag = ISC_TRUE;
- }
- if ((msg->flags & DNS_MESSAGEFLAG_RD) != 0) {
- printf("%srd", did_flag ? " " : "");
- did_flag = ISC_TRUE;
- }
- if ((msg->flags & DNS_MESSAGEFLAG_RA) != 0) {
- printf("%sra", did_flag ? " " : "");
- did_flag = ISC_TRUE;
- }
- if ((msg->flags & DNS_MESSAGEFLAG_AD) != 0) {
- printf("%sad", did_flag ? " " : "");
- did_flag = ISC_TRUE;
- }
- if ((msg->flags & DNS_MESSAGEFLAG_CD) != 0) {
- printf("%scd", did_flag ? " " : "");
- did_flag = ISC_TRUE;
- }
+ printf(";; flags:");
+ if ((msg->flags & DNS_MESSAGEFLAG_QR) != 0)
+ printf(" qr");
+ if ((msg->flags & DNS_MESSAGEFLAG_AA) != 0)
+ printf(" aa");
+ if ((msg->flags & DNS_MESSAGEFLAG_TC) != 0)
+ printf(" tc");
+ if ((msg->flags & DNS_MESSAGEFLAG_RD) != 0)
+ printf(" rd");
+ if ((msg->flags & DNS_MESSAGEFLAG_RA) != 0)
+ printf(" ra");
+ if ((msg->flags & DNS_MESSAGEFLAG_AD) != 0)
+ printf(" ad");
+ if ((msg->flags & DNS_MESSAGEFLAG_CD) != 0)
+ printf(" cd");
printf("; QUERY: %u, ANSWER: %u, AUTHORITY: %u, ADDITIONAL: %u\n",
msg->counts[DNS_SECTION_QUESTION],
msg->counts[DNS_SECTION_ANSWER],
diff --git a/bin/tests/rbt_test.c b/bin/tests/rbt_test.c
index 1324a811..35fe3f0f 100644
--- a/bin/tests/rbt_test.c
+++ b/bin/tests/rbt_test.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004, 2005, 2007, 2009 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004, 2005, 2007, 2009, 2011 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 1999-2001 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: rbt_test.c,v 1.50 2009-09-02 23:48:01 tbox Exp $ */
+/* $Id: rbt_test.c,v 1.52 2011-08-28 23:46:41 tbox Exp $ */
#include <config.h>
@@ -88,7 +88,7 @@ delete_name(void *data, void *arg) {
UNUSED(arg);
name = data;
- isc_mem_put(mctx, data, sizeof(dns_name_t) + DNSNAMELEN);
+ isc_mem_put(mctx, name, sizeof(*name) + DNSNAMELEN);
}
static void
@@ -280,6 +280,7 @@ main(int argc, char **argv) {
argc -= isc_commandline_index;
argv += isc_commandline_index;
+ POST(argv);
if (argc > 1) {
printf("Usage: %s [-m]\n", progname);
diff --git a/bin/tests/rdata_test.c b/bin/tests/rdata_test.c
index bb28484d..937a38d7 100644
--- a/bin/tests/rdata_test.c
+++ b/bin/tests/rdata_test.c
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: rdata_test.c,v 1.51 2011-08-16 03:00:02 marka Exp $ */
+/* $Id: rdata_test.c,v 1.52 2011-08-28 09:10:41 marka Exp $ */
#include <config.h>
@@ -988,6 +988,15 @@ main(int argc, char *argv[]) {
type = token.value.as_ulong;
isc_buffer_init(&tbuf, outbuf, sizeof(outbuf));
result = dns_rdatatype_totext(type, &tbuf);
+ if (result != ISC_R_SUCCESS) {
+ fprintf(stdout,
+ "dns_rdatatype_totext "
+ "returned %s(%d)\n",
+ dns_result_totext(result), result);
+ fflush(stdout);
+ need_eol = 1;
+ continue;
+ }
fprintf(stdout, "type = %.*s(%d)\n",
(int)tbuf.used, (char*)tbuf.base, type);
} else if (token.type == isc_tokentype_string) {
@@ -1020,6 +1029,14 @@ main(int argc, char *argv[]) {
class = token.value.as_ulong;
isc_buffer_init(&tbuf, outbuf, sizeof(outbuf));
result = dns_rdatatype_totext(class, &tbuf);
+ if (result != ISC_R_SUCCESS) {
+ fprintf(stdout, "dns_rdatatype_totext "
+ "returned %s(%d)\n",
+ dns_result_totext(result), result);
+ fflush(stdout);
+ need_eol = 1;
+ continue;
+ }
fprintf(stdout, "class = %.*s(%d)\n",
(int)tbuf.used, (char*)tbuf.base, class);
} else if (token.type == isc_tokentype_string) {
diff --git a/bin/tests/shutdown_test.c b/bin/tests/shutdown_test.c
index 9e10723d..0264f7ef 100644
--- a/bin/tests/shutdown_test.c
+++ b/bin/tests/shutdown_test.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004, 2007 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004, 2007, 2011 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 1998-2001 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: shutdown_test.c,v 1.23 2007-06-19 23:46:59 tbox Exp $ */
+/* $Id: shutdown_test.c,v 1.25 2011-08-28 23:46:41 tbox Exp $ */
#include <config.h>
@@ -168,7 +168,7 @@ new_task(isc_mem_t *mctx, const char *name) {
int
main(int argc, char *argv[]) {
unsigned int workers;
- t_info *t1, *t2, *t3;
+ t_info *t1, *t2;
isc_task_t *task;
isc_mem_t *mctx, *mctx2;
@@ -197,7 +197,7 @@ main(int argc, char *argv[]) {
/*
* Test run-triggered shutdown.
*/
- t3 = new_task(mctx2, "foo");
+ (void)new_task(mctx2, "foo");
/*
* Test implicit shutdown.
diff --git a/bin/tests/startperf/README b/bin/tests/startperf/README
index 0f350c2e..0b8185b9 100644
--- a/bin/tests/startperf/README
+++ b/bin/tests/startperf/README
@@ -1,9 +1,17 @@
These scripts generate a named.conf file with an arbitrary number of
small zones, for testing startup performance.
-To generate a test server with 1000 zones, run:
+To generate a test server with 1000 zones each of which contains 5 A
+records, run:
- $ sh setup.sh 1000 > named.conf
+ $ sh setup.sh 1000 5 > named.conf
-Zones are generated with random names, and all of them load from the same
-file: smallzone.db.
+Zones are generated with random names, and the zone files are created
+in the subdirectory "zones".
+
+Or, to generate a test server with 100 zones which all load from the same
+generic file (smallzone.db):
+
+ $ sh setup.sh -s 100 > named.conf
+
+The "number of records" argument is ignored if -s is used.
diff --git a/bin/tests/startperf/clean.sh b/bin/tests/startperf/clean.sh
new file mode 100644
index 00000000..507f7779
--- /dev/null
+++ b/bin/tests/startperf/clean.sh
@@ -0,0 +1,20 @@
+#!/bin/sh
+#
+# Copyright (C) 2011 Internet Systems Consortium, Inc. ("ISC")
+#
+# Permission to use, copy, modify, and/or distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
+# REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+# AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
+# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+# LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+
+# $Id: clean.sh,v 1.3 2011-09-02 23:46:31 tbox Exp $
+
+rm -rf zones
+rm -f named.conf
diff --git a/bin/tests/startperf/makenames.pl b/bin/tests/startperf/makenames.pl
index abc1124f..149bc938 100644
--- a/bin/tests/startperf/makenames.pl
+++ b/bin/tests/startperf/makenames.pl
@@ -14,17 +14,19 @@
# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
# PERFORMANCE OF THIS SOFTWARE.
-# $Id: makenames.pl,v 1.2 2011-07-06 05:05:51 each Exp $
+# $Id: makenames.pl,v 1.3 2011-09-02 21:15:35 each Exp $
use strict;
-die "Usage: makenames.pl <num>" if (@ARGV == 0);
+die "Usage: makenames.pl <num> [<len>]" if (@ARGV == 0 || @ARGV > 2);
+my $len = 10;
+$len = @ARGV[1] if (@ARGV == 2);
my @chars = split("", "abcdefghijklmnopqrstuvwxyz123456789");
srand;
for (my $i = 0; $i < @ARGV[0]; $i++) {
my $name = "";
- for (my $j = 0; $j < 10; $j++) {
+ for (my $j = 0; $j < $len; $j++) {
my $r = rand 35;
$name .= $chars[$r];
}
diff --git a/bin/tests/startperf/mkzonefile.pl b/bin/tests/startperf/mkzonefile.pl
new file mode 100644
index 00000000..8c4b8f2a
--- /dev/null
+++ b/bin/tests/startperf/mkzonefile.pl
@@ -0,0 +1,51 @@
+#!/usr/bin/perl
+#
+# Copyright (C) 2011 Internet Systems Consortium, Inc. ("ISC")
+#
+# Permission to use, copy, modify, and/or distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
+# REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+# AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
+# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+# LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+
+# $Id: mkzonefile.pl,v 1.2 2011-09-02 21:15:35 each Exp $
+use strict;
+
+die "Usage: makenames.pl zonename num_records" if (@ARGV != 2);
+my $zname = @ARGV[0];
+my $nrecords = @ARGV[1];
+
+my @chars = split("", "abcdefghijklmnopqrstuvwxyz");
+
+print"\$TTL 300 ; 5 minutes
+\$ORIGIN $zname.
+@ IN SOA mname1. . (
+ 2011080201 ; serial
+ 20 ; refresh (20 seconds)
+ 20 ; retry (20 seconds)
+ 1814400 ; expire (3 weeks)
+ 600 ; minimum (1 hour)
+ )
+ NS ns
+ns A 10.53.0.3\n";
+
+srand;
+for (my $i = 0; $i < $nrecords; $i++) {
+ my $name = "";
+ for (my $j = 0; $j < 8; $j++) {
+ my $r = rand 25;
+ $name .= $chars[$r];
+ }
+ print "$name" . "\tIN\tA\t";
+ my $x = int rand 254;
+ my $y = int rand 254;
+ my $z = int rand 254;
+ print "10.$x.$y.$z\n";
+}
+
diff --git a/bin/tests/startperf/setup.sh b/bin/tests/startperf/setup.sh
index c5fade97..c3f500be 100644
--- a/bin/tests/startperf/setup.sh
+++ b/bin/tests/startperf/setup.sh
@@ -14,13 +14,30 @@
# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
# PERFORMANCE OF THIS SOFTWARE.
-# $Id: setup.sh,v 1.3 2011-07-07 23:47:49 tbox Exp $
+# $Id: setup.sh,v 1.4 2011-09-02 21:15:35 each Exp $
-if [ "$#" -ne 1 ]; then
- echo "Usage: $0 <number of zones>"
+usage () {
+ echo "Usage: $0 [-s] <number of zones> [<records per zone>]"
+ echo " -s: use the same zone file all zones"
exit 1
+}
+
+if [ "$#" -lt 1 -o "$#" -gt 3 ]; then
+ usage
+fi
+
+single_file=""
+if [ $1 = "-s" ]; then
+ single_file=yes
+ shift
fi
+nzones=$1
+shift
+
+nrecords=5
+[ "$#" -eq 1 ] && nrecords=$1
+
. ../system/conf.sh
cat << EOF
@@ -59,6 +76,12 @@ logging {
EOF
-$PERL makenames.pl $1 | while read zonename; do
+$PERL makenames.pl $nzones | while read zonename; do
+ if [ $single_file ]; then
echo "zone $zonename { type master; file \"smallzone.db\"; };"
+ else
+ [ -d zones ] || mkdir zones
+ $PERL mkzonefile.pl $zonename $nrecords > zones/$zonename.db
+ echo "zone $zonename { type master; file \"zones/$zonename.db\"; };"
+ fi
done
diff --git a/bin/tests/system/cacheclean/tests.sh b/bin/tests/system/cacheclean/tests.sh
index d5802a02..744377b9 100644
--- a/bin/tests/system/cacheclean/tests.sh
+++ b/bin/tests/system/cacheclean/tests.sh
@@ -15,7 +15,7 @@
# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
# PERFORMANCE OF THIS SOFTWARE.
-# $Id: tests.sh,v 1.8 2011-08-23 00:59:23 each Exp $
+# $Id: tests.sh,v 1.10 2011-09-01 05:28:14 marka Exp $
SYSTEMTESTTOP=..
. $SYSTEMTESTTOP/conf.sh
@@ -32,22 +32,24 @@ load_cache () {
$RNDC $RNDCOPTS flush
# load the positive cache entries
- $DIG $DIGOPTS txt top1.flushtest.example > /dev/null 2>1
- $DIG $DIGOPTS txt second1.top1.flushtest.example > /dev/null 2>1
- $DIG $DIGOPTS txt third1.second1.top1.flushtest.example > /dev/null 2>1
- $DIG $DIGOPTS txt third2.second1.top1.flushtest.example > /dev/null 2>1
- $DIG $DIGOPTS txt second2.top1.flushtest.example > /dev/null 2>1
- $DIG $DIGOPTS txt second3.top1.flushtest.example > /dev/null 2>1
- $DIG $DIGOPTS txt second1.top2.flushtest.example > /dev/null 2>1
- $DIG $DIGOPTS txt second2.top2.flushtest.example > /dev/null 2>1
- $DIG $DIGOPTS txt second3.top2.flushtest.example > /dev/null 2>1
- $DIG $DIGOPTS txt top3.flushtest.example > /dev/null 2>1
- $DIG $DIGOPTS txt second1.top3.flushtest.example > /dev/null 2>1
- $DIG $DIGOPTS txt third1.second1.top3.flushtest.example > /dev/null 2>1
- $DIG $DIGOPTS txt third2.second1.top3.flushtest.example > /dev/null 2>1
- $DIG $DIGOPTS txt third1.second2.top3.flushtest.example > /dev/null 2>1
- $DIG $DIGOPTS txt third2.second2.top3.flushtest.example > /dev/null 2>1
- $DIG $DIGOPTS txt second3.top3.flushtest.example > /dev/null 2>1
+ $DIG $DIGOPTS -f - << EOF > /dev/null 2>1
+txt top1.flushtest.example
+txt second1.top1.flushtest.example
+txt third1.second1.top1.flushtest.example
+txt third2.second1.top1.flushtest.example
+txt second2.top1.flushtest.example
+txt second3.top1.flushtest.example
+txt second1.top2.flushtest.example
+txt second2.top2.flushtest.example
+txt second3.top2.flushtest.example
+txt top3.flushtest.example
+txt second1.top3.flushtest.example
+txt third1.second1.top3.flushtest.example
+txt third2.second1.top3.flushtest.example
+txt third1.second2.top3.flushtest.example
+txt third2.second2.top3.flushtest.example
+txt second3.top3.flushtest.example
+EOF
# load the negative cache entries
# nxrrset:
@@ -57,8 +59,8 @@ load_cache () {
# empty nonterminal:
$DIG $DIGOPTS txt second2.top3.flushtest.example > /dev/null
- # sleep one second ensure the TTLs will be lower on cached data
- sleep 1
+ # sleep 2 seconds ensure the TTLs will be lower on cached data
+ sleep 2
}
dump_cache () {
@@ -75,10 +77,10 @@ in_cache () {
ttl=`$DIG $DIGOPTS "$@" | awk '{print $2}'`
[ -z "$ttl" ] && {
ttl=`$DIG $DIGOPTS +noanswer +auth "$@" | awk '{print $2}'`
- [ "$ttl" -eq 3600 ] && return 1
+ [ "$ttl" -ge 3599 ] && return 1
return 0
}
- [ "$ttl" -eq 3600 ] && return 1
+ [ "$ttl" -ge 3599 ] && return 1
return 0
}
@@ -106,7 +108,7 @@ nrecords=`grep flushtest.example ns2/named_dump.db | grep -v '^;' | wc -l`
if [ $ret != 0 ]; then echo "I:failed"; fi
status=`expr $status + $ret`
-echo "I:check flushing of individual nodes"
+echo "I:check flushing of individual nodes (interior node)"
ret=0
clear_cache
load_cache
@@ -114,12 +116,20 @@ load_cache
in_cache txt top1.flushtest.example || ret=1
$RNDC $RNDCOPTS flushname top1.flushtest.example
in_cache txt top1.flushtest.example && ret=1
+if [ $ret != 0 ]; then echo "I:failed"; fi
+status=`expr $status + $ret`
+echo "I:check flushing of individual nodes (leaf node, under the interior node)"
+ret=0
# leaf node, under the interior node (should still exist)
in_cache txt third2.second1.top1.flushtest.example || ret=1
$RNDC $RNDCOPTS flushname third2.second1.top1.flushtest.example
in_cache txt third2.second1.top1.flushtest.example && ret=1
+if [ $ret != 0 ]; then echo "I:failed"; fi
+status=`expr $status + $ret`
+echo "I:check flushing of individual nodes (another leaf node, with both positive and negative cache entries)"
+ret=0
# another leaf node, with both positive and negative cache entries
in_cache a third1.second1.top1.flushtest.example || ret=1
in_cache txt third1.second1.top1.flushtest.example || ret=1
diff --git a/bin/tests/system/conf.sh.in b/bin/tests/system/conf.sh.in
index f2bb61b4..2aa3239b 100644
--- a/bin/tests/system/conf.sh.in
+++ b/bin/tests/system/conf.sh.in
@@ -15,7 +15,7 @@
# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
# PERFORMANCE OF THIS SOFTWARE.
-# $Id: conf.sh.in,v 1.68 2011-08-09 02:24:28 marka Exp $
+# $Id: conf.sh.in,v 1.69 2011-08-30 05:16:11 marka Exp $
#
# Common configuration data for system tests, to be sourced into
@@ -54,7 +54,7 @@ JOURNALPRINT=$TOP/bin/tools/named-journalprint
# v6synth
SUBDIRS="acl allow_query addzone autosign builtin cacheclean checkconf
checknames checkzone database dlv dlvauto dlz dlzexternal
- dname dns64 dnssec forward glue gost ixfr limits
+ dname dns64 dnssec forward glue gost ixfr inline limits
logfileconfig lwresd masterfile masterformat metadata notify
nsupdate pending pkcs11 redirect resolver rndc rpz rrsetorder
sortlist smartsign staticstub stub tkey tsig tsiggss unknown
diff --git a/bin/tests/system/dnssec/tests.sh b/bin/tests/system/dnssec/tests.sh
index 895dac0a..9ddd5184 100644
--- a/bin/tests/system/dnssec/tests.sh
+++ b/bin/tests/system/dnssec/tests.sh
@@ -15,7 +15,7 @@
# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
# PERFORMANCE OF THIS SOFTWARE.
-# $Id: tests.sh,v 1.92 2011-07-08 01:43:26 each Exp $
+# $Id: tests.sh,v 1.93 2011-09-02 21:55:16 each Exp $
SYSTEMTESTTOP=..
. $SYSTEMTESTTOP/conf.sh
@@ -1082,6 +1082,9 @@ $DIG $DIGOPTS normalthenrrsig.secure.example. @10.53.0.4 a > /dev/null || ret=1
ans=`$DIG $DIGOPTS +short normalthenrrsig.secure.example. @10.53.0.4 rrsig` || ret=1
expect=`$DIG $DIGOPTS +short normalthenrrsig.secure.example. @10.53.0.3 rrsig | grep '^A' ` || ret=1
test "$ans" = "$expect" || ret=1
+# also check that RA is set
+$DIG $DIGOPTS normalthenrrsig.secure.example. @10.53.0.4 rrsig > dig.out.ns4.test$n || ret=1
+grep "flags:.*ra.*QUERY" dig.out.ns4.test$n > /dev/null || ret=1
n=`expr $n + 1`
if [ $ret != 0 ]; then echo "I:failed"; fi
status=`expr $status + $ret`
@@ -1092,6 +1095,9 @@ echo "I:checking RRSIG query not in cache ($n)"
ret=0
ans=`$DIG $DIGOPTS +short rrsigonly.secure.example. @10.53.0.4 rrsig` || ret=1
test -z "$ans" || ret=1
+# also check that RA is cleared
+$DIG $DIGOPTS rrsigonly.secure.example. @10.53.0.4 rrsig > dig.out.ns4.test$n || ret=1
+grep "flags:.*ra.*QUERY" dig.out.ns4.test$n > /dev/null && ret=1
n=`expr $n + 1`
if [ $ret != 0 ]; then echo "I:failed"; fi
status=`expr $status + $ret`
diff --git a/bin/tests/system/inline/clean.sh b/bin/tests/system/inline/clean.sh
new file mode 100644
index 00000000..f36b1d12
--- /dev/null
+++ b/bin/tests/system/inline/clean.sh
@@ -0,0 +1,27 @@
+# Copyright (C) 2011 Internet Systems Consortium, Inc. ("ISC")
+#
+# Permission to use, copy, modify, and/or distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
+# REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+# AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
+# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+# LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+
+# $Id: clean.sh,v 1.2 2011-08-30 23:46:52 tbox Exp $
+
+rm -f */named.memstats
+rm -f */named.run
+rm -f */trusted.conf
+rm -f ns2/bits.db
+rm -f ns3/K*
+rm -f ns3/bits.bk
+rm -f ns3/bits.bk.jnl
+rm -f ns3/bits.bk.signed
+rm -f ns3/bits.bk.signed.jnl
+rm -f ns4/noixfr.db
+rm -f random.data
diff --git a/bin/tests/system/inline/ns1/named.conf b/bin/tests/system/inline/ns1/named.conf
new file mode 100644
index 00000000..61209758
--- /dev/null
+++ b/bin/tests/system/inline/ns1/named.conf
@@ -0,0 +1,42 @@
+/*
+ * Copyright (C) 2011 Internet Systems Consortium, Inc. ("ISC")
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
+ * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+ * AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
+ * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+ * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+ * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+/* $Id: named.conf,v 1.2 2011-08-30 23:46:52 tbox Exp $ */
+
+// NS1
+
+controls { /* empty */ };
+
+options {
+ query-source address 10.53.0.1;
+ notify-source 10.53.0.1;
+ transfer-source 10.53.0.1;
+ port 5300;
+ pid-file "named.pid";
+ listen-on { 10.53.0.1; };
+ listen-on-v6 { none; };
+ recursion no;
+ notify yes;
+ dnssec-enable yes;
+ dnssec-validation yes;
+};
+
+zone "." {
+ type master;
+ file "root.db.signed";
+};
+
+// include "trusted.conf";
diff --git a/bin/tests/system/inline/ns2/bits.db.in b/bin/tests/system/inline/ns2/bits.db.in
new file mode 100644
index 00000000..0d469e29
--- /dev/null
+++ b/bin/tests/system/inline/ns2/bits.db.in
@@ -0,0 +1,134 @@
+; Copyright (C) 2011 Internet Systems Consortium, Inc. ("ISC")
+;
+; Permission to use, copy, modify, and/or distribute this software for any
+; purpose with or without fee is hereby granted, provided that the above
+; copyright notice and this permission notice appear in all copies.
+;
+; THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
+; REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+; AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
+; INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+; LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+; OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+; PERFORMANCE OF THIS SOFTWARE.
+
+; $Id: bits.db.in,v 1.2 2011-08-30 23:46:52 tbox Exp $
+
+$TTL 300 ; 5 minutes
+@ IN SOA ns2 . (
+ 2000042407 ; serial
+ 20 ; refresh (20 seconds)
+ 20 ; retry (20 seconds)
+ 1814400 ; expire (3 weeks)
+ 3600 ; minimum (1 hour)
+ )
+ NS ns3
+ns2 A 10.53.0.2
+ns3 A 10.53.0.3
+
+a A 10.0.0.1
+b A 10.0.0.2
+d A 10.0.0.4
+
+; Used for testing ANY queries
+foo TXT "testing"
+foo A 10.0.1.0
+
+bad-cname CNAME a
+bad-dname DNAME @
+
+; Used for testing CNAME queries
+cname1 CNAME cname1-target
+cname1-target TXT "testing cname"
+
+cname2 CNAME cname2-target
+cname2-target TXT "testing cname"
+
+; Used for testing DNAME queries
+dname1 DNAME dname1-target
+foo.dname1-target TXT "testing dname"
+
+dname2 DNAME dname2-target
+foo.dname2-target TXT "testing dname"
+
+; A secure subdomain
+secure NS ns.secure
+ns.secure A 10.53.0.3
+
+; An insecure subdomain
+insecure NS ns.insecure
+ns.insecure A 10.53.0.3
+
+; A secure subdomain we're going to inject bogus data into
+bogus NS ns.bogus
+ns.bogus A 10.53.0.3
+
+; A dynamic secure subdomain
+dynamic NS dynamic
+dynamic A 10.53.0.3
+
+; A insecure subdomain
+mustbesecure NS ns.mustbesecure
+ns.mustbesecure A 10.53.0.3
+
+; A rfc2535 signed zone w/ CNAME
+rfc2535 NS ns.rfc2535
+ns.rfc2535 A 10.53.0.3
+
+z A 10.0.0.26
+
+keyless NS ns.keyless
+ns.keyless A 10.53.0.3
+
+nsec3 NS ns.nsec3
+ns.nsec3 A 10.53.0.3
+
+optout NS ns.optout
+ns.optout A 10.53.0.3
+
+nsec3-unknown NS ns.nsec3-unknown
+ns.nsec3-unknown A 10.53.0.3
+
+optout-unknown NS ns.optout-unknown
+ns.optout-unknown A 10.53.0.3
+
+multiple NS ns.multiple
+ns.multiple A 10.53.0.3
+
+*.wild A 10.0.0.27
+
+rsasha256 NS ns.rsasha256
+ns.rsasha256 A 10.53.0.3
+
+rsasha512 NS ns.rsasha512
+ns.rsasha512 A 10.53.0.3
+
+kskonly NS ns.kskonly
+ns.kskonly A 10.53.0.3
+
+update-nsec3 NS ns.update-nsec3
+ns.update-nsec3 A 10.53.0.3
+
+auto-nsec NS ns.auto-nsec
+ns.auto-nsec A 10.53.0.3
+
+auto-nsec3 NS ns.auto-nsec3
+ns.auto-nsec3 A 10.53.0.3
+
+
+below-cname CNAME some.where.else.
+
+insecure.below-cname NS ns.insecure.below-cname
+ns.insecure.below-cname A 10.53.0.3
+
+secure.below-cname NS ns.secure.below-cname
+ns.secure.below-cname A 10.53.0.3
+
+ttlpatch NS ns.ttlpatch
+ns.ttlpatch A 10.53.0.3
+
+split-dnssec NS ns.split-dnssec
+ns.split-dnssec A 10.53.0.3
+
+split-smart NS ns.split-smart
+ns.split-smart A 10.53.0.3
diff --git a/bin/tests/system/inline/ns2/named.conf b/bin/tests/system/inline/ns2/named.conf
new file mode 100644
index 00000000..2623fe68
--- /dev/null
+++ b/bin/tests/system/inline/ns2/named.conf
@@ -0,0 +1,40 @@
+/*
+ * Copyright (C) 2011 Internet Systems Consortium, Inc. ("ISC")
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
+ * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+ * AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
+ * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+ * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+ * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+/* $Id: named.conf,v 1.2 2011-08-30 23:46:52 tbox Exp $ */
+
+// NS2
+
+controls { /* empty */ };
+
+options {
+ query-source address 10.53.0.2;
+ notify-source 10.53.0.2;
+ transfer-source 10.53.0.2;
+ port 5300;
+ pid-file "named.pid";
+ listen-on { 10.53.0.2; };
+ listen-on-v6 { none; };
+ recursion no;
+ notify yes;
+ notify-delay 0;
+};
+
+zone "bits" {
+ type master;
+ file "bits.db";
+ allow-update { any; };
+};
diff --git a/bin/tests/system/inline/ns3/named.conf b/bin/tests/system/inline/ns3/named.conf
new file mode 100644
index 00000000..e39580bb
--- /dev/null
+++ b/bin/tests/system/inline/ns3/named.conf
@@ -0,0 +1,55 @@
+/*
+ * Copyright (C) 2011 Internet Systems Consortium, Inc. ("ISC")
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
+ * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+ * AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
+ * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+ * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+ * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+/* $Id: named.conf,v 1.2 2011-08-30 23:46:52 tbox Exp $ */
+
+// NS2
+
+controls { /* empty */ };
+
+options {
+ query-source address 10.53.0.3;
+ notify-source 10.53.0.3;
+ transfer-source 10.53.0.3;
+ port 5300;
+ pid-file "named.pid";
+ listen-on { 10.53.0.3; };
+ listen-on-v6 { none; };
+ recursion no;
+ notify yes;
+ try-tcp-refresh no;
+ notify-delay 0;
+};
+
+zone "bits" {
+ type slave;
+ masters { 10.53.0.2; };
+ inline-signing yes;
+ auto-dnssec maintain;
+ allow-update-forwarding { any; };
+ file "bits.bk";
+};
+
+server 10.53.0.4 { request-ixfr no; };
+
+zone "noixfr" {
+ type slave;
+ masters { 10.53.0.4; };
+ inline-signing yes;
+ auto-dnssec maintain;
+ allow-update-forwarding { any; };
+ file "noixfr.bk";
+};
diff --git a/bin/tests/system/inline/ns3/sign.sh b/bin/tests/system/inline/ns3/sign.sh
new file mode 100644
index 00000000..fd185cd2
--- /dev/null
+++ b/bin/tests/system/inline/ns3/sign.sh
@@ -0,0 +1,34 @@
+#!/bin/sh -e
+#
+# Copyright (C) 2011 Internet Systems Consortium, Inc. ("ISC")
+#
+# Permission to use, copy, modify, and/or distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
+# REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+# AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
+# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+# LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+
+# $Id: sign.sh,v 1.2 2011-08-30 23:46:52 tbox Exp $
+
+SYSTEMTESTTOP=../..
+. $SYSTEMTESTTOP/conf.sh
+
+RANDFILE=../random.data
+
+zone=bits
+rm -f K${zone}.+*+*.key
+rm -f K${zone}.+*+*.private
+keyname=`$KEYGEN -q -r $RANDFILE -a RSASHA1 -b 768 -n zone $zone`
+keyname=`$KEYGEN -q -r $RANDFILE -a RSASHA1 -b 1024 -n zone -f KSK $zone`
+
+zone=noixfr
+rm -f K${zone}.+*+*.key
+rm -f K${zone}.+*+*.private
+keyname=`$KEYGEN -q -r $RANDFILE -a RSASHA1 -b 768 -n zone $zone`
+keyname=`$KEYGEN -q -r $RANDFILE -a RSASHA1 -b 1024 -n zone -f KSK $zone`
diff --git a/bin/tests/system/inline/ns4/named.conf b/bin/tests/system/inline/ns4/named.conf
new file mode 100644
index 00000000..df9d9b6f
--- /dev/null
+++ b/bin/tests/system/inline/ns4/named.conf
@@ -0,0 +1,40 @@
+/*
+ * Copyright (C) 2011 Internet Systems Consortium, Inc. ("ISC")
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
+ * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+ * AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
+ * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+ * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+ * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+/* $Id: named.conf,v 1.2 2011-08-30 23:46:52 tbox Exp $ */
+
+// NS2
+
+controls { /* empty */ };
+
+options {
+ query-source address 10.53.0.4;
+ notify-source 10.53.0.4;
+ transfer-source 10.53.0.4;
+ port 5300;
+ pid-file "named.pid";
+ listen-on { 10.53.0.4; };
+ listen-on-v6 { none; };
+ recursion no;
+ notify yes;
+ notify-delay 0;
+};
+
+zone "noixfr" {
+ type master;
+ file "noixfr.db";
+ allow-update { any; };
+};
diff --git a/bin/tests/system/inline/ns4/noixfr.db.in b/bin/tests/system/inline/ns4/noixfr.db.in
new file mode 100644
index 00000000..8fb44da1
--- /dev/null
+++ b/bin/tests/system/inline/ns4/noixfr.db.in
@@ -0,0 +1,134 @@
+; Copyright (C) 2011 Internet Systems Consortium, Inc. ("ISC")
+;
+; Permission to use, copy, modify, and/or distribute this software for any
+; purpose with or without fee is hereby granted, provided that the above
+; copyright notice and this permission notice appear in all copies.
+;
+; THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
+; REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+; AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
+; INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+; LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+; OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+; PERFORMANCE OF THIS SOFTWARE.
+
+; $Id: noixfr.db.in,v 1.2 2011-08-30 23:46:52 tbox Exp $
+
+$TTL 300 ; 5 minutes
+@ IN SOA ns4 . (
+ 2000042407 ; serial
+ 20 ; refresh (20 seconds)
+ 20 ; retry (20 seconds)
+ 1814400 ; expire (3 weeks)
+ 3600 ; minimum (1 hour)
+ )
+ NS ns3
+ns4 A 10.53.0.4
+ns3 A 10.53.0.3
+
+a A 10.0.0.1
+b A 10.0.0.2
+d A 10.0.0.4
+
+; Used for testing ANY queries
+foo TXT "testing"
+foo A 10.0.1.0
+
+bad-cname CNAME a
+bad-dname DNAME @
+
+; Used for testing CNAME queries
+cname1 CNAME cname1-target
+cname1-target TXT "testing cname"
+
+cname2 CNAME cname2-target
+cname2-target TXT "testing cname"
+
+; Used for testing DNAME queries
+dname1 DNAME dname1-target
+foo.dname1-target TXT "testing dname"
+
+dname2 DNAME dname2-target
+foo.dname2-target TXT "testing dname"
+
+; A secure subdomain
+secure NS ns.secure
+ns.secure A 10.53.0.3
+
+; An insecure subdomain
+insecure NS ns.insecure
+ns.insecure A 10.53.0.3
+
+; A secure subdomain we're going to inject bogus data into
+bogus NS ns.bogus
+ns.bogus A 10.53.0.3
+
+; A dynamic secure subdomain
+dynamic NS dynamic
+dynamic A 10.53.0.3
+
+; A insecure subdomain
+mustbesecure NS ns.mustbesecure
+ns.mustbesecure A 10.53.0.3
+
+; A rfc2535 signed zone w/ CNAME
+rfc2535 NS ns.rfc2535
+ns.rfc2535 A 10.53.0.3
+
+z A 10.0.0.26
+
+keyless NS ns.keyless
+ns.keyless A 10.53.0.3
+
+nsec3 NS ns.nsec3
+ns.nsec3 A 10.53.0.3
+
+optout NS ns.optout
+ns.optout A 10.53.0.3
+
+nsec3-unknown NS ns.nsec3-unknown
+ns.nsec3-unknown A 10.53.0.3
+
+optout-unknown NS ns.optout-unknown
+ns.optout-unknown A 10.53.0.3
+
+multiple NS ns.multiple
+ns.multiple A 10.53.0.3
+
+*.wild A 10.0.0.27
+
+rsasha256 NS ns.rsasha256
+ns.rsasha256 A 10.53.0.3
+
+rsasha512 NS ns.rsasha512
+ns.rsasha512 A 10.53.0.3
+
+kskonly NS ns.kskonly
+ns.kskonly A 10.53.0.3
+
+update-nsec3 NS ns.update-nsec3
+ns.update-nsec3 A 10.53.0.3
+
+auto-nsec NS ns.auto-nsec
+ns.auto-nsec A 10.53.0.3
+
+auto-nsec3 NS ns.auto-nsec3
+ns.auto-nsec3 A 10.53.0.3
+
+
+below-cname CNAME some.where.else.
+
+insecure.below-cname NS ns.insecure.below-cname
+ns.insecure.below-cname A 10.53.0.3
+
+secure.below-cname NS ns.secure.below-cname
+ns.secure.below-cname A 10.53.0.3
+
+ttlpatch NS ns.ttlpatch
+ns.ttlpatch A 10.53.0.3
+
+split-dnssec NS ns.split-dnssec
+ns.split-dnssec A 10.53.0.3
+
+split-smart NS ns.split-smart
+ns.split-smart A 10.53.0.3
diff --git a/bin/tests/system/inline/setup.sh b/bin/tests/system/inline/setup.sh
new file mode 100644
index 00000000..c1007d77
--- /dev/null
+++ b/bin/tests/system/inline/setup.sh
@@ -0,0 +1,39 @@
+# Copyright (C) 2011 Internet Systems Consortium, Inc. ("ISC")
+#
+# Permission to use, copy, modify, and/or distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
+# REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+# AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
+# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+# LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+
+# $Id: setup.sh,v 1.2 2011-08-30 23:46:52 tbox Exp $
+
+sh clean.sh
+
+touch ns2/trusted.conf
+cp ns2/bits.db.in ns2/bits.db
+rm -f ns2/bits.db.jnl
+
+rm -f ns3/bits.bk
+rm -f ns3/bits.bk.jnl
+rm -f ns3/bits.bk.signed
+rm -f ns3/bits.bk.signed.jnl
+
+touch ns4/trusted.conf
+cp ns4/noixfr.db.in ns4/noixfr.db
+rm -f ns4/noixfr.db.jnl
+
+rm -f ns3/noixfr.bk
+rm -f ns3/noixfr.bk.jnl
+rm -f ns3/noixfr.bk.signed
+rm -f ns3/noixfr.bk.signed.jnl
+
+../../../tools/genrandom 400 random.data
+
+(cd ns3; sh -e sign.sh)
diff --git a/bin/tests/system/inline/tests.sh b/bin/tests/system/inline/tests.sh
new file mode 100644
index 00000000..73bf5262
--- /dev/null
+++ b/bin/tests/system/inline/tests.sh
@@ -0,0 +1,329 @@
+#!/bin/sh
+#
+# Copyright (C) 2011 Internet Systems Consortium, Inc. ("ISC")
+#
+# Permission to use, copy, modify, and/or distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
+# REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+# AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
+# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+# LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+
+# $Id: tests.sh,v 1.2 2011-08-30 23:46:52 tbox Exp $
+
+SYSTEMTESTTOP=..
+. $SYSTEMTESTTOP/conf.sh
+
+DIGOPTS="+tcp +dnssec"
+
+status=0
+n=0
+
+n=`expr $n + 1`
+echo "I:checking that the zone is signed on initial transfer ($n)"
+ret=0
+for i in 1 2 3 4 5 6 7 8 9 10
+do
+ ret=0
+ $DIG $DIGOPTS @10.53.0.3 -p 5300 bits TYPE65534 > dig.out.ns3.test$n
+ grep "status: NOERROR" dig.out.ns3.test$n > /dev/null || ret=1
+ grep "ANSWER: 3," dig.out.ns3.test$n > /dev/null || ret=1
+ records=`grep "TYPE65534.*05[0-9A-F][0-9A-F][0-9A-F][0-9A-F]0001" dig.out.ns3.test$n | wc -l`
+ [ $records = 2 ] || ret=1
+ if [ $ret = 0 ]; then break; fi
+ sleep 1
+done
+if [ $ret != 0 ]; then echo "I:failed"; fi
+status=`expr $status + $ret`
+
+$NSUPDATE << EOF
+zone bits
+server 10.53.0.2 5300
+update add added.bits 0 A 1.2.3.4
+send
+EOF
+
+n=`expr $n + 1`
+echo "I:checking that the record is added on the hidden master ($n)"
+ret=0
+$DIG $DIGOPTS @10.53.0.2 -p 5300 added.bits A > dig.out.ns2.test$n
+grep "status: NOERROR" dig.out.ns2.test$n > /dev/null || ret=1
+grep "ANSWER: 1," dig.out.ns2.test$n > /dev/null || ret=1
+if [ $ret != 0 ]; then echo "I:failed"; fi
+status=`expr $status + $ret`
+
+n=`expr $n + 1`
+echo "I:checking that update has been transfered and has been signed ($n)"
+ret=0
+for i in 1 2 3 4 5 6 7 8 9 10
+do
+ ret=0
+ $DIG $DIGOPTS @10.53.0.3 -p 5300 added.bits A > dig.out.ns3.test$n
+ grep "status: NOERROR" dig.out.ns3.test$n > /dev/null || ret=1
+ grep "ANSWER: 2," dig.out.ns3.test$n > /dev/null || ret=1
+ if [ $ret = 0 ]; then break; fi
+ sleep 1
+done
+if [ $ret != 0 ]; then echo "I:failed"; fi
+status=`expr $status + $ret`
+
+$NSUPDATE << EOF
+zone bits
+server 10.53.0.2 5300
+update add bits 0 SOA ns2.bits. . 2011072400 20 20 1814400 3600
+send
+EOF
+
+n=`expr $n + 1`
+echo "I:checking YYYYMMDDVV (2011072400) serial on hidden master ($n)"
+ret=0
+$DIG $DIGOPTS @10.53.0.2 -p 5300 bits SOA > dig.out.ns2.test$n
+grep "status: NOERROR" dig.out.ns2.test$n > /dev/null || ret=1
+grep "ANSWER: 1," dig.out.ns2.test$n > /dev/null || ret=1
+grep "2011072400" dig.out.ns2.test$n > /dev/null || ret=1
+if [ $ret != 0 ]; then echo "I:failed"; fi
+status=`expr $status + $ret`
+
+n=`expr $n + 1`
+echo "I:checking YYYYMMDDVV (2011072400) serial in signed zone ($n)"
+for i in 1 2 3 4 5 6 7 8 9 10
+do
+ ret=0
+ $DIG $DIGOPTS @10.53.0.3 -p 5300 bits SOA > dig.out.ns3.test$n
+ grep "status: NOERROR" dig.out.ns3.test$n > /dev/null || ret=1
+ grep "ANSWER: 2," dig.out.ns3.test$n > /dev/null || ret=1
+ grep "2011072400" dig.out.ns3.test$n > /dev/null || ret=1
+ if [ $ret = 0 ]; then break; fi
+ sleep 1
+done
+if [ $ret != 0 ]; then echo "I:failed"; fi
+status=`expr $status + $ret`
+n=`expr $n + 1`
+
+echo "I:checking that the zone is signed on initial transfer, noixfr ($n)"
+ret=0
+for i in 1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 10
+do
+ ret=0
+ $DIG $DIGOPTS @10.53.0.3 -p 5300 noixfr TYPE65534 > dig.out.ns3.test$n
+ grep "status: NOERROR" dig.out.ns3.test$n > /dev/null || ret=1
+ grep "ANSWER: 3," dig.out.ns3.test$n > /dev/null || ret=1
+ records=`grep "TYPE65534.*05[0-9A-F][0-9A-F][0-9A-F][0-9A-F]0001" dig.out.ns3.test$n | wc -l`
+ [ $records = 2 ] || ret=1
+ if [ $ret = 0 ]; then break; fi
+ sleep 1
+done
+if [ $ret != 0 ]; then echo "I:failed"; fi
+status=`expr $status + $ret`
+
+$NSUPDATE << EOF
+zone noixfr
+server 10.53.0.4 5300
+update add added.noixfr 0 A 1.2.3.4
+send
+EOF
+
+n=`expr $n + 1`
+echo "I:checking that the record is added on the hidden master, noixfr ($n)"
+ret=0
+$DIG $DIGOPTS @10.53.0.4 -p 5300 added.noixfr A > dig.out.ns4.test$n
+grep "status: NOERROR" dig.out.ns4.test$n > /dev/null || ret=1
+grep "ANSWER: 1," dig.out.ns4.test$n > /dev/null || ret=1
+if [ $ret != 0 ]; then echo "I:failed"; fi
+status=`expr $status + $ret`
+
+n=`expr $n + 1`
+echo "I:checking that update has been transfered and has been signed, noixfr ($n)"
+ret=0
+for i in 1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 10 1 2 3 4 5 6 7 8 9 10
+do
+ ret=0
+ $DIG $DIGOPTS @10.53.0.3 -p 5300 added.noixfr A > dig.out.ns3.test$n
+ grep "status: NOERROR" dig.out.ns3.test$n > /dev/null || ret=1
+ grep "ANSWER: 2," dig.out.ns3.test$n > /dev/null || ret=1
+ if [ $ret = 0 ]; then break; fi
+ sleep 1
+done
+if [ $ret != 0 ]; then echo "I:failed"; fi
+status=`expr $status + $ret`
+
+$NSUPDATE << EOF
+zone noixfr
+server 10.53.0.4 5300
+update add noixfr 0 SOA ns4.noixfr. . 2011072400 20 20 1814400 3600
+send
+EOF
+
+n=`expr $n + 1`
+echo "I:checking YYYYMMDDVV (2011072400) serial on hidden master, noixfr ($n)"
+ret=0
+$DIG $DIGOPTS @10.53.0.4 -p 5300 noixfr SOA > dig.out.ns4.test$n
+grep "status: NOERROR" dig.out.ns4.test$n > /dev/null || ret=1
+grep "ANSWER: 1," dig.out.ns4.test$n > /dev/null || ret=1
+grep "2011072400" dig.out.ns4.test$n > /dev/null || ret=1
+if [ $ret != 0 ]; then echo "I:failed"; fi
+status=`expr $status + $ret`
+
+n=`expr $n + 1`
+echo "I:checking YYYYMMDDVV (2011072400) serial in signed zone, noixfr ($n)"
+for i in 1 2 3 4 5 6 7 8 9 10
+do
+ ret=0
+ $DIG $DIGOPTS @10.53.0.3 -p 5300 noixfr SOA > dig.out.ns3.test$n
+ grep "status: NOERROR" dig.out.ns3.test$n > /dev/null || ret=1
+ grep "ANSWER: 2," dig.out.ns3.test$n > /dev/null || ret=1
+ grep "2011072400" dig.out.ns3.test$n > /dev/null || ret=1
+ if [ $ret = 0 ]; then break; fi
+ sleep 1
+done
+if [ $ret != 0 ]; then echo "I:failed"; fi
+status=`expr $status + $ret`
+
+n=`expr $n + 1`
+echo "I:stop bump in the wire signer server ($n)"
+ret=0
+$PERL ../stop.pl . ns3 || ret=1
+if [ $ret != 0 ]; then echo "I:failed"; fi
+status=`expr $status + $ret`
+
+n=`expr $n + 1`
+echo "I:restart bump in the wire signer server ($n)"
+ret=0
+$PERL ../start.pl --noclean . ns3 || ret=1
+if [ $ret != 0 ]; then echo "I:failed"; fi
+status=`expr $status + $ret`
+
+$NSUPDATE << EOF
+zone bits
+server 10.53.0.2 5300
+update add bits 0 SOA ns2.bits. . 2011072450 20 20 1814400 3600
+send
+EOF
+
+n=`expr $n + 1`
+echo "I:checking YYYYMMDDVV (2011072450) serial on hidden master ($n)"
+ret=0
+$DIG $DIGOPTS @10.53.0.2 -p 5300 bits SOA > dig.out.ns2.test$n
+grep "status: NOERROR" dig.out.ns2.test$n > /dev/null || ret=1
+grep "ANSWER: 1," dig.out.ns2.test$n > /dev/null || ret=1
+grep "2011072450" dig.out.ns2.test$n > /dev/null || ret=1
+if [ $ret != 0 ]; then echo "I:failed"; fi
+status=`expr $status + $ret`
+
+n=`expr $n + 1`
+echo "I:checking YYYYMMDDVV (2011072450) serial in signed zone ($n)"
+for i in 1 2 3 4 5 6 7 8 9 10
+do
+ ret=0
+ $DIG $DIGOPTS @10.53.0.3 -p 5300 bits SOA > dig.out.ns3.test$n
+ grep "status: NOERROR" dig.out.ns3.test$n > /dev/null || ret=1
+ grep "ANSWER: 2," dig.out.ns3.test$n > /dev/null || ret=1
+ grep "2011072450" dig.out.ns3.test$n > /dev/null || ret=1
+ if [ $ret = 0 ]; then break; fi
+ sleep 1
+done
+if [ $ret != 0 ]; then echo "I:failed"; fi
+status=`expr $status + $ret`
+
+$NSUPDATE << EOF
+zone noixfr
+server 10.53.0.4 5300
+update add noixfr 0 SOA ns4.noixfr. . 2011072450 20 20 1814400 3600
+send
+EOF
+
+n=`expr $n + 1`
+echo "I:checking YYYYMMDDVV (2011072450) serial on hidden master, noixfr ($n)"
+ret=0
+$DIG $DIGOPTS @10.53.0.4 -p 5300 noixfr SOA > dig.out.ns4.test$n
+grep "status: NOERROR" dig.out.ns4.test$n > /dev/null || ret=1
+grep "ANSWER: 1," dig.out.ns4.test$n > /dev/null || ret=1
+grep "2011072450" dig.out.ns4.test$n > /dev/null || ret=1
+if [ $ret != 0 ]; then echo "I:failed"; fi
+status=`expr $status + $ret`
+
+n=`expr $n + 1`
+echo "I:checking YYYYMMDDVV (2011072450) serial in signed zone, noixfr ($n)"
+for i in 1 2 3 4 5 6 7 8 9 10
+do
+ ret=0
+ $DIG $DIGOPTS @10.53.0.3 -p 5300 noixfr SOA > dig.out.ns3.test$n
+ grep "status: NOERROR" dig.out.ns3.test$n > /dev/null || ret=1
+ grep "ANSWER: 2," dig.out.ns3.test$n > /dev/null || ret=1
+ grep "2011072450" dig.out.ns3.test$n > /dev/null || ret=1
+ if [ $ret = 0 ]; then break; fi
+ sleep 1
+done
+if [ $ret != 0 ]; then echo "I:failed"; fi
+status=`expr $status + $ret`
+
+$NSUPDATE << EOF
+zone bits
+server 10.53.0.3 5300
+update add bits 0 SOA ns2.bits. . 2011072460 20 20 1814400 3600
+send
+EOF
+
+n=`expr $n + 1`
+echo "I:checking forwarded update on hidden master ($n)"
+ret=0
+$DIG $DIGOPTS @10.53.0.2 -p 5300 bits SOA > dig.out.ns2.test$n
+grep "status: NOERROR" dig.out.ns2.test$n > /dev/null || ret=1
+grep "ANSWER: 1," dig.out.ns2.test$n > /dev/null || ret=1
+grep "2011072460" dig.out.ns2.test$n > /dev/null || ret=1
+if [ $ret != 0 ]; then echo "I:failed"; fi
+status=`expr $status + $ret`
+
+n=`expr $n + 1`
+echo "I:checking forwarded update on signed zone ($n)"
+for i in 1 2 3 4 5 6 7 8 9 10
+do
+ ret=0
+ $DIG $DIGOPTS @10.53.0.3 -p 5300 bits SOA > dig.out.ns3.test$n
+ grep "status: NOERROR" dig.out.ns3.test$n > /dev/null || ret=1
+ grep "ANSWER: 2," dig.out.ns3.test$n > /dev/null || ret=1
+ grep "2011072460" dig.out.ns3.test$n > /dev/null || ret=1
+ if [ $ret = 0 ]; then break; fi
+ sleep 1
+done
+if [ $ret != 0 ]; then echo "I:failed"; fi
+status=`expr $status + $ret`
+
+$NSUPDATE << EOF
+zone noixfr
+server 10.53.0.3 5300
+update add noixfr 0 SOA ns4.noixfr. . 2011072460 20 20 1814400 3600
+send
+EOF
+
+n=`expr $n + 1`
+echo "I:checking forwarded update on hidden master, noixfr ($n)"
+ret=0
+$DIG $DIGOPTS @10.53.0.4 -p 5300 noixfr SOA > dig.out.ns4.test$n
+grep "status: NOERROR" dig.out.ns4.test$n > /dev/null || ret=1
+grep "ANSWER: 1," dig.out.ns4.test$n > /dev/null || ret=1
+grep "2011072460" dig.out.ns4.test$n > /dev/null || ret=1
+if [ $ret != 0 ]; then echo "I:failed"; fi
+status=`expr $status + $ret`
+
+n=`expr $n + 1`
+echo "I:checking forwarded update on signed zone, noixfr ($n)"
+for i in 1 2 3 4 5 6 7 8 9 10
+do
+ ret=0
+ $DIG $DIGOPTS @10.53.0.3 -p 5300 noixfr SOA > dig.out.ns3.test$n
+ grep "status: NOERROR" dig.out.ns3.test$n > /dev/null || ret=1
+ grep "ANSWER: 2," dig.out.ns3.test$n > /dev/null || ret=1
+ grep "2011072460" dig.out.ns3.test$n > /dev/null || ret=1
+ if [ $ret = 0 ]; then break; fi
+ sleep 1
+done
+if [ $ret != 0 ]; then echo "I:failed"; fi
+status=`expr $status + $ret`
+
+exit $status
diff --git a/bin/tests/system/ixfr/clean.sh b/bin/tests/system/ixfr/clean.sh
index 91e28b84..3846e433 100644
--- a/bin/tests/system/ixfr/clean.sh
+++ b/bin/tests/system/ixfr/clean.sh
@@ -1,6 +1,6 @@
#!/bin/sh
#
-# Copyright (C) 2004, 2007 Internet Systems Consortium, Inc. ("ISC")
+# Copyright (C) 2004, 2007, 2011 Internet Systems Consortium, Inc. ("ISC")
# Copyright (C) 2001 Internet Software Consortium.
#
# Permission to use, copy, modify, and/or distribute this software for any
@@ -15,7 +15,9 @@
# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
# PERFORMANCE OF THIS SOFTWARE.
-# $Id: clean.sh,v 1.6 2007-09-26 03:22:43 marka Exp $
+# $Id: clean.sh,v 1.8 2011-09-06 23:46:27 tbox Exp $
rm -f ns1/named.conf ns1/myftp.db
+rm -f ns3/*.jnl ns3/mytest.db ns3/subtest.db
+rm -f ns4/*.jnl ns4/*.db
rm -f */named.memstats
diff --git a/bin/tests/system/ixfr/ns3/mytest0.db b/bin/tests/system/ixfr/ns3/mytest0.db
new file mode 100644
index 00000000..c964c6df
--- /dev/null
+++ b/bin/tests/system/ixfr/ns3/mytest0.db
@@ -0,0 +1,31 @@
+; Copyright (C) 2011 Internet Systems Consortium, Inc. ("ISC")
+;
+; Permission to use, copy, modify, and/or distribute this software for any
+; purpose with or without fee is hereby granted, provided that the above
+; copyright notice and this permission notice appear in all copies.
+;
+; THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
+; REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+; AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
+; INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+; LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+; OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+; PERFORMANCE OF THIS SOFTWARE.
+
+; $Id: mytest0.db,v 1.3 2011-09-07 23:46:27 tbox Exp $
+
+$ORIGIN test.
+$TTL 15
+test. 15 IN SOA ns1.test. hostmaster.test. (
+ 1 ; serial
+ 3H ; refresh
+ 15 ; retry
+ 1w ; expire
+ 3h ; minimum
+ )
+ IN NS ns1.test.
+ IN NS ns2.test.
+ns1 IN A 10.53.0.3
+ns2 IN A 10.53.0.4
+host1 IN A 192.168.10.3
+host2 IN A 192.168.10.4
diff --git a/bin/tests/system/ixfr/ns3/mytest1.db b/bin/tests/system/ixfr/ns3/mytest1.db
new file mode 100644
index 00000000..36ae69bc
--- /dev/null
+++ b/bin/tests/system/ixfr/ns3/mytest1.db
@@ -0,0 +1,31 @@
+; Copyright (C) 2011 Internet Systems Consortium, Inc. ("ISC")
+;
+; Permission to use, copy, modify, and/or distribute this software for any
+; purpose with or without fee is hereby granted, provided that the above
+; copyright notice and this permission notice appear in all copies.
+;
+; THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
+; REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+; AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
+; INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+; LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+; OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+; PERFORMANCE OF THIS SOFTWARE.
+
+; $Id: mytest1.db,v 1.3 2011-09-07 23:46:27 tbox Exp $
+
+$ORIGIN test.
+$TTL 15
+test. 15 IN SOA ns1.test. hostmaster.test. (
+ 2 ; serial
+ 3H ; refresh
+ 15 ; retry
+ 1w ; expire
+ 3h ; minimum
+ )
+ IN NS ns1.test.
+ IN NS ns2.test.
+ns1 IN A 10.53.0.3
+ns2 IN A 10.53.0.4
+host1 IN A 192.168.10.13
+host2 IN A 192.168.10.4
diff --git a/bin/tests/system/ixfr/ns3/mytest2.db b/bin/tests/system/ixfr/ns3/mytest2.db
new file mode 100644
index 00000000..ca4e4264
--- /dev/null
+++ b/bin/tests/system/ixfr/ns3/mytest2.db
@@ -0,0 +1,31 @@
+; Copyright (C) 2011 Internet Systems Consortium, Inc. ("ISC")
+;
+; Permission to use, copy, modify, and/or distribute this software for any
+; purpose with or without fee is hereby granted, provided that the above
+; copyright notice and this permission notice appear in all copies.
+;
+; THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
+; REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+; AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
+; INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+; LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+; OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+; PERFORMANCE OF THIS SOFTWARE.
+
+; $Id: mytest2.db,v 1.3 2011-09-07 23:46:27 tbox Exp $
+
+$ORIGIN test.
+$TTL 15
+test. 15 IN SOA ns1.test. hostmaster.test. (
+ 4 ; serial
+ 3H ; refresh
+ 15 ; retry
+ 1w ; expire
+ 3h ; minimum
+ )
+ IN NS ns1.test.
+ IN NS ns2.test.
+ns1 IN A 10.53.0.3
+ns2 IN A 10.53.0.4
+host1 IN A 192.168.10.13
+host2 IN A 192.168.10.14
diff --git a/bin/tests/system/ixfr/ns3/named.conf b/bin/tests/system/ixfr/ns3/named.conf
new file mode 100644
index 00000000..225df371
--- /dev/null
+++ b/bin/tests/system/ixfr/ns3/named.conf
@@ -0,0 +1,53 @@
+/*
+ * Copyright (C) 2011 Internet Systems Consortium, Inc. ("ISC")
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
+ * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+ * AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
+ * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+ * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+ * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+/* $Id: named.conf,v 1.3 2011-09-07 23:46:27 tbox Exp $ */
+
+options {
+ query-source address 10.53.0.3;
+ notify-source 10.53.0.3;
+ transfer-source 10.53.0.3;
+ allow-transfer { any; };
+ port 5300;
+ pid-file "named.pid";
+ listen-on { 10.53.0.3; };
+ listen-on-v6 { none; };
+ recursion no;
+ notify yes;
+};
+
+key rndc_key {
+ secret "1234abcd8765";
+ algorithm hmac-md5;
+};
+
+controls {
+ inet 10.53.0.3 port 9953 allow { any; } keys { rndc_key; };
+};
+
+view "primary" {
+ ixfr-from-differences yes;
+ request-ixfr yes;
+ zone "test" IN {
+ type master;
+ file "mytest.db";
+ };
+ zone "sub.test" IN {
+ type master;
+ file "subtest.db";
+ request-ixfr no;
+ };
+};
diff --git a/bin/tests/system/ixfr/ns3/subtest0.db b/bin/tests/system/ixfr/ns3/subtest0.db
new file mode 100644
index 00000000..5bbeca42
--- /dev/null
+++ b/bin/tests/system/ixfr/ns3/subtest0.db
@@ -0,0 +1,29 @@
+; Copyright (C) 2011 Internet Systems Consortium, Inc. ("ISC")
+;
+; Permission to use, copy, modify, and/or distribute this software for any
+; purpose with or without fee is hereby granted, provided that the above
+; copyright notice and this permission notice appear in all copies.
+;
+; THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
+; REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+; AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
+; INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+; LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+; OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+; PERFORMANCE OF THIS SOFTWARE.
+
+; $Id: subtest0.db,v 1.3 2011-09-07 23:46:27 tbox Exp $
+
+$ORIGIN sub.test.
+$TTL 15
+sub.test. 15 IN SOA ns1.test. hostmaster.test. (
+ 1 ; serial
+ 3H ; refresh
+ 15 ; retry
+ 1w ; expire
+ 3h ; minimum
+ )
+ IN NS ns1.test.
+ IN NS ns2.test.
+host3 IN A 192.168.10.23
+host4 IN A 192.168.10.24
diff --git a/bin/tests/system/ixfr/ns3/subtest1.db b/bin/tests/system/ixfr/ns3/subtest1.db
new file mode 100644
index 00000000..49b719d9
--- /dev/null
+++ b/bin/tests/system/ixfr/ns3/subtest1.db
@@ -0,0 +1,29 @@
+; Copyright (C) 2011 Internet Systems Consortium, Inc. ("ISC")
+;
+; Permission to use, copy, modify, and/or distribute this software for any
+; purpose with or without fee is hereby granted, provided that the above
+; copyright notice and this permission notice appear in all copies.
+;
+; THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
+; REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+; AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
+; INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+; LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+; OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+; PERFORMANCE OF THIS SOFTWARE.
+
+; $Id: subtest1.db,v 1.3 2011-09-07 23:46:27 tbox Exp $
+
+$ORIGIN sub.test.
+$TTL 15
+sub.test. 15 IN SOA ns1.test. hostmaster.test. (
+ 3 ; serial
+ 3H ; refresh
+ 15 ; retry
+ 1w ; expire
+ 3h ; minimum
+ )
+ IN NS ns1.test.
+ IN NS ns2.test.
+host3 IN A 192.168.10.123
+host4 IN A 192.168.10.24
diff --git a/bin/tests/system/ixfr/ns4/named.conf b/bin/tests/system/ixfr/ns4/named.conf
new file mode 100644
index 00000000..8b5e0b45
--- /dev/null
+++ b/bin/tests/system/ixfr/ns4/named.conf
@@ -0,0 +1,54 @@
+/*
+ * Copyright (C) 2011 Internet Systems Consortium, Inc. ("ISC")
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
+ * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+ * AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
+ * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+ * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+ * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+/* $Id: named.conf,v 1.3 2011-09-07 23:46:28 tbox Exp $ */
+
+options {
+ query-source address 10.53.0.4;
+ notify-source 10.53.0.4;
+ transfer-source 10.53.0.4;
+ port 5300;
+ pid-file "named.pid";
+ listen-on { 10.53.0.4; };
+ listen-on-v6 { none; };
+ recursion no;
+ notify yes;
+};
+
+key rndc_key {
+ secret "1234abcd8765";
+ algorithm hmac-md5;
+};
+
+controls {
+ inet 10.53.0.4 port 9953 allow { any; } keys { rndc_key; };
+};
+
+view "primary" {
+ ixfr-from-differences yes;
+ request-ixfr yes;
+ zone "test" IN {
+ type slave;
+ file "mytest.db";
+ masters { 10.53.0.3; };
+ };
+ zone "sub.test" IN {
+ type slave;
+ file "subtest.db";
+ request-ixfr no;
+ masters { 10.53.0.3; };
+ };
+};
diff --git a/bin/tests/system/ixfr/setup.sh b/bin/tests/system/ixfr/setup.sh
index 820dd4e9..45259a80 100644
--- a/bin/tests/system/ixfr/setup.sh
+++ b/bin/tests/system/ixfr/setup.sh
@@ -1,6 +1,6 @@
#!/bin/sh
#
-# Copyright (C) 2004, 2007 Internet Systems Consortium, Inc. ("ISC")
+# Copyright (C) 2004, 2007, 2011 Internet Systems Consortium, Inc. ("ISC")
# Copyright (C) 2001 Internet Software Consortium.
#
# Permission to use, copy, modify, and/or distribute this software for any
@@ -15,9 +15,9 @@
# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
# PERFORMANCE OF THIS SOFTWARE.
-# $Id: setup.sh,v 1.4 2007-06-19 23:47:03 tbox Exp $
+# $Id: setup.sh,v 1.6 2011-09-06 23:46:27 tbox Exp $
-rm -f ns1/*.db ns1/*.jnl
+rm -f ns1/*.db ns1/*.jnl ns3/*.jnl ns4/*.jnl
cat <<EOF >ns1/named.conf
options {
@@ -41,3 +41,7 @@ controls {
inet 10.53.0.1 port 9953 allow { any; } keys { rndc_key; };
};
EOF
+
+# Setup initial db files for ns3
+cp ns3/mytest0.db ns3/mytest.db
+cp ns3/subtest0.db ns3/subtest.db
diff --git a/bin/tests/system/ixfr/tests.sh b/bin/tests/system/ixfr/tests.sh
index e3d6aa7c..c304d616 100644
--- a/bin/tests/system/ixfr/tests.sh
+++ b/bin/tests/system/ixfr/tests.sh
@@ -15,7 +15,13 @@
# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
# PERFORMANCE OF THIS SOFTWARE.
-# $Id: tests.sh,v 1.7 2011-03-05 23:52:29 tbox Exp $
+# $Id: tests.sh,v 1.8 2011-09-06 22:29:32 smann Exp $
+
+
+# WARNING: The test labelled "testing request-ixfr option in view vs zone"
+# is fragile because it depends upon counting instances of records
+# in the log file - need a better approach <sdm> - until then,
+# if you add any tests above that point, you will break the test.
SYSTEMTESTTOP=..
. $SYSTEMTESTTOP/conf.sh
@@ -132,5 +138,67 @@ $DIGCMD nil. TXT | grep 'fallback AXFR' >/dev/null || {
status=1
}
+echo "I:testing ixfr-from-differences option"
+# ns3 is master; ns4 is slave
+$CHECKZONE test. ns3/mytest.db > /dev/null 2>&1
+if [ $? -ne 0 ]
+then
+ echo "I:named-checkzone returned failure on ns3/mytest.db"
+fi
+# modify the master
+#echo "I: digging against master: "
+#$DIG $DIGOPTS @10.53.0.3 -p 5300 a host1.test.
+#echo "I: digging against slave: "
+#$DIG $DIGOPTS @10.53.0.4 -p 5300 a host1.test.
+
+cp ns3/mytest1.db ns3/mytest.db
+$RNDC -s 10.53.0.3 -p 9953 -c ../common/rndc.conf reload
+sleep 2
+
+# slave should have gotten notify and updated
+
+INCR=`grep "test/IN/primary" ns4/named.run|grep "got incremental"|wc -l`
+if [ $INCR -ne 1 ]
+then
+ echo "I:failed to get incremental response"
+ status=1
+fi
+
+echo "I:testing request-ixfr option in view vs zone"
+# There's a view with 2 zones. In the view, "request-ixfr yes"
+# but in the zone "sub.test", request-ixfr no"
+# we want to make sure that a change to sub.test results in AXFR, while
+# changes to test. result in IXFR
+
+echo "I: this result should be AXFR"
+cp ns3/subtest1.db ns3/subtest.db # change to sub.test zone, should be AXFR
+$RNDC -s 10.53.0.3 -p 9953 -c ../common/rndc.conf reload
+sleep 2
+
+echo "I: this result should be AXFR"
+NONINCR=`grep 'sub\.test/IN/primary' ns4/named.run|grep "got nonincremental" | wc -l`
+if [ $NONINCR -ne 2 ]
+then
+ echo "I:failed to get nonincremental response in 2nd AXFR test"
+ status=1
+else
+ echo "I: success: AXFR it was"
+fi
+
+echo "I: this result should be IXFR"
+cp ns3/mytest2.db ns3/mytest.db # change to test zone, should be IXFR
+$RNDC -s 10.53.0.3 -p 9953 -c ../common/rndc.conf reload
+sleep 2
+
+INCR=`grep "test/IN/primary" ns4/named.run|grep "got incremental"|wc -l`
+if [ $INCR -ne 2 ]
+then
+ echo "I:failed to get incremental response in 2nd IXFR test"
+ status=1
+else
+ echo "I: success: IXFR it was"
+fi
+
+
echo "I:exit status: $status"
exit $status
diff --git a/bin/tests/system/upforwd/ans4/ans.pl b/bin/tests/system/upforwd/ans4/ans.pl
new file mode 100644
index 00000000..b5aebc51
--- /dev/null
+++ b/bin/tests/system/upforwd/ans4/ans.pl
@@ -0,0 +1,351 @@
+#!/usr/bin/perl
+#
+# Copyright (C) 2011 Internet Systems Consortium, Inc. ("ISC")
+#
+# Permission to use, copy, modify, and/or distribute this software for any
+# purpose with or without fee is hereby granted, provided that the above
+# copyright notice and this permission notice appear in all copies.
+#
+# THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
+# REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+# AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
+# INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+# LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+# PERFORMANCE OF THIS SOFTWARE.
+
+# $Id: ans.pl,v 1.2 2011-08-31 06:49:10 marka Exp $
+
+#
+# This is the name server from hell. It provides canned
+# responses based on pattern matching the queries, and
+# can be reprogrammed on-the-fly over a TCP connection.
+#
+# The server listens for control connections on port 5301.
+# A control connection is a TCP stream of lines like
+#
+# /pattern/
+# name ttl type rdata
+# name ttl type rdata
+# ...
+# /pattern/
+# name ttl type rdata
+# name ttl type rdata
+# ...
+#
+# There can be any number of patterns, each associated
+# with any number of response RRs. Each pattern is a
+# Perl regular expression.
+#
+# Each incoming query is converted into a string of the form
+# "qname qtype" (the printable query domain name, space,
+# printable query type) and matched against each pattern.
+#
+# The first pattern matching the query is selected, and
+# the RR following the pattern line are sent in the
+# answer section of the response.
+#
+# Each new control connection causes the current set of
+# patterns and responses to be cleared before adding new
+# ones.
+#
+# The server handles UDP and TCP queries. Zone transfer
+# responses work, but must fit in a single 64 k message.
+#
+# Now you can add TSIG, just specify key/key data with:
+#
+# /pattern <key> <key_data>/
+# name ttl type rdata
+# name ttl type rdata
+#
+# Note that this data will still be sent with any request for
+# pattern, only this data will be signed. Currently, this is only
+# done for TCP.
+
+
+use IO::File;
+use IO::Socket;
+use Data::Dumper;
+use Net::DNS;
+use Net::DNS::Packet;
+use strict;
+
+# Ignore SIGPIPE so we won't fail if peer closes a TCP socket early
+local $SIG{PIPE} = 'IGNORE';
+
+# Flush logged output after every line
+local $| = 1;
+
+my $server_addr = "10.53.0.4";
+
+my $udpsock = IO::Socket::INET->new(LocalAddr => "$server_addr",
+ LocalPort => 5300, Proto => "udp", Reuse => 1) or die "$!";
+
+my $tcpsock = IO::Socket::INET->new(LocalAddr => "$server_addr",
+ LocalPort => 5300, Proto => "tcp", Listen => 5, Reuse => 1) or die "$!";
+
+print "listening on $server_addr:5300.\n";
+
+my $pidf = new IO::File "ans.pid", "w" or die "cannot open pid file: $!";
+print $pidf "$$\n" or die "cannot write pid file: $!";
+$pidf->close or die "cannot close pid file: $!";;
+sub rmpid { unlink "ans.pid"; exit 1; };
+
+$SIG{INT} = \&rmpid;
+$SIG{TERM} = \&rmpid;
+
+#my @answers = ();
+my @rules;
+sub handleUDP {
+ my ($buf) = @_;
+
+ my ($packet, $err) = new Net::DNS::Packet(\$buf, 0);
+ $err and die $err;
+
+ $packet->header->qr(1);
+ $packet->header->aa(1);
+
+ my @questions = $packet->question;
+ my $qname = $questions[0]->qname;
+ my $qtype = $questions[0]->qtype;
+
+ # get the existing signature if any, and clear the additional section
+ my $prev_tsig;
+ while (my $rr = $packet->pop("additional")) {
+ if ($rr->type eq "TSIG") {
+ $prev_tsig = $rr;
+ }
+ }
+
+ my $r;
+ foreach $r (@rules) {
+ my $pattern = $r->{pattern};
+ my($dbtype, $key_name, $key_data) = split(/ /,$pattern);
+ print "[handleUDP] $dbtype, $key_name, $key_data \n";
+ if ("$qname $qtype" =~ /$dbtype/) {
+ my $a;
+ foreach $a (@{$r->{answer}}) {
+ $packet->push("answer", $a);
+ }
+ if(defined($key_name) && defined($key_data)) {
+ # Sign the packet
+ print " Signing the response with " .
+ "$key_name/$key_data\n";
+ my $tsig = Net::DNS::RR->
+ new("$key_name TSIG $key_data");
+
+ # These kluges are necessary because Net::DNS
+ # doesn't know how to sign responses. We
+ # clear compnames so that the TSIG key and
+ # algorithm name won't be compressed, and
+ # add one to arcount because the signing
+ # function will attempt to decrement it,
+ # which is incorrect in a response. Finally
+ # we set request_mac to the previous digest.
+ $packet->{"compnames"} = {};
+ $packet->{"header"}{"arcount"} += 1;
+ if (defined($prev_tsig)) {
+ my $rmac = pack('n H*',
+ $prev_tsig->mac_size,
+ $prev_tsig->mac);
+ $tsig->{"request_mac"} =
+ unpack("H*", $rmac);
+ }
+
+ $packet->sign_tsig($tsig);
+ }
+ last;
+ }
+ }
+ #$packet->print;
+
+ return $packet->data;
+}
+
+# namelen:
+# given a stream of data, reads a DNS-formatted name and returns its
+# total length, thus making it possible to skip past it.
+sub namelen {
+ my ($data) = @_;
+ my $len = 0;
+ my $label_len = 0;
+ do {
+ $label_len = unpack("c", $data);
+ $data = substr($data, $label_len + 1);
+ $len += $label_len + 1;
+ } while ($label_len != 0);
+ return ($len);
+}
+
+# packetlen:
+# given a stream of data, reads a DNS wire-format packet and returns
+# its total length, making it possible to skip past it.
+sub packetlen {
+ my ($data) = @_;
+ my $q;
+ my $rr;
+
+ my ($header, $offset) = Net::DNS::Header->parse(\$data);
+ for (1 .. $header->qdcount) {
+ ($q, $offset) = Net::DNS::Question->parse(\$data, $offset);
+ }
+ for (1 .. $header->ancount) {
+ ($rr, $offset) = Net::DNS::RR->parse(\$data, $offset);
+ }
+ for (1 .. $header->nscount) {
+ ($rr, $offset) = Net::DNS::RR->parse(\$data, $offset);
+ }
+ for (1 .. $header->arcount) {
+ ($rr, $offset) = Net::DNS::RR->parse(\$data, $offset);
+ }
+ return $offset;
+}
+
+# sign_tcp_continuation:
+# This is a hack to correct the problem that Net::DNS has no idea how
+# to sign multiple-message TCP responses. Several data that are included
+# in the digest when signing a query or the first message of a response are
+# omitted when signing subsequent messages in a TCP stream.
+#
+# Net::DNS::Packet->sign_tsig() has the ability to use a custom signing
+# function (specified by calling Packet->sign_func()). We use this
+# function as the signing function for TCP continuations, and it removes
+# the unwanted data from the digest before calling the default sign_hmac
+# function.
+sub sign_tcp_continuation {
+ my ($key, $data) = @_;
+
+ # copy out first two bytes: size of the previous MAC
+ my $rmacsize = unpack("n", $data);
+ $data = substr($data, 2);
+
+ # copy out previous MAC
+ my $rmac = substr($data, 0, $rmacsize);
+ $data = substr($data, $rmacsize);
+
+ # try parsing out the packet information
+ my $plen = packetlen($data);
+ my $pdata = substr($data, 0, $plen);
+ $data = substr($data, $plen);
+
+ # remove the keyname, ttl, class, and algorithm name
+ $data = substr($data, namelen($data));
+ $data = substr($data, 6);
+ $data = substr($data, namelen($data));
+
+ # preserve the TSIG data
+ my $tdata = substr($data, 0, 8);
+
+ # prepare a new digest and sign with it
+ $data = pack("n", $rmacsize) . $rmac . $pdata . $tdata;
+ return Net::DNS::RR::TSIG::sign_hmac($key, $data);
+}
+
+sub handleTCP {
+ my ($buf) = @_;
+
+ my ($packet, $err) = new Net::DNS::Packet(\$buf, 0);
+ $err and die $err;
+
+ $packet->header->qr(1);
+ $packet->header->aa(1);
+
+ my @questions = $packet->question;
+ my $qname = $questions[0]->qname;
+ my $qtype = $questions[0]->qtype;
+
+ # get the existing signature if any, and clear the additional section
+ my $prev_tsig;
+ my $signer;
+ while (my $rr = $packet->pop("additional")) {
+ if ($rr->type eq "TSIG") {
+ $prev_tsig = $rr;
+ }
+ }
+
+ my @results = ();
+ my $count_these = 0;
+
+ my $r;
+ foreach $r (@rules) {
+ my $pattern = $r->{pattern};
+ my($dbtype, $key_name, $key_data) = split(/ /,$pattern);
+ print "[handleTCP] $dbtype, $key_name, $key_data \n";
+ if ("$qname $qtype" =~ /$dbtype/) {
+ $count_these++;
+ my $a;
+ foreach $a (@{$r->{answer}}) {
+ $packet->push("answer", $a);
+ }
+ if(defined($key_name) && defined($key_data)) {
+ # sign the packet
+ print " Signing the data with " .
+ "$key_name/$key_data\n";
+
+ my $tsig = Net::DNS::RR->
+ new("$key_name TSIG $key_data");
+
+ # These kluges are necessary because Net::DNS
+ # doesn't know how to sign responses. We
+ # clear compnames so that the TSIG key and
+ # algorithm name won't be compressed, and
+ # add one to arcount because the signing
+ # function will attempt to decrement it,
+ # which is incorrect in a response. Finally
+ # we set request_mac to the previous digest.
+ $packet->{"compnames"} = {};
+ $packet->{"header"}{"arcount"} += 1;
+ if (defined($prev_tsig)) {
+ my $rmac = pack('n H*',
+ $prev_tsig->mac_size,
+ $prev_tsig->mac);
+ $tsig->{"request_mac"} =
+ unpack("H*", $rmac);
+ }
+
+ $tsig->sign_func($signer) if defined($signer);
+ $packet->sign_tsig($tsig);
+ $signer = \&sign_tcp_continuation;
+
+ my $copy =
+ Net::DNS::Packet->new(\($packet->data));
+ $prev_tsig = $copy->pop("additional");
+ }
+ #$packet->print;
+ push(@results,$packet->data);
+ $packet = new Net::DNS::Packet(\$buf, 0);
+ $packet->header->qr(1);
+ $packet->header->aa(1);
+ }
+ }
+ print " A total of $count_these patterns matched\n";
+ return \@results;
+}
+
+# Main
+my $rin;
+my $rout;
+for (;;) {
+ $rin = '';
+ vec($rin, fileno($tcpsock), 1) = 1;
+ vec($rin, fileno($udpsock), 1) = 1;
+
+ select($rout = $rin, undef, undef, undef);
+
+ if (vec($rout, fileno($udpsock), 1)) {
+ printf "UDP request\n";
+ my $buf;
+ $udpsock->recv($buf, 512);
+ } elsif (vec($rout, fileno($tcpsock), 1)) {
+ my $conn = $tcpsock->accept;
+ my $buf;
+ for (;;) {
+ my $lenbuf;
+ my $n = $conn->sysread($lenbuf, 2);
+ last unless $n == 2;
+ my $len = unpack("n", $lenbuf);
+ $n = $conn->sysread($buf, $len);
+ }
+ sleep(1);
+ }
+}
diff --git a/bin/tests/system/upforwd/ns3/named.conf b/bin/tests/system/upforwd/ns3/named.conf
index c634871e..61af892d 100644
--- a/bin/tests/system/upforwd/ns3/named.conf
+++ b/bin/tests/system/upforwd/ns3/named.conf
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004, 2007 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004, 2007, 2011 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 2000, 2001 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: named.conf,v 1.10 2007-06-18 23:47:31 tbox Exp $ */
+/* $Id: named.conf,v 1.13 2011-09-02 02:25:07 marka Exp $ */
controls { /* empty */ };
@@ -38,3 +38,10 @@ zone "example" {
allow-update-forwarding { any; };
masters { 10.53.0.1; };
};
+
+zone "nomaster" {
+ type slave;
+ file "nomaster1.db";
+ allow-update-forwarding { any; };
+ masters { 10.53.0.4; };
+};
diff --git a/bin/tests/system/upforwd/ns3/nomaster.db b/bin/tests/system/upforwd/ns3/nomaster.db
new file mode 100644
index 00000000..07748deb
--- /dev/null
+++ b/bin/tests/system/upforwd/ns3/nomaster.db
@@ -0,0 +1,19 @@
+; Copyright (C) 2011 Internet Systems Consortium, Inc. ("ISC")
+;
+; Permission to use, copy, modify, and/or distribute this software for any
+; purpose with or without fee is hereby granted, provided that the above
+; copyright notice and this permission notice appear in all copies.
+;
+; THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
+; REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+; AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
+; INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+; LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+; OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+; PERFORMANCE OF THIS SOFTWARE.
+
+; $Id: nomaster.db,v 1.3 2011-08-31 23:46:44 tbox Exp $
+
+@ 0 SOA . . 141235 3600 1200 86400 1200
+@ 0 NS ns4
+ns4 0 A 10.53.0.4
diff --git a/bin/tests/system/upforwd/setup.sh b/bin/tests/system/upforwd/setup.sh
index 77838efe..a972febf 100644
--- a/bin/tests/system/upforwd/setup.sh
+++ b/bin/tests/system/upforwd/setup.sh
@@ -1,6 +1,6 @@
#!/bin/sh
#
-# Copyright (C) 2004, 2007 Internet Systems Consortium, Inc. ("ISC")
+# Copyright (C) 2004, 2007, 2011 Internet Systems Consortium, Inc. ("ISC")
# Copyright (C) 2000, 2001 Internet Software Consortium.
#
# Permission to use, copy, modify, and/or distribute this software for any
@@ -15,7 +15,8 @@
# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
# PERFORMANCE OF THIS SOFTWARE.
-# $Id: setup.sh,v 1.8 2007-06-19 23:47:06 tbox Exp $
+# $Id: setup.sh,v 1.10 2011-09-02 23:46:32 tbox Exp $
cp -f ns1/example1.db ns1/example.db
rm -f ns1/example.db.jnl ns2/example.bk ns2/example.bk.jnl
+cp -f ns3/nomaster.db ns3/nomaster1.db
diff --git a/bin/tests/system/upforwd/tests.sh b/bin/tests/system/upforwd/tests.sh
index 2eb3b30e..cc12e26b 100644
--- a/bin/tests/system/upforwd/tests.sh
+++ b/bin/tests/system/upforwd/tests.sh
@@ -1,6 +1,6 @@
#!/bin/sh
#
-# Copyright (C) 2004, 2007 Internet Systems Consortium, Inc. ("ISC")
+# Copyright (C) 2004, 2007, 2011 Internet Systems Consortium, Inc. ("ISC")
# Copyright (C) 2000, 2001 Internet Software Consortium.
#
# Permission to use, copy, modify, and/or distribute this software for any
@@ -15,7 +15,7 @@
# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
# PERFORMANCE OF THIS SOFTWARE.
-# $Id: tests.sh,v 1.10 2007-06-19 23:47:06 tbox Exp $
+# $Id: tests.sh,v 1.12 2011-08-31 23:46:43 tbox Exp $
# ns1 = stealth master
# ns2 = slave with update forwarding disabled; not currently used
@@ -99,5 +99,26 @@ $PERL ../digcomp.pl knowngood.after2 dig.out.ns1 || status=1
$PERL ../digcomp.pl knowngood.after2 dig.out.ns2 || status=1
$PERL ../digcomp.pl knowngood.after2 dig.out.ns3 || status=1
+echo "I:checking update forwarding to dead master"
+count=0
+ret=0
+while [ $count -lt 5 -a $ret -eq 0 ]
+do
+(
+$NSUPDATE -- - <<EOF
+server 10.53.0.3 5300
+zone nomaster
+update add unsigned.nomaster. 600 A 10.10.10.1
+update add unsigned.nomaster. 600 TXT Foo
+send
+EOF
+) > /dev/null 2>&1 &
+ $DIG +notcp +noadd +noauth nomaster.\
+ @10.53.0.3 soa -p 5300 > dig.out.ns3 || ret=1
+ grep "status: NOERROR" dig.out.ns3 > /dev/null || ret=1
+ count=`expr $count + 1`
+done
+if [ $ret != 0 ] ; then echo "I:failed"; status=`expr $status + $ret`; fi
+
echo "I:exit status: $status"
exit $status
diff --git a/contrib/dlz/drivers/sdlz_helper.c b/contrib/dlz/drivers/sdlz_helper.c
index a7d7f4af..2447d5df 100644
--- a/contrib/dlz/drivers/sdlz_helper.c
+++ b/contrib/dlz/drivers/sdlz_helper.c
@@ -50,8 +50,6 @@
* WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
-#ifdef DLZ
-
#include <config.h>
#include <dns/log.h>
@@ -527,5 +525,3 @@ sdlzh_get_parameter_value(isc_mem_t *mctx, const char *input, const char* key)
return isc_mem_strdup(mctx, value);
}
-
-#endif
diff --git a/doc/arm/Bv9ARM-book.xml b/doc/arm/Bv9ARM-book.xml
index 90644f7d..4cf4cc8c 100644
--- a/doc/arm/Bv9ARM-book.xml
+++ b/doc/arm/Bv9ARM-book.xml
@@ -18,7 +18,7 @@
- PERFORMANCE OF THIS SOFTWARE.
-->
-<!-- File: $Id: Bv9ARM-book.xml,v 1.500 2011-08-03 01:19:10 marka Exp $ -->
+<!-- File: $Id: Bv9ARM-book.xml,v 1.502 2011-09-06 22:29:32 smann Exp $ -->
<book xmlns:xi="http://www.w3.org/2001/XInclude">
<title>BIND 9 Administrator Reference Manual</title>
@@ -9555,8 +9555,9 @@ ns.domain.com.rpz-nsdname CNAME .
the local server, acting as a slave, will request incremental zone
transfers from the given remote server, a master. If not set, the
value of the <command>request-ixfr</command> option in
- the view or
- global options block is used as a default.
+ the view or global options block is used as a default. It may
+ also be set in the zone block and, if set there, it will
+ override the global or view setting for that zone.
</para>
<para>
@@ -10093,6 +10094,7 @@ view "external" {
<optional> ixfr-base <replaceable>string</replaceable> ; </optional>
<optional> ixfr-from-differences <replaceable>yes_or_no</replaceable>; </optional>
<optional> ixfr-tmp-file <replaceable>string</replaceable> ; </optional>
+ <optional> request-ixfr <replaceable>yes_or_no</replaceable> ; </optional>
<optional> maintain-ixfr-base <replaceable>yes_or_no</replaceable> ; </optional>
<optional> max-ixfr-log-size <replaceable>number</replaceable> ; </optional>
<optional> max-transfer-idle-out <replaceable>number</replaceable> ; </optional>
@@ -10115,6 +10117,7 @@ view "external" {
<optional> max-retry-time <replaceable>number</replaceable> ; </optional>
<optional> key-directory <replaceable>path_name</replaceable>; </optional>
<optional> auto-dnssec <constant>allow</constant>|<constant>maintain</constant>|<constant>off</constant>; </optional>
+ <optional> inline-signing <replacable>yes_or_no</replacable>; </optional>
<optional> zero-no-soa-ttl <replaceable>yes_or_no</replaceable> ; </optional>
<optional> serial-update-method <constant>increment</constant>|<constant>unixtime</constant>; </optional>
};
@@ -11278,6 +11281,20 @@ example.com. NS ns2.example.net.
</varlistentry>
<varlistentry>
+ <term><command>inline-signing</command></term>
+ <listitem>
+ <para>
+ <command>inline-signing</command> is used to enable
+ bump in the wire signing of a zone, where a
+ unsigned zone is transfered in or loaded from
+ disk and a signed version of the zone is served,
+ with possibly, a different serial number. This
+ behaviour is disabled by default.
+ </para>
+ </listitem>
+ </varlistentry>
+
+ <varlistentry>
<term><command>multi-master</command></term>
<listitem>
<para>
diff --git a/doc/arm/Bv9ARM.ch04.html b/doc/arm/Bv9ARM.ch04.html
index a4c3623d..cfb0cbed 100644
--- a/doc/arm/Bv9ARM.ch04.html
+++ b/doc/arm/Bv9ARM.ch04.html
@@ -14,7 +14,7 @@
- OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- PERFORMANCE OF THIS SOFTWARE.
-->
-<!-- $Id: Bv9ARM.ch04.html,v 1.139 2011-08-04 01:14:43 tbox Exp $ -->
+<!-- $Id: Bv9ARM.ch04.html,v 1.141 2011-09-07 01:14:43 tbox Exp $ -->
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
@@ -70,17 +70,17 @@
</dl></dd>
<dt><span class="sect1"><a href="Bv9ARM.ch04.html#rfc5011.support">Dynamic Trust Anchor Management</a></span></dt>
<dd><dl>
-<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2607664">Validating Resolver</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2607686">Authoritative Server</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2607625">Validating Resolver</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2607648">Authoritative Server</a></span></dt>
</dl></dd>
<dt><span class="sect1"><a href="Bv9ARM.ch04.html#pkcs11">PKCS #11 (Cryptoki) support</a></span></dt>
<dd><dl>
-<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2609507">Prerequisites</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2607730">Building BIND 9 with PKCS#11</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2607825">PKCS #11 Tools</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2607856">Using the HSM</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2609965">Specifying the engine on the command line</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2610011">Running named with automatic zone re-signing</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2609400">Prerequisites</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2607828">Building BIND 9 with PKCS#11</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2609425">PKCS #11 Tools</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2609456">Using the HSM</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2609927">Specifying the engine on the command line</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2609973">Running named with automatic zone re-signing</a></span></dt>
</dl></dd>
<dt><span class="sect1"><a href="Bv9ARM.ch04.html#id2572544">IPv6 Support in <acronym class="acronym">BIND</acronym> 9</a></span></dt>
<dd><dl>
@@ -1052,7 +1052,7 @@ options {
configuration files.</p>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
-<a name="id2607664"></a>Validating Resolver</h3></div></div></div>
+<a name="id2607625"></a>Validating Resolver</h3></div></div></div>
<p>To configure a validating resolver to use RFC 5011 to
maintain a trust anchor, configure the trust anchor using a
<span><strong class="command">managed-keys</strong></span> statement. Information about
@@ -1063,7 +1063,7 @@ options {
</div>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
-<a name="id2607686"></a>Authoritative Server</h3></div></div></div>
+<a name="id2607648"></a>Authoritative Server</h3></div></div></div>
<p>To set up an authoritative zone for RFC 5011 trust anchor
maintenance, generate two (or more) key signing keys (KSKs) for
the zone. Sign the zone with one of them; this is the "active"
@@ -1137,7 +1137,7 @@ $ <strong class="userinput"><code>dnssec-signzone -S -K keys example.net</code><
Debian Linux, Solaris x86 and Windows Server 2003.</p>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
-<a name="id2609507"></a>Prerequisites</h3></div></div></div>
+<a name="id2609400"></a>Prerequisites</h3></div></div></div>
<p>See the HSM vendor documentation for information about
installing, initializing, testing and troubleshooting the
HSM.</p>
@@ -1211,7 +1211,7 @@ $ <strong class="userinput"><code>patch -p1 -d openssl-0.9.8l \
when we configure BIND 9.</p>
<div class="sect3" lang="en">
<div class="titlepage"><div><div><h4 class="title">
-<a name="id2563796"></a>Building OpenSSL for the AEP Keyper on Linux</h4></div></div></div>
+<a name="id2580824"></a>Building OpenSSL for the AEP Keyper on Linux</h4></div></div></div>
<p>The AEP Keyper is a highly secure key storage device,
but does not provide hardware cryptographic acceleration. It
can carry out cryptographic operations, but it is probably
@@ -1243,7 +1243,7 @@ $ <strong class="userinput"><code>./Configure linux-generic32 -m32 -pthread \
</div>
<div class="sect3" lang="en">
<div class="titlepage"><div><div><h4 class="title">
-<a name="id2580864"></a>Building OpenSSL for the SCA 6000 on Solaris</h4></div></div></div>
+<a name="id2580962"></a>Building OpenSSL for the SCA 6000 on Solaris</h4></div></div></div>
<p>The SCA-6000 PKCS #11 provider is installed as a system
library, libpkcs11. It is a true crypto accelerator, up to 4
times faster than any CPU, so the flavor shall be
@@ -1287,12 +1287,12 @@ $ <strong class="userinput"><code>./Configure solaris64-x86_64-cc \
</div>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
-<a name="id2607730"></a>Building BIND 9 with PKCS#11</h3></div></div></div>
+<a name="id2607828"></a>Building BIND 9 with PKCS#11</h3></div></div></div>
<p>When building BIND 9, the location of the custom-built
OpenSSL library must be specified via configure.</p>
<div class="sect3" lang="en">
<div class="titlepage"><div><div><h4 class="title">
-<a name="id2607738"></a>Configuring BIND 9 for Linux</h4></div></div></div>
+<a name="id2607836"></a>Configuring BIND 9 for Linux</h4></div></div></div>
<p>To link with the PKCS #11 provider, threads must be
enabled in the BIND 9 build.</p>
<p>The PKCS #11 library for the AEP Keyper is currently
@@ -1308,7 +1308,7 @@ $ <strong class="userinput"><code>./configure CC="gcc -m32" --enable-threads \
</div>
<div class="sect3" lang="en">
<div class="titlepage"><div><div><h4 class="title">
-<a name="id2607769"></a>Configuring BIND 9 for Solaris</h4></div></div></div>
+<a name="id2607867"></a>Configuring BIND 9 for Solaris</h4></div></div></div>
<p>To link with the PKCS #11 provider, threads must be
enabled in the BIND 9 build.</p>
<pre class="screen">
@@ -1331,7 +1331,7 @@ $ <strong class="userinput"><code>./configure CC="cc -xarch=amd64" --enable-thre
</div>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
-<a name="id2607825"></a>PKCS #11 Tools</h3></div></div></div>
+<a name="id2609425"></a>PKCS #11 Tools</h3></div></div></div>
<p>BIND 9 includes a minimal set of tools to operate the
HSM, including
<span><strong class="command">pkcs11-keygen</strong></span> to generate a new key pair
@@ -1349,7 +1349,7 @@ $ <strong class="userinput"><code>./configure CC="cc -xarch=amd64" --enable-thre
</div>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
-<a name="id2607856"></a>Using the HSM</h3></div></div></div>
+<a name="id2609456"></a>Using the HSM</h3></div></div></div>
<p>First, we must set up the runtime environment so the
OpenSSL and PKCS #11 libraries can be loaded:</p>
<pre class="screen">
@@ -1437,7 +1437,7 @@ example.net.signed
</div>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
-<a name="id2609965"></a>Specifying the engine on the command line</h3></div></div></div>
+<a name="id2609927"></a>Specifying the engine on the command line</h3></div></div></div>
<p>The OpenSSL engine can be specified in
<span><strong class="command">named</strong></span> and all of the BIND
<span><strong class="command">dnssec-*</strong></span> tools by using the "-E
@@ -1458,7 +1458,7 @@ $ <strong class="userinput"><code>dnssec-signzone -E '' -S example.net</code></s
</div>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
-<a name="id2610011"></a>Running named with automatic zone re-signing</h3></div></div></div>
+<a name="id2609973"></a>Running named with automatic zone re-signing</h3></div></div></div>
<p>If you want
<span><strong class="command">named</strong></span> to dynamically re-sign zones using HSM
keys, and/or to to sign new records inserted via nsupdate, then
diff --git a/doc/arm/Bv9ARM.ch06.html b/doc/arm/Bv9ARM.ch06.html
index c71051a9..86d5f820 100644
--- a/doc/arm/Bv9ARM.ch06.html
+++ b/doc/arm/Bv9ARM.ch06.html
@@ -14,7 +14,7 @@
- OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- PERFORMANCE OF THIS SOFTWARE.
-->
-<!-- $Id: Bv9ARM.ch06.html,v 1.290 2011-08-04 01:14:43 tbox Exp $ -->
+<!-- $Id: Bv9ARM.ch06.html,v 1.292 2011-09-07 01:14:43 tbox Exp $ -->
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
@@ -90,16 +90,16 @@
<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2590214"><span><strong class="command">view</strong></span> Statement Definition and Usage</a></span></dt>
<dt><span class="sect2"><a href="Bv9ARM.ch06.html#zone_statement_grammar"><span><strong class="command">zone</strong></span>
Statement Grammar</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2591881"><span><strong class="command">zone</strong></span> Statement Definition and Usage</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2591826"><span><strong class="command">zone</strong></span> Statement Definition and Usage</a></span></dt>
</dl></dd>
-<dt><span class="sect1"><a href="Bv9ARM.ch06.html#id2595430">Zone File</a></span></dt>
+<dt><span class="sect1"><a href="Bv9ARM.ch06.html#id2595392">Zone File</a></span></dt>
<dd><dl>
<dt><span class="sect2"><a href="Bv9ARM.ch06.html#types_of_resource_records_and_when_to_use_them">Types of Resource Records and When to Use Them</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2597524">Discussion of MX Records</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2597554">Discussion of MX Records</a></span></dt>
<dt><span class="sect2"><a href="Bv9ARM.ch06.html#Setting_TTLs">Setting TTLs</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2598208">Inverse Mapping in IPv4</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2598334">Other Zone File Directives</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2598539"><acronym class="acronym">BIND</acronym> Master File Extension: the <span><strong class="command">$GENERATE</strong></span> Directive</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2598306">Inverse Mapping in IPv4</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2598433">Other Zone File Directives</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2598706"><acronym class="acronym">BIND</acronym> Master File Extension: the <span><strong class="command">$GENERATE</strong></span> Directive</a></span></dt>
<dt><span class="sect2"><a href="Bv9ARM.ch06.html#zonefile_format">Additional File Formats</a></span></dt>
</dl></dd>
<dt><span class="sect1"><a href="Bv9ARM.ch06.html#statistics">BIND9 Statistics</a></span></dt>
@@ -5803,8 +5803,9 @@ ns.domain.com.rpz-nsdname CNAME .
the local server, acting as a slave, will request incremental zone
transfers from the given remote server, a master. If not set, the
value of the <span><strong class="command">request-ixfr</strong></span> option in
- the view or
- global options block is used as a default.
+ the view or global options block is used as a default. It may
+ also be set in the zone block and, if set there, it will
+ override the global or view setting for that zone.
</p>
<p>
IXFR requests to servers that do not support IXFR will
@@ -6308,6 +6309,7 @@ view "external" {
[<span class="optional"> ixfr-base <em class="replaceable"><code>string</code></em> ; </span>]
[<span class="optional"> ixfr-from-differences <em class="replaceable"><code>yes_or_no</code></em>; </span>]
[<span class="optional"> ixfr-tmp-file <em class="replaceable"><code>string</code></em> ; </span>]
+ [<span class="optional"> request-ixfr <em class="replaceable"><code>yes_or_no</code></em> ; </span>]
[<span class="optional"> maintain-ixfr-base <em class="replaceable"><code>yes_or_no</code></em> ; </span>]
[<span class="optional"> max-ixfr-log-size <em class="replaceable"><code>number</code></em> ; </span>]
[<span class="optional"> max-transfer-idle-out <em class="replaceable"><code>number</code></em> ; </span>]
@@ -6330,6 +6332,7 @@ view "external" {
[<span class="optional"> max-retry-time <em class="replaceable"><code>number</code></em> ; </span>]
[<span class="optional"> key-directory <em class="replaceable"><code>path_name</code></em>; </span>]
[<span class="optional"> auto-dnssec <code class="constant">allow</code>|<code class="constant">maintain</code>|<code class="constant">off</code>; </span>]
+ [<span class="optional"> inline-signing <font color="red">&lt;replacable&gt;yes_or_no&lt;/replacable&gt;</font>; </span>]
[<span class="optional"> zero-no-soa-ttl <em class="replaceable"><code>yes_or_no</code></em> ; </span>]
[<span class="optional"> serial-update-method <code class="constant">increment</code>|<code class="constant">unixtime</code>; </span>]
};
@@ -6462,10 +6465,10 @@ zone <em class="replaceable"><code>zone_name</code></em> [<span class="optional"
</div>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
-<a name="id2591881"></a><span><strong class="command">zone</strong></span> Statement Definition and Usage</h3></div></div></div>
+<a name="id2591826"></a><span><strong class="command">zone</strong></span> Statement Definition and Usage</h3></div></div></div>
<div class="sect3" lang="en">
<div class="titlepage"><div><div><h4 class="title">
-<a name="id2591889"></a>Zone Types</h4></div></div></div>
+<a name="id2591833"></a>Zone Types</h4></div></div></div>
<div class="informaltable"><table border="1">
<colgroup>
<col>
@@ -6745,7 +6748,7 @@ zone <em class="replaceable"><code>zone_name</code></em> [<span class="optional"
</div>
<div class="sect3" lang="en">
<div class="titlepage"><div><div><h4 class="title">
-<a name="id2592534"></a>Class</h4></div></div></div>
+<a name="id2592547"></a>Class</h4></div></div></div>
<p>
The zone's name may optionally be followed by a class. If
a class is not specified, class <code class="literal">IN</code> (for <code class="varname">Internet</code>),
@@ -6767,7 +6770,7 @@ zone <em class="replaceable"><code>zone_name</code></em> [<span class="optional"
</div>
<div class="sect3" lang="en">
<div class="titlepage"><div><div><h4 class="title">
-<a name="id2592567"></a>Zone Options</h4></div></div></div>
+<a name="id2592580"></a>Zone Options</h4></div></div></div>
<div class="variablelist"><dl>
<dt><span class="term"><span><strong class="command">allow-notify</strong></span></span></dt>
<dd><p>
@@ -7233,6 +7236,15 @@ example.com. NS ns2.example.net.
case it is simply incremented by one.
</p>
</dd>
+<dt><span class="term"><span><strong class="command">inline-signing</strong></span></span></dt>
+<dd><p>
+ <span><strong class="command">inline-signing</strong></span> is used to enable
+ bump in the wire signing of a zone, where a
+ unsigned zone is transfered in or loaded from
+ disk and a signed version of the zone is served,
+ with possibly, a different serial number. This
+ behaviour is disabled by default.
+ </p></dd>
<dt><span class="term"><span><strong class="command">multi-master</strong></span></span></dt>
<dd><p>
See the description of <span><strong class="command">multi-master</strong></span> in
@@ -7669,7 +7681,7 @@ example.com. NS ns2.example.net.
</div>
<div class="sect1" lang="en">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
-<a name="id2595430"></a>Zone File</h2></div></div></div>
+<a name="id2595392"></a>Zone File</h2></div></div></div>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
<a name="types_of_resource_records_and_when_to_use_them"></a>Types of Resource Records and When to Use Them</h3></div></div></div>
@@ -7682,7 +7694,7 @@ example.com. NS ns2.example.net.
</p>
<div class="sect3" lang="en">
<div class="titlepage"><div><div><h4 class="title">
-<a name="id2595448"></a>Resource Records</h4></div></div></div>
+<a name="id2595410"></a>Resource Records</h4></div></div></div>
<p>
A domain name identifies a node. Each node has a set of
resource information, which may be empty. The set of resource
@@ -8419,7 +8431,7 @@ example.com. NS ns2.example.net.
</div>
<div class="sect3" lang="en">
<div class="titlepage"><div><div><h4 class="title">
-<a name="id2597003"></a>Textual expression of RRs</h4></div></div></div>
+<a name="id2596965"></a>Textual expression of RRs</h4></div></div></div>
<p>
RRs are represented in binary form in the packets of the DNS
protocol, and are usually represented in highly encoded form
@@ -8622,7 +8634,7 @@ example.com. NS ns2.example.net.
</div>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
-<a name="id2597524"></a>Discussion of MX Records</h3></div></div></div>
+<a name="id2597554"></a>Discussion of MX Records</h3></div></div></div>
<p>
As described above, domain servers store information as a
series of resource records, each of which contains a particular
@@ -8878,7 +8890,7 @@ example.com. NS ns2.example.net.
</div>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
-<a name="id2598208"></a>Inverse Mapping in IPv4</h3></div></div></div>
+<a name="id2598306"></a>Inverse Mapping in IPv4</h3></div></div></div>
<p>
Reverse name resolution (that is, translation from IP address
to name) is achieved by means of the <span class="emphasis"><em>in-addr.arpa</em></span> domain
@@ -8939,7 +8951,7 @@ example.com. NS ns2.example.net.
</div>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
-<a name="id2598334"></a>Other Zone File Directives</h3></div></div></div>
+<a name="id2598433"></a>Other Zone File Directives</h3></div></div></div>
<p>
The Master File Format was initially defined in RFC 1035 and
has subsequently been extended. While the Master File Format
@@ -8954,7 +8966,7 @@ example.com. NS ns2.example.net.
</p>
<div class="sect3" lang="en">
<div class="titlepage"><div><div><h4 class="title">
-<a name="id2598357"></a>The <span><strong class="command">@</strong></span> (at-sign)</h4></div></div></div>
+<a name="id2598455"></a>The <span><strong class="command">@</strong></span> (at-sign)</h4></div></div></div>
<p>
When used in the label (or name) field, the asperand or
at-sign (@) symbol represents the current origin.
@@ -8965,7 +8977,7 @@ example.com. NS ns2.example.net.
</div>
<div class="sect3" lang="en">
<div class="titlepage"><div><div><h4 class="title">
-<a name="id2598373"></a>The <span><strong class="command">$ORIGIN</strong></span> Directive</h4></div></div></div>
+<a name="id2598471"></a>The <span><strong class="command">$ORIGIN</strong></span> Directive</h4></div></div></div>
<p>
Syntax: <span><strong class="command">$ORIGIN</strong></span>
<em class="replaceable"><code>domain-name</code></em>
@@ -8994,7 +9006,7 @@ WWW.EXAMPLE.COM. CNAME MAIN-SERVER.EXAMPLE.COM.
</div>
<div class="sect3" lang="en">
<div class="titlepage"><div><div><h4 class="title">
-<a name="id2598434"></a>The <span><strong class="command">$INCLUDE</strong></span> Directive</h4></div></div></div>
+<a name="id2598600"></a>The <span><strong class="command">$INCLUDE</strong></span> Directive</h4></div></div></div>
<p>
Syntax: <span><strong class="command">$INCLUDE</strong></span>
<em class="replaceable"><code>filename</code></em>
@@ -9030,7 +9042,7 @@ WWW.EXAMPLE.COM. CNAME MAIN-SERVER.EXAMPLE.COM.
</div>
<div class="sect3" lang="en">
<div class="titlepage"><div><div><h4 class="title">
-<a name="id2598503"></a>The <span><strong class="command">$TTL</strong></span> Directive</h4></div></div></div>
+<a name="id2598669"></a>The <span><strong class="command">$TTL</strong></span> Directive</h4></div></div></div>
<p>
Syntax: <span><strong class="command">$TTL</strong></span>
<em class="replaceable"><code>default-ttl</code></em>
@@ -9049,7 +9061,7 @@ WWW.EXAMPLE.COM. CNAME MAIN-SERVER.EXAMPLE.COM.
</div>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
-<a name="id2598539"></a><acronym class="acronym">BIND</acronym> Master File Extension: the <span><strong class="command">$GENERATE</strong></span> Directive</h3></div></div></div>
+<a name="id2598706"></a><acronym class="acronym">BIND</acronym> Master File Extension: the <span><strong class="command">$GENERATE</strong></span> Directive</h3></div></div></div>
<p>
Syntax: <span><strong class="command">$GENERATE</strong></span>
<em class="replaceable"><code>range</code></em>
@@ -9473,7 +9485,7 @@ HOST-127.EXAMPLE. MX 0 .
</p>
<div class="sect3" lang="en">
<div class="titlepage"><div><div><h4 class="title">
-<a name="id2599561"></a>Name Server Statistics Counters</h4></div></div></div>
+<a name="id2599659"></a>Name Server Statistics Counters</h4></div></div></div>
<div class="informaltable"><table border="1">
<colgroup>
<col>
@@ -10030,7 +10042,7 @@ HOST-127.EXAMPLE. MX 0 .
</div>
<div class="sect3" lang="en">
<div class="titlepage"><div><div><h4 class="title">
-<a name="id2601171"></a>Zone Maintenance Statistics Counters</h4></div></div></div>
+<a name="id2601201"></a>Zone Maintenance Statistics Counters</h4></div></div></div>
<div class="informaltable"><table border="1">
<colgroup>
<col>
@@ -10184,7 +10196,7 @@ HOST-127.EXAMPLE. MX 0 .
</div>
<div class="sect3" lang="en">
<div class="titlepage"><div><div><h4 class="title">
-<a name="id2601554"></a>Resolver Statistics Counters</h4></div></div></div>
+<a name="id2601584"></a>Resolver Statistics Counters</h4></div></div></div>
<div class="informaltable"><table border="1">
<colgroup>
<col>
@@ -10567,7 +10579,7 @@ HOST-127.EXAMPLE. MX 0 .
</div>
<div class="sect3" lang="en">
<div class="titlepage"><div><div><h4 class="title">
-<a name="id2602644"></a>Socket I/O Statistics Counters</h4></div></div></div>
+<a name="id2602742"></a>Socket I/O Statistics Counters</h4></div></div></div>
<p>
Socket I/O statistics counters are defined per socket
types, which are
@@ -10722,7 +10734,7 @@ HOST-127.EXAMPLE. MX 0 .
</div>
<div class="sect3" lang="en">
<div class="titlepage"><div><div><h4 class="title">
-<a name="id2603085"></a>Compatibility with <span class="emphasis"><em>BIND</em></span> 8 Counters</h4></div></div></div>
+<a name="id2603115"></a>Compatibility with <span class="emphasis"><em>BIND</em></span> 8 Counters</h4></div></div></div>
<p>
Most statistics counters that were available
in <span><strong class="command">BIND</strong></span> 8 are also supported in
diff --git a/doc/arm/Bv9ARM.ch07.html b/doc/arm/Bv9ARM.ch07.html
index d7cc934e..1f0e80b9 100644
--- a/doc/arm/Bv9ARM.ch07.html
+++ b/doc/arm/Bv9ARM.ch07.html
@@ -14,7 +14,7 @@
- OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- PERFORMANCE OF THIS SOFTWARE.
-->
-<!-- $Id: Bv9ARM.ch07.html,v 1.255 2011-08-04 01:14:43 tbox Exp $ -->
+<!-- $Id: Bv9ARM.ch07.html,v 1.257 2011-09-07 01:14:44 tbox Exp $ -->
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
@@ -46,10 +46,10 @@
<p><b>Table of Contents</b></p>
<dl>
<dt><span class="sect1"><a href="Bv9ARM.ch07.html#Access_Control_Lists">Access Control Lists</a></span></dt>
-<dt><span class="sect1"><a href="Bv9ARM.ch07.html#id2603259"><span><strong class="command">Chroot</strong></span> and <span><strong class="command">Setuid</strong></span></a></span></dt>
+<dt><span class="sect1"><a href="Bv9ARM.ch07.html#id2603289"><span><strong class="command">Chroot</strong></span> and <span><strong class="command">Setuid</strong></span></a></span></dt>
<dd><dl>
-<dt><span class="sect2"><a href="Bv9ARM.ch07.html#id2603409">The <span><strong class="command">chroot</strong></span> Environment</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch07.html#id2603537">Using the <span><strong class="command">setuid</strong></span> Function</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch07.html#id2603438">The <span><strong class="command">chroot</strong></span> Environment</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch07.html#id2603498">Using the <span><strong class="command">setuid</strong></span> Function</a></span></dt>
</dl></dd>
<dt><span class="sect1"><a href="Bv9ARM.ch07.html#dynamic_update_security">Dynamic Update Security</a></span></dt>
</dl>
@@ -122,7 +122,7 @@ zone "example.com" {
</div>
<div class="sect1" lang="en">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
-<a name="id2603259"></a><span><strong class="command">Chroot</strong></span> and <span><strong class="command">Setuid</strong></span>
+<a name="id2603289"></a><span><strong class="command">Chroot</strong></span> and <span><strong class="command">Setuid</strong></span>
</h2></div></div></div>
<p>
On UNIX servers, it is possible to run <acronym class="acronym">BIND</acronym>
@@ -148,7 +148,7 @@ zone "example.com" {
</p>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
-<a name="id2603409"></a>The <span><strong class="command">chroot</strong></span> Environment</h3></div></div></div>
+<a name="id2603438"></a>The <span><strong class="command">chroot</strong></span> Environment</h3></div></div></div>
<p>
In order for a <span><strong class="command">chroot</strong></span> environment
to
@@ -176,7 +176,7 @@ zone "example.com" {
</div>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
-<a name="id2603537"></a>Using the <span><strong class="command">setuid</strong></span> Function</h3></div></div></div>
+<a name="id2603498"></a>Using the <span><strong class="command">setuid</strong></span> Function</h3></div></div></div>
<p>
Prior to running the <span><strong class="command">named</strong></span> daemon,
use
diff --git a/doc/arm/Bv9ARM.ch08.html b/doc/arm/Bv9ARM.ch08.html
index d28b84d8..9130e52d 100644
--- a/doc/arm/Bv9ARM.ch08.html
+++ b/doc/arm/Bv9ARM.ch08.html
@@ -14,7 +14,7 @@
- OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- PERFORMANCE OF THIS SOFTWARE.
-->
-<!-- $Id: Bv9ARM.ch08.html,v 1.256 2011-08-04 01:14:43 tbox Exp $ -->
+<!-- $Id: Bv9ARM.ch08.html,v 1.258 2011-09-07 01:14:44 tbox Exp $ -->
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
@@ -45,18 +45,18 @@
<div class="toc">
<p><b>Table of Contents</b></p>
<dl>
-<dt><span class="sect1"><a href="Bv9ARM.ch08.html#id2603617">Common Problems</a></span></dt>
-<dd><dl><dt><span class="sect2"><a href="Bv9ARM.ch08.html#id2603690">It's not working; how can I figure out what's wrong?</a></span></dt></dl></dd>
-<dt><span class="sect1"><a href="Bv9ARM.ch08.html#id2603702">Incrementing and Changing the Serial Number</a></span></dt>
-<dt><span class="sect1"><a href="Bv9ARM.ch08.html#id2603719">Where Can I Get Help?</a></span></dt>
+<dt><span class="sect1"><a href="Bv9ARM.ch08.html#id2603646">Common Problems</a></span></dt>
+<dd><dl><dt><span class="sect2"><a href="Bv9ARM.ch08.html#id2603652">It's not working; how can I figure out what's wrong?</a></span></dt></dl></dd>
+<dt><span class="sect1"><a href="Bv9ARM.ch08.html#id2603664">Incrementing and Changing the Serial Number</a></span></dt>
+<dt><span class="sect1"><a href="Bv9ARM.ch08.html#id2603681">Where Can I Get Help?</a></span></dt>
</dl>
</div>
<div class="sect1" lang="en">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
-<a name="id2603617"></a>Common Problems</h2></div></div></div>
+<a name="id2603646"></a>Common Problems</h2></div></div></div>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
-<a name="id2603690"></a>It's not working; how can I figure out what's wrong?</h3></div></div></div>
+<a name="id2603652"></a>It's not working; how can I figure out what's wrong?</h3></div></div></div>
<p>
The best solution to solving installation and
configuration issues is to take preventative measures by setting
@@ -68,7 +68,7 @@
</div>
<div class="sect1" lang="en">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
-<a name="id2603702"></a>Incrementing and Changing the Serial Number</h2></div></div></div>
+<a name="id2603664"></a>Incrementing and Changing the Serial Number</h2></div></div></div>
<p>
Zone serial numbers are just numbers &#8212; they aren't
date related. A lot of people set them to a number that
@@ -95,7 +95,7 @@
</div>
<div class="sect1" lang="en">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
-<a name="id2603719"></a>Where Can I Get Help?</h2></div></div></div>
+<a name="id2603681"></a>Where Can I Get Help?</h2></div></div></div>
<p>
The Internet Systems Consortium
(<acronym class="acronym">ISC</acronym>) offers a wide range
diff --git a/doc/arm/Bv9ARM.ch09.html b/doc/arm/Bv9ARM.ch09.html
index b39381de..78eac83a 100644
--- a/doc/arm/Bv9ARM.ch09.html
+++ b/doc/arm/Bv9ARM.ch09.html
@@ -14,7 +14,7 @@
- OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- PERFORMANCE OF THIS SOFTWARE.
-->
-<!-- $Id: Bv9ARM.ch09.html,v 1.260 2011-08-04 01:14:43 tbox Exp $ -->
+<!-- $Id: Bv9ARM.ch09.html,v 1.262 2011-09-07 01:14:44 tbox Exp $ -->
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
@@ -45,31 +45,31 @@
<div class="toc">
<p><b>Table of Contents</b></p>
<dl>
-<dt><span class="sect1"><a href="Bv9ARM.ch09.html#id2603781">Acknowledgments</a></span></dt>
+<dt><span class="sect1"><a href="Bv9ARM.ch09.html#id2603811">Acknowledgments</a></span></dt>
<dd><dl><dt><span class="sect2"><a href="Bv9ARM.ch09.html#historical_dns_information">A Brief History of the <acronym class="acronym">DNS</acronym> and <acronym class="acronym">BIND</acronym></a></span></dt></dl></dd>
-<dt><span class="sect1"><a href="Bv9ARM.ch09.html#id2603884">General <acronym class="acronym">DNS</acronym> Reference Information</a></span></dt>
+<dt><span class="sect1"><a href="Bv9ARM.ch09.html#id2603982">General <acronym class="acronym">DNS</acronym> Reference Information</a></span></dt>
<dd><dl><dt><span class="sect2"><a href="Bv9ARM.ch09.html#ipv6addresses">IPv6 addresses (AAAA)</a></span></dt></dl></dd>
<dt><span class="sect1"><a href="Bv9ARM.ch09.html#bibliography">Bibliography (and Suggested Reading)</a></span></dt>
<dd><dl>
<dt><span class="sect2"><a href="Bv9ARM.ch09.html#rfcs">Request for Comments (RFCs)</a></span></dt>
<dt><span class="sect2"><a href="Bv9ARM.ch09.html#internet_drafts">Internet Drafts</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch09.html#id2607301">Other Documents About <acronym class="acronym">BIND</acronym></a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch09.html#id2607331">Other Documents About <acronym class="acronym">BIND</acronym></a></span></dt>
</dl></dd>
<dt><span class="sect1"><a href="Bv9ARM.ch09.html#bind9.library">BIND 9 DNS Library Support</a></span></dt>
<dd><dl>
-<dt><span class="sect2"><a href="Bv9ARM.ch09.html#id2563921">Prerequisite</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch09.html#id2563930">Compilation</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch09.html#id2563955">Installation</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch09.html#id2607949">Known Defects/Restrictions</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch09.html#id2608026">The dns.conf File</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch09.html#id2608053">Sample Applications</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch09.html#id2609094">Library References</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch09.html#id2608665">Prerequisite</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch09.html#id2607924">Compilation</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch09.html#id2607948">Installation</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch09.html#id2607979">Known Defects/Restrictions</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch09.html#id2608056">The dns.conf File</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch09.html#id2608151">Sample Applications</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch09.html#id2609192">Library References</a></span></dt>
</dl></dd>
</dl>
</div>
<div class="sect1" lang="en">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
-<a name="id2603781"></a>Acknowledgments</h2></div></div></div>
+<a name="id2603811"></a>Acknowledgments</h2></div></div></div>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
<a name="historical_dns_information"></a>A Brief History of the <acronym class="acronym">DNS</acronym> and <acronym class="acronym">BIND</acronym>
@@ -172,7 +172,7 @@
</div>
<div class="sect1" lang="en">
<div class="titlepage"><div><div><h2 class="title" style="clear: both">
-<a name="id2603884"></a>General <acronym class="acronym">DNS</acronym> Reference Information</h2></div></div></div>
+<a name="id2603982"></a>General <acronym class="acronym">DNS</acronym> Reference Information</h2></div></div></div>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
<a name="ipv6addresses"></a>IPv6 addresses (AAAA)</h3></div></div></div>
@@ -260,17 +260,17 @@
</p>
<div class="bibliography">
<div class="titlepage"><div><div><h4 class="title">
-<a name="id2604140"></a>Bibliography</h4></div></div></div>
+<a name="id2604170"></a>Bibliography</h4></div></div></div>
<div class="bibliodiv">
<h3 class="title">Standards</h3>
<div class="biblioentry">
-<a name="id2604151"></a><p>[<abbr class="abbrev">RFC974</abbr>] <span class="author"><span class="firstname">C.</span> <span class="surname">Partridge</span>. </span><span class="title"><i>Mail Routing and the Domain System</i>. </span><span class="pubdate">January 1986. </span></p>
+<a name="id2604181"></a><p>[<abbr class="abbrev">RFC974</abbr>] <span class="author"><span class="firstname">C.</span> <span class="surname">Partridge</span>. </span><span class="title"><i>Mail Routing and the Domain System</i>. </span><span class="pubdate">January 1986. </span></p>
</div>
<div class="biblioentry">
-<a name="id2604174"></a><p>[<abbr class="abbrev">RFC1034</abbr>] <span class="author"><span class="firstname">P.V.</span> <span class="surname">Mockapetris</span>. </span><span class="title"><i>Domain Names &#8212; Concepts and Facilities</i>. </span><span class="pubdate">November 1987. </span></p>
+<a name="id2604204"></a><p>[<abbr class="abbrev">RFC1034</abbr>] <span class="author"><span class="firstname">P.V.</span> <span class="surname">Mockapetris</span>. </span><span class="title"><i>Domain Names &#8212; Concepts and Facilities</i>. </span><span class="pubdate">November 1987. </span></p>
</div>
<div class="biblioentry">
-<a name="id2604198"></a><p>[<abbr class="abbrev">RFC1035</abbr>] <span class="author"><span class="firstname">P. V.</span> <span class="surname">Mockapetris</span>. </span><span class="title"><i>Domain Names &#8212; Implementation and
+<a name="id2604228"></a><p>[<abbr class="abbrev">RFC1035</abbr>] <span class="author"><span class="firstname">P. V.</span> <span class="surname">Mockapetris</span>. </span><span class="title"><i>Domain Names &#8212; Implementation and
Specification</i>. </span><span class="pubdate">November 1987. </span></p>
</div>
</div>
@@ -278,42 +278,42 @@
<h3 class="title">
<a name="proposed_standards"></a>Proposed Standards</h3>
<div class="biblioentry">
-<a name="id2604234"></a><p>[<abbr class="abbrev">RFC2181</abbr>] <span class="author"><span class="firstname">R., R. Bush</span> <span class="surname">Elz</span>. </span><span class="title"><i>Clarifications to the <acronym class="acronym">DNS</acronym>
+<a name="id2604332"></a><p>[<abbr class="abbrev">RFC2181</abbr>] <span class="author"><span class="firstname">R., R. Bush</span> <span class="surname">Elz</span>. </span><span class="title"><i>Clarifications to the <acronym class="acronym">DNS</acronym>
Specification</i>. </span><span class="pubdate">July 1997. </span></p>
</div>
<div class="biblioentry">
-<a name="id2604329"></a><p>[<abbr class="abbrev">RFC2308</abbr>] <span class="author"><span class="firstname">M.</span> <span class="surname">Andrews</span>. </span><span class="title"><i>Negative Caching of <acronym class="acronym">DNS</acronym>
+<a name="id2604359"></a><p>[<abbr class="abbrev">RFC2308</abbr>] <span class="author"><span class="firstname">M.</span> <span class="surname">Andrews</span>. </span><span class="title"><i>Negative Caching of <acronym class="acronym">DNS</acronym>
Queries</i>. </span><span class="pubdate">March 1998. </span></p>
</div>
<div class="biblioentry">
-<a name="id2604355"></a><p>[<abbr class="abbrev">RFC1995</abbr>] <span class="author"><span class="firstname">M.</span> <span class="surname">Ohta</span>. </span><span class="title"><i>Incremental Zone Transfer in <acronym class="acronym">DNS</acronym></i>. </span><span class="pubdate">August 1996. </span></p>
+<a name="id2604385"></a><p>[<abbr class="abbrev">RFC1995</abbr>] <span class="author"><span class="firstname">M.</span> <span class="surname">Ohta</span>. </span><span class="title"><i>Incremental Zone Transfer in <acronym class="acronym">DNS</acronym></i>. </span><span class="pubdate">August 1996. </span></p>
</div>
<div class="biblioentry">
-<a name="id2604379"></a><p>[<abbr class="abbrev">RFC1996</abbr>] <span class="author"><span class="firstname">P.</span> <span class="surname">Vixie</span>. </span><span class="title"><i>A Mechanism for Prompt Notification of Zone Changes</i>. </span><span class="pubdate">August 1996. </span></p>
+<a name="id2604409"></a><p>[<abbr class="abbrev">RFC1996</abbr>] <span class="author"><span class="firstname">P.</span> <span class="surname">Vixie</span>. </span><span class="title"><i>A Mechanism for Prompt Notification of Zone Changes</i>. </span><span class="pubdate">August 1996. </span></p>
</div>
<div class="biblioentry">
-<a name="id2604403"></a><p>[<abbr class="abbrev">RFC2136</abbr>] <span class="authorgroup"><span class="firstname">P.</span> <span class="surname">Vixie</span>, <span class="firstname">S.</span> <span class="surname">Thomson</span>, <span class="firstname">Y.</span> <span class="surname">Rekhter</span>, and <span class="firstname">J.</span> <span class="surname">Bound</span>. </span><span class="title"><i>Dynamic Updates in the Domain Name System</i>. </span><span class="pubdate">April 1997. </span></p>
+<a name="id2604433"></a><p>[<abbr class="abbrev">RFC2136</abbr>] <span class="authorgroup"><span class="firstname">P.</span> <span class="surname">Vixie</span>, <span class="firstname">S.</span> <span class="surname">Thomson</span>, <span class="firstname">Y.</span> <span class="surname">Rekhter</span>, and <span class="firstname">J.</span> <span class="surname">Bound</span>. </span><span class="title"><i>Dynamic Updates in the Domain Name System</i>. </span><span class="pubdate">April 1997. </span></p>
</div>
<div class="biblioentry">
-<a name="id2604526"></a><p>[<abbr class="abbrev">RFC2671</abbr>] <span class="authorgroup"><span class="firstname">P.</span> <span class="surname">Vixie</span>. </span><span class="title"><i>Extension Mechanisms for DNS (EDNS0)</i>. </span><span class="pubdate">August 1997. </span></p>
+<a name="id2604556"></a><p>[<abbr class="abbrev">RFC2671</abbr>] <span class="authorgroup"><span class="firstname">P.</span> <span class="surname">Vixie</span>. </span><span class="title"><i>Extension Mechanisms for DNS (EDNS0)</i>. </span><span class="pubdate">August 1997. </span></p>
</div>
<div class="biblioentry">
-<a name="id2604553"></a><p>[<abbr class="abbrev">RFC2672</abbr>] <span class="authorgroup"><span class="firstname">M.</span> <span class="surname">Crawford</span>. </span><span class="title"><i>Non-Terminal DNS Name Redirection</i>. </span><span class="pubdate">August 1999. </span></p>
+<a name="id2604583"></a><p>[<abbr class="abbrev">RFC2672</abbr>] <span class="authorgroup"><span class="firstname">M.</span> <span class="surname">Crawford</span>. </span><span class="title"><i>Non-Terminal DNS Name Redirection</i>. </span><span class="pubdate">August 1999. </span></p>
</div>
<div class="biblioentry">
-<a name="id2604580"></a><p>[<abbr class="abbrev">RFC2845</abbr>] <span class="authorgroup"><span class="firstname">P.</span> <span class="surname">Vixie</span>, <span class="firstname">O.</span> <span class="surname">Gudmundsson</span>, <span class="firstname">D.</span> <span class="surname">Eastlake</span>, <span class="lineage">3rd</span>, and <span class="firstname">B.</span> <span class="surname">Wellington</span>. </span><span class="title"><i>Secret Key Transaction Authentication for <acronym class="acronym">DNS</acronym> (TSIG)</i>. </span><span class="pubdate">May 2000. </span></p>
+<a name="id2604610"></a><p>[<abbr class="abbrev">RFC2845</abbr>] <span class="authorgroup"><span class="firstname">P.</span> <span class="surname">Vixie</span>, <span class="firstname">O.</span> <span class="surname">Gudmundsson</span>, <span class="firstname">D.</span> <span class="surname">Eastlake</span>, <span class="lineage">3rd</span>, and <span class="firstname">B.</span> <span class="surname">Wellington</span>. </span><span class="title"><i>Secret Key Transaction Authentication for <acronym class="acronym">DNS</acronym> (TSIG)</i>. </span><span class="pubdate">May 2000. </span></p>
</div>
<div class="biblioentry">
-<a name="id2604642"></a><p>[<abbr class="abbrev">RFC2930</abbr>] <span class="authorgroup"><span class="firstname">D.</span> <span class="surname">Eastlake</span>, <span class="lineage">3rd</span>. </span><span class="title"><i>Secret Key Establishment for DNS (TKEY RR)</i>. </span><span class="pubdate">September 2000. </span></p>
+<a name="id2604672"></a><p>[<abbr class="abbrev">RFC2930</abbr>] <span class="authorgroup"><span class="firstname">D.</span> <span class="surname">Eastlake</span>, <span class="lineage">3rd</span>. </span><span class="title"><i>Secret Key Establishment for DNS (TKEY RR)</i>. </span><span class="pubdate">September 2000. </span></p>
</div>
<div class="biblioentry">
-<a name="id2604672"></a><p>[<abbr class="abbrev">RFC2931</abbr>] <span class="authorgroup"><span class="firstname">D.</span> <span class="surname">Eastlake</span>, <span class="lineage">3rd</span>. </span><span class="title"><i>DNS Request and Transaction Signatures (SIG(0)s)</i>. </span><span class="pubdate">September 2000. </span></p>
+<a name="id2604701"></a><p>[<abbr class="abbrev">RFC2931</abbr>] <span class="authorgroup"><span class="firstname">D.</span> <span class="surname">Eastlake</span>, <span class="lineage">3rd</span>. </span><span class="title"><i>DNS Request and Transaction Signatures (SIG(0)s)</i>. </span><span class="pubdate">September 2000. </span></p>
</div>
<div class="biblioentry">
-<a name="id2604701"></a><p>[<abbr class="abbrev">RFC3007</abbr>] <span class="authorgroup"><span class="firstname">B.</span> <span class="surname">Wellington</span>. </span><span class="title"><i>Secure Domain Name System (DNS) Dynamic Update</i>. </span><span class="pubdate">November 2000. </span></p>
+<a name="id2604731"></a><p>[<abbr class="abbrev">RFC3007</abbr>] <span class="authorgroup"><span class="firstname">B.</span> <span class="surname">Wellington</span>. </span><span class="title"><i>Secure Domain Name System (DNS) Dynamic Update</i>. </span><span class="pubdate">November 2000. </span></p>
</div>
<div class="biblioentry">
-<a name="id2604728"></a><p>[<abbr class="abbrev">RFC3645</abbr>] <span class="authorgroup"><span class="firstname">S.</span> <span class="surname">Kwan</span>, <span class="firstname">P.</span> <span class="surname">Garg</span>, <span class="firstname">J.</span> <span class="surname">Gilroy</span>, <span class="firstname">L.</span> <span class="surname">Esibov</span>, <span class="firstname">J.</span> <span class="surname">Westhead</span>, and <span class="firstname">R.</span> <span class="surname">Hall</span>. </span><span class="title"><i>Generic Security Service Algorithm for Secret
+<a name="id2604758"></a><p>[<abbr class="abbrev">RFC3645</abbr>] <span class="authorgroup"><span class="firstname">S.</span> <span class="surname">Kwan</span>, <span class="firstname">P.</span> <span class="surname">Garg</span>, <span class="firstname">J.</span> <span class="surname">Gilroy</span>, <span class="firstname">L.</span> <span class="surname">Esibov</span>, <span class="firstname">J.</span> <span class="surname">Westhead</span>, and <span class="firstname">R.</span> <span class="surname">Hall</span>. </span><span class="title"><i>Generic Security Service Algorithm for Secret
Key Transaction Authentication for DNS
(GSS-TSIG)</i>. </span><span class="pubdate">October 2003. </span></p>
</div>
@@ -322,19 +322,19 @@
<h3 class="title">
<acronym class="acronym">DNS</acronym> Security Proposed Standards</h3>
<div class="biblioentry">
-<a name="id2604810"></a><p>[<abbr class="abbrev">RFC3225</abbr>] <span class="authorgroup"><span class="firstname">D.</span> <span class="surname">Conrad</span>. </span><span class="title"><i>Indicating Resolver Support of DNSSEC</i>. </span><span class="pubdate">December 2001. </span></p>
+<a name="id2604840"></a><p>[<abbr class="abbrev">RFC3225</abbr>] <span class="authorgroup"><span class="firstname">D.</span> <span class="surname">Conrad</span>. </span><span class="title"><i>Indicating Resolver Support of DNSSEC</i>. </span><span class="pubdate">December 2001. </span></p>
</div>
<div class="biblioentry">
-<a name="id2604837"></a><p>[<abbr class="abbrev">RFC3833</abbr>] <span class="authorgroup"><span class="firstname">D.</span> <span class="surname">Atkins</span> and <span class="firstname">R.</span> <span class="surname">Austein</span>. </span><span class="title"><i>Threat Analysis of the Domain Name System (DNS)</i>. </span><span class="pubdate">August 2004. </span></p>
+<a name="id2604867"></a><p>[<abbr class="abbrev">RFC3833</abbr>] <span class="authorgroup"><span class="firstname">D.</span> <span class="surname">Atkins</span> and <span class="firstname">R.</span> <span class="surname">Austein</span>. </span><span class="title"><i>Threat Analysis of the Domain Name System (DNS)</i>. </span><span class="pubdate">August 2004. </span></p>
</div>
<div class="biblioentry">
-<a name="id2604873"></a><p>[<abbr class="abbrev">RFC4033</abbr>] <span class="authorgroup"><span class="firstname">R.</span> <span class="surname">Arends</span>, <span class="firstname">R.</span> <span class="surname">Austein</span>, <span class="firstname">M.</span> <span class="surname">Larson</span>, <span class="firstname">D.</span> <span class="surname">Massey</span>, and <span class="firstname">S.</span> <span class="surname">Rose</span>. </span><span class="title"><i>DNS Security Introduction and Requirements</i>. </span><span class="pubdate">March 2005. </span></p>
+<a name="id2604903"></a><p>[<abbr class="abbrev">RFC4033</abbr>] <span class="authorgroup"><span class="firstname">R.</span> <span class="surname">Arends</span>, <span class="firstname">R.</span> <span class="surname">Austein</span>, <span class="firstname">M.</span> <span class="surname">Larson</span>, <span class="firstname">D.</span> <span class="surname">Massey</span>, and <span class="firstname">S.</span> <span class="surname">Rose</span>. </span><span class="title"><i>DNS Security Introduction and Requirements</i>. </span><span class="pubdate">March 2005. </span></p>
</div>
<div class="biblioentry">
-<a name="id2604938"></a><p>[<abbr class="abbrev">RFC4034</abbr>] <span class="authorgroup"><span class="firstname">R.</span> <span class="surname">Arends</span>, <span class="firstname">R.</span> <span class="surname">Austein</span>, <span class="firstname">M.</span> <span class="surname">Larson</span>, <span class="firstname">D.</span> <span class="surname">Massey</span>, and <span class="firstname">S.</span> <span class="surname">Rose</span>. </span><span class="title"><i>Resource Records for the DNS Security Extensions</i>. </span><span class="pubdate">March 2005. </span></p>
+<a name="id2604968"></a><p>[<abbr class="abbrev">RFC4034</abbr>] <span class="authorgroup"><span class="firstname">R.</span> <span class="surname">Arends</span>, <span class="firstname">R.</span> <span class="surname">Austein</span>, <span class="firstname">M.</span> <span class="surname">Larson</span>, <span class="firstname">D.</span> <span class="surname">Massey</span>, and <span class="firstname">S.</span> <span class="surname">Rose</span>. </span><span class="title"><i>Resource Records for the DNS Security Extensions</i>. </span><span class="pubdate">March 2005. </span></p>
</div>
<div class="biblioentry">
-<a name="id2605003"></a><p>[<abbr class="abbrev">RFC4035</abbr>] <span class="authorgroup"><span class="firstname">R.</span> <span class="surname">Arends</span>, <span class="firstname">R.</span> <span class="surname">Austein</span>, <span class="firstname">M.</span> <span class="surname">Larson</span>, <span class="firstname">D.</span> <span class="surname">Massey</span>, and <span class="firstname">S.</span> <span class="surname">Rose</span>. </span><span class="title"><i>Protocol Modifications for the DNS
+<a name="id2605033"></a><p>[<abbr class="abbrev">RFC4035</abbr>] <span class="authorgroup"><span class="firstname">R.</span> <span class="surname">Arends</span>, <span class="firstname">R.</span> <span class="surname">Austein</span>, <span class="firstname">M.</span> <span class="surname">Larson</span>, <span class="firstname">D.</span> <span class="surname">Massey</span>, and <span class="firstname">S.</span> <span class="surname">Rose</span>. </span><span class="title"><i>Protocol Modifications for the DNS
Security Extensions</i>. </span><span class="pubdate">March 2005. </span></p>
</div>
</div>
@@ -342,146 +342,146 @@
<h3 class="title">Other Important RFCs About <acronym class="acronym">DNS</acronym>
Implementation</h3>
<div class="biblioentry">
-<a name="id2605077"></a><p>[<abbr class="abbrev">RFC1535</abbr>] <span class="author"><span class="firstname">E.</span> <span class="surname">Gavron</span>. </span><span class="title"><i>A Security Problem and Proposed Correction With Widely
+<a name="id2605107"></a><p>[<abbr class="abbrev">RFC1535</abbr>] <span class="author"><span class="firstname">E.</span> <span class="surname">Gavron</span>. </span><span class="title"><i>A Security Problem and Proposed Correction With Widely
Deployed <acronym class="acronym">DNS</acronym> Software.</i>. </span><span class="pubdate">October 1993. </span></p>
</div>
<div class="biblioentry">
-<a name="id2605102"></a><p>[<abbr class="abbrev">RFC1536</abbr>] <span class="authorgroup"><span class="firstname">A.</span> <span class="surname">Kumar</span>, <span class="firstname">J.</span> <span class="surname">Postel</span>, <span class="firstname">C.</span> <span class="surname">Neuman</span>, <span class="firstname">P.</span> <span class="surname">Danzig</span>, and <span class="firstname">S.</span> <span class="surname">Miller</span>. </span><span class="title"><i>Common <acronym class="acronym">DNS</acronym> Implementation
+<a name="id2605132"></a><p>[<abbr class="abbrev">RFC1536</abbr>] <span class="authorgroup"><span class="firstname">A.</span> <span class="surname">Kumar</span>, <span class="firstname">J.</span> <span class="surname">Postel</span>, <span class="firstname">C.</span> <span class="surname">Neuman</span>, <span class="firstname">P.</span> <span class="surname">Danzig</span>, and <span class="firstname">S.</span> <span class="surname">Miller</span>. </span><span class="title"><i>Common <acronym class="acronym">DNS</acronym> Implementation
Errors and Suggested Fixes</i>. </span><span class="pubdate">October 1993. </span></p>
</div>
<div class="biblioentry">
-<a name="id2605171"></a><p>[<abbr class="abbrev">RFC1982</abbr>] <span class="authorgroup"><span class="firstname">R.</span> <span class="surname">Elz</span> and <span class="firstname">R.</span> <span class="surname">Bush</span>. </span><span class="title"><i>Serial Number Arithmetic</i>. </span><span class="pubdate">August 1996. </span></p>
+<a name="id2605201"></a><p>[<abbr class="abbrev">RFC1982</abbr>] <span class="authorgroup"><span class="firstname">R.</span> <span class="surname">Elz</span> and <span class="firstname">R.</span> <span class="surname">Bush</span>. </span><span class="title"><i>Serial Number Arithmetic</i>. </span><span class="pubdate">August 1996. </span></p>
</div>
<div class="biblioentry">
-<a name="id2605206"></a><p>[<abbr class="abbrev">RFC4074</abbr>] <span class="authorgroup"><span class="firstname">Y.</span> <span class="surname">Morishita</span> and <span class="firstname">T.</span> <span class="surname">Jinmei</span>. </span><span class="title"><i>Common Misbehaviour Against <acronym class="acronym">DNS</acronym>
+<a name="id2605236"></a><p>[<abbr class="abbrev">RFC4074</abbr>] <span class="authorgroup"><span class="firstname">Y.</span> <span class="surname">Morishita</span> and <span class="firstname">T.</span> <span class="surname">Jinmei</span>. </span><span class="title"><i>Common Misbehaviour Against <acronym class="acronym">DNS</acronym>
Queries for IPv6 Addresses</i>. </span><span class="pubdate">May 2005. </span></p>
</div>
</div>
<div class="bibliodiv">
<h3 class="title">Resource Record Types</h3>
<div class="biblioentry">
-<a name="id2605252"></a><p>[<abbr class="abbrev">RFC1183</abbr>] <span class="authorgroup"><span class="firstname">C.F.</span> <span class="surname">Everhart</span>, <span class="firstname">L. A.</span> <span class="surname">Mamakos</span>, <span class="firstname">R.</span> <span class="surname">Ullmann</span>, and <span class="firstname">P.</span> <span class="surname">Mockapetris</span>. </span><span class="title"><i>New <acronym class="acronym">DNS</acronym> RR Definitions</i>. </span><span class="pubdate">October 1990. </span></p>
+<a name="id2605282"></a><p>[<abbr class="abbrev">RFC1183</abbr>] <span class="authorgroup"><span class="firstname">C.F.</span> <span class="surname">Everhart</span>, <span class="firstname">L. A.</span> <span class="surname">Mamakos</span>, <span class="firstname">R.</span> <span class="surname">Ullmann</span>, and <span class="firstname">P.</span> <span class="surname">Mockapetris</span>. </span><span class="title"><i>New <acronym class="acronym">DNS</acronym> RR Definitions</i>. </span><span class="pubdate">October 1990. </span></p>
</div>
<div class="biblioentry">
-<a name="id2605309"></a><p>[<abbr class="abbrev">RFC1706</abbr>] <span class="authorgroup"><span class="firstname">B.</span> <span class="surname">Manning</span> and <span class="firstname">R.</span> <span class="surname">Colella</span>. </span><span class="title"><i><acronym class="acronym">DNS</acronym> NSAP Resource Records</i>. </span><span class="pubdate">October 1994. </span></p>
+<a name="id2605339"></a><p>[<abbr class="abbrev">RFC1706</abbr>] <span class="authorgroup"><span class="firstname">B.</span> <span class="surname">Manning</span> and <span class="firstname">R.</span> <span class="surname">Colella</span>. </span><span class="title"><i><acronym class="acronym">DNS</acronym> NSAP Resource Records</i>. </span><span class="pubdate">October 1994. </span></p>
</div>
<div class="biblioentry">
-<a name="id2605347"></a><p>[<abbr class="abbrev">RFC2168</abbr>] <span class="authorgroup"><span class="firstname">R.</span> <span class="surname">Daniel</span> and <span class="firstname">M.</span> <span class="surname">Mealling</span>. </span><span class="title"><i>Resolution of Uniform Resource Identifiers using
+<a name="id2605377"></a><p>[<abbr class="abbrev">RFC2168</abbr>] <span class="authorgroup"><span class="firstname">R.</span> <span class="surname">Daniel</span> and <span class="firstname">M.</span> <span class="surname">Mealling</span>. </span><span class="title"><i>Resolution of Uniform Resource Identifiers using
the Domain Name System</i>. </span><span class="pubdate">June 1997. </span></p>
</div>
<div class="biblioentry">
-<a name="id2605382"></a><p>[<abbr class="abbrev">RFC1876</abbr>] <span class="authorgroup"><span class="firstname">C.</span> <span class="surname">Davis</span>, <span class="firstname">P.</span> <span class="surname">Vixie</span>, <span class="firstname">T.</span>, and <span class="firstname">I.</span> <span class="surname">Dickinson</span>. </span><span class="title"><i>A Means for Expressing Location Information in the
+<a name="id2605412"></a><p>[<abbr class="abbrev">RFC1876</abbr>] <span class="authorgroup"><span class="firstname">C.</span> <span class="surname">Davis</span>, <span class="firstname">P.</span> <span class="surname">Vixie</span>, <span class="firstname">T.</span>, and <span class="firstname">I.</span> <span class="surname">Dickinson</span>. </span><span class="title"><i>A Means for Expressing Location Information in the
Domain
Name System</i>. </span><span class="pubdate">January 1996. </span></p>
</div>
<div class="biblioentry">
-<a name="id2605436"></a><p>[<abbr class="abbrev">RFC2052</abbr>] <span class="authorgroup"><span class="firstname">A.</span> <span class="surname">Gulbrandsen</span> and <span class="firstname">P.</span> <span class="surname">Vixie</span>. </span><span class="title"><i>A <acronym class="acronym">DNS</acronym> RR for Specifying the
+<a name="id2605466"></a><p>[<abbr class="abbrev">RFC2052</abbr>] <span class="authorgroup"><span class="firstname">A.</span> <span class="surname">Gulbrandsen</span> and <span class="firstname">P.</span> <span class="surname">Vixie</span>. </span><span class="title"><i>A <acronym class="acronym">DNS</acronym> RR for Specifying the
Location of
Services.</i>. </span><span class="pubdate">October 1996. </span></p>
</div>
<div class="biblioentry">
-<a name="id2605475"></a><p>[<abbr class="abbrev">RFC2163</abbr>] <span class="author"><span class="firstname">A.</span> <span class="surname">Allocchio</span>. </span><span class="title"><i>Using the Internet <acronym class="acronym">DNS</acronym> to
+<a name="id2605505"></a><p>[<abbr class="abbrev">RFC2163</abbr>] <span class="author"><span class="firstname">A.</span> <span class="surname">Allocchio</span>. </span><span class="title"><i>Using the Internet <acronym class="acronym">DNS</acronym> to
Distribute MIXER
Conformant Global Address Mapping</i>. </span><span class="pubdate">January 1998. </span></p>
</div>
<div class="biblioentry">
-<a name="id2605500"></a><p>[<abbr class="abbrev">RFC2230</abbr>] <span class="author"><span class="firstname">R.</span> <span class="surname">Atkinson</span>. </span><span class="title"><i>Key Exchange Delegation Record for the <acronym class="acronym">DNS</acronym></i>. </span><span class="pubdate">October 1997. </span></p>
+<a name="id2605530"></a><p>[<abbr class="abbrev">RFC2230</abbr>] <span class="author"><span class="firstname">R.</span> <span class="surname">Atkinson</span>. </span><span class="title"><i>Key Exchange Delegation Record for the <acronym class="acronym">DNS</acronym></i>. </span><span class="pubdate">October 1997. </span></p>
</div>
<div class="biblioentry">
-<a name="id2605526"></a><p>[<abbr class="abbrev">RFC2536</abbr>] <span class="author"><span class="firstname">D.</span> <span class="surname">Eastlake</span>, <span class="lineage">3rd</span>. </span><span class="title"><i>DSA KEYs and SIGs in the Domain Name System (DNS)</i>. </span><span class="pubdate">March 1999. </span></p>
+<a name="id2605556"></a><p>[<abbr class="abbrev">RFC2536</abbr>] <span class="author"><span class="firstname">D.</span> <span class="surname">Eastlake</span>, <span class="lineage">3rd</span>. </span><span class="title"><i>DSA KEYs and SIGs in the Domain Name System (DNS)</i>. </span><span class="pubdate">March 1999. </span></p>
</div>
<div class="biblioentry">
-<a name="id2605553"></a><p>[<abbr class="abbrev">RFC2537</abbr>] <span class="author"><span class="firstname">D.</span> <span class="surname">Eastlake</span>, <span class="lineage">3rd</span>. </span><span class="title"><i>RSA/MD5 KEYs and SIGs in the Domain Name System (DNS)</i>. </span><span class="pubdate">March 1999. </span></p>
+<a name="id2605582"></a><p>[<abbr class="abbrev">RFC2537</abbr>] <span class="author"><span class="firstname">D.</span> <span class="surname">Eastlake</span>, <span class="lineage">3rd</span>. </span><span class="title"><i>RSA/MD5 KEYs and SIGs in the Domain Name System (DNS)</i>. </span><span class="pubdate">March 1999. </span></p>
</div>
<div class="biblioentry">
-<a name="id2605579"></a><p>[<abbr class="abbrev">RFC2538</abbr>] <span class="authorgroup"><span class="firstname">D.</span> <span class="surname">Eastlake</span>, <span class="lineage">3rd</span> and <span class="firstname">O.</span> <span class="surname">Gudmundsson</span>. </span><span class="title"><i>Storing Certificates in the Domain Name System (DNS)</i>. </span><span class="pubdate">March 1999. </span></p>
+<a name="id2605609"></a><p>[<abbr class="abbrev">RFC2538</abbr>] <span class="authorgroup"><span class="firstname">D.</span> <span class="surname">Eastlake</span>, <span class="lineage">3rd</span> and <span class="firstname">O.</span> <span class="surname">Gudmundsson</span>. </span><span class="title"><i>Storing Certificates in the Domain Name System (DNS)</i>. </span><span class="pubdate">March 1999. </span></p>
</div>
<div class="biblioentry">
-<a name="id2605619"></a><p>[<abbr class="abbrev">RFC2539</abbr>] <span class="authorgroup"><span class="firstname">D.</span> <span class="surname">Eastlake</span>, <span class="lineage">3rd</span>. </span><span class="title"><i>Storage of Diffie-Hellman Keys in the Domain Name System (DNS)</i>. </span><span class="pubdate">March 1999. </span></p>
+<a name="id2605649"></a><p>[<abbr class="abbrev">RFC2539</abbr>] <span class="authorgroup"><span class="firstname">D.</span> <span class="surname">Eastlake</span>, <span class="lineage">3rd</span>. </span><span class="title"><i>Storage of Diffie-Hellman Keys in the Domain Name System (DNS)</i>. </span><span class="pubdate">March 1999. </span></p>
</div>
<div class="biblioentry">
-<a name="id2605649"></a><p>[<abbr class="abbrev">RFC2540</abbr>] <span class="authorgroup"><span class="firstname">D.</span> <span class="surname">Eastlake</span>, <span class="lineage">3rd</span>. </span><span class="title"><i>Detached Domain Name System (DNS) Information</i>. </span><span class="pubdate">March 1999. </span></p>
+<a name="id2605678"></a><p>[<abbr class="abbrev">RFC2540</abbr>] <span class="authorgroup"><span class="firstname">D.</span> <span class="surname">Eastlake</span>, <span class="lineage">3rd</span>. </span><span class="title"><i>Detached Domain Name System (DNS) Information</i>. </span><span class="pubdate">March 1999. </span></p>
</div>
<div class="biblioentry">
-<a name="id2605678"></a><p>[<abbr class="abbrev">RFC2782</abbr>] <span class="author"><span class="firstname">A.</span> <span class="surname">Gulbrandsen</span>. </span><span class="author"><span class="firstname">P.</span> <span class="surname">Vixie</span>. </span><span class="author"><span class="firstname">L.</span> <span class="surname">Esibov</span>. </span><span class="title"><i>A DNS RR for specifying the location of services (DNS SRV)</i>. </span><span class="pubdate">February 2000. </span></p>
+<a name="id2605708"></a><p>[<abbr class="abbrev">RFC2782</abbr>] <span class="author"><span class="firstname">A.</span> <span class="surname">Gulbrandsen</span>. </span><span class="author"><span class="firstname">P.</span> <span class="surname">Vixie</span>. </span><span class="author"><span class="firstname">L.</span> <span class="surname">Esibov</span>. </span><span class="title"><i>A DNS RR for specifying the location of services (DNS SRV)</i>. </span><span class="pubdate">February 2000. </span></p>
</div>
<div class="biblioentry">
-<a name="id2605721"></a><p>[<abbr class="abbrev">RFC2915</abbr>] <span class="author"><span class="firstname">M.</span> <span class="surname">Mealling</span>. </span><span class="author"><span class="firstname">R.</span> <span class="surname">Daniel</span>. </span><span class="title"><i>The Naming Authority Pointer (NAPTR) DNS Resource Record</i>. </span><span class="pubdate">September 2000. </span></p>
+<a name="id2605751"></a><p>[<abbr class="abbrev">RFC2915</abbr>] <span class="author"><span class="firstname">M.</span> <span class="surname">Mealling</span>. </span><span class="author"><span class="firstname">R.</span> <span class="surname">Daniel</span>. </span><span class="title"><i>The Naming Authority Pointer (NAPTR) DNS Resource Record</i>. </span><span class="pubdate">September 2000. </span></p>
</div>
<div class="biblioentry">
-<a name="id2605754"></a><p>[<abbr class="abbrev">RFC3110</abbr>] <span class="author"><span class="firstname">D.</span> <span class="surname">Eastlake</span>, <span class="lineage">3rd</span>. </span><span class="title"><i>RSA/SHA-1 SIGs and RSA KEYs in the Domain Name System (DNS)</i>. </span><span class="pubdate">May 2001. </span></p>
+<a name="id2605784"></a><p>[<abbr class="abbrev">RFC3110</abbr>] <span class="author"><span class="firstname">D.</span> <span class="surname">Eastlake</span>, <span class="lineage">3rd</span>. </span><span class="title"><i>RSA/SHA-1 SIGs and RSA KEYs in the Domain Name System (DNS)</i>. </span><span class="pubdate">May 2001. </span></p>
</div>
<div class="biblioentry">
-<a name="id2605781"></a><p>[<abbr class="abbrev">RFC3123</abbr>] <span class="author"><span class="firstname">P.</span> <span class="surname">Koch</span>. </span><span class="title"><i>A DNS RR Type for Lists of Address Prefixes (APL RR)</i>. </span><span class="pubdate">June 2001. </span></p>
+<a name="id2605811"></a><p>[<abbr class="abbrev">RFC3123</abbr>] <span class="author"><span class="firstname">P.</span> <span class="surname">Koch</span>. </span><span class="title"><i>A DNS RR Type for Lists of Address Prefixes (APL RR)</i>. </span><span class="pubdate">June 2001. </span></p>
</div>
<div class="biblioentry">
-<a name="id2605804"></a><p>[<abbr class="abbrev">RFC3596</abbr>] <span class="authorgroup"><span class="firstname">S.</span> <span class="surname">Thomson</span>, <span class="firstname">C.</span> <span class="surname">Huitema</span>, <span class="firstname">V.</span> <span class="surname">Ksinant</span>, and <span class="firstname">M.</span> <span class="surname">Souissi</span>. </span><span class="title"><i><acronym class="acronym">DNS</acronym> Extensions to support IP
+<a name="id2605834"></a><p>[<abbr class="abbrev">RFC3596</abbr>] <span class="authorgroup"><span class="firstname">S.</span> <span class="surname">Thomson</span>, <span class="firstname">C.</span> <span class="surname">Huitema</span>, <span class="firstname">V.</span> <span class="surname">Ksinant</span>, and <span class="firstname">M.</span> <span class="surname">Souissi</span>. </span><span class="title"><i><acronym class="acronym">DNS</acronym> Extensions to support IP
version 6</i>. </span><span class="pubdate">October 2003. </span></p>
</div>
<div class="biblioentry">
-<a name="id2605862"></a><p>[<abbr class="abbrev">RFC3597</abbr>] <span class="author"><span class="firstname">A.</span> <span class="surname">Gustafsson</span>. </span><span class="title"><i>Handling of Unknown DNS Resource Record (RR) Types</i>. </span><span class="pubdate">September 2003. </span></p>
+<a name="id2605892"></a><p>[<abbr class="abbrev">RFC3597</abbr>] <span class="author"><span class="firstname">A.</span> <span class="surname">Gustafsson</span>. </span><span class="title"><i>Handling of Unknown DNS Resource Record (RR) Types</i>. </span><span class="pubdate">September 2003. </span></p>
</div>
</div>
<div class="bibliodiv">
<h3 class="title">
<acronym class="acronym">DNS</acronym> and the Internet</h3>
<div class="biblioentry">
-<a name="id2605894"></a><p>[<abbr class="abbrev">RFC1101</abbr>] <span class="author"><span class="firstname">P. V.</span> <span class="surname">Mockapetris</span>. </span><span class="title"><i><acronym class="acronym">DNS</acronym> Encoding of Network Names
+<a name="id2605924"></a><p>[<abbr class="abbrev">RFC1101</abbr>] <span class="author"><span class="firstname">P. V.</span> <span class="surname">Mockapetris</span>. </span><span class="title"><i><acronym class="acronym">DNS</acronym> Encoding of Network Names
and Other Types</i>. </span><span class="pubdate">April 1989. </span></p>
</div>
<div class="biblioentry">
-<a name="id2605920"></a><p>[<abbr class="abbrev">RFC1123</abbr>] <span class="author"><span class="surname">Braden</span>. </span><span class="title"><i>Requirements for Internet Hosts - Application and
+<a name="id2605949"></a><p>[<abbr class="abbrev">RFC1123</abbr>] <span class="author"><span class="surname">Braden</span>. </span><span class="title"><i>Requirements for Internet Hosts - Application and
Support</i>. </span><span class="pubdate">October 1989. </span></p>
</div>
<div class="biblioentry">
-<a name="id2605942"></a><p>[<abbr class="abbrev">RFC1591</abbr>] <span class="author"><span class="firstname">J.</span> <span class="surname">Postel</span>. </span><span class="title"><i>Domain Name System Structure and Delegation</i>. </span><span class="pubdate">March 1994. </span></p>
+<a name="id2605972"></a><p>[<abbr class="abbrev">RFC1591</abbr>] <span class="author"><span class="firstname">J.</span> <span class="surname">Postel</span>. </span><span class="title"><i>Domain Name System Structure and Delegation</i>. </span><span class="pubdate">March 1994. </span></p>
</div>
<div class="biblioentry">
-<a name="id2605965"></a><p>[<abbr class="abbrev">RFC2317</abbr>] <span class="authorgroup"><span class="firstname">H.</span> <span class="surname">Eidnes</span>, <span class="firstname">G.</span> <span class="surname">de Groot</span>, and <span class="firstname">P.</span> <span class="surname">Vixie</span>. </span><span class="title"><i>Classless IN-ADDR.ARPA Delegation</i>. </span><span class="pubdate">March 1998. </span></p>
+<a name="id2605995"></a><p>[<abbr class="abbrev">RFC2317</abbr>] <span class="authorgroup"><span class="firstname">H.</span> <span class="surname">Eidnes</span>, <span class="firstname">G.</span> <span class="surname">de Groot</span>, and <span class="firstname">P.</span> <span class="surname">Vixie</span>. </span><span class="title"><i>Classless IN-ADDR.ARPA Delegation</i>. </span><span class="pubdate">March 1998. </span></p>
</div>
<div class="biblioentry">
-<a name="id2606011"></a><p>[<abbr class="abbrev">RFC2826</abbr>] <span class="authorgroup"><span class="surname">Internet Architecture Board</span>. </span><span class="title"><i>IAB Technical Comment on the Unique DNS Root</i>. </span><span class="pubdate">May 2000. </span></p>
+<a name="id2606041"></a><p>[<abbr class="abbrev">RFC2826</abbr>] <span class="authorgroup"><span class="surname">Internet Architecture Board</span>. </span><span class="title"><i>IAB Technical Comment on the Unique DNS Root</i>. </span><span class="pubdate">May 2000. </span></p>
</div>
<div class="biblioentry">
-<a name="id2606035"></a><p>[<abbr class="abbrev">RFC2929</abbr>] <span class="authorgroup"><span class="firstname">D.</span> <span class="surname">Eastlake</span>, <span class="lineage">3rd</span>, <span class="firstname">E.</span> <span class="surname">Brunner-Williams</span>, and <span class="firstname">B.</span> <span class="surname">Manning</span>. </span><span class="title"><i>Domain Name System (DNS) IANA Considerations</i>. </span><span class="pubdate">September 2000. </span></p>
+<a name="id2606065"></a><p>[<abbr class="abbrev">RFC2929</abbr>] <span class="authorgroup"><span class="firstname">D.</span> <span class="surname">Eastlake</span>, <span class="lineage">3rd</span>, <span class="firstname">E.</span> <span class="surname">Brunner-Williams</span>, and <span class="firstname">B.</span> <span class="surname">Manning</span>. </span><span class="title"><i>Domain Name System (DNS) IANA Considerations</i>. </span><span class="pubdate">September 2000. </span></p>
</div>
</div>
<div class="bibliodiv">
<h3 class="title">
<acronym class="acronym">DNS</acronym> Operations</h3>
<div class="biblioentry">
-<a name="id2606092"></a><p>[<abbr class="abbrev">RFC1033</abbr>] <span class="author"><span class="firstname">M.</span> <span class="surname">Lottor</span>. </span><span class="title"><i>Domain administrators operations guide.</i>. </span><span class="pubdate">November 1987. </span></p>
+<a name="id2606122"></a><p>[<abbr class="abbrev">RFC1033</abbr>] <span class="author"><span class="firstname">M.</span> <span class="surname">Lottor</span>. </span><span class="title"><i>Domain administrators operations guide.</i>. </span><span class="pubdate">November 1987. </span></p>
</div>
<div class="biblioentry">
-<a name="id2606116"></a><p>[<abbr class="abbrev">RFC1537</abbr>] <span class="author"><span class="firstname">P.</span> <span class="surname">Beertema</span>. </span><span class="title"><i>Common <acronym class="acronym">DNS</acronym> Data File
+<a name="id2606146"></a><p>[<abbr class="abbrev">RFC1537</abbr>] <span class="author"><span class="firstname">P.</span> <span class="surname">Beertema</span>. </span><span class="title"><i>Common <acronym class="acronym">DNS</acronym> Data File
Configuration Errors</i>. </span><span class="pubdate">October 1993. </span></p>
</div>
<div class="biblioentry">
-<a name="id2606142"></a><p>[<abbr class="abbrev">RFC1912</abbr>] <span class="author"><span class="firstname">D.</span> <span class="surname">Barr</span>. </span><span class="title"><i>Common <acronym class="acronym">DNS</acronym> Operational and
+<a name="id2606172"></a><p>[<abbr class="abbrev">RFC1912</abbr>] <span class="author"><span class="firstname">D.</span> <span class="surname">Barr</span>. </span><span class="title"><i>Common <acronym class="acronym">DNS</acronym> Operational and
Configuration Errors</i>. </span><span class="pubdate">February 1996. </span></p>
</div>
<div class="biblioentry">
-<a name="id2606169"></a><p>[<abbr class="abbrev">RFC2010</abbr>] <span class="authorgroup"><span class="firstname">B.</span> <span class="surname">Manning</span> and <span class="firstname">P.</span> <span class="surname">Vixie</span>. </span><span class="title"><i>Operational Criteria for Root Name Servers.</i>. </span><span class="pubdate">October 1996. </span></p>
+<a name="id2606199"></a><p>[<abbr class="abbrev">RFC2010</abbr>] <span class="authorgroup"><span class="firstname">B.</span> <span class="surname">Manning</span> and <span class="firstname">P.</span> <span class="surname">Vixie</span>. </span><span class="title"><i>Operational Criteria for Root Name Servers.</i>. </span><span class="pubdate">October 1996. </span></p>
</div>
<div class="biblioentry">
-<a name="id2606205"></a><p>[<abbr class="abbrev">RFC2219</abbr>] <span class="authorgroup"><span class="firstname">M.</span> <span class="surname">Hamilton</span> and <span class="firstname">R.</span> <span class="surname">Wright</span>. </span><span class="title"><i>Use of <acronym class="acronym">DNS</acronym> Aliases for
+<a name="id2606235"></a><p>[<abbr class="abbrev">RFC2219</abbr>] <span class="authorgroup"><span class="firstname">M.</span> <span class="surname">Hamilton</span> and <span class="firstname">R.</span> <span class="surname">Wright</span>. </span><span class="title"><i>Use of <acronym class="acronym">DNS</acronym> Aliases for
Network Services.</i>. </span><span class="pubdate">October 1997. </span></p>
</div>
</div>
<div class="bibliodiv">
<h3 class="title">Internationalized Domain Names</h3>
<div class="biblioentry">
-<a name="id2606251"></a><p>[<abbr class="abbrev">RFC2825</abbr>] <span class="authorgroup"><span class="surname">IAB</span> and <span class="firstname">R.</span> <span class="surname">Daigle</span>. </span><span class="title"><i>A Tangled Web: Issues of I18N, Domain Names,
+<a name="id2606281"></a><p>[<abbr class="abbrev">RFC2825</abbr>] <span class="authorgroup"><span class="surname">IAB</span> and <span class="firstname">R.</span> <span class="surname">Daigle</span>. </span><span class="title"><i>A Tangled Web: Issues of I18N, Domain Names,
and the Other Internet protocols</i>. </span><span class="pubdate">May 2000. </span></p>
</div>
<div class="biblioentry">
-<a name="id2606283"></a><p>[<abbr class="abbrev">RFC3490</abbr>] <span class="authorgroup"><span class="firstname">P.</span> <span class="surname">Faltstrom</span>, <span class="firstname">P.</span> <span class="surname">Hoffman</span>, and <span class="firstname">A.</span> <span class="surname">Costello</span>. </span><span class="title"><i>Internationalizing Domain Names in Applications (IDNA)</i>. </span><span class="pubdate">March 2003. </span></p>
+<a name="id2606313"></a><p>[<abbr class="abbrev">RFC3490</abbr>] <span class="authorgroup"><span class="firstname">P.</span> <span class="surname">Faltstrom</span>, <span class="firstname">P.</span> <span class="surname">Hoffman</span>, and <span class="firstname">A.</span> <span class="surname">Costello</span>. </span><span class="title"><i>Internationalizing Domain Names in Applications (IDNA)</i>. </span><span class="pubdate">March 2003. </span></p>
</div>
<div class="biblioentry">
-<a name="id2606329"></a><p>[<abbr class="abbrev">RFC3491</abbr>] <span class="authorgroup"><span class="firstname">P.</span> <span class="surname">Hoffman</span> and <span class="firstname">M.</span> <span class="surname">Blanchet</span>. </span><span class="title"><i>Nameprep: A Stringprep Profile for Internationalized Domain Names</i>. </span><span class="pubdate">March 2003. </span></p>
+<a name="id2606359"></a><p>[<abbr class="abbrev">RFC3491</abbr>] <span class="authorgroup"><span class="firstname">P.</span> <span class="surname">Hoffman</span> and <span class="firstname">M.</span> <span class="surname">Blanchet</span>. </span><span class="title"><i>Nameprep: A Stringprep Profile for Internationalized Domain Names</i>. </span><span class="pubdate">March 2003. </span></p>
</div>
<div class="biblioentry">
-<a name="id2606364"></a><p>[<abbr class="abbrev">RFC3492</abbr>] <span class="authorgroup"><span class="firstname">A.</span> <span class="surname">Costello</span>. </span><span class="title"><i>Punycode: A Bootstring encoding of Unicode
+<a name="id2606394"></a><p>[<abbr class="abbrev">RFC3492</abbr>] <span class="authorgroup"><span class="firstname">A.</span> <span class="surname">Costello</span>. </span><span class="title"><i>Punycode: A Bootstring encoding of Unicode
for Internationalized Domain Names in
Applications (IDNA)</i>. </span><span class="pubdate">March 2003. </span></p>
</div>
@@ -497,47 +497,47 @@
</p>
</div>
<div class="biblioentry">
-<a name="id2606409"></a><p>[<abbr class="abbrev">RFC1464</abbr>] <span class="author"><span class="firstname">R.</span> <span class="surname">Rosenbaum</span>. </span><span class="title"><i>Using the Domain Name System To Store Arbitrary String
+<a name="id2606439"></a><p>[<abbr class="abbrev">RFC1464</abbr>] <span class="author"><span class="firstname">R.</span> <span class="surname">Rosenbaum</span>. </span><span class="title"><i>Using the Domain Name System To Store Arbitrary String
Attributes</i>. </span><span class="pubdate">May 1993. </span></p>
</div>
<div class="biblioentry">
-<a name="id2606432"></a><p>[<abbr class="abbrev">RFC1713</abbr>] <span class="author"><span class="firstname">A.</span> <span class="surname">Romao</span>. </span><span class="title"><i>Tools for <acronym class="acronym">DNS</acronym> Debugging</i>. </span><span class="pubdate">November 1994. </span></p>
+<a name="id2606461"></a><p>[<abbr class="abbrev">RFC1713</abbr>] <span class="author"><span class="firstname">A.</span> <span class="surname">Romao</span>. </span><span class="title"><i>Tools for <acronym class="acronym">DNS</acronym> Debugging</i>. </span><span class="pubdate">November 1994. </span></p>
</div>
<div class="biblioentry">
-<a name="id2606457"></a><p>[<abbr class="abbrev">RFC1794</abbr>] <span class="author"><span class="firstname">T.</span> <span class="surname">Brisco</span>. </span><span class="title"><i><acronym class="acronym">DNS</acronym> Support for Load
+<a name="id2606487"></a><p>[<abbr class="abbrev">RFC1794</abbr>] <span class="author"><span class="firstname">T.</span> <span class="surname">Brisco</span>. </span><span class="title"><i><acronym class="acronym">DNS</acronym> Support for Load
Balancing</i>. </span><span class="pubdate">April 1995. </span></p>
</div>
<div class="biblioentry">
-<a name="id2606483"></a><p>[<abbr class="abbrev">RFC2240</abbr>] <span class="author"><span class="firstname">O.</span> <span class="surname">Vaughan</span>. </span><span class="title"><i>A Legal Basis for Domain Name Allocation</i>. </span><span class="pubdate">November 1997. </span></p>
+<a name="id2606513"></a><p>[<abbr class="abbrev">RFC2240</abbr>] <span class="author"><span class="firstname">O.</span> <span class="surname">Vaughan</span>. </span><span class="title"><i>A Legal Basis for Domain Name Allocation</i>. </span><span class="pubdate">November 1997. </span></p>
</div>
<div class="biblioentry">
-<a name="id2606574"></a><p>[<abbr class="abbrev">RFC2345</abbr>] <span class="authorgroup"><span class="firstname">J.</span> <span class="surname">Klensin</span>, <span class="firstname">T.</span> <span class="surname">Wolf</span>, and <span class="firstname">G.</span> <span class="surname">Oglesby</span>. </span><span class="title"><i>Domain Names and Company Name Retrieval</i>. </span><span class="pubdate">May 1998. </span></p>
+<a name="id2606536"></a><p>[<abbr class="abbrev">RFC2345</abbr>] <span class="authorgroup"><span class="firstname">J.</span> <span class="surname">Klensin</span>, <span class="firstname">T.</span> <span class="surname">Wolf</span>, and <span class="firstname">G.</span> <span class="surname">Oglesby</span>. </span><span class="title"><i>Domain Names and Company Name Retrieval</i>. </span><span class="pubdate">May 1998. </span></p>
</div>
<div class="biblioentry">
-<a name="id2606620"></a><p>[<abbr class="abbrev">RFC2352</abbr>] <span class="author"><span class="firstname">O.</span> <span class="surname">Vaughan</span>. </span><span class="title"><i>A Convention For Using Legal Names as Domain Names</i>. </span><span class="pubdate">May 1998. </span></p>
+<a name="id2606582"></a><p>[<abbr class="abbrev">RFC2352</abbr>] <span class="author"><span class="firstname">O.</span> <span class="surname">Vaughan</span>. </span><span class="title"><i>A Convention For Using Legal Names as Domain Names</i>. </span><span class="pubdate">May 1998. </span></p>
</div>
<div class="biblioentry">
-<a name="id2606644"></a><p>[<abbr class="abbrev">RFC3071</abbr>] <span class="authorgroup"><span class="firstname">J.</span> <span class="surname">Klensin</span>. </span><span class="title"><i>Reflections on the DNS, RFC 1591, and Categories of Domains</i>. </span><span class="pubdate">February 2001. </span></p>
+<a name="id2606605"></a><p>[<abbr class="abbrev">RFC3071</abbr>] <span class="authorgroup"><span class="firstname">J.</span> <span class="surname">Klensin</span>. </span><span class="title"><i>Reflections on the DNS, RFC 1591, and Categories of Domains</i>. </span><span class="pubdate">February 2001. </span></p>
</div>
<div class="biblioentry">
-<a name="id2606670"></a><p>[<abbr class="abbrev">RFC3258</abbr>] <span class="authorgroup"><span class="firstname">T.</span> <span class="surname">Hardie</span>. </span><span class="title"><i>Distributing Authoritative Name Servers via
+<a name="id2606632"></a><p>[<abbr class="abbrev">RFC3258</abbr>] <span class="authorgroup"><span class="firstname">T.</span> <span class="surname">Hardie</span>. </span><span class="title"><i>Distributing Authoritative Name Servers via
Shared Unicast Addresses</i>. </span><span class="pubdate">April 2002. </span></p>
</div>
<div class="biblioentry">
-<a name="id2606696"></a><p>[<abbr class="abbrev">RFC3901</abbr>] <span class="authorgroup"><span class="firstname">A.</span> <span class="surname">Durand</span> and <span class="firstname">J.</span> <span class="surname">Ihren</span>. </span><span class="title"><i>DNS IPv6 Transport Operational Guidelines</i>. </span><span class="pubdate">September 2004. </span></p>
+<a name="id2606658"></a><p>[<abbr class="abbrev">RFC3901</abbr>] <span class="authorgroup"><span class="firstname">A.</span> <span class="surname">Durand</span> and <span class="firstname">J.</span> <span class="surname">Ihren</span>. </span><span class="title"><i>DNS IPv6 Transport Operational Guidelines</i>. </span><span class="pubdate">September 2004. </span></p>
</div>
</div>
<div class="bibliodiv">
<h3 class="title">Obsolete and Unimplemented Experimental RFC</h3>
<div class="biblioentry">
-<a name="id2606740"></a><p>[<abbr class="abbrev">RFC1712</abbr>] <span class="authorgroup"><span class="firstname">C.</span> <span class="surname">Farrell</span>, <span class="firstname">M.</span> <span class="surname">Schulze</span>, <span class="firstname">S.</span> <span class="surname">Pleitner</span>, and <span class="firstname">D.</span> <span class="surname">Baldoni</span>. </span><span class="title"><i><acronym class="acronym">DNS</acronym> Encoding of Geographical
+<a name="id2606838"></a><p>[<abbr class="abbrev">RFC1712</abbr>] <span class="authorgroup"><span class="firstname">C.</span> <span class="surname">Farrell</span>, <span class="firstname">M.</span> <span class="surname">Schulze</span>, <span class="firstname">S.</span> <span class="surname">Pleitner</span>, and <span class="firstname">D.</span> <span class="surname">Baldoni</span>. </span><span class="title"><i><acronym class="acronym">DNS</acronym> Encoding of Geographical
Location</i>. </span><span class="pubdate">November 1994. </span></p>
</div>
<div class="biblioentry">
-<a name="id2606866"></a><p>[<abbr class="abbrev">RFC2673</abbr>] <span class="authorgroup"><span class="firstname">M.</span> <span class="surname">Crawford</span>. </span><span class="title"><i>Binary Labels in the Domain Name System</i>. </span><span class="pubdate">August 1999. </span></p>
+<a name="id2606896"></a><p>[<abbr class="abbrev">RFC2673</abbr>] <span class="authorgroup"><span class="firstname">M.</span> <span class="surname">Crawford</span>. </span><span class="title"><i>Binary Labels in the Domain Name System</i>. </span><span class="pubdate">August 1999. </span></p>
</div>
<div class="biblioentry">
-<a name="id2606892"></a><p>[<abbr class="abbrev">RFC2874</abbr>] <span class="authorgroup"><span class="firstname">M.</span> <span class="surname">Crawford</span> and <span class="firstname">C.</span> <span class="surname">Huitema</span>. </span><span class="title"><i>DNS Extensions to Support IPv6 Address Aggregation
+<a name="id2606922"></a><p>[<abbr class="abbrev">RFC2874</abbr>] <span class="authorgroup"><span class="firstname">M.</span> <span class="surname">Crawford</span> and <span class="firstname">C.</span> <span class="surname">Huitema</span>. </span><span class="title"><i>DNS Extensions to Support IPv6 Address Aggregation
and Renumbering</i>. </span><span class="pubdate">July 2000. </span></p>
</div>
</div>
@@ -551,39 +551,39 @@
</p>
</div>
<div class="biblioentry">
-<a name="id2606940"></a><p>[<abbr class="abbrev">RFC2065</abbr>] <span class="authorgroup"><span class="firstname">D.</span> <span class="surname">Eastlake</span>, <span class="lineage">3rd</span> and <span class="firstname">C.</span> <span class="surname">Kaufman</span>. </span><span class="title"><i>Domain Name System Security Extensions</i>. </span><span class="pubdate">January 1997. </span></p>
+<a name="id2606970"></a><p>[<abbr class="abbrev">RFC2065</abbr>] <span class="authorgroup"><span class="firstname">D.</span> <span class="surname">Eastlake</span>, <span class="lineage">3rd</span> and <span class="firstname">C.</span> <span class="surname">Kaufman</span>. </span><span class="title"><i>Domain Name System Security Extensions</i>. </span><span class="pubdate">January 1997. </span></p>
</div>
<div class="biblioentry">
-<a name="id2606980"></a><p>[<abbr class="abbrev">RFC2137</abbr>] <span class="author"><span class="firstname">D.</span> <span class="surname">Eastlake</span>, <span class="lineage">3rd</span>. </span><span class="title"><i>Secure Domain Name System Dynamic Update</i>. </span><span class="pubdate">April 1997. </span></p>
+<a name="id2607010"></a><p>[<abbr class="abbrev">RFC2137</abbr>] <span class="author"><span class="firstname">D.</span> <span class="surname">Eastlake</span>, <span class="lineage">3rd</span>. </span><span class="title"><i>Secure Domain Name System Dynamic Update</i>. </span><span class="pubdate">April 1997. </span></p>
</div>
<div class="biblioentry">
-<a name="id2607006"></a><p>[<abbr class="abbrev">RFC2535</abbr>] <span class="authorgroup"><span class="firstname">D.</span> <span class="surname">Eastlake</span>, <span class="lineage">3rd</span>. </span><span class="title"><i>Domain Name System Security Extensions</i>. </span><span class="pubdate">March 1999. </span></p>
+<a name="id2607036"></a><p>[<abbr class="abbrev">RFC2535</abbr>] <span class="authorgroup"><span class="firstname">D.</span> <span class="surname">Eastlake</span>, <span class="lineage">3rd</span>. </span><span class="title"><i>Domain Name System Security Extensions</i>. </span><span class="pubdate">March 1999. </span></p>
</div>
<div class="biblioentry">
-<a name="id2607036"></a><p>[<abbr class="abbrev">RFC3008</abbr>] <span class="authorgroup"><span class="firstname">B.</span> <span class="surname">Wellington</span>. </span><span class="title"><i>Domain Name System Security (DNSSEC)
+<a name="id2607066"></a><p>[<abbr class="abbrev">RFC3008</abbr>] <span class="authorgroup"><span class="firstname">B.</span> <span class="surname">Wellington</span>. </span><span class="title"><i>Domain Name System Security (DNSSEC)
Signing Authority</i>. </span><span class="pubdate">November 2000. </span></p>
</div>
<div class="biblioentry">
-<a name="id2607062"></a><p>[<abbr class="abbrev">RFC3090</abbr>] <span class="authorgroup"><span class="firstname">E.</span> <span class="surname">Lewis</span>. </span><span class="title"><i>DNS Security Extension Clarification on Zone Status</i>. </span><span class="pubdate">March 2001. </span></p>
+<a name="id2607092"></a><p>[<abbr class="abbrev">RFC3090</abbr>] <span class="authorgroup"><span class="firstname">E.</span> <span class="surname">Lewis</span>. </span><span class="title"><i>DNS Security Extension Clarification on Zone Status</i>. </span><span class="pubdate">March 2001. </span></p>
</div>
<div class="biblioentry">
-<a name="id2607089"></a><p>[<abbr class="abbrev">RFC3445</abbr>] <span class="authorgroup"><span class="firstname">D.</span> <span class="surname">Massey</span> and <span class="firstname">S.</span> <span class="surname">Rose</span>. </span><span class="title"><i>Limiting the Scope of the KEY Resource Record (RR)</i>. </span><span class="pubdate">December 2002. </span></p>
+<a name="id2607118"></a><p>[<abbr class="abbrev">RFC3445</abbr>] <span class="authorgroup"><span class="firstname">D.</span> <span class="surname">Massey</span> and <span class="firstname">S.</span> <span class="surname">Rose</span>. </span><span class="title"><i>Limiting the Scope of the KEY Resource Record (RR)</i>. </span><span class="pubdate">December 2002. </span></p>
</div>
<div class="biblioentry">
-<a name="id2607125"></a><p>[<abbr class="abbrev">RFC3655</abbr>] <span class="authorgroup"><span class="firstname">B.</span> <span class="surname">Wellington</span> and <span class="firstname">O.</span> <span class="surname">Gudmundsson</span>. </span><span class="title"><i>Redefinition of DNS Authenticated Data (AD) bit</i>. </span><span class="pubdate">November 2003. </span></p>
+<a name="id2607155"></a><p>[<abbr class="abbrev">RFC3655</abbr>] <span class="authorgroup"><span class="firstname">B.</span> <span class="surname">Wellington</span> and <span class="firstname">O.</span> <span class="surname">Gudmundsson</span>. </span><span class="title"><i>Redefinition of DNS Authenticated Data (AD) bit</i>. </span><span class="pubdate">November 2003. </span></p>
</div>
<div class="biblioentry">
-<a name="id2607161"></a><p>[<abbr class="abbrev">RFC3658</abbr>] <span class="authorgroup"><span class="firstname">O.</span> <span class="surname">Gudmundsson</span>. </span><span class="title"><i>Delegation Signer (DS) Resource Record (RR)</i>. </span><span class="pubdate">December 2003. </span></p>
+<a name="id2607191"></a><p>[<abbr class="abbrev">RFC3658</abbr>] <span class="authorgroup"><span class="firstname">O.</span> <span class="surname">Gudmundsson</span>. </span><span class="title"><i>Delegation Signer (DS) Resource Record (RR)</i>. </span><span class="pubdate">December 2003. </span></p>
</div>
<div class="biblioentry">
-<a name="id2607188"></a><p>[<abbr class="abbrev">RFC3755</abbr>] <span class="authorgroup"><span class="firstname">S.</span> <span class="surname">Weiler</span>. </span><span class="title"><i>Legacy Resolver Compatibility for Delegation Signer (DS)</i>. </span><span class="pubdate">May 2004. </span></p>
+<a name="id2607218"></a><p>[<abbr class="abbrev">RFC3755</abbr>] <span class="authorgroup"><span class="firstname">S.</span> <span class="surname">Weiler</span>. </span><span class="title"><i>Legacy Resolver Compatibility for Delegation Signer (DS)</i>. </span><span class="pubdate">May 2004. </span></p>
</div>
<div class="biblioentry">
-<a name="id2607214"></a><p>[<abbr class="abbrev">RFC3757</abbr>] <span class="authorgroup"><span class="firstname">O.</span> <span class="surname">Kolkman</span>, <span class="firstname">J.</span> <span class="surname">Schlyter</span>, and <span class="firstname">E.</span> <span class="surname">Lewis</span>. </span><span class="title"><i>Domain Name System KEY (DNSKEY) Resource Record
+<a name="id2607244"></a><p>[<abbr class="abbrev">RFC3757</abbr>] <span class="authorgroup"><span class="firstname">O.</span> <span class="surname">Kolkman</span>, <span class="firstname">J.</span> <span class="surname">Schlyter</span>, and <span class="firstname">E.</span> <span class="surname">Lewis</span>. </span><span class="title"><i>Domain Name System KEY (DNSKEY) Resource Record
(RR) Secure Entry Point (SEP) Flag</i>. </span><span class="pubdate">April 2004. </span></p>
</div>
<div class="biblioentry">
-<a name="id2607259"></a><p>[<abbr class="abbrev">RFC3845</abbr>] <span class="authorgroup"><span class="firstname">J.</span> <span class="surname">Schlyter</span>. </span><span class="title"><i>DNS Security (DNSSEC) NextSECure (NSEC) RDATA Format</i>. </span><span class="pubdate">August 2004. </span></p>
+<a name="id2607289"></a><p>[<abbr class="abbrev">RFC3845</abbr>] <span class="authorgroup"><span class="firstname">J.</span> <span class="surname">Schlyter</span>. </span><span class="title"><i>DNS Security (DNSSEC) NextSECure (NSEC) RDATA Format</i>. </span><span class="pubdate">August 2004. </span></p>
</div>
</div>
</div>
@@ -604,14 +604,14 @@
</div>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
-<a name="id2607301"></a>Other Documents About <acronym class="acronym">BIND</acronym>
+<a name="id2607331"></a>Other Documents About <acronym class="acronym">BIND</acronym>
</h3></div></div></div>
<p></p>
<div class="bibliography">
<div class="titlepage"><div><div><h4 class="title">
-<a name="id2607310"></a>Bibliography</h4></div></div></div>
+<a name="id2607340"></a>Bibliography</h4></div></div></div>
<div class="biblioentry">
-<a name="id2607313"></a><p><span class="authorgroup"><span class="firstname">Paul</span> <span class="surname">Albitz</span> and <span class="firstname">Cricket</span> <span class="surname">Liu</span>. </span><span class="title"><i><acronym class="acronym">DNS</acronym> and <acronym class="acronym">BIND</acronym></i>. </span><span class="copyright">Copyright © 1998 Sebastopol, CA: O'Reilly and Associates. </span></p>
+<a name="id2607342"></a><p><span class="authorgroup"><span class="firstname">Paul</span> <span class="surname">Albitz</span> and <span class="firstname">Cricket</span> <span class="surname">Liu</span>. </span><span class="title"><i><acronym class="acronym">DNS</acronym> and <acronym class="acronym">BIND</acronym></i>. </span><span class="copyright">Copyright © 1998 Sebastopol, CA: O'Reilly and Associates. </span></p>
</div>
</div>
</div>
@@ -648,7 +648,7 @@
</ul></div>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
-<a name="id2563921"></a>Prerequisite</h3></div></div></div>
+<a name="id2608665"></a>Prerequisite</h3></div></div></div>
<p>GNU make is required to build the export libraries (other
part of BIND 9 can still be built with other types of make). In
the reminder of this document, "make" means GNU make. Note that
@@ -657,7 +657,7 @@
</div>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
-<a name="id2563930"></a>Compilation</h3></div></div></div>
+<a name="id2607924"></a>Compilation</h3></div></div></div>
<pre class="screen">
$ <strong class="userinput"><code>./configure --enable-exportlib <em class="replaceable"><code>[other flags]</code></em></code></strong>
$ <strong class="userinput"><code>make</code></strong>
@@ -672,7 +672,7 @@ $ <strong class="userinput"><code>make</code></strong>
</div>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
-<a name="id2563955"></a>Installation</h3></div></div></div>
+<a name="id2607948"></a>Installation</h3></div></div></div>
<pre class="screen">
$ <strong class="userinput"><code>cd lib/export</code></strong>
$ <strong class="userinput"><code>make install</code></strong>
@@ -694,7 +694,7 @@ $ <strong class="userinput"><code>make install</code></strong>
</div>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
-<a name="id2607949"></a>Known Defects/Restrictions</h3></div></div></div>
+<a name="id2607979"></a>Known Defects/Restrictions</h3></div></div></div>
<div class="itemizedlist"><ul type="disc">
<li><p>Currently, win32 is not supported for the export
library. (Normal BIND 9 application can be built as
@@ -734,7 +734,7 @@ $ <strong class="userinput"><code>make</code></strong>
</div>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
-<a name="id2608026"></a>The dns.conf File</h3></div></div></div>
+<a name="id2608056"></a>The dns.conf File</h3></div></div></div>
<p>The IRS library supports an "advanced" configuration file
related to the DNS library for configuration parameters that
would be beyond the capability of the
@@ -752,14 +752,14 @@ $ <strong class="userinput"><code>make</code></strong>
</div>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
-<a name="id2608053"></a>Sample Applications</h3></div></div></div>
+<a name="id2608151"></a>Sample Applications</h3></div></div></div>
<p>Some sample application programs using this API are
provided for reference. The following is a brief description of
these applications.
</p>
<div class="sect3" lang="en">
<div class="titlepage"><div><div><h4 class="title">
-<a name="id2608130"></a>sample: a simple stub resolver utility</h4></div></div></div>
+<a name="id2608160"></a>sample: a simple stub resolver utility</h4></div></div></div>
<p>
It sends a query of a given name (of a given optional RR type) to a
specified recursive server, and prints the result as a list of
@@ -823,7 +823,7 @@ $ <strong class="userinput"><code>make</code></strong>
</div>
<div class="sect3" lang="en">
<div class="titlepage"><div><div><h4 class="title">
-<a name="id2608425"></a>sample-async: a simple stub resolver, working asynchronously</h4></div></div></div>
+<a name="id2608250"></a>sample-async: a simple stub resolver, working asynchronously</h4></div></div></div>
<p>
Similar to "sample", but accepts a list
of (query) domain names as a separate file and resolves the names
@@ -864,7 +864,7 @@ $ <strong class="userinput"><code>make</code></strong>
</div>
<div class="sect3" lang="en">
<div class="titlepage"><div><div><h4 class="title">
-<a name="id2608478"></a>sample-request: a simple DNS transaction client</h4></div></div></div>
+<a name="id2608304"></a>sample-request: a simple DNS transaction client</h4></div></div></div>
<p>
It sends a query to a specified server, and
prints the response with minimal processing. It doesn't act as a
@@ -905,7 +905,7 @@ $ <strong class="userinput"><code>make</code></strong>
</div>
<div class="sect3" lang="en">
<div class="titlepage"><div><div><h4 class="title">
-<a name="id2608542"></a>sample-gai: getaddrinfo() and getnameinfo() test code</h4></div></div></div>
+<a name="id2608368"></a>sample-gai: getaddrinfo() and getnameinfo() test code</h4></div></div></div>
<p>
This is a test program
to check getaddrinfo() and getnameinfo() behavior. It takes a
@@ -922,7 +922,7 @@ $ <strong class="userinput"><code>make</code></strong>
</div>
<div class="sect3" lang="en">
<div class="titlepage"><div><div><h4 class="title">
-<a name="id2608557"></a>sample-update: a simple dynamic update client program</h4></div></div></div>
+<a name="id2608382"></a>sample-update: a simple dynamic update client program</h4></div></div></div>
<p>
It accepts a single update command as a
command-line argument, sends an update request message to the
@@ -1017,7 +1017,7 @@ $ <strong class="userinput"><code>sample-update -a sample-update -k Kxxx.+nnn+mm
</div>
<div class="sect3" lang="en">
<div class="titlepage"><div><div><h4 class="title">
-<a name="id2609030"></a>nsprobe: domain/name server checker in terms of RFC 4074</h4></div></div></div>
+<a name="id2609128"></a>nsprobe: domain/name server checker in terms of RFC 4074</h4></div></div></div>
<p>
It checks a set
of domains to see the name servers of the domains behave
@@ -1074,7 +1074,7 @@ $ <strong class="userinput"><code>sample-update -a sample-update -k Kxxx.+nnn+mm
</div>
<div class="sect2" lang="en">
<div class="titlepage"><div><div><h3 class="title">
-<a name="id2609094"></a>Library References</h3></div></div></div>
+<a name="id2609192"></a>Library References</h3></div></div></div>
<p>As of this writing, there is no formal "manual" of the
libraries, except this document, header files (some of them
provide pretty detailed explanations), and sample application
diff --git a/doc/arm/Bv9ARM.html b/doc/arm/Bv9ARM.html
index 48699063..16212bb2 100644
--- a/doc/arm/Bv9ARM.html
+++ b/doc/arm/Bv9ARM.html
@@ -14,7 +14,7 @@
- OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- PERFORMANCE OF THIS SOFTWARE.
-->
-<!-- $Id: Bv9ARM.html,v 1.277 2011-08-04 01:14:41 tbox Exp $ -->
+<!-- $Id: Bv9ARM.html,v 1.279 2011-09-07 01:14:42 tbox Exp $ -->
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
@@ -113,17 +113,17 @@
</dl></dd>
<dt><span class="sect1"><a href="Bv9ARM.ch04.html#rfc5011.support">Dynamic Trust Anchor Management</a></span></dt>
<dd><dl>
-<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2607664">Validating Resolver</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2607686">Authoritative Server</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2607625">Validating Resolver</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2607648">Authoritative Server</a></span></dt>
</dl></dd>
<dt><span class="sect1"><a href="Bv9ARM.ch04.html#pkcs11">PKCS #11 (Cryptoki) support</a></span></dt>
<dd><dl>
-<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2609507">Prerequisites</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2607730">Building BIND 9 with PKCS#11</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2607825">PKCS #11 Tools</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2607856">Using the HSM</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2609965">Specifying the engine on the command line</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2610011">Running named with automatic zone re-signing</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2609400">Prerequisites</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2607828">Building BIND 9 with PKCS#11</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2609425">PKCS #11 Tools</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2609456">Using the HSM</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2609927">Specifying the engine on the command line</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch04.html#id2609973">Running named with automatic zone re-signing</a></span></dt>
</dl></dd>
<dt><span class="sect1"><a href="Bv9ARM.ch04.html#id2572544">IPv6 Support in <acronym class="acronym">BIND</acronym> 9</a></span></dt>
<dd><dl>
@@ -183,16 +183,16 @@
<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2590214"><span><strong class="command">view</strong></span> Statement Definition and Usage</a></span></dt>
<dt><span class="sect2"><a href="Bv9ARM.ch06.html#zone_statement_grammar"><span><strong class="command">zone</strong></span>
Statement Grammar</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2591881"><span><strong class="command">zone</strong></span> Statement Definition and Usage</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2591826"><span><strong class="command">zone</strong></span> Statement Definition and Usage</a></span></dt>
</dl></dd>
-<dt><span class="sect1"><a href="Bv9ARM.ch06.html#id2595430">Zone File</a></span></dt>
+<dt><span class="sect1"><a href="Bv9ARM.ch06.html#id2595392">Zone File</a></span></dt>
<dd><dl>
<dt><span class="sect2"><a href="Bv9ARM.ch06.html#types_of_resource_records_and_when_to_use_them">Types of Resource Records and When to Use Them</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2597524">Discussion of MX Records</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2597554">Discussion of MX Records</a></span></dt>
<dt><span class="sect2"><a href="Bv9ARM.ch06.html#Setting_TTLs">Setting TTLs</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2598208">Inverse Mapping in IPv4</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2598334">Other Zone File Directives</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2598539"><acronym class="acronym">BIND</acronym> Master File Extension: the <span><strong class="command">$GENERATE</strong></span> Directive</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2598306">Inverse Mapping in IPv4</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2598433">Other Zone File Directives</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch06.html#id2598706"><acronym class="acronym">BIND</acronym> Master File Extension: the <span><strong class="command">$GENERATE</strong></span> Directive</a></span></dt>
<dt><span class="sect2"><a href="Bv9ARM.ch06.html#zonefile_format">Additional File Formats</a></span></dt>
</dl></dd>
<dt><span class="sect1"><a href="Bv9ARM.ch06.html#statistics">BIND9 Statistics</a></span></dt>
@@ -201,41 +201,41 @@
<dt><span class="chapter"><a href="Bv9ARM.ch07.html">7. <acronym class="acronym">BIND</acronym> 9 Security Considerations</a></span></dt>
<dd><dl>
<dt><span class="sect1"><a href="Bv9ARM.ch07.html#Access_Control_Lists">Access Control Lists</a></span></dt>
-<dt><span class="sect1"><a href="Bv9ARM.ch07.html#id2603259"><span><strong class="command">Chroot</strong></span> and <span><strong class="command">Setuid</strong></span></a></span></dt>
+<dt><span class="sect1"><a href="Bv9ARM.ch07.html#id2603289"><span><strong class="command">Chroot</strong></span> and <span><strong class="command">Setuid</strong></span></a></span></dt>
<dd><dl>
-<dt><span class="sect2"><a href="Bv9ARM.ch07.html#id2603409">The <span><strong class="command">chroot</strong></span> Environment</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch07.html#id2603537">Using the <span><strong class="command">setuid</strong></span> Function</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch07.html#id2603438">The <span><strong class="command">chroot</strong></span> Environment</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch07.html#id2603498">Using the <span><strong class="command">setuid</strong></span> Function</a></span></dt>
</dl></dd>
<dt><span class="sect1"><a href="Bv9ARM.ch07.html#dynamic_update_security">Dynamic Update Security</a></span></dt>
</dl></dd>
<dt><span class="chapter"><a href="Bv9ARM.ch08.html">8. Troubleshooting</a></span></dt>
<dd><dl>
-<dt><span class="sect1"><a href="Bv9ARM.ch08.html#id2603617">Common Problems</a></span></dt>
-<dd><dl><dt><span class="sect2"><a href="Bv9ARM.ch08.html#id2603690">It's not working; how can I figure out what's wrong?</a></span></dt></dl></dd>
-<dt><span class="sect1"><a href="Bv9ARM.ch08.html#id2603702">Incrementing and Changing the Serial Number</a></span></dt>
-<dt><span class="sect1"><a href="Bv9ARM.ch08.html#id2603719">Where Can I Get Help?</a></span></dt>
+<dt><span class="sect1"><a href="Bv9ARM.ch08.html#id2603646">Common Problems</a></span></dt>
+<dd><dl><dt><span class="sect2"><a href="Bv9ARM.ch08.html#id2603652">It's not working; how can I figure out what's wrong?</a></span></dt></dl></dd>
+<dt><span class="sect1"><a href="Bv9ARM.ch08.html#id2603664">Incrementing and Changing the Serial Number</a></span></dt>
+<dt><span class="sect1"><a href="Bv9ARM.ch08.html#id2603681">Where Can I Get Help?</a></span></dt>
</dl></dd>
<dt><span class="appendix"><a href="Bv9ARM.ch09.html">A. Appendices</a></span></dt>
<dd><dl>
-<dt><span class="sect1"><a href="Bv9ARM.ch09.html#id2603781">Acknowledgments</a></span></dt>
+<dt><span class="sect1"><a href="Bv9ARM.ch09.html#id2603811">Acknowledgments</a></span></dt>
<dd><dl><dt><span class="sect2"><a href="Bv9ARM.ch09.html#historical_dns_information">A Brief History of the <acronym class="acronym">DNS</acronym> and <acronym class="acronym">BIND</acronym></a></span></dt></dl></dd>
-<dt><span class="sect1"><a href="Bv9ARM.ch09.html#id2603884">General <acronym class="acronym">DNS</acronym> Reference Information</a></span></dt>
+<dt><span class="sect1"><a href="Bv9ARM.ch09.html#id2603982">General <acronym class="acronym">DNS</acronym> Reference Information</a></span></dt>
<dd><dl><dt><span class="sect2"><a href="Bv9ARM.ch09.html#ipv6addresses">IPv6 addresses (AAAA)</a></span></dt></dl></dd>
<dt><span class="sect1"><a href="Bv9ARM.ch09.html#bibliography">Bibliography (and Suggested Reading)</a></span></dt>
<dd><dl>
<dt><span class="sect2"><a href="Bv9ARM.ch09.html#rfcs">Request for Comments (RFCs)</a></span></dt>
<dt><span class="sect2"><a href="Bv9ARM.ch09.html#internet_drafts">Internet Drafts</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch09.html#id2607301">Other Documents About <acronym class="acronym">BIND</acronym></a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch09.html#id2607331">Other Documents About <acronym class="acronym">BIND</acronym></a></span></dt>
</dl></dd>
<dt><span class="sect1"><a href="Bv9ARM.ch09.html#bind9.library">BIND 9 DNS Library Support</a></span></dt>
<dd><dl>
-<dt><span class="sect2"><a href="Bv9ARM.ch09.html#id2563921">Prerequisite</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch09.html#id2563930">Compilation</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch09.html#id2563955">Installation</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch09.html#id2607949">Known Defects/Restrictions</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch09.html#id2608026">The dns.conf File</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch09.html#id2608053">Sample Applications</a></span></dt>
-<dt><span class="sect2"><a href="Bv9ARM.ch09.html#id2609094">Library References</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch09.html#id2608665">Prerequisite</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch09.html#id2607924">Compilation</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch09.html#id2607948">Installation</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch09.html#id2607979">Known Defects/Restrictions</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch09.html#id2608056">The dns.conf File</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch09.html#id2608151">Sample Applications</a></span></dt>
+<dt><span class="sect2"><a href="Bv9ARM.ch09.html#id2609192">Library References</a></span></dt>
</dl></dd>
</dl></dd>
<dt><span class="reference"><a href="Bv9ARM.ch10.html">I. Manual pages</a></span></dt>
diff --git a/doc/arm/Bv9ARM.pdf b/doc/arm/Bv9ARM.pdf
index 36b065fa..c251b757 100755
--- a/doc/arm/Bv9ARM.pdf
+++ b/doc/arm/Bv9ARM.pdf
@@ -7835,21 +7835,26 @@ endobj
/ProcSet [ /PDF /Text ]
>> endobj
1717 0 obj <<
-/Length 3547
+/Length 3633
/Filter /FlateDecode
>>
stream
-xÚµZYsÛF~ׯà#µe"s˜©<9±œUjã$޲µ[I* ˆ5 0(Y©ìßîé\-;©-=hÐsõôt} åBÀŸ\Ø8Ú™EêL /Öû ±¸ƒ¾¯.$Y…A«á¨/n.>{­Ó…‹\¢’ÅÍf°–„µrq“ÿ´üòï/¿»¹z{¹R±X&Ñå*NÄò‹ë7¯ˆâèß—ß¾y}ýÕo_^¦fysýí"¿½z}õöêÍ—W—+ic ó¯pfÂëë\Që«·/¿ùæåÛË_n¾¾¸ºéÎ2<¯òÛÅO¿ˆEÇþúBDÚÙxñ
-wdy~,š†>~± Vyø{èã”ÃB)ÉT$‹•ŒR£c¿üß|—”‘‹cµtÀR’fÿ⇬¤q‘ѧóè{‡úØÎ°Ð“ÿà}@\)œú ò ŸXQÂEJÆf–•¡¤V÷ÉŸ–v¨!†95ç85',ùÿ–ú8a©4’ƪYašb军¯u½#úcÑüZ­êÑZâ¼À»ù+l±„«Óþ¶8Î/!?°ÄégmQVmq¼Ïvg×Z)9)&jðßϱó³×Jvbã‚}c%ÂÒ „iW¬ÖÀ6Å‘€ã‡vÞUKŸ¯ŠŸ…PUÙ–uE”¬Ê©ñc“ݼ•˜1ì×iLªq³-:~¶n£Ä‚)
-?†xº– HtxØ€7!—9ñV4ô¹ÞfÇl "+›¶\3±­éÿmAÿ³¦©×%,“Ó÷CÙn¹‡þ/¥]ûºõÔ²Êö<•™ÀVN/¯7£™šŠ<½§¹»âR.«;ØÁß–±‘ŽÞF·U"£V?ëçù ¤ÄËv[ ÈµòÀcVÝÔ¬7<ËóÔа°ÔºF>‘—8ÕÂ,¿­vÔ‹Rc_7ídç5-Ói.µËÀB¨»²à=hý»ÌÿÏwSp206£å´+èLMヲ•ÝùÈ €GqiâøÎQþy´®«ÍŒz€ŸHÁYðЈ¡`#•…–¿ÿ€:t[æ95ÔèÝR9£†©^®³Šõz}:R3ã>:8¨L[ˆ²+î‹ߌÁJu…÷pw:flo@DÊŽÔ¼|Y5eÎ+g3ÇÒ2Ž$¸]fø¾,æŒËD6¶ON…:“:Òî3믴u‘éyÎï“
-ðæO¥§xæ6ƒóà—]ÖUAdR ìIcfïΈÈ"Ê<yÊÈ'Û7hf±ƒ-½mÀ^í¶nx{Ôõ@­‰Ä:lé”4Š ÐBã‘Õ‡Ý0©¢‹#+ÝXJµG,-@KølÞFË»ªî­Ö¤Â߀FîK@Ü?z±áˆªž“OšxBLö¼|gÕœ|´Lél¸ÉèlÓ½¤‰”5êÏî5#ÀœÉ IS2
-JâùÉòw›Øj!Hh6žwãA*¦oy
-Ô84õü劉Ô|H\ëjÅYäbR%ÓÀs,O¼D%é¬6…Ù-5àÐȧcBR@hÖ<¼®Ò8ŠeŸ=g¢à®bì¹>p«—U¿ q@.Ørœ
-hTç´ž¿6›ÄO´V/¾!愘Èé 6ÇÂHÁ±®èuiÃGÐatðL¢èÈkéÇhkBÑп^c%R› ŒƒÚ@Ï £4awÎÝ$iw:P½{û…Y•€–Úzy h'%Ÿf¹!¨ƒÖmæ4Ø÷%,QófËéë†bŸ{óï“i8DɯCÜ…ÿvY^@@¡0«Nðæ%å¿èíËõ–šƒÃÛá ]wBÇA?ôæQH­<l_·ŸCËø†®îzµDe8{.3X4u.þ £\u£F²h¶õi‡\Bší²Ç†ÚõñZN’p|´Ãéx ´'qd ‰;çVEFëø£áܤ*‰(µY ŒMgDÏ[\êÜ'ù\%ÿ÷7íïwþ@ÖGÝþ”ìÑ»q=@š 6“NвÉh¨ ·•Éåu:­‚€ÌjŽ·pÔmíëJ@cÐòmÒhxô¥‘p’rÏ›ÕÜÛi|”äårSó*Åûl¡cà±dŽ€­îXäkœšJ¯å@¹=ÝÝ=N*|ëcÖlCŠPj]—vy:´ÜµøøÐbáL
-—õ-NÛÑ×6DÉrU[RÉ
-kðA;G¨3GÚeº:H`i¦bݱ3 Í@6òøDÛDôx¼+^LA°WFHÈ`‰u]ê~ °»Úç0¡ -͆ŽQ"…ûðµ#-º-ä øŸ†ÂiìŠì³÷´o~ÛØ·pÁ¾¥etÑïËýiOH;ö^¢ùý†ãŒ[EÒÄéóö,ÒÎêYï=W•¯´Z;6FŒ‘‹Ž
-Ø=bÁ—‚´?üƒk ÖŒnÃ@FŒ/ 8˜&©ð.´ÄŠˆž{ÃE>ø>U9ðÑÖuÎôG¢ó/Œ€âxýžb£÷L£@†²v½ E1>ÂÈb¾@õ,ˆb~ÿiMlA$Å ó‰3Ë#˜zGþqþ•yóHœ:û*¹·j{?ž†ÞÅb#ãE‚]â\/·çÊ9ü„§|•‚ìW°îpi&¡îfŸì<˜²³¸žM×±Š'>m³TEÂvï¢>tŽ*,è…Æ¿ÐÊœ9¨E‹ÿÂ΃ˆԢୟî—j°lcF~~ö•(´ëä?xöÅ-¼oã¾€¨<µc‰ß“´qÂÄ$|éKŽOù0€™ZÙ¡M¦]-e¯ ”]¹÷å‚4Ä_iøÑ £ê!&ÀÕútìãQ¤•Õm}òÖ¡*Ç•P1ª„6ɧ3?z ¦T’2²ÍùÇ_€.Õý°áñh-ì´þ<ðØ“Ÿ¦ ãÓ ³áè‚ Ù:@rçíÃ3å¼b)È'û
-OÇóêÀê<«e©‰”é /ꙟ=ê Xs?RÝo¥þòO"ûß‹°
+xÚµ]sÛ6òÝ¿ÂòMÄ H
+3±<§÷1¼ùSîeÏÜpìÙEÛTö'À–$föî´H¬É>æò”–O¶ïPÍ2[zÝ€½ú»¶ãíQÖ´%˰¥SÒ,2…<©Ý-é†I]–XéÆ&¿õ+ %|6¯£õmÓµVáoÀO£ ÷5XÜ;G¶áŒ¦ã1`<!&{ž?¹³jŽ?©4t6Üdt¶é^R'Êjõg÷šáØ’Áq3Ë
+ÀUk`7ÄtÓ0èoæo‹®L’áža
+]s·ƒm[´!~S‰x 1øD ÇñB³b!!ñôˆ|ñ»·›Øê!HèÖžv‘áA†ßñÞ
+¬ÜÑ,á<*KÉÎe¥VÖá±j¨Þ´jVëàZµpÙ˜kdƒ”ÉÇrœ-Ö¤m[$i΂!BØX°³É9˜f˜w´¨¨™6gÍÌYZýÊþÅ?0¤FÛõ‘†Ë¨UtZÏ_›Í³'Ò
+Øk6ßsBLäÒ¹THeA†UN2 (Ë2 A†!8NÑB
+†ÔÒ
+&X-®z‚n‹GžµéZFÊtUS9i™Ê…Á«L€˜÷¥€õz‚À 'Þ䋹x¥æ„… C¸ä=å1„ˆ%²òE
+\8æÆZEÏ2 u§@[Hô|(ø¯×X†Mõć S #ƒtZœ0\ò0‰Î;ì¨X…£GÄ|4€‡¾ÝBªI™·^¬ÉÎCë¦ðÌìûP$Ô¼L\·™
+3‰
+ ?*hª ·è’ÈßG™‡VEVܦl⬛ÖÕ
+›Ì+²-ÞP¿ùa{¢ßÂý–"Ô`ÐE¿¯·‡-u‚!¬ì8^uþmÖ7—T"ufž×ga¢Ö³Ü{ª_f¶v¬Œ"(#W\ÁÈY5ÍãÅ*E*ª¿´€T!¬¢ª(EÅA’\‡.
+Fôqðc=U˲à <廈Z
+¼_Þ-Ø¥™„:®ŸŒ);‹«ÙtK˜âÓ63*6>
+ûÐE8ª° ÿ"UúÄA­Ãüâ/ì<؈H@)
+Þúé~&ÍÖzäçgŸÈL’ºÈÿÁ›7ná}¿_ˆÊ«ÙM5I'DL—c½õ)lfªìP'ÕCÃ^ ›zëË&Ä_&üãˆæQéàfuØãQ„ÕÍM{ðÚdD,ËqXŒÊÀƒMFüÇeãÌžÁ)•䣌„sþåL—Šÿêx†=i*ì´ø>ðØ“ÿå ãÓÀ³áìŠÅ*˜äèíÃí¼`)È'žHórÇâ<+eF'JGÅ Šzâ?Ÿi†¬¹hŠøG±¿üÐãŸe5h€µ*þÕs—ä‰U΢|+§”Ç?Ž>%ý‰¤n¾endstream
endobj
1716 0 obj <<
/Type /Page
@@ -7862,10 +7867,10 @@ endobj
/D [1716 0 R /XYZ 85.0394 794.5015 null]
>> endobj
494 0 obj <<
-/D [1716 0 R /XYZ 85.0394 644.9201 null]
+/D [1716 0 R /XYZ 85.0394 646.8126 null]
>> endobj
1581 0 obj <<
-/D [1716 0 R /XYZ 85.0394 612.3722 null]
+/D [1716 0 R /XYZ 85.0394 615.4502 null]
>> endobj
1715 0 obj <<
/Font << /F37 962 0 R /F41 1134 0 R /F21 874 0 R /F22 897 0 R >>
@@ -8082,11 +8087,19 @@ endobj
/ProcSet [ /PDF /Text ]
>> endobj
1747 0 obj <<
-/Length 1191
+/Length 1204
/Filter /FlateDecode
>>
stream
-xÚÅX[sã&~÷¯Ð£Ý¨Ð]³OÙÔÙf§›ÝºîSêñ 94’ÐŽí¬ûß‹n¶ˉ¬¤ÓÑh@ >Î9œóq
+xÚ­XmsÚ8þίðG¸é,¿{ú)Í‘\:×´Gé§Ã(¶Lt±-WRüv€Æ&†‘,YvW»Ï®…4]ýf;Ðñ _s} Ú:²µ èÚBÍ]Põ¨_Í·>N¿_™®æCß1m5°<¨{Ò¦áÝÐ)}xùåöêæúûäbäZÃéÍ—Û0l}xuó׸ì]O.>¾˜Œ
+ããÍíåˆ_6'@'ã«ñd|{9ͦŸãéN—¦¾H7sE~ îfº*µ? thúž­­Ôƒ‘ïZ2°lÚ–iÖ#ñàÛàï`c¶XzÔ~H‡†éG h¡†=:º‚rm:¦a¼GׇÁ A².ŸþÑm}…yº0·t‘2NÔ*g?”Í,W^I
+©Þ\d$èbÆW»ƒÌu`i¼ÙF” ÙK‹
+‡pQ>ÿ,›j–fs†¼Ë—»ñüaÖÚBXïW4ÿuPƒ®#î±8ïH‹Õg iNÒ€ˆN¾`d’³}‹“K"$È‘z„Æ ŸPÑ¥þà…MúYî]HÌ ÷J—É=á½|Trœ
+eX@C6l)ߎ$iÒ ©¥YÊ$Ž“Ï¶lÈ:‹i@ek° }‡Hg¡Ë­@Hb\-$`i(ú"HÃý½2[Þ?’Í¡™Nõ{ºl%P,=ÐÌj„ü¶
+±Ä}’G›%Õr)
+R:›ÚÞRH"ù¦:”£/DK
+E6*rHÆ+Úɰ|˜§8!–ã¥"º0Š%«8f«mÕ¶,Šº¤â4¦y •žÑ¿L}&œ)ÏHŸ†„«â,3åa$D>°°0à$!©Ü.SºÎÝ& Ä>Ò­¶rªªöª§óÑœ2öäQعŠî ÆBÌê‚,_zv7"ÆOäïN'? ÐLŸU¡—S(b®êáàa+öê^¼• ªòáoÂD'0AýUðn¢ÖEÈ;ÃVnR•Ò;¿}kTÈåÇ×£xìeDî<YQÿ>…¶ëÎVŤBH ­¢p÷6ê¾™jr2Qòî+®>•O3*q4v—FýU–ÊË0š–ýsY¡ × « ¿¿b8¬„'+Ÿ‡§”—°¢á?Ûö'ZQÿØ6´k¼þÈ&Ç”ÜU›ª3ÛŸ{Ë<wê#ïèçx¹7:¼=ÈN¼Ó}F‹„c×A¦Ö4]Þ¨µÛ›¯Šö÷h–* =ÏØÝFãÈp=hy
+¤*×Òs$¯ï”Eÿ<j@øendstream
endobj
1746 0 obj <<
/Type /Page
@@ -8103,15 +8116,14 @@ endobj
/ProcSet [ /PDF /Text ]
>> endobj
1751 0 obj <<
-/Length 1132
+/Length 1128
/Filter /FlateDecode
>>
stream
-xÚÝX[oÛ6~÷¯Ðc<€ŒHŠ¢ˆ>¥™“¥XÝÍóž²ÀP$*Ñ*K®H7qêþ÷QË’#;²¼Ã`¼é|<çã9ä!‘aê2
-MÂ-ƒq RQÛLãA]Pù Ø|ê_½Ÿί38ä6¶iPÃr é8Șú·g—¿\ü6M†
-,–÷•×ÖiÚW?2ê«‘z+÷Ä6&Ã…UÛ7×Eð1 fT#Af+ú)¢3fµþm`½µénÂKŸ£D µ²¸£'øj×Uµ_«ÊĶ>Œ UéUi?U±I &Œ·RêF
-Ek í‡èÊ!Ö[WW]ߤc3íî^ëÁd¦c¿½q·¹†Å¡E¸ÝjÃR
-°—ócB­ŒÔN‘`3H¶öq@O‹F ±8?´ŸtƒmPý
+xÚÍXÛrÛ6}×WðÑê ` bò串ëLã´Šò¤z44 Úlx
+G¾ ¦w¦h·ß LH˜kOúÁ„ˆ1l$Ë&жYăƒß×
+oKÑ6þlâBÛÅ´…@ 5D¦ ™Å¨Am‚IÉàtÓ< £˜W=©D”>Tý7UsWø©„ ³mÜL<©¸(ÄA˜‰ÄSÕð¦m*þ¬–Â{Ò}ÔYߟÙ\¤^Ü ÚÆò jy £—•Cº7“9÷;X×.<y"Øø¥ñbFBª^^Ôz¸Õóת©ßFùÌ Qå™PëñâánË „pe¯l¾u "z¸÷äqSZJ‡"K@…!<õyíÇ‚ËY&fiÖUJrÐ'¶væ3J•þƒÖ(zF©<Àø×ͼo‰ÍâHÖËí,,"Û†¢xÇp‹‘6O?óEõ•îÜ­íoGÚTÇ@ëìƒ=¶7éP2g|HçÉ==¨{Jx©Ô‘
+.Ë-çè½ô%-H”Xœ ¢ÄÑWŶ+óXE Ú.2–ÛP*>¬`*×â†6]\Õ6V¯‹Ñ"h6á3K½•£S?ö¤\׎åBÔ¦V-òZâQ׳oÚ¸ØW"¿ƒ<æ:³´Q=ôgÎäþgPø$7Y«.é2ô¢x=¤™à-GŸ²9?¯ÚÛ¬NÌ›$yÂSÅØÊ3jåÙ:•g´Ã³Tóû×Èóâ8{_æ\,¶*ÿb©âRÎô1ÖlTýß:0ÙЩgäµèŸ˜ W"'òâyÞìϲ¼¤îŽŽ=ô¿¼s8áÔþÛSÿ¿uÈm»ä"úèIHÛ•”þ×èN¾
endobj
1750 0 obj <<
/Type /Page
@@ -8128,17 +8140,14 @@ endobj
/ProcSet [ /PDF /Text ]
>> endobj
1755 0 obj <<
-/Length 1137
+/Length 1179
/Filter /FlateDecode
>>
stream
-xÚÅX[sÚ8~çWxú;cUWKžÒ”dÓÙ¦»”¾,Í0DâYcS[„²›þ÷•, q!ÛÙáÁǺ|çè;ë€<h~Èc$–—0ˆ˜7™· wkæ.[¨\ãW‹üúªwƒÖÛ Â= d€o0«a
-§Óõ¡€@\‚93H€SÂ
- _Š)$çW7 Èm.ÒL;1ZŒìËMƒ}61›iسӿê¦M•`ãæãM-làp(‚=Ž´3À°$<‡±ö_Ä5†ÄD3—?‡k %Àˆ±F®l}–oŒ@/ä[›²§ðM  Û½;t/så?IùZå£4%éé÷wš(?סŽrMò=€£³xêpæê¤G‰Ÿ©Y¦ò»¢”œ\^RX¢³õ‹ Ðc;^
-±kÅ2Ö‘?s]m:ä ¤»P?º•7í¾ÖÛ[¿’°²p8‰Ã</ÃðñM°z½ØøØÄÌÄ„ÎrÜ=@GÇéÊÿ¶TÙºwã&¿Tžæ¡žÜb}nüÇüä*»7!_B¨|x¸I¬m
-—˜
-ü¥º,SzìÄÖúÃÀèU‰÷?ùy–f«0›vpT.ÙÐ4‰×³(Ëõ¶pAI‰£²ç=ú\ =ÅÕS«[ã4ñí~–GÞ€7§ú"SÓ(Sݘp³(n,¿‡J¦­0vŸo¨7™¸õ VßõC®žóþïr}ŸMÔÈ&}m|£=N÷¼Þ}Ö³o/0ò6Ã3kš¹hC¼mT°0Í,sÄg“èj®í^ß«¯â$²jÝH˜Lð%oÕFÏöVo @RDkz
- ÙÝ{õ©¶ò$]¬”ÎÜ"]AØK’“Lº9a3W†ŠÅ,"Á ­¢8vÒX5e]8ŽKŸëÔ=Y‰vzMˉp©ïÒ,²_™ûj(ÉWE…µ/Î#DìÇ ˆ€˜‹mÝ×9ŒÚˆå×™V–â¦6zUž¾º©Þþã@9 BàM|ì8s¨0 „‹e¹âQË_uß媚éÿ«Á@Àendstream
+xÚÅX[oÛ6~÷¯údKR¼ˆÈSš:]Š5Ý\÷en`È6“%W¢ãºËþûHQ’eEN|Á0øÁ‡·‡ß¹GÈú‡Ê
+»×7¿õ­ôapùéÓå ç"Ÿ¢îÕ¯—¿û;Ä
+Œw7·ïm°{@ýëþ {ÕïÝ ?vúÃê,õó"虃|ïŒî 3ÓÇþØÀ>uÖº;‹¡ ÄóÊž¨ó¥óGXÍ—¶ò‡ ÀÃ-T#PÏCâp*
+€u$´rÝ¢ë«|cŒ
endobj
1754 0 obj <<
/Type /Page
@@ -8151,22 +8160,22 @@ endobj
/D [1754 0 R /XYZ 56.6929 794.5015 null]
>> endobj
534 0 obj <<
-/D [1754 0 R /XYZ 56.6929 206.4643 null]
+/D [1754 0 R /XYZ 56.6929 182.554 null]
>> endobj
1757 0 obj <<
-/D [1754 0 R /XYZ 56.6929 176.3505 null]
+/D [1754 0 R /XYZ 56.6929 152.4401 null]
>> endobj
538 0 obj <<
-/D [1754 0 R /XYZ 56.6929 176.3505 null]
+/D [1754 0 R /XYZ 56.6929 152.4401 null]
>> endobj
1758 0 obj <<
-/D [1754 0 R /XYZ 56.6929 151.9391 null]
+/D [1754 0 R /XYZ 56.6929 128.0287 null]
>> endobj
1759 0 obj <<
-/D [1754 0 R /XYZ 56.6929 151.9391 null]
+/D [1754 0 R /XYZ 56.6929 128.0287 null]
>> endobj
1760 0 obj <<
-/D [1754 0 R /XYZ 56.6929 139.9839 null]
+/D [1754 0 R /XYZ 56.6929 116.0736 null]
>> endobj
1753 0 obj <<
/Font << /F37 962 0 R /F41 1134 0 R /F21 874 0 R /F22 897 0 R >>
@@ -8565,21 +8574,28 @@ endobj
/ProcSet [ /PDF /Text ]
>> endobj
1818 0 obj <<
-/Length 3298
+/Length 3351
/Filter /FlateDecode
>>
stream
-xÚµ[[sã¶~÷¯ð[ä™
-%n<m6Þt;Ózi§Ih‰¶ØHäF¤¼q}®&
-t'›Él‚‡çòá\@_ð¾ä%*Q—B1Ä Ì/7‡‹âòî}{ÍÚ­ÇT_ß]üù—
-©’”—w#^RâË»í«tŠÕÛïoÞ½ÿö‡Û7W‚­îÞsµ&¼X½{ÿ·k;úööÍwß½¹½ZcÉñêí_ÞüýîúÖÞ*¯ßß|cg”ý9ÃôöúÝõíõÍÛ뫟ïþzq}të‹ ªùõâÇŸ‹Ë-¨ý׋Q%ùå'¸(VŠ\.§ˆ3JýÌþâÃÅ?ÃÑ]óèœý—ˆV‚% ’L”óVÆH` D‚aTrª‚• ž³²§ÒVŽUÛ?ÔÇ+,Wë¾;7õTsLÀwÖ³O„T3R‘˜(ÄùDŠumÍ?ìÜ`[÷›cóqhºÖNtZ®‰JJ ‚0 dt™ ÀÞ‚3÷LÓNÕ¥…D˜ ©ko/íàv¤x _P<åk5ß¼è¨!K$‘C’”<ï@µ$HÂM ‚À;TÁÿ [€Þˆ*=OuÆ]ë§2A•ˆa¾ G š$B£°ÛD,Ȇ>§ÎDÉÁ4@ÊÁ?Gç
-
-Ë,/€'š œ.Á)§±
-jF‡¸V*—BÄJØbå`«lõD
-1KâËH° Äý‚ˆ)ßbZ1ÌwÃ#D× y{ªIRnyŒA3Œ%_Šk#ª Æ<•ÙÞ¿=ØrçáØÖÛæA_@ T·›ºO+:ØÚ¡¬8jFž¸¹€ÈÄy dðe·Å -YŒ}g6Ìá#®ÂyÉ’Zi 'Íô@«Ž4ÏöŽ~Á)ßZ[È´¿Pp™wF Z$åfñm [ýTð⦂cªÁzF»(õävêu]a!Å9~­K`;DyK†ŽïPõÔå©ã(t¦}OÙng8a4Â;·ßWOs¥–i°BU¿Ùu–ËDÑÊî².dP7ûT5ûê~ïæ«a’žÿÛµn´¯Ÿê=+âsû›•"ºÆÌîï1Õùý¨´¿ÔÏ`ë#
-ƒÖè^¸ÈèMߟ|jÓ!‘ÄQ -C•pl·ÎYZKÎytP‚$ÁÞZ€Ý\êaêHá;.4—S±dºçß‚!M;À¿¯fÏ­t_ŠœÍþ´5ÚÃV{ºïžL÷@Äêþ4Ø»vG˜‘‡ie¼ažØþçÔ1lÔýÂM0“Â"Áx$ȹÄNBVýfWoO{/JµÙtÆí[³»4ÅÐEKÃú 7×Ý¡*ÀXe¯t-Ó×i+Duè„PNõËt†ËÅWŽ~=~`îUÆ”¯VÒºl ?Ö­–Hά€Vš„H¦™wŽjAVH¤( ,’Ä=Z–HTP—¿Ò~I€„ïÈ& ê³¶àCÀ
-'N¼aâæKG¼—æË­»aëb)U1V¨¹X¤]7¿Ø ºãSåŒânkmëÖ[äþyn¿ëÝ Ãžt©Å˾Œgj#L£Ôkzu]%Óß ‰¸ðº{igªÓ~ˆªê øL %aA½}ãòÍzHŠÌYY!R*9.çz;B%’J.ôvcªó½] 2°Ví×¶Z_CIµë¶éñ Ô¨ê²Bx¢!âÃA…J}†IáZ<}N›¶xzÖlsÈì[<}aZ<=0-ž˜ÆÎžJ7Ža7:‘ÖÑMÿ‚C'‡×Ö
-ÀûÏ+hFm¢…ÊÚ•ÏåÊ0ûe¸3àŠK€$óXžˆaÆÑ4­³M ƒ¾ ¿eu£¡¤N-#3ˆ óΰ0{_¿,gû× ,¡‹]£åÅ»û¼Õëj³söÕoMÎ9'Ä:ÛÂÎÛzWW)‹%=
+xÚµ[[sܶ~ׯط¬fº(q%‘<9Žì:“(­¬L;Mò@-)-ë]ÒYre«¿¾W$T'ÎxìÁÃsùp. WüÁ+.D®rÉÏ0_mÙêî½½À–fãˆ6cªoo/þú†æ+‰¤ bu{?âU ¬(ðê¶úe-A—À![¿þéúÍ»·?ß¼ºÌÙúöÝO×—³õ›w?\™ÑÛ›W?þøêærƒ Ž×¯ÿöêï·W7æ–°<¾}wý™‘æç Ó›«7W7Wׯ¯.»ýþâêÖë2ÖgT)òûÅ/¿e«
+Ôþþ"CT|õ .2„¥$«ÃãqF©›Ù_¼¿ø‡g8º«ÙñqÂX’",`µ2F9Æ@”3Œ(Ò[™à˜••²òp,Ûþ¾>^âb½é»Óq[O5Ç|—çb5f?ÂSE¤ #)0‘ˆó‰ïëÚ˜ØÙAU÷ÛcóqhºÖLt÷J®‰J2GaHÐe"@öÎ9³Ï4íT]š³ꚛLJ•ÜŒ÷ô ŠÏùÍ·Ï:*Ècò™H9C<íOµ$ÈŒ›Í
+€Ž~A÷9ßeÂ7ái'xªAæÜ’
+Êe€cªó
+M1ÈÍ %Ç dbÌŠ@ç$-ý‚ös¾ÿøÑ´<Õ‚ sni ò ñ‚/Á1UƒŽ*á²X „€2ÉÓ²xªˆ0 ¡² ’BiþTÆ£¡”*+&(8˜m,èý‚æ|_ŽDJ „€0é Oµ Èœ[‰êððGT $:*µâ©¯7/ˆ
+<DÙ.%Œ§ŠH@Q
+Äù2IyA©©$0.Äy0æ
+ ]ð9¨I-EPóô :Ïù¾¼ áA ¢iÛ{ªAæÜÒhò‚Ò…¸7¦J ÍQÍm@ @€¨œÀE
+7 Õû«×f ðwÕ\[>Ô‡º 0Sœ­owõ84qjØ™+{ù±ëûÆ«¾³ÿ:²÷2¬@DÂ^žzD§FÛobÇÅBr» ?ÖÇC3ôæPA¬Í`æ®6¿§U9h)Öme©vö¶ ¢jtÚïŸÌ]£Ø¦oZ÷ä§]Ý‚©æÊ?<£;áœÔ÷'ä}„Úv‡ƒO$aT‚G…¯Žme¥1äœ%¨ ØÙCi°‹¥©Žd®ãB±œŠ ¦Špžð !Ò´üý&zn¥êxü\äl÷§Jkí `è®{ÔÝÉ×w§ÁÜ5;BLKí ýDõŸS?„|°V÷+;éÁL2ƒí/Oà8 Y÷Û]]öN”r»í´Û+½»ÅÐKÍú+;×<Ý¡JÀXi®T-Ó×óVZs¢šOØÄˆ‘Œ/¾Ê°ô›ñ±WS¾JIã² üP·J¢"V° Z]h™"ï2,Õ‚$,+¤€²@ ô`YR ,ƒºü…¦ðôKÌøŽL¡Ò¡>k ž©g
+œ¶…§ZeÎM‰¢ÖE› ª™‚“pq«‘–“Dˆ€˜á"C<q.DpDxA–C„:õ'ÒñÝ–ØúÈòCbÄ® R¼ªX© (#®ÔÕûDÜweeF&Z«‘)Ù»ƒ¹œþ&#åØFbÈ-.ÍôMÄÇ:¯Ô={ÖœæÛËN¸JFŸšagF_Ô ÷ÂÛxè›>Ñ© (·ëXÔÄbeNØÄB«êÑÄ#à@I±x™Gr,_â‘‚òx„ùC:ãá="FFð1¥H!36‰¡&ýqë'5˜úIÍ™dËŸCíäK@{èÏÌä×V'tNléCÖÝv{:šaÓÚ[nõûÓ` 0âÐ[™|¢IíoÕÕ–Ÿêª”FY¨‰†Ð8¥]„µð;€Y¨# 'aŒUßÊy±V=ë×—–Cíe´ Ä—"t½S -FêÖÜU&w5…©a²œ®çë UeûÁΚs7S/Ö¡:ñ³íÅçF#Fw¾83øVn13Z]›ìÊöÁU,Pa5]eS±RÛú™U “j_÷½ï´ÌŠ»zØùn:
+)£ ½Ý˜ê|oç©ôF¬•û©Ö7PRíºj~<5*„º¤Ž("Dx8(‘PgH¶ÅSç´óOÍꢙ]‹§.t‹§ºÅSÝØ™SéÆ2ìF'Ò*º©_pèäðÚÀróVXmrõŊȧqØ
+Í7¹Ú “Í992f·O§Ã]}t{dòÈûŸ^ÛÉËÈG¡xÿy ͨI´PYÛòYŒ  ³ÏP†;ñW,
+Í
+£nZ£M ƒ¾ çn˪F}IŸ[µ´<Ö Ž7Ì[ÃÂì]ý¼œéŸ7p}Xè%Ï(–˜Ýç¬^—Ûµ¯zkrÎ9>Ö™6në]­]% –Ô
+Q57êÂàªjú†ÆtZ0Ušw ¦î=ÖÇÞœBSaԢš€æ3™„Ú[u¥ã¯tmÚcCW_FjÚÒBþ…ŽÖªÎ&°œ­ýñ¥Û!w5ãMw:Nо¦W웨Ÿa"
+¨[øÓѤ>ÁÔ4:]ÀzÍæù-Tx¶­O£Yj]O3[8|‡’ÁM¨uF+™7(Sù§ C•áó/P
+¨ÆrÁG*¦^Ÿ8ꤲSžç>öÀó—'B½óK™Û‘$˜ð‰×Õ
+”«ö ¶üµ{ýÿ_ŸçÿÅrD¡f9c8¨5YL¬PJpÉæ›!C°¯IDôÿ29º”endstream
endobj
1817 0 obj <<
/Type /Page
@@ -8587,110 +8603,96 @@ endobj
/Resources 1816 0 R
/MediaBox [0 0 595.2756 841.8898]
/Parent 1790 0 R
-/Annots [ 1820 0 R 1821 0 R 1822 0 R 1823 0 R 1824 0 R 1825 0 R 1826 0 R 1827 0 R 1828 0 R 1829 0 R 1830 0 R 1831 0 R 1832 0 R 1833 0 R 1834 0 R ]
+/Annots [ 1820 0 R 1821 0 R 1822 0 R 1823 0 R 1824 0 R 1825 0 R 1826 0 R 1827 0 R 1828 0 R 1829 0 R 1830 0 R 1831 0 R 1832 0 R ]
>> endobj
1820 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [307.1508 737.8483 375.8228 749.9079]
+/Rect [307.1508 737.5313 375.8228 749.5909]
/Subtype /Link
/A << /S /GoTo /D (zone_transfers) >>
>> endobj
1821 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [334.8268 707.9148 403.4988 719.9744]
+/Rect [334.8268 707.2808 403.4988 719.3404]
/Subtype /Link
/A << /S /GoTo /D (zone_transfers) >>
>> endobj
1822 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [337.0185 677.9813 405.6905 690.0409]
+/Rect [337.0185 677.0302 405.6905 689.0899]
/Subtype /Link
/A << /S /GoTo /D (zone_transfers) >>
>> endobj
1823 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [364.6945 648.0478 433.3665 660.1074]
+/Rect [364.6945 646.7797 433.3665 658.8394]
/Subtype /Link
/A << /S /GoTo /D (zone_transfers) >>
>> endobj
1824 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [374.6372 618.1143 443.3092 630.1739]
+/Rect [374.6372 616.5292 443.3092 628.5889]
/Subtype /Link
/A << /S /GoTo /D (zone_transfers) >>
>> endobj
1825 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [292.0276 588.1808 360.6996 600.2404]
+/Rect [292.0276 586.2787 360.6996 598.3384]
/Subtype /Link
/A << /S /GoTo /D (zone_transfers) >>
>> endobj
1826 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [319.7036 558.2473 388.3756 570.3069]
+/Rect [319.7036 556.0282 388.3756 568.0879]
/Subtype /Link
/A << /S /GoTo /D (zone_transfers) >>
>> endobj
1827 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [460.1655 528.3138 533.2211 540.3734]
+/Rect [460.1655 525.7777 533.2211 537.8373]
/Subtype /Link
/A << /S /GoTo /D (tuning) >>
>> endobj
1828 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [368.9978 498.3803 438.8121 510.4399]
+/Rect [368.9978 495.5272 438.8121 507.5868]
/Subtype /Link
/A << /S /GoTo /D (boolean_options) >>
>> endobj
1829 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [293.1435 456.4916 354.3435 468.5513]
+/Rect [293.1435 453.3215 354.3435 465.3812]
/Subtype /Link
/A << /S /GoTo /D (options) >>
>> endobj
1830 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [329.3035 354.7359 407.7186 366.7956]
+/Rect [329.3035 350.6148 407.7186 362.6745]
/Subtype /Link
/A << /S /GoTo /D (man.dnssec-keygen) >>
>> endobj
1831 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [427.0093 354.7359 505.4243 366.7956]
+/Rect [427.0093 350.6148 505.4243 362.6745]
/Subtype /Link
/A << /S /GoTo /D (man.dnssec-settime) >>
>> endobj
1832 0 obj <<
/Type /Annot
/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [288.6803 121.3823 357.3523 133.4419]
-/Subtype /Link
-/A << /S /GoTo /D (boolean_options) >>
->> endobj
-1833 0 obj <<
-/Type /Annot
-/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [328.5503 91.4488 402.2036 103.5084]
-/Subtype /Link
-/A << /S /GoTo /D (tuning) >>
->> endobj
-1834 0 obj <<
-/Type /Annot
-/Border[0 0 0]/H/I/C[1 0 0]
-/Rect [403.748 61.5153 472.42 73.5749]
+/Rect [288.6803 61.5153 357.3523 73.5749]
/Subtype /Link
/A << /S /GoTo /D (boolean_options) >>
>> endobj
@@ -8701,85 +8703,93 @@ endobj
/Font << /F37 962 0 R /F21 874 0 R /F22 897 0 R /F48 1153 0 R /F55 1237 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1837 0 obj <<
-/Length 3651
+1835 0 obj <<
+/Length 3449
/Filter /FlateDecode
>>
stream
-xÚµ]sܶñ]¿BÓ—žft4A€
-ØŸ0†#^¾þÛ%õ^½»øþû‹wg¿^}{ryî2¼¯ˆ%^ä·“ŸOWpíoOâHf6=½‡A‰,KN×'*•Qª¤ôêäýÉßÂÁ¬Û:Å¿TÚ(µ‰™``"¦˜f‘–‰t Ä;'6RÀ‚8Žg_?Ôùº\Ò%ܬò® þMU.Ë¢ÅÞd€7>'*Ê”P#s_iÇ}hÚÝfÓl»G鬻oœW]±­ó®¼+°.ºÛfÕÒ ¹¦öf›×]y&fõ –UYÔ¯ênyï¶¼¹íÖÐA›b{Ýl×\…{Á`çîÕ—9x3¼‹Q–¦‰»ËïM]œ–MýK'7»í™°³bEÐŵHqfÈqëHèØZÄ–WUs?§Ó'ø¨“ÈÆJøÅõj
-cÉÔ(^C¨æ|›‡)Œi”©yu³éʦæëÐ-ÚM±Ä¨΄³Èñ
-b$ôÓ¯b#­“ôébk»ÿ.`èAQQÀ4¬‰xžA]¨‹9°±¬Q*Ò¹5ME€žƒ6ßßæÁ‚ò9üC”î°b•drvAÛ‚÷!·°ÝžÙÙ®*ú'2lôD%Rœ¥³vv£X–Hk±:'™¹¿-ü¡¸¦È—·ØS1ƒËîÖÑ^TÞ0lUÔeÁ°^Zš¼¦U°º.â=ŠïÍ8œð
-Þx ÷¬.9õ«÷¯_±Šl©
-à‹uæ#çk³Ù{GhéBlT¤Td@Ÿã¬°ƒ+ÃÀ5a»¡aC„ïŽC;e L%JyID¿·š M:=òæÐ)`½)@ É7õ‡²‹€œÈ1Pü¡xàeÎ BgSåKOw7I?
-IQ>…¾2‰”#;â&aƒ ‘b<AAäö G‡§IXÕG‚ÂûÁ‘Ü\
-鼿W^×ù®r–-MúÕDõKf­ ˆŒ@$^@žÝåÛgÛ]ýÌñø3'BÒù-Ò4RÂ$¼÷¼§ÔñBI=96TîŽRøXU
-G–ƒü²êÄn¾ZÕ-ŽŠì…è‘äÕM³uXÓÐcúæû‹ó÷ß\$©Æ -ѳŮ 8\Î
-¡Xæm2‹âÔ[Yæá¨æ×˜0òn­#QB‚lÅJÇÇC„6ŽRКÏÈ8­S4fQ¯‚3´G’A §|.”X­ô8
-…¬>[Êè.+ê“”A§n¨½ÞmY(¬í«3´¶Ò3Ÿf`}GK¿ è ˜Î8·ƒ[ðP×ãx9ó©ÉÄ}h§³»¾Ò¡ì°
-¬É „àÔ…i
-=HF¹&Í/·k»Á>Z³š~3pG{² EÓ„€e9§E½$;HNCHVËÀ ¯ ¼i¶ë¼â/ç´Ý:’1V—Ñ!×{Sœ¼ ÎÕ÷&Ôš2ˆ¯ x[Q½ ’EÑ™ƒÐ—ƒ,¸OìÜ'0.® åærŽÙ¾»üõŠ>’‘3ÃxÄÃ<·IÄû@»äðÓÉhÛÛ¼W $´à…ÝùQ-—j(8rŸ0TÜOЪ!ZÞÞò 9ì¡d zy»‡î§ãU¸¶¢ðáÚÁ*Ø»¤‹w9ŽN<£ç¯“(ÍŒOؤ$©„p·mFp2«‹›¦+½#CmtŸ ©OTaoÁ¹÷«÷ïç(_œHûò tA ,[¶›É,g„C¥“Ä7Jéå§éhY:û®Ø.¨Õ´O_/ËM^Ñ>Z¤ýʘ¸Ø¹÷[ç>µ·£8&ÒYøzø'¸ìö¯ïE«f—õŸ¦Rú2ÑLê; ‹¼'äТ*H ¥ON;±Ã:£•_lpßZz[Ãu))«ÌXʹD»gh,ùÅɲ.²iñOÈL¹^Ûðë7ï§Qi²M^·\Ï`?oáða»Yã“0
-œJ,­Š’$ÄGŠmø­s\Êðg5A ’ü'£bã5U W&²IlžLÔ´ÑÕÔç`ÁòÈÑÄDx¹/¿Ø§íÌcÜž+“€…0z¬1_bqF•Ü϶8ŸÀ÷);#"ótâI³žòL&YOù*_û4ëCQkÂ8+Hµ¬'¿øè~IV½§áÐÞïõäl
-kèø!2­<á{RÙÈÄfï{l—'ëLl…ŽR@ûbÀÅ]¿cŒj.5Ï öˆ•
-?ñP( )9ØF!T¤•™HðýY"½_~Ì—ÝœX‰_~‹5þLo‰õ-m!py!΄X ¡lªëHÃäßÏE¨]úÆŒêÇäLéó @Úõ%Ûºã î¹¶C•ÀÁIï§¹ ˆ;‚æéCéRø©_ƒòÞáËž…HÆÖþ_¤‚‘ˆ<.-YŒ?ø³Ÿô„c‰¹âú¿–ŰŽ%|¡oø±Ôa½ˆ¡ˆ™G›Sã(šOW}0Ü\Ÿƒ¡ñ9ÿùÖF±
-?øŸÈÏàe¾ì±U ¯—h‹é bêÅðÇ|ûâŸ/÷¿íC,­Mú_&>üÇÌtfNeêQdJ–î³#üΙW Hÿ/Ãçþ)endstream
+xÚ¥]sã¶ñݿ“—Ê3Ž ì½Ô¹ø.N_j;“é$y EZb"u"eÇiûß»‹]€¤DÙ×ÉÜø‹Åîb¿)yÀ?yj”¢4>Õi,T Õéb}œ.aíÉd˜¹š¡¾¾;yó>Ò§©H“09½{à2"0FžÞå¿ÌÞ}{ñãÝåÍÙ<TÁ,gs•³¯¯®¿¡™”ï>^¿¿úðÓÍÅ™ŽgwW¯iúæòýåÍåõ»Ë³¹4JÂþ1Ùðþêï—4úpsñÃ7g¿Ý}wryçyò+ƒù|òËoÁilwˆ(5êô ^!Ó4<]ŸÄ**Ž"7SÜžüÃ#¬Ú­Sò‹•*Œ“Ó9
+ßX‰íEÏ ê¨L„TûÅa*”zí<Ô+„bCJľ³Ré :JÂW4o
+G±CÌÓe·²´Ã‚Sœox./ê²à¹^ZZ| (€® šq½ qï›qXå©{>Ÿ¤”Où$ër´fä8@äÚ ‘Ãl $veT¢æ§áìêH§`ÐûDxñZ ˆÍç]Ñv´d¶ÙÒ!néÙ–K{ó¸ã×@½b‚@'câYé&êEµË Þèe ÷¼.ÝßÝíÕ6‘-=aà?9eP8¾g2,€ç±±ùeK>£_dlo÷>oéðRkÔÆ £»±
+QO÷Œ/èNYÛp"!;Nô±ð !‹Hbýåfªcé|ítÿ€¼÷ëZÚ°±ODÓºz¦éu‘Õe½|ØUôNºŠ 6ë'pÄmÕ&‘³ŸWEM¶&µ
+=TŸ Jw$gróHF6j~ýLÓyñí*ëÙTØCq4.Y´ñHA4T2t
+òæ1Û¾Ùîê7VÆoX8I›¨ž•±Ô!ï=ï)µ²ˆ#,Ç’°<FÒ媑´dÙ™_AW­ÚÍs(áñæ­ðp@™½”=’¬Z6[0‡5½:Lßþpñn~ûíE¨LÚÂdv¿ë<[3Àð1«vïðÁÑüÿ}UL¥Pl‚Gë¶(r^–e8ªù6&„
++'ÈC”±Hœ@iå8Ñ] „«ù‚Z0>Ä b¢1½ RÎÐ)1rµ Pb’x¯Ää\+®–hl]D]“ÑŠœ<9:(rI4lŸ!×XÛ$Ñe,0Ë·£lC>¼ÙlKÎJGi¶Ý a({vg#ýYîN̘&o=ˆÓc‹GÙDöIf+ßHÀ@H#oÐØq “3›'Ûl)Hmض hæi÷·äºíø©¬*Ý3R[í ÏvŽ&ölÁè€ÂÅ*«—|
+{•ý;òæÊû`ÔS84gÖekÙ£VÄTK±GÆDL¶:®TXé«Á²S›§ÁœóL¥o‰ã*–ÖÖŽ ƒö: †Šœ«ë›y[TS>QŠ(”¾g=‰+„rL9¤kâ£È´±¼$ÈUóT<œ#½P×yæ³=_ØJf5$$Öyâêzp•‰²ûÝÕZD‘LÆ—Ù(7¥ùævm7¸Ã›V/]ÌÝ”n§CÕ4%`]Ψ×dkà0“Ñ+d$ùÂËÂ§×ø)¸âOç´ã:’16—Ñ!{K\½ Î5øŽ%e˜`Aö–Ó£ ’E陡O©Ÿ8„Ot<à\lGË®eœ´}ùO¿»T
+߬Æ#î1ϳ›d°O<œº#m»ÊzÃ@B ìÎZyu
+µE÷¡¸8Ù×E1Ýÿ JSnØ64ùÍõí4ª´l“Õ-÷ÄSØÏ[8}ænF»* ¦ÁËS”øSÖ»ª+7tøMeB»ï&e i´L|öáª@DRw4ð[æbyF›Î?ï²jñIIúRózìhÛrSïÑG4ºôdª×¤ÀÐ÷ç>mïÕѸ ÝWBç¸9 ë™¯Ûcˆb)LÉ/ED4íî™õ‰¾
+T\&t¼¢Tõí•qg-iȉ/àÕJDÚ_ò´‘I-âÄÿÊê%E
endobj
-1836 0 obj <<
+1834 0 obj <<
/Type /Page
-/Contents 1837 0 R
-/Resources 1835 0 R
+/Contents 1835 0 R
+/Resources 1833 0 R
/MediaBox [0 0 595.2756 841.8898]
/Parent 1790 0 R
+/Annots [ 1837 0 R 1838 0 R ]
+>> endobj
+1837 0 obj <<
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [356.8967 736.8562 430.5501 748.9158]
+/Subtype /Link
+/A << /S /GoTo /D (tuning) >>
>> endobj
1838 0 obj <<
-/D [1836 0 R /XYZ 85.0394 794.5015 null]
+/Type /Annot
+/Border[0 0 0]/H/I/C[1 0 0]
+/Rect [432.0945 705.9305 500.7665 717.9902]
+/Subtype /Link
+/A << /S /GoTo /D (boolean_options) >>
+>> endobj
+1836 0 obj <<
+/D [1834 0 R /XYZ 85.0394 794.5015 null]
>> endobj
550 0 obj <<
-/D [1836 0 R /XYZ 85.0394 769.5949 null]
+/D [1834 0 R /XYZ 85.0394 689.3081 null]
>> endobj
1243 0 obj <<
-/D [1836 0 R /XYZ 85.0394 749.9737 null]
->> endobj
-1839 0 obj <<
-/D [1836 0 R /XYZ 85.0394 135.3684 null]
+/D [1834 0 R /XYZ 85.0394 663.0018 null]
>> endobj
-1840 0 obj <<
-/D [1836 0 R /XYZ 85.0394 123.4132 null]
->> endobj
-1835 0 obj <<
+1833 0 obj <<
/Font << /F37 962 0 R /F21 874 0 R /F22 897 0 R /F41 1134 0 R /F53 1229 0 R /F48 1153 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
-1843 0 obj <<
-/Length 2601
+1841 0 obj <<
+/Length 2973
/Filter /FlateDecode
>>
stream
-xÚÕZKsÛȾëWð™ZŽçý¸EkËŽ6kÙÑ*µÇ„LÄ$Á% i_ŸîéR DErjSªÒ fóèþ¾îžŀßËlaà‚f† 3˜.Oøà ô½;IfÜ»R?^¼z«Ü °`¥\]wÆòŒ{/W³OCË$Á|øúÃÅÛówÿ¸<9=¼:ÿp1KÇoÏ>£Ú»ËÓ÷ïO/Gcá¾þëéÇ«³Kê²iŒÏ/ÞPK âÀ —goÏ.Ï.^Ÿ>_ýtrvÕ_Ánä·“OŸù`Ûþé„3¼ÜÁg"9Xžh£˜ÑJ5-‹“_NþÞØé¯öéOsÁ„4j0ñÖž—æà0oªzŬ·ûÓŽ F£X¯™ÚµFÑ¢c! ÓÞ œ Ì*©¢Qþ]®òêf‚ÊyõVÊŽ¸ã,H… @¹«yQÆ¿ùáÍ"§‡¦±*–Å"ÛàƒÖej¼™ÌÊeV¬~
-¶–ù`U’®j^櫚æÊÖë<ÛT
-Ãl•ÆÈWÙdAs´zØ×ØM#Hm¢Ž±Ì¨€M®f
-XåôÒŠz^ÞÔä:–嬸'çršÕE¹b»%mÿ‘‰Âu4ÖZ‚àCÓ™ýÐH&ì€è²3€CåÍæ£îïYZ.$ÉàÚòÅlw¢rYÔ@
-Ü;Ô óÖ˜' Ù¼qØ—ÁàZƒäƒ¾Ì:Ãx‘d¼ÅlšmfG8³> HX®þ8f\ ºÖÊzò6P‚›ùW>E[GŒƒÆ7¿P%-’([òß×Ùª„!Ó‚‹L‹ÕŽaÝ.B gJË-ΔV­÷Œ=É_êÆ_êÖ_êè/£³„Æ­³ìH$· ’Yâo³E‘ ×.<!ïz‹ïXénõ<v ý<ðlñØ
-(_q{
-dã¾È›ob*)t¼ÓQ¢ŸQÈÏKêîd¢¹æv5ø7V XLïÜ{Ó`ºéD ìc¥|³¥ÒL9JøT“'Ïè!ÊpÄ+ ååŸhæõ"›âåÈçq›”!>}zÕ+Ôæ‡XÓ…ãó þ]Y'Wx›?ˆ5,ÁHiÖ´Wr êÈÔÁÛ¯H%y¬Ðáeƒ3¨¦û2Žti˜!é¶3ÝÄõਇ/Ò†_ð‰Î×Pi—[K*²`½z6HçuRL‹Óa-
-¤]a5Îb\òù~Ël¤¼Òï%»&²§gþöžà{²§ Ë—eOxQö(ǬÐþaö(i¿”„•¯›‰yJÔƒj'=‰O‰<±ž¥òoùfBG´²éjqŸ¶ ê±)òigÌWé.}¼TD¬lI‰'wŠ<XMXC‘ælo
-"¬¯C,x¢sÍ0ô’zºQÇ7QÇw£áË›uo8m¨åúIcSÈA†4éËIûnC›HcwCÎo;—kß•44þCŽtŽyጠLj+;œybÌùÿ'Žhnû_$!_¤”NÙ›ªaw'ôÈ”ªÉî*ºC¤ÐÓ³»³ˆtéªÑö²Ž“)q6 ¦ÄMÒ5>7,ê#KºàØ DüË¢<_ŠDB˜¹±O3½òÀ—¡<³Jé‡yùÓŽÓJ=]zN>xÝ$&ñBÚ§+6ϳۜj“œ®¹!ˆŸñ°í¶È¨rõú#U¢ûG¡ÈlIŸe±zàž{ç³ãX*ÄïzM¨†‡kbí’žÿ«¢.²º;ÿHe6› ªŠŠUdÀö]½èÍ)Oß¼¹d§—GAOÓ…Ë*aóü£ívéo1«u6Íœ#â÷
-[žXVë’nzRñøÅÞy"V*ÀwQ‚ÇfxßÉu
-$è2{ÿg>|ÐPðÙ?*ÚþâJÃAÆ{ÙÅ÷ë`ÅÃ
-¼µRÄý`ïýæ ?(+[±Îâÿ
+xÚÝZKsÛȾëWð•ZŽçýÈ)Z[v´YËŽV©=8>@$d!& . Yv~}º§ @‚[òf+¥*Í=3=_?9bÀáO Œe6È0pA3Ã…Œg'|ðÆ^ˆ4gTOµgýx}òì¥rƒÀ‚•vp}Û¢å÷^ ®'Iv
+øðù›Ë—¯þyuvêôðúâÍåéH>|yñó9Õ^]½~}vu:Þˆáó¿½½>¿¢!›hüxqù‚z;ˆ^¿<¿:¿|~~úþú§“óëæ,íó
+®ð ¿¼{Ï8öO'œ©àÍàœ‰ä`v¢bF+U÷LO~9ùGC°5?íåŸàL*+{(eM`VIx}—ã!ž½4ª5UxfÇpÎ<›åÕ—E𨡩sBÙ4ñ_œË|:>¼ËVTŠÊOÙô>_ý…¨hÑ¢â5“R™Ör=KIÅò”&ýÐC¯êM¯îo&å,+æ=¤€©€¢£I=ÓÉ8[NúÎܽ©|z»óhúk¨Àñú¶#˜×ͼ£áá°Ë3ÚqºÃÜi'™–ÎFB°`ŒŒSg«]$9gðBuv·^1ëA‚ޤ‡ÛCÍ æŽß\5^ì<æ—Тd«Rû%tHý§œçÇA,*Äl>é¡(5SÊ×ÛÏ?WùržMwž³Ö"lS«
+˜€§à&¥W•öÌq·¡W¿í«z#|0ªµÐÎÐwh¥jýE—Ô¨9ÔÈAÍëÐ(í…0L4°÷û4¤ã,HU£øüs6®F³¬ߎ”S í³l^ãX;ë9¨þbE#ËS?¼ŸæÔˆ_äiäá.ŸcM«»4^/ŽÜhKëM^Ì?Ê'ÔÀEb9Équ
+®6$ªPfTÀ!瀉ðÃIÿ
+vm"#“öª-Àëæß ¶º •³¢Ø£ËZJâqŠg­Ë”aÞš¯!Y±S—ƒÆFæ½
+‡b¹M]ÖëxÀnµ8äw êl0×\€²ž” ” eþQŒ­#ƒÎ—¿P%m’$ öäŸÙ|
+r ïcþ…zù²SIxMªÏ×(7-"–éŽÒœ»T!²0;¦;Cé&¼jÑnOêQR)jQvXkXRõ&uÝ/ /J
+0_q»+O*$ãžû#.”ˆ­%ã0„uÒš«E>Ž®DŒšTÕö}p¹Å‹dN+éý¹÷ÊM`Ühô]8‰%AÊð,)ãlUåËbõúDò¶ü”q¶Êwëå¶Æ{*7á;ÍT® ü@È£櫤<cí ™mÇ£ ú³ y°ÀÞsŸ1h”ÄàÑkšL…H² ‘z¸¤¥ËÛžÕ„ðÈþ¯U$1ã8ÓUÊÞÜäŒÏ¤´®àœ^Ñ
+­—Ò¬¥‡’è}PQ¼í•ñäIAÙ@ýPÇÁ}*κ•H3Bkå|ú%-ÚMé ‘šgTW‹ïÁj}49(­x* €&tÎ|Mj¾ð»¢œ»«Õ 
+°¡Òl!ö–TÖ‚õ– èYŒv¿½(úÅ)Z‹Ò©°J?í¸¤óýZz°“K¿áíš(== nßUzZ°|ZéyR›#0p¿_z8x
endobj
-1842 0 obj <<
+1840 0 obj <<
/Type /Page
-/Contents 1843 0 R
-/Resources 1841 0 R
+/Contents 1841 0 R
+/Resources 1839 0 R
/MediaBox [0 0 595.2756 841.8898]
/Parent 1790 0 R
>> endobj
+1842 0 obj <<
+/D [1840 0 R /XYZ 56.6929 794.5015 null]
+>> endobj
+1843 0 obj <<
+/D [1840 0 R /XYZ 56.6929 746.113 null]
+>> endobj
1844 0 obj <<
-/D [1842 0 R /XYZ 56.6929 794.5015 null]
+/D [1840 0 R /XYZ 56.6929 734.1579 null]
>> endobj
-1841 0 obj <<
-/Font << /F37 962 0 R /F41 1134 0 R /F22 897 0 R /F21 874 0 R /F53 1229 0 R /F62 1277 0 R >>
+1839 0 obj <<
+/Font << /F37 962 0 R /F22 897 0 R /F53 1229 0 R /F41 1134 0 R /F21 874 0 R /F62 1277 0 R >>
/XObject << /Im2 1266 0 R >>
/ProcSet [ /PDF /Text ]
>> endobj
@@ -12769,7 +12779,7 @@ endobj
stream
xÚíte\Ôí¶6Ò ˆtÃÐÝÝÝÝ¡Ä0 00Ì ÝÝÝÝ’‚R"‚´t ÒÈ‹>ïÞûüž³?³?½¿w¾Ìÿ^×Z׺î7¶‡Œ5Ü
¬‡¹rðpr‹ t´P(ÐWç…C­fL9g0ЇÉ]Á¢
-Äü{fXE
+Äü{fXE
0Üú÷äè¹aÖÃöOÃoäæìüØã?ûÿxýœÿŒ=ì a.ÌÁAb¡ö™9Y® Ä£ò/z{xœ*Þè—ÖÁ»2#×Dj,ïêÃ8›ÇEµyÍî;Ýoª²n öA™ºÓÁß‹(üèX>ã.3v±ms™W`gÅúϨ¯"›
rn­êèš—ß¡RŽwð9£_²Ò¹Ð_8=óe4%v>oFÀk(Ù?`LÙ½¼`êú4ð±ûåÃ&9[~ƒ˜;26cLà«|r)Sƒj…×Íl(ßÛ
b¬Å7ÎßÊçÏVð™h9Žù,¢I‚°RÊ• e®äß·RÆ%=²ìÙ êt›œ(†Ì%³LÇî)®Ž>1Ù¥‘„µ…^Ñ2¼éˆO£Ý %õ‰>•pjÕr{2–ÂwÍ<–g¬™-j—!3cäáakIè,AŒ$ÁLˆÇÆ‹J¯³nöùU»Ïm›Þ‰D3
@@ -12792,7 +12802,7 @@ $OíœàÅ€DÈ
t‡Í=žÝbóÆÃwî6ß"£“˵?”JËOP2RÐ oQo+†â1)©w†¦ÜèådîI½ÈZ¿VÍ­(e÷åû È"QÔüFØs(úF$'‘qL ®/¶!õÔ ¤HvkÖ‰Œh¼È‰¬ê؉á¶o?Ùa:Šÿ±qêcŒ° gã!_QÇ~ÏWê¡1üaœ¯UÝGmã§Yñmn%ìRãr9÷¬ß0qˆ5†/‚E…(êÚ“†,W‚˜$Ù½ï¶åçLxËÎÔ|ú奕£w†Z|ÂV€ãž÷,éOd
ÞyŠGÝ ŽÎ¨Ý3lÍ4©¿Î\×T2Zª½Ag—.7Ù#ÏPæï™v¼eŦQLÞ»±Oþ¼Ô\’ ¬ÿĵJÅñ¾(š3Ç].Å*,MÎ>ÛBx(ÃSÃó|D³uû‚Þ¡ï†{:Ò‘Á¨2G9¡Cê{É•<|?ÒK áéá@F)Ø,êw÷ó?È ¸¢Ëa„Çh%Ù±o^Œñ{‹6™Ý @¥-«ä%Å~jÉwXjz1îi´·î¬%uÕ3^¿±g¸`d+ÎK[ŽDe—„]âò†YèÖýÇ?Ï>£³HjË,èkѸÍhÔ8Š” ™v_Å [ªJÖ®²9m=·âú?\‹k>¼à¬‡¤*³Ñ³ž,Y ê<‹ý¹uÓ Z/ZV$S·é#ƒmNOš¨5M@¿§rãÝ0Hõ7¬&7[àçŽAØñêOõƧÈêÚ5±pE6~d»Ž^.x¨T1¬µ¤$£Í7¿ÿ4òÆêüj§‹G1¬èípoóÌ3³QýÐZ:œNÍÆéç,0½‹ЇZg‹ðâ£à)‹Q©¯³‹X""œÛÆ0ÏÁ¾äBvFA‚)Y9(ÎYÖý…ì¬S…|¸Ôü¾“qbæÇN.LÔX§…_ï‚¿œ%%½¥åŒìé|°D>W²7}C–Í#—ZR¸­$º`bÛGο…a¿9gÝS%\”Á/œîñhC|?s§ Ø…šg¯ÎÙÈ)ª¬m}ÐvÖËk†Ÿ.bÉ&O
üõí+uqfº`Îa‡„°£â,I§ã¯½/‘˜÷ÇÝ›Á¤'P6ߢH‚Ú?÷›½šÙ¹˜Žà9¦ŠmHr7:pMRYŸ#£ 'æW¥¿ðKCß|-¡mWÝ躖ná²¶Ë0–«ÞÐ3äÛÙ=j’¸Ë-,n–³e±€¢üb½iÙ;‘˜Hâ°l<)žL.ßÐYÖÿ°Ú·)wL=(‚Œ£± L|)=å'ÀÆ-Å@²öò¾µ<ÃNrä³6îµEôʃ3±d¶kÓ»¬ÿ‹%ôµøü·(kD~ô(¬_yñ‡Í; ¯åä²fùOî{&*‰äyÒ¯9ÛB±T¨d>è.<Sâ¢éX3p7«Á~ª"럽Ÿ“lË´ÍÔDQÿfŒ°Ì
-*s"}Y ;Ò‰¢ú{YÌÝÇí]p¶Òݯ€޶Xo³êÙ}
+*s"}Y ;Ò‰¢ú{YÌÝÇí]p¶Òݯ€޶Xo³êÙ}
endobj
1971 0 obj <<
/Type /Font
@@ -12801,14 +12811,14 @@ endobj
/FirstChar 67
/LastChar 85
/Widths 2615 0 R
-/BaseFont /NJWNZY+URWPalladioL-Bold-Slant_167
+/BaseFont /VLSIIH+URWPalladioL-Bold-Slant_167
/FontDescriptor 1969 0 R
>> endobj
1969 0 obj <<
/Ascent 708
/CapHeight 672
/Descent -266
-/FontName /NJWNZY+URWPalladioL-Bold-Slant_167
+/FontName /VLSIIH+URWPalladioL-Bold-Slant_167
/ItalicAngle -9
/StemV 123
/XHeight 471
@@ -12832,7 +12842,7 @@ xÚíVuTÔí¶VA!¤†n†n”.IéΆ˜f(‘N)én$†FJ Á!¤[:%•$.úÝï|g}÷üuÏùë®;kͬ߻Ÿ½Ÿýìø½
Òy¦§aáèha …«pJ핎 H
±@Bá0Y $D¤±ÉB¬@¼¼ 
µµC‚XnxXÙÙ9þ²ürYzý‰ÜD" ¶0Ó̓;Äîì!o(þ×ZiÙ@! u %5‹‚šHƒ¸Þ¡áf鵩@­ 0„dw9þq
-³rt³þ%àÆnÿ-ÈÙ~ãátƒÝiÀH„•+Ô ºÉª!+ÿ‡N¤òWnôÁmn<­áVn¿JúÝÐÜ H ( BB<‘¿rYB@ÖP„³£…×Mî2gWèon(Ìö/ Wˆ­…«µ#¸¡¹áþÕ¿êýSõÎÎŽ^¿£á¿½þ¡ŠD@m¸
+³rt³þ%àÆnÿ-ÈÙ~ãátƒÝiÀH„•+Ô ºÉª!+ÿ‡N¤òWnôÁmn<­áVn¿JúÝÐÜ H ( BB<‘¿rYB@ÖP„³£…×Mî2gWèon(Ìö/ Wˆ­…«µ#¸¡¹áþÕ¿êýSõÎÎŽ^¿£á¿½þ¡ŠD@m¸
ÿóü{é!Oˆ`zn%lŸš‘†¬"Ïéé—5úÐÁƒÑâ\\£ý:ß¿Þî—¾(Rf~QÂU;(zÕä5¾í|¹ªÌ¶ÖÛAæÈÜž ÙË£ò¡g}ŸO4ÏôNˆ}-lZŒŸöU/Ê{LeÓP[wm©_ó™iÑÅ=àà;>WìýSVz÷|R†g_«”·¯´ÖÞ"®*ØþÊ”°yzÂÜÕ÷±§»ýðîûUJöìW8Œbî˜øL‘þ.Ù”O uJåÊߪݎË;BbubÁï<_^Ë¿Å`i¢KÙÅy¨yc@–‰Ÿ'\;ø$·®Q;S-”âs/, 9D¦Ô#,9ƦïKv²±SÐúê¿»èçö‰%…÷²õ-âÁ]3ëãÝ“±Ñ][™CæºÊlëŠÑLü‹¦ëÀ¢€5‘ؽrô›ìç3üܰ˜üDÑSjÛðôä)Wï8Ž*öÜŸèž“3@'}~+ÏÝ6‘žˆ•Ø\Žpµ<züuÚ>AbåPóبLbZ÷a3ÒYÍEœVÁ= ¾‹­{·^®2<¿}5aq€©ÿ_5¹Ûðòµ÷>›À¥´ê$C}ÀXй­œÕ÷ji—û­€G‡/§Œdû-!j¹;Ë6#ÔÜŠ.Oé­×ôÎc´¼$z¾I(ñØÇ/ Wj®½"¹ßKÒÿ¾ð{Lš¿ÞH¥hԻí:iÓFRF<g] Û39}—ÞÞF™8|à0­‰å
b݇a›yKÜ£%t×TcaÖËF˨?B:äÐ 3ÚZP ‚ÌÆŠ} fñφôˆƒTU‡J鉽žj:»«Ï‹ºôN)/ÂÕ äE½¬^gº‹ ^/«k¯&6Ö7%³"”-ήQËòÍ“ ñÆ‘r¾“'#
ñÀèHvo»Vüy½¼Òç³³”ÎjÁÕŸ,_Âh^§–p³/â#Ó„HÊÀç„»ûÄŒ[‡¤Ê»B8Ò¬’%PË ™#¹&}Ô7uo(à–îu•úµÒ95ÀŒ¾?ËêcÕ8—ÄñâθÑ,™ê:f”†.‡Ðà¡ÝõÁ41hÀ›3):«;Ícƒ·ú‘¶Þ,èðY½:Nç5u…QEð ‰rŸ–²ÌûŠ!&.ÜYâü×É ú;á$¤`×yme~b©@{•3*¹
@@ -12850,7 +12860,7 @@ d ¯òˆ¦:ôw
ÕB¾ª\h~8©$‰¼¼·ý˜7!g;É¥ƒ\®cf>}7›ùâžÐÙZسãÁÖ–Ü^-Už&(
ÖËÓ»ÜIFÙØS­˜õOV_ºhýÐn-®
X{$¢½‰¼û£@–rlZ™âɞˊ1o(­¶¨mèö¡Ðé»÷ÝõäIŒ]Œ_-ô‹ ¸Þû ò'zŸT¶n76Gت–·& úìIĆ‹7ÎÔ‰‰f¾<B‡›&ª½úŒ×ž´)„Æc+¤ œ?µÆ(_¹à™ñ0áNZ¬/ˆ_c24íŒË¢—'{.ö¥dÖî§Çz̓¯ÛKÃ{u`‡:s±¹ Á<º'—0— HMq±LåRnC@x›ôs̈W6ß>uä3¾õˆ;)EO4,Źk&l‰#õ޾„˜¬Ù¶³ ½höâiF] ‹œx'´ÅfÊb\ñê{Ý?¬¹¶=ê3¤XTÕW©*®§‰\Ee¶©x‘@†Dz:ƒ!¡X¾ÂK ”G½èß>c{BŒÍCŒ±¹0šUÕ¼ƒ¿ªÝ•5xfœéÉU“Nhèòã»Z–$8û훎·òБÞåú¸;ß¾2~%~QÍ÷*|6οÀ.©ó¶H&l]ážçµÐ[èù%¥κƬ!ÙrOxÆ!.B˜“zuW,Ôêr‹9å™ÊT°CHÖ‘_e‘‰ÿð:û5r€û3.ñ4v—W”ò]ª[)ïó–äÙÀ—݈H¾ÌûùSޏ+¹ºfS4çHõ¿ÞzyàÂ*/ç%Šâ׻͠Ï8ôæãmº'7…\ì°Å÷K)8ÐÁ@£bÅî\ç±ÄÝÊ‚×[g“©»5é«ÅÖ¡’'¯ÔíÌ¥ºégˆ<‚â¢Ï8TŠqùœ_U å=¢¦#fœÞ*ª6í¶²*æ›\oi›–•`ûlj[ÛW*ˆ»ºœ2Ž(ËtŒp{ˆ¥6Í]š†}„¯>{?'CÆà§5zíEëÝÚÓÞ&vø¾öŠ ÷dYcØL‰8àÇÉu°à•GËÝšÎñtûëV²­ˆ’eÓëû­&KÅàჃ‘oS*.m•»8ÕîŒWQì3ÊDÌûj OpHY²ï®f>×¼ù‰_ôŸö‘Ƥ‰´»ø|EÀ’=PzêîXDƒ%½+C£ˆ1_ù¶‡=AýYœ:&Aaú;æ¬U¾öÝ*“ÍXJ·=à²ùˆ1¦¬ý<ð»©,|# O'Cƒµë“M]í¼æf°ºÜS4‡AÇ÷Mj€“Ò·ÐökxõÊáž™ËG‡ÞÕéú,óÔ92‚¬ ߸gp0o9)ÁM£«&ChVF=Vv¯ñõ­Åž¡üÜÈT·Žïvä(Ê´ãé¿7jzä­ ¾¹Â6]E³ÚŸÉÞeIGOIùç…&˜+ÊZ Sl©
-Í`ƒ©c½G¯Lsé:JθÿÍàÿ þOX9B,\‘p' WÀ4ƒy•endstream
+Í`ƒ©c½G¯Lsé:JθÿÍàÿ þOX9B,\‘p' WÀ»y­endstream
endobj
1952 0 obj <<
/Type /Font
@@ -12859,14 +12869,14 @@ endobj
/FirstChar 66
/LastChar 78
/Widths 2616 0 R
-/BaseFont /VIQCFC+URWPalladioL-BoldItal
+/BaseFont /EBTYIW+URWPalladioL-BoldItal
/FontDescriptor 1950 0 R
>> endobj
1950 0 obj <<
/Ascent 728
/CapHeight 669
/Descent -256
-/FontName /VIQCFC+URWPalladioL-BoldItal
+/FontName /EBTYIW+URWPalladioL-BoldItal
/ItalicAngle -9.9
/StemV 114
/XHeight 469
@@ -12886,12 +12896,11 @@ endobj
/Filter /FlateDecode
>>
stream
-xÚíRkTSW‘ª¡¬òRIÕzX%2yj   b,šð~H̽!·$÷ÒË $ âƒJª²,b£Kž¢¢TXU꥖X…)à‹´Š0Àr¤jU|Íëê*ý9ókÖœóçìogïï|gÓ<"e „m„C1”`p˜!–J%6 Ïl6…F Æa`hˆ‚€…€#ø€Õ: à®
-kR“Ua€ÿ†téïR™0žAŠ^S2é€ a¨Æ
--¢1üÎÀ´é:ƃ`Nߊ“¢ÓNÏJ…QŠÐT œ•LöÊ·8’Šèa(!”j Rh2à)F¡éJHÿ¦t°bccããåÞ¿íT2R „Üö쩘óGLš„#zÀf²Ù’Hîw§¤iÍĨƒ4py>@ã
-…"2â# (ë¬'³˜(FW
-nä¹Ý<ú…§•K¹/×î+ÿ›4ÞûÛ&ËžD±ÞFw ý¸¿òÑ¿.µ˜p“CƒzSÎÊoy_®m¸PâZ[03ÉÒZµ¤i6Ö34ß#Àu¡ß\'Qâ ¨wY/v단Ïe»ð&Æúì~é7ôSI”¥qäˆÏ¢\û¡- Òv1È—}µ;Q›bèô­=iùqÞ²}<›±n_ÚñšˆšíZÃcÁœ½Çõ8våÙ瞊š~P•áE Î+bÓ³åô6Ú†+µ §¢È•)L<.ðlK+Š£ƒ'ƙܳŸlàù%¦¾î8²þPµq÷¦‡o­\´cEèÐß3  ¦‹?/É}³u´'Lçà,njO°¢÷Ž™ïü؇¶œ;ä¬óôýfi@ µîÂ?ÆV­cpUr#[ç]hÛ?Aƒš+µµn4Èmðr"ÕËên‘º~/yêŽZšÓMÛC ÚáW'«J¢Y¹ƒ=«NùxkÆ*…¨l©ä´f¹ÍŒ;3Çž”¸>Ã7¼Îo(ßÞ®ˆŒ­˜ð¿Û5¡Ës½2RØñË™R•ôM‚loÊ|U–Aß9/«©«tS¹>˜áµõÌ'Æ/¹_65n¶™‡¯•DBßÙªÛ·_w½í¨ål‰è¹ÏÆväÛ½ŸS¸šJý 5-­Óï¯ /ì;ºóRVÔ‡–»^Ñî¥â’×¶qÑuCí¶e‰‡¹B—Fec½iÏÅÊbÇ£5Áx©<_Ùv;yËêai]ÉÝ;8‡ÔÙÅ]s šg-ܹùg·ÇË2e_ÇœççgFŸ åõÎùÞsq‘š€’sN‰«¦Þ÷„g?üáè=ûÑ%ObΚ ^ ª{Ïø–K†¯tŠnµî¡ÕvišªK öHçÖ¸lx/Ìépûá5'ÿÝíÅí¼ÏÚÆ©Ëˆ—¯N-wûÖRÄ é6=
-kY“¡GZ°ǵ½.m̼<QiP×]#ê䆎ëey¿ Q²êD[Õþ9œ¨<V@Û,|±ÀnÖý®Æ}þ]J5`삸%éZÏ—£ëvò_Z“Xô¤"†‚XÕÍ›gÝø4+òp~µ¶Ÿý.Êÿ üOPj`N`ZžFù7ÎŒàendstream
+xÚíRiTSבª¡¬2©¤j=,Œy5„„1M˜d˜{CnIH@ÄJª²,b£KFQQ*¬*u@©%Váp"­"<`ù,Rµ*N½`]]¥?Û_o½sþœýíïìýïlšG¤Œ!‚° p(† “#ÁR©„Ãä™Í¦ÐhÁ8¬  Q°p°R§Üe€Íò– y|
+ ciIQÀ+˜>Aâ‘Æ¥R¡†µd ¥Bd˜ ˆ4°vâF:X §Ãx 1)€%6À)JaMh’ * ðßÀ.ím*ÆÓIQÀkR&"! Õ
+%ä†4°ÿ`OÆœ?bÒ$уx6“ÍæDr¿=%Ni&F•„ )€Ëó
+W(ä‘9
+Ã)ÿêÃ, œž>¾¸€•21{¤{Ø_Ÿ„éŒe\ÀàòÈVìå¾€Ïcgÿ‰¨Ôá8Œ“ãCô6V!¤§0¬‡•ë Lé·åã½§¶Uçˆ+;ŽÚÓÓç›oi;·õ¤Ù9Ôãçr oøAð«óVç‘cNÅÃ_± ¯—zJ”e1ÊX[»-Žnôò}²”C IÓ.•¶¶¼§=°ý®uá@Zƒ÷ƒ=ŸÞÉ8g_»ê‡_A.˜^}óÆËÇ9©Û{­_BžƒÅ”ÄÒÓ«öÀÑÿ½Sxeü~V‰Y«.ÍMØ÷Ôõ••Úr»+õ–£Y`*•Ú]7û¿˜Å¦ëU}íÎþÔ…ÖØÁJ™pæ|ŸkÑef`󾿇96 ©1BúËÌþNº ßÃün—$/»8<F52ïh¹‹²zžÆ?¬Šj ×µ¬kÖ òêÖ乤Öupý‹8i {hk“Ç^Ò~]´cú“ÄçÏ{ž½6Q›(6îǧÅxûîÌðò¢·±©öW?³xÄ)Ô_Ü%Dá=+L­Úöe5JA¬àz®Û#ŸyZ¹”{Â1íÞ²I×yÝhÙ ÖÛâ.¢öU<üùb³i?7)48¾'ùŒü¦÷¥šúó•!®5ùÓ-¡¡•‹gbÝýAs=\çûÍv% Èz§õB—¾ð¾úl– o|lÁ1¡Ï®~ƒ?GY†û,ȱÜ</u'ó¾|©Ñ÷»s5Ɇßš–ïç,٠ɳkö¦«Ž¨Þ¦5<ÌÚsTP÷cW–uö‰¨ñ;U)^j½"6>]Jo¥­¿\óˆp*Œ|^‘ÌÄãÏ4· 8:p|̘Á=óÑzž_BÊ«®€ÃkVwm|ðèæòÛ×S„}ÝýjšøÓâœ×[FºÃtÎâÆ¶x+z÷¨ùö÷½ˆ óÙƒÎ:Oÿد4SkÏÿgtÅ×Y%7²5qÞ¶}ã4¨©B[ãFƒÜ.)R¼¬î©ë·’')Í´-” zy¢²8š•3н⤱j´BˆÊKNi–ÚL»=}ôq±ûÀS|Ó«áüú²Pà­òÈu#åãþw:Çu¹®—‡ Ú:½Lª’¾Ž—íIž«Ê4è;æd6v–Ìs*Ó3¼¶œþÈø9÷‹S¦†M6sðÕ’HèÛ¶k®W£µœÍ1=÷Ù‘Øö<»w³ VR©Ÿ ¦Åµ£ú}µá%½Gv\ÌŒz?ßrÇ+Ú½D\üÊ6.ºv°Í¶4áWèÒ l¨3í¾PQäøa´&/‘ç)[o%m^9$­­?¾Ëa;ç :«¨sv~ÓŒù;6ýèöhI†¬üËuçøyÑgCy½³¾õ\X¨& ¤ìƒ…âª)wÅÝáYÏ¿{zÇ>ddÑã˜3æ‚üçêžÓ¾eE’¡Ë¢›-»i5šÆª’üÝÒÙÕ.ëß s:ÔvYxÕÉW[Qï“Ö1êâÅ«ø“Kݾ6$rBºLÚWeBèáf,ÄquOƒKk 37WTÔy}ç°:©¾ýZiîOh”¬ž:ÞZ¹o'*—Ð:_(°›qïƒ+qŸ~“\Åï=/nN¼ÚýùÈšüÖD=±¡ VtñæX7<ÉŒ<”WI­écÿÍEùÿ‰J ¬À L«ÀS)¿ÛlŒŸendstream
endobj
1399 0 obj <<
/Type /Font
@@ -12900,14 +12909,14 @@ endobj
/FirstChar 60
/LastChar 62
/Widths 2618 0 R
-/BaseFont /XXXZZT+CMMI10
+/BaseFont /TPDHKT+CMMI10
/FontDescriptor 1397 0 R
>> endobj
1397 0 obj <<
/Ascent 694
/CapHeight 683
/Descent -194
-/FontName /XXXZZT+CMMI10
+/FontName /TPDHKT+CMMI10
/ItalicAngle -14.04
/StemV 72
/XHeight 431
@@ -12927,26 +12936,24 @@ endobj
/Length1 1199
/Length2 2269
/Length3 544
-/Length 3059
+/Length 3057
/Filter /FlateDecode
>>
stream
-xÚíWi<”k2ed‰,ñe„Yì¦ìc¤Fc§2fžØaK¶"Š“­,m’%G¶J»-ÑbBdm(%ÑFY¢Sï£NõžÞ¾½ßÞßû<žû¾þ×õ¿®ë_÷‡GS@Ô·¡°@<‹ÉÕÇ ÑXÀ™ÀãIÌ­úÛ@Ï‘Kb
-~1Kf“Ê
-¨$Œ¥SAèæÂA€Ëæ±ÑÿüsÇ`
-Ì@t$?Ø!3Hýºw"qÙôHÀD£1
-ÙhVÄ—ÑÖþÉïÌâÒÉ €ø1F~hc44AÐóËñúþË!û9žÇ`|QñU
-XúÒ‡BŒ1?antr0äp CùLÊOIí™d…ΤD.4¢$6å»a &óØlH§/'Å~ÛSéP‰  ’á‚~yãÞ š½õógm”"ôŸÝ5l1qŸýÌS5‚§1„F‘ÂÍÎ
-Á§•Œ
-gÌròq„¶@ËjßåNË…’3•ìÓL#‚Ím+¥e’¤…7§(¾DžßäŒ]ýv¢k
-Ý¢˜u@!¯à…]Ô­ÍoÔ*f½5-í:¤‰É,Ùøuó>ÏÇÃ\`J*ÅU¢.ãý:ær ¯]63â\±°^~#”°/Ol˵K÷>hoñ»ôrN¦ªAÚ¿¯ÿ†­¸q|o²œ[ó6@Éû´)¶±ãšÁB`yuá,?´Øx‹áöÐ!½Î󞈴7 ¶ºGÖžå=©èµ§B½¹$¶¼äuSÙÃÂŽ‹:š˜gZ*÷›ö5‰K šDd¡5ûüAs™—‚cKò¼m,Îx“Í‚mÒ€˜wæ”ß)…c*ïó
-`a*ÖAjùíøÖŒV Î8‡ËDÊâkÅýV7ôŽw?™ôZç´ZsFôš7qí„:€©Í…MÅY:búà·*uÉaJI¥mcŸÚn$'šIöàù}°qŠz[Í…#M­GwM+4ìý$&ÓŸ2鮯ðsŸMôhNzußwü“R¦ç†—«MædÄ[Ê ­Ö‡9Ô^/™@V¯AŠVå{ç¢È}á¤äÂͪ1S[…g1“Ef‚·Û$"¡ÌÛDhý ì¦ðúpQ_ÿW;ÞYžèÆýa‚תpOÍ;xvÊqû‚sÙ¥‘¬ç{f†f¼¸(8Þì•©;5±×ïÖK>g°s¿À#<¿¶¾]5wþÜyƒMŸü½Œ¼^X]Î-±~ŠV¸Ñ9ŽŸº}üÎ
-¹± øÊŽu"%¥ “¹‹fœuŒ~­
-L"Ž
-ö>‰KÕž6jל,N¿_ pwy£‰ýœOXQÿ}ø“@…q°ŠØáb›á¯{ìl¥ÝRªwwu¿ÛÓpÿÚ(eƒwв9õú–rz‹]A+ Õ'ð¥t®{ŸS›à—ÿõdßãn®ÒƒÙ 8$ Ñ`ö›Ó Øéù4löS/mŸ÷q4¸çç>ÌÂäµ£AU¾ZyÄsq.óBÍš 2ðϱøZ¦ôûS©~%ÒÊýþ©æ4è`F
-G6ñU_84K±—O€Ñ-Û[Ï÷&Æú‘pú»Fݬ,o¶8v‹o½Ú4¬ßᔉÖ(´÷º(j
-H)‹’‡ùš«ýÌšËêfgQƒ35@eR×#|>Ò°Ýky@LHc¨ÕíU ³ÍvŽüÞÁêwhAåÂäµüµg¬Líór¥¬|…,RŸÏü³¡¾^ù¹òæ·ÍeGj‘M,+1.²Ëöíéù‡1Béª"”ð¢Œ
-vÿxñ ³Ð6‡u'o—ç¡KM‹ô]G®Û{÷Ä ä«à¦ Ïô·¶xݶ@œ†gä¹¶~lm¯]ÓóF ëÑRîr­-3ÝeÉù¨>Ÿ~ÆÒ:±ýå=œ ¹ÂG»cáMi’x¨y°pY#;Ñ|ÿªðÓû‘ôãI× ó:‚Š`3Ô€ÆÜjÇF™L§ Is]gê!áþË®9
+xÚíWi<”k2edÉ~YF3vÊ>H'ŒÆNeÌ<3†1Ã,ö¥ˆâd+K›dɱ¡²%ZLˆ¬¡T”D²D§ÞGê=½}{¿½¿÷y><÷}ý¯ë]×ÿ¾î’<§aN¤û€ÖtKDö”
+ ‚0t;
+™(C‹`J\ËQØ€4N\óÅ’ðVD
+k­m
+$@…iþJC=„ñKˆD¡¿´Gdj:Ó(AlÐów
+x¢(@­½ßWû Ã%ÒiÔ°îöø
+š èƒþåxýÿåýœÃšM¥~QñU
+á?¢ðjØ/â~vt¿^ˆ¿é~†¿²›ÓÈTÐ@k}5R˜Ö”Pˆ¥°¾_gç›ÜÄ/ÄÒ™”µ+…袜|)ÈdB‡òiÄŸ’ZÑt"…Fp,hDñ âwÃL`3N_N
+Šý¶'Q A0$À‡é„‡ýª7._2—Ñx~O»MÏyñ3[NžLåš@r·ÚKú—Hëä-dæ`°¾&•žëíÖs%¤I[%ë‡øZ4!7
+‹Ä sïJ”z…¼¼ÓÞhó»MˆžYT›Tú1ÉìÜ—–a·w½•/[tW2±ìÆ%ÐÅb¶.{¼˜
+r€IË–Tð:L ªНľqØEv4‚õsš1(¿Ø#Ù|»¯×Ýÿ ²Ûƒ¯îÕ’HE“°÷ÀàM ~ݘþ8«ú´{‰¾Qs×u­ßÒÒÊ%N`îní}£êÝ—]Éoc›-ÔN‰^b¿x%çv¨L¡µ0ª´ðMKñ£¼®ZU%ôseÙ«-GZø…‡›ZxÄ 5øüAi›¤m[²EFw§ùŠE6R —}ñ‚×É3²ï³saA²f~ò9Öí©íŠÌ«.Ñ6WpÄÕ7RGMoªŸí}:ã¶Õn³Òïuwœè´€®Ï‚ÍF›Ø¢à·ËÕAÒñE“Ÿ‡Uœð6vd½Œ‘ËG`‰üD…ŽêšS-í§Ãç$›âLœqGUð—yñ9/ƹ´Æ¿~à¹þI:Ëuû«ÍzÇ3ScLÄG7kÀlêoN#+·húòiWä¸gi6š‚ñ y7[å°|ú’Ï#gò] †ßí=£iØÁClb´7ózz¿Þ;or®󇞵r™sRö ßK³¶ûŽaí‹ëÆÓ_Zx˜ú²vøl«wXšÚìôa¯Û¯8Ì‘î£Ã.Á9õr‘˜ËU[$´v~òvÓq{iz%«ÐìJòf÷”õì³w7ˆOÖX—wmå),Š=žÀZ5ø£Š×6â|xqzøðcžè$•9=®N¥™‚”¹’÷Ö7ëY-y4ðåÞ=b}þ(9Vàº,R½¥aO<ýMUÚŠÔïí%uµ “Ñš—ËlÔ0Qè^íñÛ˜§ 5½zŒ#¤zýJ~1„Sú×Ó#§Ìu{YÒk0H2¢Éà7»›°’åd£Œgn*ï£Ép×Ïè%„Þ[­´féf™q×Õ¥´šê-5"!ð—/Œ¬ëiÂï/$y
+Ë þù§¼Ýˆ„m«Ÿj¤›éÜ®Û5¯:=2zÐöŽÏR_5ó“TÌF¤ }ÔŠÎ)Mzó>."ÖC`€ë•-
+pJ®Á›É¦8u¿GÇʺÃOï-F‹s†E²~{¶ñ¢öY)›4pš>t!ÉšêƒêðHËܯÂyŸ<hqd„÷~Ç«FÄ„Po’ì誼ÛQô3'QZÈÎiÒöBcì¤ú_z™§·ÄH¢…f-Âíï×™…œeé¨Èô“âJÕ‰Ûü2šö•…x%™ñGü¶#ÄÌE-‰>WÀÚ¥Ø)±!ïŠn¢ðšýÁ§†šÑŽ+ÏÍç VSøˆ «û½„ò-Œzú#¤â*si":ÀÛš^ ïíƒoúîH?JšÌ@õùí{Zq­ Ý W‘ä9ÕZKÇÝ8!s»XØXòÔNŽÜK›V!Æú³±0ŠIgûåþ¸(/<F#|ÂÉÔäV›m/ÿžk­~c}!vi(Å<“1~·Z^}@H†—0ÆQÚì­chÓ2¼®aqQsd¡(ï`¹/‡jwº­÷‰ l4½³ie±u:ÕÒ–Ó?R9.¯ÁÎ\Ͻhª÷øÀИ%dêÉeœøÐÿrÚŸMåðm2/dv½«5¯G¶ÐMùXÈ‹w%Ë"››¹RäxˆÁyÿ˜¼ào?õ±ö¸=×’Q&ýnv¸ë‰L%ãLÔ1ÅðS7¬Üûb†%*àú %[ÿ·‡Ü;N¹Ý1Fù•ÀS³Û?¶wÖoé{;¬æÒVêp¥"2×cÂü¨°œrÑÄ,®óñ=+¸ÁC¥kåmQ
+qoÏa¶óî€ µæKg¥’~÷:×’[°E¢;®Ï¦ñÚn—Àò¦žþëÛüÏÆÌYóO—9æâßyÏt3“róŹb1验ÈʬŒH»ÓUñ•ë‹ý,'¶ÏçÇh䘙Ҥ3Þéä3Å;„FóôNŽ)žÅ’ªýóD+·D;©Ü ÝDÞ’>jFÉ4Ÿ;:@t,äöLœ}Ðpn…›ÇÕ©ââ’Ò#$ç°Îs¢}…Džø¢GÙ¶dµ¿˜OŸfµÀqŒ§­Î—Ëú>{¨_×çIP®Ëç7Ù /eoÚ–VÌ[‹½;$ŸÂ3×)ú/øÿ þ'TÏ`Ñð xdB?”kÿfð_«@žendstream
endobj
1355 0 obj <<
/Type /Font
@@ -12955,14 +12962,14 @@ endobj
/FirstChar 97
/LastChar 110
/Widths 2619 0 R
-/BaseFont /QQFQJY+NimbusSanL-ReguItal
+/BaseFont /VCJCBY+NimbusSanL-ReguItal
/FontDescriptor 1353 0 R
>> endobj
1353 0 obj <<
/Ascent 712
/CapHeight 712
/Descent -213
-/FontName /QQFQJY+NimbusSanL-ReguItal
+/FontName /VCJCBY+NimbusSanL-ReguItal
/ItalicAngle -12
/StemV 88
/XHeight 523
@@ -12978,51 +12985,46 @@ endobj
/Length1 1608
/Length2 7939
/Length3 532
-/Length 8790
+/Length 8789
/Filter /FlateDecode
>>
stream
-xÚívgPTݶ-HPPÉIhrM‘œirNlèZº›,Q@¢ 9G%#A2HÎ9ƒäŒd âC¿{ιõ½óëÞóëÕÛU»j¯9çsÌ9æZµY´tyd K¨"ÂÍäåЀÙ[:£tÁj<²8pk&`a‘CBÁhÂAŒ†>B!
- ³‚:  
-uû €¡
- sDn³jÉ+þÅm Fÿ΂ݺëÛHÂÊùwI|·0·^4怠¡nèß¹,¡
-²\¿MÿDiݪŽÖsw¼%ö_u¨# ÿ\üÆ•E¸<y€"‚
-a%ð21% ]F‘Ñ5 ÿ¼­ˆÕè˜÷Iï}¶ïGD³Obð²hÑ‹ëÒ@ÞÊ¡g7uî“;Ž?×U87zZÈálÍñЃ,Z/&ŽÖìG ¬ "\þ|æy„I»†áž‡jKØ&Oø 6V´uÌs¯ï>jDâ~çðerÉö%e>w$ò¶J¨ˆ$k|X‰A\–³³Ëóõû9[GowWgó1Në: Wz$>‹˜ 6!k˜¯S:”‰~‘g„e.0¦ãclKP«>»àÂÌ1yÕ’ Àd ÿS¡Õ¬çn9´éçï©|e>·'ëC‹›f§—ЛÙq€úY𵫄8ë$fÚõSëÁ·RÞoÛ@*¾« ʹAÔguG…*|«eB‰;}ƒv©¢]ùßÖÒï6”‡yÛ}sx/Gj¢T«$Jñ£•H âQ–®‹B~RlEÛ1w.ì*Çbr|¬½}$nÖ‡·Gs]> Ã?V1òx£+w¿³\õ9’e‡Ð†ŠØ¥ÍäÊv””7œœ¸äN­Ñ÷«/ùŠö.‹ú…&Ð)âá0äPùÝÚ…k¥ èé¹éÛR§ö
-^8³÷&sݱ­|&éŸî#6cÕ¯‡‹úœ‚ œEë=öÚÊÔïƒ.Œ}(pÚéc8hXÔêëeM±¸ÄÈpefI­|š
-8xÏŽo‚¹ Lœ¸
-R!ß1Âr<;Þâ$ûg2³£§Ä¯Cǥs‹©Ï¹å‹E#‡„2‰ó9[ª«eÖb äBñÇ›;qäë4‹¦y,'XÈ.ó¹^Ûû¾çm}l3S@+'éY“W[ZTç¤ay þR#ÁWeôùì¯w<Ààø!ËêHô‘ªÝ°a2Y'ŸxVc[ЃÖ̺«P‘|m÷L¨3X´•¢|FSp õ6!wˆ¥qi­ÍÖ)/)y4ž^ÉdÏ—“¦'»À+Oð+Wë³Ã/HŽõ°8³:̨%¾0€°nô™¦RºNSX)šÄ©wo¸Vá"n®¡U®uë.ýe‡°ƒ5­†âÁ„v0äÓ=Ì­²Ðµ”ž²­ÔÂtwï‡tKy…‰ ö €À›Á²Ãí/hÆnfÔÛYÏß35|\Ã)͹b€½^s$QÛ<.'DÑ
-(^‹òp߬h7š” ~Ý¢ñí‚…Ë.^,°‰ðzÈî§D€×û3ÊZú’|JRA.KÞ&[å/0õî¼2³–ÛOy«óCúÒB«e€öžt‹:¹ïäCA2µÅËV‘ÀP½'Ûz”êÅŒ~,ÁÑ’ØAkQè
-Çö7=s`[šzþáÞ•MåME÷¿€uG–h‰+÷ÜKI•9º¶Z¶ý3h#`+]¥J¢æ·šõ¬¥¸¦4 G‹Æä5ÍɦŸñ ¨/„~ 2…°ëIš%ƒR*µÈ¹ï¥‚CSž[çm•&ê,œ^ˆ®ül™ò‰0¼3F£!âù2°gáȺÝYzñ‚Ä^˜X@°æ¨Í›#díQ¿¸ ˜ßÈ?'ty…Š,ÿˆbx_¸ÂæÂ••ÌDC«½¬}F0j|{¯Õ\þ˜ßsžù¬—}8$QŒáinúAµ$o<½öR•eµ#"Uòe¥rÞ‰Kÿ ñÃ=Û`GS"“H®bʘ#6W?³æ—å‰ÖÎ+ëíø ·¯ô– -ÝI{ˆQeY:BøÂb¢÷‘>:_/!€ÐéË@íáÞÑȬýu¢‡3èµ+òLn¯óqŠq`Uúmò'ÄaeG-
-óŠW¯Cé¶°€®ô
-„©ÊìiÝÇ.h™³ 6'¢È6
-VÍŠ2Û71sz8o+VPÚ^­M£õ‚¨‰J®ÆÕe/ýéœGÎ>Î
-òÎqE„¹¯øç*+nû…Æ—²;OeŸöY:«*š“ïgœò'\Ý7"µkûl‡ÉqèËÑÌ'ð9‘Tgeix¿qVV^­ÐÅnOiêlÄ&Àh1ÿ¥n† Šo-R’È!î±~x“ýè‘·ÞøyoÏõÏ4íÙ{¦Å\4X ²‰¤÷•Ï´±ÝÈ/åµ½¸N%{’;4u)Ç!‹=íè¡ç"Â3¬¶Ðœš®`¬õ<xö¡Øà
- 1±#-@ëÓóÄ<ì¾âæ©)[‰Ø“9QuC—̨é-ûFæÉ€?›ëþYû|96£àj’òÖåUNºnî…XÓ°‰Ä·ÏGÑÅk'uÁêFd×É>0¼f»åæ6ç -#vƒl|¯göÕšŽùí:qÄÔyN¿3-y„¨Å–UÇâ${Læ6¬ÆÚRøÉ™¼ó¥?"áZ¾þþË\øQ>È” §{õîû7l]
-™mÜtW?e‡ÌŠØÇRXÝŸ¶« qÐNøb%2t)( æß-Ö§9¢A¸‰Éš2žŠŸ±;Njf:¯ƒ9NÃïÊœT)š…ùïš=l“'v!V‚»ú7?êÑš\“Äk=ò†º¦ù^š-2~ë‰Uïs‘.»o¨ËªüaMfsÍ%W2b+¯ø¾
-(̰?ø6|Kú‘œ™µÁ86<6zlDÌ)®VésF¢¹¦GfôZ¸èøJü P!HlÆ<¼H›8ºîeg©õ/¶D-¾ú‰¤÷ ã›UêYœqáÕ±Ç øË
-*Ïp›Â¤A wÓ'v•ù7Vš4¶¨ž+jÙÚN9dB<o¬L©oÝÌ#%p áÔn³òäAH41ס tö. Zm½0ë¼r˜$‰®XrJJ&¼è ¢—Ë™¯`¾eM¹»3µ¤¯û_ê÷ðö}d½)(A=À_D‰ÔôÛòbN¿Ø}® ÆÿÄ5,¢Óc9A7!ô{•K*J^ŸÀ~™j'÷%U­Y Ü{ñ•݇å]ä"Lžïxiå2¬Ž/ïb…U¸ƒjå×)4§"ò§ªÓ
+xÚívgPTݶ-HPPÉ™&çÐÉ™–œƒº–††î&K(HÎQÉH ’sÎ 9#$ˆ€øÐïžsn}ïüº÷üzõvÕ®ÚkιÆs޹VmVF-]^Yª„p@óùž4`ö–Î(]°ƒ¯ÜEXYå‘P0†pP
+G8ÚCзÿãºP(
+²BÂÑ€Û¬Z
+JñDÛ‚Ñ¿s£`·n
+uƒZ|™BX‰¼LLIB—Qdt (<okbu:æ}Ò{ŸíûÑ쓼,Vôâº4¯rèéMûäŽãÏõg\=-äpöæxèA­3gkö£¶Qî ~ó<¤]ÃpÏà µ%l“Ç+Ú:æ¹×w醄x‡ß9}™]²}IYΉ¼­*"ÉVb—åìì²Å|ý~ÎÞÑÛÝÕÙ|ŒÓºNÉÏ*î‚MÈæë”N#m¢_äa™ ŒéøÛÔªÏ!´0sL^µ$0ÙÂÿTh5ë¹[­Fúù{ª\™ÏíßÉúÐâ¦Ùé%üföC ~–fí*!Î:‰EvýÔzð­´÷Û6гßÕ•Ü ê³º£Âgü«e‰;}ƒv©b]ùßÖÒï6”‡ùÚ}sø.Gj¢T«$Kñ£•I âQ–®‹Â~ÒìEÛ1w.ì*Çbr|¬½}$oÖ‡·Gs]> Ã?V1ñŸx£+w¿³^õ9’e‡Ð†ŠÚ¥ÍäÊu””7œœ¸äN­Ñ÷ˆ¨/ùŠõ.‹ú…'Ð)á0äPùÝÚ…ke
+¸éÛR§ö
+]8sô&sß±­|*åŸî#>cÕ¯‡‹úœ‚ œEëÑymeê÷AÆ€>8m„ 1œ4¬jõõr¦XÜâd8„²³¤¿V>M¼çÀ7ÁÜ&N\€*ÄJÒÜOµøï8•^Ýçôáö¼J%qõ‡ ‘®.µ&у;ìXBÒ0ÊÚcVKŸ0-SÛ·ߌG?óí·Eƒòñ(€(§¸Ëš’=´øô•ú+y\J6.æê”‹‚œÞ»ó^eúÞ‚·V„(õb*$Ã=AÁžéÌmEéïa9žoñ€Rý3™ÙÑS×!÷8ÎãÒ9‹ÅÕçÜrƒÅ£‘C™Äù\‹-ÕÕ²k±ò¡øáÃÍ8
+ušÅ?Ó<–“G¬
+hEá$=k
+jK‹ê\ô#Œ²Ô_j$ø>Û}~';Äë08~Ⱥ:{¤j7l˜ŒEÖÉ/‘ÕØô 5³î*Tô#ÛýêŒm¥(Ÿ¡\B½MÈb\Zk³u
+ÂKJ^'W²Ù3FÁå¤éÉ.ðÊüÊÕúìðã‹’c=,®¬3jÉ/Ì ¬}橃”.‡Ó6Š& êÝîU¸¨Ûkh•kgݺKÙ!ì`M«a'x0¡ƒÌ ùts«,t-¥§†ìC+µýÝû¡ÝÒ^aâBý" ðf°Üpû š±›õvV¥³ƒÃ÷Ì ×pJs®a¯—ÀœÉAgÔ6tå„è/ZÅkQ^î›íF“’Ô¯[t#¾]°rÛÅ‹60^Ùý” ðzFYËP’OI*ÄmÉ×d«òñ¦¾âWfÖòûé!ou¾qÊÜCZhµ ÐÞ“iQ'÷|(D¦¶xÙ*ª÷d_R½˜Ñ%8Z?Èb+
+à‹)×§w&¬š>òÕäø° DxùAt€næ£`öVkøqvëð1']/¸t ¡yô8,TÎ.a Os%/i5
+ÉzY`yÖP@-ª¤9¯ŸÇæžÓçý¤>Vo€Ì¢éªd>Í/ˆöõÏ}êY
+³¸~h—•¸8˸ƒŒFF¹õ•Šû?ih
+vžj ×`­Ú[­›öÇ|-…>°ë=].žàŽJ,}”›­ûÈi±ð!æÛ‹õÛ‰ÌJ«—–r•øœEk±9,ð”ˆO’ܽ…n®Ðq !páxÓ“1¶¥©~à]ÙDXÞÑTtÿ Xwd‰–¸rϽ”T…³k«eÛ?ƒ6òg¶òõPªj~«YÏZš{JÃÁp´hü@AÓœlú)ÿ€úBè×@aS‡ž”Y2(õ¡r‹¼û^*84å¹uÞVi¢¾¡HÑÂé…ØÊÏ–)ŸÃ;c4¢ž/{ެÛe/HìEˆ…jŽÚ¼9CÖ•Š ‚ŒüsB—W¨Èòè!&÷E*l.\ÙÈL4´ÚËÚ÷h„¢Æ·GñZÍŽ<çYÎz9†CÅŸäá¦TKñÅ3c/ÕQYV;Ò+Q%_Vªdá¸ô¿ð‘8ܳ v4e$2iä*õ Œ9csõ3k~YžØaí¼zf¡äö•Á’±¥;Éb1ª"(GO_XLô>ÅGçë%:}¨=Â[#™µ¿Nôp½vCžªÂíu>N1 ¬Ê¼íQù„8¬ì¨`æWn-aö­§m+´Y¬~5A”XĽh§"hV לÞ_9æJqB—¡Ìh'·ïžrs)¤<ÃÑ!]‚ŒšÙZ~\ÍHÒzU´NÏh“[€Hái3
+RgT­$vÊ®éï9‡á׺ù§ßWŸa|…psØ´"ÀÅÑÁñgð~¸¿Õxy¿oA‹z¾Â¼âÕëPúí
+GZ÷± Z6ÂlƒÝI§(²‡
?Uôü¬Ë÷
-žä²5Äõv!.[7$›\ÉÌù ö)%Ü-DÇ9øÓ\¯äͯø7F Oâ×ÏžÅÚÅ8i“£òÅf&\†
--â×6™…ÈXÓØø,ï¾ÆÇ„Ék}YÆð”êA±<‘‹?qâoYêLÁoȯü¸"‚˜‰œñµŠýVw$€ÇÞ5-M¶Ãú&š{ ŸQ}2Ñ»5ãùáö¶xĽuéBÿ;¤»¥ªïÕ\rþhüæx¿Í?‚^iºÇ&‹ ÕCžËQµb\¸THüe%¤¼®QÕE²üO¥}¿:y´ÀJ ÛAHù åP¤-´á€[kNÔ/ˆ<Í©ÁEÁ‹zHÃ('¿8/ÖÈ><ï·NZN,±$íŽÝ\ë|.ʳ4
-Úu&IFlµPÈ‹˜<>ê¼çO}ö•>ݧ·ðgžF±;YuQTˆ §ÿæ‡ ¬ßôtD¤ûfP˜{s“cÞ·+J .>xi¾’²È¦{¹3Åš®Þ~—ÛãŒd@ãa‚äÄ·Ž„kï887Kp¥ôRXŠCãóѰáTîEQæü^w~@³ßG±¸½Kë3rÎN¡ÀK’jùÚ
-}~ÏLcÄçt>í ÔN$c÷¬¤úœ ú=nÆ©ngþõžå ÆIE^ÕÖŠ
-!dÌF æö/¨˜õpŽI^ø©Ý©²‰µ([|«Fv/f»H/>_!üËê¹ocG¥%ÅÉ s5“•ŽnÇ5¾Z‚ÏÝŸ¤±ðJ©ýšžÇÝ\UËúö¡ î[Ÿ2Êíß2û²Qx„úûs‘½¯Ø«PU XäxŠnO
-IÇäœ÷îÍóÍè v ó4ýð CihTðÞ²° ÇÒf%’2Ž
-Oyâ|g܇;Òðh¬Ù#1|éôë6Ög²›œ·UëáÇ rk_‹öw€º«¹j!:/œ*¼È_Ô¦ ¶S+³(#>û­pKÕs%ìÛø“hj£ê·ßN
-\O–ˆuõ–.½½h8¤Ëµ[%-n&í—o{Ø,OJ‹ä k ƒ$4Œsz!¼¢‡bÃ7Ú‡vçˆemÝÊ5Hcý™’W¤uÊTãO³‰³7 †³Ê;B¥È†“ŸÌõáõý"¡dËUŒtúÀóñ[í¹0!Ã<Ú—(U½›È>ä9íÁ;˜Ö€7¤ÊÞ­:À¤Õ²y £7À­ÔÁT}I”C¶–‘Qîì¹È\·ÞWõ3›Ã½ZÆ™&ÝhÄlÊÞK\o`~~çt!•†ó(à'¤§tq Y†¶bëÑ4r3ÛDZëòa[ö_ó> (ÁÔE7 bO;8<0¹8Ô4;Õª>*ËVëu?+«h–H½~šq»x/·}$ãºÊá+¡V8|ýƒ!Ù‘`Ç©³Mò×ÎàåÇøQÝ'ï³eò^JYõžâ7:¯?¾kñs”ÛqWç®fa Š’Œý4>§ ÇZ'úy]Ü;_GdRÁú È•†bn¥æf§çƒ\Qù²1³7›
-3ú·<Ȉ› h¥=¯`·C-ãZ*¾•‘Û3ØJ`+>…p˜;w cÁ¿ù\åµdf؆:îÉVÂÊ£QÏ
-Ló¶Ú±{i C¤üD8þúñ7.4ß=£Nƒ~ØA·™Y¼ŸíQíì
-;dÕÚÞùYÌú.ëÅ3¬m
-Œ·Ò'OܧZM•ÈkÚEä»óÔAøV¿F+áÖØ\7H”ÕÁ¬–ÞÙ‹s±
-A7µ¢¿ï?å151"yUF„I×íòÏfwÊ*Q;1WG¬ä‡üÖWG9
-dòú“¢Ï¡ã6–±hò¶þ|áç RÖ/?‚jïVÈttf=]«­mîXCh-»E²`?|(“躃Øçw¹©”]“RÉÆè·¸¿½ú‚[O÷^Üä'^m[ñ™4]aÄ‘þÖ9ö5QºÄ”ÔbcÅ‘n"¾ÿ]½GF&<ç ¤3dRµ°%‘ ”Ê.Óµ­ÉÂÆWòQmw)‡GÒDa™e¹ÔÖlNA|¦Z–ýÒ½‹Lýƒ÷ÛE}b\ÝîL» &épƒ·gr[‹÷šßžz÷ìòdÈÄ º‚íüë£-« ‡Z‹ÎîpnöŒ´Ð|˨) 2xqô¦S=w¶Æß jIž6a›6Ä.OSy]ÆñþS§oa¶Ô«ˆÌ±â£Š51r»%ob2üpȈEÐ&â§ÜÈÕöIòÊp¤ì‚è¯ôV²í­NæçiX¯Ô²»Í æá‡A$­Ñe$D{òD¾Ÿû‡‡';,Ög¦•k\Ü Gái3¼q¸Qþ¥L
-Xæ"¢Úbò3¸ý]ub7¾‚夨õù-ÅsÅK>ˆ<– !!’=j‰Á bê÷](åÏi·t9ù
-KÆ.Ha½+-Ε[åòÿÑÒñx Ciif|-is \‹¦ÿ€|6±m¦ÍñŠ =“1ä`K^!y9ÊÌßIjX÷žXHO~ûLý쫜ÈF7v—")òï@µW™[zb™®ÕÚ4“*ý÷L´ªŽœ0–¯z$¹Š/‚„à{>UiO³ýE©²5êæ÷”t¦=Ä;î
-€¯À4?œt€sTeù›!4J%h¹‰¸—ŽQÏ:µ¿yÓ´(kY¸³½M>X‹– sôqÀirÐÀ³8!ÂùÕÏS€¤Sì$óÅ­$R÷Ñ•amPÍ$?çÔg•ËŸ˜Vd[ƒ1ËiÇO°<Ø_¥¶%yМáZ.›eˆô¤Xþ*Iò{()õŠ_¼¾êW÷ºÛ £x}kã¾ããVÔ³Ö–I͵'EÜöGi‚õÂV;áåÏ¿Ø×6™+Ý$Éž {ýTö"1Мä5v-V$ÍlÂÞ¯«ª›bݦ´³ã)º§ÊoS6”hLGñ…îÇ,v%¹u©I~®]%¾)Ñ}ú‚¸2¸  âoJ°]^¯ÿRÓ HmØ;Âúž
-8>Ô
-²©
-3ã½+ôÞÊ•÷aˆlª Ïn×–OBw:ëÌDöƒ^ቃ€¸Rn¹šd¢¯ÅÓò;SÓtd®ÌA~z M“èRVt}õÚ+'˜ †4~}µ÷°}³íÚš[T:áµ%|Å’Q"èXê³ÚÎÝ9"áòç0Tw³È‹d·¿Pô@åÉ@ÅìÓEâòxOæî¹à åÏIXUb_4²üQ ¨:ù©^\õ47ãÇU¸µ& ²ðc óŒA«`á0Ôýµ˜—™žÌ‘¥ˆß·%¢y†.Sz¾M²hàž·ãý°óg #$SÿçÅOÁëÏàBø[yã¦5åž Šq(OÜâƒL#‘'Þ/ãØ«*ûü©¯ð5X1œæ)ol×Ós[2L&³d´/øÿ—ÁÿøÀ
-#Ñ{0ÒŽàÿ
+žä¶5Äõv!.[7$›\ÙÌù ö %Ü-DÇ9øÓ\¯ÔÍŸÄ7& Oâ×ÏžÅÚÅ8“£òÅff\Æ
+-â×6™…ÈXÓØø¬ï¾ÆÇ„)h}YÆð–êA±>–?qhYêJÁoȯü¸"Š˜‰œñµŠýVw$ˆÇÑ5-C¶Ãö&šg ŸI}2Ñ»5ãùáö¶DăuéBÿ;¤»¥ªïÕ\rþhüæx€Í?‚^z:“Å„ê!Ïå¨Ú
+DЃqB[äßTœB<ug(°Ø˦×ý9J~¿|º#ß*ý2üÌ‘ÔLÉ{¾OO±ÏïùƒiÌ‚øœÎ'=Ú‰dž•TŸT¿ÇÍ8ÕíÌ¿Þó£œÁ8©È«ÚÁZ±€,m³2ÓDŽñC£{p›® Î>*«ic:5uª ÍÐåS;ùEÑÎÙÀHoÑÏWçx רÄИ0uÎlPÎ5 —¢ú½»<>ÕW:‹ƒoY2’˜HJyf€ÇòTcª§Y½ªÄæ'Jçx{êI_Í[¾ÆuE^n¥ñÙ±pmËISDx°ñ¸U
+JŠ+Y–¾^#Y%ÿ GpXŽÒ0Nãˆ&^-`iªiðŸ;ÐNU‡UîS’7K±Åüð[Žç&“vñ;ÁsZ§â§u‰ö´{§¸àôò‡ëòÔˆBW ×B‹CóáiòT£ÊÚÿ“±'ŒÒÞÚ¾ ZwÕ¢‰?UÛ.[ h‡)qŒÐÇ
+¯5Áƒ ¨“¹Ýa%µxkÐÏ_WÃp)ÉâüdÃS<C&fåc—Åo FÏT±Õ„ú°
+)è@#{ë>Y]K¢þäWOk‹à0É
+m›Hi‘œô d„†q. „WôâPløFûÐÀî±Ü"“­[¹É`¬?sòŠô£NÙêqüiv Ž&#‘ÑPb6G¨4Ùpòã¹>¼¾_$”ì¹J‘Nx?~«=!ädœGû¥ªw³
+‡¯0&;ì8u¶IýÚ¼ü?"¦ûø}¶lÞK©#«ÞÓBüFçõ'Ã÷bc-~Žò8îêÜÕ, |¦,kÏ%äq†Ö‰~^÷ŽÓ×™E°~r¥¡˜[©¹Ùéù _T¾lÌâÍî
+ù¡M½Þöxhá,ÿ
+áHQ þY»Bå<GJÞ,6]JOU?ÀÕ«Uh´\ï MNñÂçzŽùy¬˜+߸+¤ „#äoàùØÈ)ÏøÅ PØ
+Û9ÔB1®¥Ò[Yù=cÁ­öâS§¹óp—ü›ÏUÞYKf†mˆ¡ãž\%¬,Ü1õ È<o«»—ÆØ1D*@„ã¯O‡¿q¡ùî)uô¼ÍÌâýükjgWØ!›ÖöÎÏb¶wéÜ/žbmS`¼•9yì>ÕjªâD^ûÐ."ß·ƽú5Zï°Ææº±@²¬®fµ4ðÎ^‚›M²¸©ým|ÿ ¯©‰É«ê4
+$L¦nW`6»SN™’h܉¥::`í ?ä·¾:*Q “ן”„y·±,ˆÅ’·õç ?‘²}ùT{·BV°£3ëÉZmmsÇBkÙ-’Ãøá+@™d׾€ËM¥Üšô³lŒ~‹ûÛ«/xôñTpïÅM~âÓ¶•˜IÓAéoc_3¥KNI/6Và&âûßÕ{´adÂ{Þ@:C&] [°A=Ûe¾¶5YØøJ>ªí®(íPãHš(b"»,ŸÚšíÑ)„Ï\˺_ºw‘©¿cð>b»¨Oœ»ÛybôÃ$N`ðöL~kñ^óÛSïž]Þ ÙXƒ‚AW°}´e•!]¨µØìà×fÏH Í·Œš’ ƒGïa:Õsg«1ì8ñÍÑ –äiöÉñhCìò´g¯Ë8ßêô-Ì–~‘9V|T±&Nn·äML†‘§ÚDü”¹Ú>I^Ž”[û•ÞJ¶½ÕÉò< ë•Zv·yÁ<ü0ˆ¤5ºŒ„hO!ƒÈ÷sÿððd‡åÁúÌ´Jb+"ä(2mfƒ77Ê¿”Í
+8*v4ºÏÄ^±ûà+h5zê2¶;šÞþ,-õQü! C$yw9†CšJO ™ňq\`±"H,Þ)T<icº ¿ª}ZþK§{«Þ®ûªè&4CSQ~åâ7ê
+QH;ǘ¢&šùŸe“ô¿žUÙ|µ°Sc0R2YE]¨
+‡á{__bçâ.°ßþ
+LóÃI8GU–¿Bã¡\‚–Ÿˆ{éõ´Sû›7M‹Š–…;ûÛ䃵h¹0GQœ&÷ <‹"œ_ý¼ÈAze‰ÀN2ÿPÜJ"u]©¶ÕLòs.}æQùü‰iõHö5¨ñ‹‚‘öqLðëƒýUj[’ =Á®…1Ñè²YÆHOŠåoq ’„!¿‡RÒ¯¸ð%ê«~u¯ ³¿0Š×·6î;>nE=m½aÔ\{\ÄcïQq”&T/bµ^þü‹}m“¹ò A’ü陈×O/ÍI>c×b%ÒÌ&ìýºªú· ¶mJ;û7žb{ª6eC‰Æô_è<@ÀbW’+Q'‘šäçÚU›‚ݧ/ˆ+ƒË°a
+<¤þdÑ _IÒõ.˜ê¢Ï\9¾§é-xÚÖ-9?›ìÐv_ wóý}¾éH`…Ñ'>Êß4¬>äŽT‹¬ÌÛúGäµGÔà…$Í ï‚7LI›u`žUJ2ì„΃79ç¯~f´lá­ÊΚìïW 5?|¸':U—.ûrJo ÇÓlÔË5áAÜçxE ³º×ا‰3Ç•ÚTñ#åKþtâ•.iKW@ö/É›ÔÑ÷ ûj&Q ¦Œ²È˜¥t°Èð§Äh-ؤ1íý b?e¾™F Š– ÉXrÙ/&Šjz©¨rAÁM°re.2Òe%ÉÍ£™6"5[¹(H4 :\mdb“™[i:ýP½2“¿Ýä÷ö0JÑ»pÕh¯QšQ¨ý±Qó_»Ã7;mþã«÷Aú^ÁÐ; Ó èvñ¡Õñ¥ã«*’Hóß¹,QëtT½}…ÁbWý€g”ùxÔ$Ó¬GÞ×™®'}¡uÞói õ´’D§ùõ; ¼xðÞԡư~. °öâ%ÅÅ4O”˜»ª¡ Þ»Bï­\ÿÆÈæ 
+†ìvm…$t§³ÎLd?莑ˆ+í–«I&VñZ"-¿35MGöÊìä§7À Ñ4‰>ÅauA×W¯½r‚…`Hã×W{Ûw1Û®­¹E¥^["W¬%BŽ… >«íÜMÑ#nNCuy‹¼Hû %Tž,TÜþ0]4.ïdîžk0œPañœ„5ðY ÓëF–?ªU'?Õ‹«žäfü¸Š·Ö¤qCr®až1j,†º¿÷2Ó“=²õáÿ¶D4ÏØeÊÀ¿I Üóv¼vþ´b„dîÿ¼ø)xý)\+"oÜ´¦ÜD1å[|)h$úØûeGUeŸ?õ¾†Ó<åízznKB†Éd–¬ö…Àÿò!øÿ
endobj
1280 0 obj <<
/Type /Font
@@ -13031,14 +13033,14 @@ endobj
/FirstChar 36
/LastChar 121
/Widths 2620 0 R
-/BaseFont /CJAOEB+NimbusSanL-Bold
+/BaseFont /QNWGOF+NimbusSanL-Bold
/FontDescriptor 1278 0 R
>> endobj
1278 0 obj <<
/Ascent 722
/CapHeight 722
/Descent -217
-/FontName /CJAOEB+NimbusSanL-Bold
+/FontName /QNWGOF+NimbusSanL-Bold
/ItalicAngle 0
/StemV 141
/XHeight 532
@@ -13062,7 +13064,7 @@ xÚízU\\kö%‚»înA‚»»;PHî®!x 8 îîîîîÁƒ<$ýý¿ÝÓ·{žæm~Sõp¾o­}ÖÞ{}ûœz)
U 1Kˆ9Pveá`e
„8
l)qøCÀùÏ$AÎ@‹×¦¼Øþî›âöùØ
-¶ü³%K7G6-0ÈÉ ('ù?Á¯ò¿0k +€‡“Ÿ
+¶ü³%K7G6-0ÈÉ ('ù?Á¯ò¿0k +€‡“Ÿ
qýñ$X8x8þÆiÚ€,ìÀ@—׳ø“‚-ÿ–R
l±­®¯SiælùOàÚÂÍÙùÕž?èõÞ¿öV ×@O òÊ"ÄB0Ô¶6´ý¡ZŒØƒe’«Wëî·97rŒ=ô7V˜^e»bîÜÛwŸ³$UÇl„+ `•`¡Ã㉥bø<ìøÅ;X°°Ã°`d#‰NYë„”P/駯Øûˆ¢ R¾Kx Ê^P”ÝéÑKL`i„CpHôœTà‰ÉÊò+TŽøñž‚ÏUdíýÕàçG:%Ùmƒ#RPä»géäõQOï±+:°LûÅÑxæÃe]k/͉õJø:'º8ŸlJÛ¬žªGóy乌טòQK6‡ Ñ+íLvþ˜ð‰Å16(ÎñkX„Éßš†+…¨pœº–QÄ´Ôß^î)RêÔ[W,,¨Þ‘õÉ»ãp%n×)iuGYÖǚπñZ¬Õˆv4¹›îµ:®uľõ­«GZýÖ:„<=Ÿ@‡ª˜yÝ—l:GBÎÚOAs½À:rÁUuiw™ª¨,w‘ʽVç±ÌwZ6ç]ºš½žW߯e ͹„縤h£öÙ8âØYWÑtÔ¸c}ü5æ?°5&Jt”ùËÞ¨—OÉËÛòÁHÌîZ‚pr_‘\OœÅ±„4šß²~òIÝbâí‡y"ûÊ“¬4òŽZ¦¿;‚Àždz™RÑ t[^cíÆ=ðàæ÷Ÿ‘øÜÏ•ä =X}§^ÍóâÓÌ:Ë;}ß %[µ, ýÉЛ>µÞܱ^4AXç%ä#¬wÛ±W:eÅNã¥S¶SÈ“H f÷ÖϦŠKuP ·}.óF!Ö§•"k¯“/ågö«ÉФÁ
 ê2³Õ°"Ý ÝkÇÃñJ
@@ -13092,7 +13094,7 @@ g~nM"up^ÅÃÓíÓêè” ,{!5ÿ8¿UËn
Ðú‡ä9¬PjK¢!zóÙ!ñHaŸ´Þãïÿ¼£êOß,?€úVÐz¾’¢Œ¤ñ¸gTW-Š«XÑèƒðN¨PÊ94X}chAc~‡^ÅûI8Y½-°Ji ¾á.˜<®¯ÇIâšo,¦ÙNì¥#ÊͽÊûÊàùk¤lùnýh2³ÒþÝu<Aíâ$FŒþ¦ÏD!þ:ƒêj%FDõŠ‚QúPÀ„´èÖ#מbG¡³°ï\ùe%mËf›‘g'CÕ䦨 Ñ)Ê$‰‡x`A%*›H«¶#Ì'å;…p‘ûÚ9ß/iÔ¤N…ï#‰yàE×Óz˜8ƒÄÛ¼êpXe€N®Ñ †µ§r%ç˜û7¯¼Çé&ï`Foùª’׬ó›}tW™ë',4Ó‘õÊ™‘8‘À`Z*\-šðú[Ü‚JåÕ®{i!Ux„T û•ˆ¼‘‡ômÙ85û)îÛ¼e¢ý¾KµÔÌ;¨žè{ÜÈ¡¾è{´Ñe¼Žò»~!–±l˜×R¡^n`žTG?ÂŽÎCMž—û[©s¬ ;ZWÀá¤ì`±3iSw-iUÉCW
ÚVâ>xj„E‹ŒwêIo³}‚üH—ã
Örú ãkÑnT‚e¿S< ¢x K»«- 1…‹54ËÆa«÷-ÕÜ@ÚUóªîÐsL/}8ÀѶ›Ñl¡ò‰ó9È+ß©O¹È¨qD‹£RKˆ7hëÀûÚë,l³Ž[‹x³#‹³ÆÒ4
-¶ÿÚ®½–ZJS•ñ~´õÓp+S!¨yWC6Æjy.Lä“X5­ ^g˜Â£˜ýÿòƒüÿþŸ°°š9»BÌœí}œ.®ç?þ€‡ü¿
+¶ÿÚ®½–ZJS•ñ~´õÓp+S!¨yWC6Æjy.Lä“X5­ ^g˜Â£˜ýÿòƒüÿþŸ°°š9»BÌœí}œ.®ç?þ€‡ü¿
endobj
1277 0 obj <<
/Type /Font
@@ -13101,14 +13103,14 @@ endobj
/FirstChar 2
/LastChar 151
/Widths 2621 0 R
-/BaseFont /ZYKQDW+NimbusSanL-Regu
+/BaseFont /XPNSNY+NimbusSanL-Regu
/FontDescriptor 1275 0 R
>> endobj
1275 0 obj <<
/Ascent 712
/CapHeight 712
/Descent -213
-/FontName /ZYKQDW+NimbusSanL-Regu
+/FontName /XPNSNY+NimbusSanL-Regu
/ItalicAngle 0
/StemV 85
/XHeight 523
@@ -13124,50 +13126,57 @@ endobj
/Length1 1624
/Length2 9769
/Length3 532
-/Length 10633
+/Length 10632
/Filter /FlateDecode
>>
stream
-xÚíveP\í–.î xÒ¸Kã.ÁÝ
-T!æ®.*PGe¶7P{K5s{ààÅ £“rƒ`¨£4è-Ò`
-bH©©(¨ÊåTu
-…=»0þϺÌþïkò¿¡Åÿ–ÿ[Úû¿kî¿öè¿\âÿí}þWjYW{{UÃó
-PüÙ3€?‹æ+øÿ²9@ì=ÿ«UÔÿé²Å` çrH:Z?·„ ÈÅÎù·â" ñ
- Ÿv==noŸIÐßÈËKÄD­ÔŸf1ù'ALа™°y¾ù}ï4(Y— ôUrüBpSû
-Äâog;ðµ[¬;QŠˆŒ¯Ûwîó=Ö¯ ¼`ó­¼W¯åçL¾q3>ÅW‡èS{àVýd‹&ï•Ï<—ÏÔ=7D|Ãý ¬ZTô0èÿ”¨ŸÇUÓ©äó{š±Ý®$&“vÙ|G~ðy›VØ\™+
-Í1ÆŒCïÈ`"&¿g!¦¬¢5ºvIN§¶L/òëñ‰S£MÀËTpÛ.KŒ…¾þÚÒN‰µ§gCèÆåa€hFظ´GôÆJ#Ô8VZõ»tHÉÚ8Eq”B×…‰¢uæI-?msÙrP™–v)Ú·Ð4v<нúš×t¯(æôuƒœ;0®¬RºkIãcŠg‹euÁ–'¨'QÉn§·º>š‰A«Ãö?‚¥/ö‹ìÞÖ¼¶VO­l\š6óšƒó345Åškni­P1 ‡Úž¯g~zysJ´ ¤–æOWñ² H“-À !º “rá<”LyáD—Fo•€ݲçÞbùÂKê[H±3JÊüògŠpcêÖZÂÍឨª¸’Þ ¤íoÕKŠU¢s›Ñ—¸IßíÔá5½0ßç
-’Q(øf´ÕÆv» Îîócqà25•:Hø8™ïd‘_¡Ý’ö¿ˆd¯,Š!*éïÈ?ºf›]æU
-cíÙÐââD<%d)‘Y€­äû#TG™z‡7[¦3BV‡•Dßµi%³M‘›á
-ê»WosDVhHd¯ãå¿~òôÛ¦¿üíKýت@Î5¤Š¼
-—±wOhW]k(òW¬õëÞÝÞX!Þ]?sÀ&yh7v¡¹×Ÿ˜‰á<Ä$½AÍŸBŒí8»©ÒÍ%ýDûÝIÃ%®¢x!EÐ:¸ çB«eVc^*mÔOþBÁs :òµˆVžÍ<Šfs=Q‹•]Ò8mÊ~)„Ò…ß<òY§ó‘˜
-„í€ÎÑ—ð€\&.Mý˜ØÝ»ôÚ¦„é¼¥&lÕ,,8Õº£Qr…™ª&¼œÞ3ô'6ZÝm¿Ä÷ošý—>tÚ{º*¶]¯dh•Þ
-Pâf1|Ô݇çå;Úd{$ƒ×FêY̖ѤÁÚL›¼.g“J{Ä!Æ@ýM1¬û~k÷Ë˪s'1ú㑽ټbÒZRåMýž… •j—Z;Õ¬N>ÈS÷Õ$Úº/”Oï~|EÐ1†± fñiå·tKÈkâ%UÓâ,“ä@ÆreÝá$„H­‘ç„+mäOʦêmÁ0¸0W IôLÛÐ븫™ÜÔ0¤÷ÕíE(Ÿµ¶¨ì,:wQØé¾¼¿]ÚD¨Ô3Îz²œÖ¯æQæ\
-Œ¡Žb¤I÷ûz¢è4ñ
-×Å>zÙ/=Ü›m an¬3m WÎ…ªKd;8±¹Ž“ ~ÛÖzåXkNëþ5 ,±u«°<F‚ƒÀÓðíGqOZù²ÙØc9•xrL¿d'Ë«Áv»;»n}C|×`-Õ‡U\ïñŠÆLÿìHíbô°²ƒ‹¢c¶¦¸xsñi«GB72û¼âW`c컦éÇp¤˜RMÆ…´4)äTIrûŸcÈ‘¢¦]ç|QG®««{y-CøMózã±(™ho'>Äž“ ,'8Ь›áµßaÀ¤Ò]ˆc·_e–K¤ÓdS~z˜Àl2 Sù´©ëÓ 4•nThS(²loŸ®´fSYSÀ:¢{e„©–lÇâ¡éÍýˆîõ†ž–‡<H¿sºñ½UÙ§:ø°¾"¥q~I ÌM ±¾»-§âB2³clJ[/ Ü¥SN|<Thk©?áDÍ)ÂÓ}™+„|(“e]ß<ñ0iu+Ö%nϳUÎzÿãS‰#yă]weÂdêk <÷ìö›_ò¿ñZ: U¢–ႦyfÝN݇ŽT:Ó@ƒøYš‡—{ÝŸ—ÚBèÙ~³Mc
-Z­:•¾LçlçDUr"´2Uú…癉{JÖvEãÖã¦Çõ ûDÃD„…ÔOŠ9ÄÎX\ç.–6 ÝŽôþÝ äüR8¹’ð½c
-ôõ¸¥)•3Øß{•ÈñªwÏ·¼ƒ‘Ïþ»õ’ÑzÏ“ ¬e†?Ó³:›Šãír s èÓáæ- º«¹¾0Ó§±ÙÙa^Êä„òˆ7ÜU·FCòðbŠj }ﻺd.·#BWhô¼œŠYÅetäPÓœ®çí#+¥—C™Ó%ºÒ6&‰ Cn°Ñ|;)oòÕovf*#J‡ŽÃ'´f„D‰HÖd?¢PµUbê9&ó ªüJÎ)Œ6kù6jħء"’džmC–(#©™$cŠ“ecPµ«—¢}c0‰õÕ$ÎÏujeF¶Šä \ÛÏ—ùÂc×*ý
-ýîë£ôS­G$7ZB‹• ·µ§ç´’%ëêDŠ!¦¤+ލP^à' à
-^+êÃP[Fñ­KrùÔÑôÕp‚ªà/—ÀËtH0Nòëù¯òñm‹”siÐüLcie:®”^¯ áS;Sõ/ôªÑ™
-ÖûJ!x;ïRÛÍ.É«™Œ”©$CBu%’`’X¥Ç„¾hvü<LµÁiµbÊIï1ãìC ¤éDely‘r÷y‹F¹k`ÊU]®TÜ}#§Ún%<DôÐ?<N”ý£}œ+‚þõ ‘ó÷°»ûGèë´Kªp®Fe­þF±R[¦þ#C·t ´A<·ƒ´¢ =3Ëï—^h£á%C-Y*½ô"ÑÞ¥±ú¢ò;ãˆÀÉvX9ÍØÖ!¿Ü$ží—½qbÕš9y3ˆ7±s0”ÈiH&zqÜ?·ï)òŠ ÛX§y÷áœ5‡æ‹?ÌD@üw‹CG¿æ@…€?¥òëÕÔT¾- º Š»¸¬_T+ÉùÈH)=åV„ñbcg„¶&Ä“œ 7HÞ¢…_B4YÕ)¿â·ô­:ªßöÈ6”4øÐ-˜¿vÕUvMGk?0vï¦F4Ñ—‚ÃrLóÍw¦¤&˜hƒªØ R²X" NÞ­Pe&YLʱÖǼðˆ#I¸YžU¢ºŠpHz3\'ÇêZ:‡òd~QF…vy°*ößÿ0åRˆ¸äM ¥Ôµ¨v6 Á­ÞBý…æªBmp9%u±ÏnŠ<yc&ä@³×ÞuŸ¬%%Ðñö—'þý S”ÅbÄÉм„p´`ÁD夘æÕx÷­^Ã;„‚é­}¯‘˜>¸íW*‹]M½.¹$'戄M…y¸"X˜Ûèù(0ªu¶v ˜ëù1{¦/›[ Wղ󜯷å9þ&¶ÌiS>÷O\Ô÷¶M…Q}füFJå „÷áÅ¢puÑ5);B&çëÎT¼ 5°ñÈiþ±nе`[/qsÙÑqµßt¶xªÀ€Ê ¦y¹ÒÚšI§.צó2 î4¦ì°¸á¼µžlߟe¼|ëtÝ07l[oÙ·QåÈ¡óãÅk¤k¸ÌfývUî]h$]¦Y5\œ¾iNBy›…vÊ G²…tæI¹­:¡Ê)j§7½Í¬ØË2ñ'‹ÐÏ%ŠxOÃì4ïÓðÜ!ÍŽ‚d÷l¬Ñâ&ÜÎÌNÐ CT$Î,?oªr•À¨›oš0¾N‡ø^áŒ)~ù€ò'S²ˆ\ѯúÞ\j—`ÚõEú1·lñKp?JÆÈŸ›È:¯ÊötãWÍlöBÍßň.䋈OÕ¢5‰Ä«¥º5̲ùÁL4r·ýÁÔŠßL lƒ“T¸ï1wùFWÃÅ(¤û×pcö§Xè¾p,ÌØG ­JÁÐfûÜUM©9›îtzÌC#4Ýy?à|ÿöù‹¨S§‘¤a˜ŽåÊ
-£4+@bÂ_`±:Þï¯dÞÎ8/ë†xcJ œ†I™žëµv°¶‰!ÞOðˆVñúajB³Ð÷r‚&óF¦ìô0Iî3ë/6°÷¥ñ,y0&¹>jxSñú_7úXêáõóä~„ÁÂD§°BsëN¢·p4 ñzãöRe©ŠÈΧD7áG÷ˆ!©K²b‚Ú} RŒŠê|v¨]£¿HšR¿z«]åjdmÎN|ïÌ$ Ž>¸¬êš&Q4ÑV%_øv0:ÐÀäÐÎ>¹¤5Çà“ŒŒ}ŸU;™ ìŽc9”_=¾1õŒWŽá©ƒ¥™¡›ŠJŸÚèÍÚ Æüæw@üøš'þ–º#Fñ”9'$Û IÙ€drÍ݉aáuY†M¡tsj&Kz§XU€]ü‡õê4¨Øûà&„Ûàø¸u>J",ÚÈB…÷U»•næ;$l„˜Š'Ãxh‹Ž^#A
-vi´×®Ø®(OÁή<'ð&öç¶Åý·ßã¾4câ¤é¯èD;ˆÒ$#¶ïCü^¸(÷´À{KÅš·JPw1®;‚744Ú·Î7FŒæêÒÔáðêÈ$šWFÕïæ„ÄXâ×á2xÏ×™²°.ÚYØqø 2?Ç C©K%>  ¡—:€KÄò Ï›\׌I6ìúex“s/°±}zsÜn‘¸%=Ði–‘ð:[ë·^aQ”Šd0¡D1šØLA€LÃäq“¾qö»Úþnˆ „ZIDd”¨ù†èª1RXHVtà˜4ãkÐû ‘ú´÷ÅQßÉÌKè¬(FOªü˜#P#ÎBÇ›ŒU"Ëìë¼D>êE›ëþšÎ"A­’gAˆÏÍy:–ËÚê^ÔMdm&rSî Àoda.”í)½&ž˜Q6`¬0ÏôLÐîÀZº ›vdãÂZÈ‹ä%1üå-cÒ¹žâ÷=SÉ4B*Ç‘Lä/Žý¤ßwʪíú5J›úŠ›Ýñ J£¤Ž.ÖGînvr^ä¾3ï`Uººž µ@…6.Ì”$4}ßÂba7ÌÛ™Æà¬4 ž%ó÷7Þã,Î[Òüë$' <t0¶ä‘ˆŒŠ×BNuíéD&qgµ¯9Xû÷÷ÖŒE¬l&«ùÛL_SòŒÆƒ./ýJ=‰Å~êó5Éá}|;s~àÔš†­óÓÑ]+VÔB|~†óZT»æçq4ŠÖØ"ûeÖ¤s'm¼Ù`룿õÅPh7¾ Y‘>!H«“oà~d™øóóiÁM†*æ0‡Ä/öR¼M\”ÔÖ:š^_•¿áS‡[~èžÚXò/Pûq ú×U­;“_UWÆ,Ù8*ݬ±¼–C·§·ôÝQj¸ø¢ò°|šœùa£dHÖ4ã}
-Ä8ü.)>³"äŒãÇë]°¤ºÜˆÁœ,:x3­RÑù{J]J¬åôMÐÖm7
-\§mG‹ŒDO¬äI<3Œúó§´°_«6Ï<k…TÞ+"tª.¼ïyÈa´…ž ’Žâï*…æ|)!®M2heùÜÒâ¢Hxþëýs8Þ8(ÿêfÖ]zvf“Œ4…Lëáç¶;q
-R`«å¾V®xÙ0*¡{òeñ Á5®a±ß*[‡àñ3ûo»(´–°ùJ1NÙ‰
-žØ=å1žâX™eïÉÇ©Õä¤<\½Ú'N•4­4Eíe6)Ý(î8pùß{½ÙÏI8*ï¡Ý2ŸKÚ>£<ô ù’iVªøÙf ý9÷“Tâj¤¥]†ôBøÓõöa"unáQaÝ,«v”FÝÑûÃ)'Ñ£»æ[¤$ëêj€ÞFuÙ¡>dò–M×~Ÿõ½Bœ–™k½®èMƒGµ
-‰ÃG”0µé éØÐ€BBV…BZ_Âë /m9Lú‚ßkˆÏ–œ2}Â) :ª2}2jUd^=èΨoDÒœ6š_›ÊXÒÞÜêÚÐÓx¢šÌnM¢Á+ª[ÍäŽî$9Jœ )o¥ÇH÷“q\£³œ‡_žÝÛg
-,^?yŽÁI×Ïú\³ì'´A›C4îs_çj%Râ„*ßã£3ëúµ|”²Œ$ßÔ•¦9yóY½7-áB”[—^çÎv5u$®MžÚE¢ˆârBvŒt2jLArôvCÒìzAŸON¿_ä‡t©ϰҋšâ=Êíµ"ËŸÞÜîár–ý%*<#ö¡îˆ¼'!éJ Y^GjŽÞ`¢!’+”¸yx,å„èò1ý=,ö@Pí€*þÈÛ
-ÓL=M{*ä)qÒ(iI"\ÄuSý6[þËÕ¨±Ób¦eˆ UγÔnºÅÂÑB4:èuDé…$“dtevö0¸¸ÑéÕÑg¶³¼¥NN2îƒi@6´š<-Ótfù·@Èjã¬Í׸>Ïš/|YMV©Mù¯Ta"cw,\†êÔþõÞ*˜÷Ý~U¢Ò’Žr{^ý­·U™”ã6ÄÕÉ©ÞE\5$¥fX²A…aíÁr³>zgé¹Ù¬u=ñ¦Ó=_ˆíÙHÏ@ÚãË]Ý»žmD©IŸ<¬æ—©J¦kw˜ã¤Ç:½—ƒÚ•ÊŠµŽè8ÕmT)-‡9Y¡¾:ä–Ç!øŒk£YwŸ=âd|æêDÇ.±hìÍä4Îb¹Ô2:HH3buì•fïMwKµ®õ-ãY^
-é2£äª.WÁP¸kSÞI!ÜʨÔ
-#çtûui˜"Çî½ÝSk·×éS?€+xû)dQ d‘uä+Û!f.D¬Ö».œ©’u0ôU0â±6$5‹¢&&ãæÛ±¯AÙfsDŒ)d?Óܧâ¢Òæ8LmGpÛŸxºË6ÇiÇ(¾7<t§êõ·óRÏ
-/$]näû?J$ÔÛÞmö!’Ÿ&ð²P‘c§e“[v$Â)+»NNçérÖuÓ_®…Í@+²H¶_÷÷»Rfžhãs“^Bj˜wrˆ€[‡–íª%ñuƒ4Ü»Fì«¡lñ,Ö±JL¹ì¦Ç2áÂͨŒñ}WŸ$î'`47‡vP]à¶Ápì í°iô]ˆ0W
-El‹RŸKRÁ—&ù$JSü4Ÿ–F…×Á™Ù®8·`ðLïÀå "i½ihDÈG4¼K»ÙT2þD§Œ­©ž}s<µÇHzÊ<WÓèÃÖÖf¼TãI½ÔqßrPµSTn\´ Ž?3 p¡àNØþdÀ¡=޳-7J>4Ú[Pšyj­È|ý¹ñöàxÊ;/8{!£…gÇœ³"ÐóØ‚öW6¦¹ÀÞJb%°`ˆ&»x`w{A¯šlvŒ‹‚RRí–[Û`U)(—A1ܹ—“waræ4ëÀÙ`Vm§²ý¾9§¬ü–éå¢I—ÆfU}s)O5<Ž¡ì
-Š–Õ¦IsÉ­|³±jã¸yª7Ÿœ7‰a ²CTx»+ß¹ÓÀUF\÷
-/qZƒ(ï¿UbfG\}Â)¶jo
-iRŸ*"ß‘Ö_Hþ¬2X³EDµFÞo[]ù¼ æP.×ÀC³JOQ1pߊ× ?NU3öŽº¿N‡JHÓN»›ºVk4rDQ¬á×›GO–ËOœrJòíp@rw;tzjgùZ¶ Ô là/^eœY{è§F¤‡Äåì}»ªßØ“äVEP»ãÊ„‚i"û‚o6%‡•‹ýšý¡Ì-”fÛ¹òœiekAö8U˓疯69ï¿Ë'AÚøg¿.:»œÈnéñb
-¬œ6¥á7Â…Ç*WÅDA‘  djjn{3=˜³ntœ.a°ÀxDúKw1 HPÅÚI§wò;áŠS$-íG²$ñþÀí%RѵìÜäi
-½T/>V‡™»EºãÁ¦–ÓjÐAúî²ðÙȯ  –Q^^ŒŒMJŸ9Ö¹X
-?âf,œÿ4“áÈE’3i‚è;++ÞˆÛ—p°tl1/JŒBnbbÛ ÁÚ¥¬*<½Lc¿üA‚ú éjô G…»
+xÚíveP\í–.î xÒ¸»;ww4t5Æ5¸Á=×àÜÝ‚»k°>äûî™3uîüš9¿nÝ]Õ»ö»žµž¥ïª¦£ÒÐf“A-ÀrPG;§0@ â`áê¢
+uTa{µ©[ØC
+ÈÉú¬áðŒ=“i@]`.–Î'àÙ«†ŒÜßqÂl€°?¾] Ï0
+ÃÕâhýÏXÎ`k 3ÈìâòLóÌý§:ÿÌð_²:9Ù{þe ýKë?c€À\ÀöVì\ÜÏ>-aϾ­!ކEÑÑ
+
+àâü[ruúævþ«@Œf†é9 êhï
+ktòó* íþ)áëB¥æ÷•!ìµcÂMž3‡NÛJÌ;/íÚ“À'¹¾4Lyø+ô-,;¦…Ø©GúÑÞ§ßUÖŒø9õv6F4µL îQ(ÇZxœÑN¯™hÜòi¯œpü,“¿Æ}ë…{Qõùðˆ>aÿúŠ¡g°¿¯·ý¹s›œ%+NÄ ›>*à]¹„‘n©w­¸ìà0>¦I‚Ôõ’7¶_„›üë%^ÍœKüÉâWöIñ‘ë¨âx&CêŒm
+ä¿àh×ñ€F3>ÒaáÓ®GÀÇíí3IúYbɘ¨•šâÓ,&ÿ$ˆ)66ï7¿ï†%ër¾Ê_îoj_Yüíl§¾v‹w'J‘ñwÛàÎ}¾ÇÁú„l±•÷êµÂœé7ƧøêjܪŸl±Óä½
+™ç
+™zçFˆoxDÔŠ
+’ÆýŸ ò¸K`º•ü~O3¶Û•Äd2.›ïÈ"oÓª›+sÅ¡9&˜qèLÄä÷,Ä”U´Æ—ÀÃâÂ.©éÔ–ÉâEƒ€"~ j´ xÙ
+ÛrɱÐ×_[Ú)±£öô-bݸ= ñÍ —öˆÞXi†šÄʨ}— )Y§(ŽRìº0U²Î<©¨m.[*ÓÖ)EûšÆŽG±W_óâšîÅœ^sÆ•U*âCw-ib|Lñl±œt‚z•ìqz«ç£©•´:lÿ#Xæb¿ÈîmÍ«akÔÊÆ¥is¯Iq8?#33¬YÁ±æ–Ö
+U£p¨íùzæ§—÷7§DË\Ô2éª^ €4¹œ¢Ë0i΃@©”NtiôV øÑ-{î- ^ÒßúCŠQRæ—?S„›P·Öh ÷DUÅ•ôm| m«QR¬Û|Œ¾ÄCún§¯yè…Å>p>7ðÝÀoì#O!ÿë˜V©Ã¥ ÉBMb˹ ëgj„“ñ¹ü·]Ìį?y¿ZìtpKqtŸáçí¨84Îd‹Syþ¾¬Ÿtv­´‰ß®U—^òȧò ²®4-íÌ’ÏŸDáYÜ›wöjt¿Âî}Ä{µóÉŸü^9ƒ›‚'¦Ežbõè>ÝL»âï¹8j¯(¸¿Ò10#·ŸÞy¨”¯_Q˜qÊýªRM­¶#_ì<Ð'Þ:^ìö³¾#ý½¨¡&QZz±ÆÓnš
+0L_ÅÈ™a攣×w¾js¾ƒ¯kc‰ÓoÌòAoÔH”¾•Ým<ìè·WpÔ Ç>£E/óMæ¨
+¢Ãü)Ä‘‹™”!‚¬QMžZVçü£ÅÙ?f t˯f'+jÉ 2& Ÿí¬1~»3Ù]*¦eæPˆÁÃ
+´(®×áú7¾õu³°XDsÎФ-ßæ ‚ä< ]¤UO_CÑ÷ßC}Þ„©Õ7ã«$³$~©T)*üſתŒ?p3Q©}ÇéÉ“h†Ì ?‡'²½KµƒgòëÎA¸t,´ïG—½Æ2ÕqJv¶"ùÄÓ/$zÀ¨Âo>Óxùå„?æe“`µl˜&eo^äkbMšn«Ä6-ý…ù.Ìúo$KÅž =_Í@Ÿq¿úܳ}ïð¾) î†QZ}GN޾Ȁ"Ÿ× k¾Åš{7&H¢ñ©5ÞbTü®ãÔw6”ˆø×g¬F¼×ØNF´b¸ú ¢L¥p1–Eñ‹
+[=@{TÌÏ à¹ä„á£úVBØW
+e?«ïÀï9Ìüï†LßÓ;Rñ÷†yá ZEåÍ´% ¢ ÕÚeªÄ&Ù—dwàšÂ#ºŸ1X*Bè$XË5Qt*Ñ"ŽNÙ²”äÞÆx©º…”éÙ)Ÿà7,5Í<²wážÿð€¿($ò/ öý²ÉG
+©^0?J¹Þ%S0F½¹a[A3ª_NáÒŸ5VÿBÏ~
+þm!u‚±Ý.óû<¥X¸L-åÀ£~Næ;9äWh·¤ý/"Ù+‹bˆJú;ò®Ùf—ùMØÅÆ©ƒ’™Š”µÔ›ãÂYO±"X{6´¸8ÑO YÊd–`+…þµQ¦ÞáÍ–éŒÕae±ÁwmÚÉlSäæøFBîÕÛ‘GšR™Áëxù¯Ÿ<ýö‡é/ûR#¶*w ©"/@€P+JcÞ‹¯_¨L$¿mìS ©—áV瘛hòÈüÀÊ[†;{Øå\I±Ú>k¸ŸÍ6ò®LèWhÊÛ§d¨n%ôÛB%ÎK÷7­8äÇ© )ˆ¹S‘£ª/OjÛœSNÕ[7’•ªq®÷ç„ñ'Æ °88<ÉŽê Æóß>q`™“a Î*($}RÚTžPÐio £·f›oa?ÖxXž“`gôß%î;P»®ùܰR>)5Ë5)ÀÚPoX`¢ø`*7…ÛÄ»'´«®5ùÇ+Öúuïno¬ﮟ9`Ó<´»ÐÜëOÌÄpâ’ÞÀæO!&vœÝTéR~býî¤á’ŠWQ|Œ\!EÐ:¸ çB«eV>*EÔOþÂÁs º
+µ‚ˆVžÍ¼Jæs=Q‹•]28m*~)„2…ß<òY§ó‘˜
+D츜£/3à¹LÜZ‚(1±»wéµM ÓyKMØjY,XpjuG£äŠ3UMx9½gèOl´zÛ~‰ïß4û/}è´÷tUj»^É0Ô.½¤ÄÍ6fø¨·ÏÇ´ÉöH¯ƒÔ³˜-«Eƒµ™6y]Î(.öˆCŒú›
+þbXïýÖî——UçN âô7&#ú³yź)¤µ¤*›= A+Õ/µwªY|§î«Itô^¨œÞýøŠ kc!@Ìâ×Îoé–TÐÂKª¦ÅY&ÉŒåʹÃI
+“Z#ω,VÚ(œ”MÕÛ‚apa®šRè™¶¡#ÖqW3¹©aþHï«Û‹P>koQÙYvÓ}y»´7ˆP%¤o&Ê5ëÉFpJX¿šG™sÈè’ºñÑ Ìã‹AøÖzŽcøáC ô5slì‹vRuÆê=|aOLÙ!ePÇyL­Ÿ< ïíïaàŠ)æ¥:K,…_îãþ+t2†:Šu’&½ïë‰ÚxÀCÒÄüTœîS$°#géDèxúl+ÍãÌÍqä]‡çÏsº÷=5¸Ù³˜–ŸÎÕ{À¥pYqBx;µ Dj/YØ—ý–3¿¯&„¬¥d±ìTâ”qÙ+W{|°[TNôƒñ—SÿP¶§Äh™ïE?ÐC–Êt#½l
+Ëc$9h
+XGô.£Œ1Õ“MáX<´¼¢y¢ѽâ ÞÃÐÓò™wN7¾·ªûTÂW¤ .Î/ Dxh!Öw·%ãTÜHævŒMië„»t*‰‡Šm-õ'œ¨²Exz/s…‘e³Œ£ë›'>À&­.`Å:¡Äíy¶*9Âï¼s*q$x°ë®L˜L}ÍÏ3û„ýÆæ—Âo¼–N#Õ¨åc¸ „iÞY·S÷¡#ÕÎt@
+æ@à§ÃÍ[tW a¦Oc³%r"|”É åoxªn‡8àÅ•Ô6úÞwuÉ^ oG„$®Ðè{9³IÈêÊ£¦9]ÏÛ/FVÊ,‡2§Kv¥mLA†Ü`£ùvÒÞä«ß>ìÌTF”‡OhÏ‹#¬É}D¡j«Ä>ÔwLæEUý•œSm×òm Õ˜_©C=D4É"Û†,QVJ;2IÖ 'ËÆ°jW?EçÆpë«iœŸëÔÊ(ŒlÉ—km?\æ ]«ü+ô»¯òOõRÑÜhImV‚ÜÖvÞžÓJ–¬«i†˜’®ü9~.Åò?AEWðZQ†ú2Šo]’Ë§Ž¦¯F$PEy¸>¦ëD’à€q’_Ï•o[¤KƒægK+Óq¥õ{MÁŸÚyª¡WÎT°ÞW
+ÛÚy—ÚnvI]Íd¤L%úk(““¬Àj@bÙñó0µ§ÕŠ)'ýÇŒ³Rf•±åE*Ýç-å®}€)W ùR Wôœj»•ð±Cÿð81fôêôq®úø×'DÎßÃîÓ.©Â¹U´ûÅKmM™úŒÜÒ¹d¬âyd”„è™Y~¿ôÊ@=/jÉR½è¥ö.5SØGäšl‡e‘ÓŒm
+ÈOâÙ~Ù'V«™S0‡xÓ™8C‰œ†d£Çýsûž"¯¸±]¸ê´î>œ³æÐ|ñ‡™
+Jünqèèרô§Ty½šƒÊ¿¥I·Aq—õá‹Z%9?)¥§üŠp¢#^lÌáŒðÖ„„I’³ÑÉ!´ðKˆ«åWü–¾UÇCÛ¹†’º‹×®z*®éhíç&îÝÔˆ¦ÒpXNƒéÁc¾ù."”ôÃmPU›AJÒàäÝ
+Uf’å¤<k}Ì 8’„›åy1eª«‡¤7óÈu’p¬®¥s(OeTh—{ÀbÿýßS.…ˆKÞ”PJ=ËjgóÜê-Ô_h®*!Ô†—óXÒûìfÈ“7æÂ4{í]ùÉÚÒ‚oyâߟ0EY.Fœ ÍKŠô@ LUOŠi^w/Üê7¼C(˜ÞÚ÷‰éƒÛ~õ¨ºØØÕÔë’K‚qbHØÔX˜‡+…Ù¹=€ž£Zgk·„¹ž³gú²¹ÕpW-;ÏùzƒÎñ7°eO›âðy~⢾ï´m*Œê30V.o ¼/ƒ«ëŒF¨±L¡Ø65<_w¦âchĨGN Œ}tƒ®ÛzIXÈŽ«‡ü¦³ÅƒP†P^è2Õ(È—ÖÖL:u¹6—qéÍq‘Æ”7œ·Ö“íû“¢Œ—oŽ£å†më/û6ª9r~¼xtM—ÙlЮƳ ¤Ë4¯†‹30ËI(o³ÔIäÈ@¶Ô„Î<©´U'T9Eí”㦷™{²ÿ|Ð\¢ˆ÷4ÊNó> ÏÒê(HvÏÆ-nÂíÌìä`Þ0DEâÌ
+ð¥ªT Žºù&¡‰àëvHìÅÎø—â—¨|2#‹ÈûjàÍ­~ v ]_¤sË–¸÷£dLý¶‰¬óªl?@7~ÕìÁf/Ôý]ŒéB¾ˆúT-êS“H¾Zª[Ã,›ìÁD#wÛL­øÍ”PÀ68I…ûs—t5\œB¦Ïq G)fŠ…î ÇÂŒ}”ðª4,m¶Ï]ÍŒš£±éŽ@·Ç"4BËý˜ïÎ÷oŸ¿ˆ9uK…é‚V¨‹Q2dY’㇠•oÐXë\\ÁT7ôéL§ æ“Å=„«ßKì»×…ãåÞB^¼ïñ:e:ºûA¾ºÖˆ…Ø×%YäÜ´évJ÷\«æØYûùJV},6>Þšv½øÈÏi÷°6™’^¸OøM–!kÚ^Ù»<l‚'ƒvØCÜZ{óâË!3’î‚UDpì廚ŽgŒ}ÞLªzî…’b_V©ò-DÔ7™h~úÐcÅn»aV¼þŠäãôî´­Ô8Të/Añ^»»£öQÁ*I9ŒëMö|±s£[CËÈP¿Üù†«Ëeõ+tÐÍ ^‹$¾qobC!,cˆqÕÇ_ÎÌuMÔÌß`ÒÔ0Ù˜ú¦BÃညàŸJ}!éGs19lÏñ»Ö—³˜ZéGÓ*HËH"$o—¿Ub-;¶e;žÑœôGé?Õ¥AÉP§ãè}/¸½B °}¬<‰6Çz«ë=ƒS`ü¤4#\žÀÁhRoÜ;½¡ó”sTocíLÀä¤MøX÷ÓÃQ‰
+½å>V·.—
+ÒÜîªQè]‹*ðåVäIw8¶ñÂi›M‰œÌ¿$a| ÙòȱV¼ó i×6\…¼“Dýð¹¢\ý£¡J©ÔK•¹¡áXl¥ÝöVƒoÓÞ$âbÌegž#ñò¢ïF’pÌ ¯Úè‰Ñ^rÅ
+¥›S+YÊ;Ūìâ?¬_§IÅ>Ø7!ÒÇÏ£ûQ
+aÑF"$²¯Ö­|3ß!i#ÌT<ÆK[tô p;w»Ô.Š[°
+ £M~Ñg<ÇÿšâNÜ~¬Š$’
+œ\7±?·-ï¿ý÷¥“ MEo,ÖA„&±}â÷ÂE¥§Þ[:Ö¢•P’º‹qݼ¡©Ù¾u¾1b’0W—¦‡WG&Ù¼2ª¡t7· ,Îĸ—Áw¾Î”…uÑÎŽÕý9f8xºH]*ùY=ŤÔ\">_xÞä¾dB²a×/Ë—œ{íÓ›ã¾p‹Ä#åN³Œ„„×ÙZ¿5ð
+‹¢T4ƒ %ŠÑÔfj ÂÅ4L7¹ág¿«“qàïÖÈ@¨DDF‰šO`„®vÓ(…dE^€É0Þ±½ß­O{_õÌ¢„Îú‡Rô¤ê quâat¼ÉXe²Ì¾ÎKä£^´¹î¯é,’Ôªy–„ø<œ§c9\`9[B½‹º‰¬ÍDªc£ø,̅ò=åÃÄ3ª"&‚Œ™ž :XKdÓNBl|ÂX y‘|$F¿¼EcL;×Sü¾g*›EHç8’‰¾óűŸôûNYµ]¿FiS_q³;¾‚AiœôÂÑÅúÈÝÃNÞ‹Üwæ¬J¯@Ï“¡–ËG±M· 3% ÍÀ·°XÄ óv¦18+M“wÉâý÷8K‡ó–ŒÀ:ÉÉ/Œ-y$"£âµ°S]{:‘)EÜYíkN
+Ä¢ƒ7Ó*e¿§Ô¥Ä‚¦o‚¶n»éPà:m;Zd%«xc¥Nâ™aÔŸ?¥=€ýZuxçY+¤ó^¡Supã}ÏC£Õ,ô\r”xW)<çK qm’E+Ëç‘‘DÂó_ïŸÃñÆ@V7³îÒ³3›”a¤)dÚ?·Ý‰@xäÄÀc”´Ï0̓ºÏó"óâ½û™µrJóòZ˜JÅ›=2Ónñgkù"áz@éóa⵬å½µ?ÝæöP¤!}•-ҾфýG¨ÈVËs­Rñ²aTRïäËâ‚k\Ãb¿U¶.ÁãgößvQ¼h-aó•âœrfAÞ€ÊUÁèDZ$ù('€»¯LM£/hj¸ÒRöâfòg ¶ËާÝÞ»'ûêºn ³XÍw‡W×6>y~ëF—Æ”§üŽÓúÝ—HÒN•Ûë{Bk}ÒLþo†ô&‰¨¶ßgÎ~Á¼Ù„¨;¥rÁΑ½‚ãi?:±{Êc<ű26ÏÞSˆS¯ÉIy¸z/´Oœ*kYi‰ÙË6lRºQÜqà
+8¾÷z³ž“pTÞC»e1—´}FyèAò%Ó¼&Té³ ÌPæsî'éÄÕH]†ÌBøÓõöa"unáQaÝ,«N”:FÝÑû£i'Ñ£1»Ö[¤$ëêj€þFuÙ¡dò–MÏ~Ÿõ½bœ¶¹k½žØMƒGµ*‰ÃG”0õé ™ØÐ€BBVÅBZ_Âë /y LæBÀkˆß–œ2}Â)<ª2{2nUb^=èΗx¨oDÒš6ž_›ÊXÒÙÜêÚÐ×x¢–ÌnM¢É'¦WÍäŽî$ 9Jœ )o¥ÇH—ð“ q\£ÍÃ/Ïîí3
+†µËÏú蟥çf³ÖõÄ›M÷|!¶g#=êŒ.wtCìz¶u¥'}ò°˜_¦*›­PtÜaŽw’ëöR\v^ èTª(Õ:¢_ àT·Q¥´æd…úê’ƒŽCð×F³î>{ÄÉúÌÕ‰&Ž]bÑØ›Ë+jžÅýr¨gt2fÄêÚ+ÏÞ›í–j_€âY^
+ë1£äª .WÁPxjSÞI#Üʪ֊ çtûuiš!Çî½ÝSo·×íÓ8€+zqõSÈ¡,È!ë*T¶CÌ]ˆX­9v]&8S/¤ê`諺aÄcmHê–ELL.&Í·c_ƒ²ÍçˆSÈ<:~¦¹OÅ;E¥5Íq˜ÙŽà¶?ñv— nŽÓŽQ|oyèNÕïo磞YHºÜÈ÷”L¨·½ÛìC$?Màc¡"ÇN7ÎâbLnÙq:
+§¬ì:9§ËY×ûM¹6­È"Ù~ÝßïJ™uz¢ƒÏCz ©aÞÉ!âÚª8µs¨•<Ä× Òð쳯†²Å³XcÄ*3å²›Ëj†Gˆ4£j2Æ÷Q@\}’Tyž¸¢i¼á8t‚ê·ý†ó`gh‡M£ïBD¸ëÙ›0Âp^*•-ºkjÚ·Z»æãÜd¨ ÅüîÇ&n»$q‡˜,[ijK„½½­%¡“îe6eS. âú˜ˆfÄ®ý>e¾î–â ¹¶« ŠØ£>;–¢‚/MòI”¡øi1-ƒ
+¯‹3ÿ²]inÁàÞËDÒ>{ÓЈ dx—v³©lò9 ‰N‰+¶¦zöÍñÔ#é)ó\M£[s@Z›ÉR'õRÇ}ËAÕNQ¹IuÒ.8þÌÀˆ‚;a?ú“‡ö8ζÜ8ùx ÐxoAy橵"wðõçÆÛƒã)ï¼àì…ŒÞ Ί@ÌcKÚ_Ù¼Z‚{+ˆ•\£\hr‹v·ñjÉæÇ¸((%Õn¹ð· V•BòÃ{9y¦gN°œ fµv*Ûï›s**o™^þ(Ú‘r)`lV3°ð‘öTÇãèή hYmš´0”ÚÊ÷8K¯6ù€›§vóÉy“Æ 7D倷»ò§1 \eÌ}¯ø§5ˆòþ[%fvÄÕ'œbÛ©ö¦&©"ò­ƒõ4ìË*Ã5[Dô`1käý¶Õ•Ï ê`•rM<4{áôUC÷­øwݲðãT5cï¨ûët©„U0í ¶»©kµG#G”Ä~}±yôd¹üÄI!ß©¬ÐGÀEîn‡NOí¬PË$‰šÍµÃ‡WgÞú©é!q@¥{ß®ê7ö$¹UÔî¸ò¡Pšè¾Ð›ÍA©a•bg¿fD(s ¥ùv®gZÙZP€=NÕòä9èÕ&çýw…$H›Àì×Eg—ó¹-}>LÁ•Ó¦4üF¸pâX•*À¢„ƒ0¸LM­+ª[‹Àãco®OóbÖŽÓ% Hé.. Ê X;éôN~'R‘`&‹¤­óH–$Ѹ½¤[*¶–›< ZG„‹m8Blà ‚`•‰
+& ùf¾±<£>W†2<퀔ã*õˆ¦¸ïÞºÑbï)£(]|Ͳ7.ÅBêOo_™íí—I>Ĺ=à[väÍ$ø¸ºBÎk[œ y¸;ª$Ô¶VÔ¶¨ì+Qý †$·fø‰AÙu­õ€•ô퇚|ÄS)¬ß©ãb
+ÞëÇáØ(>§"´Ô?"¸ÔvÂj“øÓ‹©OïDkº§«wèKêfhÔu­ÐàÕ–®L~vsÜLðw~ùŽø›f÷ÀGY¯y²™)¿ÓbOú©ogɺeÁ]ñ¡—êÅÇêá0 ·H—c<ØÔrZ :ÁÀ]>Ùã‚!ååÅÈØ¤üð¹‘c›€ù«ð#®QÆÂùOsYŽ\$yÓ&ˆ³±Ò„} ÏK÷ØÈó¢ä(ä&&¶¬SÊŠ¡ÊÛË4öË(d®NÏpT¸ #;®±õæü_>ÿŸàÿ K{0Ðu
endobj
1237 0 obj <<
/Type /Font
@@ -13176,14 +13185,14 @@ endobj
/FirstChar 35
/LastChar 122
/Widths 2622 0 R
-/BaseFont /NHZUOZ+NimbusMonL-BoldObli
+/BaseFont /OUESPF+NimbusMonL-BoldObli
/FontDescriptor 1235 0 R
>> endobj
1235 0 obj <<
/Ascent 624
/CapHeight 552
/Descent -126
-/FontName /NHZUOZ+NimbusMonL-BoldObli
+/FontName /OUESPF+NimbusMonL-BoldObli
/ItalicAngle -12
/StemV 103
/XHeight 439
@@ -13203,7 +13212,7 @@ endobj
/Filter /FlateDecode
>>
stream
-xÚíwePœí–-î$84î'¸kp·
+xÚíwePœí–-î$84î'¸kp·
‘-Ó¯*­^H «ƒ+zž/)-O_‘tŸ°Û:%´Tœ¢`\íéÓ´®â·;гYâ’ïsfȇü·«7 qµ-Fõ!¼rÛèy^®¢Ó·£‘“D¨§¹ÅQ”ŸÍŸNˆ^rcÃFyKjÿè§ ÃVLEߨ²V«ØõœFS²$(X !÷{©ãÆ¢p]u¤Ñ)Ù§AbÒë±N/†ïÝŠK¸²ÝÀ`}HæYhtªÔÓô^õ“‰IEi] OtÎŽ‹nêô*žaÍÏú±£“u•e MqQ\†â¨óåy£=‘)Q³»½dy%‚ЈFÇY ®P.YS?‡‡Aŵ¨riAš¥ê×z~ž=”Á‡éãÞ7"ïù<ÂU'NÿKó
ý…õ©–Ö/L¨Š?ç;\à Ô0®rËõ Ê{àâµ
™Ð³°Á%ŸtÆÝ?Ár¥U} Ý…½ý5§)8:RàXt
@@ -13248,7 +13257,7 @@ R‚¿ÑRx©‰¬3; \®2?®ÛA5ÕtµaøÎ#•xˀȟ}ÜÁvJ2Q ÚpvŽ›Ì¬…êpÓÄüÄ&Óðª´'xÉÓ·ûÜÎ@¸”º
9àË&ïÎC+
êêv7æLD¦÷Ÿ™ øå™Üz7ª ¼4<Üã"nR»ùAiæ$¦m¹ÿ¬e­ìf˰sðÔÔù´Ñä*|=¾_-©t±©&rMÚ«”Y
ÿQ«1bÞETBƒZ ·NWN܆XÙkO3{ÇÍnÏ;NE”þZ´Ð.ä #¨%cÁó aç-!s®}Px¸2 sÌÛŸ¨,³üÎ}_½â×!ÈîÇ~‚m˜¹¨è²kµÞ2êWÂÐlñ+h¤êغ¼ˆ£o9s÷ù)Œ)æžðˆ^O:啸®ùîŸÀÝ~¯9Ó™QûŒŒ.˜×ή‘‘ðI®$«"m—{é÷Õ„7œ>Y+ØTîÈ^Z¤®Õéøu½H¿|d×ò&$Ã:‹$pfŒë^ÆÏIì…³|"J(=/>ÛL¡nÉxjbi%q×ßȠߥõ›ü˜ñjúúˇ?ªÖªIÍ*)›ÐûÖªr5eV{q‹œc
-G,ug󅯼SR·ÿ´ûD|Ö˜Y¥¬1 `{u&±·& ‚º[dy$jqhDiO<
+G,ug󅯼SR·ÿ´ûD|Ö˜Y¥¬1 `{u&±·& ‚º[dy$jqhDiO<
endobj
1229 0 obj <<
/Type /Font
@@ -13257,14 +13266,14 @@ endobj
/FirstChar 34
/LastChar 122
/Widths 2623 0 R
-/BaseFont /RLUFOU+NimbusMonL-ReguObli
+/BaseFont /NDUPVB+NimbusMonL-ReguObli
/FontDescriptor 1227 0 R
>> endobj
1227 0 obj <<
/Ascent 625
/CapHeight 557
/Descent -147
-/FontName /RLUFOU+NimbusMonL-ReguObli
+/FontName /NDUPVB+NimbusMonL-ReguObli
/ItalicAngle -12
/StemV 43
/XHeight 426
@@ -13284,7 +13293,7 @@ endobj
/Filter /FlateDecode
>>
stream
-xÚ¬µc”¦ÍÒ%\¶»Ì»ªË¶mÛ¶m]¶­.vÙ¶mÛ¶ñõsÎ̼³Î7¿fÞ×ZWFDîØ;2“„P^‰FÀØÎÐDÔÎÖ™†–ž kacèâ$cg+M#hgm økd!!r41p¶°³6p6ᨙ„MŒ
+xÚ¬µc”¦ÍÒ%\¶»Ì»ªË¶mÛ¶m]¶­.vÙ¶mÛ¶ñõsÎ̼³Î7¿fÞ×ZWFDîØ;2“„P^‰FÀØÎÐDÔÎÖ™†–ž kacèâ$cg+M#hgm økd!!r41p¶°³6p6ᨙ„MŒ
Ú¹¼h˜™
ÿß­tþFÄÖÈÎøŸ)Qr6°5þ;XÿËðÛÈÅÑñ¯žÿ:ë þŸë¸‰‰»‰Ìê’W°eZfºs FîЄ°V_èPˆ}I½rQ•]·_Ú¯Ž
ýêÚ†)ίVÅ3ûÏIÊÑtk²î“«|\ŸŸ½È›¤ílT‡tº%ðéçjQ^× ÒÛ`š¬ôª‡»
@@ -13344,7 +13353,7 @@ Z®ËoÛ4ëŠ*s³°ütg†©NeÔú#‡ßìF¹¤¹K¸]C•f/ZЪ}¿@ôFêbM̼¦K´ØËJ®?L›^ëåɼo¬àÜ^Såõš¾q
VÍ]êAy³XH±ÔŒèyÒLåýkoù"-Õ6_XŸs(GÕjØwOÎÃIÕÕ\‘›"NÚGvB<dÎ2æUøõÇͨa'nœ"dáõj›K†·…éÀaµ*»Üz^YCOs´’âUerÕ3“®©¿*̶^qèåSømÄ“—´¿Ìm+V#.MïäîuS³°¢º ½7Rz·Ú•DÊ£{ót§UYEzØ”Qù-t²y˜’…[ O[UÜW¨‡³!¨ï5ý ¹yK=n¸±u».5®°Rë¡fð¨,¸V2›è>ÓˆŽ…¤Yô·ØfàÄØ(ßÁx‰!´à‰%žM>¯Z)
å"UØð;z¯Ãg«Ô«¼L’"¤Ú-Û‚ Ÿ‚xwÒ×~ e]bþL‚¸=V›Ïóð¨-ÁÅû”Cª³;ÓÖoä®Í ¨ÐÒ&CdÊÜÞ<_}9Ížsßú–M©’£ê˜Eä‡S+ø{ðåÅ1Kg¥V£2¾ÒÁ5«È–­eéýê õÏŠ½SÅöÁ…®ÙK¼TùГ®°zc†\wír,Ö™yÆTôfDÇãF^±–ýtÚ|¶«w]’ÂйP
¿,:Fp\îŽr|0`Ï!ÛÍéy¾.Nïè^(%×½ñ>Ü0Ø]^ÒC ‘$®Çž5~<ðrpÊÃz>ŠPãuÍx{¿šècAÊûß·™ÍZÆ~œe·9^|Ø™ª´:öÛ9½0 *ÿ}ôõW'¼D>½³}=à -zžûcêÈ^‡õsa`ÔúþçBº&¿¯ÈÀ}Ü–#üÝ×õ,¶…ð€5nXœ`KÃ|Úªup´ëqª£¦Ws•³Fþ»‰ûë»ÕnË·+1§!NqM;Ú¦”+1Åôä@2Z œXÞ%ÉŠû:bj
-XãÙS9´½ AÄŠ›˜ì \¿j‹Gq‘ñ YÔ4Ûûª2x"…þ€¦Æ">5IåñOù¼Ðù)þþbZòZj÷Ö›ŒEŒ×©8Œ†–BY‡tç÷]Ü þ×™¢Ë€9£ýd%ut o¥tÃØ_‹Òs¼#Žp9Ä RsˆNóÊ Aα›‘my_êB[öéNU9Wɶ¿~›ê?
+XãÙS9´½ AÄŠ›˜ì \¿j‹Gq‘ñ YÔ4Ûûª2x"…þ€¦Æ">5IåñOù¼Ðù)þþbZòZj÷Ö›ŒEŒ×©8Œ†–BY‡tç÷]Ü þ×™¢Ë€9£ýd%ut o¥tÃØ_‹Òs¼#Žp9Ä RsˆNóÊ Aα›‘my_êB[öéNU9Wɶ¿~›ê?
endobj
1153 0 obj <<
/Type /Font
@@ -13353,14 +13362,14 @@ endobj
/FirstChar 34
/LastChar 125
/Widths 2624 0 R
-/BaseFont /NPDTKU+NimbusMonL-Bold
+/BaseFont /IEUCGL+NimbusMonL-Bold
/FontDescriptor 1151 0 R
>> endobj
1151 0 obj <<
/Ascent 624
/CapHeight 552
/Descent -126
-/FontName /NPDTKU+NimbusMonL-Bold
+/FontName /IEUCGL+NimbusMonL-Bold
/ItalicAngle 0
/StemV 101
/XHeight 439
@@ -13381,88 +13390,93 @@ endobj
>>
stream
xÚ¬·ctåßÖ&›£’Û¶mWœT²cÛ¶m§bÛ¶]±*¶­[ÿsºûíqnß/}ß{Œßšxæ3ç3×c“)ªÐ ÛþŠÛÚ8Ñ1Ñ3räÍ­:;ÊÙÚÈÒ)Mlpdd"@C's[QC' 7@h ˜™L\\\pd
-ŠšRò
-üªm{|ÓÂv¸* Þk‚é§¹?ÛÜ—Ní>ö¥©F{1­(zR€—ùøÞ$T}¨›ä4 z%ˆégQžW‹²ÛZìŒê»“JÊzÅïPß§;X`®ž¨üH\
-üÐIí|ŒRëc1:QA¾Õžž‘'?=R Ž õÜ@öíãÑäÄÂ’ñ¸@ ’GúÙçà h©Ux†SA¥7!àÝ´_}jt{êå‘‘â’FX˾*šæ¯Ù´Ë¾'A¦· ð&Ê9H¶îWþÀ¼žŸŽäJœæšËýZw&sÄâmŸ
-쿵$ œÉ„®'~
-j8+¼="HOló‰à|V”LôIŽÅ_y·1A‘T5dSoEy%|Dm3N†Á‡P¥{ú¼ÞÆÙˆ
-šÔ0ã#¢DËFwˆ(¤ ÙÓ§~¾f%ž©Y·˜"<Ø™Él¶‹Ç¹ÿúä2Ý©²HˆîKöÿ¢Õê’2|Cu˜Äï4‡Ùb
-dÇ$[ß4˜h3iï*#§†]Y·6_¡$l¥—\5Š´
-ÖƒGÒgÏt7êz \ÄØSÂèÑÝá Kz¬Å~»šF£¦s>y{­)ÕCóaÑýû²Ú7× Ý#ÓF¾o¯Q2v3äòÔן¼xÒ¾#x9s¬(ÃÇÊÒ÷öUX7Žqb‘ŠŒHö;QºÙö³ˆÊëí:²5p,sÍŠ˜VÚÜýXQý3j .jWô…¼¬[Ç2#oîä2’«²6¢£yé0O ÙÓËø8³)Kz¡l„ïzä^骟|‚gOH)àY îó¸¢e¾,Ùê›Ì,ðŒ‚þ²Êsźy&Ê⥄ñϤì*“@bKiyäúk@WÁ»¾/ÿë÷îÆ5 Ï##êáù@¹‡ŽRƒ;ÇË6ÈV|¶å9{<)¼ç QU+󨉬@"9ãå·¾9Ì-–†Æ¬»î³ØŽÈ³¼…„e†t Y.ž±áWËÔÀ;žš¹„PfÙWÐBNûŠX÷a|nÓd5ÕR©¡Ûo÷¿]fǧ_$¿å0[^ž‚IpƒVzrEÄsÜó^Á¤ÑÏJó„½Ë®Ïô—qŠž€3«Çþt¿ipôøÉ¼ïÆ/ÑøµÑ7d™§©M’°{<1†/ß{€"Ãg'”Dnnë«J0 VkÜ„},j6ä²6”ª ’nå'Ž`gâ[ö
-õ Ò””d³3þˆA*ú<ì;»ãçëȈÏÞr‘U¦Ξƒ ¸R64yEIÝ#ب[@“4ÂS»Ð¯«±÷è(pÖg/ä/ÄX»ÐÖ@­Å»b¾äcŠÅIî n¿¿„îçç3Ã"çU=^ó»\XºwV¯”¡ûB:Ï‘
-[—ÒØ$ ´zEø}:µ`s(éHô‚Å+X—³÷¶*5Â^ÁmøÆÊ$¶ïÉéGH
->êò:Û†ç-àñwN‰
-3“7º]Ç }"}xt¿-i7Ÿè¹½‚•
-üƉ¾ÏÑüІž@S&_#‰= ]Œ% ešPІ¼RŽ”oQÈJt{¸œñàº0ê8&ò½A"zXXª‰„^i$º@õÁh0škm}…“u­@îK/²OÊ\®zOóu#«"ùÈR.¯AÇ„ŠòÙôÐJ©4I°muþ`*?섨0­V2
-p‡÷/ó¢nD(0ÂD
-[Õ%:P+t¦*5Gil@ÐvmY‘ ‚œÁ‰~¦S JÖjn5£ë—ðys¬Ø0ÒÉð¹¼tOC»¯‰æ÷­™ÄiÐDX¯Ð
-Ù¿®;ªôŠD™r]9@èšÌˆ“ÖS|æ[Û, ('|f¤~}Ã!Ónëw¦©®n”Š\8ÖgK½Uz:'=*"Ô›%FWHO´­Ú³ÒèÒõÖDÐ_|ÌÎ\ê\Û
-qá‚ú a¾ýGŸºî“•e
-™âîÑ~)Ü“U‚™$¹ß“ñA=‡C“ü‘:³œW•Pv Æû§hbÖ¼ð»AàlmoÎUÁùË7…¹í \~3È
-ÂÏå±äÑs‰TNŸ +Ã<ˆ•9O¶¥fÈËDˆF§‹ÑÉöY廙l›¸·°6¿33ïáð\1ôb° a÷ Á{ó|³m«é*Ê›}½"é?Yš,µÔ¹‹ e§úPh‹ŽŸXEô¸º\©çÜ[ëgøV3C^à ±çSø¥$š ƒÛáÃ:“É»®’´ ð¾ˆïÅ^ƒÑÁ´‹¶ù´ë¬†)à!jáìKøGR~ŽCkCœùŒBΔí!$ÐdÕˆV`¨­\ ©n¿»Gó§æHðnê Úïvœ&ëÌŠ":—íÞÕ^"Æ;bÊz³N¾0UÅÕ–ûÖ1ÃÁ,Ծ㢫|7ßoV};º:Mý³éØc£ôÂà¤=™MhüCÔgaì‘7¨²Âˆ±b®5_¡·¸/ H:L« >r>Õ²"™y£6o„Aù±RQ ¼“_;N\¾L©µá%7¸àÀ‘¾g$µc [ž Ü80›=~Øü.¥T¿†ñ¥™^šW`/ž$8¢%S>ô”æý XÞ$'ñ.ά¡¥„2Éÿoƒã;At«!Äò‚´žÖ&\Åžã™dn£˜kjÓ¥³< -YRç˜oiæUìÚÆ‘ÌY Kî%?ê5TXrz¶ë[È/¨£=gU0‰Ü„€UShW´1ûºzcw™>ÔXê1§†S\»²3Š‘ÎBaʉ@,ŒëÂ?/ßu3u¤ð;…®MXÛ;Í0¾z“ƒE9–T¨ÕÖ[x,ÐÏsô1Æ÷Ìó–Q£×©VNcÌ…ËrÖs,¨ ³“eeµ‚l€N0j—;î
-??zÜ…¤Ÿ'PìE¶e6¹-Vƒú£ò>áÂPe†–½Í•Gèf5©{AuÔ¦JÑø^V¡ÌP
-:Ù‰4GÌCe*Z­:?ß"íÖŠS$`ë¾*~=QîFf†£¾d5 ?Užaú9v¢÷"“T!KÈ õð;[ùÛ
-ðþ¿$ vCÎÛš,Ù‡¦_¡ÌÐpvœY4Ô}ay=,”¸Ý
-׌’üïa,ZÆ¢O>c!Ö’&,î—AØ$l‹ˆ4`¿Ì™é„G ‘9h{±I K­àôáî·3ÂF£Ýйô±Peûw
- 8ø=ÇC¦ñÙ"ê®ÒL¨ì:0%»¸vÕ´HƒŒ?˜ø¾âù¢õ3™VF _?Òí)Û÷³qoTŒ²>ô£‚ùvî[±~á+Ó ñ¢øøhÂ…ª>çV©Ã{‰iÜÁɾ,ÓPhF°1J4‘÷Ò.’×l"ü<KÑ*ÊûY•eûÊ]XODÏ^,@+Ý4‘‚èbiœüÙÄÛù§ô¥‘mJ÷e g§÷H9×-7,z3’ '‘nKÜ‹)«ZÞu¯,Ú.«9¡²ûÚ3Ö¥$¯Ü šc
-9P “½¥Þ8€Fl‘…RÜ⎩r«'¶&ÍÖr+v¤Ì•³7_¾‡ßm/!ÚûÑ9òÌÀæAVÔ•I°ÃL"ö„O]á²Â!³™¦WD§w<·¿ `Ÿœõ[ï ¼¡°)!䛽'2Rj:PCøÄfűbü]–¬L¡ÅpÝ·mñª}pÜf†Ë ÑSYá‚ë^0Ñx‘Ê·€ýÍEÛÝöEô7N‚)ÕmÑŒªæÀ á7Š•U÷ↇK›—ß²9¯É,‡…ŒŸX¨<™¡ÌÅ…cÆ"ûgÚùÏ=j³é b«*"ìëLZaì{oFðÂ{¹†âMAÆ ßQƒ(°Á0ÖkøcÇǦŽtDþ<`N%ìy0ÉB´¨þ•PPˆ?Ĭ‰…šåxùVày»—.Jª“ÈÌë/vg`ž0zðõà~¬ |ôiÄlTªœXöA¥j–çW¸ӷôµœñø€l/^ôŠ^ÿ‘XÕH6«3d"Èî:¤úá_T`‚¨KÆ÷Xž³¬¦€­À›†ÚÐt¨bØ×82ºÙ‹°Y
-g–w¸Ò_ÍÑf4…,lÕF¯tçÜ äÊåšv…è0 ‚Z„•åIÝX®E˜w²b!ZhÙ”áÉTëkS¸¼SÉômз}P¼½ËiGýÖ´b Â/ÚãzNÓŸylQ]*+ ºÞ"†V!™s¾Ð›Íáüô¸Hм‘ôCÕ93Š+-q¤Õ01=*ã±ù¬uŸrÀeÂËÇ
-{ÃbFg#‚˜–lyù>.i¾™?#E¬4*872lºGÝ›ü”òóÕƒ¹óšAúa§¢+lµh ›¹cÿ[ÅU‚·_Q'ï–íMÇ7&U6æØ‹{tÍ3_ŸÔ_óerˆ$q¿E½â>$zr,¾.ÄBËëDÒ‰ú@û‡ÍDü”Ä­wPL+w1xàKDTjã_žKU÷‡Š¿÷ðN€úè±=©C; ]‹‰ØÑ\z©r¸úÕ~ÈK*¼Æf:²}䥳ý]°¤Bu›B<+2¦ø¥Ø×Iÿ§½²¿S©ôûü¨·zM­<ƒïˆn1•ùu›Ó÷^Vú#:.æ?¿yÙž®ïµá§ðƒ£|`q^ Iš©åâ:kÓãZFMd§Í‡ˆ¨><…÷Å4I)'16TØÍ†Nß°`‹ð` [€r óz‡ÅÜl8±§ ’¹Ll[@Æh_ëí; Hk¢ÉjLÁf'‘Ö%З&så@µTýb[Ojöß 0®šm-Z‡µ<"ÂVç­wSp#H¸Í°ÿ,3L\g*±Ý¾–Ýçpg¡’^uІªH%a€ÃuQlàÎZK‡B£vHÕqe·lAW`¬úÑ–îxüFÁޏ“Õ7º¼Î IhB($y{³ÓËòMSô~¥ã # Z|Ѻ6Æ×c>ÁB’Y”ï‚*¤ÓµEkèið„ûܲ²ê6ë#¥ÊxNÛµqqŠ®k%:ЂÃÏý0{Â4Û¤8¿ŸJØTá‡ð~UâjçµDg,Vå|ÌÙ)îmÛ ÁÎ n$;ùâßÎWûË)6{ô2÷Å1§ßÿ2_Q.4ÓZxWG)ûqŠ·óGŠõ{RÜh¯ºÎW¦ãrzÞõÈÐKËDä]Üw¹Qöº¯G…\å# n—ë{aæÆŸð»Â¯U"¨k;`aEw}øŽ¦¢´Äætf µŒu &ßéæsÜk¶Qk¥pxNšnL’v’Ô(|)²FðcˆÇY£0c…‚Ø0cX{Ò}hƒ¸eÐúƒKŸ:†ohÁhdYÔ}îw¼Vj¾]½¹cû¦wní†PžQY@V)[7ôU5:Ò³ûÑ
-¢ðBîBZYø ¡QÚ÷¥Ä:_}ÒbeÚ*r³9ò”¯Ô¿åÏ{ݘéËáªÝ]1÷WšeÂ…5âo#”‰Nb… ¨ô>¶ïÓAÎì·¼žíÉzàá]M¸Q»„)ˆ'°&má"²‡8øg+Gž‹-¯ðJÁÙ¶(!‚d%šò÷F¨é’‹Íü0ÓK^žŒð §.Úf9Õºi"‚Bœ‘תÂh<MÆOOìu h9ž&ZO{èìxö6"÷rWNÕ6Ù$Çøâ0™…´žUîÇ>‚0æ£Þ·/Dž¿V™¹6j©Û̇‡o—
-_0ß9ø™Ü®Á³@3&i ¯)BBD‚Òr8ª¯sÿ’¶þø¶6ù5EåÇÁ‡›3§ŸÒûišI©R«‹ª]S¯Ðeÿzý!KþãÑÑÛ7çÙ96@:áO´ˆE(Q`¡W¡ÐêgÉCIà¶ œ7·@ªÁ×N~ðOÎÏL ÔšîÑ„6t>æ€ñtFt&QòŒõk©ú¡Ì: ZBw˜0.•Ö
-X˜DöBà矉uƒRá±êëŒãù³"‹‡»½øS,VëUgÈÓÑ×Hë‡ Ö•Ø®ôh3ßõ½@gYa°«¯ÃK}\)ÚÖ„èoô}7dÔ{Â+ä’רþ‘ǟúiæpC8[bk%u‘I0: ]¯úíŽI*]¬NꌕԲî<'âÌ€Dq¥1öYßþù4ˆù;4Ù´Ô˜¥^ðžöE›:ãZ”¢‡ÖãßhSÁÒ"”‘æeGq ¿¸ú‚Ò®ˆ÷ñ"‰v=}ç¾ÌÅ%ű;>RÕw´ºÊuú)DãPèñåVÂ-{ i¢87£rC ~zIu(a=/åÓ`éÇ
-`JVæ€ÝM?Ë-*\šFì\q¬w÷4³Ç"Ây'LÜi æI²úвTxÝCxEåÇ7#Í=䬯šÐ]ÏÂ)9™šj^wpŸiuØ•°I/9c½šÙ;ˆ†YÂV%íÇ’:ðgEFÙÒ·O(–qS”•=ŽM.A¥ó¾5Æ·ôŸ·¸PF×/ *ÝXåï·Dê,oö°`ÐO„&ÄÓú1¢ç)ã”au§4‚x­¦"ô£šVKnþ?af¿½ðÒâº-©Þ(äM×4jý€‘âª[ Âx06Ä–3± ÊbV®gG¬$¨ˆX”£þÙ]0ML]B@! !k“ö'9iH„%7ØdÇýý³ê«VÂiH€ð‹Lêõº «§ÜTÉMÓ´1=1TäöÅ¢ÕæûH&LÏ5« "ŒúÞ¶jªÏa1¾5e‘ׯŠ9³dfƒC|—fS}½Á¢^3²Ry€!©ìcÊ^Ù±•CyÞ>æäŸGY›µöLˆ²Í+ðüw…¯‰‡›]E™†ÏIœº#½Á”“W¿ig/€¶0@hçnlÊäª5Áç®ýF6PI¥pKˆÈKUëqßoÁÎJôƒED=§É*óS½PlBø±a`
-^ñ2Ý9á4GÌMdHä:a,h&y að;!Ù$õÖaÖ8|Z2ÃdÞ‹J‰Óc—…6‘Ñ}Äu"åÈÄ7)õ)ÚÞ”L#mõ0n—Ü^žÇl¡~c[øïz¡AèÖЕ–êÍ™qùÐEm)PF½÷¢xŠÔ–ŒisØ€ç³D6 &œ<ÝÍYï’Úl¥ç¬œs·ÚCò£ypKWFsš£jƒ“ÃÉs ÈÚË~
-¸š4?æ·q|CÇÂ[9ËÞnÑŽ¯U…”kCWvܾOøHB ÔfGpÊñ¦Ú™uw"£Û¬‘M+<ÂREÍœËâ`Ôщ) SßêÓk3—ÌŒÊy‰m:ãs‚êf“Bܲþà ĨÙþ†¨4ÃJ´§ ¹=µ¬l%Ž»Wa*ÂÎK6#º=\{œ˜{áÒBz[òaey}1i%œ1ˆpÊeDNi±`à6^¥
-“V-Á …ê©>Zw>î^’:ðëÖ£,AÎó=a¼PP?N}“­8s3zxC4-áÙ'Ð@¢¯Äa0½ÌåŠ&vù& Ê«¹jÐ-OB;ó¹bîAl/­äÝÈ»÷ #o«²#yÁ?.¶Üè© ®Ï²
-sf"7íȘ'z½½Aܬù;˜-Ø„º5½ŸPoö’RnÃã—§cÄ­d>­Õ‚ëmOévXš}Ý…["äC»Îµš Ú·ñfº ?jÊ…Šs$!ϧmAb÷yg‘Õ3–ã¾ú©Ÿ™ì‰YÊIÚÓjû[«Òaî ë—e·Ù{/ûÀjÂé‰õÙÊZXÀüì˜à äa.ð–Ïæ\àß›¶üؼ¾~ ê¶Éþ¶ü5öZ š‘X’oJQ˜iOÎãÅ[=Z)é!³»&ç–ÃîIëBå\Ý;»"B7›§ c)Œ—†Þa%ó‡ŸTÚÅLn_´´i·‘c•udg/U†Å=7
-BÎA>ȨÅt»î„ÞñMt7¡Š:»ùœ=2>ï((Ÿ!{GÅo’8DiåGÍlœ ÊãVÍÒUŒÖº‘jÜ”Õíë
-ÞÐõ)δ¨ŠP=¥ŠúçÇ ºÚiÓNRŠÓ€„™m:ô¹¾@1??¡– ­”x!MÕT•ÛŸAsË•-&I˜·ö@ãݪƒêE!F_Õç5²î´ÛT² «ô±.è-ó°{m”´YÐßžëÈC&ÐöºoÕ¬ìêW5iø·Š ¹Ž–ðûï~dÏFœöN{uÍUg¿a`BFtCÙ¾VØ-¯Vâe*ï@ì @uòQµ ä8L°4§2Ir©¶Ð“†¤o§¿Ù §¥ëÁIÆtPÕ'ÆiÎâsëŽÉÇTЃF`Þ™0Úu­5hJ»½ Ù‡,KíÜкÔP¡f|éO7§Hf|dÑr^kç Žß¼¥'@>¢íð@‘…„—Ä”ÄÄJÄÞ¿Ý>3„Œµ¬èZˆ›Ù¡R^XÚ9ÈÍjÕy0”Nš¯s„gA‚îWˆ™[Uú £™2õÞzבl‡KØ6`ñ
-î†Å×°æËùß'™+¹O?àªH‡q@…
-…eȤ½øÛ ]Ûq};—¼¿ý%W[J¨÷¡¼–Þè aÁþ[Ò-@^ŸFðGH¿ ìÏÈܰ<·eÕ@wô¨‰Îy«(‘«xd;{”«‰U¸otÁªDÕL
-˜ªˆÍ|Îóp—aÜ^§9Lî÷‹¥¨`=1OþL
-^ú”ãh@RÄfíÁ•6—U
-×qóp&+yPå°1¦àÙÂ¥å Xˆ|¿ð$6Uç»’ÄŽ¸%¼ûm'v»!†æ^™íç Åä.°¥6q2Œ\õº«CÛ7E.ÄÔ—¨lwBÂæ8=÷_so09Fµtéf²ÅoÊRaáÜJýèb;†xŸ)ォG œþW¤ÈùQw¤ØØV„K˜7µºy$•o5MåÐà,=²æ_³4¥ñ3ž•÷°Ÿ
-áB«¦¨Û$EZk°`ë¥Y 5qÁ[œù¥ëÂF… :ÁƒN„´®jîܨ€›JV[‘
-ü™±8Ébº¢¾9àѲœ&Â&9 h°¼§!`Z„ù“½M$¨'Ì é·Ç ˆ‰b|ö]·[EÍ\çtHL”.=MSeî{F"ä(ËfIÜ
-ˆ4ƬÆx»ák&ªˆü• “KѡڪƎ5soõUKæU6Û‹m™³Ó<{WûFgsü2‘“+tëÑɇ¡ˆ§Ç—–Fë¹mù¨ö9¥ûŒí¬ ( Q«¿˜?©Fß§$‹OÌr?ãZJŠM¿{m9ùœÄ1+ɰ‡!¨Ú‚§¨næòY:ŸAÈ‹Wv¿ ˜iq“~ˆRŠ
-íqÃoØ8\"ÉÄø‰m~'8 £Éùª¤\"~Ķº…puX‚8R±·ù;¤‡,qÞ\;1´L AÈ›œ>lϴʘƒš¶ü¸\UÆækèK¬ôó(29÷ðJ3ôûõrï˜O²âåMçÑñBu”ï§‚!þ*²‰ñØx“–ãfðÔƒªáFb6ä([N£+þe÷#Ìó,+CðÇUÓ3Mcf‘ÐAñn0Ja¸Þ.H”#ÓJ>U³ÂåbFµîV?4™;>
-Û Ì_÷cvDMÄȺ„‘)˜3,fÅ·„@sž?X³¡˜ò\ªå$@Š$ÈW;ö=W!za(NGv È(èᇓÃY†CõdQ1”On?S9Ç>Oµ
-dõ›#.
-óÕu«ðaxÍ'¢T´Æ49¿}
-„¹ƒ°yeàêÙÔSYãæœjî×]…)Å’ÀY¡vSWòÀ­¢ÒGÕîUê£ ãþh4× ¯DTÚè¢Ë ¾ŠŒ}dœœ'.ßñ»c)sùÂ4E©”€cr'L’q!2XdêFÒ±!NMi€âñ¢ÂdÖ |H—^ÉuÞõ“ù¦?aÈísNfBèÈ(û;Ÿ>§[Q-„- ï$àKor§ËûI’;G¸],˜úJâAžXÚ€àvÞ9g•0žh}[ü £Å‹—T€%/WHþî×Dªÿ~Å!¬„ŒµWJQ;dZUüÁˆo 7êU ‰iT†dGà!y×"?αLÛuº·Ô~¡šŒ{U#[Ö÷g_SÚ®s·ßñs=„Ñý}Ž´þ^W@ƒ¨IÙ9¼£ýè@‡}Ó$0_>)’¤Èz®Ep,—ðóõè¦
-ÈïQš4Zl’€AÍMNÒ1B.NèL·YÏ¥£ÌÊ©“0d›±)š„¢«ëOØF'Í<I('Ó.DÁ=Œ”³‡pEd­ùØøõmQÜÛÓ
-~z#ë6 å˜Mmné©^«ŠÒކy§×ù{?¤¾ó ÃN[„!H-Èâ–‘Ôyúê³Ból«nsªYòU4Mö¤ ©0lÕÜ´~µÇê½æ`
-chô„, 3 ‹ ï‘“#•ÃùG ÖÑŠ9$5à »l|ëQλM}ž¥’>‚ÈÔ!¦}™n¿°B=…_½' qŠ=ò¼²D½JQ:|4ù "V&71¢‡»Ê´XGŽÌ˜Û6¸XÉLjðD^«Pìˆ,0ª°>«ÇŒzK „Uê• Á;ð# zJí™ÛG ÃLtåk ­' , 2ýòô™ÏªÍÑk|Õ[~>'}A–ž­h¦M$™O¤{É™™aý|Fo¾á¦›\basmç­‚‹ÝjM߃½€—RÚ·ޤ`W<Tº;ˆˆ³õì&> 5YC¶]Þœ}ËA… IñFÝi„—¤>4Å1 <ÏÜïQ»ÔäJ!¼@ïµ/g”Æ
-¹?¯²YÉLµOÿº“oc€ùÃ^vu?ÂYáQbâÔò%hñ£›Þ|ù:µ˜Âôʼn "¶®œ%v ¾õ
-U¨!š»N}œ Ñ“;æJ›ªÙCĵ?ûœôý+¼<¹è¾ŒÐp—³[»õþAN
-ç´hô@ª{âN'H_È9S(rÚ·kEü&ßÏ•tÛª.Ü,çx>A(wYœÐ%
- ±(ø'E5 Í0Á{'­WÈÐÐlûù 4·Oÿæþk¨ÕÏÙ€œ“æ¬)Tlý¼SM¢ÌºtÙö:ʇOI[|¹,™á
-¸} ³i¼<nU·ƒÊ'D†7Òz;%s}S°l<•’y°46Ê–TZ¹eÛ]DÕ\Y¹ñ}˜en|(xèn)<¸ËŒ¢G/Çê‚«þf$'„ƒ":èuë ìðx/’<€Â?‰CòSÁ064qcZŒz¸ÙÝü\! ;‰^ ¼·'PZÖ‰EvdŒ¢bòjGYþ=Ñh/«¹È´®ŸË $8éÈ'kê¼²à
-%gsðùB§*÷Ä•TÝþô¶VÔ½~Þgÿ°s-Ãê¾ù¤‡I3ôÀâʨbŠÅ4ZŨǾdzçÏ—à Áç‰÷ø×³ŠX]"ïe‰¥?ÂÛjš…<®ÛsÒfÔAgV+¢ÔŸ8ýdÚ¥_ÜÌl:ɶ™q
-L! … a¥,C-CŒ}M¾~šÞƒÔCzâë—ò '|;¦DÜ‹ Ž‹¼”ýû·NsŠŠô c‹Ð9T#qY%%ËGð 0Ù¥*÷f’
-.³ã׋ÏLH]DÒ.½Å¦œÈçûNcxï*ÿÍRŒõjHGmwr$Æ›~üzXÉõ½c7G9±fRpÂÔ›õñ`ç¾/ŽFöøÍ¡Sësöe‘Ä¡ûůjrv±K ±‚º‹—li¬@b Á̧òÓµ¬FÁ§”L¡s¾´_úm\9G›8+¥£XmK‰^γ³æ&„m©œtðÞì]ª_l„Š@O3º] q—ÃX;Ü3œåá›
-kƒãåxÄüÁ‡¹C ¥"QPf¦CY_vŠÓÑô|‚ŸŽîdœîÃ: eФÛw‘éûe« VÑê–†P-o‰ ã¶*‚½—€:GçMøŸ¥ÀOr¿/CîlMk[6qÉŠP·eÙ0ÿ¸•Ëzý?TRÈõó·—Ï(ªå8“j$27BjߺÌèÖ–õ¦òãȹÿäâÌ-:N ^TüÚO`bŒvï ×o(<>yýeþðHó‚Tƒƒ2¸¹ÁíåÞ(å2Çæ¬9½³g¦F³Ù å’Ë?q…ÃNßJšPZØcš¹ÔiΑ88›ï…wäD&oô\<朕çÞ‡.'cve‰kÎþšØuôI¡]Èš‡þý+‡¨§Ä ~¸db D:{‹ÛÖq •¢j+˜ZÖ+·?ÜT±æ­ºŸÀÜÀ!
-û:%é5¾¯åV¾çu™J°5Jòb´â"2jþä³àí=j¹ òüÅÍ·½OÖ±¼×Ñi¥Réqødoeל}½j(áIaRFT¼‡{°˜Të‰n°‹W÷'½y@,}H5»A¬8ÑLØÑ]ƒ5ævYÛÐD"ßïŽÊDʺ°z¡Ž »z}ð…ˆÇÄ_@ïO>s0<#gr¹ñ´»f!bºÛèÊ5ƒ¢Ã–x¦ÐJÚ./°A>x»! jm–²sÞ7vÁßC}AœíÁ÷}Žn4XìÅVÄés¡%›†¹¢{Pû< ´éÔ Ì7¹d±·ÝÖ.´?²s1‹t¯}¼;¯±Ý½’×Gû»{UÔ.!ó!T-ºž¸9Çݯ~_’*gûkèŽvª»¦$û¦ÝU‰ô¥5Sü¼
-¨ïÃÌ'l¿:¦ðè;{3¦Íäeµ—Ä;»¯McÕÒÚ-ÿXON´Â½²ùr0‘õC€ƒºÆ…L9ꉱSWËñÛÖþN2¼‹ÆvÃñ’ýÐ È*ö{ä•k^‡jogÊ"oØÊglÂóIüPÚ}tq(½Ÿ
-QCm6õ
-Ê’¸È˜”m€¿™»_–pÛD‹KÅ|iVWeeÀÀ«‰ „lÐÁôÿê4èT0Éëë]Ïd‹;PL¹£¥e!D*%)f­­Ð¾ì {ÄùíÐîòsÃÕ|0ŠLï-ûÈØÀªY‚èZ`ä<Üu´N!ìÆÂçaæ¨ÞôIJE OÕFÚØÙ‚™O¥ì鲟‹„œ*+aB5*êëˆYš0MŽŒ£>ÂãðSΚb¤³(=nìj‘·æÑ4W­ÁÂ-ÕÏ·­_ѱîíô‡Çº™·` î%âg›«ïW‘iІJmøª º¢Ô††ß‘$1½ÑØ“](snr…„L¹Rœ±¹UbµVfn3]ú‘ÛÀáˆÿ3È9ÆTÄk›“¯Bšž«µW¯ôoäˆ9u“lܲ‡vxvèô3Õ ÖÞlQ;, ÿ®w½ß,Öf9z ïï‹?ŽJ¬äl* +pË(ÑMÁ™ž eF×gº‡@‰<·5ð˜MêÍ jmòÏ °ñksŒ]VY:zÅPÆ]•a£¿u_d„‰ê`”]&6ú‚–2#³ëb…S–ä|_'UBÉ9ÇØÔ*+‹©´ËY[–µ²zŽ’w
-Áë±(`°1BøÍéÑ÷kL»;B„/ˆ,à  G70“›(Y:¥ö
-ùµi¸ŸÔ§îwX\Ÿy=rû„7"¬ˆiÝe6ÕÈý`Cõì¥oØ?g`ÍF朌‹ÀH‹†ò×ÓÕÏ‘`ñ» ‚ƒT~65Î.96,`³xõµôlë Ä\θ;&¦!kÇ×å ÆæÁJôV>ÓÛnQ3­‹c…8¤„½aGãÐ$îÉ(»çf†A*"CÛï}„:¾¹ Ìl{‹7nN^ÐÊ`„påƒå˘ÌV—Ûyþ2>÷{Ή =½"ž;ôl`¦GS=)ÅhhR:ê bÞ°ã}µ;íYÏHey~aN'¡¦o¦NQ»ð%`\ô?G°2™9×Á>ìSЬ7…¾»Ù6ò_qÛ§ÍȒΊŽ¤¦vغä.Ù#*Íõ¹²G-–à°Ã~3º½øÕNôdàÐH¬|ò€Ò>I6]ñs˜öüåÛ{ñ7cÌ a8d?‡ÉNV¦æWíûê^ÙŸ\W’é†;ˆwÒ`–v0zA…füA©‰õ§$=›Ò¥˜ÖÒGVöašMŒs*(±Ó8üì¹äô¶^d•àŒ1÷·»s®ÛCºDdq
-I¢BŸîÙ¿¿²ÊXãÞLbÁcÔÅã‡Î0¸±hÿŸvæû
-‡
-ïÔ2AÆìöâ©eîÛ›Ó¦;»ŠÞ¹‘°!¸„è`Ò]åU-YñÌëŸò¬ùM5ÁF³·&RGßw´+ùûè8šŒÁÈfïyFW OU£wÀº$¾¿@i¼ù9ºùr¹>ÒHÝÂö§õÆe¢Íw{˜¡Ù
-,ùÌçÖ6ºþ‘ß‘—§ìä*ƒšA>SxÏå’ò§Oœ•Ãøjäwcâ]o¸‡´×ç?e•é%Iôm ßÞl)·œ?Þ4‹™æI¿´—.¦Äì Ê×AÖŒqh}Ä_J¬Qêõu‘¦ZX´y7³xÄ,i’¸«^飯\µ1) Ík„ÝÅ TÅ>¹Þðô3¥Ÿ¦õ1!}KGf³[ZdɦÚ^Ýs>¶ì¨¹…ç›ý˜“]û·çÁ ~V\Yƒ°ÕæÆÐ¥–tQrÿ=<e¢w†|hó$¿åÜ£ëØÁSä<þxØI'è÷¤ïëÚ_tšd¯„§wòÒs_×àdI#ØÙÒ¿˜
-ogÓƒ1GC6E®Í]cdv®l}©µžÆÍE*û‚Xí øVr,À8è–>7%×5/ÔQz 6@^î$Æ
-Ìkª¸â§hDlU¼v7X}ñÂúZ%fòb+†Î5ƒ;TÅHÿ$IÀÒR.X/+ùeÌö2¸Õ4•õ…6È(z¡ØîõÉìg,Í¢ÛäZ}~û JmÕg(±èe{u›"&Œ›Å?c
-áò¼\¶¿ûë¦n
-Ý)¥ÀÓ,Ú €ž–ñ;Þ©x%ŽÇ*:Gï­Ì‘bàÞšÈÚ±ÓÀ'“(' ø·&ᦗ„Bfs^0©^T
-i¿5xÑ@>,Ïu> w?tiÓ¶0ûôIÏä#%(ù‰ö
-©«ˆ|LO†D¨Å÷¦gîÑå¼Þ8vÉC÷I~®O–ÙÍ>mŒáõÞ¢‰‘}‚
-^hâŒð·¹ œ£“hZ™Í/øÅ_à7œÀ+P¸¸&&êåî$+Nȶp®Ô ~I(–»c¹ÚŸYªÓÅg¶%ø¥p%ö>­’H¾iL¿\ÚõÐß(¦µâ_«8Cƒ—R{‹
-޵rð¦ëØíû‹0Ê{‡˜ÊQê¸2‰«Zœa‰ƒ†*7Äc¹äJî„I›ÏüìÒ]©æÁ 1=Š¡å©òñS€MX¡¥GMøªéþP¢‹:*½ÙOT9†ÜD¨*ÀzÞÃ*Úž“¬ÿ°Ë_hg
-‚œ«ê9ŸjˆŠ"J7Þ®(ðhT(ìâ ª¦¼ÜðÊ™§Ä‹V¬áÝq
-oò]ç }£¯9B‘7õ· öœH{È­’ëæi`T&éVÇãs"¹‡‡ªÃßÛçVMo¼iá÷׈â{C„^×;¿_g¿`,·÷þ2 Ún“ R ɫǶ]ÅjÍuib°ƒãÏV!QÏÆ>²¦aO<ö”ñOÁxƒªH²$áófe°§Åû›ê¥úКxÇÑiêÅà>ò$­–Ìy"-Ú-ŵ ôý‰¤Ëq ¸ŠÖˆÕ"™[Ø m¥cA¸¶¹"t8Q+PK¥ìó÷Ñ”¶ëÛãh_“ ®$+ƒº‡¼S¾ÎúÜþµ$áØ™éezv~7EhÅZÞ‚¥ÓªãHÝåûm®Ý‘(ãŸÄ"Þïòwnúê›»ÉÕ”^«¦
+ŠšRò
+P7É;8hôJÓÏ4¢<¯e·!´ØÕv'•”õŠß¡¾Ow°8À\=Qù‘¸ø¡“>Ú!ù¥ÖÇbt¢4‚|«-<=#O<~z¤ê¹ìÛǣɉ…%ãq@$ô³ÏÁÐR«ð §‚JoBÀ»i¿ú$ÔèöÔË##Å%°–}U4Í_³i—}O‚LoàM”slݯüy=?É+”8Í5—ûµîL&æˆÅÛ„?Ø;kI8“ ]O0ü
+ôX‹ýv5FMç|.òöZSª‡æÃ¢û÷eµo® ºG¦|ß^£dìfÈ婯?ÿxñ¤}GðrçXQ†•¥ïí«°nãÄ"‘ì v¢t³íg•×ÛudkàXþæš1­´¹û±¢þúgÔ\Ô®:è'&
+yY·ŽeFÞÜÉe$WemDGóÒaž@²§—ñqfS–ô6BÙßõȽÒU?ùÏ žRÀ=²ÜçqEË4|Y²Õ7˜Yàýe•çŠuóL*”ÅK 㟠$HÙU&Ä–ÒòÈõ×€® 8ƒw}_þ×ïÝk0žGFÔÃó'€r¥wŽ—m­ølËsöxRxÏ¢ªVæ±YD
+rÆËo}s˜[, Yw?Üg±‘g x :Ë é²\<cï:—©w<5s ¡Ì²¯ … œö!±îÃøÜ¦Éjª¥RC·Þî+~»ÌŽO¿H~Ëa&¶¼<“à­ô䊈ç¸ÿ潂I£Ÿ•æ {—]Ÿé10.ã=gVýé~Óàèñ“yß_¢‡qk£.nÈ2OS›0$a÷xb _¾÷
+'ëZ;/€Ü –^dŸ”¹\ ô 0:ŸæëFVEò‘¥0\^ƒŽ å³Ý1wé¡•>Rh’`ÛêüÁT~Ø QaZ­d
+U~-UÙ1`¿ôB}èÿ[à|ýÛ¢˜‘èþà éz]n¡·†ätœÍOîø
+é+¦ÞâwªÉ"=ÖšTÂb.Ê;9§D¿KBr•ZDIé°É¬/$h-5…œë¼_àï_æE݈P`„‰
+eŸCN[hÀÌ"¯5sß¡¶s«ÒVÛBfžáœD(˜Ü¤胢&BˆóáÛ§Œ—=Ü9bª©s ß¨nZîÉÄõn^’¡ïg^í*ªüdïfº×D°>M*|™vži­}ç`1;s~ŸNÀê~m©Ó±‡„æ\£"éc ã9D^ŸÍ1ÿ˜,F»9ÿÙªø¥só=Ê>çR³¿N§EUÝ£¾ÊPäý60|õ‘³9& x¿«é:d=ˆ“ºª¯’!êö9šu96¯¬|ö
+ œÉò;Fª¥)Ò—³ö­nEä ûÆÀ%g5HF¢´`Æ÷‘1
+S4DB~Öõ‚iJìÞóex
+r€Ð5™'­§øÌ·¶YPNøÌHý ú†C¦ÝÖïLS]Ý(…3¹p¬Ï–z«ôtNzTD¨7KŒ:®žh[µg¥Ñ¤ë­‰ ¿ø˜¹Ô¹¶âÂõA?Â}û Ž>uÝ'9*Ë25 ÄÜ£ýR¹'«3Ir¿'ãƒz‡&ù#uf9¯*¡ì@ Œ÷OÑĬyáw‚ÀÙÚÞœ«‚ó—o
+s%Ú¸üf„ŸËcÉ£ç ©œ>V† x*sžlKÍ?–‰N£“í³Þ;TÙ6qoam~gfÞÃá¹b:èÅ `Âî ƒ3öæùfÛVÓT”75"úzEÒ²4Yj©sÊNõ Ñ?±Šèqu""¸RϹ·ÖÏð­f†¼ÀA'bϧð!KI4 @·Ã‡u&“w]!&$ià}ßн£ƒimói×Y +RÀCÔÂÙ—ð¤ü‡Ö†8ó1…œ)ÛC0H Éª­ÀP[¹@SÝ~w0æOÍ‘àÝÔ´#Þ%ì8MÖ™E
+t.Û½«½DŒ/vÄ”õf&|aªŠ«-÷­c†ƒY¨}ÇEWùn¾ß¬úvtÿtšúgÓ±ÇFé…ÁI{>2›Ðø‡¨ÏÂØ#7nPe…cÄ\k¾Boq_„t˜V/|å|ªeE2óFm<Þƒòc):¥¢@y'¿v4œ¸}!™RkÃKnpÁÿ"}ÏHj/Æ*.@¶<A¹;p`6{ü°ù]J©84~ ãK3½4¯À_<IpDK¦|è)ÍûA±¼INâ\œ%XCK e’ÿÞÇw‚è2V1Bˆå1 h=­M¸Š=Ç3ÉÜF1×Ô¦Kgy@[²¤Î1ßÒ̪ص;#=˜³8–ÜK~.Ô/j¨°äôl×·_PG{
+Î(ª`¹ «8¦Ð®2hcöuõÆîþ2}¨±*ÔcN §¸veg "…”…X×…^¾ëfêHá?v
+]›°¶wša|õ&‹r, ¨<P«¬ ¶ð.X ŸçècŒ#î™ç-£F¯Sÿ¬œÆ˜ —å¬çXPAf'ËÊjÙ
+T´Zu~¾EÚ­§HÀÖ}Uüz¢ÜÌ G}!Éj@6ª<ÃôsìDïD&©B–%êáw¶0&ò·†j·e£ÉIø’+ÿG"ºb nYˆ#ÎÊ…5Æ|èZ:éŸ_ xØ0g÷à?§û3â£8®ˆÜ˲À˜Qïü±Ç7×X¨œÞmÙCìc#y¨àýIì&†œ·5Y²M¿>B™¡áì8³h¨ûÂò0:z$X(q»®%ù9ÞÃX*´ŒEŸ|ÆB¬-$MXÜ/ƒ°I,Ø iÀ~™3Ó &"sÐöb“–ZÁéÃÝog„F#º¡séc¡Êöïpð{އLã³EÔ]¥™PÙu`Jvqíªi‘0ñ}ÅóEëg2!­Œ:¾~¤ÛS¶ïgãÞ¨e}èGóíÜ+¶býÂW¦âEñ%,ðÑ„ U |έR †÷Ó¸ ‚“7|Y0¦¡ÐŒ`c”h"ï¥]$¯ÙDøy–¢U”÷³*Ëö;•»°žˆž½X€Vºi<„#ÑÅÒ8ù³‰·5òNéK#Û”îËÏNï‘r®[nXôf$AO"Ý–¸SVµ¼7ê^Y´]VsBe÷ ´g¬KI^¹A5Çr &&# zK½q*
+´ÂØ÷þÞŒ4à…÷r Å› ‚$Œ¾£Q`ƒ-`¬×ðÇŽMéˆüyÀœJØ ò`’…hQý)*¡ $ˆY
+5Ëñò­Àóv3.]”T'‘™×_ìÎ"À<aôàëÁýXø èÒˆÙ¨>T'8±ìƒJÕ2,ί„q;§oék9ãñÙ^¼è½þ#±ª‘l VgÈDÝ/tHõÿ¨ÀQ—Œï±<=fYM[=€7 µ¡éPŰ¯qdt³a³
+x^ðÁ=‰/‰Ž³'Bhùb£ÏX‚ghÃF/çœBÀî™ñ(qF¦ü¦S>à6æŒ#°ÅóŽùI4MœÑb¸ï=pû{níÒË%ˆfcY¨¬×¿þécaöyqÌÝ1¯Æ ì—n7
+4?äÀYÜ
+Yت^éιAÈ•Ë5í
+Ñaµ+Ë“º±\‹0ïdÅ C´Ð²(Ó©Öצpy§’éÛ …oû x#z–ÓŽú­iÅ6„_´'Æõœ¦?óØ&¢6ºT&V@t½E ­B:3ç|¡7›Ãù)èq‘ y#釪sfWZâH«abzTÆcóY!ë>=ä€Ë„—ö†ÅŒÎF1-Ùòò}\Ò|3GŠXi
+TpndØtº7ù)åç«sç/4ƒ8ôÃNE#.VØjÑ6sÇþ·Šª,o¿¢N(Þ-Ú›:ŽoLªḻ9ö8èš?&f¾>©¾*æËäIâ~‹zÅ}HôäX|]ˆ…–5Ö‰¤õö3›‰ø/(‰[ï ˜Vîb6ðÀ—ˆ¨ÔÆ¿<—ªîïá
+ï‹i’6RNbl¨°› (¾/`Á%àÁ¶
+èýJÇF@´ø¢umŒ¯Æ8|‚…$³(ßUH§k‹ÖÐÓà ÷¹eeÕmÖGJ•#𠜶k%ââ];$ÖJt ‡Ÿû?`ö„i¶Iq~?•°©Âá/üªÄÕÎk‰ÎX¬Êù˜³SÜÛ¶‚ÜHvòÅ¿¯ö—Slöèeî‹*bN¿ÿe¾¢\h¦µð®ŽRöã
+oçë÷¤¸Ñ^u¯LÇåô¼ë‘¡—–‰È/º¸ïr£ìu_
+¹ÊGÜ.×÷ÂÌ?áw…_«DP×vÀÊîúðMEi‰Í;èÌjêL¾ÓÍç¸×l£ÖJáðœ4ݘ$í$©QøRdàdzFaÆ
+±aưö¤ûÐq#Ê õ;–>u ßЂÑȲ¨ûÜ î(x­Ô>|»zsÇöMïÜÚ ¡<£²€*¬R¶nè«jt¤g6ö!;¢
+AQé}lß§‚>œ'Øoy=Û“õÀ!»šp£v SO`MÚ
+ÂEdqðÏVŽ<[^/à•‚³mQB(ÉJ4åïPÓ%›ù5`¦—¼<áN]´ÍrªuÓD…8#¯U…ÑxšŒŸžþØë$@Ñr<M´žöÐÙñìlDîå®
+œ8ªm²IŽñÅa&2 i=-ªÜÿ: Ž}aÌG½o_ˆ<­2smÔR·™ß.;¾ `¾sð3¹]ƒß9mg!€fLÒ ^R„„>ˆ ¥åpT_ç6þ3$$mýñmmòk ŠÊƒ!7gN?¥÷Ó
+4“R¥VU»4¦^¡ËþõúB–üLJ#£·nγsl€tŸh‹P¢ÀB¯B¡1ÔÏ’‡’ÀmA8onTƒ¯üàŸœŸ™@©5Ý£ m>è|Ìãé$Œè8L¢äë×RõC™u´„î0a\*;­A° 0‰ì…ÀÏ?'ê=¤†CcÕ×ÇógEw{ñ§X<¬Ö«Î§¢¯‘Ö/¬+±]éÐf¾ë{Î"²Â.`W_‡—ú¸R2´  ¬ ÑßèûnȨ÷„W:È%¯Qý#?‡uÓÌá†8p¶ÄÖKê"“`t@ º^õÛ“TºXÔ+©eÝy,NÄ™‰âJcì³¾ýóiówh²i©1K½à#<í‹6uƵ(E
+¬Ç¿Ñ¦‚¤E(#ÍËŽâ~qõ¥]ïãDí
+zúÎ}™‹KŠcw|¤ªïhu•ëôSˆÆ¡ÐãË­„[ö:Ò-DqnFå†üô’êP>Âz^ʧÁÒÀ”¬Ì»›~–[T¸4عâXïîif%ŽE„óN˜¸þÒ:Í“dõ¡#d©ðº+†ðŠÊoFš{ÈY_5¡»$ž…Sr25Õ¼îà>Ó ë°+a“^r8Æz5³w ³„­JÚ%uàÏŠŒ²¥oŸP,ã¦8(+{(š\‚J)æ}kŒné?op¡Œ®_@U<º°4Êßo‰ÔYÞ<ìaÁ ŸMˆ§õcDÏSÆ)ÃêNiñZMEèG5­:—ÜüÂ.Ì{á¥Åu[R½Q0È›®iÔú#ÅU·@„ñ`lˆ-gb”Ŭ\ÏŽXIP'°(Gý³»`š˜º„€B@BÖ&íOrÒKn°Éއ{ûgÕ.V­„Ó
+.^7=º6Š2#0 Ÿ“8uGzƒ)?&¯~Ó&Î^
+)׆þ®ì¸}Ÿð‘„¨ÍŽà”ÿâMµ3ëîDþþF·X#›Vx„¥Šš9—ÅÁ¨¢S@§¾Õ§+Öf.;™•óÛtÆçÕÍ&…¸eýÁˆQ³ý Qi†•hOr{jY%ÙJw¯ÂT„—lFt{¸ö81÷(Â¥…ô¶äÃÊòûb2ÒJ8cá”ˈÒbÁÀm¼J&­Z‚A
+Õ!R3|´î|ܽ$uà×­GY‚œ æ{Âx¡  ~.œú&[qæfôð†hZ³O D_‰Ã`z™7ÊMìòMA•WsÕ [ž„væsÅÜ!ƒØ^ZÉ»‘wïFÞVeGò‚\l¹ÑS\Ÿeæ"þÌDnÚ‘15Nôz{ƒ¸Yów0[° ukz?¡Þì%¥
+Ü0†Ç/OLj[É|Z«×Ûž<Òí°4ûº ·Dɇvk5A´oã ÌtAÔ”
+çHBžO+Ú‚ÄîóÎ"«g,Ç}õS?3Ù³”“´§+Ôö·V¥+ÂÜÖ/'Ên³÷^ö/€Õ…Óÿ곕µ°€ùÙ?"0ÁAÉÃ\(à-ŸÍ¹À/¾7mù±y}ýÔm“ýmùkìµ4#±$ß”
+¢0ÓžœÇ‹·z´RÒCfwMÎ-‡Ý ’օʹºwvE:…n6OAÆR . ½Ã Kæÿ>©´‹™Ü¾hiÓn#Ç*ëÈÎ^ª ‹{n„œƒ|Q‹évÝ 5¼ã›ènB uv%ò9{d|ÞQP>CöŽŠß$qˆÒÊšÙ8”Ç­š¥«­u#Õ¸)«Û×¼¡ëSœiQ¡zJõÏA*tµÓ¦¤§ 3;Ûtès-|b~0~B-Z)ñBšª©*·?ƒæ–+[L’0o!ìÆ»UÕ‹B"Œ¾ªÏ5jdÝi·©dVéc]Ð[æa÷Ú(i³ ¿=ב;†L íu߆+YÙÔ¯jÒðoAs-á÷!Þ;ýÈž8íöêš«Î~à 0 À„
+Œè†²}­°[^­ÄÊ"<TÞØ€êä£jÈq˜`iNe“äR'l¡' Iß<N³NK×?‚ÿ’Œé ªOŒÓœÅçÖ“© <À ½2a´/êZkДv{²Y–Ú¹¡u©¡ BÍøÒŸnN;‘ÌøÈ¢+ä¼ÖοyKO€|DÛ/à5€" /‰)‰‰•ˆ½~» |fkYѵ7³C¥¼°´s›Ôªó`(4_çÏ‚5ܯ3·ªôF3eê)¼õ®#Ù —°mÀâÜ ‹¯aÍ—ó¿O(2Wr'ž~ÀU‘,ã€
++
+Brãx­€V¿…{x=p m9‡ãCäb Á¼lº•ùWß Ç¸(Nn@¬vt&4Å03§Ø=: ËI{ñ·A
+º¶ãúv$.yûK®¶”Pï By-½Ñ‚ý·¤[€¼?.à~ØŸ)¹aynË"ª ïèQóVQ"WñÈvö(W«pßè‚U‰ª™0U7šùœçá.¸½Ns˜ÜïKQÁzbžü™
+ó½ýÙ ÍËF£jkN°3½WäfÜÁ)8+í':º/¨%²+žG%$Åw·í=¾tÀÜ~ÆéÁúäi*¨ÐuÙ>lû2{†X’GVM"¹ï§¿äØÞóŠ-I¦./q*#Ú-ÍÌûS­n®Þ~¿5f58O&Ó=ƒSµ@·ŒVÓÃܧçOPkÓÿ hÙ)&ÒªîÏWfzv,Þ6ì,Ïp¸êÉã7­ ‡ixÔÆ­SÆ;Øc¹}¤ÛUŸV¼ðœxç.»wQ~ßÓJ3CÙNcYB»Ñƒ¤3Æ›õ?­ÔæuÅXŽÝʇÌ®þÈ}‹b×"¼ô)ÿÆ;Ñ€¤ˆÍ
+Ú‚+m.'ª®ãæáLVò ÊacL-À³…KË+@±ù~àI mªÎw3$‰/pKx÷ÛNìv þB ͽ2ÛÏA‹É]`Kmâd¹êuW‡¶oŠ\ˆ©/QÙî„„!'Ìqzî¿æÞ`rŒjéÒÍd‹ß”¥
+¹•úÑÅ0v ñ>R0Þ{W8ý34®H‘ó£îH±±­
+—0oj+tóH*ßj<šÊ¡ÁYzdÍ¿f1hJãg<+ïa??Â…VMQ·IŠ´Ö`ÁÖK)²jâ‚·8óK×…
+t‚i]ÕܹQ7•¬¶">ø'2cq’ÅuE}sÀ£e9L&„MrÐ`yOCÀ´ó'{›HPO˜ÒoÅø8ì»n·Šš¹Î1è˜(]zš¦ÊÜ÷ŒDÈQ–Í’>¸iŒYñvÃ×LT%ù+0&—¢1BµUkæÞê«–Ì«l
+¶Û2g§yö$®ö*Îæøe"'WèÖ£“C N1.-ÖsÛòQí5rJ÷ÛYAQ&¢V1R7Œ¾'NI,Ÿ*˜å~Ƶ”›~÷Úrò9!ˆcV†aCPµO;;PÝÌå³(t>ƒ ¯ì~0Óâ&ý¥tdW)T?&ÔzISÆ—µ Ñéô9óóŒl|—T¶·ô¤+NÓÄn“4üÑ«#éÜ‘ñÑÄüÁÉ֕aã_.›+A¯@™øêSÈ3•'üp‡IøÐÌySzùO ‡´æìÍ®¼Ck;ë2O3Ô‰áy/sT²—»ŸŸhŸúĈäomg…Zˆ­‰fº9ðþÒnjĹ.&i&ß7AŸÀ’\aö(±V­J¸ãnÔœm> ØŸ) þêy…ñålkMO¸éX8VEdàŸs][» NÆoñ3F_ 4å`}†v,ïˆnd ‚ì’ØªLÚB+;1‹h²QÀú·î´¢f)²kß8OÒ# õ:‰ɰ*NøG0Úðž{Ï·¸Gâ3]ÒB]ÝãŸeõÊUút–Zä¡ÛQ*He'3u}š&ºaVÙ0nÂ_å · Ø5Jæ³§Þ;R~&ôc5Æ¥:3…/ïì&Ó¢.AðáÁÎÆ¸ÃÄžR¿nÈ€¦ã~E2Kâèš”¾³klÌM"÷mkòù¶Bˆ)™öøï¿¿ÓIF{/õð·לuù[Š“‹ÜhV¥<õ!1QÏG)9ì(Å¥ ÒtM ËëqÌõþ¸]%tƒP]¦ûtàÆ&Ks:!lg‡€†)®7ì,èøÔ:Åaäæá·ãäQùÔò=•ÃýnÙ,×À­¼kZ^IºgàÁô.uQ³÷ },Œz“¸»•dA@{â^@±ÝƒžÅ&ýþ°Æ¹rVL*ç‹jïRf§ž¦|ú¦ØhwFjPÜ{tnã𠞸Â1LM‰ðg6þ>¬€ä¨è!³ßO’N·3PsÞvz¤' W›Bb×÷d•ª;ì;Ъ"j7Ž”‹98ô©å,³ÑÕ4ÛÕ-뀌éÂçË+[ã®fΠ´=5"ëO_Z§ÝQýJå÷# ;~Æ×:¦ùOuP2Ãþû9¿™Úã†ß°q¸D’!ˆñÛü"Np G“ó TI¹Düˆmu áê°q¤boówH/Xâ¼¹vbh™‚79}Øži• 0!5mù'p¸ªŒÍ-ÖЗXéçQdrîá•fè÷ëåÞ1ŸdŞΣã…ê(?ÞOCüUd;â±ñ.&- ÆÍ á©UÃ&ÄlÈQ¶œFWü ÊîG˜ç;!:XV†à Ž«¦g.šÆÌ" ƒâÝ`”Âp¼](G¦•|ªf?„ËÄŒjݬ~h2w|¶A™¿îÇ숚ˆ‘u #S0g0XÌŠo æ< ~°fC1å¹TËI€I¯v8ì{0®BôÂPœŽì>@;QÐÃ'‡³ †êÉ2$¢b(ŸÜ~¦r Ž}žjÈê 6G\æ«ëVáÃðšOD©h#Œir ~7úsaóÊÀ?Ô³©§²ÆÍ9Õܯ»
+%*RŠ 8$ ²Bí¦®ä[D¥ªÝ«ÔGÆ;üÑh<®^‰¨´ÑE—@$|ûÈ89O\2¾ãw3ÆRæò…iŠR)ÇäN(˜$ âBd ±ÈÔ: ¤cCœšÒ
+БQöw>}N·>¢Z[@ß HÀ—ÞäN—÷“$wŽp»X0õ•ă<±´Áí¼sÎ*`<Ñú¶øAF‹/©
+¦£Ò턳`à*ùê™>÷)›td¾ñlË•]“î×=í
+9l¿»YªjËŠÍa™°Tt÷W.™”Õ>/žú„ VݪdspÏ#¸îú§+^üƺ§h¥ÔS-b©\LÔåg› llª¦¢,#Un¥`ÙD2ïÑw^´îWƒ…jžÚòHƒ,ߣ4i´Ø$ƒšš4œ¤c„\œÐ9˜n³žK=F™•S'a&È6cS4 EV×#ž°Nšy’ QN¦]ˆ‚{4)gáŠÈZó±ñëÛ¢¸$¶§”tÖ©ç< K·fÐ2o„mê„‘iª:Ï”)Ðö¬ ×ø,m/@=ÉFËi‚tÖ²$Q."]å+&•²jjÄD™Þ}Û­n38e(Ö²õ²·™s,ÒõáÙĽëÃîñ¦Öà#”
+, kÉ÷´éhÏ·.rLgâ×hž„—pZ??ÎË;@·aQÞ¦fÍ‘Á£˜ÁüÒ,_g+õÇDê–[ÖË`lƒÿmjC“½ µ‰¹ñ•«ßyÁÙUe°M ©P21=ÑAC6R²ãxÖ¢Ó»ÌiI˜µnþ¡twÙW|$Ø©Ýv;Œ4âcƒäy.,üôFÖm@Ë1›ÚÜÒS½V%¥ òN)®#ò÷~H}ç†/œ¶C<ZÅ-#©óô;=Ôg…æÙVÝæ<T³4ä5ªhš íIRaت¹iýjÕ{Í!Á
+ÛhÆ‚p!Þ 7©ÃïsíÝ!³Vðû”Sr«­r ÏýØÛ 6ç¼ÓÆÐè Y2f@Þ#'G*)†ó¬£sHj†AvÙøÖ£œw›ú<K%}9©CLû2Ý~a…z
+¿zN@â{äye‰z•¢tø8h(òD¬LnbDw•i±Ž™1·mq±’™Õà‰¼V¡ØY`Ta}Võ–«Ô+@<‚wàGô*”Ú3·†™èÊ×ZO@X@eúåé3Ÿ!U›£×øª·ü|Nú‚,=[ÑLšH2ŸH÷’3?2Ã<ú1øŒÞ|/ÂM'6¹ÄÂæÚÎ[»Õš¾{/".¤´oIÁ®x¨tw!g;ëÙM|@j²†l»¼!9û–ƒ
+ ’â;ŒºÓ/I}hŠb@xž¹ß£vÿ¨É•BxÞk_Î(7Œ˜
+—M±ñdr%´/™&HñæQÕ´+ y–›=PÎ3këЗìº;KNrÉ CMH°è-ª»Êìü9!… [ZÖ´DvI—4ê!\†Cj.©­eœ’ 0
+ÂJY†Z†ûš|ý4-¼©‡ôÄÖ/äNø&vL‰¸y)û÷oæéÆ¡s¨Fâ²JJ–à!`²K-TîÍ$\ \8fÇ®Ÿ™ºˆ¤]z‹9L9‘Ïÿö4ÆðÞ/Tþ&š¥ëÕŽÛîäHŒ7ýø1ô°’ë{ÇnŽrbÍ¤à„©7ëã!ÀÎ|#^ìñ›C§.Öçì1Ê"‰ >B÷‹=^Õäìb—bu/ÙÒXÄ‚™Oå§kY‚O)™:&Bç|i¿ôÚ¸rŽ:7q.8VJG±Ú–=
+¼œggÍMÛR9éà½Ù»T¿Ø6žft»@ã.‡±v¸g8ËÃ7ÖÇËñˆùƒs‡@JE¢ ÌL‡²¾ì§£é-ø?ÝÉ8݇uÊ I·ï*"3 Ò÷ËVA¬¢Õ- ¡Z"ÞÆmU{/)tŽÎ›ð?KŸä~_†ÜÙš Ö¶lâ’¡n˲aþq+—ôú¨¤ë1æo/+žQTËq&ÕHdn„Ô¾u ˜Ñ­-ëMåÇ‘sÿÉÅ™[tœ¼¨øµŸÀÄíÞ®ßPx|òúËüá‘æ/¨-epsƒÛ;ʽQÊeŽÍYszgÏLf²Ê%—â
+‡3¾•þ4¡´°Ç4s©Ó(œ#qp6ß ïȈLÞè¹xÌ9ÿ*Ͻ-+\NÆ"ìÊלý 4±ëè“B»5ýû/VQO‰Aüp ÈÄ@ˆtö·­ã*EÕV0µ¬7Vn¸¨bÍ[u?¹CöuJ4,Òk|_Ë­|Ïë2•`k”äÅhÅEdÔ<üÉgÁÛ{Ôrä5ø‹›o{Ÿ¬cy¯£ÓJ¥Ò/âðÉÞ28Ê8®9!úzÕP“¤¨x÷6`1©ÖÝ`¯îOzó€Xú8jvƒXq¢™°£»kÌí²¶¡‰2D¾ß•‰”uaôBAwõúà ‰¿
+€ÞŸ|æ`xFÎärãiwÍBÄt·Ñ9”kE‡-ñL¡•´]^`ƒ|ðv?B@ÕÚ,eç¼oì.9‚¿‡ú‚8ÛƒïûÝ
+2h°Ø‹­ˆÓçBJ6 rD÷ öy@hÓ©A˜orÉbo»­]hdçb;é^ûxw^c»{$¯öw÷ª(:©]Bæ?0B¨Zt=qsŽ»_ý¾$UÎö×ÐíT! vMIöM»ªéKk¦øy"Óî“hŸQ¨¿tHg½Å#v³ Ë¢¹(^Ë×"F¸Cáß Úï~µÍO[ŸåÇ•ÖZ²Æ~!íg‚dö¯hÙ¿¿«ðÉ×_j¼ºÞÑñ¯EAåƒß€MŽ›_ô?¸M¼½Ñ¹t~ŒÜ+ì SVáu¤T…r©¡l®¥Uƒ0P;Þ‡™OØ~uLáÑwöÞ5gL›É+Êj/1ˆwv_›Æª¥µ[þ±žœh…{eóåa"ë‡
+É5w½‚'☺²¡tg‚ÉGѺÐäQ`Æ9vÉlpúÿÖ§ÿ¢^ʆÁ.¸7%Ò` ã±¬Fœ}a<õŽÞµªž2Ȇ´h¶”RÒ`k‰ÉÓUúÞê¤/˜÷¢ú¹«É«¿ð\”)$q‘1)Û
+ !˜s¥8cs;ªÄj­ÌÜfºô#·Ãÿg:‘s2$Œ©ˆ×6'?^1„4=Wk¯^éßÈsê&Ù¸e;ìðìÐégªA¬½Ù¢vXþ]ïz¿Y¬ÍrôÞ=
+ Þ?”XÉÙTVà†Q¢›‚3=A(ÊŒ®?Ît??xnkà1›Ô›ÔÚ äŸA`ã×0滬²tôŠ¡Œ»*!ÂFë¾ÈÕÁ(»L lô-eFf×Å
+§,Éù¾Nª„8’sޱ©U WSi—³¶,keõ%ï"‚×cQ:Á`c„†3p› Ò£ïט vv„_Y†)„A(@n`'7)$P²tJíòkÓp? ¨OÝï°¸>ózäö o"DXÓº3Êlª‘ûÁ†êÙKß±6ÎÀš9ŒÌ9‘ 寧«Ÿ#Áâw©üljœ]rlXÀfñêjéÙÖ ˆ¹œqwLLCÖŽ¯ËAŒÍƒ•è­0|¦·Ý¢fZ/Ç
+qH {ÃŽÆ¡I<Ü“QvÏÍ ‚TD†¶ßûu|s˜ÙöoÜœ¼ •ÁáÊË—1™­.·óüe|î÷œzzE<wèÙÀ
+L¦zRŠÑФtÔļaÇ;újwÛ³
+ž‘ÊòüœNBMßL¢váKÀ$¸èŽ`e2s®5‚}ا:Yo
+} v³m"ä¿â¶O›‘%)6HMí°uÉ]²GTšëseZ,Áa‡ýft{ñ«èÉÀ¡?*Xù å¥}’lºâç0íùË·=öâoÆ,˜ÂpÈ~“ œ¬L+̯Ú÷;Õ½²?¹®$Ó wï¤Á,í`ô‚
+ÍøƒRëOIz6¥K1#:­¥¬ìÃ4›çTPb§qø/:ÙsÉém½ É*Ácîowæ\·‡t‰Èâ’D…>Ý³Ý U1d•1°Æ½™Ä<‚Ǩ‹Ç/œapbÑþ?íÌ÷?
+eËè2R¼ÄûÛûyŸ?à ·Cžtж‰ä€¢rªØt°W¨ÂÃ^Ã>
+ŒÙí?ÄSËÜ·7 ¦Mwv½ r#aCp ÑÁ¤»Ê«Z²â™×?åYó›j‚foM¤Ž¾ïhWò÷%Ñq.4ƒ5ÍÞóŒ®:žªFï€uI|Òxóstóår}¤‘(º…íOëËD›ïö0C³Xò™Ï­mtý#¿#/OÙÉU5ƒ|¦ðžË%åOŸ8+‡!ðÕÈïÆÄ»Þpi¯ÏÊ*ÓK(’èÛ¾½ÙR„n9 ½i3Í“~i/]L‰ÙA•+®ƒ¬-ãÐúˆ¿”X£Ôëë"M3µ°hónf;ñˆYþÒ$qW½ÒG_¹jcR2š×»‹7¨Š}r ¼áègJ?%Lë9bBú<–ŽÌ&f·´È’Mµ½>ºç|lÙQs-
+Ï7û1'»öoσAü¬¸²a«Í¡K-é¢äþ{." xÊDï ùÐæI~˹G=Ö±?‚§>Èyüñ°“NÐ%îIß×µ¿è4É^)Oïä¥ç¾®ÁÉ’F°³¥1ŽžzÓ€SÚóJîi¸g_ ~`ñ›1E!ûޱÖ]Óhcotí¿AàçUpö„ß*&"-š{~gò&ú{ …rO]ÉOœ…È”[‰„î£-•;J×VAЊü$JJX&Ê×"é 5
+¼ØñÆV¼_±  ’™c€AÆ
+€~g´¦™L#ZeöܬðrF
+¨ì¿öžÓpÇ£†äH¶Õ2Señϵt(å¶õOÖt†Ò[ \„¢73}ñƒça-ø{û9…Ô8‚Ãõa8K<ªä-™£UÍZˆjzìɲ¦Omuã–‹
+|BÖÝB|kæZÄ@ºÛt7B5úÿü¥/Òµ׃1šòò‚Æû±®¸—ÜQZÖ¿S^©Àþz?§â7*¬UÌ‘Ž´Á9a¸|ø2DyúQZg‰?D[á4m|‚B–*õ¹÷kîìDRºÚ0„¾ýç–É­wó~ýØÒPÇü>?
+»ë~÷aœ¿nïOÝp}ê#Æ)f’’¦„?BË`„ú ~R(hà'Ùç¾óì ØÉ»žOÛšù.»ûe<™“1êÌÇÒïÒÂfÔÕóÏ“¤òÞ!°(íTLÈÃÖ¥råúDÌ|–ÐÅ8Gä|}¥|è+ÏTPDpƒˆíJN5ª,»sa}èàÝ!/ÿhEî:±‰–ÂÖuL¥èmzÍŒÈ%áØß+pJ^‚…®Ù†V§óÕ7ƒ° 3¡‘ áâ9zU¯Ì…‰ò;é–Ÿ·(Nâ°­|&=×ÝÉEr4GîÇ4ê˽/Vñùén :,'劘ʕc(x^µ@$<B'Ϙ½23n
+ͬm wðôš].{aëyjø0}ïuÁ¸lƒÁ'ŽC»£"éƒíK±Ú¢@=Ñ~ºÈµÔÁ'pî,¿,Çî×/¶'™¯æµ‘Ʊiá«‘ œGäÂôÞtµoyOYú÷zšH™
+ŠwêˆVM¤¬Èôv£äGÓtøu #£yå\x¦CžšƒÇŸÇ˜ZçU.æ@ÈÄôÄe²˜=æ÷ÉáyÜuù^é"HÄÇ׬íôœ™Í ®h;@‰¦$ˆ;ï¼ã>ÛL‰†¸æVìP¤ýÄJÍÏD{¤>pV$QJ¬©ô=˜Ð9 Úp€Õâ«ùD¤å0ù_‡b>éRêVtÃÖ ÄM
+Úð­,6äX€qÐ-}nJ®k^¨£ô@l€¼ÜI>Œ˜×TqÅOшتxín°úâ…õµ4JÌäÅV kw¨Š‘þI’€¥¤\°^0Vò˘íep«%"h* ê mQôB±Ýë“ÙÏXšEÿ¶Éµú0üöA•ÚªÏPbÑËöê6EL7‹:Æ6
+ϥ
+mŽ[A±Ræ¦ØíŸeµ1£¿YÝÒ~kð¢|Xžë,|@î~èÒ<¦maö蓞ÉGJPòíRWù˜ž ‰P ŠïMÏÜ£Ëÿx½qì’‡î“ü\Ÿ,³›}ÛÃë½E#û¼ÐÄ!áosA8G'Ñ´2›_ð‹¿Ào8V  qqML2ÔËÜIVœmá\©ü:’P -wÇrµ? ²T§‹ÏlKðKáJì}Z%=|Ó˜~¹´ê¡¿QL-jÅ¿Vq†/¥ökåàM×±Û÷a”÷1•£Ôq/dWµ8à UnˆÇrÉ•Ü “6ŸùÙ¥»R̓AczCËSåã§
endobj
1134 0 obj <<
/Type /Font
@@ -13471,14 +13485,14 @@ endobj
/FirstChar 33
/LastChar 125
/Widths 2625 0 R
-/BaseFont /UQRMZY+NimbusMonL-Regu
+/BaseFont /XEUYJV+NimbusMonL-Regu
/FontDescriptor 1132 0 R
>> endobj
1132 0 obj <<
/Ascent 625
/CapHeight 557
/Descent -147
-/FontName /UQRMZY+NimbusMonL-Regu
+/FontName /XEUYJV+NimbusMonL-Regu
/ItalicAngle 0
/StemV 41
/XHeight 426
@@ -13494,93 +13508,85 @@ endobj
/Length1 1620
/Length2 20127
/Length3 532
-/Length 21036
+/Length 21035
/Filter /FlateDecode
>>
stream
-xÚ¬ºct¤]·.Ûv*I§cul'[£b§bÛ¶mÛ¶­Ží¤cwý¼ï·÷>cŸóëœý£jÜk^s^×Zë5FQ’)ª0›Ø%ìlA ,ŒÌ<
-o(:¨Ñ_‚ä¤ñOFuØI)Q’¬¥®‰Í:T\+kÀ2ñ´Ò(ÏË2+­Ô»Ð]é¾çAM¾×Q­?A"tto¯$ÏÊAœÇÛwÎB¼ã¢ü1lþUxq¨eÝÒäöt¼d"$ÀÇŒ‡™M ,tEÃ2g§ö“0ACª•ƒÇ“IyàbLżê|c
- )/úh½0HéZ=`|K›@?ôî3Ob¨cËL<Bß1d÷h•ß$™§”±ù¡î]C¶Y™GOýú!‰ëŠ.=÷«Ý¹½.oǰ,½ƒšt­¯”3sƒÆÖ®·qbé§0ŠÅ°ÈDY~–iÃøu(Ò˾‰ªæ³?ž cŠÔbdS7sYð§>ádÍíìÉQûcz‹þú7¾cèü¹$ Æ>2Í%—¹ß°%F
->@í£dJî'¾T¨WÝ– ’ÆÑë«úþ®@Zl—,P* ï™7o6x©bäÀ×ZëíùOרc ‰^à°HY¹ê¶]¼„qGÝx- $v·úyüJŠÑ‹lüwÝ„ze|5lÇ¢‰Û&^^Y†¯d¤å¸=眫Ø'ZðþžQ.,°#p¯ü°Éøù¨~j‡|i¯ÖÍ_)¢é<-ëqHb_Ò»S3‚4~«Ò/²Jú
-ó»kœAUyÑ® D‰<aº/Q߆W}á{N·râ‹0¢ž¦¸ 2üuŠþK!Ìe§óç-õœ_…Éæé&·öŽtºö›)×öÜÑiÞÜ=39^TùyÖVÑúA`›Ë¯“Š×1³[´³Cr!F\YÔT¯É$0¹âv¬]1¹â2õ¦2˜÷¨ÏQï<^™2ÄH‘,Fð«­ЀöÕúSöËö$§f@ÂÝ}7EŠqÂl™ûÑ0†R
-CùV¿·¬žg&>ˆ„’"µpVk_í+t·—$ïÒBhtçß’¼`ª-‘C†<l®I4@‚ŠÕÆ6Ã0;˜‚û;>Èù}îÒôƒ¡OQN¢¾hÉlÙ‚¦X©ÍÉÃÚ-ðÝ󜚮Ӳå‰f]D–„]fp`Ý
-‘ו‡ošDƒŒ ¾”¹yÙÚ<1Þö÷Š3
-9à Ù÷:Å„Ÿ\ÉFlý¹ŽNÁçµ±½F¥1¢{1I#ù#gÐM!Å&Ð!ùf¸¸<:â‘[Ç‚êÞ—dx²UÃü9‰Åm³{¦¨F®Aº/b›ƒÞŸ&ŽiÊù0ÆÊ<É{ –3Á—)t;¾
-I…ÆÄ8á J’«2ðÚÁF–û†t÷+àK‘D:rtËSα£³ÒFX°Y¿ƒw0¢ºãÎo‰Õ"Ú-P¼L>Vš˜ñפ2 Ynîë|CVÞZsZú Ó†x9„ĶU&bNž\@š'üýlNÔÞû1ãWÎèjöE¡¬¨ÿI1©~´Ç)¨¥P#çP&¦B5ãrEò¬é&ÜìPÿgÖ©‘ŽrÏ3ä5ë(h“‹£66q¨ JÄ·­ ï|à·Ë Ç#·û:[‘úìƒîi0žì­ÎÚoœ*3ö8¡|SgrJ_ˆ·¬»TáZ‡%{ÍbË„pøTþÃiK¢`È$Ñò-ž— r
-g}%ž¿<ÿ𦢧y>ÕdsŸZˆ—ŸäØt‘ùB<*Cuù­ Xò4RWJY¾?Ôse4¿¦öÁGGøË=1nI6ö>â¶dxøÛzÀÛö§úø÷^`K­™u ÒZ¹$gMÍÍE®Ý§R‰³› |~Π;âIךÚCXFçÔ[ "9Û
-%Všy¯Žç½wd`õ\¥
-?>Lîw\_¼__º‚+úˆ—Ï*×5²,Üâ~‡
-ËGBÐ×4$<]q…x\6_ÌI_ϱȸtÓ<< ±ã[ôV(“K—ê£hAÑLÿžƒ«±î«k”“Á™-H¼~„ÈëRtàÆ;ê¬ԧОSŸ«,Ä>x›ºQmMΠà¸ÀöH|’MÇD-2:s»ÁK¾jÍ)yu$–©Ó:ž•([mq!+GŒ™SÞz‚PùÒ†ÞjLñpö«Ys%²Ý¶p¬z.M[›t]Þ§ÀŽKxÀKPų½×ÕêL•ªçLý=à'd{ì-¥?Ö­#†‚­¢E^+#6#– ñ/–“õ­ñ¼ÍTñÖ<ínÀZ‰/”Ú8Y2ÓØ/gÓAÓ›øæ±,dx
-v]šÑØ}a(ôÉ:eÝX!±«AÏ[–Ž×ÊÜ’ÀæÆ¹Æ£Þ3a‘^£ãxR°šË\ì2ª<2€ÿŒÍmxÕîQžæ‘QáE‚žÈ¿¼=±HF,ÃØðªÊжÌ>Èü]¼¾Ø¨ÍqZ\Q0³“×-|/SS´æ;ª? [B«˜jÜë&BØ’ÆIRòu“$€„ƒƒj°i&ÝY³$——½å£
-ç¨÷i ¼%0¸)xëõdïIG•&Ž¿œÃtɳ6†ž7|¸.&õ
- -ΈŸçf™ÕÈPMC°3p§î¸eÚìq²áBÞæh‡~ò¨,þ¶¢Æ®¹ÿã
-¥;Kƒ{jPÌCÛf¯¨“Ø£_:©Ãb*¬Ž–Ôº°AïhµûÞÈq‚F΃a¹¦Ô9›X´Öò€)t‘ÚQPAng©§âÏíÿ4»š†ü˜©>¹I¡Îúîá
--5ù\;³½2>V®±*T# +
-@0‡cz´ëðcL"¸¶©ˆ1tQ mhž7OyÙK/=mŽ1Ü´iüŒÇŠ··ôŒÄŒ%¥”v= \lB­×9Ɔ½‰ü‘“WŽÄõÝ©s;Ú¾†øðýa_ 7,Z±jg[À6¾bV¤ÊY—qá=›TLÀTæù4¸©ŒZä¹xæÇ©D S7Aof„ûoަ¹¶†d¬Å(?# Í”¡4÷Ú7©¯;˜Ác%$P„P|¹Ú“k½T˜dpR(áæÓþ; @UÂŽåo.P
-·?å?«ì:º;rº¶;(œåÒHBÐUQ%Wy¯ÇûcEàÝÚóÌãÁÏbמgo@¦ð­q´ÔDÖèÈ' )øóÁ«ÄhåHø*²ï›#™·ZÏYHá( %Òïg!›µ ß¿ûW{|êõhñGÆq¡ÄL»»o–DTèd·ºãú±‚e6D²]}~Ç¢jé‰
-S(xÚ#oÓÜõç ç‚
-¦cô)E}dðHÓœGNoj<]Sç¬<âu½ây×§ûU7Áê­²‹E«¤py÷á8'ËÍibHö qT?q::جöì(ݽïRgÝý>^ØûûWM€Õ}ýÐé§‹–Ê{ÅóZˆÔ(sï[6ìÂO ‘zü
-I³ÙêéÇ–T©-˜R§5߇›‡þÚ@ÂÇŒçoT§÷uf‘‚‚Ÿ£;?®IÖB,$ÊqªG¶vÚâ¯PIJ •£Æ»¨(¡àœ•SÕ`RHáRp·É/i¼™É6rƳ¬È»ÚôÊvökU;]äW¸é­ysV†$Z k›oÀëãõK„ö Î£ æe*|LÞ¹*p¼§}¸ò× }an²éÜ¥ºÏ¡öÚò´Ú7dîyˆg9ÏÅõð¤éFOdtã’ý‰,5FYrè¼c}í¤Ná§à:†KÐe fŸvE#Ÿ?Íю˪̘ í‘0S(Ó¿£ME J+dL©¬¼I­ð^>|$½g'IàŠ´?"týy0ïù4=:9W8ùÉÝ1Õ
-6AdQ›¹Í,>N)¥Ò©ðOã’ÛÍ·o}ŠÓ3U¢ªõ3“ÏŠC…}àp)Æó¿a™FK›ó+ •W1{‘¨íœiNŒZ?¿~Ô<îZÛ×Áˆô~ô}“IU?û
-^ºö*ÕÊ;â˜<\éæjB† :æ‹ãk‡o™ùžËýtaA=« ÓÔ'ŸÔÐH•ÄN!z^“«ÿw¢ëKËÌ´«vߪý'ZÎØS³_-Ÿ!¡ÑÐ9†˜­yƒ±<`–ìÜkÚìƒ8˹‚®UF¡èýÒ¿äâôëO‹¦3xª©‡ì†°b$pãÀfN2rI[ ÷Ð`-IêѸ\\AIëÇz£AÅ ;²;»¬·Ó@sûÑ’Ðë"ø ,méG(;vø™Ùd×"|‘"¦ŠÄ`྅Óé‘«¬óõlýÖ!|t]Œjø0Š–¬¿Ö¾ª0Z )ˆM&çEî+É÷Éœ GÌ7kʱ—Ed`X]ŒÚE•ÀQd¸À'D5õüDU°p¯)+7sZz Ce´–
-Ý)k=g<
-ýÀ”å•LâàÛìàwD#XY«yû¸é ‰zp£^àž¡°óRÈÒˆþ‰B˜D²¼¾Ý_v|˜÷ÕìÆ”¡v’S|*B‰ã˜D#ÑŒ¹N7uˆ'ôx’ÎvïNEy-‡UI 9̽Ç|iýB[}¥­ Ó¨ÜE>T ”;pf4_·Ñ%ÙøN} T…—Äï÷uĘ¿”õ‰¦ûñ,Ri.ï
-„y„ÑŠ<¦ªòÐYtÍþz`Õ4ŠMÇ>f·ÅH3¯ð(±…¼]¨!9‡çߤ–šà›cà
-è°ƒXC#Ä1ž7róѧƒ†1÷‹þØ*:½Ý
-¾¬üš"¨ùá¶“°P ¾¢®tþkºô¡ßs˜8ÁºÌÈ8õc°ã9­•Qæ3EåŠü±¹ÙΆq«¿tÔöÙËCCY^"fDzJ
-ÛnÂ÷Ù'Î{ü®ÒÿŒŒ®AiD–Xg‰¸N
-Ã2k}„‡Œ°±hd7,=½åÒp3{9 uN4Òœ°T—£b ؆F–i$ïó‹'p‘}¾Ÿt¥™´ð^ɨ"3±Ut¢¡zx²ØÆx4D K¬ZógÜ–z‘xC6‹]äÂØý9&yóï³t6?ðÌ"%
-‘¼FøCAÌÑð}>€¶6‡¢ÓVÛþ\ý di B´«ÙQ¯è.Ç~Þ‚´ÈÌ=ìäm’6yS$ý-Ñ¥ª¶™)P‚´)keÅÃvM¡Gã¶Ëe·5%¬_ØYûMŠKÒ}ƒ†Œ8 îÕŸÃl5wìóµ Ô<öÅ·£„²3dz’œVÉ ÷
- žóø.Ѱ\éd¥(š˜>¯–LãPÊ  Ôš3,¿Ô16še¤³Û²˜BG»OåÔÏæ¦_ƵW‚®e oÎP×½'”@ç×Ò KLýº-/ÞJ[ýŒxw]öG8förˆVƒÉcvÄþh;Ìšé£è‡µŸõ!qîL¾Â mÕBÇïã@håR}ºûür†¢'rû⣖í5qq!Š¥¥¾Üt¿°wô¯µžQ8É@Œ‹«}Hë%‚Õ›E1TâìGäìï¢vF9Õ´½Öœþó«õ‚y¦
-°YN0ÛæxôÞù¾•·Z1#‘pÐG)œïò±ž{+¿ÝªjwÒ±E©áš=P´Þ7±ÙÑ[7û¦“¸NYYÇU¸yd
-¢ˆÉd)$± ¶Š¸[a# :‘ÁÜ.‹ÍÉü7LÓ„(èòGÚyö é안øžwbMŽÓüÇÞNËe?ZÎÂfRc¯PÌeš²ªéQÚ"äI8
-4Æg÷ÎüôL¬¾¾Ò?Âlœá6_±Â؈u‡ëî$àÝÌ;ÇDpBÝu¢Cbî›#13º;Ï
-*‡Kò·¶‡;¼-’"+ܦ˳-ý<ÎÈt_üöYëÎ’áBÁ‚¡$üé©Ò.&>Ùe¸R¸¡3›Áÿ]u7üaÌõñ.R8‹zAµÓãvnXLûçpYTÓôª['ÒøUÒà=|¹üº*ÚÜOAŒ/–*CØ ¿?CÞêh67÷ Wáïx,V½ªŽ_RÆò^/H–}èÈ;‡¨=+mä káÕÊuS®ÉẇNbnN’²‹Y)êctž-yá¬JHw‡d`‹£Mó®úí}KÕ4¬«–!øWù…sYÚá•MS |•ЧD Nß"æµdYDé
-Á4õ5’KÄó}†#‘.§­¤‹R‹«
-õS—¸­oïV‚•¦x{ì—?]Ž{øjA}øé{¶$õ†BÇÃh>/o†"U¹»ý´P‡SkwUçn0þ€8âàB¶ü¾F;u¶pL)#–à
-}c6!„L¹âP’{ƒá;D¾dçqí¨ˆz`Ë2«f§µ­])ÊFDŠÜ›/˜[öÃð"§Ê^wHZÁ‘³"¯oD{¼_7züä5àb«;ýS@$ú¡W °²ZðDò¢òuÙÙ‡W{fMÞ2ó ¥I*,~…Ä©¹#xÖÖŠìz‰KkVßL™E›)¹‚¢ÞIXbÄSóùÈ»´[N[lº3íLX¬˜üçw^@dqór
-G%vA)ÁÃG¬³¤f‹o¥¿ñ`Ý­LF™óVõ‹ÔK‰óÔÝwø`ø?qŸàÁ¨Í tj@®È<a‹÷÷äIFÞµåüïñõñÚ1*Oîc=÷Sï×Rf•«xh¡«>Îê3cçÈ
-ž(—NÑÄåi¾%¦Še¿€Ù?ó‡ Ÿ›o†`ƒbîª0Ø– õÚ MR¾
-Xá…<§õ0ØC"ôñŸjè(–ŸÚŠeÂÑ_{Ú#‹p7ƒLìÙ5`:ì¥~Áì4«¼„?ãL®Ý8Qó\‡,OÇ™ÒÀ;ŒmhT Î§µVÄ! ¿h¥¦ž;t*ê¿ôŸçq !·Ë,·*¤Z…ΟÐWŸ¼T‘*”„6C‰:(ç›ø9ÖɵQçQÈÔGæÇ¦ß‘_<Â9ç×YÛ­ÐÚºMîƒ3u"JL üüÒ¦Q#ÆV_©©…vYTóVKYðçæÄÞU™gÔ»ð¼ òù‘Ïz‘Z(ßC?¢1Ý=žâD®jŠR8€‘%öøg×Èži2v»n›„¸MM¢t QdÂ*l%–¿‡RS7ÌÖgj¿¤‚<ÿWßÊ}#ó9¼ˆ¯†eç^™êgÞÀ Ïõ#²z:Ý¢
-Ha\»¤ÿEH Ü„Ôçì¾f• %bA¯üIÃvÊ¥lPsw‰8º8Ö­æŽÚz1IÝûQgÜûØÍMw­©•—#ŠC$=ꤡ ºí=ŒjâwÔŸD*/ÜÒdêÅÎV
-ž‘õ÷¦ÝÔÆ.3±õƒ¤9ù]v\_17OnS{‡71¼ôtÝêÅËCgû!Ìõ’+Ì\\j·Äž¸,1Èßß62–e€Æ§¥ì¶£þ&kL¿ÜêWÎc½aàJÚQà&AY¸Úãt¼Å+«8•õàZõг…V|Òœ½ÅÆú¡/½99t<g¸`^B?h¸Ç0Àûµ©¢ûOÛâD¥¿¸ÆŽAôÅöŸÐˆ"&üÒÙGZ‘úáMŠ÷1Ó.Ø›ÉÕ
-}É6¡©†þÇÈE…<ÊP&öÌ>sDõbÛ_ÇÜÛWp vµe>‡ÿö²fßé(!‡°~i0bkzì¾ÕIä­ÖÙ²¥©@ œæ‰R&ï…Ãi$|i ×¶Î ³ùòR¥ñ-f —ºŸ æžæœby,I꾟pXðØ©»›¦Æ)bF°¡K·b¬H‰ÌçubØ<A¨õ¨Y*ÓIÄw7y èÃokSI‡&úÆÎ¤ Kʱ¯¨/ÞQwŽŸž±“&×í1™>JŽ%Yô¶yX}<¹ƒùÂ3éîe›i0Û~4f$­z6n/¾˜z¤ðvÀÓx$×ÂìÀˆæÑnmeõaàtçTŠEð­*>÷ËMÉCJÁ0Ýg¿WæWk¡0[(ÃL(”ÂÁÒ/;í:1J ÛÙÞ¯£ùþŽŠ's
-†‚˜!Y5ª¬h›Âø
-’9„©²Íºi=ÿ¨nuþò©­'h¾N«˜4Õ 7<±–¹ûIíÓö†÷Õ=Î)iÇN{À$dQñãTË0¿‡h¹KÝçµÙÚÒ9äóÌèÍï@¢ËG¢ $éðfKvHÀÑ:ÓÝ&îûAoà `žŽ“DGO?Ìd¨ö3ìŒ Â̪i¢ì'Y"-°ö-¸™¸O-õÂ5¾4¡Ã­š6rMŸ4Éì’‰üË¢¸U9F4Ò±SÑU-ÚÆ
-¡à£"Ð,‘gÏKîD~^ººÓÜÉ/Zn\Æ$ÿM­Œù–1ÄŒ)Á×BoÅ£E[âcQóh¨X*úêÊÒO>0”ëw+ÇœðaÚ¨F~¶zñyþþ{ ‡gS(êá9‡&IdÑX2)Fžb¡8ÚËp¤‹PX,Gæ(xõš2œS`º faje‰ªh.,w¤á«7
-cLÇý2 Ža®
-L­ysŽ<q›é;u %ý¡xCߤi67k]|Õ•ðÓ*‰I
-Ñœ±îÙª Zˆ¼¿›7Ã_ÆvN¹—Ks6Ù\£÷ˆ[wåÝ4
-Ò ÝzI6…®uê+¤S9ü$±ì
-³î^x½«nŸN)ýŠ‚Ÿƒ.Îq:¢:+ùáŽ{ÎúsX~²‚e–yÚÊYTº¾ws!kœ(IÛÌÀB(ëÊ#’ØMëü««}d˜D2è9 ‰‹â—'Ì¡ø´ïƒšÛE’,6bOö O;fôu-~_Çxð¿7¾ØÄ(Òñ÷í/Ú݈9?’WÛïµÈßFgùè`æ}ô}4*¦
-…3© ¤ô1.aõÂ’ AÜÿJ&ªƒ0E|R*ü(ô¯[ \eZ¢¬ ÏÑZõçú½á¸sÅ%¶_,sEjìœÌ.®Ü¨llüqÒé;¼ô½ë|i*VÖŸ
-¸Kþ­Óp’¹«³>ú±ägWüD³É÷?æKåÖôm#|žZ¡£ ¢Ieí "b0G`½t¢n¢J¯q¨ÜÜPé¢G08mÜ8Ùªç µÝ¯Ýã¤ßRf§2e±;$D/Æ&.mÈ—(Ân¹\çU"S#Ð!=7±æ
-’бà÷+ÐáËú­qJ®lHsIw¹eòª zDëÞªÔ• NÚšO%ÒçÕñr‰½¯=W¸Ë„TF%:uÀ䀙2º,~u‘\ıáýú”oC}xù‘Žq"4{‰
-@ûÅ#\t£¼ó¿º™/K®Ÿ±UgR¯H€d~È
-a«Ç|…Á|e¿g½¯ }ð”uT©ûa3s+³Ì¥•¿½ã1KÇ×1¼tþ~¸O`Ë’tyQ[ýÈ—M!›ªo®J¿¦½Á'‚K›ð⊿Sî|ÿ˜û\WAƒ#‰Å9Žê2]2Z³lp‰Fûû–†ÜûO¯†O &¤ ÜDpªV¦8ï…ñ™÷óìº è™zgØùÝg¢‚5¹’-É}P«†öž/£y+¢rC*î‹#&ï]:x"v˜rNµ4¥‹|ÓWíJû`føZ1mü-msFYîÐ:8[Ž–?[¯+v~ôðá²› ó&pÀs–K‘v£y¨¤}Üšÿˆ÷[â01%¸.cœY‰]j˜ª:Ç¿ùö:Qqæ!åµ¾©ÏÁÈégƒ¡¾{£6jÊÑõ({ö;¯`ôô«î½A$äÆä¥=ÿ7<‰†ÐZLLSXëFŠ}Db62×,èÿv;=›#˜‡Ãc(íˆFrEƒÎUA7Á¾ºñ°¤‘ïμ Ÿ³ËØ 0
- ·‘—Vh/†¸MƒD:•ÄÇNñü°†•:#Þþ>PLÇÒwïÿQ5GbÄñ Òû¦ªð@` Ìz(iVþÉOëµ6 ‘
-³ãÆ Y§u ïèœÙ+èï°9¤- ˆíRUöMxöOþúíú¡ÅsC¨3‚Džú›„àyEà·£¸q ›—Rôd}ŽO± æé[ÞÄ™G`c·§;[‰^L–çÎ(Ön^v轈î½—’‚IA?‡Zdߦx¶ë‡0Þê5/„·ï0iñUE°—,¿"7ZE"Y÷­à ŒçÂëáÂBG¾8˜¯§µ#êÂ^ êa¹bÙø´­b÷Vîæ×œuHmzæî
-P̪è¥Ôqõ D·Š@ÞDzˆ‹òuçöÿäüfN?ag>-šŒÊM©a7šµjª)Ð¥0c1å˜Åêž&¶Á0®ï¸‚«n9¯ÀMæW )õêP&°C˜Ù‹÷¥J@eôOqðȾÿçx˜¡ù3ÜÏú\åušà$å·=„þ’»:0¥äí ¬ {]Û7°PPÎþm1ˆ’=pËvÑ18Zµ±ˆÀºrG»%±6.«ßÌ¢8Î8П«woZKÉ9'çêí#úG—ïj²X+§ÃšP8†»Œݸ¼0J…®D“-ýf¸=_U0óA­ú¤‰Lÿé-àK‘ú¥Ïã&zŽ^Lqêm²ù›_º´~æ9ö$ |òÔ«*9k+ôûÒ—eL€<•Ëu¼É]ý v¨Œº_rœ!¬ß§Ìèèn"X[,#ѬR;Ry\³¥»VXÀƒ±AA+w
-©õŠÊ»üyž+¾û™%’I†2£mÞá­¥\÷¤uçó:µš¥WbÕ‘¹éˆ×h'¢IµCŒºÛ 
-JÎtŒa½µ~öB¿çn 8b¦”W»VŽn$èÍñ)4Üê¤÷VûËÌŒ;µ•èN ‰R£ËÐŪ§ýÿ×>Y¶5( QD‰!%ÝHîfà¨Ñ9º‘n i’"]Ò-Ý1ºKÝݵ÷þ‡÷Û}îùçÃyžã•”4|œ"ïñ`Ûý]_€ßÿ¼Ý²í\£$«:ê¯{¶F†Æ»lìÏ3¢?ÑL$G@Öóå×vmôãŠ#Žª×°tή4ËFIñê\é±¹†òã–ÊcLÏBÙðn¶²e™i¤ÿs;<¶ ¼ÿñÏ7JŸ¨ie/þ5÷“FàEZUuç!í¯îðœJMþ•³ŽôÓ }Ëß–~¸
-Âòé€z{JE‰FªM Û„u–æG0i ž³ÍÀ†^µYkúzþ'ôÍòH¬n“È([ÒKFR}ÿ^÷ôdk
-±5b$ßì}Cd%#vﱓ*š°ßÉ ‘ú°»­¥8hñÀÜ_Œ»Ð7¥U½2f
-b›oÒm÷ãÅY…½jãnQŒ˜fýÊm½­ªm&*þ8”Èç1|ñ˜a¬~– F‘«•¢ûÎòXQ;( _ÆSI0ü+p˜ý&á¸$BF
-ý1ì_v#ZâÍ,µgªìVØ
-*‹š@i‰úû¿ž8ëäCî3luRŽn£ÒsbX‰É ýÚNã0Lb£?yrK—Søƒ=ÕˆáÜá@Æ žÀlþ ¦Ã<˜'•AÅ87gñU˜
-Üx丛ЕXGŠyº'üá9vµ,Õ½OÓà¬KÏýØIC`­” ¿¸9Âò§é¸ˆ ßcZ”Âh.RÕŒI8¬_$òfIKmÌXró–€àÇêŸ%Ŭg”ÆÂüˆßY'ºVR, ¨B~ ÐÔAQäϲ¯u£s¢€Ý_˜Œ\@øt-ò©Ÿ’>ö‡Q÷FÉÎUŽ«l$Ô.ËW(¦8*³Ÿ{>B7@ -7쑘ôy™Ù7º!„³¶ QèÌL}*Ÿ$‚WVÉÉ®š±Èñ×´//2ZA$¼§¥ªb;>~T6EÕ<Õ¿¿Vj3ps[‡Ú[ë #.JìñåY¯ª0ûì©'™„±ŸµQÖ8}Q¥ÞÒš½.HÒý¤ñ‘õ$=¨â¯oñöaZ]‹#6ž/¿¦Ðô¹e¸ÞZ‹ÇM{ªh= Hp¿œ¦-Õôš£åežÂúz‚€ÛÆ«ì(Onû÷söQY²æ‰Ï&¡I(Ja]U›-fø´Û[ˆÿÞóݦ6vº%š.[Íá§KpyJÖˆàêh2nösjJ,©VŽ&EͯU¨•x9øW+0éOžÜX‰3„\
-‚¾¡ÉzŒ:s[­+ž:[´‚r 7À«_ó熈ÑFÂ2Õ:¨Ù˜-Aè
-œÆâO­Œ,Eß÷;XM«âU†æüìeçÎ&¾¸cë2“.D£T«h8&Ëe7nV"ÎCøpÁ¨Ö# }&_ot-ç2ÃæXL¦ºŠðï"’‚Áf&ѭ탔w¤éʼŽE9Ãê¶Y|t\dà=_©Ÿiµª¯9ÅÝU5½<}âoCʬe±É·mQJ_”–õx-ºDïä»3¦Ÿëï"‚_
-{8þFÑÇæ–éì é–sEcø ôc/ ¥Xne­£ß Ip’XÌ,X§x©oÞC§C7}yñ8㟑KÓ•F<Ø—¶cÚùc§>É÷"ÊåæÔYxVì#³í³9y«bTjýé‰NÜáù„…ªjŽ\«WÍX!Ì[Ê뺧b'ÞŒÆ)<$1ôÊÚ[,à§ ƒ@ŽWÃc3/—°WnY"¬Æ4áé[_Šüå–#xÎöf3I¹[V¦;ñ²è2f’a_ÏãX;q)ö&Öö4FØ…È÷Ÿ
-=X¤9ƒ:Ø•ñÒ
-†*Nñ(ßc“À“
-ÎQÓp/6è~
-ê™ã2ú»‚îY$óµÉ•­ßª2^IÑPYm3ïÜÚ×Juý¼=ÕùÌ~9Äÿ 2©”pmPkDÉ Ç¥)DcX¨Ù콘ûk*+ÇMCÆ{Ù´~­Íµ)²è5¿¯ÅL|yÿ1ª5u‡Êëñ÷Òc9„ÍrU ¶óBDøò3TyÈ嘙 SzH1ß+`Îð¶+§`½°W5Ó㎎²ÁÑÃiÁ™,÷ò}cýö3!§ïÒƒŒ‘Pu aÛ›”Ë tòÍ|T\ÅL,pÈBHðì9çÑô)8H-úäjj*ê=êOŽ
-Œ†<\a/r¼ˆvÈxµfíÉCvP€ÕóuóföÈy§Åm4ÍÛÆajùlW¤JÕ4pñûZ¢Aÿ6Ñ®–B][¢µš×´B©®¦Ö
-åUÔwUMõ»gÕ"&
-C•Á&ûA×"4ÂÌ]iÅ Î|,›ž(mÍ…pêÖ.‰ý³oRŽÕ] ¸kެ¢PÖ¡ZÛZŒŽT2Ê©‚pC¯–dô.Rn®f™7£žØærðk®–-!OõŽž1t¿9~‚󖉿·q¼mxYæó”9gK’}ÃÜÕè×å HéÏAf™\pCÊˬM‚._óBâÚjq À¶]qL÷‡ Âa¯¡n—ˆ›´¢('â¥&Cv­pñf–¿‡OFÙ2ö
-# ð:øF(‰¥YäsäLèÆùxÂJßÓ%ÌgæÂîˆñe:‡¯#0®ÿëÊ»3¯‡óíLM¤\“wŒgßRkHäŽÅ_KØwÓªÂìni–ŠØ± ¨wŠlNþj sßÑ8v<o¸ÞâÖ²ãU8^ë|Wš
-ÆúÁÿ%ž†ëÿ öÿÿsK¨«»³#ÔÕûÿ
+xÚ¬ºct¤]·.Ûv*I§cul'[£b§bÛ¶mÛ¶­Ží¤cwý¼ï·÷>cŸóëœý£jÜk^s^×Zë5FQ’)ª0›Ø%ìlA ,ŒÌ<
+šþô­¯œtGLz¥ÈéQž7K²;P?8˜Õö¦””õJ>`ˆg:Yánžiü(\
+ü°¾<Ù£ø§6Äbw¡5aÔž_|M<}~¢î½…î?$¤Ë‰…§äuBþéçC(øC­B¼ªùÕi{Ju ¡glŸÏÏìC(»ƒ¢ÈbÓËZÁçjð§fÌÁpC@¶
+¦éÂú”/é„ÐaF)¹ìÉT_Äü AÇDF@’_²– z¿IÂ>^"ò“£œŸpÖj×Ñm¡HNZ¬¹Šù—;Ão{ô«OŠ—©š}¾ŽÈïqM gÀÁõ@‰Î
+vÌó_ŸäsýðKÞ`zŒ—6$Aïܪ“³ÖUª Ô¼qTÉŒ!ÝNë”›Å/˜4ú#pöpò>ÙMBˆÁrêM<õlb®‚‡é‹à\jÑhŽ!··qèš–í:—… u>5±“ª——‡³›G¿:×MÎ{òεÁéKœJC·Ò@µ¾/)qpgŸ”­µí‚ ¨•Šgý´»Û]^ÕÞƒÛ1Ü ½û߬Dþµß™á…°ä]xŠ©9
+b¤H#øÕV h@û€€Æjý)ûƒe{’Ó
+3 á"Å8a¶ÌýhC©Š‚¡|«ßÎ[ÖGÏ3“GDBI‘Z8«µ¯öºÛK
+’wi¡ ´NºóoI^0Õ–ÎÈ!C6פ  AÅjc›a˜LÁýäü>wiúÁЧ('Q_´d¶lAS¬Ôæ‡äaíøîyNM×iÙòD³."KÂ.38°n
+ݱÍAïOÇ4å|cå žä½Ë™à˺_…¤Bcbœp%ÉU™xíŒ`#Ë}Cºûð¥H"¹ºå)çØÑYi#,ج¿ßÁ;QÝqç·Äjí(^&+ MÌøkRÐ,7÷u¾!+o­¹-}iC¼HBbÛ*1'O. Íþ~6'jïý˜ñ+gt5û¢PVÔÿ¤˜¿T?ÚãÔR¨s(S¡šq¹"yV‡ôî@v¨„3ëÔHG¹çòšu´ÉÅQ›8 Ô%âÛV†w>ðÛeã‘[‹}­H}öA÷4OöÖgí
+„7N•{œP¾©3¹¥Œ/Ä[Ö]ªp­Cƒ’½f±eB8|* ÿá´%Q0d’hyŽÏË9€œH7þ5'i}=½ó{LXwÜëaä6Aº„ï5Ëo7F—Aµbñ#¹‰…O[?ˆny= ¯7…³¾ÏÆ_žMSÑÓ<Ÿj²¹O-ÄËOrlºÈ|!•¡ÀºüV„, y©+¥, ßê¹2š_Sûà£#üåž ·${qÛF2<üm=àmûS}ü{/°¥ÖÌ:i­‚ƒ‹\’³¦ææŒ"×îS©ÄÙM>?gЀñ¤kMí!,£sê-Ð@‘œm
+ï™°H¯Ñq<)XÍe.vUÀŒ‹Ææ6¼j÷(OóÈЍð"AÏ@ ä_ÞžX$#–alxUeh[fdþ.Þ_lÔæ8-®(˜ÙÉë¾—©)ZóÕŸ
+Ôû´Þܼõz2‹÷¤#‚JÇ_N‚aºäYCÏ>\z…„–gĈÏs³Ìjd¨¦!X¸ˆÓ wÜ2mö8Ùp!os´C?yTÿ@[Qc×Üÿq…ÒŽ¥Á=5(æÎ¡m³× ÔIìÑ/Ôa1VGKj]Ø w´Ú}oä¿8A#çÁ°\SêœM,ZkyÀºHí(¨ ·³ÔŠSñçöš]MC~ÌTŸÜ¤Pg}÷p€‡€ J¥'Þ fØ‘Vý"‡øíbÇdsªÝë~£vz-t±~ŸU²ôn5\±ìÕµIýS«Uÿ >¢KóHšÃmµ[»nKYݼ øËÈ|(ÚÍs@w³™ >sϽ°V…–šü ®ÙÞÇ+×Xª‰‘†€9õUW«K8†?é `(zšŒÜ›×Io_eîÁ‘Í>&p×$ÏoLòŠJß´/õý…›R-“ÃOÃÄ,Á‰ þØFáÒÓýâùu.Í­Ž©X€²£ÝF:ûL@¥å߸‰+¸CVçD§›î$2ܘ±­¤‚Tô¦:‡4Oòü?ŒÙì7ØC *™VBÆò6Vjó­šÛ¾§ ÷fÝÆ1÷ídž ¿ô |ÒÞÞ@OBG À§˜«T ˜Ã1=Úuø1&\ÛTĉº(Ð64Ï›§¼ì¥—¿ž6ÇnÚ4~ÆcÅÛ[zFbÆ’RJ»žƒ.¶¡ÖkŽãÃÞDþÈÉ+GâzƒîÔ¹m_C|øþ0/–­Xµ³-`_1+Rå¬Ë¸ƒðžM*&`*ó|ÜTF-ò\<óãT¢
+
+
+à+N‰Ø5ÚNjÔÐY›€¨áàݵiï+Zf;ˆ?Çåe³ÙvWà·kŸÒÅüµ—¢I¹ë´“F4{½*-5 …)<m‰‘·iîúó…sA€fÌTljò‰¹^›]¿w›H.’îŠI†m¸_|óÚ»b \ÝÛè#Úžƒð ž1Êê ×åã–μmœh³fË]­Ú¸¤„ž¯\ÇišÒ}EK¶ õ»›õx}3sŵÈûÔM¿=i‹ƒ)»o)=26¢QžÉªËC†;ß5T]hQ€Ð^šŸmúà|‰Z›!ç˜8ºs±S°È¾J¬f?Ý ëÞìoåCˆ€ßlOŒ‰¯¸1 ]§Uxœ<Šzæá¥€•áç=ˆÎmòò‰¿½PÓ1ú”¢>2x¤iÎ#§·5ž.‰©sV ñº^ñ¼ëÓýªÀ›`õVÙÅ¢UR¸¼ûpœ“åæ41$ûFÐ8ªŸ8 lV{v”ƒîÞw©³î~¯ìýý«&À꾃~èôÓEKå½ây­ Dj”¹÷-vá'†H=~€Œøä“þܦð!UMÌÆ‚qzÝKs"œÏòçžNIZÇ&s™/í}‡•‚ðQE´¶åï¼1àE˜»×AÖö¹›€Ú8!ZŒ%©u4¶7×)-¹¢þxÏ ÌŠi#Ò},V{ 3ê™Lk0Ûd±À1èÙýåÇN@ˆ<E¾=\Ðwö\#·Sä‡ó Ìµì¬ j‰um‚Þ>ñ€ÖXzdöi¢ð»†¢”YµÇÙ¹þÕ‚ÅmË.»ÎÅ)6>NSã"jú¦HËèË­LnE™ƒ¦üÂKh°ï_ŽÆˆ\RÙßC* 5¦ T(´eLjÔ9úÞÓ…eñrWtA…¤ÙlõtŽcKª¿ÔL©ÓšïÃÍCm á‚cÆó7ªÓû:³HAÁÏÑ×$k!å8Õ#[;mñW¨$¥„ÊQã]T”PpÎÊ©j0)¤p)8H‹Ûä—4ÞÌd9ãYVä]mze;ûµª.ò+ÜôÖÆ¼9+C­…ŒµÍ7ÈÀaÀõñú%B{PçÑó²ŒG>¦ï\8ÞÓ>\ùë
+¾07ÙtîRÝçP{myZí2÷<ijœçâzxÒô £'2ºñÉþD–£,9tÞ±¾vR§ðSpCŠ%è²³O»¢‘χæhÇeUfL†öH)”éßѦ"¥2¦TVÞ¤Vx/>’^޳Š$pEÚŸ ºþ<˜÷|š‡+œüäî˜j
+º.F5|EKÖ_kßU­†Ä&“ó"÷•€äûdÎ…#æ›5åØK"20¬.Fí¢Jà(2\࢚z~"‚*X¸×”•›¹-=‰Œ!‹2 ZK …‹3…~`ÊòJ&qðmvpˆ;¢¬¬Õ¼}ÜtЈD½N¸Q/pÏÐ@Øy)diDÿD¡
+ÛIX¨_QW:ÿµ ]úÐÀï9Lœ`]fd„ú1ØñœÖʨó™¢r
+EþØÜlgøÕ_:jûìe ‚¡¡¬
+M q‚8IoÜ•ªÅö›ÍL-Ô…`€ToÞ½*Pvz:N“x ›ÝžÜ™3*IŸeÀ4µô
+;S9Á%]9Ao¢ÁN©‡’p6/€ôJš6:7õ"élÈ2îqœÞ܃A«ñ)Û«Â!F—?+Íõ­ÙV³d$7ÁÌ&áýWW(Þg0 ÎÜ#Úž8¤;ßJì­¯ý‰Ù¡L¹ŒÙOÝ5 oYÖá˜
+AÒà}…a™5‚>ÂÃNFØX4²–€žÞri¸™½‹…:'é‹NÎXªËQ±lC#Ë4’w‰ùŸÈ>ßOºÒLZx¯dTH‘™‡Ø*:ÑP=<Ylc<¢„%V­ù3nË ½H¼!›Å.raìþ“¼ù÷Y:›Îxf‘…H^#ü¡ æh
+ø>@[›CQƒi«m®þ²´!
+ÚÕìΨWtŠã ?oAZdævò6I›¼)’þ‰èRUÛÌ(Á@Ú”µ²âa»¦Ð£ñ Ûå²ÛšÖ/ì¬ý&Å%é¾ACF÷êÏa¶šƒ;öùZjûâÛQBÙ„ãljÎYIN«ä…{Ïy|—hX®t²RML‡WK&q¨aEPjÍ–_ê›Í2ÒÙmYL¡£Ý§ÎŒrêgsÓ¯NãÚ‹+A׃²„7g¨ëÞÊN óké…%¦~aÝ–o¥­~F¼».û#3{9D«Áä1;â´æ ÍôQôÃZÏú8w&_a†¶j¡ã÷q ´r©>Ý}~9ÃQ‡“¹ýñQËöš‚¸¸ÅÒRß
+nº_Ø;úáW„ZÏ(œd ÆÅÕ>¤õ„‹ÁêÍ¢*qöŒ‚#röwQ;£œjÚÆ^kNÿyŠÕzÁ<S€\ìæ¬#
+) ¬¹YQkfb
+<Æê> tjY×rCD[")Q’£#˜Øn]Ìcõ(ð(»CÈ=g}¶F`³k940Œܧk¤ÿe:ä#_tRáY L©£½N‡íAKZ' KLH§£tvH¶ÐSÑe6óSò<ø]©k>¿2 GÇNê#u0UóQŽÅÕòK»/ó<'\`ÛyæÒ5êLZ íèÄn™çšz‹ˆÆL²˜)ÏvŒX¡[M5þÉž„¤´‚o®HõÌLg‡œQäzä<¸±5î6Ýc²±ï.U¨vÉM{bUWåL¼Ù¾Î,mxÙ*û+‚ikX‚â{uõ<„NZ'8ƒ,T¥~ Xè%{2Ñ/f>[µª¦Dîïö|Ý¡±šöœ©.q´Ÿ›l¢”„AMãSæKæí3r,ÁãZ<Ë›¬ïám)œ+h¯zìÏa~¥^Ø‹Yºxà½M67­
+}¾Q@<gäÍd}ßÜ-âãf††Çª§è·à^.@­uz¥@”M|ݰÌì4ÒÊ
+à™<=²!>°ë_Â! ¡nÒ q£^c7Nh?–Dbk]z‘Zøù·Íà[ÛX=mÅ›P :žž‰ÍW½G°tC#<áß×V Â'¦ŠÒyÞÄ1ò\ðÎòˆ¿ƒˆ§9&åŒÂT«âÞ°;¯oQ
+Äd²’Ø[EÜ­°¿ÈÇ`n—ÅædþǦiBŠFtù£¿ mŽ<{ töJD|Ï;±Æ&G‚iþco§Àå²-çaA3©±W(æ‚2MYÕô(mò¤ œFã³{gþz&V__éa6ÎÇp›¯ØalĺÃuwðnæc"8¡n‡:Ñ!1w‡Í‘˜Ý¿g•à ˆ%ù[ÛÃÞI‘nÓåÙ–~gdº/~û¬ugÉp¡`ÁPþôTiHŸì2\)ÜЙÍàÿ®ºþ0æ‡zx)œE½ Úéq;7,¦ýs¸ƒ,ª‡izÕ­éü*ið¾\~]•mî§Æ Æ K•!ì†ß!ou4›¿›û‹†«ðw<«^UG‰/)cy¯$Ë‹> täCÔž•6rеð‚jåº)×ä; æC'17'IÙŬõ1:Ï–¼pV%¤»Ã
+2°ÅѦyWýö¾¥jÖÎŒUËü«üÂ@¹,íðÊ&©¾JèS"§oóZ²,¢t
+’ú C¡ãa4Ÿ—7C‘ªÜ݃~Z¨‹ˆÃ©µ»*‡‚s· @qp![~_£Œ¿:[8&‹”ŽËNp€0ËtÃ"¤ü4q%¬i¨•F³høð¡<uÖñ¾î7iÞßÐäS)–óãIÌ)¶é¿Õ+[ò5L\Ö*ãÍZóÊgDسö@WÎìÖ1üÊ,o>HÁ81äј=Þü2¶ã³âL˜lƒK¯:ÏÂiåsB¢/]ûP6
+Q+ª''a¯¥¯óm@6úâçòg}»°4ï N–³š¬0ìHñëà´Po|®RÎhkÏ–T…£¿» ”àá€#V‰Y R³ŠÅ·Rßx°îV&£Ìy«úEê¥Äyêî‰;|0üŸ¸Opˆ`Ôæ:5 ×
+dž°Åû€{ò$#ïˆÚrþ÷øúø
+Ažˆ+‰o徑ù^ÄWòó
+þ¤a;åR6¨¹;áD]ëVsGm½˜¤îý‚(Œ3î} ìfˆ¦»ÖÔÊËÅ!’uÒPPÝöF5ñ;êO"•— ni2õˆbg+€ã–¦ÜÛ%çŸoÚˣǦÅ|É) –C¹,Å‹ñìSÑ.”Qƒ—#l )tæúnÙ‡')ó×LMšýLsi|¼n°Q!g ZŠƒp2Äòf;|d·sJ5[èOú»·r•
+¹0>“Q80ƒÁ˜jU¥9Ãüró5½C£öñ²·Ëä—A<Õ¦¡1RÁgó[¼X- ?¼§µebÑ×k^6*Ù J ¬(І¦7Ü1)ºPïNଛ/r§t ªX¥õø&™ ¥ƒÆôÏážµÓfÇH­öõŒ’°.ÛJó9øP>µe't§l†ƒì1M¾#,Çä1¾#Ü­ÕÄš#[ÀN).·E¶/°6~ª§ˆÄ•T1˜ôY¶#ß:a³áI]ï¡‘g=㟗ì26®HZÄ+ØÃîk
+z|~ÝX!ö×½’F`à[m”Ý»”}«SqÁM÷]»&ÃÍÝùԛꚥ‘ü…@ÏHÈúû Ónê
+c—™XúAÒœü.; ®¯˜›'·Œ©½C›ˆ^zºnõâ塳ýæzI‡•
+RÐ%åØWÔ糖Î;ÇOÏØŒI“ëöL%Ç’,úÛ¼F¬>žÜÁ|á™ôaײÍ4˜m?3’V=·_L=Rx;`‚i<’kav`Ä óè·¶²ú0
+pºs*Å"øVŸûå¦ä!¥`˜nƒ³ß+ó+޵Ð
+çøx£ƒ®Ñãz#ú€½ãJÿy‘ÃEäºF•“Róª»ÿø†D¯11tü@Ct´Y$Á¼šGj™¯%?¼äX+å•?L¤ÔÛ˜‡Í”_´Ò#(?Êô\˜ã@¨nw"àYl™À<”w„ÙY)ª5avQÿÊ%éömŒ—êÆ5=–AâŒ*$$–-Ò{OcŒËüŒÖ3n¡÷j¦&•3ì£Ç€ÄY+÷U&‡Zg\'ãMnÿ@÷W¢4’: zvlAÚ”‘…‡’>é„Üo¦˜Vü_Ù¹šÇ};*ˆux’ÆC,(¨ƒ|ýÜñ¹Ú÷zw¹
+£fÍ6•9í]ØTɰbµ÷áú1K/š&‘9€‡e×¢hœj4Šß.Î[)Z
+dCŽREm46¬8Ó¥N¸ «Ô6<É,ÆÐÍÉÎæi:ýx(¥Ët8ÐËn ÿ`’®!
+¼ë0å ®ÏØ¿îZïܪc~[Q7µê4è©Hšñq‡Ôø°7ò=­³ž‰’ §™òÆú˜“duˆ?ÎÕ+r^9kæÖqæ§œa^NžbÁ:ÐÞ“ªC=>JÅЕd›dg‡¼]ÕúˆËz@øeaªCšs5z Q/FÐé­Dú÷8È«âX²D›íŽO@Ñ% U÷Méd>kZ|èdü%ÎÐ?,cYÎMw5ÊÃÃP|øTëZBŒåæxM~`Ô•ä×P
+Ïoé†-Ë»ç² ¹ Y¶ñ­Î±‹èÞÛ°ëÙC¼aŸèß7嶸מ
+뜻%CAÌ‚¬UV´‰Maü€¤Ï¹uñçó„áÜêÀ:œð؃CÛ(|#ºÉ& ÇëéòɼÏÈ8GÙx被 гp<BÌýÀ«›[¤Êñ+ÇÕ˳ž8b׈×[ÍT|­¥#NùæQß§CW;Gˆ|SmÿFÞÖil±^õãþ™ef C¹‡¸·á¢y JòëL;˜L]¸îÙÙeÂAÚbˆPAIÛdðIÔPîÅ
+×·³÷ŒAÿÞ]ÿ¹:#¥µIä
+ÑÅÛ±åprkBÙûCzÆaÑÓ3ëÌ"!²2ö]3¾v{ÌÆY­»G «Œs» Oå×náR¤C2¾&`ñNƒ§Eƒ“\ÙÍ9È&Bê.üŒ¶Ù· nRV'“BV’äýáú%h:¾.l¶CÑy%4KÉÂTÙfÝ4„T·:ùÔÖ4_'áULšj€žXËÜý¤öiû ÃÆûêç”´c§=`²¨øqªe˜ßC´Ü¥îóÚlméòù
+H¦Ö¼9Gž¸M‡ôº„þP¼¡ïÒ4Š›µ.¾êJøiˆG•Ä$ …hÎX÷lÕ-DÞßÍ›á/c;§Ü?‚Ë¥9‡l®Ñ{Ä­Æ»òni†n½$›B×:õÒ©~’Xv
+ w/¼ÞU·O§”~EÁÏAç8Q•|ðŒGÇ=gý9,?YÁ2Ë<må,*]ß»¹5HN”¤mf`!”uåIì¦uþÕÕ>2L"ôÄEñK‡æPüÚ÷AÍí"I1„'{†§³ úº¿¯c¼NøŒß_lbéøûö— m„nĜɫí÷Zäo£‚³|t0ó>ú>S‹Â™ÔRú—°zaI¿ î%ÕA˜">© •N~ú‚×-† ®2-QVçh-‰úó ýÞpܹâÛ/–¹"5vÎf—GWnT66þ8éô^úÞu¾4+k‹O
+ Òo)³S™2áØ¢c—¶FäKa·\®ó*‡©‘@èž›XsIÅXðûh‰ðeýÖ8%W6¤¹¤‹»Ü²yÕŠ½¢uoUêJP'mͧésŠêø?¹ÄÆŽÞמ+Ü¿eB*£HH:`rÀL]¿ºH.âØð~}Êη¡>¼üHÇ8š½D ýâ.ºQÞùÎ_]Ì—%×ÏØª3©W$@2?d…°Õã¾Â`¾²ß³Þ׆>xÊ:ªÔý°™9•YæÒÊßÞñ˜¥ãë^:?Ü'°‡eIº¼¨-„~ä˦MÕ7W¥_ÓÞàÁ¥MxqÅß)w¾€Ì}®+È Á‘ÄâGu™.­Y6¸D£‰ý}KCîý§WçRPn"8U+Sœ÷ÂøÌûyvÝôL½3ìüî3QÁš\É–ä>¨UHC{ϊѼ•€Q¹!÷Å“÷.¼?;L9§ZšÒE¾é«v¥Ž}03|­˜6þ–ˆ¶9£,whœ-ÇËŸ­×;?zøpÙÍ„y8àŽ9Ë¥H»Ñ<TÒ>HîÍÄû-q˜˜\—1άÄ.5HLUcß|{¨8óŒòZßÔç`äô³ÁPß½Q5åŽèz”=ûŒW0zúU÷Þ r còRˆžÿžDCh-&¦)¬u#Å>"1™k–ôÿ »žÍÌÃá±N”vD#¹¢A窠›`_ÝxXÒÈwgÞ„ÏÙå 솋ÛÈK+´CܦA"Ê
+âc§x~XÃJo(¦cé;‚÷ÿ¨š#1âŽøé}SUx °f=”4+ÿ䎧õZ›…H
+—€_úØî*Ý– ·£ý7<³Y6ªãvl¤ÎݱæŒú‹Ù¸™‡ÈÈc?m·Ò†h¡ˆÕ©Åç•¥RäÍ×”»L|âÊLwõø Ρò°¤¼AçYKr¼Ï¹ÙÖJÑkW½b%òyQ·ŠTæ9æ‹Ló"$N¬½ôž‡9ȯòL¡åùö;û¿ZÆMú›¦Ýj{wAÆILTI¨£%èÔ&ëö…ôâÞ %§½(1ã:«/h•¶µôÕ9óUÖô”‘­Í¡i¬rÝxUæ¸ÂÝPÂ#á61”#,*@Š –üb±·Tx8ÙÄç{ëG79yçÐê°ÀCþ“væ$Põ`Ò匀V–ƒÿþu6®%…Ùqc†¬Ó:†wtÎì•NôwØÒPÄv©*û&<û'ývýЊâ¹!ÔA"OýMBð¼"ðÛQܸ…ÍK) z²>Ç'áØóô-oâŠÌ#°±ÛÓ­ÀD/&Ësg k7/;ô^D÷‡ÞKÉÁ¤ ŸCH-²oS<ÛõCoõšÂÛw˜´øŒª"ØK–_Š­"H‘¬ûVpÆsáõpa¡£_Ì×SÈÚua¯õ°Ü±l|ÚV±{+ wókÎ:¤6= s÷(HfUôRê¸zP¢[E  ïcYÄEùºŽsûr~3§Ÿ°3ŸMÆ?å¦T‚°ÍZ5ÕèR˜±˜rL‰buO[ˆ`×w\ÁU·?‚‹œWà&ó+Дzu(“ Ø!ÌìÅûR% 2ú§8xdßÿó <ÌЃ|Šˆîç }®rw‚RÕ:Mp’òÛBÿÉ]˜RòöÖ„½®íX((gÿ¶Ä?ɸ‹e»¿è­ÚXÄ
+ܯ*ù V}ÒD¦ÿôð¥ÎÈ
+}ˆÒçq=G/¦8õ6ÙüÍ/]Z?ó{P>yêU•œµú}éË2&@žÊå:Þä®þ;TÆ
+݂Ư9ÎÖïSftt7,-–‘hV©©< ®ÙÒ]+,àŒA‡Ø  •;…ÔzEå]þ<Ïßý‹Ìɤ C™Ñ6ïðÖR®{ÒºsŽyZÍÒ+±êÈÜôÄk´ѤFÈZ‰!FÝmP€×:%•éd
+Ü)„lk2'¨ á"€”Öó±âµ|syùͱÕe€\ûÊJ;YýMªI­‘_£ƒ~Æ1bfÓõÝd=–ÙþÅ|SÅ=UkΫ
+S­‚DÍ0
+G7ôæøÆnuÒ{«ýef‚‰@ÆÚJt'D©Ñeèb ÕÓþÿkŸ,Ûš
+ÅGÕkX:gׂ še£¤xu®ôØ\CùqKå1¦g ¡lø 7[Ù²Ì4Òÿ¹[PÞÿøç¥ÏFÔ´²ÿšûI#pŒ"­ªºóöWwxN¥&ÿÊYGú鯄¾åoK?\aùt@½=¥¢D#UŠ&ÐmÂ΃:Kó#˜´ÏÙf`ÃN¯Ú¬5}=ÿúfy$V·‹Id”-é%#©¾¯{z²5…رF’oö¾!²’»÷ØIáMØïä†H}ØÝÖR´x`î/Æ]è›Òª^3±Í7é¶ûñâ¬Â^µñŠ
+·(FLH³~å¶ÞÖ@Õ6Jäó¾xÌ0V?K£ÈÕJÑ}gy,‹¨†/ã©$þ¸Ì~“Æp\!#…þö/»-ñæ –Ú3Uv+l•EM ´Dýý_O‰uò!÷¶:) G‚·Ñ é91¬ÄdÐ~í@§q&±ÑŸ<¹¥ËŠ)üÁžjÄÆpîp ãO`6ÿÓaÌ€“Ê ‰bœ›³ƒø*Ln<rüME‰J¬#Å<ÝþŽð»Z–êÞ§é
+Ö/y³¤¥6f,¹yK@ðcõÏ’bÖ3Jca~Äï¬]+)T!¿hê (ò‹gÙ׺Ñ9QÀî/LÆ. |ºy‹ÔOIûè{£dç*ÇU6j—áÅ+”S•ÙÏ=¡ …–› öHL
+ú¼ÌìÝÂYÛ…(tf¦ƒ>•OA‚+«ä¿dWÍXäøkÚ—­ ÞÎÓÒU±?*›¢jžêß_
++µ¸¹­Cí­u†Æ…¥v‹øò¬WU˜}öÔ“LÂØÏÚ(kœ¾¨RoiÍ^$Hé~ÒøÈz’T ñ׿·xû0­®Åψ_ShúÜ2\o­EŠã¦=U´ž$¸_N Ó–jz͉Q
+Žò2Oa}=AÀmãUv”'·ýÆû9û¨,Yó‹Äg“ˆÐ‰$¥°®ÇªÍ3|Zí-Ä
+ïùnS;ÝŠM‚­fˆðÓ%¸<%kDpu47û95%–T +G“¢æ×*T‹J<Èü«˜t‡'On¬ÄÂ.
+ðž¯ÔÏ´ZÕ׈‚œâ^ž>ñ·!eÖ²ØäÛ¶(¥/J‹@Ëz ¼–F]¢wò¿ÝÓÏõwÁ/…=£ÆhŒcsËtö„t˹¢Æ1|Pú1—ŠR,·²ÖÑï„$8É
+,f¬S¼‚Ô·Nï¡Ó¡›¾¼xœñςȥéJ#ìKÛ1íü±SŸä{årsê,<+ö‰ÙöÙœ¼U1*µþôD'î¿ð|ÂBÕF5Ç .‰Õ+‹f¬æ-åuÝÓ±oFã”’zeí­ðÓ„A ǫ᱙—KØ+·,V cšðôŽ­/EþrË<g{³™$ÇÜ-+ÓxYt3ɰ¯‹çq¬¸”‚û@k{#lŠŠBäƒûO€Ħù%ÛèúC Ýt@AÎ]7DXÒþƒÅuOî­¾[©ÞÌ m_'y…,ÒÈŽAìÊxi
+K› ÀöYt^¬evQ&57Ñ„t9Æ©‘;ØQLV2²ûËI2­U^¹¨%Ô~ŸŒ×ˆzW
+—wyÑ7a﨑Ýâ‚\Ð8Ó}`\%êp‡có'Æü-ú稛ù2ü@/øç0´ âs]1Ñ “ì³ h«Ñˆs.:5üókÔLžQdBöǺs+úof´Ôë§hÖ"³ÍÞ„ôî¥J¬°aÿì·µid´¯<îûöÞŸpÖ=×&¸ùï|A½WKÏÓ}‡õ2yÐ2f:oü0Á¹=}”%4€%³ì~­46¬“âNÑq›äøáõéí”Ú,VÞyš0ÐYjš¿c\êàøªà躮´Cg6Çh¥8=’Š%hU åí™Sî·’|Ì¡)‡{—zBÅŠº¿ð"qج5å§\
+p
+íSß»bò7+֘ߠáænÍwˆ'£#µE°nx‹¢PšL~|ö4KQ¦–!¯jn£ÕªîØãVBGE”}œœ Žý­Ð{ƒéV³”Vã0¾ô.¶Tv‚Ì|` °SU[¸U!&ýø7 >hI£YÉì0…òÇ*껪¦úݳj€í¨ž¨ß`Ù?8sGx9g3ÎîèñÙt÷:n:—SúluHx‹œ›ÍÉPo·«ÃJAüÕh€ß¾ÅW'ˆÃô´B ¶q…¡Jˆ`“ý kaæ®´bg>–MO”¶æB8uk—ÄþÙ7)Çê®Ü¿5GVQ(ë¿P­m-FG*åTA¸¡WK2z)· Ž×?3Ì›QOl
+s¹
+¹ƒ%ÔÕÝÙêjý76âendstream
endobj
1077 0 obj <<
/Type /Font
@@ -13589,14 +13595,14 @@ endobj
/FirstChar 2
/LastChar 151
/Widths 2626 0 R
-/BaseFont /WIBWHL+URWPalladioL-Ital
+/BaseFont /SJXIRV+URWPalladioL-Ital
/FontDescriptor 1075 0 R
>> endobj
1075 0 obj <<
/Ascent 722
/CapHeight 693
/Descent -261
-/FontName /WIBWHL+URWPalladioL-Ital
+/FontName /SJXIRV+URWPalladioL-Ital
/ItalicAngle -9.5
/StemV 78
/XHeight 482
@@ -13617,7 +13623,7 @@ endobj
>>
stream
xÚ¬¹ctf]³.Ûvî¨cÛ¶móŽmÛ¶mÛvÇè°ãtÒaÇN¾~Þ÷ì½ÏØçü:ßþµÖ¬«êªšuÕœc¬±(H”Té…ÍLÌ%ì]陘x
-®S¨þßTføŸù@âÿÿGäýÿ'î×è;ÄÿÏó§–p³µU0¶3ÿWà?î€àŸKÆþÿð6¶Úzýßüÿ»§¦ù¿‹ü¿ÒH»ÿm…°½å_9è¹ظ˜¸ÿ
+®S¨þßTføŸù@âÿÿGäýÿ'î×è;ÄÿÏó§–p³µU0¶3ÿWà?î€àŸKÆþÿð6¶Úzýßüÿ»§¦ù¿‹ü¿ÒH»ÿm…°½å_9è¹ظ˜¸ÿ
øâç$‘èìQ<c‹á¿goбwžçò»]­fª!òˆ6 w¥–¨AöhÈÞÈÛœ~N6Ï;ˆÕØlÐЉL_¦¾8)ŠÎ1¿5šUÓ ÿ8挧R-
^jÝàÐgo7¯éJµ2ûu
.5D/ä#0"ÜаÁ®:L³g¯¡Õh{ 2Ÿ‰»ð¢Æ“¸æD¸›³mÂ%U {¿Ã
@@ -13685,7 +13691,7 @@ s6'Áã,Uq3<:y+, ƒèn@ b’‚ÝU
¡Åuy¯Ž]ÓÕIÒã>0¡|7³ûÄí×[Ä=-k_'N8}öªqòÿ­‘ÊV$.½ò·jû§‹'ÝÖ~Pæ/®`£ÅÅo“¥±ÓYÿBÛ·½`ßus=»›TµM|Ó˜·u®U{·ÉÒÝOn)sËe{UcëÒpÙ%áó¯
ÍìÝóŒÎèš²môá©B~ýzúí©íÚ(Á¸’WüåºQMçß^ösd}åYs¸,Ìñr[é6Ýï&IÊòÓë5[½§NÊ?ñå3÷¾™­ ë.
]*qªýYŒ¦ô÷;ÍËü®/61SQ¹ö gn†ç¦û &öKqΚªùcÁÿ€ý“*ÏISúÝœWÿõÁ¯MwBŸKL»nï¸÷hâó 
-רÀäœÔÄ¢’üÜÄ¢l.
+רÀäœÔÄ¢’üÜÄ¢l.
endobj
962 0 obj <<
/Type /Font
@@ -13694,14 +13700,14 @@ endobj
/FirstChar 35
/LastChar 90
/Widths 2627 0 R
-/BaseFont /ORVMGF+URWPalladioL-Roma-Slant_167
+/BaseFont /QVQIYQ+URWPalladioL-Roma-Slant_167
/FontDescriptor 960 0 R
>> endobj
960 0 obj <<
/Ascent 715
/CapHeight 680
/Descent -282
-/FontName /ORVMGF+URWPalladioL-Roma-Slant_167
+/FontName /QVQIYQ+URWPalladioL-Roma-Slant_167
/ItalicAngle -9
/StemV 84
/XHeight 469
@@ -13717,18 +13723,18 @@ endobj
/Length1 862
/Length2 1251
/Length3 532
-/Length 1860
+/Length 1861
/Filter /FlateDecode
>>
stream
xÚíUkTgnõJÀ+Å€€¸
-æ2@ Š&X4•;"(R’ $˜$ \(PÁ Bå"Pi¥´^€–‹ÁŠ‚g¹iL@°rÕtÐc—þÜýµggþÌû<Ï÷~Ï<ïwÎgfâáM ³‘ ØŠ ¤N®Þ‡@2
-¸"l®”úÂËæ\a6O"XÉ2ÅŸÇ¢ ƒù0@
-±`>Ìù#lý^ú{ÜÃ!ô=€e€¬Pq—à?Ç` ÒhÅ ØÛb?‚¶€5æß„, ŠÂBñÒÙÄâWsxØÈ`X
-³p½ÝË!)$¯:¹"ö‹ów~øˆ¤õ²­RÝ«ÙìW›ÏcÇxSÏyš‹KG‹•WOÈñ¡
-ý/Y§tÑ+né_M—è^¼šVTî—Om"öxã#Ódk^[™2åáO|£4¤5¡Î~»m{ïô¶¸6slãðùƹÁní–^'-M7Ûõ^Ðøp>ràIçÖÉÚ¸¼;Y·ï»0=ð"ç4sÇQ;hš}Œ àD(Vž#ô–{*å1}öüz÷ô&éSãTÓ³ç­ÞåÒ™´XÃèßn…iâ年eÏ|í®…k2f\¸#Oº¡$eÆïm4v1j{dÍ}µ¹ÍÊMöI0yÐzÕ¥‘ZƒöÇ>¿T)oTš›Ëb_”C¡5¹Æ{žF…_¿sΟCÜ_}úгÒz¹vw½¨»ë^¯SæËB-·4Š«äꬬ–{bŒ„·éè¾³·ôQ¼àƒï¾ö ¨Áe¸Cί52Z†_£h™ÊºìŒÌ¿:øŠ¹º|­¨Äb“¨äRüX"­ÿXu³³ | Ï8’Ëœd¦éå_K€qäxû*Ëæ²:½žš³2yŸŽ±f¿2+JOa"«ò8g´g3Ó3<Ü<ýökÄiÎK
-px®V÷½¨xV†œÝ1¶%aÌWÌ<ÑúrpÂjJ4î­M»ÔUê—bh _jp´™)Ф—Ÿ]¯b*œö› ¿‹º¸…ÉÙܨ©Ôsÿ0}7øûä÷‹B?E[Mh ·öeÏĸœ,ã>Wº×9T—›{íÇí’zB"pލ,©]¹æ)þ¦u`çá}(ÆáqYGÃÇL<4tÝËeW´j®ËÊBfwèDhÎ?+ÓÂV#ê§àšÞ­;öL~¬}¹ÀkäÔŽŸÔKIëw5ئ«}6½É<ø¼ƒ¡ŸûIèßtgýÔ¯Âóæ««Üe}ò˸ó¥?~ÿËPédøúük·ä×äDgBëDkÿ­"[ªâØÃIåõÊc’†›æ2’ò6Å'áLÛ¿4Ï÷âj÷HÖ•Å㪦ƞºù”ÀAÑBtOQõ)må<s¯p˜¬,õ§}î½ï×8ª˜s’þâï§Ho»_hÔµJÊ|U)SÓ%Z­o¶zdµ¹êÉæ¬,”ê5’}Í Í~w¿áŽ=œ¹ ¿Ií[Öû*£íu¼‚p–ë<ýùnóî×ÜügÇ5¢SäÃE |â:ÿûªU*õi£0Ú}y@ű®0í¯n»
-•)Éó[ò‡®7Vì:˜Çlönyhw|ÃlÓ«D Õ·™U¦«‹ûJ*ƶábuÁÀG$ñö²×p}Â(5ñyQBCG¸ÇÀ\—$§!7!ÇM~%Šœù¤)ökµÑ)Ç÷D_uo€£ŒÚjîü5ÕñX׺™»÷àÔúBÙ˜‹jU´fŸîÝNç²QÝÖ…Zöî–Û£Ž!CôkZ’ ~›æÏ ²ÃM á°o^ºæŒÍ†DÄ$'=`¼»`»¾áºl£½$ßÖ4B}8»ÕsÐv|*›FÏo:Â(žGŸ7ùñ›¨£ªÿµá£¿ôµè«êꎞîìJöu1k—¦œQNmÜÙÞM8±+Ûý1ódß— —3ýsr­ÕIå±ìŽz4î¤'&ÛK£WÆ-XØ›[Áù@‡ü>¸ÿ7øŸh€]Ý*FŠûeEþDendstream
+æ2@ Š&X4–;"(R’ $˜$ \(PÁ Bå"Pi¥´^€–‹ÁŠ‚g¹iL@°rÕtÐc—þÜýµggþÌû<Ï÷~Ï<ïwÎgfâáM ³‘ ØŠ ¤N®Þ‡@2
+¸"l®”úÂËæ\a6O"XÉ2ÅŸÇ¢ ƒù0@
+‚°Ìá?@d
+†¡ æÃœ?ÂÖoáå¡¿Çm1BßXÀ
+ñ!w þsp "&P삽-ö# h ØÙQcþMÈ’ (,/M,þw5‡‡ †¥0 ×Û°’Bòª“+b¿8ç‡HZ/Û*Õ½šÍ~µ±ù<vŒ7õœ§I°¸t´Xyõ„ªÐßÏr8¥‹^1ÈpKÿjºD÷âÕ´¢r¿¬xj±Ç™˜&[óÚÊ|”)?xºà¥!­ }töÛmÛ{§·Åµéœc«‡Ï7Î vko´ô:iiºÙ®÷‚æÀ‡›ð‘O:·NÖÆåÝØÉš¸}ß…é9§™+8ŽÚAÓÐìc\
+Ly£ÒÜ\û¢
+-¨É5Þó4*üûús>øŒâ—Õ§=+­—kw×뺻îõ:e¾,ÔrëÐH£¸J®ÎÊj¹'ÆHøáq›Žî;{KÅ >Ð1øîkÏ€\†;äüZ#£exðøõ0Š–©¬ËÎÈü«ƒ¯˜«Ë׊J,6‰J.Å%ÒúU7;»ÀªñŒ#9±ÌIfš^nðµGŽ·¯²lÞ(«Óë©9+“÷ékö+³¢ô&²Jq sF{63=Ã#ÀÍÓïK¸#ÍyIîÏÕê¾Ïʳ;ƶ$Œùª“™'Z_NXM‰Æ½µi—ºJýR Í#áK Ž63šôò³ëUL’Ó~“áwñ@·09›5•zî¦/ãŸü~cQá§hË¡ ä־외Wƒ“eÜçJ÷:‡ê2cb¯ý¸]ROHΕ%µ+×<Åß´ì<¼ïÅ8<.ëhø˜‰‡†®{¹ìŠƒvB‚@ÍuÙBYÈìÍùg¥bZØjDýÔ#\Ó»uǞɵ/xœÚñ“šb)iý®æ
endobj
900 0 obj <<
/Type /Font
@@ -13737,14 +13743,14 @@ endobj
/FirstChar 13
/LastChar 110
/Widths 2629 0 R
-/BaseFont /ALUAAK+CMSY10
+/BaseFont /JRXQUJ+CMSY10
/FontDescriptor 898 0 R
>> endobj
898 0 obj <<
/Ascent 750
/CapHeight 683
/Descent -194
-/FontName /ALUAAK+CMSY10
+/FontName /JRXQUJ+CMSY10
/ItalicAngle -14.035
/StemV 85
/XHeight 431
@@ -13768,7 +13774,7 @@ endobj
/Filter /FlateDecode
>>
stream
-xÚ¬ºc”¤]°%\]î²,Û¶mÛvuÙ¶mÛ¶»lW—mÛúú}ïܹ³î̯ùæG®õœˆ8;vÄ>'Öz2“„@^‰FÀØÎÐDÔÎÖ‰†–ž ¢¨&o`mm`la'M£hgc
+xÚ¬ºc”¤]°%\]î²,Û¶mÛvuÙ¶mÛ¶»lW—mÛúú}ïܹ³î̯ùæG®õœˆ8;vÄ>'Öz2“„@^‰FÀØÎÐDÔÎÖ‰†–ž ¢¨&o`mm`la'M£hgc
áàUûZ­RR Ž_&½þ’ÞŸfx¯%Ê3® ôEþsÈC®” ô“‘Bå0²TU’?…šÜ¡ˆhÍÒVùòýåm»T úÃ8Z§ä‚Û°ý ³:I?Ôöz"6›Èbœ^%
yá×h}×¹­Z  ypÓ‚u=jëé 3\xœa(74nŠïRýƒ&cx£aYKÜ¿‰~ػբÉI·XiêS¨“2ø ú›G²¨†lkÕ›$ñé³øI ñƒ<½*­;:̽¤PœT1]š«ÚowŽ0~,A¸ÕO˜Ó%/‡ìdccÅ÷‹k×{GKÌ‘›j™(+ÔBUÞD# ¡6ª:Mð%¿s¾†I¼;v #wïRUèB&%Ô øªÕ(cÊïZB™ª³/7í¿ '|8¾—}Z£6Ã*DLi´¯kâ'/rn¶èXÐ60µ!~Èaïގا*\Dxc(uè³?^NWù ±CVØñ Áá´ÅÚQ[´¬5üŠvȈ0Kïø^•vµÚ*V¦°cœ (p3“¸µMÖiÒ|#Óƒ}5ãByE¦Ç•yÖÌÞ¢º<^×<;>3ý
ÎÈ;V<g5j‡ùôIH›C„ÿæaTÓ€
@@ -13871,7 +13877,7 @@ PÔ3)lmŒ;œ¸—ü“5|—î”+ÀTÅv‰¼Ô_òF^›b QãLT?yÇ¥ðb²èewïA© !ÅdYò]mÝ ÏÈÍ[Ÿ
‡)Í1p’}l‹ÈÙ¤û¨¯šð1ônQ“Öü:”ƒ‘96êì(…+õƒ<“4Ã7Q|ÿF1°²¨üñ#\õl1ï,äÝ?7Âeì7®Œ½nØ<É„3ÄÓ›rhNBRòÂÑC
^[ÜÀ!ÄŠxMcOÝ—ÙPFt>l¿‹JF¢‡ßÂöð1’£†°åïxDÑv hÇÚ
¥åã—r¢fY—òU·zifÁUÆz*JfU¤ËÞ ½ ýä|ÿ:Ð(Pk<’¥WÝìo*Á]ö…gP³Šþ,ÚFjî¶%™;ɘ¹á9L9.DœÇǦÝ@sOµhòÚ³BãtÑsÒ~ˆ®›×)-ÉA
-ÇГöÞVMýͲ:“®³m›ÓWBÖþü/ùÁÿ ±©¡“‹½­¡“5Ìÿ
+ÇГöÞVMýͲ:“®³m›ÓWBÖþü/ùÁÿ ±©¡“‹½­¡“5Ìÿ
endobj
897 0 obj <<
/Type /Font
@@ -13880,14 +13886,14 @@ endobj
/FirstChar 2
/LastChar 216
/Widths 2630 0 R
-/BaseFont /AXSABP+URWPalladioL-Roma
+/BaseFont /APNTRK+URWPalladioL-Roma
/FontDescriptor 895 0 R
>> endobj
895 0 obj <<
/Ascent 715
/CapHeight 680
/Descent -282
-/FontName /AXSABP+URWPalladioL-Roma
+/FontName /APNTRK+URWPalladioL-Roma
/ItalicAngle 0
/StemV 84
/XHeight 469
@@ -13907,7 +13913,7 @@ endobj
/Filter /FlateDecode
>>
stream
-xÚ¬zcteß³mlÛN:¶“ŽmÛö‰mÛN:¶mÛ¶ŽÙq^ÿþWoÜ÷>½w?ì1öªª5kVÍZkœ3Æ&'VP¦4™Šìœé˜è¹‰T•Ô ml M,2tB
+xÚ¬zcteß³mlÛN:¶“ŽmÛö‰mÛN:¶mÛ¶ŽÙq^ÿþWoÜ÷>½w?ì1öªª5kVÍZkœ3Æ&'VP¦4™Šìœé˜è¹‰T•Ô ml M,2tB
Ѫ&ðëöÜ(ÞÃÇ‘œåRMyû©i¯MH>c¸¤bq›‹bgÜë㤸>· +Zµ‹¥{ü‹q=v¾ ­™«O¼—«Ñ)X!íÁ/$ä±)$§ÁØ^‘w?í¦‘ù]€§“X.2)§©Êer[¤ .©»¹™ ;þÄýI‰ŽBà A¦¸¯»àÐaÁôÞ®|û³ 5ï8sêÓ†
"ŸÍëã-ö .TÞ;”Ïè*Yp§«© ‹ÕÀKÀk" !œÑE¾[OžKA3æTv7‰.ѧü™"Ç S"V™bIÆ@Ζӧ
@@ -14010,7 +14016,7 @@ V‘<}6j]'»EVîhû‚}6¡ÝÀ6àÛ·o÷CfÀ¿ièﬕò1e·)(+‚§l¦…ãƒÖˆç\àíÈìk}/y»—ìǸoÕ
¥`M/\oõÛþJXSù6”¿ü'ŽOØLaà¨oÍZNõµáø÷P³¬æ#À«-’·^=èCp§“´ñ»wÓ^»±òž,àìÎ-3à rg‡lÖ:G>
‡û$Ëú*Ï[¾'е5ØÌ½Ã¾^¿‚@rG{XÎN3?Ü&Óvj½ìÖfl3O­ˆÐ¥\á" ÝJ)P\°7À«J&zgT‘š|†ñhÝh^r×X&âhŒç]CŠÒ÷ˆÂú%#ÅŸß’ïçUUÒÙ$ïRDäü¾Rk¤zwŒñ­ã—Z
UßD„j%‘{7¹’&LoÅLó´T0‰*
-Ë—ÌF+uå| ã_ìŽ'¬gk"¸qáD]²
+Ë—ÌF+uå| ã_ìŽ'¬gk"¸qáD]²
endobj
874 0 obj <<
/Type /Font
@@ -14019,14 +14025,14 @@ endobj
/FirstChar 2
/LastChar 151
/Widths 2631 0 R
-/BaseFont /RRIBBZ+URWPalladioL-Bold
+/BaseFont /OYNSVF+URWPalladioL-Bold
/FontDescriptor 872 0 R
>> endobj
872 0 obj <<
/Ascent 708
/CapHeight 672
/Descent -266
-/FontName /RRIBBZ+URWPalladioL-Bold
+/FontName /OYNSVF+URWPalladioL-Bold
/ItalicAngle 0
/StemV 123
/XHeight 471
@@ -14138,7 +14144,7 @@ endobj
/Type /Pages
/Count 6
/Parent 2634 0 R
-/Kids [1772 0 R 1792 0 R 1807 0 R 1817 0 R 1836 0 R 1842 0 R]
+/Kids [1772 0 R 1792 0 R 1807 0 R 1817 0 R 1834 0 R 1840 0 R]
>> endobj
1851 0 obj <<
/Type /Pages
@@ -15808,7 +15814,7 @@ endobj
/Count -4
>> endobj
2639 0 obj <<
-/Names [(Access_Control_Lists) 1964 0 R (Bv9ARM.ch01) 1145 0 R (Bv9ARM.ch02) 1190 0 R (Bv9ARM.ch03) 1207 0 R (Bv9ARM.ch04) 1271 0 R (Bv9ARM.ch05) 1415 0 R (Bv9ARM.ch06) 1426 0 R (Bv9ARM.ch07) 1963 0 R (Bv9ARM.ch08) 1988 0 R (Bv9ARM.ch09) 2004 0 R (Bv9ARM.ch10) 2265 0 R (Configuration_File_Grammar) 1450 0 R (DNSSEC) 1337 0 R (Doc-Start) 871 0 R (Setting_TTLs) 1884 0 R (acache) 1197 0 R (access_control) 1606 0 R (acl) 1458 0 R (address_match_lists) 1431 0 R (admin_tools) 1230 0 R (appendix.A) 686 0 R (appendix.B) 778 0 R (bibliography) 2012 0 R (bind9.library) 2221 0 R (boolean_options) 1286 0 R (builtin) 1686 0 R (chapter*.1) 905 0 R (chapter.1) 6 0 R (chapter.2) 66 0 R (chapter.3) 90 0 R (chapter.4) 130 0 R (chapter.5) 286 0 R (chapter.6) 298 0 R (chapter.7) 642 0 R (chapter.8) 666 0 R (cite.RFC1033) 2139 0 R (cite.RFC1034) 2024 0 R (cite.RFC1035) 2026 0 R (cite.RFC1101) 2121 0 R (cite.RFC1123) 2123 0 R (cite.RFC1183) 2083 0 R (cite.RFC1464) 2161 0 R (cite.RFC1535) 2069 0 R (cite.RFC1536) 2071 0 R (cite.RFC1537) 2141 0 R (cite.RFC1591) 2125 0 R (cite.RFC1706) 2085 0 R (cite.RFC1712) 2181 0 R (cite.RFC1713) 2163 0 R (cite.RFC1794) 2165 0 R (cite.RFC1876) 2087 0 R (cite.RFC1912) 2143 0 R (cite.RFC1982) 2073 0 R (cite.RFC1995) 2031 0 R (cite.RFC1996) 2033 0 R (cite.RFC2010) 2145 0 R (cite.RFC2052) 2089 0 R (cite.RFC2065) 2194 0 R (cite.RFC2136) 2035 0 R (cite.RFC2137) 2196 0 R (cite.RFC2163) 2091 0 R (cite.RFC2168) 2093 0 R (cite.RFC2181) 2037 0 R (cite.RFC2219) 2147 0 R (cite.RFC2230) 2095 0 R (cite.RFC2240) 2167 0 R (cite.RFC2308) 2039 0 R (cite.RFC2317) 2127 0 R (cite.RFC2345) 2169 0 R (cite.RFC2352) 2171 0 R (cite.RFC2535) 2198 0 R (cite.RFC2536) 2097 0 R (cite.RFC2537) 2099 0 R (cite.RFC2538) 2101 0 R (cite.RFC2539) 2103 0 R (cite.RFC2540) 2105 0 R (cite.RFC2671) 2041 0 R (cite.RFC2672) 2043 0 R (cite.RFC2673) 2183 0 R (cite.RFC2782) 2107 0 R (cite.RFC2825) 2151 0 R (cite.RFC2826) 2129 0 R (cite.RFC2845) 2045 0 R (cite.RFC2874) 2185 0 R (cite.RFC2915) 2109 0 R (cite.RFC2929) 2131 0 R (cite.RFC2930) 2047 0 R (cite.RFC2931) 2049 0 R (cite.RFC3007) 2051 0 R (cite.RFC3008) 2200 0 R (cite.RFC3071) 2173 0 R (cite.RFC3090) 2202 0 R (cite.RFC3110) 2111 0 R (cite.RFC3123) 2113 0 R (cite.RFC3225) 2057 0 R (cite.RFC3258) 2175 0 R (cite.RFC3445) 2204 0 R (cite.RFC3490) 2153 0 R (cite.RFC3491) 2155 0 R (cite.RFC3492) 2157 0 R (cite.RFC3596) 2115 0 R (cite.RFC3597) 2117 0 R (cite.RFC3645) 2053 0 R (cite.RFC3655) 2206 0 R (cite.RFC3658) 2208 0 R (cite.RFC3755) 2210 0 R (cite.RFC3757) 2212 0 R (cite.RFC3833) 2059 0 R (cite.RFC3845) 2214 0 R (cite.RFC3901) 2177 0 R (cite.RFC4033) 2061 0 R (cite.RFC4034) 2063 0 R (cite.RFC4035) 2065 0 R (cite.RFC4074) 2075 0 R (cite.RFC974) 2028 0 R (cite.id2511422) 2219 0 R (clients-per-query) 1937 0 R (configuration_file_elements) 1427 0 R (controls_statement_definition_and_usage) 1253 0 R (diagnostic_tools) 1178 0 R (dynamic_update) 1281 0 R (dynamic_update_policies) 1243 0 R (dynamic_update_security) 1614 0 R (empty) 1693 0 R (historical_dns_information) 2006 0 R (id2466563) 1146 0 R (id2466586) 1147 0 R (id2467288) 1367 0 R (id2467477) 1148 0 R (id2467486) 1149 0 R (id2467726) 1160 0 R (id2467748) 1161 0 R (id2467782) 1162 0 R (id2467866) 1165 0 R (id2467959) 1158 0 R (id2470264) 1172 0 R (id2470288) 1175 0 R (id2470386) 1176 0 R (id2470407) 1177 0 R (id2470505) 1183 0 R (id2470540) 1184 0 R (id2470567) 1185 0 R (id2470601) 1191 0 R (id2470628) 1192 0 R (id2470709) 1193 0 R (id2470734) 1196 0 R (id2470745) 1202 0 R (id2470777) 1209 0 R (id2470793) 1210 0 R (id2470816) 1216 0 R (id2470833) 1217 0 R (id2471238) 1225 0 R (id2471243) 1226 0 R (id2473312) 1258 0 R (id2473323) 1259 0 R (id2473818) 1296 0 R (id2473836) 1302 0 R (id2474474) 1318 0 R (id2474491) 1319 0 R (id2474530) 1320 0 R (id2474548) 1321 0 R (id2474558) 1322 0 R (id2474595) 1327 0 R (id2474652) 1328 0 R (id2474838) 1330 0 R (id2474852) 1331 0 R (id2474901) 1336 0 R (id2474969) 1338 0 R (id2475048) 1343 0 R (id2475197) 1344 0 R (id2475629) 1357 0 R (id2475652) 1359 0 R (id2476054) 1372 0 R (id2476192) 1377 0 R (id2476297) 1378 0 R (id2476374) 1383 0 R (id2476405) 1384 0 R (id2476460) 1385 0 R (id2476491) 1386 0 R (id2476826) 1396 0 R (id2476872) 1400 0 R (id2476926) 1401 0 R (id2476988) 1408 0 R (id2477010) 1409 0 R (id2477043) 1416 0 R (id2477326) 1428 0 R (id2478356) 1436 0 R (id2478384) 1441 0 R (id2478589) 1442 0 R (id2478604) 1443 0 R (id2478634) 1449 0 R (id2478709) 1451 0 R (id2479181) 1457 0 R (id2479224) 1459 0 R (id2479440) 1461 0 R (id2479867) 1468 0 R (id2479884) 1474 0 R (id2479908) 1475 0 R (id2479931) 1476 0 R (id2480022) 1480 0 R (id2480148) 1485 0 R (id2480200) 1486 0 R (id2480962) 1498 0 R (id2481627) 1508 0 R (id2481689) 1509 0 R (id2482147) 1515 0 R (id2482220) 1520 0 R (id2482353) 1523 0 R (id2482396) 1524 0 R (id2482418) 1525 0 R (id2485719) 1569 0 R (id2488013) 1603 0 R (id2488140) 1605 0 R (id2488760) 1620 0 R (id2489909) 1639 0 R (id2489969) 1645 0 R (id2490459) 1653 0 R (id2490962) 1667 0 R (id2492566) 1702 0 R (id2492825) 1708 0 R (id2493780) 1726 0 R (id2493988) 1732 0 R (id2494035) 1734 0 R (id2494529) 1739 0 R (id2496128) 1757 0 R (id2496135) 1758 0 R (id2496140) 1759 0 R (id2496644) 1775 0 R (id2496745) 1776 0 R (id2498876) 1839 0 R (id2499608) 1849 0 R (id2499626) 1850 0 R (id2499646) 1858 0 R (id2499815) 1860 0 R (id2500985) 1866 0 R (id2501113) 1872 0 R (id2501134) 1873 0 R (id2501634) 1875 0 R (id2501770) 1881 0 R (id2501788) 1882 0 R (id2502397) 1885 0 R (id2502522) 1891 0 R (id2502537) 1892 0 R (id2502649) 1894 0 R (id2502672) 1895 0 R (id2502688) 1896 0 R (id2502748) 1901 0 R (id2502818) 1902 0 R (id2502854) 1903 0 R (id2502930) 1909 0 R (id2503509) 1916 0 R (id2503808) 1924 0 R (id2503813) 1925 0 R (id2505417) 1932 0 R (id2505424) 1933 0 R (id2505800) 1935 0 R (id2505805) 1936 0 R (id2506822) 1943 0 R (id2506854) 1944 0 R (id2507264) 1953 0 R (id2507574) 1973 0 R (id2507655) 1974 0 R (id2507715) 1975 0 R (id2507795) 1989 0 R (id2507800) 1990 0 R (id2507812) 1991 0 R (id2507829) 1992 0 R (id2507959) 2005 0 R (id2508199) 2011 0 R (id2508318) 2016 0 R (id2508321) 2022 0 R (id2508397) 2027 0 R (id2508421) 2023 0 R (id2508444) 2025 0 R (id2508481) 2036 0 R (id2508507) 2038 0 R (id2508533) 2030 0 R (id2508557) 2032 0 R (id2508581) 2034 0 R (id2508636) 2040 0 R (id2508663) 2042 0 R (id2508690) 2044 0 R (id2508752) 2046 0 R (id2508781) 2048 0 R (id2508811) 2050 0 R (id2508838) 2052 0 R (id2508913) 2055 0 R (id2508920) 2056 0 R (id2508947) 2058 0 R (id2508983) 2060 0 R (id2509048) 2062 0 R (id2509113) 2064 0 R (id2509178) 2067 0 R (id2509187) 2068 0 R (id2509281) 2070 0 R (id2509349) 2072 0 R (id2509384) 2074 0 R (id2509425) 2081 0 R (id2509430) 2082 0 R (id2509488) 2084 0 R (id2509525) 2092 0 R (id2509560) 2086 0 R (id2509614) 2088 0 R (id2509721) 2090 0 R (id2509747) 2094 0 R (id2509772) 2096 0 R (id2509799) 2098 0 R (id2509826) 2100 0 R (id2509865) 2102 0 R (id2509895) 2104 0 R (id2509925) 2106 0 R (id2509968) 2108 0 R (id2510001) 2110 0 R (id2510027) 2112 0 R (id2510051) 2114 0 R (id2510108) 2116 0 R (id2510133) 2119 0 R (id2510140) 2120 0 R (id2510166) 2122 0 R (id2510188) 2124 0 R (id2510212) 2126 0 R (id2510258) 2128 0 R (id2510281) 2130 0 R (id2510331) 2137 0 R (id2510339) 2138 0 R (id2510362) 2140 0 R (id2510389) 2142 0 R (id2510416) 2144 0 R (id2510452) 2146 0 R (id2510492) 2149 0 R (id2510498) 2150 0 R (id2510530) 2152 0 R (id2510576) 2154 0 R (id2510611) 2156 0 R (id2510637) 2159 0 R (id2510656) 2160 0 R (id2510678) 2162 0 R (id2510704) 2164 0 R (id2510729) 2166 0 R (id2510753) 2168 0 R (id2510798) 2170 0 R (id2510822) 2172 0 R (id2510849) 2174 0 R (id2510874) 2176 0 R (id2510912) 2179 0 R (id2510918) 2180 0 R (id2510976) 2182 0 R (id2511002) 2184 0 R (id2511038) 2192 0 R (id2511050) 2193 0 R (id2511090) 2195 0 R (id2511116) 2197 0 R (id2511146) 2199 0 R (id2511172) 2201 0 R (id2511198) 2203 0 R (id2511235) 2205 0 R (id2511271) 2207 0 R (id2511298) 2209 0 R (id2511324) 2211 0 R (id2511369) 2213 0 R (id2511411) 2216 0 R (id2511420) 2218 0 R (id2511422) 2220 0 R (id2511510) 2226 0 R (id2511520) 2227 0 R (id2511681) 2228 0 R (id2511712) 2229 0 R (id2511788) 2234 0 R (id2511883) 2236 0 R (id2511892) 2237 0 R (id2511982) 2242 0 R (id2512036) 2243 0 R (id2512100) 2244 0 R (id2512115) 2249 0 R (id2512314) 2254 0 R (id2512446) 2255 0 R (incremental_zone_transfers) 1293 0 R (internet_drafts) 2215 0 R (ipv6addresses) 1410 0 R (journal) 1292 0 R (lwresd) 1417 0 R (man.arpaname) 2574 0 R (man.ddns-confgen) 2563 0 R (man.dig) 2266 0 R (man.dnssec-dsfromkey) 2314 0 R (man.dnssec-keyfromlabel) 2332 0 R (man.dnssec-keygen) 1597 0 R (man.dnssec-revoke) 2375 0 R (man.dnssec-settime) 1598 0 R (man.dnssec-signzone) 2403 0 R (man.genrandom) 2585 0 R (man.host) 2299 0 R (man.isc-hmac-fixup) 2596 0 R (man.named) 2460 0 R (man.named-checkconf) 2432 0 R (man.named-checkzone) 2444 0 R (man.named-journalprint) 2483 0 R (man.nsec3hash) 2603 0 R (man.nsupdate) 2493 0 R (man.rndc) 2518 0 R (man.rndc-confgen) 2551 0 R (man.rndc.conf) 2531 0 R (managed-keys) 1361 0 R (notify) 1272 0 R (options) 1242 0 R (page.1) 870 0 R (page.10) 1234 0 R (page.100) 1871 0 R (page.101) 1880 0 R (page.102) 1890 0 R (page.103) 1900 0 R (page.104) 1908 0 R (page.105) 1914 0 R (page.106) 1922 0 R (page.107) 1930 0 R (page.108) 1941 0 R (page.109) 1949 0 R (page.11) 1247 0 R (page.110) 1958 0 R (page.111) 1962 0 R (page.112) 1968 0 R (page.113) 1979 0 R (page.114) 1983 0 R (page.115) 1987 0 R (page.116) 1999 0 R (page.117) 2003 0 R (page.118) 2010 0 R (page.119) 2020 0 R (page.12) 1251 0 R (page.120) 2079 0 R (page.121) 2135 0 R (page.122) 2190 0 R (page.123) 2225 0 R (page.124) 2233 0 R (page.125) 2241 0 R (page.126) 2248 0 R (page.127) 2253 0 R (page.128) 2260 0 R (page.129) 2264 0 R (page.13) 1257 0 R (page.130) 2273 0 R (page.131) 2279 0 R (page.132) 2284 0 R (page.133) 2288 0 R (page.134) 2293 0 R (page.135) 2304 0 R (page.136) 2310 0 R (page.137) 2322 0 R (page.138) 2330 0 R (page.139) 2340 0 R (page.14) 1265 0 R (page.140) 2346 0 R (page.141) 2354 0 R (page.142) 2361 0 R (page.143) 2365 0 R (page.144) 2370 0 R (page.145) 2381 0 R (page.146) 2393 0 R (page.147) 2399 0 R (page.148) 2409 0 R (page.149) 2415 0 R (page.15) 1270 0 R (page.150) 2419 0 R (page.151) 2423 0 R (page.152) 2429 0 R (page.153) 2440 0 R (page.154) 2451 0 R (page.155) 2456 0 R (page.156) 2465 0 R (page.157) 2472 0 R (page.158) 2477 0 R (page.159) 2488 0 R (page.16) 1291 0 R (page.160) 2500 0 R (page.161) 2504 0 R (page.162) 2509 0 R (page.163) 2514 0 R (page.164) 2526 0 R (page.165) 2536 0 R (page.166) 2543 0 R (page.167) 2550 0 R (page.168) 2559 0 R (page.169) 2570 0 R (page.17) 1301 0 R (page.170) 2580 0 R (page.171) 2594 0 R (page.172) 2608 0 R (page.18) 1307 0 R (page.19) 1311 0 R (page.2) 894 0 R (page.20) 1317 0 R (page.21) 1326 0 R (page.22) 1335 0 R (page.23) 1342 0 R (page.24) 1348 0 R (page.25) 1352 0 R (page.26) 1365 0 R (page.27) 1371 0 R (page.28) 1376 0 R (page.29) 1382 0 R (page.3) 1171 0 R (page.30) 1390 0 R (page.31) 1395 0 R (page.32) 1406 0 R (page.33) 1414 0 R (page.34) 1421 0 R (page.35) 1425 0 R (page.36) 1435 0 R (page.37) 1440 0 R (page.38) 1448 0 R (page.39) 1456 0 R (page.4) 1182 0 R (page.40) 1465 0 R (page.41) 1473 0 R (page.42) 1484 0 R (page.43) 1490 0 R (page.44) 1497 0 R (page.45) 1503 0 R (page.46) 1507 0 R (page.47) 1514 0 R (page.48) 1519 0 R (page.49) 1529 0 R (page.5) 1189 0 R (page.50) 1534 0 R (page.51) 1538 0 R (page.52) 1542 0 R (page.53) 1546 0 R (page.54) 1550 0 R (page.55) 1557 0 R (page.56) 1563 0 R (page.57) 1568 0 R (page.58) 1574 0 R (page.59) 1585 0 R (page.6) 1201 0 R (page.60) 1589 0 R (page.61) 1593 0 R (page.62) 1602 0 R (page.63) 1612 0 R (page.64) 1618 0 R (page.65) 1624 0 R (page.66) 1629 0 R (page.67) 1633 0 R (page.68) 1638 0 R (page.69) 1644 0 R (page.7) 1206 0 R (page.70) 1652 0 R (page.71) 1657 0 R (page.72) 1665 0 R (page.73) 1672 0 R (page.74) 1678 0 R (page.75) 1685 0 R (page.76) 1692 0 R (page.77) 1697 0 R (page.78) 1701 0 R (page.79) 1707 0 R (page.8) 1215 0 R (page.80) 1713 0 R (page.81) 1718 0 R (page.82) 1722 0 R (page.83) 1731 0 R (page.84) 1738 0 R (page.85) 1743 0 R (page.86) 1748 0 R (page.87) 1752 0 R (page.88) 1756 0 R (page.89) 1764 0 R (page.9) 1224 0 R (page.90) 1768 0 R (page.91) 1774 0 R (page.92) 1794 0 R (page.93) 1809 0 R (page.94) 1819 0 R (page.95) 1838 0 R (page.96) 1844 0 R (page.97) 1848 0 R (page.98) 1855 0 R (page.99) 1865 0 R (page.i) 904 0 R (page.ii) 959 0 R (page.iii) 1023 0 R (page.iv) 1088 0 R (pkcs11) 1366 0 R (proposed_standards) 1297 0 R (query_address) 1625 0 R (rfc5011.support) 1356 0 R (rfcs) 1167 0 R (rndc) 1469 0 R (root_delegation_only) 1770 0 R (rrset_ordering) 1220 0 R (sample_configuration) 1208 0 R (section*.10) 2148 0 R (section*.100) 2481 0 R (section*.101) 2482 0 R (section*.102) 2484 0 R (section*.103) 2489 0 R (section*.104) 2490 0 R (section*.105) 2491 0 R (section*.106) 2492 0 R (section*.107) 2494 0 R (section*.108) 2495 0 R (section*.109) 2496 0 R (section*.11) 2158 0 R (section*.110) 2505 0 R (section*.111) 2510 0 R (section*.112) 2515 0 R (section*.113) 2516 0 R (section*.114) 2517 0 R (section*.115) 2519 0 R (section*.116) 2520 0 R (section*.117) 2521 0 R (section*.118) 2527 0 R (section*.119) 2528 0 R (section*.12) 2178 0 R (section*.120) 2529 0 R (section*.121) 2530 0 R (section*.122) 2532 0 R (section*.123) 2537 0 R (section*.124) 2538 0 R (section*.125) 2539 0 R (section*.126) 2544 0 R (section*.127) 2545 0 R (section*.128) 2546 0 R (section*.129) 2552 0 R (section*.13) 2191 0 R (section*.130) 2553 0 R (section*.131) 2554 0 R (section*.132) 2555 0 R (section*.133) 2560 0 R (section*.134) 2561 0 R (section*.135) 2562 0 R (section*.136) 2564 0 R (section*.137) 2565 0 R (section*.138) 2566 0 R (section*.139) 2571 0 R (section*.14) 2217 0 R (section*.140) 2572 0 R (section*.141) 2573 0 R (section*.142) 2575 0 R (section*.143) 2581 0 R (section*.144) 2582 0 R (section*.145) 2583 0 R (section*.146) 2584 0 R (section*.147) 2586 0 R (section*.148) 2587 0 R (section*.149) 2588 0 R (section*.15) 2267 0 R (section*.150) 2589 0 R (section*.151) 2590 0 R (section*.152) 2595 0 R (section*.153) 2597 0 R (section*.154) 2598 0 R (section*.155) 2599 0 R (section*.156) 2600 0 R (section*.157) 2601 0 R (section*.158) 2602 0 R (section*.159) 2604 0 R (section*.16) 2268 0 R (section*.160) 2609 0 R (section*.161) 2610 0 R (section*.162) 2611 0 R (section*.163) 2612 0 R (section*.164) 2613 0 R (section*.17) 2269 0 R (section*.18) 2274 0 R (section*.19) 2275 0 R (section*.2) 2015 0 R (section*.20) 2280 0 R (section*.21) 2294 0 R (section*.22) 2295 0 R (section*.23) 2296 0 R (section*.24) 2297 0 R (section*.25) 2298 0 R (section*.26) 2300 0 R (section*.27) 2305 0 R (section*.28) 2306 0 R (section*.29) 2311 0 R (section*.3) 2021 0 R (section*.30) 2312 0 R (section*.31) 2313 0 R (section*.32) 2315 0 R (section*.33) 2316 0 R (section*.34) 2317 0 R (section*.35) 2318 0 R (section*.36) 2323 0 R (section*.37) 2324 0 R (section*.38) 2325 0 R (section*.39) 2326 0 R (section*.4) 2029 0 R (section*.40) 2331 0 R (section*.41) 2333 0 R (section*.42) 2334 0 R (section*.43) 2335 0 R (section*.44) 2336 0 R (section*.45) 2341 0 R (section*.46) 2347 0 R (section*.47) 2348 0 R (section*.48) 2349 0 R (section*.49) 2350 0 R (section*.5) 2054 0 R (section*.50) 2355 0 R (section*.51) 2356 0 R (section*.52) 2357 0 R (section*.53) 2366 0 R (section*.54) 2371 0 R (section*.55) 2372 0 R (section*.56) 2373 0 R (section*.57) 2374 0 R (section*.58) 2376 0 R (section*.59) 2377 0 R (section*.6) 2066 0 R (section*.60) 2382 0 R (section*.61) 2383 0 R (section*.62) 2384 0 R (section*.63) 2385 0 R (section*.64) 2386 0 R (section*.65) 2387 0 R (section*.66) 2388 0 R (section*.67) 2394 0 R (section*.68) 2395 0 R (section*.69) 2400 0 R (section*.7) 2080 0 R (section*.70) 2401 0 R (section*.71) 2402 0 R (section*.72) 2404 0 R (section*.73) 2405 0 R (section*.74) 2410 0 R (section*.75) 2411 0 R (section*.76) 2424 0 R (section*.77) 2430 0 R (section*.78) 2431 0 R (section*.79) 2433 0 R (section*.8) 2118 0 R (section*.80) 2434 0 R (section*.81) 2435 0 R (section*.82) 2436 0 R (section*.83) 2441 0 R (section*.84) 2442 0 R (section*.85) 2443 0 R (section*.86) 2445 0 R (section*.87) 2446 0 R (section*.88) 2447 0 R (section*.89) 2452 0 R (section*.9) 2136 0 R (section*.90) 2457 0 R (section*.91) 2458 0 R (section*.92) 2459 0 R (section*.93) 2461 0 R (section*.94) 2466 0 R (section*.95) 2467 0 R (section*.96) 2468 0 R (section*.97) 2478 0 R (section*.98) 2479 0 R (section*.99) 2480 0 R (section.1.1) 10 0 R (section.1.2) 14 0 R (section.1.3) 18 0 R (section.1.4) 22 0 R (section.2.1) 70 0 R (section.2.2) 74 0 R (section.2.3) 78 0 R (section.2.4) 82 0 R (section.2.5) 86 0 R (section.3.1) 94 0 R (section.3.2) 106 0 R (section.3.3) 110 0 R (section.4.1) 134 0 R (section.4.10) 230 0 R (section.4.11) 274 0 R (section.4.2) 138 0 R (section.4.3) 146 0 R (section.4.4) 150 0 R (section.4.5) 158 0 R (section.4.6) 194 0 R (section.4.7) 198 0 R (section.4.8) 202 0 R (section.4.9) 218 0 R (section.5.1) 290 0 R (section.5.2) 294 0 R (section.6.1) 302 0 R (section.6.2) 330 0 R (section.6.3) 554 0 R (section.6.4) 610 0 R (section.7.1) 646 0 R (section.7.2) 650 0 R (section.7.3) 662 0 R (section.8.1) 670 0 R (section.8.2) 678 0 R (section.8.3) 682 0 R (section.A.1) 690 0 R (section.A.2) 698 0 R (section.A.3) 706 0 R (section.A.4) 722 0 R (section.B.1) 782 0 R (section.B.10) 818 0 R (section.B.11) 822 0 R (section.B.12) 826 0 R (section.B.13) 830 0 R (section.B.14) 834 0 R (section.B.15) 838 0 R (section.B.16) 842 0 R (section.B.17) 846 0 R (section.B.18) 850 0 R (section.B.19) 854 0 R (section.B.2) 786 0 R (section.B.20) 858 0 R (section.B.21) 862 0 R (section.B.3) 790 0 R (section.B.4) 794 0 R (section.B.5) 798 0 R (section.B.6) 802 0 R (section.B.7) 806 0 R (section.B.8) 810 0 R (section.B.9) 814 0 R (server_resource_limits) 1647 0 R (server_statement_definition_and_usage) 1581 0 R (server_statement_grammar) 1714 0 R (statistics) 1915 0 R (statistics_counters) 1923 0 R (statschannels) 1725 0 R (statsfile) 1553 0 R (subsection.1.4.1) 26 0 R (subsection.1.4.2) 30 0 R (subsection.1.4.3) 34 0 R (subsection.1.4.4) 38 0 R (subsection.1.4.5) 54 0 R (subsection.1.4.6) 62 0 R (subsection.3.1.1) 98 0 R (subsection.3.1.2) 102 0 R (subsection.3.3.1) 114 0 R (subsection.3.3.2) 126 0 R (subsection.4.10.1) 234 0 R (subsection.4.10.2) 246 0 R (subsection.4.10.3) 258 0 R (subsection.4.10.4) 262 0 R (subsection.4.10.5) 266 0 R (subsection.4.10.6) 270 0 R (subsection.4.11.1) 278 0 R (subsection.4.11.2) 282 0 R (subsection.4.2.1) 142 0 R (subsection.4.4.1) 154 0 R (subsection.4.5.1) 162 0 R (subsection.4.5.2) 174 0 R (subsection.4.5.3) 178 0 R (subsection.4.5.4) 182 0 R (subsection.4.5.5) 186 0 R (subsection.4.5.6) 190 0 R (subsection.4.8.1) 206 0 R (subsection.4.8.2) 210 0 R (subsection.4.8.3) 214 0 R (subsection.4.9.1) 222 0 R (subsection.4.9.2) 226 0 R (subsection.6.1.1) 306 0 R (subsection.6.1.2) 318 0 R (subsection.6.2.1) 334 0 R (subsection.6.2.10) 370 0 R (subsection.6.2.11) 386 0 R (subsection.6.2.12) 390 0 R (subsection.6.2.13) 394 0 R (subsection.6.2.14) 398 0 R (subsection.6.2.15) 402 0 R (subsection.6.2.16) 406 0 R (subsection.6.2.17) 490 0 R (subsection.6.2.18) 494 0 R (subsection.6.2.19) 498 0 R (subsection.6.2.2) 338 0 R (subsection.6.2.20) 502 0 R (subsection.6.2.21) 506 0 R (subsection.6.2.22) 510 0 R (subsection.6.2.23) 514 0 R (subsection.6.2.24) 518 0 R (subsection.6.2.25) 522 0 R (subsection.6.2.26) 526 0 R (subsection.6.2.27) 530 0 R (subsection.6.2.28) 534 0 R (subsection.6.2.3) 342 0 R (subsection.6.2.4) 346 0 R (subsection.6.2.5) 350 0 R (subsection.6.2.6) 354 0 R (subsection.6.2.7) 358 0 R (subsection.6.2.8) 362 0 R (subsection.6.2.9) 366 0 R (subsection.6.3.1) 558 0 R (subsection.6.3.2) 570 0 R (subsection.6.3.3) 574 0 R (subsection.6.3.4) 578 0 R (subsection.6.3.5) 582 0 R (subsection.6.3.6) 602 0 R (subsection.6.3.7) 606 0 R (subsection.6.4.1) 618 0 R (subsection.7.2.1) 654 0 R (subsection.7.2.2) 658 0 R (subsection.8.1.1) 674 0 R (subsection.A.1.1) 694 0 R (subsection.A.2.1) 702 0 R (subsection.A.3.1) 710 0 R (subsection.A.3.2) 714 0 R (subsection.A.3.3) 718 0 R (subsection.A.4.1) 726 0 R (subsection.A.4.2) 730 0 R (subsection.A.4.3) 734 0 R (subsection.A.4.4) 738 0 R (subsection.A.4.5) 742 0 R (subsection.A.4.6) 746 0 R (subsection.A.4.7) 774 0 R (subsubsection.1.4.4.1) 42 0 R (subsubsection.1.4.4.2) 46 0 R (subsubsection.1.4.4.3) 50 0 R (subsubsection.1.4.5.1) 58 0 R (subsubsection.3.3.1.1) 118 0 R (subsubsection.3.3.1.2) 122 0 R (subsubsection.4.10.1.1) 238 0 R (subsubsection.4.10.1.2) 242 0 R (subsubsection.4.10.2.1) 250 0 R (subsubsection.4.10.2.2) 254 0 R (subsubsection.4.5.1.1) 166 0 R (subsubsection.4.5.1.2) 170 0 R (subsubsection.6.1.1.1) 310 0 R (subsubsection.6.1.1.2) 314 0 R (subsubsection.6.1.2.1) 322 0 R (subsubsection.6.1.2.2) 326 0 R (subsubsection.6.2.10.1) 374 0 R (subsubsection.6.2.10.2) 378 0 R (subsubsection.6.2.10.3) 382 0 R (subsubsection.6.2.16.1) 410 0 R (subsubsection.6.2.16.10) 446 0 R (subsubsection.6.2.16.11) 450 0 R (subsubsection.6.2.16.12) 454 0 R (subsubsection.6.2.16.13) 458 0 R (subsubsection.6.2.16.14) 462 0 R (subsubsection.6.2.16.15) 466 0 R (subsubsection.6.2.16.16) 470 0 R (subsubsection.6.2.16.17) 474 0 R (subsubsection.6.2.16.18) 478 0 R (subsubsection.6.2.16.19) 482 0 R (subsubsection.6.2.16.2) 414 0 R (subsubsection.6.2.16.20) 486 0 R (subsubsection.6.2.16.3) 418 0 R (subsubsection.6.2.16.4) 422 0 R (subsubsection.6.2.16.5) 426 0 R (subsubsection.6.2.16.6) 430 0 R (subsubsection.6.2.16.7) 434 0 R (subsubsection.6.2.16.8) 438 0 R (subsubsection.6.2.16.9) 442 0 R (subsubsection.6.2.28.1) 538 0 R (subsubsection.6.2.28.2) 542 0 R (subsubsection.6.2.28.3) 546 0 R (subsubsection.6.2.28.4) 550 0 R (subsubsection.6.3.1.1) 562 0 R (subsubsection.6.3.1.2) 566 0 R (subsubsection.6.3.5.1) 586 0 R (subsubsection.6.3.5.2) 590 0 R (subsubsection.6.3.5.3) 594 0 R (subsubsection.6.3.5.4) 598 0 R (subsubsection.6.4.0.1) 614 0 R (subsubsection.6.4.1.1) 622 0 R (subsubsection.6.4.1.2) 626 0 R (subsubsection.6.4.1.3) 630 0 R (subsubsection.6.4.1.4) 634 0 R (subsubsection.6.4.1.5) 638 0 R (subsubsection.A.4.6.1) 750 0 R (subsubsection.A.4.6.2) 754 0 R (subsubsection.A.4.6.3) 758 0 R (subsubsection.A.4.6.4) 762 0 R (subsubsection.A.4.6.5) 766 0 R (subsubsection.A.4.6.6) 770 0 R (table.1.1) 1150 0 R (table.1.2) 1159 0 R (table.3.1) 1218 0 R (table.3.2) 1260 0 R (table.6.1) 1429 0 R (table.6.10) 1859 0 R (table.6.11) 1861 0 R (table.6.12) 1867 0 R (table.6.13) 1874 0 R (table.6.14) 1876 0 R (table.6.15) 1883 0 R (table.6.16) 1886 0 R (table.6.17) 1893 0 R (table.6.18) 1910 0 R (table.6.19) 1917 0 R (table.6.2) 1452 0 R (table.6.20) 1926 0 R (table.6.21) 1934 0 R (table.6.22) 1942 0 R (table.6.23) 1945 0 R (table.6.3) 1460 0 R (table.6.4) 1499 0 R (table.6.5) 1510 0 R (table.6.6) 1570 0 R (table.6.7) 1668 0 R (table.6.8) 1760 0 R (table.6.9) 1840 0 R (the_category_phrase) 1493 0 R (the_sortlist_statement) 1659 0 R (topology) 1658 0 R (trusted-keys) 1727 0 R (tsig) 1312 0 R (tuning) 1673 0 R (types_of_resource_records_and_when_to_use_them) 1166 0 R (view_statement_grammar) 1688 0 R (zone_statement_grammar) 1608 0 R (zone_transfers) 1287 0 R (zonefile_format) 1681 0 R]
+/Names [(Access_Control_Lists) 1964 0 R (Bv9ARM.ch01) 1145 0 R (Bv9ARM.ch02) 1190 0 R (Bv9ARM.ch03) 1207 0 R (Bv9ARM.ch04) 1271 0 R (Bv9ARM.ch05) 1415 0 R (Bv9ARM.ch06) 1426 0 R (Bv9ARM.ch07) 1963 0 R (Bv9ARM.ch08) 1988 0 R (Bv9ARM.ch09) 2004 0 R (Bv9ARM.ch10) 2265 0 R (Configuration_File_Grammar) 1450 0 R (DNSSEC) 1337 0 R (Doc-Start) 871 0 R (Setting_TTLs) 1884 0 R (acache) 1197 0 R (access_control) 1606 0 R (acl) 1458 0 R (address_match_lists) 1431 0 R (admin_tools) 1230 0 R (appendix.A) 686 0 R (appendix.B) 778 0 R (bibliography) 2012 0 R (bind9.library) 2221 0 R (boolean_options) 1286 0 R (builtin) 1686 0 R (chapter*.1) 905 0 R (chapter.1) 6 0 R (chapter.2) 66 0 R (chapter.3) 90 0 R (chapter.4) 130 0 R (chapter.5) 286 0 R (chapter.6) 298 0 R (chapter.7) 642 0 R (chapter.8) 666 0 R (cite.RFC1033) 2139 0 R (cite.RFC1034) 2024 0 R (cite.RFC1035) 2026 0 R (cite.RFC1101) 2121 0 R (cite.RFC1123) 2123 0 R (cite.RFC1183) 2083 0 R (cite.RFC1464) 2161 0 R (cite.RFC1535) 2069 0 R (cite.RFC1536) 2071 0 R (cite.RFC1537) 2141 0 R (cite.RFC1591) 2125 0 R (cite.RFC1706) 2085 0 R (cite.RFC1712) 2181 0 R (cite.RFC1713) 2163 0 R (cite.RFC1794) 2165 0 R (cite.RFC1876) 2087 0 R (cite.RFC1912) 2143 0 R (cite.RFC1982) 2073 0 R (cite.RFC1995) 2031 0 R (cite.RFC1996) 2033 0 R (cite.RFC2010) 2145 0 R (cite.RFC2052) 2089 0 R (cite.RFC2065) 2194 0 R (cite.RFC2136) 2035 0 R (cite.RFC2137) 2196 0 R (cite.RFC2163) 2091 0 R (cite.RFC2168) 2093 0 R (cite.RFC2181) 2037 0 R (cite.RFC2219) 2147 0 R (cite.RFC2230) 2095 0 R (cite.RFC2240) 2167 0 R (cite.RFC2308) 2039 0 R (cite.RFC2317) 2127 0 R (cite.RFC2345) 2169 0 R (cite.RFC2352) 2171 0 R (cite.RFC2535) 2198 0 R (cite.RFC2536) 2097 0 R (cite.RFC2537) 2099 0 R (cite.RFC2538) 2101 0 R (cite.RFC2539) 2103 0 R (cite.RFC2540) 2105 0 R (cite.RFC2671) 2041 0 R (cite.RFC2672) 2043 0 R (cite.RFC2673) 2183 0 R (cite.RFC2782) 2107 0 R (cite.RFC2825) 2151 0 R (cite.RFC2826) 2129 0 R (cite.RFC2845) 2045 0 R (cite.RFC2874) 2185 0 R (cite.RFC2915) 2109 0 R (cite.RFC2929) 2131 0 R (cite.RFC2930) 2047 0 R (cite.RFC2931) 2049 0 R (cite.RFC3007) 2051 0 R (cite.RFC3008) 2200 0 R (cite.RFC3071) 2173 0 R (cite.RFC3090) 2202 0 R (cite.RFC3110) 2111 0 R (cite.RFC3123) 2113 0 R (cite.RFC3225) 2057 0 R (cite.RFC3258) 2175 0 R (cite.RFC3445) 2204 0 R (cite.RFC3490) 2153 0 R (cite.RFC3491) 2155 0 R (cite.RFC3492) 2157 0 R (cite.RFC3596) 2115 0 R (cite.RFC3597) 2117 0 R (cite.RFC3645) 2053 0 R (cite.RFC3655) 2206 0 R (cite.RFC3658) 2208 0 R (cite.RFC3755) 2210 0 R (cite.RFC3757) 2212 0 R (cite.RFC3833) 2059 0 R (cite.RFC3845) 2214 0 R (cite.RFC3901) 2177 0 R (cite.RFC4033) 2061 0 R (cite.RFC4034) 2063 0 R (cite.RFC4035) 2065 0 R (cite.RFC4074) 2075 0 R (cite.RFC974) 2028 0 R (cite.id2511452) 2219 0 R (clients-per-query) 1937 0 R (configuration_file_elements) 1427 0 R (controls_statement_definition_and_usage) 1253 0 R (diagnostic_tools) 1178 0 R (dynamic_update) 1281 0 R (dynamic_update_policies) 1243 0 R (dynamic_update_security) 1614 0 R (empty) 1693 0 R (historical_dns_information) 2006 0 R (id2466563) 1146 0 R (id2466586) 1147 0 R (id2467288) 1367 0 R (id2467477) 1148 0 R (id2467486) 1149 0 R (id2467726) 1160 0 R (id2467748) 1161 0 R (id2467782) 1162 0 R (id2467866) 1165 0 R (id2467959) 1158 0 R (id2470264) 1172 0 R (id2470288) 1175 0 R (id2470386) 1176 0 R (id2470407) 1177 0 R (id2470505) 1183 0 R (id2470540) 1184 0 R (id2470567) 1185 0 R (id2470601) 1191 0 R (id2470628) 1192 0 R (id2470709) 1193 0 R (id2470734) 1196 0 R (id2470745) 1202 0 R (id2470777) 1209 0 R (id2470793) 1210 0 R (id2470816) 1216 0 R (id2470833) 1217 0 R (id2471238) 1225 0 R (id2471243) 1226 0 R (id2473312) 1258 0 R (id2473323) 1259 0 R (id2473818) 1296 0 R (id2473836) 1302 0 R (id2474474) 1318 0 R (id2474491) 1319 0 R (id2474530) 1320 0 R (id2474548) 1321 0 R (id2474558) 1322 0 R (id2474595) 1327 0 R (id2474652) 1328 0 R (id2474838) 1330 0 R (id2474852) 1331 0 R (id2474901) 1336 0 R (id2474969) 1338 0 R (id2475048) 1343 0 R (id2475197) 1344 0 R (id2475629) 1357 0 R (id2475652) 1359 0 R (id2476054) 1372 0 R (id2476192) 1377 0 R (id2476297) 1378 0 R (id2476374) 1383 0 R (id2476405) 1384 0 R (id2476460) 1385 0 R (id2476491) 1386 0 R (id2476826) 1396 0 R (id2476872) 1400 0 R (id2476926) 1401 0 R (id2476988) 1408 0 R (id2477010) 1409 0 R (id2477043) 1416 0 R (id2477326) 1428 0 R (id2478356) 1436 0 R (id2478384) 1441 0 R (id2478589) 1442 0 R (id2478604) 1443 0 R (id2478634) 1449 0 R (id2478709) 1451 0 R (id2479181) 1457 0 R (id2479224) 1459 0 R (id2479440) 1461 0 R (id2479867) 1468 0 R (id2479884) 1474 0 R (id2479908) 1475 0 R (id2479931) 1476 0 R (id2480022) 1480 0 R (id2480148) 1485 0 R (id2480200) 1486 0 R (id2480962) 1498 0 R (id2481627) 1508 0 R (id2481689) 1509 0 R (id2482147) 1515 0 R (id2482220) 1520 0 R (id2482353) 1523 0 R (id2482396) 1524 0 R (id2482418) 1525 0 R (id2485719) 1569 0 R (id2488013) 1603 0 R (id2488140) 1605 0 R (id2488760) 1620 0 R (id2489909) 1639 0 R (id2489969) 1645 0 R (id2490459) 1653 0 R (id2490962) 1667 0 R (id2492566) 1702 0 R (id2492825) 1708 0 R (id2493780) 1726 0 R (id2493988) 1732 0 R (id2494035) 1734 0 R (id2494529) 1739 0 R (id2496140) 1757 0 R (id2496148) 1758 0 R (id2496153) 1759 0 R (id2496725) 1775 0 R (id2496758) 1776 0 R (id2498906) 1843 0 R (id2499638) 1849 0 R (id2499656) 1850 0 R (id2499676) 1858 0 R (id2499913) 1860 0 R (id2501083) 1866 0 R (id2501280) 1872 0 R (id2501301) 1873 0 R (id2501664) 1875 0 R (id2501800) 1881 0 R (id2501818) 1882 0 R (id2502359) 1885 0 R (id2502484) 1891 0 R (id2502499) 1892 0 R (id2502611) 1894 0 R (id2502633) 1895 0 R (id2502649) 1896 0 R (id2502710) 1901 0 R (id2502779) 1902 0 R (id2502816) 1903 0 R (id2502891) 1909 0 R (id2503402) 1916 0 R (id2503769) 1924 0 R (id2503774) 1925 0 R (id2505447) 1932 0 R (id2505453) 1933 0 R (id2505830) 1935 0 R (id2505835) 1936 0 R (id2506852) 1943 0 R (id2506884) 1944 0 R (id2507293) 1953 0 R (id2507604) 1973 0 R (id2507685) 1974 0 R (id2507745) 1975 0 R (id2507825) 1989 0 R (id2507830) 1990 0 R (id2507842) 1991 0 R (id2507859) 1992 0 R (id2507921) 2005 0 R (id2508161) 2011 0 R (id2508417) 2016 0 R (id2508419) 2022 0 R (id2508427) 2027 0 R (id2508451) 2023 0 R (id2508474) 2025 0 R (id2508510) 2036 0 R (id2508537) 2038 0 R (id2508563) 2030 0 R (id2508587) 2032 0 R (id2508611) 2034 0 R (id2508666) 2040 0 R (id2508693) 2042 0 R (id2508720) 2044 0 R (id2508781) 2046 0 R (id2508811) 2048 0 R (id2508841) 2050 0 R (id2508868) 2052 0 R (id2508942) 2055 0 R (id2508950) 2056 0 R (id2508977) 2058 0 R (id2509013) 2060 0 R (id2509078) 2062 0 R (id2509143) 2064 0 R (id2509208) 2067 0 R (id2509217) 2068 0 R (id2509242) 2070 0 R (id2509310) 2072 0 R (id2509346) 2074 0 R (id2509386) 2081 0 R (id2509392) 2082 0 R (id2509449) 2084 0 R (id2509486) 2092 0 R (id2509522) 2086 0 R (id2509713) 2088 0 R (id2509751) 2090 0 R (id2509777) 2094 0 R (id2509802) 2096 0 R (id2509829) 2098 0 R (id2509856) 2100 0 R (id2509895) 2102 0 R (id2509925) 2104 0 R (id2509955) 2106 0 R (id2509997) 2108 0 R (id2510030) 2110 0 R (id2510057) 2112 0 R (id2510081) 2114 0 R (id2510138) 2116 0 R (id2510163) 2119 0 R (id2510170) 2120 0 R (id2510196) 2122 0 R (id2510218) 2124 0 R (id2510242) 2126 0 R (id2510288) 2128 0 R (id2510311) 2130 0 R (id2510361) 2137 0 R (id2510369) 2138 0 R (id2510392) 2140 0 R (id2510419) 2142 0 R (id2510445) 2144 0 R (id2510482) 2146 0 R (id2510522) 2149 0 R (id2510528) 2150 0 R (id2510560) 2152 0 R (id2510605) 2154 0 R (id2510641) 2156 0 R (id2510667) 2159 0 R (id2510685) 2160 0 R (id2510708) 2162 0 R (id2510733) 2164 0 R (id2510759) 2166 0 R (id2510782) 2168 0 R (id2510828) 2170 0 R (id2510852) 2172 0 R (id2510878) 2174 0 R (id2510904) 2176 0 R (id2510941) 2179 0 R (id2510948) 2180 0 R (id2511005) 2182 0 R (id2511032) 2184 0 R (id2511068) 2192 0 R (id2511080) 2193 0 R (id2511120) 2195 0 R (id2511146) 2197 0 R (id2511176) 2199 0 R (id2511202) 2201 0 R (id2511228) 2203 0 R (id2511265) 2205 0 R (id2511301) 2207 0 R (id2511328) 2209 0 R (id2511354) 2211 0 R (id2511399) 2213 0 R (id2511441) 2216 0 R (id2511450) 2218 0 R (id2511452) 2220 0 R (id2511608) 2226 0 R (id2511618) 2227 0 R (id2511642) 2228 0 R (id2511673) 2229 0 R (id2511750) 2234 0 R (id2511777) 2236 0 R (id2511785) 2237 0 R (id2511944) 2242 0 R (id2511997) 2243 0 R (id2512061) 2244 0 R (id2512076) 2249 0 R (id2512276) 2254 0 R (id2512408) 2255 0 R (incremental_zone_transfers) 1293 0 R (internet_drafts) 2215 0 R (ipv6addresses) 1410 0 R (journal) 1292 0 R (lwresd) 1417 0 R (man.arpaname) 2574 0 R (man.ddns-confgen) 2563 0 R (man.dig) 2266 0 R (man.dnssec-dsfromkey) 2314 0 R (man.dnssec-keyfromlabel) 2332 0 R (man.dnssec-keygen) 1597 0 R (man.dnssec-revoke) 2375 0 R (man.dnssec-settime) 1598 0 R (man.dnssec-signzone) 2403 0 R (man.genrandom) 2585 0 R (man.host) 2299 0 R (man.isc-hmac-fixup) 2596 0 R (man.named) 2460 0 R (man.named-checkconf) 2432 0 R (man.named-checkzone) 2444 0 R (man.named-journalprint) 2483 0 R (man.nsec3hash) 2603 0 R (man.nsupdate) 2493 0 R (man.rndc) 2518 0 R (man.rndc-confgen) 2551 0 R (man.rndc.conf) 2531 0 R (managed-keys) 1361 0 R (notify) 1272 0 R (options) 1242 0 R (page.1) 870 0 R (page.10) 1234 0 R (page.100) 1871 0 R (page.101) 1880 0 R (page.102) 1890 0 R (page.103) 1900 0 R (page.104) 1908 0 R (page.105) 1914 0 R (page.106) 1922 0 R (page.107) 1930 0 R (page.108) 1941 0 R (page.109) 1949 0 R (page.11) 1247 0 R (page.110) 1958 0 R (page.111) 1962 0 R (page.112) 1968 0 R (page.113) 1979 0 R (page.114) 1983 0 R (page.115) 1987 0 R (page.116) 1999 0 R (page.117) 2003 0 R (page.118) 2010 0 R (page.119) 2020 0 R (page.12) 1251 0 R (page.120) 2079 0 R (page.121) 2135 0 R (page.122) 2190 0 R (page.123) 2225 0 R (page.124) 2233 0 R (page.125) 2241 0 R (page.126) 2248 0 R (page.127) 2253 0 R (page.128) 2260 0 R (page.129) 2264 0 R (page.13) 1257 0 R (page.130) 2273 0 R (page.131) 2279 0 R (page.132) 2284 0 R (page.133) 2288 0 R (page.134) 2293 0 R (page.135) 2304 0 R (page.136) 2310 0 R (page.137) 2322 0 R (page.138) 2330 0 R (page.139) 2340 0 R (page.14) 1265 0 R (page.140) 2346 0 R (page.141) 2354 0 R (page.142) 2361 0 R (page.143) 2365 0 R (page.144) 2370 0 R (page.145) 2381 0 R (page.146) 2393 0 R (page.147) 2399 0 R (page.148) 2409 0 R (page.149) 2415 0 R (page.15) 1270 0 R (page.150) 2419 0 R (page.151) 2423 0 R (page.152) 2429 0 R (page.153) 2440 0 R (page.154) 2451 0 R (page.155) 2456 0 R (page.156) 2465 0 R (page.157) 2472 0 R (page.158) 2477 0 R (page.159) 2488 0 R (page.16) 1291 0 R (page.160) 2500 0 R (page.161) 2504 0 R (page.162) 2509 0 R (page.163) 2514 0 R (page.164) 2526 0 R (page.165) 2536 0 R (page.166) 2543 0 R (page.167) 2550 0 R (page.168) 2559 0 R (page.169) 2570 0 R (page.17) 1301 0 R (page.170) 2580 0 R (page.171) 2594 0 R (page.172) 2608 0 R (page.18) 1307 0 R (page.19) 1311 0 R (page.2) 894 0 R (page.20) 1317 0 R (page.21) 1326 0 R (page.22) 1335 0 R (page.23) 1342 0 R (page.24) 1348 0 R (page.25) 1352 0 R (page.26) 1365 0 R (page.27) 1371 0 R (page.28) 1376 0 R (page.29) 1382 0 R (page.3) 1171 0 R (page.30) 1390 0 R (page.31) 1395 0 R (page.32) 1406 0 R (page.33) 1414 0 R (page.34) 1421 0 R (page.35) 1425 0 R (page.36) 1435 0 R (page.37) 1440 0 R (page.38) 1448 0 R (page.39) 1456 0 R (page.4) 1182 0 R (page.40) 1465 0 R (page.41) 1473 0 R (page.42) 1484 0 R (page.43) 1490 0 R (page.44) 1497 0 R (page.45) 1503 0 R (page.46) 1507 0 R (page.47) 1514 0 R (page.48) 1519 0 R (page.49) 1529 0 R (page.5) 1189 0 R (page.50) 1534 0 R (page.51) 1538 0 R (page.52) 1542 0 R (page.53) 1546 0 R (page.54) 1550 0 R (page.55) 1557 0 R (page.56) 1563 0 R (page.57) 1568 0 R (page.58) 1574 0 R (page.59) 1585 0 R (page.6) 1201 0 R (page.60) 1589 0 R (page.61) 1593 0 R (page.62) 1602 0 R (page.63) 1612 0 R (page.64) 1618 0 R (page.65) 1624 0 R (page.66) 1629 0 R (page.67) 1633 0 R (page.68) 1638 0 R (page.69) 1644 0 R (page.7) 1206 0 R (page.70) 1652 0 R (page.71) 1657 0 R (page.72) 1665 0 R (page.73) 1672 0 R (page.74) 1678 0 R (page.75) 1685 0 R (page.76) 1692 0 R (page.77) 1697 0 R (page.78) 1701 0 R (page.79) 1707 0 R (page.8) 1215 0 R (page.80) 1713 0 R (page.81) 1718 0 R (page.82) 1722 0 R (page.83) 1731 0 R (page.84) 1738 0 R (page.85) 1743 0 R (page.86) 1748 0 R (page.87) 1752 0 R (page.88) 1756 0 R (page.89) 1764 0 R (page.9) 1224 0 R (page.90) 1768 0 R (page.91) 1774 0 R (page.92) 1794 0 R (page.93) 1809 0 R (page.94) 1819 0 R (page.95) 1836 0 R (page.96) 1842 0 R (page.97) 1848 0 R (page.98) 1855 0 R (page.99) 1865 0 R (page.i) 904 0 R (page.ii) 959 0 R (page.iii) 1023 0 R (page.iv) 1088 0 R (pkcs11) 1366 0 R (proposed_standards) 1297 0 R (query_address) 1625 0 R (rfc5011.support) 1356 0 R (rfcs) 1167 0 R (rndc) 1469 0 R (root_delegation_only) 1770 0 R (rrset_ordering) 1220 0 R (sample_configuration) 1208 0 R (section*.10) 2148 0 R (section*.100) 2481 0 R (section*.101) 2482 0 R (section*.102) 2484 0 R (section*.103) 2489 0 R (section*.104) 2490 0 R (section*.105) 2491 0 R (section*.106) 2492 0 R (section*.107) 2494 0 R (section*.108) 2495 0 R (section*.109) 2496 0 R (section*.11) 2158 0 R (section*.110) 2505 0 R (section*.111) 2510 0 R (section*.112) 2515 0 R (section*.113) 2516 0 R (section*.114) 2517 0 R (section*.115) 2519 0 R (section*.116) 2520 0 R (section*.117) 2521 0 R (section*.118) 2527 0 R (section*.119) 2528 0 R (section*.12) 2178 0 R (section*.120) 2529 0 R (section*.121) 2530 0 R (section*.122) 2532 0 R (section*.123) 2537 0 R (section*.124) 2538 0 R (section*.125) 2539 0 R (section*.126) 2544 0 R (section*.127) 2545 0 R (section*.128) 2546 0 R (section*.129) 2552 0 R (section*.13) 2191 0 R (section*.130) 2553 0 R (section*.131) 2554 0 R (section*.132) 2555 0 R (section*.133) 2560 0 R (section*.134) 2561 0 R (section*.135) 2562 0 R (section*.136) 2564 0 R (section*.137) 2565 0 R (section*.138) 2566 0 R (section*.139) 2571 0 R (section*.14) 2217 0 R (section*.140) 2572 0 R (section*.141) 2573 0 R (section*.142) 2575 0 R (section*.143) 2581 0 R (section*.144) 2582 0 R (section*.145) 2583 0 R (section*.146) 2584 0 R (section*.147) 2586 0 R (section*.148) 2587 0 R (section*.149) 2588 0 R (section*.15) 2267 0 R (section*.150) 2589 0 R (section*.151) 2590 0 R (section*.152) 2595 0 R (section*.153) 2597 0 R (section*.154) 2598 0 R (section*.155) 2599 0 R (section*.156) 2600 0 R (section*.157) 2601 0 R (section*.158) 2602 0 R (section*.159) 2604 0 R (section*.16) 2268 0 R (section*.160) 2609 0 R (section*.161) 2610 0 R (section*.162) 2611 0 R (section*.163) 2612 0 R (section*.164) 2613 0 R (section*.17) 2269 0 R (section*.18) 2274 0 R (section*.19) 2275 0 R (section*.2) 2015 0 R (section*.20) 2280 0 R (section*.21) 2294 0 R (section*.22) 2295 0 R (section*.23) 2296 0 R (section*.24) 2297 0 R (section*.25) 2298 0 R (section*.26) 2300 0 R (section*.27) 2305 0 R (section*.28) 2306 0 R (section*.29) 2311 0 R (section*.3) 2021 0 R (section*.30) 2312 0 R (section*.31) 2313 0 R (section*.32) 2315 0 R (section*.33) 2316 0 R (section*.34) 2317 0 R (section*.35) 2318 0 R (section*.36) 2323 0 R (section*.37) 2324 0 R (section*.38) 2325 0 R (section*.39) 2326 0 R (section*.4) 2029 0 R (section*.40) 2331 0 R (section*.41) 2333 0 R (section*.42) 2334 0 R (section*.43) 2335 0 R (section*.44) 2336 0 R (section*.45) 2341 0 R (section*.46) 2347 0 R (section*.47) 2348 0 R (section*.48) 2349 0 R (section*.49) 2350 0 R (section*.5) 2054 0 R (section*.50) 2355 0 R (section*.51) 2356 0 R (section*.52) 2357 0 R (section*.53) 2366 0 R (section*.54) 2371 0 R (section*.55) 2372 0 R (section*.56) 2373 0 R (section*.57) 2374 0 R (section*.58) 2376 0 R (section*.59) 2377 0 R (section*.6) 2066 0 R (section*.60) 2382 0 R (section*.61) 2383 0 R (section*.62) 2384 0 R (section*.63) 2385 0 R (section*.64) 2386 0 R (section*.65) 2387 0 R (section*.66) 2388 0 R (section*.67) 2394 0 R (section*.68) 2395 0 R (section*.69) 2400 0 R (section*.7) 2080 0 R (section*.70) 2401 0 R (section*.71) 2402 0 R (section*.72) 2404 0 R (section*.73) 2405 0 R (section*.74) 2410 0 R (section*.75) 2411 0 R (section*.76) 2424 0 R (section*.77) 2430 0 R (section*.78) 2431 0 R (section*.79) 2433 0 R (section*.8) 2118 0 R (section*.80) 2434 0 R (section*.81) 2435 0 R (section*.82) 2436 0 R (section*.83) 2441 0 R (section*.84) 2442 0 R (section*.85) 2443 0 R (section*.86) 2445 0 R (section*.87) 2446 0 R (section*.88) 2447 0 R (section*.89) 2452 0 R (section*.9) 2136 0 R (section*.90) 2457 0 R (section*.91) 2458 0 R (section*.92) 2459 0 R (section*.93) 2461 0 R (section*.94) 2466 0 R (section*.95) 2467 0 R (section*.96) 2468 0 R (section*.97) 2478 0 R (section*.98) 2479 0 R (section*.99) 2480 0 R (section.1.1) 10 0 R (section.1.2) 14 0 R (section.1.3) 18 0 R (section.1.4) 22 0 R (section.2.1) 70 0 R (section.2.2) 74 0 R (section.2.3) 78 0 R (section.2.4) 82 0 R (section.2.5) 86 0 R (section.3.1) 94 0 R (section.3.2) 106 0 R (section.3.3) 110 0 R (section.4.1) 134 0 R (section.4.10) 230 0 R (section.4.11) 274 0 R (section.4.2) 138 0 R (section.4.3) 146 0 R (section.4.4) 150 0 R (section.4.5) 158 0 R (section.4.6) 194 0 R (section.4.7) 198 0 R (section.4.8) 202 0 R (section.4.9) 218 0 R (section.5.1) 290 0 R (section.5.2) 294 0 R (section.6.1) 302 0 R (section.6.2) 330 0 R (section.6.3) 554 0 R (section.6.4) 610 0 R (section.7.1) 646 0 R (section.7.2) 650 0 R (section.7.3) 662 0 R (section.8.1) 670 0 R (section.8.2) 678 0 R (section.8.3) 682 0 R (section.A.1) 690 0 R (section.A.2) 698 0 R (section.A.3) 706 0 R (section.A.4) 722 0 R (section.B.1) 782 0 R (section.B.10) 818 0 R (section.B.11) 822 0 R (section.B.12) 826 0 R (section.B.13) 830 0 R (section.B.14) 834 0 R (section.B.15) 838 0 R (section.B.16) 842 0 R (section.B.17) 846 0 R (section.B.18) 850 0 R (section.B.19) 854 0 R (section.B.2) 786 0 R (section.B.20) 858 0 R (section.B.21) 862 0 R (section.B.3) 790 0 R (section.B.4) 794 0 R (section.B.5) 798 0 R (section.B.6) 802 0 R (section.B.7) 806 0 R (section.B.8) 810 0 R (section.B.9) 814 0 R (server_resource_limits) 1647 0 R (server_statement_definition_and_usage) 1581 0 R (server_statement_grammar) 1714 0 R (statistics) 1915 0 R (statistics_counters) 1923 0 R (statschannels) 1725 0 R (statsfile) 1553 0 R (subsection.1.4.1) 26 0 R (subsection.1.4.2) 30 0 R (subsection.1.4.3) 34 0 R (subsection.1.4.4) 38 0 R (subsection.1.4.5) 54 0 R (subsection.1.4.6) 62 0 R (subsection.3.1.1) 98 0 R (subsection.3.1.2) 102 0 R (subsection.3.3.1) 114 0 R (subsection.3.3.2) 126 0 R (subsection.4.10.1) 234 0 R (subsection.4.10.2) 246 0 R (subsection.4.10.3) 258 0 R (subsection.4.10.4) 262 0 R (subsection.4.10.5) 266 0 R (subsection.4.10.6) 270 0 R (subsection.4.11.1) 278 0 R (subsection.4.11.2) 282 0 R (subsection.4.2.1) 142 0 R (subsection.4.4.1) 154 0 R (subsection.4.5.1) 162 0 R (subsection.4.5.2) 174 0 R (subsection.4.5.3) 178 0 R (subsection.4.5.4) 182 0 R (subsection.4.5.5) 186 0 R (subsection.4.5.6) 190 0 R (subsection.4.8.1) 206 0 R (subsection.4.8.2) 210 0 R (subsection.4.8.3) 214 0 R (subsection.4.9.1) 222 0 R (subsection.4.9.2) 226 0 R (subsection.6.1.1) 306 0 R (subsection.6.1.2) 318 0 R (subsection.6.2.1) 334 0 R (subsection.6.2.10) 370 0 R (subsection.6.2.11) 386 0 R (subsection.6.2.12) 390 0 R (subsection.6.2.13) 394 0 R (subsection.6.2.14) 398 0 R (subsection.6.2.15) 402 0 R (subsection.6.2.16) 406 0 R (subsection.6.2.17) 490 0 R (subsection.6.2.18) 494 0 R (subsection.6.2.19) 498 0 R (subsection.6.2.2) 338 0 R (subsection.6.2.20) 502 0 R (subsection.6.2.21) 506 0 R (subsection.6.2.22) 510 0 R (subsection.6.2.23) 514 0 R (subsection.6.2.24) 518 0 R (subsection.6.2.25) 522 0 R (subsection.6.2.26) 526 0 R (subsection.6.2.27) 530 0 R (subsection.6.2.28) 534 0 R (subsection.6.2.3) 342 0 R (subsection.6.2.4) 346 0 R (subsection.6.2.5) 350 0 R (subsection.6.2.6) 354 0 R (subsection.6.2.7) 358 0 R (subsection.6.2.8) 362 0 R (subsection.6.2.9) 366 0 R (subsection.6.3.1) 558 0 R (subsection.6.3.2) 570 0 R (subsection.6.3.3) 574 0 R (subsection.6.3.4) 578 0 R (subsection.6.3.5) 582 0 R (subsection.6.3.6) 602 0 R (subsection.6.3.7) 606 0 R (subsection.6.4.1) 618 0 R (subsection.7.2.1) 654 0 R (subsection.7.2.2) 658 0 R (subsection.8.1.1) 674 0 R (subsection.A.1.1) 694 0 R (subsection.A.2.1) 702 0 R (subsection.A.3.1) 710 0 R (subsection.A.3.2) 714 0 R (subsection.A.3.3) 718 0 R (subsection.A.4.1) 726 0 R (subsection.A.4.2) 730 0 R (subsection.A.4.3) 734 0 R (subsection.A.4.4) 738 0 R (subsection.A.4.5) 742 0 R (subsection.A.4.6) 746 0 R (subsection.A.4.7) 774 0 R (subsubsection.1.4.4.1) 42 0 R (subsubsection.1.4.4.2) 46 0 R (subsubsection.1.4.4.3) 50 0 R (subsubsection.1.4.5.1) 58 0 R (subsubsection.3.3.1.1) 118 0 R (subsubsection.3.3.1.2) 122 0 R (subsubsection.4.10.1.1) 238 0 R (subsubsection.4.10.1.2) 242 0 R (subsubsection.4.10.2.1) 250 0 R (subsubsection.4.10.2.2) 254 0 R (subsubsection.4.5.1.1) 166 0 R (subsubsection.4.5.1.2) 170 0 R (subsubsection.6.1.1.1) 310 0 R (subsubsection.6.1.1.2) 314 0 R (subsubsection.6.1.2.1) 322 0 R (subsubsection.6.1.2.2) 326 0 R (subsubsection.6.2.10.1) 374 0 R (subsubsection.6.2.10.2) 378 0 R (subsubsection.6.2.10.3) 382 0 R (subsubsection.6.2.16.1) 410 0 R (subsubsection.6.2.16.10) 446 0 R (subsubsection.6.2.16.11) 450 0 R (subsubsection.6.2.16.12) 454 0 R (subsubsection.6.2.16.13) 458 0 R (subsubsection.6.2.16.14) 462 0 R (subsubsection.6.2.16.15) 466 0 R (subsubsection.6.2.16.16) 470 0 R (subsubsection.6.2.16.17) 474 0 R (subsubsection.6.2.16.18) 478 0 R (subsubsection.6.2.16.19) 482 0 R (subsubsection.6.2.16.2) 414 0 R (subsubsection.6.2.16.20) 486 0 R (subsubsection.6.2.16.3) 418 0 R (subsubsection.6.2.16.4) 422 0 R (subsubsection.6.2.16.5) 426 0 R (subsubsection.6.2.16.6) 430 0 R (subsubsection.6.2.16.7) 434 0 R (subsubsection.6.2.16.8) 438 0 R (subsubsection.6.2.16.9) 442 0 R (subsubsection.6.2.28.1) 538 0 R (subsubsection.6.2.28.2) 542 0 R (subsubsection.6.2.28.3) 546 0 R (subsubsection.6.2.28.4) 550 0 R (subsubsection.6.3.1.1) 562 0 R (subsubsection.6.3.1.2) 566 0 R (subsubsection.6.3.5.1) 586 0 R (subsubsection.6.3.5.2) 590 0 R (subsubsection.6.3.5.3) 594 0 R (subsubsection.6.3.5.4) 598 0 R (subsubsection.6.4.0.1) 614 0 R (subsubsection.6.4.1.1) 622 0 R (subsubsection.6.4.1.2) 626 0 R (subsubsection.6.4.1.3) 630 0 R (subsubsection.6.4.1.4) 634 0 R (subsubsection.6.4.1.5) 638 0 R (subsubsection.A.4.6.1) 750 0 R (subsubsection.A.4.6.2) 754 0 R (subsubsection.A.4.6.3) 758 0 R (subsubsection.A.4.6.4) 762 0 R (subsubsection.A.4.6.5) 766 0 R (subsubsection.A.4.6.6) 770 0 R (table.1.1) 1150 0 R (table.1.2) 1159 0 R (table.3.1) 1218 0 R (table.3.2) 1260 0 R (table.6.1) 1429 0 R (table.6.10) 1859 0 R (table.6.11) 1861 0 R (table.6.12) 1867 0 R (table.6.13) 1874 0 R (table.6.14) 1876 0 R (table.6.15) 1883 0 R (table.6.16) 1886 0 R (table.6.17) 1893 0 R (table.6.18) 1910 0 R (table.6.19) 1917 0 R (table.6.2) 1452 0 R (table.6.20) 1926 0 R (table.6.21) 1934 0 R (table.6.22) 1942 0 R (table.6.23) 1945 0 R (table.6.3) 1460 0 R (table.6.4) 1499 0 R (table.6.5) 1510 0 R (table.6.6) 1570 0 R (table.6.7) 1668 0 R (table.6.8) 1760 0 R (table.6.9) 1844 0 R (the_category_phrase) 1493 0 R (the_sortlist_statement) 1659 0 R (topology) 1658 0 R (trusted-keys) 1727 0 R (tsig) 1312 0 R (tuning) 1673 0 R (types_of_resource_records_and_when_to_use_them) 1166 0 R (view_statement_grammar) 1688 0 R (zone_statement_grammar) 1608 0 R (zone_transfers) 1287 0 R (zonefile_format) 1681 0 R]
/Limits [(Access_Control_Lists) (zonefile_format)]
>> endobj
2640 0 obj <<
@@ -15827,7 +15833,7 @@ endobj
>> endobj
2643 0 obj <<
/Author()/Title()/Subject()/Creator(LaTeX with hyperref package)/Producer(pdfeTeX-1.21a)/Keywords()
-/CreationDate (D:20110823011428Z)
+/CreationDate (D:20110913011428Z)
/PTEX.Fullbanner (This is pdfeTeX, Version 3.141592-1.21a-2.2 (Web2C 7.5.4) kpathsea version 3.5.4)
>> endobj
xref
@@ -15839,863 +15845,863 @@ xref
0000000000 00000 f
0000000009 00000 n
0000342504 00000 n
-0001164899 00000 n
+0001165269 00000 n
0000000054 00000 n
0000000086 00000 n
0000342631 00000 n
-0001164827 00000 n
+0001165197 00000 n
0000000133 00000 n
0000000173 00000 n
0000342759 00000 n
-0001164741 00000 n
+0001165111 00000 n
0000000221 00000 n
0000000273 00000 n
0000342887 00000 n
-0001164655 00000 n
+0001165025 00000 n
0000000321 00000 n
0000000377 00000 n
0000347173 00000 n
-0001164545 00000 n
+0001164915 00000 n
0000000425 00000 n
0000000478 00000 n
0000347300 00000 n
-0001164471 00000 n
+0001164841 00000 n
0000000531 00000 n
0000000572 00000 n
0000347428 00000 n
-0001164384 00000 n
+0001164754 00000 n
0000000625 00000 n
0000000674 00000 n
0000347555 00000 n
-0001164297 00000 n
+0001164667 00000 n
0000000727 00000 n
0000000757 00000 n
0000351851 00000 n
-0001164173 00000 n
+0001164543 00000 n
0000000810 00000 n
0000000861 00000 n
0000351979 00000 n
-0001164099 00000 n
+0001164469 00000 n
0000000919 00000 n
0000000964 00000 n
0000352107 00000 n
-0001164012 00000 n
+0001164382 00000 n
0000001022 00000 n
0000001062 00000 n
0000352235 00000 n
-0001163938 00000 n
+0001164308 00000 n
0000001120 00000 n
0000001162 00000 n
0000355219 00000 n
-0001163814 00000 n
+0001164184 00000 n
0000001215 00000 n
0000001260 00000 n
0000355347 00000 n
-0001163753 00000 n
+0001164123 00000 n
0000001318 00000 n
0000001355 00000 n
0000355475 00000 n
-0001163679 00000 n
+0001164049 00000 n
0000001408 00000 n
0000001463 00000 n
0000358421 00000 n
-0001163554 00000 n
+0001163924 00000 n
0000001509 00000 n
0000001556 00000 n
0000358549 00000 n
-0001163480 00000 n
+0001163850 00000 n
0000001604 00000 n
0000001648 00000 n
0000358677 00000 n
-0001163393 00000 n
+0001163763 00000 n
0000001696 00000 n
0000001735 00000 n
0000358805 00000 n
-0001163306 00000 n
+0001163676 00000 n
0000001783 00000 n
0000001825 00000 n
0000358932 00000 n
-0001163219 00000 n
+0001163589 00000 n
0000001873 00000 n
0000001936 00000 n
0000360009 00000 n
-0001163145 00000 n
+0001163515 00000 n
0000001984 00000 n
0000002034 00000 n
0000361667 00000 n
-0001163017 00000 n
+0001163387 00000 n
0000002080 00000 n
0000002126 00000 n
0000361794 00000 n
-0001162904 00000 n
+0001163274 00000 n
0000002174 00000 n
0000002218 00000 n
0000361922 00000 n
-0001162828 00000 n
+0001163198 00000 n
0000002271 00000 n
0000002323 00000 n
0000362050 00000 n
-0001162751 00000 n
+0001163121 00000 n
0000002377 00000 n
0000002436 00000 n
0000364499 00000 n
-0001162660 00000 n
+0001163030 00000 n
0000002485 00000 n
0000002523 00000 n
0000367836 00000 n
-0001162543 00000 n
+0001162913 00000 n
0000002572 00000 n
0000002618 00000 n
0000367964 00000 n
-0001162425 00000 n
+0001162795 00000 n
0000002672 00000 n
0000002739 00000 n
0000368092 00000 n
-0001162346 00000 n
+0001162716 00000 n
0000002798 00000 n
0000002842 00000 n
0000368221 00000 n
-0001162267 00000 n
+0001162637 00000 n
0000002901 00000 n
0000002949 00000 n
0000383360 00000 n
-0001162188 00000 n
+0001162558 00000 n
0000003003 00000 n
0000003036 00000 n
0000388984 00000 n
-0001162055 00000 n
+0001162425 00000 n
0000003083 00000 n
0000003126 00000 n
0000389113 00000 n
-0001161976 00000 n
+0001162346 00000 n
0000003175 00000 n
0000003205 00000 n
0000389242 00000 n
-0001161844 00000 n
+0001162214 00000 n
0000003254 00000 n
0000003292 00000 n
0000393751 00000 n
-0001161779 00000 n
+0001162149 00000 n
0000003346 00000 n
0000003388 00000 n
0000393880 00000 n
-0001161686 00000 n
+0001162056 00000 n
0000003437 00000 n
0000003496 00000 n
0000394009 00000 n
-0001161554 00000 n
+0001161924 00000 n
0000003545 00000 n
0000003578 00000 n
0000397926 00000 n
-0001161489 00000 n
+0001161859 00000 n
0000003632 00000 n
0000003681 00000 n
0000400938 00000 n
-0001161357 00000 n
+0001161727 00000 n
0000003730 00000 n
0000003758 00000 n
0000403717 00000 n
-0001161239 00000 n
+0001161609 00000 n
0000003812 00000 n
0000003881 00000 n
0000403846 00000 n
-0001161160 00000 n
+0001161530 00000 n
0000003940 00000 n
0000003988 00000 n
0000403974 00000 n
-0001161081 00000 n
+0001161451 00000 n
0000004047 00000 n
0000004092 00000 n
0000404103 00000 n
-0001160988 00000 n
+0001161358 00000 n
0000004146 00000 n
0000004214 00000 n
0000404232 00000 n
-0001160895 00000 n
+0001161265 00000 n
0000004268 00000 n
0000004338 00000 n
0000407900 00000 n
-0001160802 00000 n
+0001161172 00000 n
0000004392 00000 n
0000004455 00000 n
0000408029 00000 n
-0001160709 00000 n
+0001161079 00000 n
0000004509 00000 n
0000004564 00000 n
0000408157 00000 n
-0001160630 00000 n
+0001161000 00000 n
0000004618 00000 n
0000004650 00000 n
0000408285 00000 n
-0001160537 00000 n
+0001160907 00000 n
0000004699 00000 n
0000004727 00000 n
0000412053 00000 n
-0001160444 00000 n
+0001160814 00000 n
0000004776 00000 n
0000004808 00000 n
0000412182 00000 n
-0001160312 00000 n
+0001160682 00000 n
0000004857 00000 n
0000004887 00000 n
0000412311 00000 n
-0001160233 00000 n
+0001160603 00000 n
0000004941 00000 n
0000004982 00000 n
0000416108 00000 n
-0001160140 00000 n
+0001160510 00000 n
0000005036 00000 n
0000005078 00000 n
0000416237 00000 n
-0001160061 00000 n
+0001160431 00000 n
0000005132 00000 n
0000005177 00000 n
0000422245 00000 n
-0001159929 00000 n
+0001160299 00000 n
0000005226 00000 n
0000005281 00000 n
0000422374 00000 n
-0001159850 00000 n
+0001160220 00000 n
0000005335 00000 n
0000005380 00000 n
0000422503 00000 n
-0001159771 00000 n
+0001160141 00000 n
0000005434 00000 n
0000005480 00000 n
0000426363 00000 n
-0001159639 00000 n
+0001160009 00000 n
0000005530 00000 n
0000005587 00000 n
0000426492 00000 n
-0001159521 00000 n
+0001159891 00000 n
0000005642 00000 n
0000005682 00000 n
0000429159 00000 n
-0001159442 00000 n
+0001159812 00000 n
0000005742 00000 n
0000005815 00000 n
0000431688 00000 n
-0001159363 00000 n
+0001159733 00000 n
0000005875 00000 n
0000005948 00000 n
0000431817 00000 n
-0001159231 00000 n
+0001159601 00000 n
0000006003 00000 n
0000006061 00000 n
0000434405 00000 n
-0001159152 00000 n
+0001159522 00000 n
0000006121 00000 n
0000006178 00000 n
0000434534 00000 n
-0001159073 00000 n
+0001159443 00000 n
0000006238 00000 n
0000006297 00000 n
0000434663 00000 n
-0001158980 00000 n
+0001159350 00000 n
0000006352 00000 n
0000006396 00000 n
0000434792 00000 n
-0001158887 00000 n
+0001159257 00000 n
0000006451 00000 n
0000006491 00000 n
0000441271 00000 n
-0001158794 00000 n
+0001159164 00000 n
0000006546 00000 n
0000006614 00000 n
0000441400 00000 n
-0001158715 00000 n
+0001159085 00000 n
0000006669 00000 n
0000006740 00000 n
0000441529 00000 n
-0001158597 00000 n
+0001158967 00000 n
0000006790 00000 n
0000006837 00000 n
0000443930 00000 n
-0001158518 00000 n
+0001158888 00000 n
0000006892 00000 n
0000006953 00000 n
0000444059 00000 n
-0001158439 00000 n
+0001158809 00000 n
0000007008 00000 n
0000007078 00000 n
0000446500 00000 n
-0001158306 00000 n
+0001158676 00000 n
0000007125 00000 n
0000007178 00000 n
0000446629 00000 n
-0001158227 00000 n
+0001158597 00000 n
0000007227 00000 n
0000007283 00000 n
0000446758 00000 n
-0001158148 00000 n
+0001158518 00000 n
0000007332 00000 n
0000007381 00000 n
0000451028 00000 n
-0001158015 00000 n
+0001158385 00000 n
0000007428 00000 n
0000007480 00000 n
0000451157 00000 n
-0001157897 00000 n
+0001158267 00000 n
0000007529 00000 n
0000007580 00000 n
0000455849 00000 n
-0001157779 00000 n
+0001158149 00000 n
0000007634 00000 n
0000007679 00000 n
0000455977 00000 n
-0001157700 00000 n
+0001158070 00000 n
0000007738 00000 n
0000007772 00000 n
0000459569 00000 n
-0001157621 00000 n
+0001157991 00000 n
0000007831 00000 n
0000007879 00000 n
0000459698 00000 n
-0001157503 00000 n
+0001157873 00000 n
0000007933 00000 n
0000007973 00000 n
0000459827 00000 n
-0001157424 00000 n
+0001157794 00000 n
0000008032 00000 n
0000008066 00000 n
0000462678 00000 n
-0001157345 00000 n
+0001157715 00000 n
0000008125 00000 n
0000008173 00000 n
0000462807 00000 n
-0001157212 00000 n
+0001157582 00000 n
0000008222 00000 n
0000008272 00000 n
0000465912 00000 n
-0001157133 00000 n
+0001157503 00000 n
0000008326 00000 n
0000008373 00000 n
0000466040 00000 n
-0001157040 00000 n
+0001157410 00000 n
0000008427 00000 n
0000008487 00000 n
0000466299 00000 n
-0001156947 00000 n
+0001157317 00000 n
0000008541 00000 n
0000008593 00000 n
0000471480 00000 n
-0001156854 00000 n
+0001157224 00000 n
0000008647 00000 n
0000008712 00000 n
0000471609 00000 n
-0001156761 00000 n
+0001157131 00000 n
0000008766 00000 n
0000008817 00000 n
0000475086 00000 n
-0001156668 00000 n
+0001157038 00000 n
0000008871 00000 n
0000008935 00000 n
0000475215 00000 n
-0001156575 00000 n
+0001156945 00000 n
0000008989 00000 n
0000009036 00000 n
0000475344 00000 n
-0001156482 00000 n
+0001156852 00000 n
0000009090 00000 n
0000009150 00000 n
0000475473 00000 n
-0001156389 00000 n
+0001156759 00000 n
0000009204 00000 n
0000009255 00000 n
0000479490 00000 n
-0001156257 00000 n
+0001156627 00000 n
0000009310 00000 n
0000009375 00000 n
0000479619 00000 n
-0001156178 00000 n
+0001156548 00000 n
0000009435 00000 n
0000009482 00000 n
0000486438 00000 n
-0001156085 00000 n
+0001156455 00000 n
0000009542 00000 n
0000009590 00000 n
0000492841 00000 n
-0001156006 00000 n
+0001156376 00000 n
0000009650 00000 n
0000009704 00000 n
0000495928 00000 n
-0001155913 00000 n
+0001156283 00000 n
0000009759 00000 n
0000009809 00000 n
0000498854 00000 n
-0001155820 00000 n
+0001156190 00000 n
0000009864 00000 n
0000009927 00000 n
0000498983 00000 n
-0001155727 00000 n
+0001156097 00000 n
0000009982 00000 n
0000010034 00000 n
0000499111 00000 n
-0001155634 00000 n
+0001156004 00000 n
0000010089 00000 n
0000010154 00000 n
0000499239 00000 n
-0001155541 00000 n
+0001155911 00000 n
0000010209 00000 n
0000010261 00000 n
0000507337 00000 n
-0001155408 00000 n
+0001155778 00000 n
0000010316 00000 n
0000010381 00000 n
0000524305 00000 n
-0001155329 00000 n
+0001155699 00000 n
0000010441 00000 n
0000010485 00000 n
0000550779 00000 n
-0001155236 00000 n
+0001155606 00000 n
0000010545 00000 n
0000010584 00000 n
0000550908 00000 n
-0001155143 00000 n
+0001155513 00000 n
0000010644 00000 n
0000010691 00000 n
0000551037 00000 n
-0001155050 00000 n
+0001155420 00000 n
0000010751 00000 n
0000010794 00000 n
0000558169 00000 n
-0001154957 00000 n
+0001155327 00000 n
0000010854 00000 n
0000010893 00000 n
0000561988 00000 n
-0001154864 00000 n
+0001155234 00000 n
0000010953 00000 n
0000010995 00000 n
0000565024 00000 n
-0001154771 00000 n
+0001155141 00000 n
0000011055 00000 n
0000011098 00000 n
0000572147 00000 n
-0001154678 00000 n
+0001155048 00000 n
0000011158 00000 n
0000011201 00000 n
0000576624 00000 n
-0001154585 00000 n
+0001154955 00000 n
0000011261 00000 n
0000011322 00000 n
0000576753 00000 n
-0001154492 00000 n
+0001154862 00000 n
0000011383 00000 n
0000011435 00000 n
0000580589 00000 n
-0001154399 00000 n
+0001154769 00000 n
0000011496 00000 n
0000011549 00000 n
0000584937 00000 n
-0001154306 00000 n
+0001154676 00000 n
0000011610 00000 n
0000011648 00000 n
0000585066 00000 n
-0001154213 00000 n
+0001154583 00000 n
0000011709 00000 n
0000011761 00000 n
0000587936 00000 n
-0001154120 00000 n
+0001154490 00000 n
0000011822 00000 n
0000011866 00000 n
0000591318 00000 n
-0001154027 00000 n
+0001154397 00000 n
0000011927 00000 n
0000011963 00000 n
0000600266 00000 n
-0001153934 00000 n
+0001154304 00000 n
0000012024 00000 n
0000012087 00000 n
0000602717 00000 n
-0001153841 00000 n
+0001154211 00000 n
0000012148 00000 n
0000012198 00000 n
0000606247 00000 n
-0001153748 00000 n
+0001154118 00000 n
0000012259 00000 n
0000012315 00000 n
0000610787 00000 n
-0001153655 00000 n
+0001154025 00000 n
0000012376 00000 n
0000012423 00000 n
0000614850 00000 n
-0001153576 00000 n
+0001153946 00000 n
0000012484 00000 n
0000012552 00000 n
0000617643 00000 n
-0001153483 00000 n
+0001153853 00000 n
0000012607 00000 n
0000012658 00000 n
-0000621704 00000 n
-0001153390 00000 n
+0000621790 00000 n
+0001153760 00000 n
0000012713 00000 n
0000012777 00000 n
-0000625962 00000 n
-0001153297 00000 n
+0000626048 00000 n
+0001153667 00000 n
0000012832 00000 n
0000012896 00000 n
-0000626091 00000 n
-0001153204 00000 n
+0000626177 00000 n
+0001153574 00000 n
0000012951 00000 n
0000013028 00000 n
-0000626220 00000 n
-0001153111 00000 n
+0000626306 00000 n
+0001153481 00000 n
0000013083 00000 n
0000013140 00000 n
-0000630156 00000 n
-0001153018 00000 n
+0000630242 00000 n
+0001153388 00000 n
0000013195 00000 n
0000013265 00000 n
-0000630285 00000 n
-0001152925 00000 n
+0000630371 00000 n
+0001153295 00000 n
0000013320 00000 n
0000013377 00000 n
-0000630413 00000 n
-0001152832 00000 n
+0000630499 00000 n
+0001153202 00000 n
0000013432 00000 n
0000013502 00000 n
-0000634584 00000 n
-0001152739 00000 n
+0000634670 00000 n
+0001153109 00000 n
0000013557 00000 n
0000013606 00000 n
-0000634713 00000 n
-0001152646 00000 n
+0000634799 00000 n
+0001153016 00000 n
0000013661 00000 n
0000013723 00000 n
-0000637103 00000 n
-0001152553 00000 n
+0000637189 00000 n
+0001152923 00000 n
0000013778 00000 n
0000013827 00000 n
-0000641821 00000 n
-0001152435 00000 n
+0000641958 00000 n
+0001152805 00000 n
0000013882 00000 n
0000013944 00000 n
-0000641950 00000 n
-0001152356 00000 n
+0000642086 00000 n
+0001152726 00000 n
0000014004 00000 n
0000014043 00000 n
-0000654864 00000 n
-0001152263 00000 n
+0000655000 00000 n
+0001152633 00000 n
0000014103 00000 n
0000014137 00000 n
-0000654993 00000 n
-0001152170 00000 n
+0000655129 00000 n
+0001152540 00000 n
0000014197 00000 n
0000014238 00000 n
-0000675061 00000 n
-0001152091 00000 n
+0000675064 00000 n
+0001152461 00000 n
0000014298 00000 n
0000014350 00000 n
-0000681445 00000 n
-0001151959 00000 n
+0000681819 00000 n
+0001152329 00000 n
0000014399 00000 n
0000014432 00000 n
-0000681573 00000 n
-0001151841 00000 n
+0000681947 00000 n
+0001152211 00000 n
0000014486 00000 n
0000014558 00000 n
-0000681702 00000 n
-0001151762 00000 n
+0000682076 00000 n
+0001152132 00000 n
0000014617 00000 n
0000014661 00000 n
-0000692866 00000 n
-0001151683 00000 n
+0000693240 00000 n
+0001152053 00000 n
0000014720 00000 n
0000014773 00000 n
-0000696591 00000 n
-0001151590 00000 n
+0000696965 00000 n
+0001151960 00000 n
0000014827 00000 n
0000014877 00000 n
-0000696850 00000 n
-0001151497 00000 n
+0000697224 00000 n
+0001151867 00000 n
0000014931 00000 n
0000014969 00000 n
-0000699989 00000 n
-0001151404 00000 n
+0000700363 00000 n
+0001151774 00000 n
0000015023 00000 n
0000015072 00000 n
-0000700248 00000 n
-0001151272 00000 n
+0000700622 00000 n
+0001151642 00000 n
0000015126 00000 n
0000015178 00000 n
-0000700377 00000 n
-0001151193 00000 n
+0000700751 00000 n
+0001151563 00000 n
0000015237 00000 n
0000015282 00000 n
-0000700506 00000 n
-0001151100 00000 n
+0000700880 00000 n
+0001151470 00000 n
0000015341 00000 n
0000015393 00000 n
-0000703243 00000 n
-0001151007 00000 n
+0000703617 00000 n
+0001151377 00000 n
0000015452 00000 n
0000015505 00000 n
-0000703372 00000 n
-0001150928 00000 n
+0000703746 00000 n
+0001151298 00000 n
0000015564 00000 n
0000015613 00000 n
-0000703501 00000 n
-0001150835 00000 n
+0000703875 00000 n
+0001151205 00000 n
0000015667 00000 n
0000015747 00000 n
-0000707541 00000 n
-0001150756 00000 n
+0000707915 00000 n
+0001151126 00000 n
0000015801 00000 n
0000015850 00000 n
-0000711209 00000 n
-0001150638 00000 n
+0000711583 00000 n
+0001151008 00000 n
0000015899 00000 n
0000015939 00000 n
-0000711468 00000 n
-0001150559 00000 n
+0000711842 00000 n
+0001150929 00000 n
0000015998 00000 n
0000016045 00000 n
-0000714822 00000 n
-0001150441 00000 n
+0000715196 00000 n
+0001150811 00000 n
0000016099 00000 n
0000016144 00000 n
-0000714951 00000 n
-0001150362 00000 n
+0000715325 00000 n
+0001150732 00000 n
0000016203 00000 n
0000016262 00000 n
-0000718364 00000 n
-0001150269 00000 n
+0000718738 00000 n
+0001150639 00000 n
0000016321 00000 n
0000016385 00000 n
-0000718623 00000 n
-0001150176 00000 n
+0000718997 00000 n
+0001150546 00000 n
0000016444 00000 n
0000016500 00000 n
-0000722701 00000 n
-0001150083 00000 n
+0000723075 00000 n
+0001150453 00000 n
0000016559 00000 n
0000016617 00000 n
-0000725121 00000 n
-0001150004 00000 n
+0000725495 00000 n
+0001150374 00000 n
0000016676 00000 n
0000016738 00000 n
-0000727284 00000 n
-0001149871 00000 n
+0000727658 00000 n
+0001150241 00000 n
0000016785 00000 n
0000016837 00000 n
-0000727413 00000 n
-0001149792 00000 n
+0000727787 00000 n
+0001150162 00000 n
0000016886 00000 n
0000016930 00000 n
-0000731448 00000 n
-0001149660 00000 n
+0000731822 00000 n
+0001150030 00000 n
0000016979 00000 n
0000017020 00000 n
-0000731577 00000 n
-0001149581 00000 n
+0000731951 00000 n
+0001149951 00000 n
0000017074 00000 n
0000017122 00000 n
-0000731705 00000 n
-0001149502 00000 n
+0000732079 00000 n
+0001149872 00000 n
0000017176 00000 n
0000017227 00000 n
-0000731834 00000 n
-0001149423 00000 n
+0000732208 00000 n
+0001149793 00000 n
0000017276 00000 n
0000017323 00000 n
-0000736431 00000 n
-0001149290 00000 n
+0000736805 00000 n
+0001149660 00000 n
0000017370 00000 n
0000017407 00000 n
-0000736560 00000 n
-0001149172 00000 n
+0000736934 00000 n
+0001149542 00000 n
0000017456 00000 n
0000017495 00000 n
-0000736689 00000 n
-0001149107 00000 n
+0000737063 00000 n
+0001149477 00000 n
0000017549 00000 n
0000017627 00000 n
-0000736818 00000 n
-0001149014 00000 n
+0000737192 00000 n
+0001149384 00000 n
0000017676 00000 n
0000017743 00000 n
-0000736947 00000 n
-0001148935 00000 n
+0000737321 00000 n
+0001149305 00000 n
0000017792 00000 n
0000017837 00000 n
-0000740388 00000 n
-0001148802 00000 n
+0000740762 00000 n
+0001149172 00000 n
0000017885 00000 n
0000017917 00000 n
-0000740517 00000 n
-0001148684 00000 n
+0000740891 00000 n
+0001149054 00000 n
0000017966 00000 n
0000018005 00000 n
-0000740646 00000 n
-0001148619 00000 n
+0000741020 00000 n
+0001148989 00000 n
0000018059 00000 n
0000018120 00000 n
-0000744328 00000 n
-0001148487 00000 n
+0000744702 00000 n
+0001148857 00000 n
0000018169 00000 n
0000018226 00000 n
-0000744457 00000 n
-0001148422 00000 n
+0000744831 00000 n
+0001148792 00000 n
0000018280 00000 n
0000018329 00000 n
-0000744586 00000 n
-0001148290 00000 n
+0000744960 00000 n
+0001148660 00000 n
0000018378 00000 n
0000018440 00000 n
-0000744715 00000 n
-0001148211 00000 n
+0000745089 00000 n
+0001148581 00000 n
0000018494 00000 n
0000018549 00000 n
-0000769553 00000 n
-0001148118 00000 n
+0000769927 00000 n
+0001148488 00000 n
0000018603 00000 n
0000018644 00000 n
-0000769682 00000 n
-0001148039 00000 n
+0000770056 00000 n
+0001148409 00000 n
0000018698 00000 n
0000018750 00000 n
-0000770071 00000 n
-0001147921 00000 n
+0000770445 00000 n
+0001148291 00000 n
0000018799 00000 n
0000018849 00000 n
-0000772892 00000 n
-0001147842 00000 n
+0000773266 00000 n
+0001148212 00000 n
0000018903 00000 n
0000018941 00000 n
-0000773021 00000 n
-0001147749 00000 n
+0000773395 00000 n
+0001148119 00000 n
0000018995 00000 n
0000019032 00000 n
-0000773150 00000 n
-0001147656 00000 n
+0000773524 00000 n
+0001148026 00000 n
0000019086 00000 n
0000019124 00000 n
-0000773279 00000 n
-0001147563 00000 n
+0000773653 00000 n
+0001147933 00000 n
0000019178 00000 n
0000019230 00000 n
-0000776514 00000 n
-0001147470 00000 n
+0000776888 00000 n
+0001147840 00000 n
0000019284 00000 n
0000019327 00000 n
-0000776642 00000 n
-0001147338 00000 n
+0000777016 00000 n
+0001147708 00000 n
0000019381 00000 n
0000019426 00000 n
-0000776770 00000 n
-0001147259 00000 n
+0000777144 00000 n
+0001147629 00000 n
0000019485 00000 n
0000019551 00000 n
-0000779754 00000 n
-0001147166 00000 n
+0000780128 00000 n
+0001147536 00000 n
0000019610 00000 n
0000019698 00000 n
-0000779883 00000 n
-0001147073 00000 n
+0000780257 00000 n
+0001147443 00000 n
0000019757 00000 n
0000019832 00000 n
-0000780012 00000 n
-0001146980 00000 n
+0000780386 00000 n
+0001147350 00000 n
0000019891 00000 n
0000019976 00000 n
-0000782919 00000 n
-0001146887 00000 n
+0000783293 00000 n
+0001147257 00000 n
0000020035 00000 n
0000020116 00000 n
-0000785379 00000 n
-0001146808 00000 n
+0000785753 00000 n
+0001147178 00000 n
0000020175 00000 n
0000020259 00000 n
-0000785508 00000 n
-0001146729 00000 n
+0000785882 00000 n
+0001147099 00000 n
0000020313 00000 n
0000020357 00000 n
-0000788336 00000 n
-0001146609 00000 n
+0000788710 00000 n
+0001146979 00000 n
0000020405 00000 n
0000020439 00000 n
-0000788465 00000 n
-0001146530 00000 n
+0000788839 00000 n
+0001146900 00000 n
0000020488 00000 n
0000020515 00000 n
-0000806626 00000 n
-0001146437 00000 n
+0000807000 00000 n
+0001146807 00000 n
0000020564 00000 n
0000020592 00000 n
-0000814233 00000 n
-0001146344 00000 n
+0000814607 00000 n
+0001146714 00000 n
0000020641 00000 n
0000020681 00000 n
-0000820641 00000 n
-0001146251 00000 n
+0000821015 00000 n
+0001146621 00000 n
0000020730 00000 n
0000020773 00000 n
-0000827347 00000 n
-0001146158 00000 n
+0000827721 00000 n
+0001146528 00000 n
0000020822 00000 n
0000020859 00000 n
-0000841178 00000 n
-0001146065 00000 n
+0000841552 00000 n
+0001146435 00000 n
0000020908 00000 n
0000020945 00000 n
-0000844009 00000 n
-0001145972 00000 n
+0000844383 00000 n
+0001146342 00000 n
0000020994 00000 n
0000021032 00000 n
-0000850960 00000 n
-0001145879 00000 n
+0000851334 00000 n
+0001146249 00000 n
0000021081 00000 n
0000021120 00000 n
-0000868152 00000 n
-0001145786 00000 n
+0000868526 00000 n
+0001146156 00000 n
0000021169 00000 n
0000021208 00000 n
-0000871068 00000 n
-0001145693 00000 n
+0000871442 00000 n
+0001146063 00000 n
0000021258 00000 n
0000021298 00000 n
-0000877416 00000 n
-0001145600 00000 n
+0000877790 00000 n
+0001145970 00000 n
0000021348 00000 n
0000021378 00000 n
-0000886761 00000 n
-0001145507 00000 n
+0000887135 00000 n
+0001145877 00000 n
0000021428 00000 n
0000021471 00000 n
-0000889846 00000 n
-0001145414 00000 n
+0000890220 00000 n
+0001145784 00000 n
0000021521 00000 n
0000021554 00000 n
-0000904233 00000 n
-0001145321 00000 n
+0000904607 00000 n
+0001145691 00000 n
0000021604 00000 n
0000021633 00000 n
-0000907894 00000 n
-0001145228 00000 n
+0000908268 00000 n
+0001145598 00000 n
0000021683 00000 n
0000021717 00000 n
-0000917310 00000 n
-0001145135 00000 n
+0000917684 00000 n
+0001145505 00000 n
0000021767 00000 n
0000021804 00000 n
-0000920521 00000 n
-0001145042 00000 n
+0000920895 00000 n
+0001145412 00000 n
0000021854 00000 n
0000021891 00000 n
-0000924084 00000 n
-0001144949 00000 n
+0000924458 00000 n
+0001145319 00000 n
0000021941 00000 n
0000021974 00000 n
-0000926238 00000 n
-0001144856 00000 n
+0000926612 00000 n
+0001145226 00000 n
0000022024 00000 n
0000022058 00000 n
-0000928952 00000 n
-0001144763 00000 n
+0000929326 00000 n
+0001145133 00000 n
0000022108 00000 n
0000022147 00000 n
-0000929469 00000 n
-0001144684 00000 n
+0000929843 00000 n
+0001145054 00000 n
0000022197 00000 n
0000022231 00000 n
0000022604 00000 n
@@ -16704,10 +16710,10 @@ xref
0000022284 00000 n
0000287401 00000 n
0000287464 00000 n
-0001139112 00000 n
-0001113027 00000 n
-0001138938 00000 n
-0001140150 00000 n
+0001139482 00000 n
+0001113397 00000 n
+0001139308 00000 n
+0001140520 00000 n
0000024035 00000 n
0000024228 00000 n
0000024308 00000 n
@@ -16727,12 +16733,12 @@ xref
0000288770 00000 n
0000287627 00000 n
0000288892 00000 n
-0001111791 00000 n
-0001085172 00000 n
-0001111617 00000 n
-0001084487 00000 n
-0001082343 00000 n
-0001084323 00000 n
+0001112161 00000 n
+0001085542 00000 n
+0001111987 00000 n
+0001084857 00000 n
+0001082712 00000 n
+0001084693 00000 n
0000300657 00000 n
0000292006 00000 n
0000289040 00000 n
@@ -16792,9 +16798,9 @@ xref
0000304069 00000 n
0000300742 00000 n
0000314038 00000 n
-0001081765 00000 n
-0001064406 00000 n
-0001081581 00000 n
+0001082134 00000 n
+0001064775 00000 n
+0001081950 00000 n
0000304679 00000 n
0000304842 00000 n
0000305004 00000 n
@@ -16907,9 +16913,9 @@ xref
0000326409 00000 n
0000326577 00000 n
0000326745 00000 n
-0001063515 00000 n
-0001042180 00000 n
-0001063339 00000 n
+0001063884 00000 n
+0001042550 00000 n
+0001063708 00000 n
0000326913 00000 n
0000327081 00000 n
0000327236 00000 n
@@ -16964,9 +16970,9 @@ xref
0000338359 00000 n
0000338518 00000 n
0000338677 00000 n
-0001041212 00000 n
-0001021242 00000 n
-0001041037 00000 n
+0001041582 00000 n
+0001021612 00000 n
+0001041407 00000 n
0000338834 00000 n
0000338993 00000 n
0000339151 00000 n
@@ -16983,10 +16989,10 @@ xref
0000342950 00000 n
0000343015 00000 n
0000343080 00000 n
-0001020425 00000 n
-0001001960 00000 n
-0001020250 00000 n
-0001140270 00000 n
+0001020795 00000 n
+0001002330 00000 n
+0001020620 00000 n
+0001140640 00000 n
0000347682 00000 n
0000346541 00000 n
0000343273 00000 n
@@ -16998,8 +17004,8 @@ xref
0000346697 00000 n
0000346891 00000 n
0000347617 00000 n
-0000681637 00000 n
-0000744779 00000 n
+0000682011 00000 n
+0000745153 00000 n
0000352363 00000 n
0000351305 00000 n
0000347809 00000 n
@@ -17043,7 +17049,7 @@ xref
0000361857 00000 n
0000361985 00000 n
0000362114 00000 n
-0001140395 00000 n
+0001140765 00000 n
0000364758 00000 n
0000364128 00000 n
0000362279 00000 n
@@ -17059,23 +17065,23 @@ xref
0000367771 00000 n
0000367900 00000 n
0000368027 00000 n
-0001001258 00000 n
-0000988820 00000 n
-0001001079 00000 n
+0001001628 00000 n
+0000989190 00000 n
+0001001449 00000 n
0000368285 00000 n
0000373004 00000 n
0000372114 00000 n
0000368477 00000 n
0000372939 00000 n
-0000988247 00000 n
-0000977313 00000 n
-0000988068 00000 n
+0000988617 00000 n
+0000977684 00000 n
+0000988438 00000 n
0000372288 00000 n
0000372443 00000 n
0000372613 00000 n
0000372768 00000 n
0000507401 00000 n
-0000675125 00000 n
+0000675128 00000 n
0000376451 00000 n
0000376260 00000 n
0000373172 00000 n
@@ -17093,7 +17099,7 @@ xref
0000383424 00000 n
0000383488 00000 n
0000383553 00000 n
-0001140520 00000 n
+0001140890 00000 n
0000384086 00000 n
0000383895 00000 n
0000383745 00000 n
@@ -17107,12 +17113,12 @@ xref
0000389177 00000 n
0000388424 00000 n
0000388586 00000 n
-0000976407 00000 n
-0000966387 00000 n
-0000976233 00000 n
-0000965823 00000 n
-0000956736 00000 n
-0000965648 00000 n
+0000976778 00000 n
+0000966758 00000 n
+0000976604 00000 n
+0000966194 00000 n
+0000957108 00000 n
+0000966019 00000 n
0000389306 00000 n
0000388748 00000 n
0000388253 00000 n
@@ -17129,7 +17135,7 @@ xref
0000393358 00000 n
0000393524 00000 n
0000394073 00000 n
-0000748809 00000 n
+0000749183 00000 n
0000398055 00000 n
0000397546 00000 n
0000394293 00000 n
@@ -17145,7 +17151,7 @@ xref
0000399302 00000 n
0000400873 00000 n
0000401002 00000 n
-0001140645 00000 n
+0001141015 00000 n
0000404361 00000 n
0000403526 00000 n
0000401180 00000 n
@@ -17185,15 +17191,15 @@ xref
0000421873 00000 n
0000418821 00000 n
0000422180 00000 n
-0000956461 00000 n
-0000953101 00000 n
-0000956282 00000 n
+0000956833 00000 n
+0000953475 00000 n
+0000956654 00000 n
0000422309 00000 n
0000422438 00000 n
0000422020 00000 n
0000422567 00000 n
-0001140770 00000 n
-0000630477 00000 n
+0001141140 00000 n
+0000630563 00000 n
0000426620 00000 n
0000426172 00000 n
0000422802 00000 n
@@ -17229,12 +17235,12 @@ xref
0000437588 00000 n
0000441206 00000 n
0000441335 00000 n
-0000952746 00000 n
-0000950748 00000 n
-0000952581 00000 n
+0000953120 00000 n
+0000951122 00000 n
+0000952955 00000 n
0000441464 00000 n
0000441592 00000 n
-0001140895 00000 n
+0001141265 00000 n
0000444188 00000 n
0000443557 00000 n
0000441827 00000 n
@@ -17242,7 +17248,7 @@ xref
0000443704 00000 n
0000443994 00000 n
0000444123 00000 n
-0000744521 00000 n
+0000744895 00000 n
0000446887 00000 n
0000446309 00000 n
0000444315 00000 n
@@ -17276,7 +17282,7 @@ xref
0000459633 00000 n
0000459762 00000 n
0000459891 00000 n
-0001141020 00000 n
+0001141390 00000 n
0000463065 00000 n
0000462487 00000 n
0000460096 00000 n
@@ -17301,7 +17307,7 @@ xref
0000471105 00000 n
0000471256 00000 n
0000471673 00000 n
-0000931727 00000 n
+0000932101 00000 n
0000475602 00000 n
0000474331 00000 n
0000471877 00000 n
@@ -17324,7 +17330,7 @@ xref
0000479875 00000 n
0000483588 00000 n
0000483421 00000 n
-0001141145 00000 n
+0001141515 00000 n
0000486502 00000 n
0000486697 00000 n
0000486247 00000 n
@@ -17362,7 +17368,7 @@ xref
0000500720 00000 n
0000499480 00000 n
0000500846 00000 n
-0001141270 00000 n
+0001141640 00000 n
0000502457 00000 n
0000502266 00000 n
0000501011 00000 n
@@ -17385,13 +17391,13 @@ xref
0000515997 00000 n
0000515672 00000 n
0000515829 00000 n
-0000711532 00000 n
+0000711906 00000 n
0000520298 00000 n
0000519934 00000 n
0000516189 00000 n
0000520233 00000 n
0000520081 00000 n
-0001141395 00000 n
+0001141765 00000 n
0000524434 00000 n
0000523922 00000 n
0000520439 00000 n
@@ -17413,7 +17419,7 @@ xref
0000532857 00000 n
0000533031 00000 n
0000533216 00000 n
-0000621768 00000 n
+0000621854 00000 n
0000537955 00000 n
0000537764 00000 n
0000533634 00000 n
@@ -17428,9 +17434,9 @@ xref
0000546579 00000 n
0000546250 00000 n
0000546414 00000 n
-0001141520 00000 n
-0000827411 00000 n
-0000844073 00000 n
+0001141890 00000 n
+0000827785 00000 n
+0000844447 00000 n
0000551166 00000 n
0000550221 00000 n
0000546757 00000 n
@@ -17440,13 +17446,13 @@ xref
0000550972 00000 n
0000551101 00000 n
0000550547 00000 n
-0000637167 00000 n
+0000637253 00000 n
0000554561 00000 n
0000554179 00000 n
0000551279 00000 n
0000554496 00000 n
0000554326 00000 n
-0000731898 00000 n
+0000732272 00000 n
0000558298 00000 n
0000557786 00000 n
0000554731 00000 n
@@ -17466,7 +17472,7 @@ xref
0000568908 00000 n
0000565308 00000 n
0000569034 00000 n
-0001141645 00000 n
+0001142015 00000 n
0000572276 00000 n
0000571775 00000 n
0000569212 00000 n
@@ -17506,21 +17512,21 @@ xref
0000588321 00000 n
0000591253 00000 n
0000591382 00000 n
-0001141770 00000 n
+0001142140 00000 n
0000595908 00000 n
0000595365 00000 n
0000591630 00000 n
0000595843 00000 n
0000595521 00000 n
0000595682 00000 n
-0000707605 00000 n
+0000707979 00000 n
0000600395 00000 n
0000599885 00000 n
0000596021 00000 n
0000600201 00000 n
0000600330 00000 n
0000600032 00000 n
-0000634648 00000 n
+0000634734 00000 n
0000602845 00000 n
0000602526 00000 n
0000600522 00000 n
@@ -17541,948 +17547,948 @@ xref
0000611042 00000 n
0000614785 00000 n
0000614914 00000 n
-0001141895 00000 n
+0001142265 00000 n
0000617772 00000 n
0000617452 00000 n
0000615119 00000 n
0000617578 00000 n
0000617707 00000 n
-0000621833 00000 n
-0000621513 00000 n
+0000621919 00000 n
+0000621599 00000 n
0000617885 00000 n
-0000621639 00000 n
-0000626348 00000 n
-0000625430 00000 n
-0000621946 00000 n
-0000625897 00000 n
-0000625586 00000 n
-0000625737 00000 n
-0000626026 00000 n
-0000626155 00000 n
-0000626283 00000 n
-0000630542 00000 n
-0000629790 00000 n
-0000626461 00000 n
-0000630091 00000 n
-0000630220 00000 n
-0000629937 00000 n
-0000630349 00000 n
-0000634842 00000 n
-0000634393 00000 n
-0000630669 00000 n
-0000634519 00000 n
-0000634777 00000 n
-0000637232 00000 n
-0000636912 00000 n
-0000634983 00000 n
-0000637038 00000 n
-0001142020 00000 n
-0000638808 00000 n
-0000638617 00000 n
-0000637345 00000 n
-0000638743 00000 n
-0000640312 00000 n
-0000640121 00000 n
-0000638908 00000 n
-0000640247 00000 n
-0000642209 00000 n
-0000641630 00000 n
-0000640412 00000 n
-0000641756 00000 n
-0000641885 00000 n
-0000642014 00000 n
-0000642079 00000 n
-0000642144 00000 n
-0000645212 00000 n
-0000645021 00000 n
-0000642322 00000 n
-0000645147 00000 n
-0000649103 00000 n
-0000648724 00000 n
-0000645325 00000 n
-0000649038 00000 n
-0000648871 00000 n
-0000931694 00000 n
-0000655122 00000 n
-0000652432 00000 n
-0000649216 00000 n
-0000654799 00000 n
-0000654928 00000 n
-0000655057 00000 n
-0000652687 00000 n
-0000652849 00000 n
-0000653011 00000 n
-0000653173 00000 n
-0000653334 00000 n
-0000653496 00000 n
-0000653667 00000 n
-0000653829 00000 n
-0000653992 00000 n
-0000654153 00000 n
-0000654313 00000 n
-0000654476 00000 n
-0000654638 00000 n
-0001142145 00000 n
-0000660493 00000 n
-0000658406 00000 n
-0000655235 00000 n
-0000660428 00000 n
-0000658643 00000 n
-0000658798 00000 n
-0000658961 00000 n
-0000659121 00000 n
-0000659282 00000 n
-0000659450 00000 n
-0000659620 00000 n
-0000659782 00000 n
-0000659944 00000 n
-0000660106 00000 n
-0000660267 00000 n
-0000664756 00000 n
-0000663569 00000 n
-0000660620 00000 n
-0000664691 00000 n
-0000663761 00000 n
-0000663915 00000 n
-0000664078 00000 n
-0000664232 00000 n
-0000664386 00000 n
-0000664539 00000 n
-0000671011 00000 n
-0000668262 00000 n
-0000664883 00000 n
-0000670946 00000 n
-0000668535 00000 n
-0000668697 00000 n
-0000668859 00000 n
-0000669021 00000 n
-0000669183 00000 n
-0000669345 00000 n
-0000669507 00000 n
-0000669669 00000 n
-0000669823 00000 n
-0000669986 00000 n
-0000670141 00000 n
-0000670306 00000 n
-0000670472 00000 n
-0000670635 00000 n
-0000670788 00000 n
-0000675320 00000 n
-0000674870 00000 n
-0000671138 00000 n
-0000674996 00000 n
-0000675190 00000 n
-0000675255 00000 n
-0000678334 00000 n
-0000678143 00000 n
-0000675461 00000 n
-0000678269 00000 n
-0000681830 00000 n
-0000681254 00000 n
-0000678504 00000 n
-0000681380 00000 n
-0000681508 00000 n
-0000681765 00000 n
-0001142270 00000 n
-0000686073 00000 n
-0000685261 00000 n
-0000682000 00000 n
-0000685748 00000 n
-0000685417 00000 n
-0000685587 00000 n
-0000685813 00000 n
-0000685878 00000 n
-0000685943 00000 n
-0000686008 00000 n
-0000689342 00000 n
-0000689021 00000 n
-0000686173 00000 n
-0000689147 00000 n
-0000689212 00000 n
-0000689277 00000 n
-0000693254 00000 n
-0000692675 00000 n
-0000689456 00000 n
-0000692801 00000 n
-0000692930 00000 n
-0000692995 00000 n
-0000693060 00000 n
-0000693124 00000 n
-0000693189 00000 n
-0000697109 00000 n
-0000696400 00000 n
-0000693367 00000 n
-0000696526 00000 n
-0000696655 00000 n
-0000696720 00000 n
-0000696785 00000 n
-0000696914 00000 n
-0000696979 00000 n
-0000697044 00000 n
-0000700635 00000 n
-0000699798 00000 n
-0000697236 00000 n
-0000699924 00000 n
-0000700053 00000 n
-0000700118 00000 n
-0000700183 00000 n
-0000700312 00000 n
-0000700441 00000 n
-0000700570 00000 n
-0000703629 00000 n
-0000703052 00000 n
-0000700847 00000 n
-0000703178 00000 n
-0000703307 00000 n
-0000703436 00000 n
-0000703565 00000 n
-0001142395 00000 n
-0000707669 00000 n
-0000707220 00000 n
-0000703813 00000 n
-0000707346 00000 n
-0000707411 00000 n
-0000707476 00000 n
-0000711597 00000 n
-0000710837 00000 n
-0000707795 00000 n
-0000711144 00000 n
-0000711273 00000 n
-0000711338 00000 n
-0000711403 00000 n
-0000710984 00000 n
-0000715210 00000 n
-0000714631 00000 n
-0000711724 00000 n
-0000714757 00000 n
-0000714886 00000 n
-0000715015 00000 n
-0000715080 00000 n
-0000715145 00000 n
-0000718815 00000 n
-0000717987 00000 n
-0000715323 00000 n
-0000718299 00000 n
-0000718134 00000 n
-0000718428 00000 n
-0000718493 00000 n
-0000718558 00000 n
-0000718687 00000 n
-0000718751 00000 n
-0000931661 00000 n
-0000722960 00000 n
-0000722445 00000 n
-0000718928 00000 n
-0000722571 00000 n
-0000722636 00000 n
-0000722765 00000 n
-0000722830 00000 n
-0000722895 00000 n
-0000725250 00000 n
-0000724930 00000 n
-0000723087 00000 n
-0000725056 00000 n
-0000950467 00000 n
-0000943183 00000 n
-0000950287 00000 n
-0000725185 00000 n
-0001142520 00000 n
-0000725732 00000 n
-0000725541 00000 n
-0000725391 00000 n
-0000725667 00000 n
-0000727542 00000 n
-0000727093 00000 n
-0000725774 00000 n
-0000727219 00000 n
-0000727348 00000 n
-0000727477 00000 n
-0000731963 00000 n
-0000731020 00000 n
-0000727656 00000 n
-0000731383 00000 n
-0000942862 00000 n
-0000933649 00000 n
-0000942676 00000 n
-0000731167 00000 n
-0000731512 00000 n
-0000731640 00000 n
-0000731769 00000 n
-0000733321 00000 n
-0000733130 00000 n
-0000732203 00000 n
-0000733256 00000 n
-0000733761 00000 n
-0000733570 00000 n
-0000733420 00000 n
-0000733696 00000 n
-0000737075 00000 n
-0000735849 00000 n
-0000733803 00000 n
-0000736366 00000 n
-0000736495 00000 n
-0000736624 00000 n
-0000736753 00000 n
-0000736882 00000 n
-0000737011 00000 n
-0000736005 00000 n
-0000736177 00000 n
-0001142645 00000 n
-0000737530 00000 n
-0000737339 00000 n
-0000737189 00000 n
-0000737465 00000 n
-0000740775 00000 n
-0000740197 00000 n
-0000737572 00000 n
-0000740323 00000 n
-0000740452 00000 n
-0000740581 00000 n
-0000740710 00000 n
-0000744972 00000 n
-0000743753 00000 n
-0000740861 00000 n
-0000744263 00000 n
-0000744392 00000 n
-0000744650 00000 n
-0000743909 00000 n
-0000744088 00000 n
-0000744844 00000 n
-0000744908 00000 n
-0000751861 00000 n
-0000748033 00000 n
-0000745127 00000 n
-0000748159 00000 n
-0000748224 00000 n
-0000748289 00000 n
-0000748354 00000 n
-0000748419 00000 n
-0000748484 00000 n
-0000748549 00000 n
-0000748614 00000 n
-0000748679 00000 n
-0000748744 00000 n
-0000748874 00000 n
-0000748939 00000 n
-0000749004 00000 n
-0000749069 00000 n
-0000749134 00000 n
-0000749199 00000 n
-0000749264 00000 n
-0000749329 00000 n
-0000749394 00000 n
-0000749459 00000 n
-0000749524 00000 n
-0000749589 00000 n
-0000749654 00000 n
-0000749719 00000 n
-0000749784 00000 n
-0000749849 00000 n
-0000749914 00000 n
-0000749979 00000 n
-0000750044 00000 n
-0000750109 00000 n
-0000750174 00000 n
-0000750239 00000 n
-0000750304 00000 n
-0000750369 00000 n
-0000750433 00000 n
-0000750498 00000 n
-0000750563 00000 n
-0000750628 00000 n
-0000750693 00000 n
-0000750758 00000 n
-0000750823 00000 n
-0000750888 00000 n
-0000750953 00000 n
-0000751018 00000 n
-0000751083 00000 n
-0000751148 00000 n
-0000751213 00000 n
-0000751278 00000 n
-0000751343 00000 n
-0000751408 00000 n
-0000751473 00000 n
-0000751538 00000 n
-0000751603 00000 n
-0000751668 00000 n
-0000751733 00000 n
-0000751797 00000 n
-0000758508 00000 n
-0000754944 00000 n
-0000751974 00000 n
-0000755070 00000 n
-0000755135 00000 n
-0000755200 00000 n
-0000755265 00000 n
-0000755330 00000 n
-0000755395 00000 n
-0000755460 00000 n
-0000755525 00000 n
-0000755590 00000 n
-0000755655 00000 n
-0000755720 00000 n
-0000755785 00000 n
-0000755849 00000 n
-0000755914 00000 n
-0000755979 00000 n
-0000756044 00000 n
-0000756109 00000 n
-0000756174 00000 n
-0000756239 00000 n
-0000756304 00000 n
-0000756369 00000 n
-0000756434 00000 n
-0000756499 00000 n
-0000756564 00000 n
-0000756628 00000 n
-0000756693 00000 n
-0000756758 00000 n
-0000756823 00000 n
-0000756888 00000 n
-0000756953 00000 n
-0000757018 00000 n
-0000757083 00000 n
-0000757148 00000 n
-0000757213 00000 n
-0000757278 00000 n
-0000757343 00000 n
-0000757408 00000 n
-0000757473 00000 n
-0000757538 00000 n
-0000757603 00000 n
-0000757667 00000 n
-0000757731 00000 n
-0000757795 00000 n
-0000757860 00000 n
-0000757925 00000 n
-0000757990 00000 n
-0000758055 00000 n
-0000758120 00000 n
-0000758185 00000 n
-0000758250 00000 n
-0000758315 00000 n
-0000758380 00000 n
-0000758444 00000 n
-0000764682 00000 n
-0000761244 00000 n
-0000758621 00000 n
-0000761370 00000 n
-0000761435 00000 n
-0000761500 00000 n
-0000761565 00000 n
-0000761630 00000 n
-0000761695 00000 n
-0000761760 00000 n
-0000761825 00000 n
-0000761890 00000 n
-0000761955 00000 n
-0000762020 00000 n
-0000762085 00000 n
-0000762150 00000 n
-0000762215 00000 n
-0000762280 00000 n
-0000762345 00000 n
-0000762410 00000 n
-0000762475 00000 n
-0000762540 00000 n
-0000762605 00000 n
-0000762670 00000 n
-0000762735 00000 n
-0000762800 00000 n
-0000762865 00000 n
-0000762930 00000 n
-0000762995 00000 n
-0000763060 00000 n
-0000763125 00000 n
-0000763190 00000 n
-0000763255 00000 n
-0000763320 00000 n
-0000763385 00000 n
-0000763450 00000 n
-0000763515 00000 n
-0000763579 00000 n
-0000763644 00000 n
-0000763709 00000 n
-0000763774 00000 n
-0000763839 00000 n
-0000763904 00000 n
-0000763969 00000 n
-0000764034 00000 n
-0000764099 00000 n
-0000764164 00000 n
-0000764229 00000 n
-0000764294 00000 n
-0000764359 00000 n
-0000764424 00000 n
-0000764489 00000 n
-0000764554 00000 n
-0000764618 00000 n
-0001142770 00000 n
-0000770200 00000 n
-0000767804 00000 n
-0000764795 00000 n
-0000767930 00000 n
-0000767995 00000 n
-0000768060 00000 n
-0000768125 00000 n
-0000768190 00000 n
-0000768255 00000 n
-0000768320 00000 n
-0000768385 00000 n
-0000768450 00000 n
-0000768515 00000 n
-0000768580 00000 n
-0000768645 00000 n
-0000768710 00000 n
-0000768774 00000 n
-0000768839 00000 n
-0000768904 00000 n
-0000768969 00000 n
-0000769034 00000 n
-0000769099 00000 n
-0000769164 00000 n
-0000769229 00000 n
-0000769294 00000 n
-0000769359 00000 n
-0000769424 00000 n
-0000769489 00000 n
-0000769617 00000 n
-0000769746 00000 n
-0000769811 00000 n
-0000769876 00000 n
-0000769941 00000 n
-0000770006 00000 n
-0000770135 00000 n
-0000773408 00000 n
-0000772701 00000 n
-0000770326 00000 n
-0000772827 00000 n
-0000772956 00000 n
-0000773085 00000 n
-0000773214 00000 n
-0000773343 00000 n
-0000776899 00000 n
-0000776142 00000 n
-0000773534 00000 n
-0000776449 00000 n
-0000776578 00000 n
-0000776289 00000 n
-0000776706 00000 n
-0000776834 00000 n
-0000780141 00000 n
-0000779563 00000 n
-0000777025 00000 n
-0000779689 00000 n
-0000779818 00000 n
-0000779947 00000 n
-0000780076 00000 n
-0000783048 00000 n
-0000782728 00000 n
-0000780254 00000 n
-0000782854 00000 n
-0000782983 00000 n
-0000785637 00000 n
-0000785188 00000 n
-0000783217 00000 n
-0000785314 00000 n
-0000785443 00000 n
-0000785572 00000 n
-0001142895 00000 n
-0000786077 00000 n
-0000785886 00000 n
-0000785736 00000 n
-0000786012 00000 n
-0000788789 00000 n
-0000788145 00000 n
-0000786119 00000 n
-0000788271 00000 n
-0000788400 00000 n
-0000788529 00000 n
-0000788594 00000 n
-0000788659 00000 n
-0000788724 00000 n
-0000793129 00000 n
-0000792809 00000 n
+0000621725 00000 n
+0000626434 00000 n
+0000625516 00000 n
+0000622032 00000 n
+0000625983 00000 n
+0000625672 00000 n
+0000625823 00000 n
+0000626112 00000 n
+0000626241 00000 n
+0000626369 00000 n
+0000630628 00000 n
+0000629876 00000 n
+0000626547 00000 n
+0000630177 00000 n
+0000630306 00000 n
+0000630023 00000 n
+0000630435 00000 n
+0000634928 00000 n
+0000634479 00000 n
+0000630755 00000 n
+0000634605 00000 n
+0000634863 00000 n
+0000637318 00000 n
+0000636998 00000 n
+0000635069 00000 n
+0000637124 00000 n
+0001142390 00000 n
+0000638907 00000 n
+0000638716 00000 n
+0000637431 00000 n
+0000638842 00000 n
+0000640407 00000 n
+0000640216 00000 n
+0000639007 00000 n
+0000640342 00000 n
+0000642345 00000 n
+0000641767 00000 n
+0000640507 00000 n
+0000641893 00000 n
+0000642021 00000 n
+0000642150 00000 n
+0000642215 00000 n
+0000642280 00000 n
+0000645348 00000 n
+0000645157 00000 n
+0000642458 00000 n
+0000645283 00000 n
+0000649239 00000 n
+0000648860 00000 n
+0000645461 00000 n
+0000649174 00000 n
+0000649007 00000 n
+0000932068 00000 n
+0000655258 00000 n
+0000652568 00000 n
+0000649352 00000 n
+0000654935 00000 n
+0000655064 00000 n
+0000655193 00000 n
+0000652823 00000 n
+0000652985 00000 n
+0000653147 00000 n
+0000653309 00000 n
+0000653470 00000 n
+0000653632 00000 n
+0000653803 00000 n
+0000653965 00000 n
+0000654128 00000 n
+0000654289 00000 n
+0000654449 00000 n
+0000654612 00000 n
+0000654774 00000 n
+0001142515 00000 n
+0000660629 00000 n
+0000658542 00000 n
+0000655371 00000 n
+0000660564 00000 n
+0000658779 00000 n
+0000658934 00000 n
+0000659097 00000 n
+0000659257 00000 n
+0000659418 00000 n
+0000659586 00000 n
+0000659756 00000 n
+0000659918 00000 n
+0000660080 00000 n
+0000660242 00000 n
+0000660403 00000 n
+0000664892 00000 n
+0000663705 00000 n
+0000660756 00000 n
+0000664827 00000 n
+0000663897 00000 n
+0000664051 00000 n
+0000664214 00000 n
+0000664368 00000 n
+0000664522 00000 n
+0000664675 00000 n
+0000670869 00000 n
+0000668451 00000 n
+0000665019 00000 n
+0000670804 00000 n
+0000668706 00000 n
+0000668868 00000 n
+0000669030 00000 n
+0000669192 00000 n
+0000669354 00000 n
+0000669516 00000 n
+0000669678 00000 n
+0000669840 00000 n
+0000669994 00000 n
+0000670157 00000 n
+0000670312 00000 n
+0000670477 00000 n
+0000670643 00000 n
+0000675193 00000 n
+0000674526 00000 n
+0000670996 00000 n
+0000674999 00000 n
+0000674682 00000 n
+0000674836 00000 n
+0000678708 00000 n
+0000678388 00000 n
+0000675334 00000 n
+0000678514 00000 n
+0000678579 00000 n
+0000678643 00000 n
+0000682204 00000 n
+0000681628 00000 n
+0000678878 00000 n
+0000681754 00000 n
+0000681882 00000 n
+0000682139 00000 n
+0001142640 00000 n
+0000686447 00000 n
+0000685635 00000 n
+0000682374 00000 n
+0000686122 00000 n
+0000685791 00000 n
+0000685961 00000 n
+0000686187 00000 n
+0000686252 00000 n
+0000686317 00000 n
+0000686382 00000 n
+0000689716 00000 n
+0000689395 00000 n
+0000686547 00000 n
+0000689521 00000 n
+0000689586 00000 n
+0000689651 00000 n
+0000693628 00000 n
+0000693049 00000 n
+0000689830 00000 n
+0000693175 00000 n
+0000693304 00000 n
+0000693369 00000 n
+0000693434 00000 n
+0000693498 00000 n
+0000693563 00000 n
+0000697483 00000 n
+0000696774 00000 n
+0000693741 00000 n
+0000696900 00000 n
+0000697029 00000 n
+0000697094 00000 n
+0000697159 00000 n
+0000697288 00000 n
+0000697353 00000 n
+0000697418 00000 n
+0000701009 00000 n
+0000700172 00000 n
+0000697610 00000 n
+0000700298 00000 n
+0000700427 00000 n
+0000700492 00000 n
+0000700557 00000 n
+0000700686 00000 n
+0000700815 00000 n
+0000700944 00000 n
+0000704003 00000 n
+0000703426 00000 n
+0000701221 00000 n
+0000703552 00000 n
+0000703681 00000 n
+0000703810 00000 n
+0000703939 00000 n
+0001142765 00000 n
+0000708043 00000 n
+0000707594 00000 n
+0000704187 00000 n
+0000707720 00000 n
+0000707785 00000 n
+0000707850 00000 n
+0000711971 00000 n
+0000711211 00000 n
+0000708169 00000 n
+0000711518 00000 n
+0000711647 00000 n
+0000711712 00000 n
+0000711777 00000 n
+0000711358 00000 n
+0000715584 00000 n
+0000715005 00000 n
+0000712098 00000 n
+0000715131 00000 n
+0000715260 00000 n
+0000715389 00000 n
+0000715454 00000 n
+0000715519 00000 n
+0000719189 00000 n
+0000718361 00000 n
+0000715697 00000 n
+0000718673 00000 n
+0000718508 00000 n
+0000718802 00000 n
+0000718867 00000 n
+0000718932 00000 n
+0000719061 00000 n
+0000719125 00000 n
+0000932035 00000 n
+0000723334 00000 n
+0000722819 00000 n
+0000719302 00000 n
+0000722945 00000 n
+0000723010 00000 n
+0000723139 00000 n
+0000723204 00000 n
+0000723269 00000 n
+0000725624 00000 n
+0000725304 00000 n
+0000723461 00000 n
+0000725430 00000 n
+0000950841 00000 n
+0000943557 00000 n
+0000950661 00000 n
+0000725559 00000 n
+0001142890 00000 n
+0000726106 00000 n
+0000725915 00000 n
+0000725765 00000 n
+0000726041 00000 n
+0000727916 00000 n
+0000727467 00000 n
+0000726148 00000 n
+0000727593 00000 n
+0000727722 00000 n
+0000727851 00000 n
+0000732337 00000 n
+0000731394 00000 n
+0000728030 00000 n
+0000731757 00000 n
+0000943236 00000 n
+0000934023 00000 n
+0000943050 00000 n
+0000731541 00000 n
+0000731886 00000 n
+0000732014 00000 n
+0000732143 00000 n
+0000733695 00000 n
+0000733504 00000 n
+0000732577 00000 n
+0000733630 00000 n
+0000734135 00000 n
+0000733944 00000 n
+0000733794 00000 n
+0000734070 00000 n
+0000737449 00000 n
+0000736223 00000 n
+0000734177 00000 n
+0000736740 00000 n
+0000736869 00000 n
+0000736998 00000 n
+0000737127 00000 n
+0000737256 00000 n
+0000737385 00000 n
+0000736379 00000 n
+0000736551 00000 n
+0001143015 00000 n
+0000737904 00000 n
+0000737713 00000 n
+0000737563 00000 n
+0000737839 00000 n
+0000741149 00000 n
+0000740571 00000 n
+0000737946 00000 n
+0000740697 00000 n
+0000740826 00000 n
+0000740955 00000 n
+0000741084 00000 n
+0000745346 00000 n
+0000744127 00000 n
+0000741235 00000 n
+0000744637 00000 n
+0000744766 00000 n
+0000745024 00000 n
+0000744283 00000 n
+0000744462 00000 n
+0000745218 00000 n
+0000745282 00000 n
+0000752235 00000 n
+0000748407 00000 n
+0000745501 00000 n
+0000748533 00000 n
+0000748598 00000 n
+0000748663 00000 n
+0000748728 00000 n
+0000748793 00000 n
+0000748858 00000 n
+0000748923 00000 n
+0000748988 00000 n
+0000749053 00000 n
+0000749118 00000 n
+0000749248 00000 n
+0000749313 00000 n
+0000749378 00000 n
+0000749443 00000 n
+0000749508 00000 n
+0000749573 00000 n
+0000749638 00000 n
+0000749703 00000 n
+0000749768 00000 n
+0000749833 00000 n
+0000749898 00000 n
+0000749963 00000 n
+0000750028 00000 n
+0000750093 00000 n
+0000750158 00000 n
+0000750223 00000 n
+0000750288 00000 n
+0000750353 00000 n
+0000750418 00000 n
+0000750483 00000 n
+0000750548 00000 n
+0000750613 00000 n
+0000750678 00000 n
+0000750743 00000 n
+0000750807 00000 n
+0000750872 00000 n
+0000750937 00000 n
+0000751002 00000 n
+0000751067 00000 n
+0000751132 00000 n
+0000751197 00000 n
+0000751262 00000 n
+0000751327 00000 n
+0000751392 00000 n
+0000751457 00000 n
+0000751522 00000 n
+0000751587 00000 n
+0000751652 00000 n
+0000751717 00000 n
+0000751782 00000 n
+0000751847 00000 n
+0000751912 00000 n
+0000751977 00000 n
+0000752042 00000 n
+0000752107 00000 n
+0000752171 00000 n
+0000758882 00000 n
+0000755318 00000 n
+0000752348 00000 n
+0000755444 00000 n
+0000755509 00000 n
+0000755574 00000 n
+0000755639 00000 n
+0000755704 00000 n
+0000755769 00000 n
+0000755834 00000 n
+0000755899 00000 n
+0000755964 00000 n
+0000756029 00000 n
+0000756094 00000 n
+0000756159 00000 n
+0000756223 00000 n
+0000756288 00000 n
+0000756353 00000 n
+0000756418 00000 n
+0000756483 00000 n
+0000756548 00000 n
+0000756613 00000 n
+0000756678 00000 n
+0000756743 00000 n
+0000756808 00000 n
+0000756873 00000 n
+0000756938 00000 n
+0000757002 00000 n
+0000757067 00000 n
+0000757132 00000 n
+0000757197 00000 n
+0000757262 00000 n
+0000757327 00000 n
+0000757392 00000 n
+0000757457 00000 n
+0000757522 00000 n
+0000757587 00000 n
+0000757652 00000 n
+0000757717 00000 n
+0000757782 00000 n
+0000757847 00000 n
+0000757912 00000 n
+0000757977 00000 n
+0000758041 00000 n
+0000758105 00000 n
+0000758169 00000 n
+0000758234 00000 n
+0000758299 00000 n
+0000758364 00000 n
+0000758429 00000 n
+0000758494 00000 n
+0000758559 00000 n
+0000758624 00000 n
+0000758689 00000 n
+0000758754 00000 n
+0000758818 00000 n
+0000765056 00000 n
+0000761618 00000 n
+0000758995 00000 n
+0000761744 00000 n
+0000761809 00000 n
+0000761874 00000 n
+0000761939 00000 n
+0000762004 00000 n
+0000762069 00000 n
+0000762134 00000 n
+0000762199 00000 n
+0000762264 00000 n
+0000762329 00000 n
+0000762394 00000 n
+0000762459 00000 n
+0000762524 00000 n
+0000762589 00000 n
+0000762654 00000 n
+0000762719 00000 n
+0000762784 00000 n
+0000762849 00000 n
+0000762914 00000 n
+0000762979 00000 n
+0000763044 00000 n
+0000763109 00000 n
+0000763174 00000 n
+0000763239 00000 n
+0000763304 00000 n
+0000763369 00000 n
+0000763434 00000 n
+0000763499 00000 n
+0000763564 00000 n
+0000763629 00000 n
+0000763694 00000 n
+0000763759 00000 n
+0000763824 00000 n
+0000763889 00000 n
+0000763953 00000 n
+0000764018 00000 n
+0000764083 00000 n
+0000764148 00000 n
+0000764213 00000 n
+0000764278 00000 n
+0000764343 00000 n
+0000764408 00000 n
+0000764473 00000 n
+0000764538 00000 n
+0000764603 00000 n
+0000764668 00000 n
+0000764733 00000 n
+0000764798 00000 n
+0000764863 00000 n
+0000764928 00000 n
+0000764992 00000 n
+0001143140 00000 n
+0000770574 00000 n
+0000768178 00000 n
+0000765169 00000 n
+0000768304 00000 n
+0000768369 00000 n
+0000768434 00000 n
+0000768499 00000 n
+0000768564 00000 n
+0000768629 00000 n
+0000768694 00000 n
+0000768759 00000 n
+0000768824 00000 n
+0000768889 00000 n
+0000768954 00000 n
+0000769019 00000 n
+0000769084 00000 n
+0000769148 00000 n
+0000769213 00000 n
+0000769278 00000 n
+0000769343 00000 n
+0000769408 00000 n
+0000769473 00000 n
+0000769538 00000 n
+0000769603 00000 n
+0000769668 00000 n
+0000769733 00000 n
+0000769798 00000 n
+0000769863 00000 n
+0000769991 00000 n
+0000770120 00000 n
+0000770185 00000 n
+0000770250 00000 n
+0000770315 00000 n
+0000770380 00000 n
+0000770509 00000 n
+0000773782 00000 n
+0000773075 00000 n
+0000770700 00000 n
+0000773201 00000 n
+0000773330 00000 n
+0000773459 00000 n
+0000773588 00000 n
+0000773717 00000 n
+0000777273 00000 n
+0000776516 00000 n
+0000773908 00000 n
+0000776823 00000 n
+0000776952 00000 n
+0000776663 00000 n
+0000777080 00000 n
+0000777208 00000 n
+0000780515 00000 n
+0000779937 00000 n
+0000777399 00000 n
+0000780063 00000 n
+0000780192 00000 n
+0000780321 00000 n
+0000780450 00000 n
+0000783422 00000 n
+0000783102 00000 n
+0000780628 00000 n
+0000783228 00000 n
+0000783357 00000 n
+0000786011 00000 n
+0000785562 00000 n
+0000783591 00000 n
+0000785688 00000 n
+0000785817 00000 n
+0000785946 00000 n
+0001143265 00000 n
+0000786451 00000 n
+0000786260 00000 n
+0000786110 00000 n
+0000786386 00000 n
+0000789163 00000 n
+0000788519 00000 n
+0000786493 00000 n
+0000788645 00000 n
+0000788774 00000 n
0000788903 00000 n
-0000792935 00000 n
-0000793000 00000 n
-0000793065 00000 n
-0000796731 00000 n
-0000796476 00000 n
-0000793284 00000 n
-0000796602 00000 n
-0000796667 00000 n
-0000799952 00000 n
-0000799761 00000 n
-0000796872 00000 n
-0000799887 00000 n
-0000803578 00000 n
-0000803387 00000 n
-0000800079 00000 n
-0000803513 00000 n
-0001143020 00000 n
-0000806818 00000 n
-0000806112 00000 n
-0000803719 00000 n
-0000806238 00000 n
-0000806303 00000 n
-0000806368 00000 n
-0000806433 00000 n
-0000806498 00000 n
-0000806563 00000 n
-0000806690 00000 n
-0000806755 00000 n
-0000811373 00000 n
-0000811052 00000 n
-0000806959 00000 n
-0000811178 00000 n
-0000811243 00000 n
-0000811308 00000 n
-0000814622 00000 n
-0000813847 00000 n
-0000811500 00000 n
-0000813973 00000 n
-0000814038 00000 n
-0000814103 00000 n
-0000814168 00000 n
-0000814297 00000 n
-0000814362 00000 n
-0000814427 00000 n
-0000814492 00000 n
-0000814557 00000 n
-0000817800 00000 n
-0000817350 00000 n
-0000814763 00000 n
-0000817476 00000 n
-0000817541 00000 n
-0000817606 00000 n
-0000817671 00000 n
-0000817736 00000 n
-0000821030 00000 n
-0000820385 00000 n
-0000817955 00000 n
-0000820511 00000 n
-0000820576 00000 n
-0000820705 00000 n
-0000820770 00000 n
-0000820835 00000 n
-0000820900 00000 n
-0000820965 00000 n
-0000824503 00000 n
-0000824247 00000 n
-0000821171 00000 n
-0000824373 00000 n
-0000824438 00000 n
-0001143145 00000 n
-0000827540 00000 n
-0000826961 00000 n
-0000824630 00000 n
-0000827087 00000 n
-0000827152 00000 n
-0000827217 00000 n
-0000827282 00000 n
-0000827476 00000 n
-0000831109 00000 n
-0000830725 00000 n
-0000827694 00000 n
-0000830851 00000 n
-0000830916 00000 n
-0000830980 00000 n
-0000831044 00000 n
-0000834962 00000 n
-0000834771 00000 n
-0000831250 00000 n
-0000834897 00000 n
-0000838354 00000 n
-0000838098 00000 n
-0000835089 00000 n
-0000838224 00000 n
-0000838289 00000 n
-0000841436 00000 n
-0000840727 00000 n
-0000838481 00000 n
-0000840853 00000 n
-0000840918 00000 n
-0000840983 00000 n
-0000841048 00000 n
-0000841113 00000 n
-0000841242 00000 n
-0000841307 00000 n
-0000841372 00000 n
-0000844333 00000 n
-0000843558 00000 n
-0000841604 00000 n
-0000843684 00000 n
-0000843749 00000 n
-0000843814 00000 n
-0000843879 00000 n
-0000843944 00000 n
-0000844138 00000 n
-0000844203 00000 n
-0000844268 00000 n
-0001143270 00000 n
-0000847883 00000 n
-0000847562 00000 n
-0000844488 00000 n
-0000847688 00000 n
-0000847753 00000 n
-0000847818 00000 n
-0000851219 00000 n
-0000850574 00000 n
-0000848010 00000 n
-0000850700 00000 n
-0000850765 00000 n
-0000850830 00000 n
-0000850895 00000 n
-0000851024 00000 n
-0000851089 00000 n
-0000851154 00000 n
-0000854866 00000 n
-0000854545 00000 n
-0000851374 00000 n
-0000854671 00000 n
-0000854736 00000 n
-0000854801 00000 n
-0000858804 00000 n
-0000858613 00000 n
-0000855007 00000 n
-0000858739 00000 n
-0000862188 00000 n
-0000861997 00000 n
-0000858931 00000 n
-0000862123 00000 n
-0000865655 00000 n
-0000865399 00000 n
-0000862315 00000 n
-0000865525 00000 n
-0000865590 00000 n
-0001143395 00000 n
-0000868541 00000 n
-0000867831 00000 n
-0000865810 00000 n
-0000867957 00000 n
-0000868022 00000 n
-0000868087 00000 n
-0000868216 00000 n
-0000868281 00000 n
-0000868346 00000 n
-0000868411 00000 n
-0000868476 00000 n
-0000871392 00000 n
-0000870682 00000 n
-0000868696 00000 n
-0000870808 00000 n
-0000870873 00000 n
-0000870938 00000 n
-0000871003 00000 n
-0000871132 00000 n
-0000871197 00000 n
-0000871262 00000 n
-0000871327 00000 n
-0000874567 00000 n
-0000874311 00000 n
-0000871533 00000 n
-0000874437 00000 n
-0000874502 00000 n
-0000877609 00000 n
-0000877030 00000 n
-0000874694 00000 n
-0000877156 00000 n
-0000877221 00000 n
-0000877286 00000 n
-0000877351 00000 n
-0000877480 00000 n
-0000877545 00000 n
-0000881030 00000 n
-0000880644 00000 n
-0000877750 00000 n
-0000880770 00000 n
-0000880835 00000 n
-0000880900 00000 n
-0000880965 00000 n
-0000884128 00000 n
-0000883937 00000 n
-0000881171 00000 n
-0000884063 00000 n
-0001143520 00000 n
-0000886954 00000 n
-0000886246 00000 n
-0000884340 00000 n
-0000886372 00000 n
-0000886437 00000 n
-0000886501 00000 n
-0000886566 00000 n
-0000886631 00000 n
-0000886696 00000 n
-0000886825 00000 n
-0000886890 00000 n
-0000890169 00000 n
-0000889395 00000 n
-0000887138 00000 n
-0000889521 00000 n
-0000889586 00000 n
-0000889651 00000 n
-0000889716 00000 n
-0000889781 00000 n
-0000889909 00000 n
-0000889974 00000 n
-0000890039 00000 n
-0000890104 00000 n
-0000894642 00000 n
-0000894451 00000 n
-0000890310 00000 n
-0000894577 00000 n
-0000898295 00000 n
-0000898039 00000 n
-0000894769 00000 n
-0000898165 00000 n
-0000898230 00000 n
-0000901314 00000 n
-0000901058 00000 n
-0000898422 00000 n
-0000901184 00000 n
-0000901249 00000 n
-0000904556 00000 n
-0000903848 00000 n
-0000901441 00000 n
-0000903974 00000 n
-0000904039 00000 n
-0000904104 00000 n
-0000904169 00000 n
-0000904296 00000 n
-0000904361 00000 n
-0000904426 00000 n
-0000904491 00000 n
-0001143645 00000 n
-0000908087 00000 n
-0000907444 00000 n
-0000904724 00000 n
-0000907570 00000 n
-0000907635 00000 n
-0000907700 00000 n
-0000907765 00000 n
-0000907830 00000 n
-0000907958 00000 n
-0000908023 00000 n
-0000911656 00000 n
-0000911270 00000 n
-0000908256 00000 n
-0000911396 00000 n
-0000911461 00000 n
-0000911526 00000 n
-0000911591 00000 n
-0000914015 00000 n
-0000913630 00000 n
-0000911783 00000 n
-0000913756 00000 n
-0000913821 00000 n
-0000913886 00000 n
-0000913951 00000 n
-0000917699 00000 n
-0000917119 00000 n
-0000914170 00000 n
-0000917245 00000 n
-0000917374 00000 n
-0000917439 00000 n
-0000917504 00000 n
-0000917569 00000 n
-0000917634 00000 n
-0000920845 00000 n
-0000920137 00000 n
-0000917840 00000 n
-0000920263 00000 n
-0000920328 00000 n
-0000920393 00000 n
-0000920457 00000 n
-0000920585 00000 n
-0000920650 00000 n
-0000920715 00000 n
-0000920780 00000 n
-0000924277 00000 n
-0000923698 00000 n
-0000921014 00000 n
-0000923824 00000 n
-0000923889 00000 n
-0000923954 00000 n
-0000924019 00000 n
-0000924148 00000 n
-0000924213 00000 n
-0001143770 00000 n
-0000926691 00000 n
-0000925787 00000 n
-0000924432 00000 n
-0000925913 00000 n
-0000925978 00000 n
-0000926043 00000 n
-0000926108 00000 n
-0000926173 00000 n
-0000926302 00000 n
-0000926367 00000 n
-0000926432 00000 n
-0000926497 00000 n
-0000926562 00000 n
-0000926627 00000 n
-0000929662 00000 n
-0000928696 00000 n
-0000926846 00000 n
-0000928822 00000 n
-0000928887 00000 n
-0000929016 00000 n
-0000929080 00000 n
-0000929145 00000 n
-0000929210 00000 n
-0000929275 00000 n
-0000929340 00000 n
-0000929404 00000 n
-0000929533 00000 n
-0000929598 00000 n
-0000931520 00000 n
-0000931006 00000 n
-0000929803 00000 n
-0000931132 00000 n
-0000931197 00000 n
-0000931262 00000 n
-0000931327 00000 n
-0000931392 00000 n
-0000931456 00000 n
-0000931760 00000 n
-0000943104 00000 n
-0000950693 00000 n
-0000952993 00000 n
-0000952962 00000 n
-0000956681 00000 n
-0000966122 00000 n
-0000976857 00000 n
-0000988553 00000 n
-0001001659 00000 n
-0001020899 00000 n
-0001041795 00000 n
-0001063944 00000 n
-0001082130 00000 n
-0001084974 00000 n
-0001084744 00000 n
-0001112392 00000 n
-0001139658 00000 n
-0001143877 00000 n
-0001144002 00000 n
-0001144128 00000 n
-0001144254 00000 n
-0001144380 00000 n
-0001144506 00000 n
-0001144607 00000 n
-0001165009 00000 n
-0001188310 00000 n
-0001188351 00000 n
-0001188391 00000 n
-0001188525 00000 n
+0000788968 00000 n
+0000789033 00000 n
+0000789098 00000 n
+0000793503 00000 n
+0000793183 00000 n
+0000789277 00000 n
+0000793309 00000 n
+0000793374 00000 n
+0000793439 00000 n
+0000797105 00000 n
+0000796850 00000 n
+0000793658 00000 n
+0000796976 00000 n
+0000797041 00000 n
+0000800326 00000 n
+0000800135 00000 n
+0000797246 00000 n
+0000800261 00000 n
+0000803952 00000 n
+0000803761 00000 n
+0000800453 00000 n
+0000803887 00000 n
+0001143390 00000 n
+0000807192 00000 n
+0000806486 00000 n
+0000804093 00000 n
+0000806612 00000 n
+0000806677 00000 n
+0000806742 00000 n
+0000806807 00000 n
+0000806872 00000 n
+0000806937 00000 n
+0000807064 00000 n
+0000807129 00000 n
+0000811747 00000 n
+0000811426 00000 n
+0000807333 00000 n
+0000811552 00000 n
+0000811617 00000 n
+0000811682 00000 n
+0000814996 00000 n
+0000814221 00000 n
+0000811874 00000 n
+0000814347 00000 n
+0000814412 00000 n
+0000814477 00000 n
+0000814542 00000 n
+0000814671 00000 n
+0000814736 00000 n
+0000814801 00000 n
+0000814866 00000 n
+0000814931 00000 n
+0000818174 00000 n
+0000817724 00000 n
+0000815137 00000 n
+0000817850 00000 n
+0000817915 00000 n
+0000817980 00000 n
+0000818045 00000 n
+0000818110 00000 n
+0000821404 00000 n
+0000820759 00000 n
+0000818329 00000 n
+0000820885 00000 n
+0000820950 00000 n
+0000821079 00000 n
+0000821144 00000 n
+0000821209 00000 n
+0000821274 00000 n
+0000821339 00000 n
+0000824877 00000 n
+0000824621 00000 n
+0000821545 00000 n
+0000824747 00000 n
+0000824812 00000 n
+0001143515 00000 n
+0000827914 00000 n
+0000827335 00000 n
+0000825004 00000 n
+0000827461 00000 n
+0000827526 00000 n
+0000827591 00000 n
+0000827656 00000 n
+0000827850 00000 n
+0000831483 00000 n
+0000831099 00000 n
+0000828068 00000 n
+0000831225 00000 n
+0000831290 00000 n
+0000831354 00000 n
+0000831418 00000 n
+0000835336 00000 n
+0000835145 00000 n
+0000831624 00000 n
+0000835271 00000 n
+0000838728 00000 n
+0000838472 00000 n
+0000835463 00000 n
+0000838598 00000 n
+0000838663 00000 n
+0000841810 00000 n
+0000841101 00000 n
+0000838855 00000 n
+0000841227 00000 n
+0000841292 00000 n
+0000841357 00000 n
+0000841422 00000 n
+0000841487 00000 n
+0000841616 00000 n
+0000841681 00000 n
+0000841746 00000 n
+0000844707 00000 n
+0000843932 00000 n
+0000841978 00000 n
+0000844058 00000 n
+0000844123 00000 n
+0000844188 00000 n
+0000844253 00000 n
+0000844318 00000 n
+0000844512 00000 n
+0000844577 00000 n
+0000844642 00000 n
+0001143640 00000 n
+0000848257 00000 n
+0000847936 00000 n
+0000844862 00000 n
+0000848062 00000 n
+0000848127 00000 n
+0000848192 00000 n
+0000851593 00000 n
+0000850948 00000 n
+0000848384 00000 n
+0000851074 00000 n
+0000851139 00000 n
+0000851204 00000 n
+0000851269 00000 n
+0000851398 00000 n
+0000851463 00000 n
+0000851528 00000 n
+0000855240 00000 n
+0000854919 00000 n
+0000851748 00000 n
+0000855045 00000 n
+0000855110 00000 n
+0000855175 00000 n
+0000859178 00000 n
+0000858987 00000 n
+0000855381 00000 n
+0000859113 00000 n
+0000862562 00000 n
+0000862371 00000 n
+0000859305 00000 n
+0000862497 00000 n
+0000866029 00000 n
+0000865773 00000 n
+0000862689 00000 n
+0000865899 00000 n
+0000865964 00000 n
+0001143765 00000 n
+0000868915 00000 n
+0000868205 00000 n
+0000866184 00000 n
+0000868331 00000 n
+0000868396 00000 n
+0000868461 00000 n
+0000868590 00000 n
+0000868655 00000 n
+0000868720 00000 n
+0000868785 00000 n
+0000868850 00000 n
+0000871766 00000 n
+0000871056 00000 n
+0000869070 00000 n
+0000871182 00000 n
+0000871247 00000 n
+0000871312 00000 n
+0000871377 00000 n
+0000871506 00000 n
+0000871571 00000 n
+0000871636 00000 n
+0000871701 00000 n
+0000874941 00000 n
+0000874685 00000 n
+0000871907 00000 n
+0000874811 00000 n
+0000874876 00000 n
+0000877983 00000 n
+0000877404 00000 n
+0000875068 00000 n
+0000877530 00000 n
+0000877595 00000 n
+0000877660 00000 n
+0000877725 00000 n
+0000877854 00000 n
+0000877919 00000 n
+0000881404 00000 n
+0000881018 00000 n
+0000878124 00000 n
+0000881144 00000 n
+0000881209 00000 n
+0000881274 00000 n
+0000881339 00000 n
+0000884502 00000 n
+0000884311 00000 n
+0000881545 00000 n
+0000884437 00000 n
+0001143890 00000 n
+0000887328 00000 n
+0000886620 00000 n
+0000884714 00000 n
+0000886746 00000 n
+0000886811 00000 n
+0000886875 00000 n
+0000886940 00000 n
+0000887005 00000 n
+0000887070 00000 n
+0000887199 00000 n
+0000887264 00000 n
+0000890543 00000 n
+0000889769 00000 n
+0000887512 00000 n
+0000889895 00000 n
+0000889960 00000 n
+0000890025 00000 n
+0000890090 00000 n
+0000890155 00000 n
+0000890283 00000 n
+0000890348 00000 n
+0000890413 00000 n
+0000890478 00000 n
+0000895016 00000 n
+0000894825 00000 n
+0000890684 00000 n
+0000894951 00000 n
+0000898669 00000 n
+0000898413 00000 n
+0000895143 00000 n
+0000898539 00000 n
+0000898604 00000 n
+0000901688 00000 n
+0000901432 00000 n
+0000898796 00000 n
+0000901558 00000 n
+0000901623 00000 n
+0000904930 00000 n
+0000904222 00000 n
+0000901815 00000 n
+0000904348 00000 n
+0000904413 00000 n
+0000904478 00000 n
+0000904543 00000 n
+0000904670 00000 n
+0000904735 00000 n
+0000904800 00000 n
+0000904865 00000 n
+0001144015 00000 n
+0000908461 00000 n
+0000907818 00000 n
+0000905098 00000 n
+0000907944 00000 n
+0000908009 00000 n
+0000908074 00000 n
+0000908139 00000 n
+0000908204 00000 n
+0000908332 00000 n
+0000908397 00000 n
+0000912030 00000 n
+0000911644 00000 n
+0000908630 00000 n
+0000911770 00000 n
+0000911835 00000 n
+0000911900 00000 n
+0000911965 00000 n
+0000914389 00000 n
+0000914004 00000 n
+0000912157 00000 n
+0000914130 00000 n
+0000914195 00000 n
+0000914260 00000 n
+0000914325 00000 n
+0000918073 00000 n
+0000917493 00000 n
+0000914544 00000 n
+0000917619 00000 n
+0000917748 00000 n
+0000917813 00000 n
+0000917878 00000 n
+0000917943 00000 n
+0000918008 00000 n
+0000921219 00000 n
+0000920511 00000 n
+0000918214 00000 n
+0000920637 00000 n
+0000920702 00000 n
+0000920767 00000 n
+0000920831 00000 n
+0000920959 00000 n
+0000921024 00000 n
+0000921089 00000 n
+0000921154 00000 n
+0000924651 00000 n
+0000924072 00000 n
+0000921388 00000 n
+0000924198 00000 n
+0000924263 00000 n
+0000924328 00000 n
+0000924393 00000 n
+0000924522 00000 n
+0000924587 00000 n
+0001144140 00000 n
+0000927065 00000 n
+0000926161 00000 n
+0000924806 00000 n
+0000926287 00000 n
+0000926352 00000 n
+0000926417 00000 n
+0000926482 00000 n
+0000926547 00000 n
+0000926676 00000 n
+0000926741 00000 n
+0000926806 00000 n
+0000926871 00000 n
+0000926936 00000 n
+0000927001 00000 n
+0000930036 00000 n
+0000929070 00000 n
+0000927220 00000 n
+0000929196 00000 n
+0000929261 00000 n
+0000929390 00000 n
+0000929454 00000 n
+0000929519 00000 n
+0000929584 00000 n
+0000929649 00000 n
+0000929714 00000 n
+0000929778 00000 n
+0000929907 00000 n
+0000929972 00000 n
+0000931894 00000 n
+0000931380 00000 n
+0000930177 00000 n
+0000931506 00000 n
+0000931571 00000 n
+0000931636 00000 n
+0000931701 00000 n
+0000931766 00000 n
+0000931830 00000 n
+0000932134 00000 n
+0000943478 00000 n
+0000951067 00000 n
+0000953367 00000 n
+0000953336 00000 n
+0000957053 00000 n
+0000966493 00000 n
+0000977228 00000 n
+0000988923 00000 n
+0001002029 00000 n
+0001021269 00000 n
+0001042165 00000 n
+0001064313 00000 n
+0001082499 00000 n
+0001085344 00000 n
+0001085114 00000 n
+0001112762 00000 n
+0001140028 00000 n
+0001144247 00000 n
+0001144372 00000 n
+0001144498 00000 n
+0001144624 00000 n
+0001144750 00000 n
+0001144876 00000 n
+0001144977 00000 n
+0001165379 00000 n
+0001188680 00000 n
+0001188721 00000 n
+0001188761 00000 n
+0001188895 00000 n
trailer
<<
/Size 2644
/Root 2642 0 R
/Info 2643 0 R
-/ID [<C5EA3FFE058B8B601F39B7B0A6D277FD> <C5EA3FFE058B8B601F39B7B0A6D277FD>]
+/ID [<358F8FB8DA599FF9D4C54D540F98C9D7> <358F8FB8DA599FF9D4C54D540F98C9D7>]
>>
startxref
-1188783
+1189153
%%EOF
diff --git a/doc/arm/man.arpaname.html b/doc/arm/man.arpaname.html
index da97a03e..f37d7693 100644
--- a/doc/arm/man.arpaname.html
+++ b/doc/arm/man.arpaname.html
@@ -14,7 +14,7 @@
- OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- PERFORMANCE OF THIS SOFTWARE.
-->
-<!-- $Id: man.arpaname.html,v 1.51 2011-08-04 01:14:42 tbox Exp $ -->
+<!-- $Id: man.arpaname.html,v 1.53 2011-09-07 01:14:43 tbox Exp $ -->
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
@@ -50,20 +50,20 @@
<div class="cmdsynopsis"><p><code class="command">arpaname</code> {<em class="replaceable"><code>ipaddress </code></em>...}</p></div>
</div>
<div class="refsect1" lang="en">
-<a name="id2612726"></a><h2>DESCRIPTION</h2>
+<a name="id2616715"></a><h2>DESCRIPTION</h2>
<p>
<span><strong class="command">arpaname</strong></span> translates IP addresses (IPv4 and
IPv6) to the corresponding IN-ADDR.ARPA or IP6.ARPA names.
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2612741"></a><h2>SEE ALSO</h2>
+<a name="id2618573"></a><h2>SEE ALSO</h2>
<p>
<em class="citetitle">BIND 9 Administrator Reference Manual</em>.
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2612755"></a><h2>AUTHOR</h2>
+<a name="id2618587"></a><h2>AUTHOR</h2>
<p><span class="corpauthor">Internet Systems Consortium</span>
</p>
</div>
diff --git a/doc/arm/man.ddns-confgen.html b/doc/arm/man.ddns-confgen.html
index 5d81920e..3f6dcd19 100644
--- a/doc/arm/man.ddns-confgen.html
+++ b/doc/arm/man.ddns-confgen.html
@@ -14,7 +14,7 @@
- OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- PERFORMANCE OF THIS SOFTWARE.
-->
-<!-- $Id: man.ddns-confgen.html,v 1.87 2011-08-04 01:14:42 tbox Exp $ -->
+<!-- $Id: man.ddns-confgen.html,v 1.89 2011-09-07 01:14:42 tbox Exp $ -->
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
@@ -50,7 +50,7 @@
<div class="cmdsynopsis"><p><code class="command">ddns-confgen</code> [<code class="option">-a <em class="replaceable"><code>algorithm</code></em></code>] [<code class="option">-h</code>] [<code class="option">-k <em class="replaceable"><code>keyname</code></em></code>] [<code class="option">-r <em class="replaceable"><code>randomfile</code></em></code>] [ -s <em class="replaceable"><code>name</code></em> | -z <em class="replaceable"><code>zone</code></em> ] [<code class="option">-q</code>] [name]</p></div>
</div>
<div class="refsect1" lang="en">
-<a name="id2647224"></a><h2>DESCRIPTION</h2>
+<a name="id2641793"></a><h2>DESCRIPTION</h2>
<p><span><strong class="command">ddns-confgen</strong></span>
generates a key for use by <span><strong class="command">nsupdate</strong></span>
and <span><strong class="command">named</strong></span>. It simplifies configuration
@@ -77,7 +77,7 @@
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2647312"></a><h2>OPTIONS</h2>
+<a name="id2641880"></a><h2>OPTIONS</h2>
<div class="variablelist"><dl>
<dt><span class="term">-a <em class="replaceable"><code>algorithm</code></em></span></dt>
<dd><p>
@@ -144,7 +144,7 @@
</dl></div>
</div>
<div class="refsect1" lang="en">
-<a name="id2648058"></a><h2>SEE ALSO</h2>
+<a name="id2642081"></a><h2>SEE ALSO</h2>
<p><span class="citerefentry"><span class="refentrytitle">nsupdate</span>(1)</span>,
<span class="citerefentry"><span class="refentrytitle">named.conf</span>(5)</span>,
<span class="citerefentry"><span class="refentrytitle">named</span>(8)</span>,
@@ -152,7 +152,7 @@
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2648097"></a><h2>AUTHOR</h2>
+<a name="id2642119"></a><h2>AUTHOR</h2>
<p><span class="corpauthor">Internet Systems Consortium</span>
</p>
</div>
diff --git a/doc/arm/man.dig.html b/doc/arm/man.dig.html
index 2cd811b2..5d8a4c77 100644
--- a/doc/arm/man.dig.html
+++ b/doc/arm/man.dig.html
@@ -14,7 +14,7 @@
- OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- PERFORMANCE OF THIS SOFTWARE.
-->
-<!-- $Id: man.dig.html,v 1.177 2011-08-04 01:14:42 tbox Exp $ -->
+<!-- $Id: man.dig.html,v 1.179 2011-09-07 01:14:43 tbox Exp $ -->
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
@@ -52,7 +52,7 @@
<div class="cmdsynopsis"><p><code class="command">dig</code> [global-queryopt...] [query...]</p></div>
</div>
<div class="refsect1" lang="en">
-<a name="id2610137"></a><h2>DESCRIPTION</h2>
+<a name="id2609006"></a><h2>DESCRIPTION</h2>
<p><span><strong class="command">dig</strong></span>
(domain information groper) is a flexible tool
for interrogating DNS name servers. It performs DNS lookups and
@@ -98,7 +98,7 @@
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2610232"></a><h2>SIMPLE USAGE</h2>
+<a name="id2609784"></a><h2>SIMPLE USAGE</h2>
<p>
A typical invocation of <span><strong class="command">dig</strong></span> looks like:
</p>
@@ -144,7 +144,7 @@
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2610480"></a><h2>OPTIONS</h2>
+<a name="id2610100"></a><h2>OPTIONS</h2>
<p>
The <code class="option">-b</code> option sets the source IP address of the query
to <em class="parameter"><code>address</code></em>. This must be a valid
@@ -248,7 +248,7 @@
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2662227"></a><h2>QUERY OPTIONS</h2>
+<a name="id2662257"></a><h2>QUERY OPTIONS</h2>
<p><span><strong class="command">dig</strong></span>
provides a number of query options which affect
the way in which lookups are made and the results displayed. Some of
@@ -596,7 +596,7 @@
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2663291"></a><h2>MULTIPLE QUERIES</h2>
+<a name="id2663389"></a><h2>MULTIPLE QUERIES</h2>
<p>
The BIND 9 implementation of <span><strong class="command">dig </strong></span>
supports
@@ -642,7 +642,7 @@ dig +qr www.isc.org any -x 127.0.0.1 isc.org ns +noqr
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2663377"></a><h2>IDN SUPPORT</h2>
+<a name="id2663475"></a><h2>IDN SUPPORT</h2>
<p>
If <span><strong class="command">dig</strong></span> has been built with IDN (internationalized
domain name) support, it can accept and display non-ASCII domain names.
@@ -656,14 +656,14 @@ dig +qr www.isc.org any -x 127.0.0.1 isc.org ns +noqr
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2663405"></a><h2>FILES</h2>
+<a name="id2663504"></a><h2>FILES</h2>
<p><code class="filename">/etc/resolv.conf</code>
</p>
<p><code class="filename">${HOME}/.digrc</code>
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2663427"></a><h2>SEE ALSO</h2>
+<a name="id2663525"></a><h2>SEE ALSO</h2>
<p><span class="citerefentry"><span class="refentrytitle">host</span>(1)</span>,
<span class="citerefentry"><span class="refentrytitle">named</span>(8)</span>,
<span class="citerefentry"><span class="refentrytitle">dnssec-keygen</span>(8)</span>,
@@ -671,7 +671,7 @@ dig +qr www.isc.org any -x 127.0.0.1 isc.org ns +noqr
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2663464"></a><h2>BUGS</h2>
+<a name="id2663562"></a><h2>BUGS</h2>
<p>
There are probably too many query options.
</p>
diff --git a/doc/arm/man.dnssec-dsfromkey.html b/doc/arm/man.dnssec-dsfromkey.html
index 4bad3a95..4afb9cce 100644
--- a/doc/arm/man.dnssec-dsfromkey.html
+++ b/doc/arm/man.dnssec-dsfromkey.html
@@ -14,7 +14,7 @@
- OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- PERFORMANCE OF THIS SOFTWARE.
-->
-<!-- $Id: man.dnssec-dsfromkey.html,v 1.90 2011-08-04 01:14:42 tbox Exp $ -->
+<!-- $Id: man.dnssec-dsfromkey.html,v 1.92 2011-09-07 01:14:42 tbox Exp $ -->
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
@@ -51,14 +51,14 @@
<div class="cmdsynopsis"><p><code class="command">dnssec-dsfromkey</code> {-s} [<code class="option">-1</code>] [<code class="option">-2</code>] [<code class="option">-a <em class="replaceable"><code>alg</code></em></code>] [<code class="option">-K <em class="replaceable"><code>directory</code></em></code>] [<code class="option">-l <em class="replaceable"><code>domain</code></em></code>] [<code class="option">-s</code>] [<code class="option">-c <em class="replaceable"><code>class</code></em></code>] [<code class="option">-f <em class="replaceable"><code>file</code></em></code>] [<code class="option">-A</code>] [<code class="option">-v <em class="replaceable"><code>level</code></em></code>] {dnsname}</p></div>
</div>
<div class="refsect1" lang="en">
-<a name="id2612491"></a><h2>DESCRIPTION</h2>
+<a name="id2611361"></a><h2>DESCRIPTION</h2>
<p><span><strong class="command">dnssec-dsfromkey</strong></span>
outputs the Delegation Signer (DS) resource record (RR), as defined in
RFC 3658 and RFC 4509, for the given key(s).
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2612505"></a><h2>OPTIONS</h2>
+<a name="id2611374"></a><h2>OPTIONS</h2>
<div class="variablelist"><dl>
<dt><span class="term">-1</span></dt>
<dd><p>
@@ -130,7 +130,7 @@
</dl></div>
</div>
<div class="refsect1" lang="en">
-<a name="id2613473"></a><h2>EXAMPLE</h2>
+<a name="id2612137"></a><h2>EXAMPLE</h2>
<p>
To build the SHA-256 DS RR from the
<strong class="userinput"><code>Kexample.com.+003+26160</code></strong>
@@ -145,7 +145,7 @@
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2613509"></a><h2>FILES</h2>
+<a name="id2612310"></a><h2>FILES</h2>
<p>
The keyfile can be designed by the key identification
<code class="filename">Knnnn.+aaa+iiiii</code> or the full file name
@@ -159,13 +159,13 @@
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2613550"></a><h2>CAVEAT</h2>
+<a name="id2612352"></a><h2>CAVEAT</h2>
<p>
A keyfile error can give a "file not found" even if the file exists.
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2613560"></a><h2>SEE ALSO</h2>
+<a name="id2612361"></a><h2>SEE ALSO</h2>
<p><span class="citerefentry"><span class="refentrytitle">dnssec-keygen</span>(8)</span>,
<span class="citerefentry"><span class="refentrytitle">dnssec-signzone</span>(8)</span>,
<em class="citetitle">BIND 9 Administrator Reference Manual</em>,
@@ -175,7 +175,7 @@
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2613600"></a><h2>AUTHOR</h2>
+<a name="id2612401"></a><h2>AUTHOR</h2>
<p><span class="corpauthor">Internet Systems Consortium</span>
</p>
</div>
diff --git a/doc/arm/man.dnssec-keyfromlabel.html b/doc/arm/man.dnssec-keyfromlabel.html
index 5dd84889..67422c78 100644
--- a/doc/arm/man.dnssec-keyfromlabel.html
+++ b/doc/arm/man.dnssec-keyfromlabel.html
@@ -14,7 +14,7 @@
- OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- PERFORMANCE OF THIS SOFTWARE.
-->
-<!-- $Id: man.dnssec-keyfromlabel.html,v 1.127 2011-08-04 01:14:42 tbox Exp $ -->
+<!-- $Id: man.dnssec-keyfromlabel.html,v 1.129 2011-09-07 01:14:42 tbox Exp $ -->
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
@@ -50,7 +50,7 @@
<div class="cmdsynopsis"><p><code class="command">dnssec-keyfromlabel</code> {-l <em class="replaceable"><code>label</code></em>} [<code class="option">-3</code>] [<code class="option">-a <em class="replaceable"><code>algorithm</code></em></code>] [<code class="option">-A <em class="replaceable"><code>date/offset</code></em></code>] [<code class="option">-c <em class="replaceable"><code>class</code></em></code>] [<code class="option">-D <em class="replaceable"><code>date/offset</code></em></code>] [<code class="option">-E <em class="replaceable"><code>engine</code></em></code>] [<code class="option">-f <em class="replaceable"><code>flag</code></em></code>] [<code class="option">-G</code>] [<code class="option">-I <em class="replaceable"><code>date/offset</code></em></code>] [<code class="option">-k</code>] [<code class="option">-K <em class="replaceable"><code>directory</code></em></code>] [<code class="option">-L <em class="replaceable"><code>ttl</code></em></code>] [<code class="option">-n <em class="replaceable"><code>nametype</code></em></code>] [<code class="option">-P <em class="replaceable"><code>date/offset</code></em></code>] [<code class="option">-p <em class="replaceable"><code>protocol</code></em></code>] [<code class="option">-R <em class="replaceable"><code>date/offset</code></em></code>] [<code class="option">-t <em class="replaceable"><code>type</code></em></code>] [<code class="option">-v <em class="replaceable"><code>level</code></em></code>] [<code class="option">-y</code>] {name}</p></div>
</div>
<div class="refsect1" lang="en">
-<a name="id2613929"></a><h2>DESCRIPTION</h2>
+<a name="id2613003"></a><h2>DESCRIPTION</h2>
<p><span><strong class="command">dnssec-keyfromlabel</strong></span>
gets keys with the given label from a crypto hardware and builds
key files for DNSSEC (Secure DNS), as defined in RFC 2535
@@ -63,7 +63,7 @@
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2613949"></a><h2>OPTIONS</h2>
+<a name="id2613024"></a><h2>OPTIONS</h2>
<div class="variablelist"><dl>
<dt><span class="term">-a <em class="replaceable"><code>algorithm</code></em></span></dt>
<dd>
@@ -191,7 +191,7 @@
</dl></div>
</div>
<div class="refsect1" lang="en">
-<a name="id2615642"></a><h2>TIMING OPTIONS</h2>
+<a name="id2614853"></a><h2>TIMING OPTIONS</h2>
<p>
Dates can be expressed in the format YYYYMMDD or YYYYMMDDHHMMSS.
If the argument begins with a '+' or '-', it is interpreted as
@@ -238,7 +238,7 @@
</dl></div>
</div>
<div class="refsect1" lang="en">
-<a name="id2654243"></a><h2>GENERATED KEY FILES</h2>
+<a name="id2615224"></a><h2>GENERATED KEY FILES</h2>
<p>
When <span><strong class="command">dnssec-keyfromlabel</strong></span> completes
successfully,
@@ -277,7 +277,7 @@
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2654337"></a><h2>SEE ALSO</h2>
+<a name="id2654230"></a><h2>SEE ALSO</h2>
<p><span class="citerefentry"><span class="refentrytitle">dnssec-keygen</span>(8)</span>,
<span class="citerefentry"><span class="refentrytitle">dnssec-signzone</span>(8)</span>,
<em class="citetitle">BIND 9 Administrator Reference Manual</em>,
@@ -285,7 +285,7 @@
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2666316"></a><h2>AUTHOR</h2>
+<a name="id2654263"></a><h2>AUTHOR</h2>
<p><span class="corpauthor">Internet Systems Consortium</span>
</p>
</div>
diff --git a/doc/arm/man.dnssec-keygen.html b/doc/arm/man.dnssec-keygen.html
index f1d0ddf2..3ff9a41f 100644
--- a/doc/arm/man.dnssec-keygen.html
+++ b/doc/arm/man.dnssec-keygen.html
@@ -14,7 +14,7 @@
- OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- PERFORMANCE OF THIS SOFTWARE.
-->
-<!-- $Id: man.dnssec-keygen.html,v 1.196 2011-08-04 01:14:42 tbox Exp $ -->
+<!-- $Id: man.dnssec-keygen.html,v 1.198 2011-09-07 01:14:43 tbox Exp $ -->
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
@@ -50,7 +50,7 @@
<div class="cmdsynopsis"><p><code class="command">dnssec-keygen</code> [<code class="option">-a <em class="replaceable"><code>algorithm</code></em></code>] [<code class="option">-b <em class="replaceable"><code>keysize</code></em></code>] [<code class="option">-n <em class="replaceable"><code>nametype</code></em></code>] [<code class="option">-3</code>] [<code class="option">-A <em class="replaceable"><code>date/offset</code></em></code>] [<code class="option">-C</code>] [<code class="option">-c <em class="replaceable"><code>class</code></em></code>] [<code class="option">-D <em class="replaceable"><code>date/offset</code></em></code>] [<code class="option">-E <em class="replaceable"><code>engine</code></em></code>] [<code class="option">-e</code>] [<code class="option">-f <em class="replaceable"><code>flag</code></em></code>] [<code class="option">-G</code>] [<code class="option">-g <em class="replaceable"><code>generator</code></em></code>] [<code class="option">-h</code>] [<code class="option">-I <em class="replaceable"><code>date/offset</code></em></code>] [<code class="option">-i <em class="replaceable"><code>interval</code></em></code>] [<code class="option">-K <em class="replaceable"><code>directory</code></em></code>] [<code class="option">-L <em class="replaceable"><code>ttl</code></em></code>] [<code class="option">-k</code>] [<code class="option">-P <em class="replaceable"><code>date/offset</code></em></code>] [<code class="option">-p <em class="replaceable"><code>protocol</code></em></code>] [<code class="option">-q</code>] [<code class="option">-R <em class="replaceable"><code>date/offset</code></em></code>] [<code class="option">-r <em class="replaceable"><code>randomdev</code></em></code>] [<code class="option">-S <em class="replaceable"><code>key</code></em></code>] [<code class="option">-s <em class="replaceable"><code>strength</code></em></code>] [<code class="option">-t <em class="replaceable"><code>type</code></em></code>] [<code class="option">-v <em class="replaceable"><code>level</code></em></code>] [<code class="option">-z</code>] {name}</p></div>
</div>
<div class="refsect1" lang="en">
-<a name="id2614997"></a><h2>DESCRIPTION</h2>
+<a name="id2614003"></a><h2>DESCRIPTION</h2>
<p><span><strong class="command">dnssec-keygen</strong></span>
generates keys for DNSSEC (Secure DNS), as defined in RFC 2535
and RFC 4034. It can also generate keys for use with
@@ -64,7 +64,7 @@
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2615017"></a><h2>OPTIONS</h2>
+<a name="id2614023"></a><h2>OPTIONS</h2>
<div class="variablelist"><dl>
<dt><span class="term">-a <em class="replaceable"><code>algorithm</code></em></span></dt>
<dd>
@@ -275,7 +275,7 @@
</dl></div>
</div>
<div class="refsect1" lang="en">
-<a name="id2668262"></a><h2>TIMING OPTIONS</h2>
+<a name="id2668292"></a><h2>TIMING OPTIONS</h2>
<p>
Dates can be expressed in the format YYYYMMDD or YYYYMMDDHHMMSS.
If the argument begins with a '+' or '-', it is interpreted as
@@ -346,7 +346,7 @@
</dl></div>
</div>
<div class="refsect1" lang="en">
-<a name="id2668452"></a><h2>GENERATED KEYS</h2>
+<a name="id2668550"></a><h2>GENERATED KEYS</h2>
<p>
When <span><strong class="command">dnssec-keygen</strong></span> completes
successfully,
@@ -392,7 +392,7 @@
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2668696"></a><h2>EXAMPLE</h2>
+<a name="id2668726"></a><h2>EXAMPLE</h2>
<p>
To generate a 768-bit DSA key for the domain
<strong class="userinput"><code>example.com</code></strong>, the following command would be
@@ -413,7 +413,7 @@
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2668753"></a><h2>SEE ALSO</h2>
+<a name="id2668782"></a><h2>SEE ALSO</h2>
<p><span class="citerefentry"><span class="refentrytitle">dnssec-signzone</span>(8)</span>,
<em class="citetitle">BIND 9 Administrator Reference Manual</em>,
<em class="citetitle">RFC 2539</em>,
@@ -422,7 +422,7 @@
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2668784"></a><h2>AUTHOR</h2>
+<a name="id2668813"></a><h2>AUTHOR</h2>
<p><span class="corpauthor">Internet Systems Consortium</span>
</p>
</div>
diff --git a/doc/arm/man.dnssec-revoke.html b/doc/arm/man.dnssec-revoke.html
index 6007ebdf..cdb5ca2d 100644
--- a/doc/arm/man.dnssec-revoke.html
+++ b/doc/arm/man.dnssec-revoke.html
@@ -14,7 +14,7 @@
- OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- PERFORMANCE OF THIS SOFTWARE.
-->
-<!-- $Id: man.dnssec-revoke.html,v 1.79 2011-08-04 01:14:43 tbox Exp $ -->
+<!-- $Id: man.dnssec-revoke.html,v 1.81 2011-09-07 01:14:43 tbox Exp $ -->
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
@@ -50,7 +50,7 @@
<div class="cmdsynopsis"><p><code class="command">dnssec-revoke</code> [<code class="option">-hr</code>] [<code class="option">-v <em class="replaceable"><code>level</code></em></code>] [<code class="option">-K <em class="replaceable"><code>directory</code></em></code>] [<code class="option">-E <em class="replaceable"><code>engine</code></em></code>] [<code class="option">-f</code>] {keyfile}</p></div>
</div>
<div class="refsect1" lang="en">
-<a name="id2615862"></a><h2>DESCRIPTION</h2>
+<a name="id2614390"></a><h2>DESCRIPTION</h2>
<p><span><strong class="command">dnssec-revoke</strong></span>
reads a DNSSEC key file, sets the REVOKED bit on the key as defined
in RFC 5011, and creates a new pair of key files containing the
@@ -58,7 +58,7 @@
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2615876"></a><h2>OPTIONS</h2>
+<a name="id2614404"></a><h2>OPTIONS</h2>
<div class="variablelist"><dl>
<dt><span class="term">-h</span></dt>
<dd><p>
@@ -91,14 +91,14 @@
</dl></div>
</div>
<div class="refsect1" lang="en">
-<a name="id2615984"></a><h2>SEE ALSO</h2>
+<a name="id2614512"></a><h2>SEE ALSO</h2>
<p><span class="citerefentry"><span class="refentrytitle">dnssec-keygen</span>(8)</span>,
<em class="citetitle">BIND 9 Administrator Reference Manual</em>,
<em class="citetitle">RFC 5011</em>.
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2616008"></a><h2>AUTHOR</h2>
+<a name="id2614536"></a><h2>AUTHOR</h2>
<p><span class="corpauthor">Internet Systems Consortium</span>
</p>
</div>
diff --git a/doc/arm/man.dnssec-settime.html b/doc/arm/man.dnssec-settime.html
index 555b2683..99c49305 100644
--- a/doc/arm/man.dnssec-settime.html
+++ b/doc/arm/man.dnssec-settime.html
@@ -14,7 +14,7 @@
- OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- PERFORMANCE OF THIS SOFTWARE.
-->
-<!-- $Id: man.dnssec-settime.html,v 1.75 2011-08-04 01:14:42 tbox Exp $ -->
+<!-- $Id: man.dnssec-settime.html,v 1.77 2011-09-07 01:14:43 tbox Exp $ -->
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
@@ -50,7 +50,7 @@
<div class="cmdsynopsis"><p><code class="command">dnssec-settime</code> [<code class="option">-f</code>] [<code class="option">-K <em class="replaceable"><code>directory</code></em></code>] [<code class="option">-L <em class="replaceable"><code>ttl</code></em></code>] [<code class="option">-P <em class="replaceable"><code>date/offset</code></em></code>] [<code class="option">-A <em class="replaceable"><code>date/offset</code></em></code>] [<code class="option">-R <em class="replaceable"><code>date/offset</code></em></code>] [<code class="option">-I <em class="replaceable"><code>date/offset</code></em></code>] [<code class="option">-D <em class="replaceable"><code>date/offset</code></em></code>] [<code class="option">-h</code>] [<code class="option">-v <em class="replaceable"><code>level</code></em></code>] [<code class="option">-E <em class="replaceable"><code>engine</code></em></code>] {keyfile}</p></div>
</div>
<div class="refsect1" lang="en">
-<a name="id2616133"></a><h2>DESCRIPTION</h2>
+<a name="id2615070"></a><h2>DESCRIPTION</h2>
<p><span><strong class="command">dnssec-settime</strong></span>
reads a DNSSEC private key file and sets the key timing metadata
as specified by the <code class="option">-P</code>, <code class="option">-A</code>,
@@ -75,7 +75,7 @@
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2616192"></a><h2>OPTIONS</h2>
+<a name="id2615129"></a><h2>OPTIONS</h2>
<div class="variablelist"><dl>
<dt><span class="term">-f</span></dt>
<dd><p>
@@ -117,7 +117,7 @@
</dl></div>
</div>
<div class="refsect1" lang="en">
-<a name="id2616381"></a><h2>TIMING OPTIONS</h2>
+<a name="id2615456"></a><h2>TIMING OPTIONS</h2>
<p>
Dates can be expressed in the format YYYYMMDD or YYYYMMDDHHMMSS.
If the argument begins with a '+' or '-', it is interpreted as
@@ -196,7 +196,7 @@
</dl></div>
</div>
<div class="refsect1" lang="en">
-<a name="id2616793"></a><h2>PRINTING OPTIONS</h2>
+<a name="id2616004"></a><h2>PRINTING OPTIONS</h2>
<p>
<span><strong class="command">dnssec-settime</strong></span> can also be used to print the
timing metadata associated with a key.
@@ -222,7 +222,7 @@
</dl></div>
</div>
<div class="refsect1" lang="en">
-<a name="id2618238"></a><h2>SEE ALSO</h2>
+<a name="id2616084"></a><h2>SEE ALSO</h2>
<p><span class="citerefentry"><span class="refentrytitle">dnssec-keygen</span>(8)</span>,
<span class="citerefentry"><span class="refentrytitle">dnssec-signzone</span>(8)</span>,
<em class="citetitle">BIND 9 Administrator Reference Manual</em>,
@@ -230,7 +230,7 @@
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2618272"></a><h2>AUTHOR</h2>
+<a name="id2617141"></a><h2>AUTHOR</h2>
<p><span class="corpauthor">Internet Systems Consortium</span>
</p>
</div>
diff --git a/doc/arm/man.dnssec-signzone.html b/doc/arm/man.dnssec-signzone.html
index 4d530872..2480dd7c 100644
--- a/doc/arm/man.dnssec-signzone.html
+++ b/doc/arm/man.dnssec-signzone.html
@@ -14,7 +14,7 @@
- OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- PERFORMANCE OF THIS SOFTWARE.
-->
-<!-- $Id: man.dnssec-signzone.html,v 1.197 2011-08-04 01:14:42 tbox Exp $ -->
+<!-- $Id: man.dnssec-signzone.html,v 1.199 2011-09-07 01:14:42 tbox Exp $ -->
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
@@ -50,7 +50,7 @@
<div class="cmdsynopsis"><p><code class="command">dnssec-signzone</code> [<code class="option">-a</code>] [<code class="option">-c <em class="replaceable"><code>class</code></em></code>] [<code class="option">-d <em class="replaceable"><code>directory</code></em></code>] [<code class="option">-D</code>] [<code class="option">-E <em class="replaceable"><code>engine</code></em></code>] [<code class="option">-e <em class="replaceable"><code>end-time</code></em></code>] [<code class="option">-f <em class="replaceable"><code>output-file</code></em></code>] [<code class="option">-g</code>] [<code class="option">-h</code>] [<code class="option">-K <em class="replaceable"><code>directory</code></em></code>] [<code class="option">-k <em class="replaceable"><code>key</code></em></code>] [<code class="option">-l <em class="replaceable"><code>domain</code></em></code>] [<code class="option">-i <em class="replaceable"><code>interval</code></em></code>] [<code class="option">-I <em class="replaceable"><code>input-format</code></em></code>] [<code class="option">-j <em class="replaceable"><code>jitter</code></em></code>] [<code class="option">-N <em class="replaceable"><code>soa-serial-format</code></em></code>] [<code class="option">-o <em class="replaceable"><code>origin</code></em></code>] [<code class="option">-O <em class="replaceable"><code>output-format</code></em></code>] [<code class="option">-P</code>] [<code class="option">-p</code>] [<code class="option">-R</code>] [<code class="option">-r <em class="replaceable"><code>randomdev</code></em></code>] [<code class="option">-S</code>] [<code class="option">-s <em class="replaceable"><code>start-time</code></em></code>] [<code class="option">-T <em class="replaceable"><code>ttl</code></em></code>] [<code class="option">-t</code>] [<code class="option">-u</code>] [<code class="option">-v <em class="replaceable"><code>level</code></em></code>] [<code class="option">-X <em class="replaceable"><code>extended end-time</code></em></code>] [<code class="option">-x</code>] [<code class="option">-z</code>] [<code class="option">-3 <em class="replaceable"><code>salt</code></em></code>] [<code class="option">-H <em class="replaceable"><code>iterations</code></em></code>] [<code class="option">-A</code>] {zonefile} [key...]</p></div>
</div>
<div class="refsect1" lang="en">
-<a name="id2617893"></a><h2>DESCRIPTION</h2>
+<a name="id2616557"></a><h2>DESCRIPTION</h2>
<p><span><strong class="command">dnssec-signzone</strong></span>
signs a zone. It generates
NSEC and RRSIG records and produces a signed version of the
@@ -61,7 +61,7 @@
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2617912"></a><h2>OPTIONS</h2>
+<a name="id2616577"></a><h2>OPTIONS</h2>
<div class="variablelist"><dl>
<dt><span class="term">-a</span></dt>
<dd><p>
@@ -448,7 +448,7 @@
</dl></div>
</div>
<div class="refsect1" lang="en">
-<a name="id2671856"></a><h2>EXAMPLE</h2>
+<a name="id2671954"></a><h2>EXAMPLE</h2>
<p>
The following command signs the <strong class="userinput"><code>example.com</code></strong>
zone with the DSA key generated by <span><strong class="command">dnssec-keygen</strong></span>
@@ -478,14 +478,14 @@ db.example.com.signed
%</pre>
</div>
<div class="refsect1" lang="en">
-<a name="id2671934"></a><h2>SEE ALSO</h2>
+<a name="id2672033"></a><h2>SEE ALSO</h2>
<p><span class="citerefentry"><span class="refentrytitle">dnssec-keygen</span>(8)</span>,
<em class="citetitle">BIND 9 Administrator Reference Manual</em>,
<em class="citetitle">RFC 4033</em>.
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2671959"></a><h2>AUTHOR</h2>
+<a name="id2672057"></a><h2>AUTHOR</h2>
<p><span class="corpauthor">Internet Systems Consortium</span>
</p>
</div>
diff --git a/doc/arm/man.genrandom.html b/doc/arm/man.genrandom.html
index ee39367f..d280edb8 100644
--- a/doc/arm/man.genrandom.html
+++ b/doc/arm/man.genrandom.html
@@ -14,7 +14,7 @@
- OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- PERFORMANCE OF THIS SOFTWARE.
-->
-<!-- $Id: man.genrandom.html,v 1.53 2011-08-09 01:14:53 tbox Exp $ -->
+<!-- $Id: man.genrandom.html,v 1.55 2011-09-07 01:14:43 tbox Exp $ -->
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
@@ -50,7 +50,7 @@
<div class="cmdsynopsis"><p><code class="command">genrandom</code> [<code class="option">-n <em class="replaceable"><code>number</code></em></code>] {<em class="replaceable"><code>size</code></em>} {<em class="replaceable"><code>filename</code></em>}</p></div>
</div>
<div class="refsect1" lang="en">
-<a name="id2651762"></a><h2>DESCRIPTION</h2>
+<a name="id2642371"></a><h2>DESCRIPTION</h2>
<p>
<span><strong class="command">genrandom</strong></span>
generates a file or a set of files containing a specified quantity
@@ -59,7 +59,7 @@
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2651777"></a><h2>ARGUMENTS</h2>
+<a name="id2642386"></a><h2>ARGUMENTS</h2>
<div class="variablelist"><dl>
<dt><span class="term">-n <em class="replaceable"><code>number</code></em></span></dt>
<dd><p>
@@ -77,14 +77,14 @@
</dl></div>
</div>
<div class="refsect1" lang="en">
-<a name="id2651837"></a><h2>SEE ALSO</h2>
+<a name="id2642446"></a><h2>SEE ALSO</h2>
<p>
<span class="citerefentry"><span class="refentrytitle">rand</span>(3)</span>,
<span class="citerefentry"><span class="refentrytitle">arc4random</span>(3)</span>
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2651864"></a><h2>AUTHOR</h2>
+<a name="id2642473"></a><h2>AUTHOR</h2>
<p><span class="corpauthor">Internet Systems Consortium</span>
</p>
</div>
diff --git a/doc/arm/man.host.html b/doc/arm/man.host.html
index 55ae3b50..ebf00040 100644
--- a/doc/arm/man.host.html
+++ b/doc/arm/man.host.html
@@ -14,7 +14,7 @@
- OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- PERFORMANCE OF THIS SOFTWARE.
-->
-<!-- $Id: man.host.html,v 1.175 2011-08-04 01:14:42 tbox Exp $ -->
+<!-- $Id: man.host.html,v 1.177 2011-09-07 01:14:43 tbox Exp $ -->
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
@@ -50,7 +50,7 @@
<div class="cmdsynopsis"><p><code class="command">host</code> [<code class="option">-aCdlnrsTwv</code>] [<code class="option">-c <em class="replaceable"><code>class</code></em></code>] [<code class="option">-N <em class="replaceable"><code>ndots</code></em></code>] [<code class="option">-R <em class="replaceable"><code>number</code></em></code>] [<code class="option">-t <em class="replaceable"><code>type</code></em></code>] [<code class="option">-W <em class="replaceable"><code>wait</code></em></code>] [<code class="option">-m <em class="replaceable"><code>flag</code></em></code>] [<code class="option">-4</code>] [<code class="option">-6</code>] {name} [server]</p></div>
</div>
<div class="refsect1" lang="en">
-<a name="id2610950"></a><h2>DESCRIPTION</h2>
+<a name="id2610502"></a><h2>DESCRIPTION</h2>
<p><span><strong class="command">host</strong></span>
is a simple utility for performing DNS lookups.
It is normally used to convert names to IP addresses and vice versa.
@@ -202,7 +202,7 @@
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2612078"></a><h2>IDN SUPPORT</h2>
+<a name="id2610948"></a><h2>IDN SUPPORT</h2>
<p>
If <span><strong class="command">host</strong></span> has been built with IDN (internationalized
domain name) support, it can accept and display non-ASCII domain names.
@@ -216,12 +216,12 @@
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2613404"></a><h2>FILES</h2>
+<a name="id2610977"></a><h2>FILES</h2>
<p><code class="filename">/etc/resolv.conf</code>
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2613418"></a><h2>SEE ALSO</h2>
+<a name="id2610990"></a><h2>SEE ALSO</h2>
<p><span class="citerefentry"><span class="refentrytitle">dig</span>(1)</span>,
<span class="citerefentry"><span class="refentrytitle">named</span>(8)</span>.
</p>
diff --git a/doc/arm/man.isc-hmac-fixup.html b/doc/arm/man.isc-hmac-fixup.html
index 7b9eebab..be3991df 100644
--- a/doc/arm/man.isc-hmac-fixup.html
+++ b/doc/arm/man.isc-hmac-fixup.html
@@ -14,7 +14,7 @@
- OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- PERFORMANCE OF THIS SOFTWARE.
-->
-<!-- $Id: man.isc-hmac-fixup.html,v 1.50 2011-08-09 01:14:53 tbox Exp $ -->
+<!-- $Id: man.isc-hmac-fixup.html,v 1.52 2011-09-07 01:14:43 tbox Exp $ -->
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
@@ -50,7 +50,7 @@
<div class="cmdsynopsis"><p><code class="command">isc-hmac-fixup</code> {<em class="replaceable"><code>algorithm</code></em>} {<em class="replaceable"><code>secret</code></em>}</p></div>
</div>
<div class="refsect1" lang="en">
-<a name="id2613205"></a><h2>DESCRIPTION</h2>
+<a name="id2618423"></a><h2>DESCRIPTION</h2>
<p>
Versions of BIND 9 up to and including BIND 9.6 had a bug causing
HMAC-SHA* TSIG keys which were longer than the digest length of the
@@ -76,7 +76,7 @@
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2613233"></a><h2>SECURITY CONSIDERATIONS</h2>
+<a name="id2650400"></a><h2>SECURITY CONSIDERATIONS</h2>
<p>
Secrets that have been converted by <span><strong class="command">isc-hmac-fixup</strong></span>
are shortened, but as this is how the HMAC protocol works in
@@ -87,14 +87,14 @@
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2652297"></a><h2>SEE ALSO</h2>
+<a name="id2650416"></a><h2>SEE ALSO</h2>
<p>
<em class="citetitle">BIND 9 Administrator Reference Manual</em>,
<em class="citetitle">RFC 2104</em>.
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2652314"></a><h2>AUTHOR</h2>
+<a name="id2650433"></a><h2>AUTHOR</h2>
<p><span class="corpauthor">Internet Systems Consortium</span>
</p>
</div>
diff --git a/doc/arm/man.named-checkconf.html b/doc/arm/man.named-checkconf.html
index 75a8b7b9..a474a374 100644
--- a/doc/arm/man.named-checkconf.html
+++ b/doc/arm/man.named-checkconf.html
@@ -14,7 +14,7 @@
- OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- PERFORMANCE OF THIS SOFTWARE.
-->
-<!-- $Id: man.named-checkconf.html,v 1.192 2011-08-04 01:14:42 tbox Exp $ -->
+<!-- $Id: man.named-checkconf.html,v 1.194 2011-09-07 01:14:43 tbox Exp $ -->
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
@@ -50,7 +50,7 @@
<div class="cmdsynopsis"><p><code class="command">named-checkconf</code> [<code class="option">-h</code>] [<code class="option">-v</code>] [<code class="option">-j</code>] [<code class="option">-t <em class="replaceable"><code>directory</code></em></code>] {filename} [<code class="option">-p</code>] [<code class="option">-z</code>]</p></div>
</div>
<div class="refsect1" lang="en">
-<a name="id2618384"></a><h2>DESCRIPTION</h2>
+<a name="id2617253"></a><h2>DESCRIPTION</h2>
<p><span><strong class="command">named-checkconf</strong></span>
checks the syntax, but not the semantics, of a
<span><strong class="command">named</strong></span> configuration file. The file is parsed
@@ -70,7 +70,7 @@
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2618454"></a><h2>OPTIONS</h2>
+<a name="id2617323"></a><h2>OPTIONS</h2>
<div class="variablelist"><dl>
<dt><span class="term">-h</span></dt>
<dd><p>
@@ -109,21 +109,21 @@
</dl></div>
</div>
<div class="refsect1" lang="en">
-<a name="id2618793"></a><h2>RETURN VALUES</h2>
+<a name="id2617458"></a><h2>RETURN VALUES</h2>
<p><span><strong class="command">named-checkconf</strong></span>
returns an exit status of 1 if
errors were detected and 0 otherwise.
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2618807"></a><h2>SEE ALSO</h2>
+<a name="id2617472"></a><h2>SEE ALSO</h2>
<p><span class="citerefentry"><span class="refentrytitle">named</span>(8)</span>,
<span class="citerefentry"><span class="refentrytitle">named-checkzone</span>(8)</span>,
<em class="citetitle">BIND 9 Administrator Reference Manual</em>.
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2618837"></a><h2>AUTHOR</h2>
+<a name="id2617706"></a><h2>AUTHOR</h2>
<p><span class="corpauthor">Internet Systems Consortium</span>
</p>
</div>
diff --git a/doc/arm/man.named-checkzone.html b/doc/arm/man.named-checkzone.html
index 59c55084..d42a3b7a 100644
--- a/doc/arm/man.named-checkzone.html
+++ b/doc/arm/man.named-checkzone.html
@@ -14,7 +14,7 @@
- OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- PERFORMANCE OF THIS SOFTWARE.
-->
-<!-- $Id: man.named-checkzone.html,v 1.201 2011-08-04 01:14:43 tbox Exp $ -->
+<!-- $Id: man.named-checkzone.html,v 1.203 2011-09-07 01:14:43 tbox Exp $ -->
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
@@ -51,7 +51,7 @@
<div class="cmdsynopsis"><p><code class="command">named-compilezone</code> [<code class="option">-d</code>] [<code class="option">-j</code>] [<code class="option">-q</code>] [<code class="option">-v</code>] [<code class="option">-c <em class="replaceable"><code>class</code></em></code>] [<code class="option">-C <em class="replaceable"><code>mode</code></em></code>] [<code class="option">-f <em class="replaceable"><code>format</code></em></code>] [<code class="option">-F <em class="replaceable"><code>format</code></em></code>] [<code class="option">-i <em class="replaceable"><code>mode</code></em></code>] [<code class="option">-k <em class="replaceable"><code>mode</code></em></code>] [<code class="option">-m <em class="replaceable"><code>mode</code></em></code>] [<code class="option">-n <em class="replaceable"><code>mode</code></em></code>] [<code class="option">-r <em class="replaceable"><code>mode</code></em></code>] [<code class="option">-s <em class="replaceable"><code>style</code></em></code>] [<code class="option">-t <em class="replaceable"><code>directory</code></em></code>] [<code class="option">-w <em class="replaceable"><code>directory</code></em></code>] [<code class="option">-D</code>] [<code class="option">-W <em class="replaceable"><code>mode</code></em></code>] {<code class="option">-o <em class="replaceable"><code>filename</code></em></code>} {zonename} {filename}</p></div>
</div>
<div class="refsect1" lang="en">
-<a name="id2632490"></a><h2>DESCRIPTION</h2>
+<a name="id2618935"></a><h2>DESCRIPTION</h2>
<p><span><strong class="command">named-checkzone</strong></span>
checks the syntax and integrity of a zone file. It performs the
same checks as <span><strong class="command">named</strong></span> does when loading a
@@ -71,7 +71,7 @@
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2632540"></a><h2>OPTIONS</h2>
+<a name="id2673735"></a><h2>OPTIONS</h2>
<div class="variablelist"><dl>
<dt><span class="term">-d</span></dt>
<dd><p>
@@ -265,14 +265,14 @@
</dl></div>
</div>
<div class="refsect1" lang="en">
-<a name="id2674476"></a><h2>RETURN VALUES</h2>
+<a name="id2674574"></a><h2>RETURN VALUES</h2>
<p><span><strong class="command">named-checkzone</strong></span>
returns an exit status of 1 if
errors were detected and 0 otherwise.
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2674558"></a><h2>SEE ALSO</h2>
+<a name="id2674588"></a><h2>SEE ALSO</h2>
<p><span class="citerefentry"><span class="refentrytitle">named</span>(8)</span>,
<span class="citerefentry"><span class="refentrytitle">named-checkconf</span>(8)</span>,
<em class="citetitle">RFC 1035</em>,
@@ -280,7 +280,7 @@
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2674592"></a><h2>AUTHOR</h2>
+<a name="id2674621"></a><h2>AUTHOR</h2>
<p><span class="corpauthor">Internet Systems Consortium</span>
</p>
</div>
diff --git a/doc/arm/man.named-journalprint.html b/doc/arm/man.named-journalprint.html
index b5f77d98..f6cf0c0a 100644
--- a/doc/arm/man.named-journalprint.html
+++ b/doc/arm/man.named-journalprint.html
@@ -14,7 +14,7 @@
- OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- PERFORMANCE OF THIS SOFTWARE.
-->
-<!-- $Id: man.named-journalprint.html,v 1.51 2011-08-04 01:14:43 tbox Exp $ -->
+<!-- $Id: man.named-journalprint.html,v 1.53 2011-09-07 01:14:43 tbox Exp $ -->
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
@@ -50,7 +50,7 @@
<div class="cmdsynopsis"><p><code class="command">named-journalprint</code> {<em class="replaceable"><code>journal</code></em>}</p></div>
</div>
<div class="refsect1" lang="en">
-<a name="id2611185"></a><h2>DESCRIPTION</h2>
+<a name="id2614218"></a><h2>DESCRIPTION</h2>
<p>
<span><strong class="command">named-journalprint</strong></span>
prints the contents of a zone journal file in a human-readable
@@ -76,7 +76,7 @@
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2638196"></a><h2>SEE ALSO</h2>
+<a name="id2614264"></a><h2>SEE ALSO</h2>
<p>
<span class="citerefentry"><span class="refentrytitle">named</span>(8)</span>,
<span class="citerefentry"><span class="refentrytitle">nsupdate</span>(8)</span>,
@@ -84,7 +84,7 @@
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2638227"></a><h2>AUTHOR</h2>
+<a name="id2620712"></a><h2>AUTHOR</h2>
<p><span class="corpauthor">Internet Systems Consortium</span>
</p>
</div>
diff --git a/doc/arm/man.named.html b/doc/arm/man.named.html
index 0163f136..f9062432 100644
--- a/doc/arm/man.named.html
+++ b/doc/arm/man.named.html
@@ -14,7 +14,7 @@
- OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- PERFORMANCE OF THIS SOFTWARE.
-->
-<!-- $Id: man.named.html,v 1.203 2011-08-04 01:14:42 tbox Exp $ -->
+<!-- $Id: man.named.html,v 1.205 2011-09-07 01:14:43 tbox Exp $ -->
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
@@ -50,7 +50,7 @@
<div class="cmdsynopsis"><p><code class="command">named</code> [<code class="option">-4</code>] [<code class="option">-6</code>] [<code class="option">-c <em class="replaceable"><code>config-file</code></em></code>] [<code class="option">-d <em class="replaceable"><code>debug-level</code></em></code>] [<code class="option">-E <em class="replaceable"><code>engine-name</code></em></code>] [<code class="option">-f</code>] [<code class="option">-g</code>] [<code class="option">-m <em class="replaceable"><code>flag</code></em></code>] [<code class="option">-n <em class="replaceable"><code>#cpus</code></em></code>] [<code class="option">-p <em class="replaceable"><code>port</code></em></code>] [<code class="option">-s</code>] [<code class="option">-S <em class="replaceable"><code>#max-socks</code></em></code>] [<code class="option">-t <em class="replaceable"><code>directory</code></em></code>] [<code class="option">-u <em class="replaceable"><code>user</code></em></code>] [<code class="option">-v</code>] [<code class="option">-V</code>] [<code class="option">-x <em class="replaceable"><code>cache-file</code></em></code>]</p></div>
</div>
<div class="refsect1" lang="en">
-<a name="id2636270"></a><h2>DESCRIPTION</h2>
+<a name="id2619507"></a><h2>DESCRIPTION</h2>
<p><span><strong class="command">named</strong></span>
is a Domain Name System (DNS) server,
part of the BIND 9 distribution from ISC. For more
@@ -65,7 +65,7 @@
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2636301"></a><h2>OPTIONS</h2>
+<a name="id2619674"></a><h2>OPTIONS</h2>
<div class="variablelist"><dl>
<dt><span class="term">-4</span></dt>
<dd><p>
@@ -246,7 +246,7 @@
</dl></div>
</div>
<div class="refsect1" lang="en">
-<a name="id2640541"></a><h2>SIGNALS</h2>
+<a name="id2638592"></a><h2>SIGNALS</h2>
<p>
In routine operation, signals should not be used to control
the nameserver; <span><strong class="command">rndc</strong></span> should be used
@@ -267,7 +267,7 @@
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2640592"></a><h2>CONFIGURATION</h2>
+<a name="id2638642"></a><h2>CONFIGURATION</h2>
<p>
The <span><strong class="command">named</strong></span> configuration file is too complex
to describe in detail here. A complete description is provided
@@ -284,7 +284,7 @@
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2674842"></a><h2>FILES</h2>
+<a name="id2638691"></a><h2>FILES</h2>
<div class="variablelist"><dl>
<dt><span class="term"><code class="filename">/etc/named.conf</code></span></dt>
<dd><p>
@@ -297,7 +297,7 @@
</dl></div>
</div>
<div class="refsect1" lang="en">
-<a name="id2674886"></a><h2>SEE ALSO</h2>
+<a name="id2674848"></a><h2>SEE ALSO</h2>
<p><em class="citetitle">RFC 1033</em>,
<em class="citetitle">RFC 1034</em>,
<em class="citetitle">RFC 1035</em>,
@@ -310,7 +310,7 @@
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2674956"></a><h2>AUTHOR</h2>
+<a name="id2674918"></a><h2>AUTHOR</h2>
<p><span class="corpauthor">Internet Systems Consortium</span>
</p>
</div>
diff --git a/doc/arm/man.nsec3hash.html b/doc/arm/man.nsec3hash.html
index 71886e45..10fbcf0f 100644
--- a/doc/arm/man.nsec3hash.html
+++ b/doc/arm/man.nsec3hash.html
@@ -14,7 +14,7 @@
- OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- PERFORMANCE OF THIS SOFTWARE.
-->
-<!-- $Id: man.nsec3hash.html,v 1.53 2011-08-09 01:14:54 tbox Exp $ -->
+<!-- $Id: man.nsec3hash.html,v 1.55 2011-09-07 01:14:43 tbox Exp $ -->
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
@@ -48,7 +48,7 @@
<div class="cmdsynopsis"><p><code class="command">nsec3hash</code> {<em class="replaceable"><code>salt</code></em>} {<em class="replaceable"><code>algorithm</code></em>} {<em class="replaceable"><code>iterations</code></em>} {<em class="replaceable"><code>domain</code></em>}</p></div>
</div>
<div class="refsect1" lang="en">
-<a name="id2613312"></a><h2>DESCRIPTION</h2>
+<a name="id2650956"></a><h2>DESCRIPTION</h2>
<p>
<span><strong class="command">nsec3hash</strong></span> generates an NSEC3 hash based on
a set of NSEC3 parameters. This can be used to check the validity
@@ -56,7 +56,7 @@
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2652375"></a><h2>ARGUMENTS</h2>
+<a name="id2650971"></a><h2>ARGUMENTS</h2>
<div class="variablelist"><dl>
<dt><span class="term">salt</span></dt>
<dd><p>
@@ -80,14 +80,14 @@
</dl></div>
</div>
<div class="refsect1" lang="en">
-<a name="id2652505"></a><h2>SEE ALSO</h2>
+<a name="id2651033"></a><h2>SEE ALSO</h2>
<p>
<em class="citetitle">BIND 9 Administrator Reference Manual</em>,
<em class="citetitle">RFC 5155</em>.
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2652522"></a><h2>AUTHOR</h2>
+<a name="id2651050"></a><h2>AUTHOR</h2>
<p><span class="corpauthor">Internet Systems Consortium</span>
</p>
</div>
diff --git a/doc/arm/man.nsupdate.html b/doc/arm/man.nsupdate.html
index 8497952b..cd0c0fc8 100644
--- a/doc/arm/man.nsupdate.html
+++ b/doc/arm/man.nsupdate.html
@@ -14,7 +14,7 @@
- OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- PERFORMANCE OF THIS SOFTWARE.
-->
-<!-- $Id: man.nsupdate.html,v 1.128 2011-08-04 01:14:44 tbox Exp $ -->
+<!-- $Id: man.nsupdate.html,v 1.130 2011-09-07 01:14:44 tbox Exp $ -->
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
@@ -50,7 +50,7 @@
<div class="cmdsynopsis"><p><code class="command">nsupdate</code> [<code class="option">-d</code>] [<code class="option">-D</code>] [[<code class="option">-g</code>] | [<code class="option">-o</code>] | [<code class="option">-l</code>] | [<code class="option">-y <em class="replaceable"><code>[<span class="optional">hmac:</span>]keyname:secret</code></em></code>] | [<code class="option">-k <em class="replaceable"><code>keyfile</code></em></code>]] [<code class="option">-t <em class="replaceable"><code>timeout</code></em></code>] [<code class="option">-u <em class="replaceable"><code>udptimeout</code></em></code>] [<code class="option">-r <em class="replaceable"><code>udpretries</code></em></code>] [<code class="option">-R <em class="replaceable"><code>randomdev</code></em></code>] [<code class="option">-v</code>] [filename]</p></div>
</div>
<div class="refsect1" lang="en">
-<a name="id2638661"></a><h2>DESCRIPTION</h2>
+<a name="id2628724"></a><h2>DESCRIPTION</h2>
<p><span><strong class="command">nsupdate</strong></span>
is used to submit Dynamic DNS Update requests as defined in RFC 2136
to a name server.
@@ -210,7 +210,7 @@
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2638995"></a><h2>INPUT FORMAT</h2>
+<a name="id2638820"></a><h2>INPUT FORMAT</h2>
<p><span><strong class="command">nsupdate</strong></span>
reads input from
<em class="parameter"><code>filename</code></em>
@@ -498,7 +498,7 @@
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2676020"></a><h2>EXAMPLES</h2>
+<a name="id2675913"></a><h2>EXAMPLES</h2>
<p>
The examples below show how
<span><strong class="command">nsupdate</strong></span>
@@ -552,7 +552,7 @@
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2676070"></a><h2>FILES</h2>
+<a name="id2675963"></a><h2>FILES</h2>
<div class="variablelist"><dl>
<dt><span class="term"><code class="constant">/etc/resolv.conf</code></span></dt>
<dd><p>
@@ -575,7 +575,7 @@
</dl></div>
</div>
<div class="refsect1" lang="en">
-<a name="id2676153"></a><h2>SEE ALSO</h2>
+<a name="id2676046"></a><h2>SEE ALSO</h2>
<p>
<em class="citetitle">RFC 2136</em>,
<em class="citetitle">RFC 3007</em>,
@@ -590,7 +590,7 @@
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2676211"></a><h2>BUGS</h2>
+<a name="id2676104"></a><h2>BUGS</h2>
<p>
The TSIG key is redundantly stored in two separate files.
This is a consequence of nsupdate using the DST library
diff --git a/doc/arm/man.rndc-confgen.html b/doc/arm/man.rndc-confgen.html
index cede4e6d..6cb726c9 100644
--- a/doc/arm/man.rndc-confgen.html
+++ b/doc/arm/man.rndc-confgen.html
@@ -14,7 +14,7 @@
- OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- PERFORMANCE OF THIS SOFTWARE.
-->
-<!-- $Id: man.rndc-confgen.html,v 1.207 2011-08-04 01:14:42 tbox Exp $ -->
+<!-- $Id: man.rndc-confgen.html,v 1.209 2011-09-07 01:14:44 tbox Exp $ -->
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
@@ -50,7 +50,7 @@
<div class="cmdsynopsis"><p><code class="command">rndc-confgen</code> [<code class="option">-a</code>] [<code class="option">-b <em class="replaceable"><code>keysize</code></em></code>] [<code class="option">-c <em class="replaceable"><code>keyfile</code></em></code>] [<code class="option">-h</code>] [<code class="option">-k <em class="replaceable"><code>keyname</code></em></code>] [<code class="option">-p <em class="replaceable"><code>port</code></em></code>] [<code class="option">-r <em class="replaceable"><code>randomfile</code></em></code>] [<code class="option">-s <em class="replaceable"><code>address</code></em></code>] [<code class="option">-t <em class="replaceable"><code>chrootdir</code></em></code>] [<code class="option">-u <em class="replaceable"><code>user</code></em></code>]</p></div>
</div>
<div class="refsect1" lang="en">
-<a name="id2643216"></a><h2>DESCRIPTION</h2>
+<a name="id2640720"></a><h2>DESCRIPTION</h2>
<p><span><strong class="command">rndc-confgen</strong></span>
generates configuration files
for <span><strong class="command">rndc</strong></span>. It can be used as a
@@ -66,7 +66,7 @@
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2643282"></a><h2>OPTIONS</h2>
+<a name="id2640786"></a><h2>OPTIONS</h2>
<div class="variablelist"><dl>
<dt><span class="term">-a</span></dt>
<dd>
@@ -173,7 +173,7 @@
</dl></div>
</div>
<div class="refsect1" lang="en">
-<a name="id2651518"></a><h2>EXAMPLES</h2>
+<a name="id2650251"></a><h2>EXAMPLES</h2>
<p>
To allow <span><strong class="command">rndc</strong></span> to be used with
no manual configuration, run
@@ -190,7 +190,7 @@
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2652121"></a><h2>SEE ALSO</h2>
+<a name="id2650308"></a><h2>SEE ALSO</h2>
<p><span class="citerefentry"><span class="refentrytitle">rndc</span>(8)</span>,
<span class="citerefentry"><span class="refentrytitle">rndc.conf</span>(5)</span>,
<span class="citerefentry"><span class="refentrytitle">named</span>(8)</span>,
@@ -198,7 +198,7 @@
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2652160"></a><h2>AUTHOR</h2>
+<a name="id2650346"></a><h2>AUTHOR</h2>
<p><span class="corpauthor">Internet Systems Consortium</span>
</p>
</div>
diff --git a/doc/arm/man.rndc.conf.html b/doc/arm/man.rndc.conf.html
index c6929a35..b8c47288 100644
--- a/doc/arm/man.rndc.conf.html
+++ b/doc/arm/man.rndc.conf.html
@@ -14,7 +14,7 @@
- OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- PERFORMANCE OF THIS SOFTWARE.
-->
-<!-- $Id: man.rndc.conf.html,v 1.208 2011-08-04 01:14:43 tbox Exp $ -->
+<!-- $Id: man.rndc.conf.html,v 1.210 2011-09-07 01:14:44 tbox Exp $ -->
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
@@ -50,7 +50,7 @@
<div class="cmdsynopsis"><p><code class="command">rndc.conf</code> </p></div>
</div>
<div class="refsect1" lang="en">
-<a name="id2641293"></a><h2>DESCRIPTION</h2>
+<a name="id2615587"></a><h2>DESCRIPTION</h2>
<p><code class="filename">rndc.conf</code> is the configuration file
for <span><strong class="command">rndc</strong></span>, the BIND 9 name server control
utility. This file has a similar structure and syntax to
@@ -135,7 +135,7 @@
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2641875"></a><h2>EXAMPLE</h2>
+<a name="id2635146"></a><h2>EXAMPLE</h2>
<pre class="programlisting">
options {
default-server localhost;
@@ -209,7 +209,7 @@
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2641996"></a><h2>NAME SERVER CONFIGURATION</h2>
+<a name="id2639227"></a><h2>NAME SERVER CONFIGURATION</h2>
<p>
The name server must be configured to accept rndc connections and
to recognize the key specified in the <code class="filename">rndc.conf</code>
@@ -219,7 +219,7 @@
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2642022"></a><h2>SEE ALSO</h2>
+<a name="id2639253"></a><h2>SEE ALSO</h2>
<p><span class="citerefentry"><span class="refentrytitle">rndc</span>(8)</span>,
<span class="citerefentry"><span class="refentrytitle">rndc-confgen</span>(8)</span>,
<span class="citerefentry"><span class="refentrytitle">mmencode</span>(1)</span>,
@@ -227,7 +227,7 @@
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2642129"></a><h2>AUTHOR</h2>
+<a name="id2639291"></a><h2>AUTHOR</h2>
<p><span class="corpauthor">Internet Systems Consortium</span>
</p>
</div>
diff --git a/doc/arm/man.rndc.html b/doc/arm/man.rndc.html
index d0695dd7..9ebcaf51 100644
--- a/doc/arm/man.rndc.html
+++ b/doc/arm/man.rndc.html
@@ -14,7 +14,7 @@
- OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
- PERFORMANCE OF THIS SOFTWARE.
-->
-<!-- $Id: man.rndc.html,v 1.206 2011-08-04 01:14:43 tbox Exp $ -->
+<!-- $Id: man.rndc.html,v 1.208 2011-09-07 01:14:43 tbox Exp $ -->
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
@@ -50,7 +50,7 @@
<div class="cmdsynopsis"><p><code class="command">rndc</code> [<code class="option">-b <em class="replaceable"><code>source-address</code></em></code>] [<code class="option">-c <em class="replaceable"><code>config-file</code></em></code>] [<code class="option">-k <em class="replaceable"><code>key-file</code></em></code>] [<code class="option">-s <em class="replaceable"><code>server</code></em></code>] [<code class="option">-p <em class="replaceable"><code>port</code></em></code>] [<code class="option">-V</code>] [<code class="option">-y <em class="replaceable"><code>key_id</code></em></code>] {command}</p></div>
</div>
<div class="refsect1" lang="en">
-<a name="id2640717"></a><h2>DESCRIPTION</h2>
+<a name="id2634398"></a><h2>DESCRIPTION</h2>
<p><span><strong class="command">rndc</strong></span>
controls the operation of a name
server. It supersedes the <span><strong class="command">ndc</strong></span> utility
@@ -79,7 +79,7 @@
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2640768"></a><h2>OPTIONS</h2>
+<a name="id2634449"></a><h2>OPTIONS</h2>
<div class="variablelist"><dl>
<dt><span class="term">-b <em class="replaceable"><code>source-address</code></em></span></dt>
<dd><p>
@@ -151,7 +151,7 @@
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2640993"></a><h2>LIMITATIONS</h2>
+<a name="id2634810"></a><h2>LIMITATIONS</h2>
<p><span><strong class="command">rndc</strong></span>
does not yet support all the commands of
the BIND 8 <span><strong class="command">ndc</strong></span> utility.
@@ -165,7 +165,7 @@
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2641024"></a><h2>SEE ALSO</h2>
+<a name="id2634841"></a><h2>SEE ALSO</h2>
<p><span class="citerefentry"><span class="refentrytitle">rndc.conf</span>(5)</span>,
<span class="citerefentry"><span class="refentrytitle">rndc-confgen</span>(8)</span>,
<span class="citerefentry"><span class="refentrytitle">named</span>(8)</span>,
@@ -175,7 +175,7 @@
</p>
</div>
<div class="refsect1" lang="en">
-<a name="id2641079"></a><h2>AUTHOR</h2>
+<a name="id2639061"></a><h2>AUTHOR</h2>
<p><span class="corpauthor">Internet Systems Consortium</span>
</p>
</div>
diff --git a/doc/misc/options b/doc/misc/options
index e040b46a..63fe5540 100644
--- a/doc/misc/options
+++ b/doc/misc/options
@@ -142,6 +142,7 @@ options {
host-statistics <boolean>; // not implemented
host-statistics-max <integer>; // not implemented
hostname ( <quoted_string> | none );
+ inline-signing <boolean>;
interface-interval <integer>;
ixfr-from-differences <ixfrdiff>;
key-directory <quoted_string>;
@@ -195,6 +196,7 @@ options {
recursion <boolean>;
recursive-clients <integer>;
request-ixfr <boolean>;
+ request-ixfr <boolean>;
request-nsid <boolean>;
reserved-sockets <integer>;
resolver-query-timeout <integer>;
@@ -356,6 +358,7 @@ view <string> <optional_class> {
forward ( first | only );
forwarders [ port <integer> ] { ( <ipv4_address> | <ipv6_address> )
[ port <integer> ]; ... };
+ inline-signing <boolean>;
ixfr-from-differences <ixfrdiff>;
key <string> {
algorithm <string>;
@@ -403,6 +406,7 @@ view <string> <optional_class> {
queryport-pool-updateinterval <integer>; // obsolete
recursion <boolean>;
request-ixfr <boolean>;
+ request-ixfr <boolean>;
request-nsid <boolean>;
resolver-query-timeout <integer>;
response-policy {
@@ -488,6 +492,7 @@ view <string> <optional_class> {
forward ( first | only );
forwarders [ port <integer> ] { ( <ipv4_address> |
<ipv6_address> ) [ port <integer> ]; ... };
+ inline-signing <boolean>;
ixfr-base <quoted_string>; // obsolete
ixfr-from-differences <boolean>;
ixfr-tmp-file <quoted_string>; // obsolete
@@ -519,6 +524,7 @@ view <string> <optional_class> {
nsec3-test-zone <boolean>; // test only
pubkey <integer> <integer> <integer>
<quoted_string>; // obsolete
+ request-ixfr <boolean>;
serial-update-method ( increment | unixtime );
server-addresses { ( <ipv4_address> | <ipv6_address> ) [
port <integer> ]; ... };
@@ -580,6 +586,7 @@ zone <string> <optional_class> {
forward ( first | only );
forwarders [ port <integer> ] { ( <ipv4_address> | <ipv6_address> )
[ port <integer> ]; ... };
+ inline-signing <boolean>;
ixfr-base <quoted_string>; // obsolete
ixfr-from-differences <boolean>;
ixfr-tmp-file <quoted_string>; // obsolete
@@ -608,6 +615,7 @@ zone <string> <optional_class> {
notify-to-soa <boolean>;
nsec3-test-zone <boolean>; // test only
pubkey <integer> <integer> <integer> <quoted_string>; // obsolete
+ request-ixfr <boolean>;
serial-update-method ( increment | unixtime );
server-addresses { ( <ipv4_address> | <ipv6_address> ) [ port
<integer> ]; ... };
diff --git a/lib/bind9/check.c b/lib/bind9/check.c
index 2b7b894d..1df7989f 100644
--- a/lib/bind9/check.c
+++ b/lib/bind9/check.c
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: check.c,v 1.133 2011-06-17 07:05:02 each Exp $ */
+/* $Id: check.c,v 1.134 2011-08-30 05:16:14 marka Exp $ */
/*! \file */
@@ -1225,7 +1225,7 @@ check_update_policy(const cfg_obj_t *policy, isc_log_t *logctx) {
#define STATICSTUBZONE 64
#define REDIRECTZONE 128
#define STREDIRECTZONE 0 /* Set to REDIRECTZONE to allow xfr-in. */
-#define CHECKACL 256
+#define CHECKACL 512
typedef struct {
const char *name;
@@ -1255,7 +1255,7 @@ check_zoneconf(const cfg_obj_t *zconfig, const cfg_obj_t *voptions,
static optionstable options[] = {
{ "allow-query", MASTERZONE | SLAVEZONE | STUBZONE | REDIRECTZONE |
- CHECKACL | STATICSTUBZONE },
+ CHECKACL | STATICSTUBZONE },
{ "allow-notify", SLAVEZONE | CHECKACL },
{ "allow-transfer", MASTERZONE | SLAVEZONE | CHECKACL },
{ "notify", MASTERZONE | SLAVEZONE },
@@ -1279,13 +1279,14 @@ check_zoneconf(const cfg_obj_t *zconfig, const cfg_obj_t *voptions,
{ "max-refresh-time", SLAVEZONE | STUBZONE | STREDIRECTZONE },
{ "min-refresh-time", SLAVEZONE | STUBZONE | STREDIRECTZONE },
{ "dnssec-secure-to-insecure", MASTERZONE },
- { "sig-validity-interval", MASTERZONE },
- { "sig-re-signing-interval", MASTERZONE },
- { "sig-signing-nodes", MASTERZONE },
- { "sig-signing-type", MASTERZONE },
- { "sig-signing-signatures", MASTERZONE },
+ { "sig-re-signing-interval", MASTERZONE | SLAVEZONE },
+ { "sig-signing-nodes", MASTERZONE | SLAVEZONE },
+ { "sig-signing-signatures", MASTERZONE | SLAVEZONE },
+ { "sig-signing-type", MASTERZONE | SLAVEZONE },
+ { "sig-validity-interval", MASTERZONE | SLAVEZONE },
+ { "signing", MASTERZONE | SLAVEZONE },
{ "zone-statistics", MASTERZONE | SLAVEZONE | STUBZONE |
- STATICSTUBZONE| REDIRECTZONE },
+ STATICSTUBZONE | REDIRECTZONE },
{ "allow-update", MASTERZONE | CHECKACL },
{ "allow-update-forwarding", SLAVEZONE | CHECKACL },
{ "file", MASTERZONE | SLAVEZONE | STUBZONE | HINTZONE | REDIRECTZONE },
@@ -1296,7 +1297,7 @@ check_zoneconf(const cfg_obj_t *zconfig, const cfg_obj_t *voptions,
{ "pubkey", MASTERZONE | SLAVEZONE | STUBZONE },
{ "update-policy", MASTERZONE },
{ "database", MASTERZONE | SLAVEZONE | STUBZONE | REDIRECTZONE },
- { "key-directory", MASTERZONE },
+ { "key-directory", MASTERZONE | SLAVEZONE },
{ "check-wildcard", MASTERZONE },
{ "check-mx", MASTERZONE },
{ "check-dup-records", MASTERZONE },
@@ -1308,7 +1309,7 @@ check_zoneconf(const cfg_obj_t *zconfig, const cfg_obj_t *voptions,
{ "update-check-ksk", MASTERZONE },
{ "dnssec-dnskey-kskonly", MASTERZONE },
{ "dnssec-loadkeys-interval", MASTERZONE },
- { "auto-dnssec", MASTERZONE },
+ { "auto-dnssec", MASTERZONE | SLAVEZONE },
{ "try-tcp-refresh", SLAVEZONE | STREDIRECTZONE },
{ "server-addresses", STATICSTUBZONE },
{ "server-names", STATICSTUBZONE },
diff --git a/lib/dns/cache.c b/lib/dns/cache.c
index 38821c43..232a752e 100644
--- a/lib/dns/cache.c
+++ b/lib/dns/cache.c
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: cache.c,v 1.90 2011-08-02 20:36:12 each Exp $ */
+/* $Id: cache.c,v 1.91 2011-08-26 05:12:56 marka Exp $ */
/*! \file */
@@ -1186,7 +1186,7 @@ clearnode(dns_db_t *db, dns_dbnode_t *node) {
static isc_result_t
cleartree(dns_db_t *db, dns_name_t *name) {
- isc_result_t result;
+ isc_result_t result, answer = ISC_R_SUCCESS;
dns_dbiterator_t *iter = NULL;
dns_dbnode_t *node = NULL;
dns_fixedname_t fnodename;
@@ -1205,12 +1205,22 @@ cleartree(dns_db_t *db, dns_name_t *name) {
while (result == ISC_R_SUCCESS) {
result = dns_dbiterator_current(iter, &node, nodename);
- if (result != ISC_R_SUCCESS && result != DNS_R_NEWORIGIN)
+ if (result == DNS_R_NEWORIGIN)
+ result = ISC_R_SUCCESS;
+ if (result != ISC_R_SUCCESS)
goto cleanup;
+ /*
+ * Are we done?
+ */
if (! dns_name_issubdomain(nodename, name))
goto cleanup;
+ /*
+ * If clearnode fails record and move onto the next node.
+ */
result = clearnode(db, node);
+ if (result != ISC_R_SUCCESS && answer == ISC_R_SUCCESS)
+ answer = result;
dns_db_detachnode(db, &node);
result = dns_dbiterator_next(iter);
}
@@ -1218,12 +1228,14 @@ cleartree(dns_db_t *db, dns_name_t *name) {
cleanup:
if (result == ISC_R_NOMORE || result == ISC_R_NOTFOUND)
result = ISC_R_SUCCESS;
+ if (result != ISC_R_SUCCESS && answer == ISC_R_SUCCESS)
+ answer = result;
if (node != NULL)
dns_db_detachnode(db, &node);
if (iter != NULL)
dns_dbiterator_destroy(&iter);
- return (result);
+ return (answer);
}
isc_result_t
diff --git a/lib/dns/dnssec.c b/lib/dns/dnssec.c
index 33cfd361..3c568c73 100644
--- a/lib/dns/dnssec.c
+++ b/lib/dns/dnssec.c
@@ -16,7 +16,7 @@
*/
/*
- * $Id: dnssec.c,v 1.124 2011-05-06 21:08:33 each Exp $
+ * $Id: dnssec.c,v 1.125 2011-08-26 05:29:48 marka Exp $
*/
/*! \file */
@@ -1705,10 +1705,8 @@ dns_dnssec_updatekeys(dns_dnsseckeylist_t *keys, dns_dnsseckeylist_t *newkeys,
shortest = thisttl;
}
- if (shortest != 0) {
- found_ttl = ISC_TRUE;
+ if (shortest != 0)
ttl = shortest;
- }
}
/*
diff --git a/lib/dns/dst_api.c b/lib/dns/dst_api.c
index c8e4e897..5a490c05 100644
--- a/lib/dns/dst_api.c
+++ b/lib/dns/dst_api.c
@@ -31,7 +31,7 @@
/*
* Principal Author: Brian Wellington
- * $Id: dst_api.c,v 1.63 2011-08-18 23:46:34 tbox Exp $
+ * $Id: dst_api.c,v 1.64 2011-09-05 18:00:22 each Exp $
*/
/*! \file */
@@ -1579,7 +1579,7 @@ write_public_key(const dst_key_t *key, int type, const char *directory) {
fprintf(fp, "%d ", key->key_ttl);
isc_buffer_usedregion(&classb, &r);
- if ((unsigned)isc_util_fwrite(r.base, 1, r.length, fp) != r.length)
+ if ((unsigned) fwrite(r.base, 1, r.length, fp) != r.length)
ret = DST_R_WRITEERROR;
if ((type & DST_TYPE_KEY) != 0)
@@ -1588,7 +1588,7 @@ write_public_key(const dst_key_t *key, int type, const char *directory) {
fprintf(fp, " DNSKEY ");
isc_buffer_usedregion(&textb, &r);
- if ((unsigned)isc_util_fwrite(r.base, 1, r.length, fp) != r.length)
+ if ((unsigned) fwrite(r.base, 1, r.length, fp) != r.length)
ret = DST_R_WRITEERROR;
fputc('\n', fp);
diff --git a/lib/dns/gssapictx.c b/lib/dns/gssapictx.c
index a6c5f450..938671c1 100644
--- a/lib/dns/gssapictx.c
+++ b/lib/dns/gssapictx.c
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: gssapictx.c,v 1.28 2011-04-07 23:03:22 marka Exp $ */
+/* $Id: gssapictx.c,v 1.29 2011-08-29 06:33:25 marka Exp $ */
#include <config.h>
@@ -135,6 +135,7 @@ name_to_gbuffer(dns_name_t *name, isc_buffer_t *buffer,
}
result = dns_name_toprincipal(namep, buffer);
+ RUNTIME_CHECK(result == ISC_R_SUCCESS);
isc_buffer_putuint8(buffer, 0);
isc_buffer_usedregion(buffer, &r);
REGION_TO_GBUFFER(r, *gbuffer);
@@ -309,7 +310,7 @@ dst_gssapi_acquirecred(dns_name_t *name, isc_boolean_t initiate,
if (gret != GSS_S_COMPLETE) {
gss_log(3, "failed to acquire %s credentials for %s: %s",
initiate ? "initiate" : "accept",
- (char *)gnamebuf.value,
+ (gname != NULL) ? (char *)gnamebuf.value : "?",
gss_error_tostring(gret, minor, buf, sizeof(buf)));
check_config((char *)array);
return (ISC_R_FAILURE);
@@ -317,12 +318,14 @@ dst_gssapi_acquirecred(dns_name_t *name, isc_boolean_t initiate,
gss_log(4, "acquired %s credentials for %s",
initiate ? "initiate" : "accept",
- (char *)gnamebuf.value);
+ (gname != NULL) ? (char *)gnamebuf.value : "?");
log_cred(*cred);
return (ISC_R_SUCCESS);
#else
+ REQUIRE(cred != NULL && *cred == NULL);
+
UNUSED(name);
UNUSED(initiate);
UNUSED(cred);
@@ -342,13 +345,15 @@ dst_gssapi_identitymatchesrealmkrb5(dns_name_t *signer, dns_name_t *name,
char *sname;
char *rname;
isc_buffer_t buffer;
+ isc_result_t result;
/*
* It is far, far easier to write the names we are looking at into
* a string, and do string operations on them.
*/
isc_buffer_init(&buffer, sbuf, sizeof(sbuf));
- dns_name_toprincipal(signer, &buffer);
+ result = dns_name_toprincipal(signer, &buffer);
+ RUNTIME_CHECK(result == ISC_R_SUCCESS);
isc_buffer_putuint8(&buffer, 0);
if (name != NULL)
dns_name_format(name, nbuf, sizeof(nbuf));
@@ -414,13 +419,15 @@ dst_gssapi_identitymatchesrealmms(dns_name_t *signer, dns_name_t *name,
char *nname;
char *rname;
isc_buffer_t buffer;
+ isc_result_t result;
/*
* It is far, far easier to write the names we are looking at into
* a string, and do string operations on them.
*/
isc_buffer_init(&buffer, sbuf, sizeof(sbuf));
- dns_name_toprincipal(signer, &buffer);
+ result = dns_name_toprincipal(signer, &buffer);
+ RUNTIME_CHECK(result == ISC_R_SUCCESS);
isc_buffer_putuint8(&buffer, 0);
if (name != NULL)
dns_name_format(name, nbuf, sizeof(nbuf));
@@ -664,8 +671,7 @@ dst_gssapi_acceptctx(gss_cred_id_t cred,
gss_log(3, "failed "
"gsskrb5_register_acceptor_identity(%s): %s",
gssapi_keytab,
- gss_error_tostring(gret, minor,
- buf, sizeof(buf)));
+ gss_error_tostring(gret, 0, buf, sizeof(buf)));
return (DNS_R_INVALIDTKEY);
}
#else
diff --git a/lib/dns/include/dns/events.h b/lib/dns/include/dns/events.h
index d9858336..88c2719c 100644
--- a/lib/dns/include/dns/events.h
+++ b/lib/dns/include/dns/events.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004-2007, 2009, 2010 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004-2007, 2009-2011 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 1999-2002 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: events.h,v 1.56 2010-12-21 03:11:42 marka Exp $ */
+/* $Id: events.h,v 1.59 2011-09-02 21:15:36 each Exp $ */
#ifndef DNS_EVENTS_H
#define DNS_EVENTS_H 1
@@ -74,6 +74,9 @@
#define DNS_EVENT_CLIENTREQDONE (ISC_EVENTCLASS_DNS + 44)
#define DNS_EVENT_ADBGROWENTRIES (ISC_EVENTCLASS_DNS + 45)
#define DNS_EVENT_ADBGROWNAMES (ISC_EVENTCLASS_DNS + 46)
+#define DNS_EVENT_ZONESECURESERIAL (ISC_EVENTCLASS_DNS + 47)
+#define DNS_EVENT_ZONESECUREDB (ISC_EVENTCLASS_DNS + 48)
+#define DNS_EVENT_ZONELOAD (ISC_EVENTCLASS_DNS + 49)
#define DNS_EVENT_FIRSTEVENT (ISC_EVENTCLASS_DNS + 0)
#define DNS_EVENT_LASTEVENT (ISC_EVENTCLASS_DNS + 65535)
diff --git a/lib/dns/include/dns/journal.h b/lib/dns/include/dns/journal.h
index 28a7dbe3..c5024a37 100644
--- a/lib/dns/include/dns/journal.h
+++ b/lib/dns/include/dns/journal.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004-2009 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004-2009, 2011 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 1999-2001 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: journal.h,v 1.37 2009-11-04 23:48:18 tbox Exp $ */
+/* $Id: journal.h,v 1.39 2011-08-30 23:46:53 tbox Exp $ */
#ifndef DNS_JOURNAL_H
#define DNS_JOURNAL_H 1
@@ -46,6 +46,10 @@
***/
#define DNS_JOURNALOPT_RESIGN 0x00000001
+#define DNS_JOURNAL_READ 0x00000000 /* ISC_FALSE */
+#define DNS_JOURNAL_CREATE 0x00000001 /* ISC_TRUE */
+#define DNS_JOURNAL_WRITE 0x00000002
+
/***
*** Types
***/
@@ -95,16 +99,15 @@ dns_db_createsoatuple(dns_db_t *db, dns_dbversion_t *ver, isc_mem_t *mctx,
*/
isc_result_t
-dns_journal_open(isc_mem_t *mctx, const char *filename, isc_boolean_t write,
+dns_journal_open(isc_mem_t *mctx, const char *filename, unsigned int mode,
dns_journal_t **journalp);
/*%<
* Open the journal file 'filename' and create a dns_journal_t object for it.
*
- * If 'write' is ISC_TRUE, the journal is open for writing. If it does
- * not exist, it is created.
- *
- * If 'write' is ISC_FALSE, the journal is open for reading. If it does
- * not exist, ISC_R_NOTFOUND is returned.
+ * DNS_JOURNAL_CREATE open the journal for reading and writing and create
+ * the journal if it does not exist.
+ * DNS_JOURNAL_WRITE open the journal for readinge and writing.
+ * DNS_JOURNAL_READ open the journal for reading only.
*/
void
@@ -284,6 +287,14 @@ dns_journal_compact(isc_mem_t *mctx, char *filename, isc_uint32_t serial,
* exists and is non-empty 'serial' must exist in the journal.
*/
+isc_uint32_t
+dns_journal_get_bitws(dns_journal_t *j);
+void
+dns_journal_set_bitws(dns_journal_t *j, isc_uint32_t bitws);
+/*%<
+ * Get and set bump in the wire serial.
+ */
+
ISC_LANG_ENDDECLS
#endif /* DNS_JOURNAL_H */
diff --git a/lib/dns/include/dns/update.h b/lib/dns/include/dns/update.h
index cf5d0146..31239999 100644
--- a/lib/dns/include/dns/update.h
+++ b/lib/dns/include/dns/update.h
@@ -14,7 +14,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: update.h,v 1.2 2011-07-01 02:25:48 marka Exp $ */
+/* $Id: update.h,v 1.5 2011-08-30 23:46:53 tbox Exp $ */
#ifndef DNS_UPDATE_H
#define DNS_UPDATE_H 1
@@ -28,6 +28,13 @@
#include <isc/lang.h>
#include <dns/types.h>
+#include <dns/diff.h>
+
+typedef struct {
+ void (*func)(void *arg, dns_zone_t *zone, int level,
+ const char *message);
+ void *arg;
+} dns_update_log_t;
ISC_LANG_BEGINDECLS
@@ -47,6 +54,11 @@ dns_update_soaserial(isc_uint32_t serial, dns_updatemethod_t method);
* if not.
*/
+isc_result_t
+dns_update_signatures(dns_update_log_t *log, dns_zone_t *zone, dns_db_t *db,
+ dns_dbversion_t *oldver, dns_dbversion_t *newver,
+ dns_diff_t *diff, isc_uint32_t sigvalidityinterval);
+
ISC_LANG_ENDDECLS
#endif /* DNS_UPDATE_H */
diff --git a/lib/dns/include/dns/view.h b/lib/dns/include/dns/view.h
index 9b6e2e66..690ca7a5 100644
--- a/lib/dns/include/dns/view.h
+++ b/lib/dns/include/dns/view.h
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: view.h,v 1.134 2011-08-02 20:36:13 each Exp $ */
+/* $Id: view.h,v 1.136 2011-09-06 22:29:33 smann Exp $ */
#ifndef DNS_VIEW_H
#define DNS_VIEW_H 1
@@ -76,6 +76,7 @@
#include <dns/rdatastruct.h>
#include <dns/rpz.h>
#include <dns/types.h>
+#include <dns/zt.h>
ISC_LANG_BEGINDECLS
@@ -141,7 +142,6 @@ struct dns_view {
dns_rbt_t * answeracl_exclude;
dns_rbt_t * denyanswernames;
dns_rbt_t * answernames_exclude;
- isc_boolean_t requestixfr;
isc_boolean_t provideixfr;
isc_boolean_t requestnsid;
dns_ttl_t maxcachettl;
@@ -728,14 +728,21 @@ dns_view_load(dns_view_t *view, isc_boolean_t stop);
isc_result_t
dns_view_loadnew(dns_view_t *view, isc_boolean_t stop);
+
+isc_result_t
+dns_view_asyncload(dns_view_t *view, dns_zt_allloaded_t callback, void *arg);
/*%<
* Load zones attached to this view. dns_view_load() loads
* all zones whose master file has changed since the last
* load; dns_view_loadnew() loads only zones that have never
* been loaded.
*
+ * dns_view_asyncload() loads zones asynchronously. When all zones
+ * in the view have finished loading, 'callback' is called with argument
+ * 'arg' to inform the caller.
+ *
* If 'stop' is ISC_TRUE, stop on the first error and return it.
- * If 'stop' is ISC_FALSE, ignore errors.
+ * If 'stop' is ISC_FALSE (or we are loading asynchronously), ignore errors.
*
* Requires:
*
diff --git a/lib/dns/include/dns/zone.h b/lib/dns/include/dns/zone.h
index 6e4e2e3f..1d8e434c 100644
--- a/lib/dns/include/dns/zone.h
+++ b/lib/dns/include/dns/zone.h
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: zone.h,v 1.191 2011-07-06 01:36:32 each Exp $ */
+/* $Id: zone.h,v 1.194 2011-09-06 22:29:33 smann Exp $ */
#ifndef DNS_ZONE_H
#define DNS_ZONE_H 1
@@ -35,6 +35,7 @@
#include <dns/masterdump.h>
#include <dns/rdatastruct.h>
#include <dns/types.h>
+#include <dns/zt.h>
typedef enum {
dns_zone_none,
@@ -44,7 +45,7 @@ typedef enum {
dns_zone_staticstub,
dns_zone_key,
dns_zone_dlz,
- dns_zone_redirect,
+ dns_zone_redirect
} dns_zonetype_t;
#define DNS_ZONEOPT_SERVERS 0x00000001U /*%< perform server checks */
@@ -287,6 +288,7 @@ dns_zone_loadnew(dns_zone_t *zone);
isc_result_t
dns_zone_loadandthaw(dns_zone_t *zone);
+
/*%<
* Cause the database to be loaded from its backing store.
* Confirm that the minimum requirements for the zone type are
@@ -311,6 +313,25 @@ dns_zone_loadandthaw(dns_zone_t *zone);
*\li Any result value from dns_db_load().
*/
+isc_result_t
+dns_zone_asyncload(dns_zone_t *zone, dns_zt_zoneloaded_t done, void *arg);
+/*%<
+ * Cause the database to be loaded from its backing store asynchronously.
+ * Other zone maintenance functions are suspended until this is complete.
+ * When finished, 'done' is called to inform the caller, with 'arg' as
+ * its first argument and 'zone' as its second. (Normally, 'arg' is
+ * expected to point to the zone table but is left undefined for testing
+ * purposes.)
+ */
+
+isc_boolean_t
+dns__zone_loadpending(dns_zone_t *zone);
+/*%<
+ * Indicates whether the zone is waiting to be loaded asynchronously.
+ * (Not currently intended for use outside of this module and associated
+ * tests.)
+ */
+
void
dns_zone_attach(dns_zone_t *source, dns_zone_t **target);
/*%<
@@ -1428,6 +1449,14 @@ dns_zonemgr_forcemaint(dns_zonemgr_t *zmgr);
*/
void
+dns__zonemgr_run(isc_task_t *task, isc_event_t *event);
+/*%<
+ * Event handler to call dns_zonemgr_forcemaint(); used to start
+ * zone operations from a unit test. Not intended for use outside
+ * libdns or related tests.
+ */
+
+void
dns_zonemgr_resumexfrs(dns_zonemgr_t *zmgr);
/*%<
* Attempt to start any stalled zone transfers.
@@ -1903,6 +1932,25 @@ dns_zone_setrefreshkeyinterval(dns_zone_t *zone, isc_uint32_t interval);
* \li 'zone' to be valid.
*/
+isc_boolean_t
+dns_zone_getrequestixfr(dns_zone_t *zone);
+/*%
+ * Returns the true/false value of the request-ixfr option in the zone.
+ *
+ * Requires:
+ * \li 'zone' to be valid.
+ */
+
+void
+dns_zone_setrequestixfr(dns_zone_t *zone, isc_boolean_t flag);
+/*%
+ * Sets the request-ixfr option for the zone. Either true or false. The
+ * default value is determined by the setting of this option in the view.
+ *
+ * Requires:
+ * \li 'zone' to be valid.
+ */
+
void
dns_zone_setserialupdatemethod(dns_zone_t *zone, dns_updatemethod_t method);
/*%
@@ -1923,6 +1971,13 @@ dns_zone_getserialupdatemethod(dns_zone_t *zone);
* Requires:
* \li 'zone' to be valid.
*/
+
+void
+dns_zone_link(dns_zone_t *zone, dns_zone_t *raw);
+
+void
+dns_zone_getraw(dns_zone_t *zone, dns_zone_t **raw);
+
ISC_LANG_ENDDECLS
#endif /* DNS_ZONE_H */
diff --git a/lib/dns/include/dns/zt.h b/lib/dns/include/dns/zt.h
index 6e5ef5c6..e636fc68 100644
--- a/lib/dns/include/dns/zt.h
+++ b/lib/dns/include/dns/zt.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004-2007 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004-2007, 2011 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 1999-2002 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: zt.h,v 1.38 2007-06-19 23:47:17 tbox Exp $ */
+/* $Id: zt.h,v 1.40 2011-09-02 23:46:32 tbox Exp $ */
#ifndef DNS_ZT_H
#define DNS_ZT_H 1
@@ -30,6 +30,21 @@
ISC_LANG_BEGINDECLS
+typedef isc_result_t
+(*dns_zt_allloaded_t)(void *arg);
+/*%<
+ * Method prototype: when all pending zone loads are complete,
+ * the zone table can inform the caller via a callback function with
+ * this signature.
+ */
+
+typedef isc_result_t
+(*dns_zt_zoneloaded_t)(dns_zt_t *zt, dns_zone_t *zone, isc_task_t *task);
+/*%<
+ * Method prototype: when a zone finishes loading, the zt object
+ * can be informed via a callback function with this signature.
+ */
+
isc_result_t
dns_zt_create(isc_mem_t *mctx, dns_rdataclass_t rdclass, dns_zt_t **zt);
/*%<
@@ -134,6 +149,9 @@ dns_zt_load(dns_zt_t *zt, isc_boolean_t stop);
isc_result_t
dns_zt_loadnew(dns_zt_t *zt, isc_boolean_t stop);
+
+isc_result_t
+dns_zt_asyncload(dns_zt_t *zt, dns_zt_allloaded_t alldone, void *arg);
/*%<
* Load all zones in the table. If 'stop' is ISC_TRUE,
* stop on the first error and return it. If 'stop'
@@ -142,6 +160,10 @@ dns_zt_loadnew(dns_zt_t *zt, isc_boolean_t stop);
* dns_zt_loadnew() only loads zones that are not yet loaded.
* dns_zt_load() also loads zones that are already loaded and
* and whose master file has changed since the last load.
+ * dns_zt_asyncload() loads zones asynchronously; when all
+ * zones in the zone table have finished loaded (or failed due
+ * to errors), the caller is informed by calling 'alldone'
+ * with an argument of 'arg'.
*
* Requires:
* \li 'zt' to be valid
@@ -178,6 +200,16 @@ dns_zt_apply2(dns_zt_t *zt, isc_boolean_t stop, isc_result_t *sub,
* any error code from 'action'.
*/
+isc_boolean_t
+dns_zt_loadspending(dns_zt_t *zt);
+/*%<
+ * Returns ISC_TRUE if and only if there are zones still waiting to
+ * be loaded in zone table 'zt'.
+ *
+ * Requires:
+ * \li 'zt' to be valid.
+ */
+
ISC_LANG_ENDDECLS
#endif /* DNS_ZT_H */
diff --git a/lib/dns/journal.c b/lib/dns/journal.c
index c6350d63..16fe541b 100644
--- a/lib/dns/journal.c
+++ b/lib/dns/journal.c
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: journal.c,v 1.114 2011-03-12 04:59:48 tbox Exp $ */
+/* $Id: journal.c,v 1.116 2011-08-30 23:46:52 tbox Exp $ */
#include <config.h>
@@ -213,6 +213,8 @@ typedef union {
journal_rawpos_t end;
/*% Number of index entries following the header. */
unsigned char index_size[4];
+ /*% Bump in the wire serial. */
+ unsigned char bitws[4];
} h;
/* Pad the header to a fixed size. */
unsigned char pad[JOURNAL_HEADER_SIZE];
@@ -252,6 +254,7 @@ typedef struct {
journal_pos_t begin;
journal_pos_t end;
isc_uint32_t index_size;
+ isc_uint32_t bitws;
} journal_header_t;
/*%
@@ -284,7 +287,7 @@ typedef struct {
*/
static journal_header_t
-initial_journal_header = { ";BIND LOG V9\n", { 0, 0 }, { 0, 0 }, 0 };
+initial_journal_header = { ";BIND LOG V9\n", { 0, 0 }, { 0, 0 }, 0, 0 };
#define JOURNAL_EMPTY(h) ((h)->begin.offset == (h)->end.offset)
@@ -292,7 +295,8 @@ typedef enum {
JOURNAL_STATE_INVALID,
JOURNAL_STATE_READ,
JOURNAL_STATE_WRITE,
- JOURNAL_STATE_TRANSACTION
+ JOURNAL_STATE_TRANSACTION,
+ JOURNAL_STATE_BITWS
} journal_state_t;
struct dns_journal {
@@ -353,6 +357,7 @@ journal_header_decode(journal_rawheader_t *raw, journal_header_t *cooked) {
journal_pos_decode(&raw->h.begin, &cooked->begin);
journal_pos_decode(&raw->h.end, &cooked->end);
cooked->index_size = decode_uint32(raw->h.index_size);
+ cooked->bitws = decode_uint32(raw->h.bitws);
}
static void
@@ -363,6 +368,7 @@ journal_header_encode(journal_header_t *cooked, journal_rawheader_t *raw) {
journal_pos_encode(&raw->h.begin, &cooked->begin);
journal_pos_encode(&raw->h.end, &cooked->end);
encode_uint32(cooked->index_size, raw->h.index_size);
+ encode_uint32(cooked->bitws, raw->h.bitws);
}
/*
@@ -667,13 +673,17 @@ journal_open(isc_mem_t *mctx, const char *filename, isc_boolean_t write,
}
isc_result_t
-dns_journal_open(isc_mem_t *mctx, const char *filename, isc_boolean_t write,
+dns_journal_open(isc_mem_t *mctx, const char *filename, unsigned int mode,
dns_journal_t **journalp) {
isc_result_t result;
int namelen;
char backup[1024];
+ isc_boolean_t write, create;
- result = journal_open(mctx, filename, write, write, journalp);
+ create = ISC_TF(mode & DNS_JOURNAL_CREATE);
+ write = ISC_TF(mode & (DNS_JOURNAL_WRITE|DNS_JOURNAL_CREATE));
+
+ result = journal_open(mctx, filename, write, create, journalp);
if (result == ISC_R_NOTFOUND) {
namelen = strlen(filename);
if (namelen > 4 && strcmp(filename + namelen - 4, ".jnl") == 0)
@@ -944,7 +954,8 @@ dns_journal_begin_transaction(dns_journal_t *j) {
journal_rawxhdr_t hdr;
REQUIRE(DNS_JOURNAL_VALID(j));
- REQUIRE(j->state == JOURNAL_STATE_WRITE);
+ REQUIRE(j->state == JOURNAL_STATE_WRITE ||
+ j->state == JOURNAL_STATE_BITWS);
/*
* Find the file offset where the new transaction should
@@ -1067,7 +1078,21 @@ dns_journal_commit(dns_journal_t *j) {
journal_rawheader_t rawheader;
REQUIRE(DNS_JOURNAL_VALID(j));
- REQUIRE(j->state == JOURNAL_STATE_TRANSACTION);
+ REQUIRE(j->state == JOURNAL_STATE_TRANSACTION ||
+ j->state == JOURNAL_STATE_BITWS);
+
+ /*
+ * Just write out a updated header.
+ */
+ if (j->state == JOURNAL_STATE_BITWS) {
+ CHECK(journal_fsync(j));
+ journal_header_encode(&j->header, &rawheader);
+ CHECK(journal_seek(j, 0));
+ CHECK(journal_write(j, &rawheader, sizeof(rawheader)));
+ CHECK(journal_fsync(j));
+ j->state = JOURNAL_STATE_WRITE;
+ return (ISC_R_SUCCESS);
+ }
/*
* Perform some basic consistency checks.
@@ -1124,19 +1149,24 @@ dns_journal_commit(dns_journal_t *j) {
*/
CHECK(journal_fsync(j));
- /*
- * Update the transaction header.
- */
- CHECK(journal_seek(j, j->x.pos[0].offset));
- CHECK(journal_write_xhdr(j, (j->x.pos[1].offset - j->x.pos[0].offset) -
- sizeof(journal_rawxhdr_t),
- j->x.pos[0].serial, j->x.pos[1].serial));
+ if (j->state == JOURNAL_STATE_TRANSACTION) {
+ isc_offset_t offset;
+ offset = (j->x.pos[1].offset - j->x.pos[0].offset) -
+ sizeof(journal_rawxhdr_t);
+ /*
+ * Update the transaction header.
+ */
+ CHECK(journal_seek(j, j->x.pos[0].offset));
+ CHECK(journal_write_xhdr(j, offset, j->x.pos[0].serial,
+ j->x.pos[1].serial));
+ }
/*
* Update the journal header.
*/
if (JOURNAL_EMPTY(&j->header)) {
j->header.begin = j->x.pos[0];
+ j->header.bitws = j->header.begin.serial;
}
j->header.end = j->x.pos[1];
journal_header_encode(&j->header, &rawheader);
@@ -1415,6 +1445,7 @@ dns_journal_print(isc_mem_t *mctx, const char *filename, FILE *file) {
return (result);
}
+ fprintf(file, "BITWS = %u\n", j->header.bitws);
dns_diff_init(j->mctx, &diff);
/*
@@ -1497,14 +1528,33 @@ dns_journal_print(isc_mem_t *mctx, const char *filename, FILE *file) {
/*
* Miscellaneous accessors.
*/
-isc_uint32_t dns_journal_first_serial(dns_journal_t *j) {
+isc_uint32_t
+dns_journal_first_serial(dns_journal_t *j) {
return (j->header.begin.serial);
}
-isc_uint32_t dns_journal_last_serial(dns_journal_t *j) {
+isc_uint32_t
+dns_journal_last_serial(dns_journal_t *j) {
return (j->header.end.serial);
}
+void
+dns_journal_set_bitws(dns_journal_t *j, isc_uint32_t bitws) {
+
+ REQUIRE(j->state == JOURNAL_STATE_WRITE ||
+ j->state == JOURNAL_STATE_BITWS ||
+ j->state == JOURNAL_STATE_TRANSACTION);
+
+ j->header.bitws = bitws;
+ if (j->state == JOURNAL_STATE_WRITE)
+ j->state = JOURNAL_STATE_BITWS;
+}
+
+isc_uint32_t
+dns_journal_get_bitws(dns_journal_t *j) {
+ return (j->header.bitws);
+}
+
/**************************************************************************/
/*
* Iteration support.
@@ -2145,6 +2195,7 @@ dns_journal_compact(isc_mem_t *mctx, char *filename, isc_uint32_t serial,
new->header.begin.offset = indexend;
new->header.end.serial = j->header.end.serial;
new->header.end.offset = indexend + copy_length;
+ new->header.bitws = j->header.bitws;
/*
* Update the journal header.
diff --git a/lib/dns/masterdump.c b/lib/dns/masterdump.c
index 8d911c10..61a9cfc1 100644
--- a/lib/dns/masterdump.c
+++ b/lib/dns/masterdump.c
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: masterdump.c,v 1.108 2011-06-08 22:13:50 each Exp $ */
+/* $Id: masterdump.c,v 1.109 2011-09-07 19:11:13 each Exp $ */
/*! \file */
@@ -419,12 +419,11 @@ rdataset_totext(dns_rdataset_t *rdataset,
rdataset->attributes |= DNS_RDATASETATTR_LOADORDER;
result = dns_rdataset_first(rdataset);
- REQUIRE(result == ISC_R_SUCCESS);
current_ttl = ctx->current_ttl;
current_ttl_valid = ctx->current_ttl_valid;
- do {
+ while (result == ISC_R_SUCCESS) {
column = 0;
/*
@@ -550,7 +549,7 @@ rdataset_totext(dns_rdataset_t *rdataset,
first = ISC_FALSE;
result = dns_rdataset_next(rdataset);
- } while (result == ISC_R_SUCCESS);
+ }
if (result != ISC_R_NOMORE)
return (result);
diff --git a/lib/dns/rbt.c b/lib/dns/rbt.c
index 1b4ff3ac..38f3fc15 100644
--- a/lib/dns/rbt.c
+++ b/lib/dns/rbt.c
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: rbt.c,v 1.148 2011-03-12 04:59:48 tbox Exp $ */
+/* $Id: rbt.c,v 1.149 2011-08-25 05:56:50 marka Exp $ */
/*! \file */
@@ -1929,6 +1929,8 @@ dns_rbt_deletefromlevel(dns_rbtnode_t *delete, dns_rbtnode_t **rootp) {
sibling = RIGHT(parent);
}
+ INSIST(sibling != NULL);
+
if (IS_BLACK(LEFT(sibling)) &&
IS_BLACK(RIGHT(sibling))) {
MAKE_RED(sibling);
@@ -1965,6 +1967,8 @@ dns_rbt_deletefromlevel(dns_rbtnode_t *delete, dns_rbtnode_t **rootp) {
sibling = LEFT(parent);
}
+ INSIST(sibling != NULL);
+
if (IS_BLACK(LEFT(sibling)) &&
IS_BLACK(RIGHT(sibling))) {
MAKE_RED(sibling);
diff --git a/lib/dns/rdataset.c b/lib/dns/rdataset.c
index 93f67f9c..979abb56 100644
--- a/lib/dns/rdataset.c
+++ b/lib/dns/rdataset.c
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: rdataset.c,v 1.90 2011-06-08 22:13:50 each Exp $ */
+/* $Id: rdataset.c,v 1.91 2011-08-25 06:28:11 marka Exp $ */
/*! \file */
@@ -442,11 +442,11 @@ towiresorted(dns_rdataset_t *rdataset, const dns_name_t *owner_name,
j = val % count;
for (i = 0; i < count; i++) {
if (order != NULL)
- sorted[j].key = (*order)(&shuffled[i],
+ sorted[i].key = (*order)(&shuffled[j],
order_arg);
else
- sorted[j].key = 0; /* Unused */
- sorted[j].rdata = &shuffled[i];
+ sorted[i].key = 0; /* Unused */
+ sorted[i].rdata = &shuffled[j];
j++;
if (j == count)
j = 0; /* Wrap around. */
diff --git a/lib/dns/spnego.c b/lib/dns/spnego.c
index f71d6cc6..8f1b067c 100644
--- a/lib/dns/spnego.c
+++ b/lib/dns/spnego.c
@@ -14,7 +14,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: spnego.c,v 1.18 2011-04-04 11:09:11 marka Exp $ */
+/* $Id: spnego.c,v 1.20 2011-08-29 04:15:50 marka Exp $ */
/*! \file
* \brief
@@ -948,8 +948,9 @@ der_match_tag_and_length(const unsigned char *p, size_t len,
e = der_get_length(p, len, length_ret, &l);
if (e)
return (e);
- p += l;
+ /* p += l; */
len -= l;
+ POST(len);
ret += l;
if (size)
*size = ret;
@@ -980,6 +981,7 @@ decode_enumerated(const unsigned char *p, size_t len, void *num, size_t *size)
return (e);
p += l;
len -= l;
+ POST(p); POST(len);
ret += l;
if (size)
*size = ret;
@@ -1016,6 +1018,7 @@ decode_octet_string(const unsigned char *p, size_t len,
return (e);
p += l;
len -= l;
+ POST(p); POST(len);
ret += l;
if (size)
*size = ret;
@@ -1052,6 +1055,7 @@ decode_oid(const unsigned char *p, size_t len,
return (e);
p += l;
len -= l;
+ POST(p); POST(len);
ret += l;
if (size)
*size = ret;
@@ -1198,6 +1202,7 @@ der_put_octet_string(unsigned char *p, size_t len,
return (ASN1_OVERFLOW);
p -= data->length;
len -= data->length;
+ POST(len);
memcpy(p + 1, data->data, data->length);
*size = data->length;
return (0);
@@ -1263,6 +1268,7 @@ der_put_length_and_tag(unsigned char *p, size_t len, size_t len_val,
return (e);
p -= l;
len -= l;
+ POST(p); POST(len);
ret += l;
*size = ret;
return (0);
@@ -1287,6 +1293,7 @@ encode_enumerated(unsigned char *p, size_t len, const void *data, size_t *size)
return (e);
p -= l;
len -= l;
+ POST(p); POST(len);
ret += l;
*size = ret;
return (0);
@@ -1311,6 +1318,7 @@ encode_octet_string(unsigned char *p, size_t len,
return (e);
p -= l;
len -= l;
+ POST(p); POST(len);
ret += l;
*size = ret;
return (0);
@@ -1335,6 +1343,7 @@ encode_oid(unsigned char *p, size_t len,
return (e);
p -= l;
len -= l;
+ POST(p); POST(len);
ret += l;
*size = ret;
return (0);
diff --git a/lib/dns/tests/Makefile.in b/lib/dns/tests/Makefile.in
index 0056d9d4..bf18e285 100644
--- a/lib/dns/tests/Makefile.in
+++ b/lib/dns/tests/Makefile.in
@@ -12,7 +12,7 @@
# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
# PERFORMANCE OF THIS SOFTWARE.
-# $Id: Makefile.in,v 1.7 2011-08-23 01:29:38 each Exp $
+# $Id: Makefile.in,v 1.8 2011-09-02 21:15:37 each Exp $
srcdir = @srcdir@
VPATH = @srcdir@
@@ -37,12 +37,12 @@ DNSDEPLIBS = ../libdns.@A@
LIBS = @LIBS@ @ATFLIBS@
OBJS = dnstest.@O@
-SRCS = dnstest.c master_test.c time_test.c update_test.c \
- zonemgr_test.c dbiterator_test.c
+SRCS = dnstest.c master_test.c dbiterator_test.c time_test.c \
+ update_test.c zonemgr_test.c zt_test.c
SUBDIRS =
-TARGETS = master_test@EXEEXT@ time_test@EXEEXT@ update_test@EXEEXT@ \
- zonemgr_test@EXEEXT@ dbiterator_test@EXEEXT@
+TARGETS = master_test@EXEEXT@ dbiterator_test@EXEEXT@ time_test@EXEEXT@ \
+ update_test@EXEEXT@ zonemgr_test@EXEEXT@ zt_test@EXEEXT@
@BIND9_MAKE_RULES@
@@ -71,6 +71,11 @@ dbiterator_test@EXEEXT@: dbiterator_test.@O@ dnstest.@O@ ${ISCDEPLIBS} ${DNSDEPL
dbiterator_test.@O@ dnstest.@O@ ${DNSLIBS} \
${ISCLIBS} ${LIBS}
+zt_test@EXEEXT@: zt_test.@O@ dnstest.@O@ ${ISCDEPLIBS} ${DNSDEPLIBS}
+ ${LIBTOOL_MODE_LINK} ${PURIFY} ${CC} ${CFLAGS} ${LDFLAGS} -o $@ \
+ zt_test.@O@ dnstest.@O@ ${DNSLIBS} \
+ ${ISCLIBS} ${LIBS}
+
unit::
sh ${top_srcdir}/unit/unittest.sh
diff --git a/lib/dns/tests/dbiterator_test.c b/lib/dns/tests/dbiterator_test.c
index b8787a9e..12af6908 100644
--- a/lib/dns/tests/dbiterator_test.c
+++ b/lib/dns/tests/dbiterator_test.c
@@ -14,7 +14,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: dbiterator_test.c,v 1.4 2011-08-23 23:54:00 tbox Exp $ */
+/* $Id: dbiterator_test.c,v 1.5 2011-08-29 23:44:07 marka Exp $ */
/*! \file */
@@ -161,6 +161,9 @@ test_walk(const atf_tc_t *tc) {
result == ISC_R_SUCCESS;
result = dns_dbiterator_next(iter)) {
result = dns_dbiterator_current(iter, &node, name);
+ if (result == DNS_R_NEWORIGIN)
+ result = ISC_R_SUCCESS;
+ ATF_REQUIRE_EQ(result, ISC_R_SUCCESS);
dns_db_detachnode(db, &node);
i++;
}
@@ -221,6 +224,9 @@ static void test_reverse(const atf_tc_t *tc) {
result == ISC_R_SUCCESS;
result = dns_dbiterator_prev(iter)) {
result = dns_dbiterator_current(iter, &node, name);
+ if (result == DNS_R_NEWORIGIN)
+ result = ISC_R_SUCCESS;
+ ATF_CHECK_EQ(result, ISC_R_SUCCESS);
dns_db_detachnode(db, &node);
i++;
}
@@ -285,6 +291,9 @@ static void test_seek(const atf_tc_t *tc) {
while (result == ISC_R_SUCCESS) {
result = dns_dbiterator_current(iter, &node, name);
+ if (result == DNS_R_NEWORIGIN)
+ result = ISC_R_SUCCESS;
+ ATF_CHECK_EQ(result, ISC_R_SUCCESS);
dns_db_detachnode(db, &node);
result = dns_dbiterator_next(iter);
i++;
diff --git a/lib/dns/tests/dnstest.c b/lib/dns/tests/dnstest.c
index 300a429b..019154ab 100644
--- a/lib/dns/tests/dnstest.c
+++ b/lib/dns/tests/dnstest.c
@@ -14,12 +14,15 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: dnstest.c,v 1.4 2011-07-06 01:36:32 each Exp $ */
+/* $Id: dnstest.c,v 1.7 2011-09-03 19:22:43 each Exp $ */
/*! \file */
#include <config.h>
+#include <time.h>
+#include <unistd.h>
+
#include <isc/app.h>
#include <isc/buffer.h>
#include <isc/entropy.h>
@@ -32,9 +35,12 @@
#include <isc/timer.h>
#include <isc/util.h>
+#include <dns/fixedname.h>
#include <dns/log.h>
#include <dns/name.h>
#include <dns/result.h>
+#include <dns/view.h>
+#include <dns/zone.h>
#include <dst/dst.h>
@@ -44,8 +50,11 @@ isc_mem_t *mctx = NULL;
isc_entropy_t *ectx = NULL;
isc_log_t *lctx = NULL;
isc_taskmgr_t *taskmgr = NULL;
+isc_task_t *maintask = NULL;
isc_timermgr_t *timermgr = NULL;
isc_socketmgr_t *socketmgr = NULL;
+dns_zonemgr_t *zonemgr = NULL;
+isc_boolean_t app_running = ISC_FALSE;
int ncpus;
static isc_boolean_t hash_active = ISC_FALSE, dst_active = ISC_FALSE;
@@ -67,8 +76,12 @@ static isc_logcategory_t categories[] = {
static void
cleanup_managers() {
+ if (app_running)
+ isc_app_finish();
if (socketmgr != NULL)
isc_socketmgr_destroy(&socketmgr);
+ if (maintask != NULL)
+ isc_task_destroy(&maintask);
if (taskmgr != NULL)
isc_taskmgr_destroy(&taskmgr);
if (timermgr != NULL)
@@ -87,6 +100,8 @@ create_managers() {
CHECK(isc_taskmgr_create(mctx, ncpus, 0, &taskmgr));
CHECK(isc_timermgr_create(mctx, &timermgr));
CHECK(isc_socketmgr_create(mctx, &socketmgr));
+ CHECK(isc_task_create(taskmgr, 0, &maintask));
+ CHECK(isc_app_start());
return (ISC_R_SUCCESS);
cleanup:
@@ -134,6 +149,14 @@ dns_test_begin(FILE *logfile, isc_boolean_t start_managers) {
if (start_managers)
CHECK(create_managers());
+ /*
+ * atf-run changes us to a /tmp directory, so tests
+ * that access test data files must first chdir to the proper
+ * location.
+ */
+ if (chdir(TESTS) == -1)
+ CHECK(ISC_R_FAILURE);
+
return (ISC_R_SUCCESS);
cleanup:
@@ -162,3 +185,114 @@ dns_test_end() {
isc_mem_destroy(&mctx);
}
+/*
+ * Create a zone with origin 'name', return a pointer to the zone object in
+ * 'zonep'. If 'view' is set, add the zone to that view; otherwise, create
+ * a new view for the purpose.
+ *
+ * If the created view is going to be needed by the caller subsequently,
+ * then 'keepview' should be set to true; this will prevent the view
+ * from being detached. In this case, the caller is responsible for
+ * detaching the view.
+ */
+isc_result_t
+dns_test_makezone(const char *name, dns_zone_t **zonep, dns_view_t *view,
+ isc_boolean_t keepview)
+{
+ isc_result_t result;
+ dns_zone_t *zone = NULL;
+ isc_buffer_t buffer;
+ dns_fixedname_t fixorigin;
+ dns_name_t *origin;
+
+ if (view == NULL)
+ CHECK(dns_view_create(mctx, dns_rdataclass_in, "view", &view));
+ else if (!keepview)
+ keepview = ISC_TRUE;
+
+ CHECK(dns_zone_create(&zone, mctx));
+
+ isc_buffer_init(&buffer, name, strlen(name));
+ isc_buffer_add(&buffer, strlen(name));
+ dns_fixedname_init(&fixorigin);
+ origin = dns_fixedname_name(&fixorigin);
+ CHECK(dns_name_fromtext(origin, &buffer, dns_rootname, 0, NULL));
+ CHECK(dns_zone_setorigin(zone, origin));
+ dns_zone_setview(zone, view);
+ dns_zone_settype(zone, dns_zone_master);
+ dns_zone_setclass(zone, view->rdclass);
+ dns_view_addzone(view, zone);
+
+ if (!keepview)
+ dns_view_detach(&view);
+
+ *zonep = zone;
+
+ return (ISC_R_SUCCESS);
+
+ cleanup:
+ if (zone != NULL)
+ dns_zone_detach(&zone);
+ if (view != NULL)
+ dns_view_detach(&view);
+ return (result);
+}
+
+isc_result_t
+dns_test_setupzonemgr() {
+ isc_result_t result;
+ REQUIRE(zonemgr == NULL);
+
+ result = dns_zonemgr_create(mctx, taskmgr, timermgr, socketmgr,
+ &zonemgr);
+ return (result);
+}
+
+isc_result_t
+dns_test_managezone(dns_zone_t *zone) {
+ isc_result_t result;
+ REQUIRE(zonemgr != NULL);
+
+ result = dns_zonemgr_setsize(zonemgr, 1);
+ if (result != ISC_R_SUCCESS)
+ return (result);
+
+ result = dns_zonemgr_managezone(zonemgr, zone);
+ return (result);
+}
+
+void
+dns_test_releasezone(dns_zone_t *zone) {
+ REQUIRE(zonemgr != NULL);
+ dns_zonemgr_releasezone(zonemgr, zone);
+}
+
+void
+dns_test_closezonemgr() {
+ REQUIRE(zonemgr != NULL);
+
+ dns_zonemgr_shutdown(zonemgr);
+ dns_zonemgr_detach(&zonemgr);
+}
+
+/*
+ * Sleep for 'usec' microseconds.
+ */
+void
+dns_test_nap(isc_uint32_t usec) {
+#ifdef HAVE_NANOSLEEP
+ struct timespec ts;
+
+ ts.tv_sec = usec / 1000000;
+ ts.tv_nsec = (usec % 1000000) * 1000;
+ nanosleep(&ts, NULL);
+#elif HAVE_USLEEP
+ usleep(usec);
+#else
+ /*
+ * No fractional-second sleep function is available, so we
+ * round up to the nearest second and sleep instead
+ */
+ sleep((usec / 1000000) + 1);
+#endif
+}
diff --git a/lib/dns/tests/dnstest.h b/lib/dns/tests/dnstest.h
index 00a2c376..8bddd410 100644
--- a/lib/dns/tests/dnstest.h
+++ b/lib/dns/tests/dnstest.h
@@ -14,7 +14,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: dnstest.h,v 1.3 2011-07-06 01:36:32 each Exp $ */
+/* $Id: dnstest.h,v 1.4 2011-09-02 21:15:37 each Exp $ */
/*! \file */
@@ -31,6 +31,7 @@
#include <isc/util.h>
#include <dns/result.h>
+#include <dns/zone.h>
#define CHECK(r) \
do { \
@@ -42,11 +43,13 @@
extern isc_mem_t *mctx;
extern isc_entropy_t *ectx;
extern isc_log_t *lctx;
-isc_taskmgr_t *taskmgr;
-isc_timermgr_t *timermgr;
-isc_socketmgr_t *socketmgr;
-int ncpus;
-
+extern isc_taskmgr_t *taskmgr;
+extern isc_task_t *maintask;
+extern isc_timermgr_t *timermgr;
+extern isc_socketmgr_t *socketmgr;
+extern dns_zonemgr_t *zonemgr;
+extern isc_boolean_t app_running;
+extern int ncpus;
isc_result_t
dns_test_begin(FILE *logfile, isc_boolean_t create_managers);
@@ -54,3 +57,21 @@ dns_test_begin(FILE *logfile, isc_boolean_t create_managers);
void
dns_test_end(void);
+isc_result_t
+dns_test_makezone(const char *name, dns_zone_t **zonep, dns_view_t *view,
+ isc_boolean_t keepview);
+
+isc_result_t
+dns_test_setupzonemgr(void);
+
+isc_result_t
+dns_test_managezone(dns_zone_t *zone);
+
+void
+dns_test_releasezone(dns_zone_t *zone);
+
+void
+dns_test_closezonemgr(void);
+
+void
+dns_test_nap(isc_uint32_t usec);
diff --git a/lib/dns/tests/master_test.c b/lib/dns/tests/master_test.c
index 2920b8cf..afe6eaa4 100644
--- a/lib/dns/tests/master_test.c
+++ b/lib/dns/tests/master_test.c
@@ -14,7 +14,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: master_test.c,v 1.4 2011-07-06 01:36:32 each Exp $ */
+/* $Id: master_test.c,v 1.6 2011-09-07 19:11:14 each Exp $ */
/*! \file */
@@ -27,8 +27,10 @@
#include <dns/cache.h>
#include <dns/callbacks.h>
#include <dns/master.h>
+#include <dns/masterdump.h>
#include <dns/name.h>
#include <dns/rdata.h>
+#include <dns/rdatalist.h>
#include <dns/rdataset.h>
#include "dnstest.h"
@@ -85,14 +87,6 @@ test_master(const char *testfile) {
dns_rdatacallbacks_init_stdio(&callbacks);
callbacks.add = add_callback;
- /*
- * atf-run changes us to a /tmp directory, so tests
- * that access test data files must first chdir to the proper
- * location.
- */
- if (chdir(TESTS) == -1)
- return (ISC_R_FAILURE);
-
result = dns_master_loadfile(testfile, &dns_origin, &dns_origin,
dns_rdataclass_in, ISC_TRUE,
&callbacks, mctx);
@@ -334,6 +328,50 @@ ATF_TC_BODY(master_leadingzero, tc) {
dns_test_end();
}
+ATF_TC(master_totext);
+ATF_TC_HEAD(master_totext, tc) {
+ atf_tc_set_md_var(tc, "descr", "masterfile totext tests");
+}
+ATF_TC_BODY(master_totext, tc) {
+ isc_result_t result;
+ dns_rdataset_t rdataset;
+ dns_rdatalist_t rdatalist;
+ isc_buffer_t target;
+ unsigned char buf[BIGBUFLEN];
+
+ UNUSED(tc);
+
+ result = dns_test_begin(NULL, ISC_FALSE);
+ ATF_REQUIRE_EQ(result, ISC_R_SUCCESS);
+
+ /* First, test with an empty rdataset */
+ rdatalist.rdclass = dns_rdataclass_in;
+ rdatalist.type = dns_rdatatype_none;
+ rdatalist.covers = dns_rdatatype_none;
+ rdatalist.ttl = 0;
+ ISC_LIST_INIT(rdatalist.rdata);
+ ISC_LINK_INIT(&rdatalist, link);
+
+ dns_rdataset_init(&rdataset);
+ result = dns_rdatalist_tordataset(&rdatalist, &rdataset);
+ ATF_CHECK_EQ(result, ISC_R_SUCCESS);
+
+ isc_buffer_init(&target, buf, BIGBUFLEN);
+ result = dns_master_rdatasettotext(dns_rootname,
+ &rdataset, &dns_master_style_debug,
+ &target);
+ ATF_CHECK_EQ(result, ISC_R_SUCCESS);
+ ATF_CHECK_EQ(isc_buffer_usedlength(&target), 0);
+
+ /*
+ * XXX: We will also need to add tests for dumping various
+ * rdata types, classes, etc, and comparing the results against
+ * known-good output.
+ */
+
+ dns_test_end();
+}
+
/*
* Main
*/
@@ -349,6 +387,7 @@ ATF_TP_ADD_TCS(tp) {
ATF_TP_ADD_TC(tp, master_includefail);
ATF_TP_ADD_TC(tp, master_blanklines);
ATF_TP_ADD_TC(tp, master_leadingzero);
+ ATF_TP_ADD_TC(tp, master_totext);
return (atf_no_error());
}
diff --git a/lib/dns/tests/testdata/zt/zone1.db b/lib/dns/tests/testdata/zt/zone1.db
new file mode 100644
index 00000000..4744a4d3
--- /dev/null
+++ b/lib/dns/tests/testdata/zt/zone1.db
@@ -0,0 +1,27 @@
+; Copyright (C) 2011 Internet Systems Consortium, Inc. ("ISC")
+;
+; Permission to use, copy, modify, and/or distribute this software for any
+; purpose with or without fee is hereby granted, provided that the above
+; copyright notice and this permission notice appear in all copies.
+;
+; THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
+; REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+; AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
+; INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+; LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+; OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+; PERFORMANCE OF THIS SOFTWARE.
+
+; $Id: zone1.db,v 1.3 2011-09-02 23:46:32 tbox Exp $
+
+$TTL 1000
+@ in soa localhost. postmaster.localhost. (
+ 1993050801 ;serial
+ 3600 ;refresh
+ 1800 ;retry
+ 604800 ;expiration
+ 3600 ) ;minimum
+ in ns ns.vix.com.
+ in ns ns2.vix.com.
+ in ns ns3.vix.com.
+a in a 1.2.3.4
diff --git a/lib/dns/tests/zonemgr_test.c b/lib/dns/tests/zonemgr_test.c
index 502e7ec7..b00165cb 100644
--- a/lib/dns/tests/zonemgr_test.c
+++ b/lib/dns/tests/zonemgr_test.c
@@ -14,7 +14,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: zonemgr_test.c,v 1.2 2011-07-06 05:05:51 each Exp $ */
+/* $Id: zonemgr_test.c,v 1.3 2011-09-02 21:15:37 each Exp $ */
/*! \file */
@@ -34,41 +34,6 @@
#include "dnstest.h"
-static isc_result_t
-make_zone(const char *name, dns_zone_t **zonep) {
- isc_result_t result;
- dns_view_t *view = NULL;
- dns_zone_t *zone = NULL;
- isc_buffer_t buffer;
- dns_fixedname_t fixorigin;
- dns_name_t *origin;
-
- CHECK(dns_view_create(mctx, dns_rdataclass_in, "view", &view));
- CHECK(dns_zone_create(&zone, mctx));
-
- isc_buffer_init(&buffer, name, strlen(name));
- isc_buffer_add(&buffer, strlen(name));
- dns_fixedname_init(&fixorigin);
- origin = dns_fixedname_name(&fixorigin);
- CHECK(dns_name_fromtext(origin, &buffer, dns_rootname, 0, NULL));
- CHECK(dns_zone_setorigin(zone, origin));
- dns_zone_setview(zone, view);
- dns_zone_settype(zone, dns_zone_master);
- dns_zone_setclass(zone, view->rdclass);
-
- dns_view_detach(&view);
- *zonep = zone;
-
- return (ISC_R_SUCCESS);
-
- cleanup:
- if (zone != NULL)
- dns_zone_detach(&zone);
- if (view != NULL)
- dns_view_detach(&view);
- return (result);
-}
-
/*
* Individual unit tests
*/
@@ -115,7 +80,7 @@ ATF_TC_BODY(zonemgr_managezone, tc) {
&zonemgr);
ATF_REQUIRE_EQ(result, ISC_R_SUCCESS);
- result = make_zone("foo", &zone);
+ result = dns_test_makezone("foo", &zone, NULL, ISC_FALSE);
ATF_REQUIRE_EQ(result, ISC_R_SUCCESS);
/* This should not succeed until the dns_zonemgr_setsize() is run */
diff --git a/lib/dns/tests/zt_test.c b/lib/dns/tests/zt_test.c
new file mode 100644
index 00000000..1239c39a
--- /dev/null
+++ b/lib/dns/tests/zt_test.c
@@ -0,0 +1,262 @@
+/*
+ * Copyright (C) 2011 Internet Systems Consortium, Inc. ("ISC")
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
+ * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+ * AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
+ * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+ * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+ * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+/* $Id: zt_test.c,v 1.5 2011-09-03 16:15:08 each Exp $ */
+
+/*! \file */
+
+#include <config.h>
+
+#include <atf-c.h>
+
+#include <unistd.h>
+
+#include <isc/app.h>
+#include <isc/buffer.h>
+#include <isc/task.h>
+#include <isc/timer.h>
+
+#include <dns/db.h>
+#include <dns/name.h>
+#include <dns/view.h>
+#include <dns/zone.h>
+#include <dns/zt.h>
+
+#include "dnstest.h"
+
+/*
+ * Helper functions
+ */
+static isc_result_t
+count_zone(dns_zone_t *zone, void *uap) {
+ int *nzones = (int *)uap;
+
+ UNUSED(zone);
+
+ *nzones += 1;
+ return (ISC_R_SUCCESS);
+}
+
+static isc_result_t
+load_done(dns_zt_t *zt, dns_zone_t *zone, isc_task_t *task) {
+ /* We treat zt as a pointer to a boolean for testing purposes */
+ isc_boolean_t *done = (isc_boolean_t *) zt;
+
+ UNUSED(zone);
+ UNUSED(task);
+
+ *done = ISC_TRUE;
+ isc_app_shutdown();
+ return (ISC_R_SUCCESS);
+}
+
+static isc_result_t
+all_done(void *arg) {
+ isc_boolean_t *done = (isc_boolean_t *) arg;
+
+ *done = ISC_TRUE;
+ isc_app_shutdown();
+ return (ISC_R_SUCCESS);
+}
+
+/*
+ * Individual unit tests
+ */
+ATF_TC(apply);
+ATF_TC_HEAD(apply, tc) {
+ atf_tc_set_md_var(tc, "descr", "apply a function to a zone table");
+}
+ATF_TC_BODY(apply, tc) {
+ isc_result_t result;
+ dns_zone_t *zone = NULL;
+ dns_view_t *view = NULL;
+ int nzones = 0;
+
+ UNUSED(tc);
+
+ result = dns_test_begin(NULL, ISC_TRUE);
+ ATF_REQUIRE_EQ(result, ISC_R_SUCCESS);
+
+ result = dns_test_makezone("foo", &zone, NULL, ISC_TRUE);
+ ATF_REQUIRE_EQ(result, ISC_R_SUCCESS);
+
+ view = dns_zone_getview(zone);
+ ATF_REQUIRE(view->zonetable != NULL);
+
+ ATF_CHECK_EQ(0, nzones);
+ result = dns_zt_apply(view->zonetable, ISC_FALSE, count_zone, &nzones);
+ ATF_CHECK_EQ(result, ISC_R_SUCCESS);
+ ATF_CHECK_EQ(1, nzones);
+
+ /* These steps are necessary so the zone can be detached properly */
+ result = dns_test_setupzonemgr();
+ ATF_REQUIRE_EQ(result, ISC_R_SUCCESS);
+ result = dns_test_managezone(zone);
+ ATF_REQUIRE_EQ(result, ISC_R_SUCCESS);
+ dns_test_releasezone(zone);
+ dns_test_closezonemgr();
+
+ /* The view was left attached in dns_test_makezone() */
+ dns_view_detach(&view);
+ dns_zone_detach(&zone);
+
+ dns_test_end();
+}
+
+ATF_TC(asyncload_zone);
+ATF_TC_HEAD(asyncload_zone, tc) {
+ atf_tc_set_md_var(tc, "descr", "asynchronous zone load");
+}
+ATF_TC_BODY(asyncload_zone, tc) {
+ isc_result_t result;
+ dns_zone_t *zone = NULL;
+ dns_view_t *view = NULL;
+ dns_db_t *db = NULL;
+ isc_boolean_t done = ISC_FALSE;
+ int i = 0;
+
+ UNUSED(tc);
+
+ result = dns_test_begin(NULL, ISC_TRUE);
+ ATF_REQUIRE_EQ(result, ISC_R_SUCCESS);
+
+ result = dns_test_makezone("foo", &zone, NULL, ISC_TRUE);
+ ATF_REQUIRE_EQ(result, ISC_R_SUCCESS);
+
+ result = dns_test_setupzonemgr();
+ ATF_REQUIRE_EQ(result, ISC_R_SUCCESS);
+ result = dns_test_managezone(zone);
+ ATF_REQUIRE_EQ(result, ISC_R_SUCCESS);
+
+ view = dns_zone_getview(zone);
+ ATF_REQUIRE(view->zonetable != NULL);
+
+ ATF_CHECK(!dns__zone_loadpending(zone));
+ ATF_CHECK(!done);
+ dns_zone_setfile(zone, "testdata/zt/zone1.db");
+ dns_zone_asyncload(zone, load_done, (void *) &done);
+ ATF_CHECK(dns__zone_loadpending(zone));
+
+ isc_app_run();
+ while (dns__zone_loadpending(zone) && i++ < 5000)
+ dns_test_nap(1000);
+ ATF_CHECK(done);
+
+ /* The zone should now be loaded; test it */
+ result = dns_zone_getdb(zone, &db);
+ ATF_CHECK_EQ(result, ISC_R_SUCCESS);
+ ATF_CHECK(db != NULL);
+ if (db != NULL)
+ dns_db_detach(&db);
+
+ dns_test_releasezone(zone);
+ dns_test_closezonemgr();
+
+ dns_zone_detach(&zone);
+ dns_view_detach(&view);
+
+ dns_test_end();
+}
+
+ATF_TC(asyncload_zt);
+ATF_TC_HEAD(asyncload_zt, tc) {
+ atf_tc_set_md_var(tc, "descr", "asynchronous zone table load");
+}
+ATF_TC_BODY(asyncload_zt, tc) {
+ isc_result_t result;
+ dns_zone_t *zone1 = NULL, *zone2 = NULL, *zone3 = NULL;
+ dns_view_t *view;
+ dns_zt_t *zt;
+ dns_db_t *db = NULL;
+ isc_boolean_t done = ISC_FALSE;
+ int i = 0;
+
+ UNUSED(tc);
+
+ result = dns_test_begin(NULL, ISC_TRUE);
+ ATF_REQUIRE_EQ(result, ISC_R_SUCCESS);
+
+ result = dns_test_makezone("foo", &zone1, NULL, ISC_TRUE);
+ ATF_REQUIRE_EQ(result, ISC_R_SUCCESS);
+ dns_zone_setfile(zone1, "testdata/zt/zone1.db");
+ view = dns_zone_getview(zone1);
+
+ result = dns_test_makezone("bar", &zone2, view, ISC_TRUE);
+ ATF_REQUIRE_EQ(result, ISC_R_SUCCESS);
+ dns_zone_setfile(zone2, "testdata/zt/zone1.db");
+
+ /* This one will fail to load */
+ result = dns_test_makezone("fake", &zone3, view, ISC_TRUE);
+ ATF_REQUIRE_EQ(result, ISC_R_SUCCESS);
+ dns_zone_setfile(zone3, "testdata/zt/nonexistent.db");
+
+ zt = view->zonetable;
+ ATF_REQUIRE(zt != NULL);
+
+ result = dns_test_setupzonemgr();
+ ATF_REQUIRE_EQ(result, ISC_R_SUCCESS);
+ result = dns_test_managezone(zone1);
+ ATF_REQUIRE_EQ(result, ISC_R_SUCCESS);
+ result = dns_test_managezone(zone2);
+ ATF_REQUIRE_EQ(result, ISC_R_SUCCESS);
+ result = dns_test_managezone(zone3);
+ ATF_REQUIRE_EQ(result, ISC_R_SUCCESS);
+
+ ATF_CHECK(!dns__zone_loadpending(zone1));
+ ATF_CHECK(!dns__zone_loadpending(zone2));
+ ATF_CHECK(!done);
+ dns_zt_asyncload(zt, all_done, (void *) &done);
+
+ isc_app_run();
+ while (!done && i++ < 5000)
+ dns_test_nap(1000);
+ ATF_CHECK(done);
+
+ /* Both zones should now be loaded; test them */
+ result = dns_zone_getdb(zone1, &db);
+ ATF_CHECK_EQ(result, ISC_R_SUCCESS);
+ ATF_CHECK(db != NULL);
+ if (db != NULL)
+ dns_db_detach(&db);
+
+ result = dns_zone_getdb(zone2, &db);
+ ATF_CHECK_EQ(result, ISC_R_SUCCESS);
+ ATF_CHECK(db != NULL);
+ if (db != NULL)
+ dns_db_detach(&db);
+
+ dns_test_releasezone(zone3);
+ dns_test_releasezone(zone2);
+ dns_test_releasezone(zone1);
+ dns_test_closezonemgr();
+
+ dns_zone_detach(&zone1);
+ dns_zone_detach(&zone2);
+ dns_zone_detach(&zone3);
+ dns_view_detach(&view);
+
+ dns_test_end();
+}
+
+/*
+ * Main
+ */
+ATF_TP_ADD_TCS(tp) {
+ ATF_TP_ADD_TC(tp, apply);
+ ATF_TP_ADD_TC(tp, asyncload_zone);
+ ATF_TP_ADD_TC(tp, asyncload_zt);
+ return (atf_no_error());
+}
diff --git a/lib/dns/tsig.c b/lib/dns/tsig.c
index 06fe182e..498ca0e3 100644
--- a/lib/dns/tsig.c
+++ b/lib/dns/tsig.c
@@ -16,7 +16,7 @@
*/
/*
- * $Id: tsig.c,v 1.148 2011-03-21 19:54:03 each Exp $
+ * $Id: tsig.c,v 1.150 2011-08-29 04:02:54 marka Exp $
*/
/*! \file */
#include <config.h>
@@ -889,6 +889,7 @@ dns_tsig_sign(dns_message_t *msg) {
isc_result_t ret;
unsigned char badtimedata[BADTIMELEN];
unsigned int sigsize = 0;
+ isc_boolean_t response = is_response(msg);
REQUIRE(msg != NULL);
REQUIRE(VALID_TSIG_KEY(dns_message_gettsigkey(msg)));
@@ -896,7 +897,7 @@ dns_tsig_sign(dns_message_t *msg) {
/*
* If this is a response, there should be a query tsig.
*/
- if (is_response(msg) && msg->querytsig == NULL)
+ if (response && msg->querytsig == NULL)
return (DNS_R_EXPECTEDTSIG);
dynbuf = NULL;
@@ -919,7 +920,7 @@ dns_tsig_sign(dns_message_t *msg) {
isc_buffer_init(&databuf, data, sizeof(data));
- if (is_response(msg))
+ if (response)
tsig.error = msg->querytsigstatus;
else
tsig.error = dns_rcode_noerror;
@@ -948,7 +949,7 @@ dns_tsig_sign(dns_message_t *msg) {
/*
* If this is a response, digest the query signature.
*/
- if (is_response(msg)) {
+ if (response) {
dns_rdata_t querytsigrdata = DNS_RDATA_INIT;
ret = dns_rdataset_first(msg->querytsig);
@@ -1017,8 +1018,10 @@ dns_tsig_sign(dns_message_t *msg) {
}
/* Digest the timesigned and fudge */
isc_buffer_clear(&databuf);
- if (tsig.error == dns_tsigerror_badtime)
+ if (tsig.error == dns_tsigerror_badtime) {
+ INSIST(response);
tsig.timesigned = querytsig.timesigned;
+ }
isc_buffer_putuint48(&databuf, tsig.timesigned);
isc_buffer_putuint16(&databuf, tsig.fudge);
isc_buffer_usedregion(&databuf, &r);
@@ -1068,7 +1071,7 @@ dns_tsig_sign(dns_message_t *msg) {
digestbits = dst_key_getbits(key->key);
if (digestbits != 0) {
unsigned int bytes = (digestbits + 1) / 8;
- if (is_response(msg) && bytes < querytsig.siglen)
+ if (response && bytes < querytsig.siglen)
bytes = querytsig.siglen;
if (bytes > isc_buffer_usedlength(&sigbuf))
bytes = isc_buffer_usedlength(&sigbuf);
@@ -1170,10 +1173,12 @@ dns_tsig_verify(isc_buffer_t *source, dns_message_t *msg,
isc_uint16_t addcount, id;
unsigned int siglen;
unsigned int alg;
+ isc_boolean_t response;
REQUIRE(source != NULL);
REQUIRE(DNS_MESSAGE_VALID(msg));
tsigkey = dns_message_gettsigkey(msg);
+ response = is_response(msg);
REQUIRE(tsigkey == NULL || VALID_TSIG_KEY(tsigkey));
@@ -1195,8 +1200,7 @@ dns_tsig_verify(isc_buffer_t *source, dns_message_t *msg,
* If this is a response and there's no key or query TSIG, there
* shouldn't be one on the response.
*/
- if (is_response(msg) &&
- (tsigkey == NULL || msg->querytsig == NULL))
+ if (response && (tsigkey == NULL || msg->querytsig == NULL))
return (DNS_R_UNEXPECTEDTSIG);
mctx = msg->mctx;
@@ -1215,7 +1219,7 @@ dns_tsig_verify(isc_buffer_t *source, dns_message_t *msg,
if (ret != ISC_R_SUCCESS)
return (ret);
dns_rdata_reset(&rdata);
- if (is_response(msg)) {
+ if (response) {
ret = dns_rdataset_first(msg->querytsig);
if (ret != ISC_R_SUCCESS)
return (ret);
@@ -1228,7 +1232,7 @@ dns_tsig_verify(isc_buffer_t *source, dns_message_t *msg,
/*
* Do the key name and algorithm match that of the query?
*/
- if (is_response(msg) &&
+ if (response &&
(!dns_name_equal(keyname, &tsigkey->name) ||
!dns_name_equal(&tsig.algorithm, &querytsig.algorithm))) {
msg->tsigstatus = dns_tsigerror_badkey;
@@ -1326,7 +1330,7 @@ dns_tsig_verify(isc_buffer_t *source, dns_message_t *msg,
if (ret != ISC_R_SUCCESS)
return (ret);
- if (is_response(msg)) {
+ if (response) {
isc_buffer_init(&databuf, data, sizeof(data));
isc_buffer_putuint16(&databuf, querytsig.siglen);
isc_buffer_usedregion(&databuf, &r);
diff --git a/lib/dns/update.c b/lib/dns/update.c
index a9b1dfad..9099994d 100644
--- a/lib/dns/update.c
+++ b/lib/dns/update.c
@@ -14,14 +14,1839 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: update.c,v 1.3 2011-07-01 23:47:44 tbox Exp $ */
+/* $Id: update.c,v 1.5 2011-08-30 23:46:52 tbox Exp $ */
-#include "config.h"
+#include <config.h>
-#include <isc/stdtime.h>
+#include <isc/log.h>
+#include <isc/netaddr.h>
+#include <isc/print.h>
#include <isc/serial.h>
+#include <isc/stats.h>
+#include <isc/stdtime.h>
+#include <isc/string.h>
+#include <isc/taskpool.h>
+#include <isc/util.h>
+#include <dns/db.h>
+#include <dns/dbiterator.h>
+#include <dns/diff.h>
+#include <dns/dnssec.h>
+#include <dns/events.h>
+#include <dns/fixedname.h>
+#include <dns/journal.h>
+#include <dns/keyvalues.h>
+#include <dns/log.h>
+#include <dns/message.h>
+#include <dns/nsec.h>
+#include <dns/nsec3.h>
+#include <dns/private.h>
+#include <dns/rdataclass.h>
+#include <dns/rdataset.h>
+#include <dns/rdatasetiter.h>
+#include <dns/rdatastruct.h>
+#include <dns/rdatatype.h>
+#include <dns/result.h>
+#include <dns/soa.h>
+#include <dns/ssu.h>
+#include <dns/tsig.h>
#include <dns/update.h>
+#include <dns/view.h>
+#include <dns/zone.h>
+#include <dns/zt.h>
+
+
+/**************************************************************************/
+
+/*%
+ * Log level for tracing dynamic update protocol requests.
+ */
+#define LOGLEVEL_PROTOCOL ISC_LOG_INFO
+
+/*%
+ * Log level for low-level debug tracing.
+ */
+#define LOGLEVEL_DEBUG ISC_LOG_DEBUG(8)
+
+/*%
+ * Check an operation for failure. These macros all assume that
+ * the function using them has a 'result' variable and a 'failure'
+ * label.
+ */
+#define CHECK(op) \
+ do { result = (op); \
+ if (result != ISC_R_SUCCESS) goto failure; \
+ } while (0)
+
+/*%
+ * Fail unconditionally with result 'code', which must not
+ * be ISC_R_SUCCESS. The reason for failure presumably has
+ * been logged already.
+ *
+ * The test against ISC_R_SUCCESS is there to keep the Solaris compiler
+ * from complaining about "end-of-loop code not reached".
+ */
+
+#define FAIL(code) \
+ do { \
+ result = (code); \
+ if (result != ISC_R_SUCCESS) goto failure; \
+ } while (0)
+
+/*%
+ * Fail unconditionally and log as a client error.
+ * The test against ISC_R_SUCCESS is there to keep the Solaris compiler
+ * from complaining about "end-of-loop code not reached".
+ */
+#define FAILC(code, msg) \
+ do { \
+ const char *_what = "failed"; \
+ result = (code); \
+ switch (result) { \
+ case DNS_R_NXDOMAIN: \
+ case DNS_R_YXDOMAIN: \
+ case DNS_R_YXRRSET: \
+ case DNS_R_NXRRSET: \
+ _what = "unsuccessful"; \
+ } \
+ update_log(log, zone, LOGLEVEL_PROTOCOL, \
+ "update %s: %s (%s)", _what, \
+ msg, isc_result_totext(result)); \
+ if (result != ISC_R_SUCCESS) goto failure; \
+ } while (0)
+
+#define FAILN(code, name, msg) \
+ do { \
+ const char *_what = "failed"; \
+ result = (code); \
+ switch (result) { \
+ case DNS_R_NXDOMAIN: \
+ case DNS_R_YXDOMAIN: \
+ case DNS_R_YXRRSET: \
+ case DNS_R_NXRRSET: \
+ _what = "unsuccessful"; \
+ } \
+ if (isc_log_wouldlog(dns_lctx, LOGLEVEL_PROTOCOL)) { \
+ char _nbuf[DNS_NAME_FORMATSIZE]; \
+ dns_name_format(name, _nbuf, sizeof(_nbuf)); \
+ update_log(log, zone, LOGLEVEL_PROTOCOL, \
+ "update %s: %s: %s (%s)", _what, _nbuf, \
+ msg, isc_result_totext(result)); \
+ } \
+ if (result != ISC_R_SUCCESS) goto failure; \
+ } while (0)
+
+#define FAILNT(code, name, type, msg) \
+ do { \
+ const char *_what = "failed"; \
+ result = (code); \
+ switch (result) { \
+ case DNS_R_NXDOMAIN: \
+ case DNS_R_YXDOMAIN: \
+ case DNS_R_YXRRSET: \
+ case DNS_R_NXRRSET: \
+ _what = "unsuccessful"; \
+ } \
+ if (isc_log_wouldlog(dns_lctx, LOGLEVEL_PROTOCOL)) { \
+ char _nbuf[DNS_NAME_FORMATSIZE]; \
+ char _tbuf[DNS_RDATATYPE_FORMATSIZE]; \
+ dns_name_format(name, _nbuf, sizeof(_nbuf)); \
+ dns_rdatatype_format(type, _tbuf, sizeof(_tbuf)); \
+ update_log(log, zone, LOGLEVEL_PROTOCOL, \
+ "update %s: %s/%s: %s (%s)", \
+ _what, _nbuf, _tbuf, msg, \
+ isc_result_totext(result)); \
+ } \
+ if (result != ISC_R_SUCCESS) goto failure; \
+ } while (0)
+
+/*%
+ * Fail unconditionally and log as a server error.
+ * The test against ISC_R_SUCCESS is there to keep the Solaris compiler
+ * from complaining about "end-of-loop code not reached".
+ */
+#define FAILS(code, msg) \
+ do { \
+ result = (code); \
+ update_log(log, zone, LOGLEVEL_PROTOCOL, \
+ "error: %s: %s", \
+ msg, isc_result_totext(result)); \
+ if (result != ISC_R_SUCCESS) goto failure; \
+ } while (0)
+
+/**************************************************************************/
+
+typedef struct rr rr_t;
+
+struct rr {
+ /* dns_name_t name; */
+ isc_uint32_t ttl;
+ dns_rdata_t rdata;
+};
+
+typedef struct update_event update_event_t;
+
+/**************************************************************************/
+
+static void
+update_log(dns_update_log_t *callback, dns_zone_t *zone,
+ int level, const char *fmt, ...) ISC_FORMAT_PRINTF(4, 5);
+
+static void
+update_log(dns_update_log_t *callback, dns_zone_t *zone,
+ int level, const char *fmt, ...)
+{
+ va_list ap;
+ char message[4096];
+
+ if (callback == NULL)
+ return;
+
+ if (isc_log_wouldlog(dns_lctx, level) == ISC_FALSE)
+ return;
+
+
+ va_start(ap, fmt);
+ vsnprintf(message, sizeof(message), fmt, ap);
+ va_end(ap);
+
+ (callback->func)(callback->arg, zone, level, message);
+}
+
+/*%
+ * Update a single RR in version 'ver' of 'db' and log the
+ * update in 'diff'.
+ *
+ * Ensures:
+ * \li '*tuple' == NULL. Either the tuple is freed, or its
+ * ownership has been transferred to the diff.
+ */
+static isc_result_t
+do_one_tuple(dns_difftuple_t **tuple, dns_db_t *db, dns_dbversion_t *ver,
+ dns_diff_t *diff)
+{
+ dns_diff_t temp_diff;
+ isc_result_t result;
+
+ /*
+ * Create a singleton diff.
+ */
+ dns_diff_init(diff->mctx, &temp_diff);
+ temp_diff.resign = diff->resign;
+ ISC_LIST_APPEND(temp_diff.tuples, *tuple, link);
+
+ /*
+ * Apply it to the database.
+ */
+ result = dns_diff_apply(&temp_diff, db, ver);
+ ISC_LIST_UNLINK(temp_diff.tuples, *tuple, link);
+ if (result != ISC_R_SUCCESS) {
+ dns_difftuple_free(tuple);
+ return (result);
+ }
+
+ /*
+ * Merge it into the current pending journal entry.
+ */
+ dns_diff_appendminimal(diff, tuple);
+
+ /*
+ * Do not clear temp_diff.
+ */
+ return (ISC_R_SUCCESS);
+}
+
+static isc_result_t
+update_one_rr(dns_db_t *db, dns_dbversion_t *ver, dns_diff_t *diff,
+ dns_diffop_t op, dns_name_t *name, dns_ttl_t ttl,
+ dns_rdata_t *rdata)
+{
+ dns_difftuple_t *tuple = NULL;
+ isc_result_t result;
+ result = dns_difftuple_create(diff->mctx, op,
+ name, ttl, rdata, &tuple);
+ if (result != ISC_R_SUCCESS)
+ return (result);
+ return (do_one_tuple(&tuple, db, ver, diff));
+}
+
+/**************************************************************************/
+/*
+ * Callback-style iteration over rdatasets and rdatas.
+ *
+ * foreach_rrset() can be used to iterate over the RRsets
+ * of a name and call a callback function with each
+ * one. Similarly, foreach_rr() can be used to iterate
+ * over the individual RRs at name, optionally restricted
+ * to RRs of a given type.
+ *
+ * The callback functions are called "actions" and take
+ * two arguments: a void pointer for passing arbitrary
+ * context information, and a pointer to the current RRset
+ * or RR. By convention, their names end in "_action".
+ */
+
+/*
+ * XXXRTH We might want to make this public somewhere in libdns.
+ */
+
+/*%
+ * Function type for foreach_rrset() iterator actions.
+ */
+typedef isc_result_t rrset_func(void *data, dns_rdataset_t *rrset);
+
+/*%
+ * Function type for foreach_rr() iterator actions.
+ */
+typedef isc_result_t rr_func(void *data, rr_t *rr);
+
+/*%
+ * Internal context struct for foreach_node_rr().
+ */
+typedef struct {
+ rr_func * rr_action;
+ void * rr_action_data;
+} foreach_node_rr_ctx_t;
+
+/*%
+ * Internal helper function for foreach_node_rr().
+ */
+static isc_result_t
+foreach_node_rr_action(void *data, dns_rdataset_t *rdataset) {
+ isc_result_t result;
+ foreach_node_rr_ctx_t *ctx = data;
+ for (result = dns_rdataset_first(rdataset);
+ result == ISC_R_SUCCESS;
+ result = dns_rdataset_next(rdataset))
+ {
+ rr_t rr = { 0, DNS_RDATA_INIT };
+
+ dns_rdataset_current(rdataset, &rr.rdata);
+ rr.ttl = rdataset->ttl;
+ result = (*ctx->rr_action)(ctx->rr_action_data, &rr);
+ if (result != ISC_R_SUCCESS)
+ return (result);
+ }
+ if (result != ISC_R_NOMORE)
+ return (result);
+ return (ISC_R_SUCCESS);
+}
+
+/*%
+ * For each rdataset of 'name' in 'ver' of 'db', call 'action'
+ * with the rdataset and 'action_data' as arguments. If the name
+ * does not exist, do nothing.
+ *
+ * If 'action' returns an error, abort iteration and return the error.
+ */
+static isc_result_t
+foreach_rrset(dns_db_t *db, dns_dbversion_t *ver, dns_name_t *name,
+ rrset_func *action, void *action_data)
+{
+ isc_result_t result;
+ dns_dbnode_t *node;
+ dns_rdatasetiter_t *iter;
+
+ node = NULL;
+ result = dns_db_findnode(db, name, ISC_FALSE, &node);
+ if (result == ISC_R_NOTFOUND)
+ return (ISC_R_SUCCESS);
+ if (result != ISC_R_SUCCESS)
+ return (result);
+
+ iter = NULL;
+ result = dns_db_allrdatasets(db, node, ver,
+ (isc_stdtime_t) 0, &iter);
+ if (result != ISC_R_SUCCESS)
+ goto cleanup_node;
+
+ for (result = dns_rdatasetiter_first(iter);
+ result == ISC_R_SUCCESS;
+ result = dns_rdatasetiter_next(iter))
+ {
+ dns_rdataset_t rdataset;
+
+ dns_rdataset_init(&rdataset);
+ dns_rdatasetiter_current(iter, &rdataset);
+
+ result = (*action)(action_data, &rdataset);
+
+ dns_rdataset_disassociate(&rdataset);
+ if (result != ISC_R_SUCCESS)
+ goto cleanup_iterator;
+ }
+ if (result == ISC_R_NOMORE)
+ result = ISC_R_SUCCESS;
+
+ cleanup_iterator:
+ dns_rdatasetiter_destroy(&iter);
+
+ cleanup_node:
+ dns_db_detachnode(db, &node);
+
+ return (result);
+}
+
+/*%
+ * For each RR of 'name' in 'ver' of 'db', call 'action'
+ * with the RR and 'action_data' as arguments. If the name
+ * does not exist, do nothing.
+ *
+ * If 'action' returns an error, abort iteration
+ * and return the error.
+ */
+static isc_result_t
+foreach_node_rr(dns_db_t *db, dns_dbversion_t *ver, dns_name_t *name,
+ rr_func *rr_action, void *rr_action_data)
+{
+ foreach_node_rr_ctx_t ctx;
+ ctx.rr_action = rr_action;
+ ctx.rr_action_data = rr_action_data;
+ return (foreach_rrset(db, ver, name,
+ foreach_node_rr_action, &ctx));
+}
+
+
+/*%
+ * For each of the RRs specified by 'db', 'ver', 'name', 'type',
+ * (which can be dns_rdatatype_any to match any type), and 'covers', call
+ * 'action' with the RR and 'action_data' as arguments. If the name
+ * does not exist, or if no RRset of the given type exists at the name,
+ * do nothing.
+ *
+ * If 'action' returns an error, abort iteration and return the error.
+ */
+static isc_result_t
+foreach_rr(dns_db_t *db, dns_dbversion_t *ver, dns_name_t *name,
+ dns_rdatatype_t type, dns_rdatatype_t covers, rr_func *rr_action,
+ void *rr_action_data)
+{
+
+ isc_result_t result;
+ dns_dbnode_t *node;
+ dns_rdataset_t rdataset;
+
+ if (type == dns_rdatatype_any)
+ return (foreach_node_rr(db, ver, name,
+ rr_action, rr_action_data));
+
+ node = NULL;
+ if (type == dns_rdatatype_nsec3 ||
+ (type == dns_rdatatype_rrsig && covers == dns_rdatatype_nsec3))
+ result = dns_db_findnsec3node(db, name, ISC_FALSE, &node);
+ else
+ result = dns_db_findnode(db, name, ISC_FALSE, &node);
+ if (result == ISC_R_NOTFOUND)
+ return (ISC_R_SUCCESS);
+ if (result != ISC_R_SUCCESS)
+ return (result);
+
+ dns_rdataset_init(&rdataset);
+ result = dns_db_findrdataset(db, node, ver, type, covers,
+ (isc_stdtime_t) 0, &rdataset, NULL);
+ if (result == ISC_R_NOTFOUND) {
+ result = ISC_R_SUCCESS;
+ goto cleanup_node;
+ }
+ if (result != ISC_R_SUCCESS)
+ goto cleanup_node;
+
+ for (result = dns_rdataset_first(&rdataset);
+ result == ISC_R_SUCCESS;
+ result = dns_rdataset_next(&rdataset))
+ {
+ rr_t rr = { 0, DNS_RDATA_INIT };
+ dns_rdataset_current(&rdataset, &rr.rdata);
+ rr.ttl = rdataset.ttl;
+ result = (*rr_action)(rr_action_data, &rr);
+ if (result != ISC_R_SUCCESS)
+ goto cleanup_rdataset;
+ }
+ if (result != ISC_R_NOMORE)
+ goto cleanup_rdataset;
+ result = ISC_R_SUCCESS;
+
+ cleanup_rdataset:
+ dns_rdataset_disassociate(&rdataset);
+ cleanup_node:
+ dns_db_detachnode(db, &node);
+
+ return (result);
+}
+
+/**************************************************************************/
+/*
+ * Various tests on the database contents (for prerequisites, etc).
+ */
+
+/*%
+ * Function type for predicate functions that compare a database RR 'db_rr'
+ * against an update RR 'update_rr'.
+ */
+typedef isc_boolean_t rr_predicate(dns_rdata_t *update_rr, dns_rdata_t *db_rr);
+
+/*%
+ * Helper function for rrset_exists().
+ */
+static isc_result_t
+rrset_exists_action(void *data, rr_t *rr) {
+ UNUSED(data);
+ UNUSED(rr);
+ return (ISC_R_EXISTS);
+}
+
+/*%
+ * Utility macro for RR existence checking functions.
+ *
+ * If the variable 'result' has the value ISC_R_EXISTS or
+ * ISC_R_SUCCESS, set *exists to ISC_TRUE or ISC_FALSE,
+ * respectively, and return success.
+ *
+ * If 'result' has any other value, there was a failure.
+ * Return the failure result code and do not set *exists.
+ *
+ * This would be more readable as "do { if ... } while(0)",
+ * but that form generates tons of warnings on Solaris 2.6.
+ */
+#define RETURN_EXISTENCE_FLAG \
+ return ((result == ISC_R_EXISTS) ? \
+ (*exists = ISC_TRUE, ISC_R_SUCCESS) : \
+ ((result == ISC_R_SUCCESS) ? \
+ (*exists = ISC_FALSE, ISC_R_SUCCESS) : \
+ result))
+
+/*%
+ * Set '*exists' to true iff an rrset of the given type exists,
+ * to false otherwise.
+ */
+static isc_result_t
+rrset_exists(dns_db_t *db, dns_dbversion_t *ver, dns_name_t *name,
+ dns_rdatatype_t type, dns_rdatatype_t covers,
+ isc_boolean_t *exists)
+{
+ isc_result_t result;
+ result = foreach_rr(db, ver, name, type, covers,
+ rrset_exists_action, NULL);
+ RETURN_EXISTENCE_FLAG;
+}
+
+/*%
+ * Set '*visible' to true if the RRset exists and is part of the
+ * visible zone. Otherwise '*visible' is set to false unless a
+ * error occurs.
+ */
+static isc_result_t
+rrset_visible(dns_db_t *db, dns_dbversion_t *ver, dns_name_t *name,
+ dns_rdatatype_t type, isc_boolean_t *visible)
+{
+ isc_result_t result;
+ dns_fixedname_t fixed;
+
+ dns_fixedname_init(&fixed);
+ result = dns_db_find(db, name, ver, type, DNS_DBFIND_NOWILD,
+ (isc_stdtime_t) 0, NULL,
+ dns_fixedname_name(&fixed), NULL, NULL);
+ switch (result) {
+ case ISC_R_SUCCESS:
+ *visible = ISC_TRUE;
+ break;
+ /*
+ * Glue, obscured, deleted or replaced records.
+ */
+ case DNS_R_DELEGATION:
+ case DNS_R_DNAME:
+ case DNS_R_CNAME:
+ case DNS_R_NXDOMAIN:
+ case DNS_R_NXRRSET:
+ case DNS_R_EMPTYNAME:
+ case DNS_R_COVERINGNSEC:
+ *visible = ISC_FALSE;
+ result = ISC_R_SUCCESS;
+ break;
+ default:
+ break;
+ }
+ return (result);
+}
+
+/*%
+ * Context struct and helper function for name_exists().
+ */
+
+static isc_result_t
+name_exists_action(void *data, dns_rdataset_t *rrset) {
+ UNUSED(data);
+ UNUSED(rrset);
+ return (ISC_R_EXISTS);
+}
+
+/*%
+ * Set '*exists' to true iff the given name exists, to false otherwise.
+ */
+static isc_result_t
+name_exists(dns_db_t *db, dns_dbversion_t *ver, dns_name_t *name,
+ isc_boolean_t *exists)
+{
+ isc_result_t result;
+ result = foreach_rrset(db, ver, name,
+ name_exists_action, NULL);
+ RETURN_EXISTENCE_FLAG;
+}
+
+/**************************************************************************/
+/*
+ * Checking of "RRset exists (value dependent)" prerequisites.
+ *
+ * In the RFC2136 section 3.2.5, this is the pseudocode involving
+ * a variable called "temp", a mapping of <name, type> tuples to rrsets.
+ *
+ * Here, we represent the "temp" data structure as (non-minimal) "dns_diff_t"
+ * where each tuple has op==DNS_DIFFOP_EXISTS.
+ */
+
+/*%
+ * A comparison function defining the sorting order for the entries
+ * in the "temp" data structure. The major sort key is the owner name,
+ * followed by the type and rdata.
+ */
+static int
+temp_order(const void *av, const void *bv) {
+ dns_difftuple_t const * const *ap = av;
+ dns_difftuple_t const * const *bp = bv;
+ dns_difftuple_t const *a = *ap;
+ dns_difftuple_t const *b = *bp;
+ int r;
+ r = dns_name_compare(&a->name, &b->name);
+ if (r != 0)
+ return (r);
+ r = (b->rdata.type - a->rdata.type);
+ if (r != 0)
+ return (r);
+ r = dns_rdata_casecompare(&a->rdata, &b->rdata);
+ return (r);
+}
+
+/**************************************************************************/
+/*
+ * Conditional deletion of RRs.
+ */
+
+/*%
+ * Context structure for delete_if().
+ */
+
+typedef struct {
+ rr_predicate *predicate;
+ dns_db_t *db;
+ dns_dbversion_t *ver;
+ dns_diff_t *diff;
+ dns_name_t *name;
+ dns_rdata_t *update_rr;
+} conditional_delete_ctx_t;
+
+/*%
+ * Predicate functions for delete_if().
+ */
+
+/*%
+ * Return true always.
+ */
+static isc_boolean_t
+true_p(dns_rdata_t *update_rr, dns_rdata_t *db_rr) {
+ UNUSED(update_rr);
+ UNUSED(db_rr);
+ return (ISC_TRUE);
+}
+
+/*%
+ * Return true if the record is a RRSIG.
+ */
+static isc_boolean_t
+rrsig_p(dns_rdata_t *update_rr, dns_rdata_t *db_rr) {
+ UNUSED(update_rr);
+ return ((db_rr->type == dns_rdatatype_rrsig) ?
+ ISC_TRUE : ISC_FALSE);
+}
+
+/*%
+ * Internal helper function for delete_if().
+ */
+static isc_result_t
+delete_if_action(void *data, rr_t *rr) {
+ conditional_delete_ctx_t *ctx = data;
+ if ((*ctx->predicate)(ctx->update_rr, &rr->rdata)) {
+ isc_result_t result;
+ result = update_one_rr(ctx->db, ctx->ver, ctx->diff,
+ DNS_DIFFOP_DEL, ctx->name,
+ rr->ttl, &rr->rdata);
+ return (result);
+ } else {
+ return (ISC_R_SUCCESS);
+ }
+}
+
+/*%
+ * Conditionally delete RRs. Apply 'predicate' to the RRs
+ * specified by 'db', 'ver', 'name', and 'type' (which can
+ * be dns_rdatatype_any to match any type). Delete those
+ * RRs for which the predicate returns true, and log the
+ * deletions in 'diff'.
+ */
+static isc_result_t
+delete_if(rr_predicate *predicate, dns_db_t *db, dns_dbversion_t *ver,
+ dns_name_t *name, dns_rdatatype_t type, dns_rdatatype_t covers,
+ dns_rdata_t *update_rr, dns_diff_t *diff)
+{
+ conditional_delete_ctx_t ctx;
+ ctx.predicate = predicate;
+ ctx.db = db;
+ ctx.ver = ver;
+ ctx.diff = diff;
+ ctx.name = name;
+ ctx.update_rr = update_rr;
+ return (foreach_rr(db, ver, name, type, covers,
+ delete_if_action, &ctx));
+}
+
+/**************************************************************************/
+/*
+ * Incremental updating of NSECs and RRSIGs.
+ */
+
+#define MAXZONEKEYS 32 /*%< Maximum number of zone keys supported. */
+
+/*%
+ * We abuse the dns_diff_t type to represent a set of domain names
+ * affected by the update.
+ */
+static isc_result_t
+namelist_append_name(dns_diff_t *list, dns_name_t *name) {
+ isc_result_t result;
+ dns_difftuple_t *tuple = NULL;
+ static dns_rdata_t dummy_rdata = DNS_RDATA_INIT;
+
+ CHECK(dns_difftuple_create(list->mctx, DNS_DIFFOP_EXISTS, name, 0,
+ &dummy_rdata, &tuple));
+ dns_diff_append(list, &tuple);
+ failure:
+ return (result);
+}
+
+static isc_result_t
+namelist_append_subdomain(dns_db_t *db, dns_name_t *name, dns_diff_t *affected)
+{
+ isc_result_t result;
+ dns_fixedname_t fixedname;
+ dns_name_t *child;
+ dns_dbiterator_t *dbit = NULL;
+
+ dns_fixedname_init(&fixedname);
+ child = dns_fixedname_name(&fixedname);
+
+ CHECK(dns_db_createiterator(db, DNS_DB_NONSEC3, &dbit));
+
+ for (result = dns_dbiterator_seek(dbit, name);
+ result == ISC_R_SUCCESS;
+ result = dns_dbiterator_next(dbit))
+ {
+ dns_dbnode_t *node = NULL;
+ CHECK(dns_dbiterator_current(dbit, &node, child));
+ dns_db_detachnode(db, &node);
+ if (! dns_name_issubdomain(child, name))
+ break;
+ CHECK(namelist_append_name(affected, child));
+ }
+ if (result == ISC_R_NOMORE)
+ result = ISC_R_SUCCESS;
+ failure:
+ if (dbit != NULL)
+ dns_dbiterator_destroy(&dbit);
+ return (result);
+}
+
+
+
+/*%
+ * Helper function for non_nsec_rrset_exists().
+ */
+static isc_result_t
+is_non_nsec_action(void *data, dns_rdataset_t *rrset) {
+ UNUSED(data);
+ if (!(rrset->type == dns_rdatatype_nsec ||
+ rrset->type == dns_rdatatype_nsec3 ||
+ (rrset->type == dns_rdatatype_rrsig &&
+ (rrset->covers == dns_rdatatype_nsec ||
+ rrset->covers == dns_rdatatype_nsec3))))
+ return (ISC_R_EXISTS);
+ return (ISC_R_SUCCESS);
+}
+
+/*%
+ * Check whether there is an rrset other than a NSEC or RRSIG NSEC,
+ * i.e., anything that justifies the continued existence of a name
+ * after a secure update.
+ *
+ * If such an rrset exists, set '*exists' to ISC_TRUE.
+ * Otherwise, set it to ISC_FALSE.
+ */
+static isc_result_t
+non_nsec_rrset_exists(dns_db_t *db, dns_dbversion_t *ver,
+ dns_name_t *name, isc_boolean_t *exists)
+{
+ isc_result_t result;
+ result = foreach_rrset(db, ver, name, is_non_nsec_action, NULL);
+ RETURN_EXISTENCE_FLAG;
+}
+
+/*%
+ * A comparison function for sorting dns_diff_t:s by name.
+ */
+static int
+name_order(const void *av, const void *bv) {
+ dns_difftuple_t const * const *ap = av;
+ dns_difftuple_t const * const *bp = bv;
+ dns_difftuple_t const *a = *ap;
+ dns_difftuple_t const *b = *bp;
+ return (dns_name_compare(&a->name, &b->name));
+}
+
+static isc_result_t
+uniqify_name_list(dns_diff_t *list) {
+ isc_result_t result;
+ dns_difftuple_t *p, *q;
+
+ CHECK(dns_diff_sort(list, name_order));
+
+ p = ISC_LIST_HEAD(list->tuples);
+ while (p != NULL) {
+ do {
+ q = ISC_LIST_NEXT(p, link);
+ if (q == NULL || ! dns_name_equal(&p->name, &q->name))
+ break;
+ ISC_LIST_UNLINK(list->tuples, q, link);
+ dns_difftuple_free(&q);
+ } while (1);
+ p = ISC_LIST_NEXT(p, link);
+ }
+ failure:
+ return (result);
+}
+
+static isc_result_t
+is_active(dns_db_t *db, dns_dbversion_t *ver, dns_name_t *name,
+ isc_boolean_t *flag, isc_boolean_t *cut, isc_boolean_t *unsecure)
+{
+ isc_result_t result;
+ dns_fixedname_t foundname;
+ dns_fixedname_init(&foundname);
+ result = dns_db_find(db, name, ver, dns_rdatatype_any,
+ DNS_DBFIND_GLUEOK | DNS_DBFIND_NOWILD,
+ (isc_stdtime_t) 0, NULL,
+ dns_fixedname_name(&foundname),
+ NULL, NULL);
+ if (result == ISC_R_SUCCESS || result == DNS_R_EMPTYNAME) {
+ *flag = ISC_TRUE;
+ *cut = ISC_FALSE;
+ if (unsecure != NULL)
+ *unsecure = ISC_FALSE;
+ return (ISC_R_SUCCESS);
+ } else if (result == DNS_R_ZONECUT) {
+ *flag = ISC_TRUE;
+ *cut = ISC_TRUE;
+ if (unsecure != NULL) {
+ /*
+ * We are at the zonecut. Check to see if there
+ * is a DS RRset.
+ */
+ if (dns_db_find(db, name, ver, dns_rdatatype_ds, 0,
+ (isc_stdtime_t) 0, NULL,
+ dns_fixedname_name(&foundname),
+ NULL, NULL) == DNS_R_NXRRSET)
+ *unsecure = ISC_TRUE;
+ else
+ *unsecure = ISC_FALSE;
+ }
+ return (ISC_R_SUCCESS);
+ } else if (result == DNS_R_GLUE || result == DNS_R_DNAME ||
+ result == DNS_R_DELEGATION || result == DNS_R_NXDOMAIN) {
+ *flag = ISC_FALSE;
+ *cut = ISC_FALSE;
+ if (unsecure != NULL)
+ *unsecure = ISC_FALSE;
+ return (ISC_R_SUCCESS);
+ } else {
+ /*
+ * Silence compiler.
+ */
+ *flag = ISC_FALSE;
+ *cut = ISC_FALSE;
+ if (unsecure != NULL)
+ *unsecure = ISC_FALSE;
+ return (result);
+ }
+}
+
+/*%
+ * Find the next/previous name that has a NSEC record.
+ * In other words, skip empty database nodes and names that
+ * have had their NSECs removed because they are obscured by
+ * a zone cut.
+ */
+static isc_result_t
+next_active(dns_update_log_t *log, dns_zone_t *zone, dns_db_t *db,
+ dns_dbversion_t *ver, dns_name_t *oldname, dns_name_t *newname,
+ isc_boolean_t forward)
+{
+ isc_result_t result;
+ dns_dbiterator_t *dbit = NULL;
+ isc_boolean_t has_nsec = ISC_FALSE;
+ unsigned int wraps = 0;
+ isc_boolean_t secure = dns_db_issecure(db);
+
+ CHECK(dns_db_createiterator(db, 0, &dbit));
+
+ CHECK(dns_dbiterator_seek(dbit, oldname));
+ do {
+ dns_dbnode_t *node = NULL;
+
+ if (forward)
+ result = dns_dbiterator_next(dbit);
+ else
+ result = dns_dbiterator_prev(dbit);
+ if (result == ISC_R_NOMORE) {
+ /*
+ * Wrap around.
+ */
+ if (forward)
+ CHECK(dns_dbiterator_first(dbit));
+ else
+ CHECK(dns_dbiterator_last(dbit));
+ wraps++;
+ if (wraps == 2) {
+ update_log(log, zone, ISC_LOG_ERROR,
+ "secure zone with no NSECs");
+ result = DNS_R_BADZONE;
+ goto failure;
+ }
+ }
+ CHECK(dns_dbiterator_current(dbit, &node, newname));
+ dns_db_detachnode(db, &node);
+
+ /*
+ * The iterator may hold the tree lock, and
+ * rrset_exists() calls dns_db_findnode() which
+ * may try to reacquire it. To avoid deadlock
+ * we must pause the iterator first.
+ */
+ CHECK(dns_dbiterator_pause(dbit));
+ if (secure) {
+ CHECK(rrset_exists(db, ver, newname,
+ dns_rdatatype_nsec, 0, &has_nsec));
+ } else {
+ dns_fixedname_t ffound;
+ dns_name_t *found;
+ dns_fixedname_init(&ffound);
+ found = dns_fixedname_name(&ffound);
+ result = dns_db_find(db, newname, ver,
+ dns_rdatatype_soa,
+ DNS_DBFIND_NOWILD, 0, NULL, found,
+ NULL, NULL);
+ if (result == ISC_R_SUCCESS ||
+ result == DNS_R_EMPTYNAME ||
+ result == DNS_R_NXRRSET ||
+ result == DNS_R_CNAME ||
+ (result == DNS_R_DELEGATION &&
+ dns_name_equal(newname, found))) {
+ has_nsec = ISC_TRUE;
+ result = ISC_R_SUCCESS;
+ } else if (result != DNS_R_NXDOMAIN)
+ break;
+ }
+ } while (! has_nsec);
+ failure:
+ if (dbit != NULL)
+ dns_dbiterator_destroy(&dbit);
+
+ return (result);
+}
+
+/*%
+ * Add a NSEC record for "name", recording the change in "diff".
+ * The existing NSEC is removed.
+ */
+static isc_result_t
+add_nsec(dns_update_log_t *log, dns_zone_t *zone, dns_db_t *db,
+ dns_dbversion_t *ver, dns_name_t *name, dns_ttl_t nsecttl,
+ dns_diff_t *diff)
+{
+ isc_result_t result;
+ dns_dbnode_t *node = NULL;
+ unsigned char buffer[DNS_NSEC_BUFFERSIZE];
+ dns_rdata_t rdata = DNS_RDATA_INIT;
+ dns_difftuple_t *tuple = NULL;
+ dns_fixedname_t fixedname;
+ dns_name_t *target;
+
+ dns_fixedname_init(&fixedname);
+ target = dns_fixedname_name(&fixedname);
+
+ /*
+ * Find the successor name, aka NSEC target.
+ */
+ CHECK(next_active(log, zone, db, ver, name, target, ISC_TRUE));
+
+ /*
+ * Create the NSEC RDATA.
+ */
+ CHECK(dns_db_findnode(db, name, ISC_FALSE, &node));
+ dns_rdata_init(&rdata);
+ CHECK(dns_nsec_buildrdata(db, ver, node, target, buffer, &rdata));
+ dns_db_detachnode(db, &node);
+
+ /*
+ * Delete the old NSEC and record the change.
+ */
+ CHECK(delete_if(true_p, db, ver, name, dns_rdatatype_nsec, 0,
+ NULL, diff));
+ /*
+ * Add the new NSEC and record the change.
+ */
+ CHECK(dns_difftuple_create(diff->mctx, DNS_DIFFOP_ADD, name,
+ nsecttl, &rdata, &tuple));
+ CHECK(do_one_tuple(&tuple, db, ver, diff));
+ INSIST(tuple == NULL);
+
+ failure:
+ if (node != NULL)
+ dns_db_detachnode(db, &node);
+ return (result);
+}
+
+/*%
+ * Add a placeholder NSEC record for "name", recording the change in "diff".
+ */
+static isc_result_t
+add_placeholder_nsec(dns_db_t *db, dns_dbversion_t *ver, dns_name_t *name,
+ dns_diff_t *diff)
+{
+ isc_result_t result;
+ dns_difftuple_t *tuple = NULL;
+ isc_region_t r;
+ unsigned char data[1] = { 0 }; /* The root domain, no bits. */
+ dns_rdata_t rdata = DNS_RDATA_INIT;
+
+ r.base = data;
+ r.length = sizeof(data);
+ dns_rdata_fromregion(&rdata, dns_db_class(db), dns_rdatatype_nsec, &r);
+ CHECK(dns_difftuple_create(diff->mctx, DNS_DIFFOP_ADD, name, 0,
+ &rdata, &tuple));
+ CHECK(do_one_tuple(&tuple, db, ver, diff));
+ failure:
+ return (result);
+}
+
+static isc_result_t
+find_zone_keys(dns_zone_t *zone, dns_db_t *db, dns_dbversion_t *ver,
+ isc_mem_t *mctx, unsigned int maxkeys,
+ dst_key_t **keys, unsigned int *nkeys)
+{
+ isc_result_t result;
+ dns_dbnode_t *node = NULL;
+ const char *directory = dns_zone_getkeydirectory(zone);
+ CHECK(dns_db_findnode(db, dns_db_origin(db), ISC_FALSE, &node));
+ CHECK(dns_dnssec_findzonekeys2(db, ver, node, dns_db_origin(db),
+ directory, mctx, maxkeys, keys, nkeys));
+ failure:
+ if (node != NULL)
+ dns_db_detachnode(db, &node);
+ return (result);
+}
+
+/*%
+ * Add RRSIG records for an RRset, recording the change in "diff".
+ */
+static isc_result_t
+add_sigs(dns_update_log_t *log, dns_zone_t *zone, dns_db_t *db,
+ dns_dbversion_t *ver, dns_name_t *name, dns_rdatatype_t type,
+ dns_diff_t *diff, dst_key_t **keys, unsigned int nkeys,
+ isc_stdtime_t inception, isc_stdtime_t expire,
+ isc_boolean_t check_ksk, isc_boolean_t keyset_kskonly)
+{
+ isc_result_t result;
+ dns_dbnode_t *node = NULL;
+ dns_rdataset_t rdataset;
+ dns_rdata_t sig_rdata = DNS_RDATA_INIT;
+ isc_buffer_t buffer;
+ unsigned char data[1024]; /* XXX */
+ unsigned int i, j;
+ isc_boolean_t added_sig = ISC_FALSE;
+ isc_mem_t *mctx = diff->mctx;
+
+ dns_rdataset_init(&rdataset);
+ isc_buffer_init(&buffer, data, sizeof(data));
+
+ /* Get the rdataset to sign. */
+ if (type == dns_rdatatype_nsec3)
+ CHECK(dns_db_findnsec3node(db, name, ISC_FALSE, &node));
+ else
+ CHECK(dns_db_findnode(db, name, ISC_FALSE, &node));
+ CHECK(dns_db_findrdataset(db, node, ver, type, 0,
+ (isc_stdtime_t) 0, &rdataset, NULL));
+ dns_db_detachnode(db, &node);
+
+#define REVOKE(x) ((dst_key_flags(x) & DNS_KEYFLAG_REVOKE) != 0)
+#define KSK(x) ((dst_key_flags(x) & DNS_KEYFLAG_KSK) != 0)
+#define ALG(x) dst_key_alg(x)
+
+ /*
+ * If we are honoring KSK flags then we need to check that we
+ * have both KSK and non-KSK keys that are not revoked per
+ * algorithm.
+ */
+ for (i = 0; i < nkeys; i++) {
+ isc_boolean_t both = ISC_FALSE;
+
+ if (!dst_key_isprivate(keys[i]))
+ continue;
+
+ if (check_ksk && !REVOKE(keys[i])) {
+ isc_boolean_t have_ksk, have_nonksk;
+ if (KSK(keys[i])) {
+ have_ksk = ISC_TRUE;
+ have_nonksk = ISC_FALSE;
+ } else {
+ have_ksk = ISC_FALSE;
+ have_nonksk = ISC_TRUE;
+ }
+ for (j = 0; j < nkeys; j++) {
+ if (j == i || ALG(keys[i]) != ALG(keys[j]))
+ continue;
+ if (REVOKE(keys[j]))
+ continue;
+ if (KSK(keys[j]))
+ have_ksk = ISC_TRUE;
+ else
+ have_nonksk = ISC_TRUE;
+ both = have_ksk && have_nonksk;
+ if (both)
+ break;
+ }
+ }
+
+ if (both) {
+ if (type == dns_rdatatype_dnskey) {
+ if (!KSK(keys[i]) && keyset_kskonly)
+ continue;
+ } else if (KSK(keys[i]))
+ continue;
+ } else if (REVOKE(keys[i]) && type != dns_rdatatype_dnskey)
+ continue;
+
+ /* Calculate the signature, creating a RRSIG RDATA. */
+ CHECK(dns_dnssec_sign(name, &rdataset, keys[i],
+ &inception, &expire,
+ mctx, &buffer, &sig_rdata));
+
+ /* Update the database and journal with the RRSIG. */
+ /* XXX inefficient - will cause dataset merging */
+ CHECK(update_one_rr(db, ver, diff, DNS_DIFFOP_ADDRESIGN, name,
+ rdataset.ttl, &sig_rdata));
+ dns_rdata_reset(&sig_rdata);
+ isc_buffer_init(&buffer, data, sizeof(data));
+ added_sig = ISC_TRUE;
+ }
+ if (!added_sig) {
+ update_log(log, zone, ISC_LOG_ERROR,
+ "found no active private keys, "
+ "unable to generate any signatures");
+ result = ISC_R_NOTFOUND;
+ }
+
+ failure:
+ if (dns_rdataset_isassociated(&rdataset))
+ dns_rdataset_disassociate(&rdataset);
+ if (node != NULL)
+ dns_db_detachnode(db, &node);
+ return (result);
+}
+
+/*
+ * Delete expired RRsigs and any RRsigs we are about to re-sign.
+ * See also zone.c:del_sigs().
+ */
+static isc_result_t
+del_keysigs(dns_db_t *db, dns_dbversion_t *ver, dns_name_t *name,
+ dns_diff_t *diff, dst_key_t **keys, unsigned int nkeys)
+{
+ isc_result_t result;
+ dns_dbnode_t *node = NULL;
+ dns_rdataset_t rdataset;
+ dns_rdata_t rdata = DNS_RDATA_INIT;
+ unsigned int i;
+ dns_rdata_rrsig_t rrsig;
+ isc_boolean_t found;
+
+ dns_rdataset_init(&rdataset);
+
+ result = dns_db_findnode(db, name, ISC_FALSE, &node);
+ if (result == ISC_R_NOTFOUND)
+ return (ISC_R_SUCCESS);
+ if (result != ISC_R_SUCCESS)
+ goto failure;
+ result = dns_db_findrdataset(db, node, ver, dns_rdatatype_rrsig,
+ dns_rdatatype_dnskey, (isc_stdtime_t) 0,
+ &rdataset, NULL);
+ dns_db_detachnode(db, &node);
+
+ if (result == ISC_R_NOTFOUND)
+ return (ISC_R_SUCCESS);
+ if (result != ISC_R_SUCCESS)
+ goto failure;
+
+ for (result = dns_rdataset_first(&rdataset);
+ result == ISC_R_SUCCESS;
+ result = dns_rdataset_next(&rdataset)) {
+ dns_rdataset_current(&rdataset, &rdata);
+ result = dns_rdata_tostruct(&rdata, &rrsig, NULL);
+ RUNTIME_CHECK(result == ISC_R_SUCCESS);
+ found = ISC_FALSE;
+ for (i = 0; i < nkeys; i++) {
+ if (rrsig.keyid == dst_key_id(keys[i])) {
+ found = ISC_TRUE;
+ if (!dst_key_isprivate(keys[i])) {
+ /*
+ * The re-signing code in zone.c
+ * will mark this as offline.
+ * Just skip the record for now.
+ */
+ break;
+ }
+ result = update_one_rr(db, ver, diff,
+ DNS_DIFFOP_DEL, name,
+ rdataset.ttl, &rdata);
+ break;
+ }
+ }
+ /*
+ * If there is not a matching DNSKEY then delete the RRSIG.
+ */
+ if (!found)
+ result = update_one_rr(db, ver, diff, DNS_DIFFOP_DEL,
+ name, rdataset.ttl, &rdata);
+ dns_rdata_reset(&rdata);
+ if (result != ISC_R_SUCCESS)
+ break;
+ }
+ dns_rdataset_disassociate(&rdataset);
+ if (result == ISC_R_NOMORE)
+ result = ISC_R_SUCCESS;
+failure:
+ if (node != NULL)
+ dns_db_detachnode(db, &node);
+ return (result);
+}
+
+static isc_result_t
+add_exposed_sigs(dns_update_log_t *log, dns_zone_t *zone, dns_db_t *db,
+ dns_dbversion_t *ver, dns_name_t *name, isc_boolean_t cut,
+ dns_diff_t *diff, dst_key_t **keys, unsigned int nkeys,
+ isc_stdtime_t inception, isc_stdtime_t expire,
+ isc_boolean_t check_ksk, isc_boolean_t keyset_kskonly)
+{
+ isc_result_t result;
+ dns_dbnode_t *node;
+ dns_rdatasetiter_t *iter;
+
+ node = NULL;
+ result = dns_db_findnode(db, name, ISC_FALSE, &node);
+ if (result == ISC_R_NOTFOUND)
+ return (ISC_R_SUCCESS);
+ if (result != ISC_R_SUCCESS)
+ return (result);
+
+ iter = NULL;
+ result = dns_db_allrdatasets(db, node, ver,
+ (isc_stdtime_t) 0, &iter);
+ if (result != ISC_R_SUCCESS)
+ goto cleanup_node;
+
+ for (result = dns_rdatasetiter_first(iter);
+ result == ISC_R_SUCCESS;
+ result = dns_rdatasetiter_next(iter))
+ {
+ dns_rdataset_t rdataset;
+ dns_rdatatype_t type;
+ isc_boolean_t flag;
+
+ dns_rdataset_init(&rdataset);
+ dns_rdatasetiter_current(iter, &rdataset);
+ type = rdataset.type;
+ dns_rdataset_disassociate(&rdataset);
+
+ /*
+ * We don't need to sign unsigned NSEC records at the cut
+ * as they are handled elsewhere.
+ */
+ if ((type == dns_rdatatype_rrsig) ||
+ (cut && type != dns_rdatatype_ds))
+ continue;
+ result = rrset_exists(db, ver, name, dns_rdatatype_rrsig,
+ type, &flag);
+ if (result != ISC_R_SUCCESS)
+ goto cleanup_iterator;
+ if (flag)
+ continue;;
+ result = add_sigs(log, zone, db, ver, name, type, diff,
+ keys, nkeys, inception, expire,
+ check_ksk, keyset_kskonly);
+ if (result != ISC_R_SUCCESS)
+ goto cleanup_iterator;
+ }
+ if (result == ISC_R_NOMORE)
+ result = ISC_R_SUCCESS;
+
+ cleanup_iterator:
+ dns_rdatasetiter_destroy(&iter);
+
+ cleanup_node:
+ dns_db_detachnode(db, &node);
+
+ return (result);
+}
+
+/*%
+ * Update RRSIG, NSEC and NSEC3 records affected by an update. The original
+ * update, including the SOA serial update but excluding the RRSIG & NSEC
+ * changes, is in "diff" and has already been applied to "newver" of "db".
+ * The database version prior to the update is "oldver".
+ *
+ * The necessary RRSIG, NSEC and NSEC3 changes will be applied to "newver"
+ * and added (as a minimal diff) to "diff".
+ *
+ * The RRSIGs generated will be valid for 'sigvalidityinterval' seconds.
+ */
+isc_result_t
+dns_update_signatures(dns_update_log_t *log, dns_zone_t *zone, dns_db_t *db,
+ dns_dbversion_t *oldver, dns_dbversion_t *newver,
+ dns_diff_t *diff, isc_uint32_t sigvalidityinterval)
+{
+ isc_result_t result;
+ dns_difftuple_t *t;
+ dns_diff_t diffnames;
+ dns_diff_t affected;
+ dns_diff_t sig_diff;
+ dns_diff_t nsec_diff;
+ dns_diff_t nsec_mindiff;
+ isc_boolean_t flag, build_nsec, build_nsec3;
+ dst_key_t *zone_keys[MAXZONEKEYS];
+ unsigned int nkeys = 0;
+ unsigned int i;
+ isc_stdtime_t now, inception, expire;
+ dns_ttl_t nsecttl;
+ dns_rdata_soa_t soa;
+ dns_rdata_t rdata = DNS_RDATA_INIT;
+ dns_rdataset_t rdataset;
+ dns_dbnode_t *node = NULL;
+ isc_boolean_t check_ksk, keyset_kskonly;
+ isc_boolean_t unsecure;
+ isc_boolean_t cut;
+ dns_rdatatype_t privatetype = dns_zone_getprivatetype(zone);
+
+ dns_diff_init(diff->mctx, &diffnames);
+ dns_diff_init(diff->mctx, &affected);
+
+ dns_diff_init(diff->mctx, &sig_diff);
+ sig_diff.resign = dns_zone_getsigresigninginterval(zone);
+ dns_diff_init(diff->mctx, &nsec_diff);
+ dns_diff_init(diff->mctx, &nsec_mindiff);
+
+ result = find_zone_keys(zone, db, newver, diff->mctx,
+ MAXZONEKEYS, zone_keys, &nkeys);
+ if (result != ISC_R_SUCCESS) {
+ update_log(log, zone, ISC_LOG_ERROR,
+ "could not get zone keys for secure dynamic update");
+ goto failure;
+ }
+
+ isc_stdtime_get(&now);
+ inception = now - 3600; /* Allow for some clock skew. */
+ expire = now + sigvalidityinterval;
+
+ /*
+ * Do we look at the KSK flag on the DNSKEY to determining which
+ * keys sign which RRsets? First check the zone option then
+ * check the keys flags to make sure at least one has a ksk set
+ * and one doesn't.
+ */
+ check_ksk = ISC_TF((dns_zone_getoptions(zone) &
+ DNS_ZONEOPT_UPDATECHECKKSK) != 0);
+ keyset_kskonly = ISC_TF((dns_zone_getoptions(zone) &
+ DNS_ZONEOPT_DNSKEYKSKONLY) != 0);
+
+ /*
+ * Get the NSEC/NSEC3 TTL from the SOA MINIMUM field.
+ */
+ CHECK(dns_db_findnode(db, dns_db_origin(db), ISC_FALSE, &node));
+ dns_rdataset_init(&rdataset);
+ CHECK(dns_db_findrdataset(db, node, newver, dns_rdatatype_soa, 0,
+ (isc_stdtime_t) 0, &rdataset, NULL));
+ CHECK(dns_rdataset_first(&rdataset));
+ dns_rdataset_current(&rdataset, &rdata);
+ CHECK(dns_rdata_tostruct(&rdata, &soa, NULL));
+ nsecttl = soa.minimum;
+ dns_rdataset_disassociate(&rdataset);
+ dns_db_detachnode(db, &node);
+
+ /*
+ * Find all RRsets directly affected by the update, and
+ * update their RRSIGs. Also build a list of names affected
+ * by the update in "diffnames".
+ */
+ CHECK(dns_diff_sort(diff, temp_order));
+
+ t = ISC_LIST_HEAD(diff->tuples);
+ while (t != NULL) {
+ dns_name_t *name = &t->name;
+ /* Now "name" is a new, unique name affected by the update. */
+
+ CHECK(namelist_append_name(&diffnames, name));
+
+ while (t != NULL && dns_name_equal(&t->name, name)) {
+ dns_rdatatype_t type;
+ type = t->rdata.type;
+
+ /*
+ * Now "name" and "type" denote a new unique RRset
+ * affected by the update.
+ */
+
+ /* Don't sign RRSIGs. */
+ if (type == dns_rdatatype_rrsig)
+ goto skip;
+
+ /*
+ * Delete all old RRSIGs covering this type, since they
+ * are all invalid when the signed RRset has changed.
+ * We may not be able to recreate all of them - tough.
+ * Special case changes to the zone's DNSKEY records
+ * to support offline KSKs.
+ */
+ if (type == dns_rdatatype_dnskey)
+ del_keysigs(db, newver, name, &sig_diff,
+ zone_keys, nkeys);
+ else
+ CHECK(delete_if(true_p, db, newver, name,
+ dns_rdatatype_rrsig, type,
+ NULL, &sig_diff));
+
+ /*
+ * If this RRset is still visible after the update,
+ * add a new signature for it.
+ */
+ CHECK(rrset_visible(db, newver, name, type, &flag));
+ if (flag) {
+ CHECK(add_sigs(log, zone, db, newver, name,
+ type, &sig_diff, zone_keys,
+ nkeys, inception, expire,
+ check_ksk, keyset_kskonly));
+ }
+ skip:
+ /* Skip any other updates to the same RRset. */
+ while (t != NULL &&
+ dns_name_equal(&t->name, name) &&
+ t->rdata.type == type)
+ {
+ t = ISC_LIST_NEXT(t, link);
+ }
+ }
+ }
+ update_log(log, zone, ISC_LOG_DEBUG(3), "updated data signatures");
+
+ /* Remove orphaned NSECs and RRSIG NSECs. */
+ for (t = ISC_LIST_HEAD(diffnames.tuples);
+ t != NULL;
+ t = ISC_LIST_NEXT(t, link))
+ {
+ CHECK(non_nsec_rrset_exists(db, newver, &t->name, &flag));
+ if (! flag) {
+ CHECK(delete_if(true_p, db, newver, &t->name,
+ dns_rdatatype_any, 0,
+ NULL, &sig_diff));
+ }
+ }
+ update_log(log, zone, ISC_LOG_DEBUG(3),
+ "removed any orphaned NSEC records");
+
+ /*
+ * See if we need to build NSEC or NSEC3 chains.
+ */
+ CHECK(dns_private_chains(db, newver, privatetype, &build_nsec,
+ &build_nsec3));
+ if (!build_nsec)
+ goto update_nsec3;
+
+ update_log(log, zone, ISC_LOG_DEBUG(3), "rebuilding NSEC chain");
+
+ /*
+ * When a name is created or deleted, its predecessor needs to
+ * have its NSEC updated.
+ */
+ for (t = ISC_LIST_HEAD(diffnames.tuples);
+ t != NULL;
+ t = ISC_LIST_NEXT(t, link))
+ {
+ isc_boolean_t existed, exists;
+ dns_fixedname_t fixedname;
+ dns_name_t *prevname;
+
+ dns_fixedname_init(&fixedname);
+ prevname = dns_fixedname_name(&fixedname);
+
+ if (oldver != NULL)
+ CHECK(name_exists(db, oldver, &t->name, &existed));
+ else
+ existed = ISC_FALSE;
+ CHECK(name_exists(db, newver, &t->name, &exists));
+ if (exists == existed)
+ continue;
+
+ /*
+ * Find the predecessor.
+ * When names become obscured or unobscured in this update
+ * transaction, we may find the wrong predecessor because
+ * the NSECs have not yet been updated to reflect the delegation
+ * change. This should not matter because in this case,
+ * the correct predecessor is either the delegation node or
+ * a newly unobscured node, and those nodes are on the
+ * "affected" list in any case.
+ */
+ CHECK(next_active(log, zone, db, newver,
+ &t->name, prevname, ISC_FALSE));
+ CHECK(namelist_append_name(&affected, prevname));
+ }
+
+ /*
+ * Find names potentially affected by delegation changes
+ * (obscured by adding an NS or DNAME, or unobscured by
+ * removing one).
+ */
+ for (t = ISC_LIST_HEAD(diffnames.tuples);
+ t != NULL;
+ t = ISC_LIST_NEXT(t, link))
+ {
+ isc_boolean_t ns_existed, dname_existed;
+ isc_boolean_t ns_exists, dname_exists;
+
+ if (oldver != NULL)
+ CHECK(rrset_exists(db, oldver, &t->name,
+ dns_rdatatype_ns, 0, &ns_existed));
+ else
+ ns_existed = ISC_FALSE;
+ if (oldver != NULL)
+ CHECK(rrset_exists(db, oldver, &t->name,
+ dns_rdatatype_dname, 0,
+ &dname_existed));
+ else
+ dname_existed = ISC_FALSE;
+ CHECK(rrset_exists(db, newver, &t->name, dns_rdatatype_ns, 0,
+ &ns_exists));
+ CHECK(rrset_exists(db, newver, &t->name, dns_rdatatype_dname, 0,
+ &dname_exists));
+ if ((ns_exists || dname_exists) == (ns_existed || dname_existed))
+ continue;
+ /*
+ * There was a delegation change. Mark all subdomains
+ * of t->name as potentially needing a NSEC update.
+ */
+ CHECK(namelist_append_subdomain(db, &t->name, &affected));
+ }
+
+ ISC_LIST_APPENDLIST(affected.tuples, diffnames.tuples, link);
+ INSIST(ISC_LIST_EMPTY(diffnames.tuples));
+
+ CHECK(uniqify_name_list(&affected));
+
+ /*
+ * Determine which names should have NSECs, and delete/create
+ * NSECs to make it so. We don't know the final NSEC targets yet,
+ * so we just create placeholder NSECs with arbitrary contents
+ * to indicate that their respective owner names should be part of
+ * the NSEC chain.
+ */
+ for (t = ISC_LIST_HEAD(affected.tuples);
+ t != NULL;
+ t = ISC_LIST_NEXT(t, link))
+ {
+ isc_boolean_t exists;
+ dns_name_t *name = &t->name;
+
+ CHECK(name_exists(db, newver, name, &exists));
+ if (! exists)
+ continue;
+ CHECK(is_active(db, newver, name, &flag, &cut, NULL));
+ if (!flag) {
+ /*
+ * This name is obscured. Delete any
+ * existing NSEC record.
+ */
+ CHECK(delete_if(true_p, db, newver, name,
+ dns_rdatatype_nsec, 0,
+ NULL, &nsec_diff));
+ CHECK(delete_if(rrsig_p, db, newver, name,
+ dns_rdatatype_any, 0, NULL, diff));
+ } else {
+ /*
+ * This name is not obscured. It needs to have a
+ * NSEC unless it is the at the origin, in which
+ * case it should already exist if there is a complete
+ * NSEC chain and if there isn't a complete NSEC chain
+ * we don't want to add one as that would signal that
+ * there is a complete NSEC chain.
+ */
+ if (!dns_name_equal(name, dns_db_origin(db))) {
+ CHECK(rrset_exists(db, newver, name,
+ dns_rdatatype_nsec, 0,
+ &flag));
+ if (!flag)
+ CHECK(add_placeholder_nsec(db, newver,
+ name, diff));
+ }
+ CHECK(add_exposed_sigs(log, zone, db, newver, name,
+ cut, &sig_diff, zone_keys, nkeys,
+ inception, expire, check_ksk,
+ keyset_kskonly));
+ }
+ }
+
+ /*
+ * Now we know which names are part of the NSEC chain.
+ * Make them all point at their correct targets.
+ */
+ for (t = ISC_LIST_HEAD(affected.tuples);
+ t != NULL;
+ t = ISC_LIST_NEXT(t, link))
+ {
+ CHECK(rrset_exists(db, newver, &t->name,
+ dns_rdatatype_nsec, 0, &flag));
+ if (flag) {
+ /*
+ * There is a NSEC, but we don't know if it is correct.
+ * Delete it and create a correct one to be sure.
+ * If the update was unnecessary, the diff minimization
+ * will take care of eliminating it from the journal,
+ * IXFRs, etc.
+ *
+ * The RRSIG bit should always be set in the NSECs
+ * we generate, because they will all get RRSIG NSECs.
+ * (XXX what if the zone keys are missing?).
+ * Because the RRSIG NSECs have not necessarily been
+ * created yet, the correctness of the bit mask relies
+ * on the assumption that NSECs are only created if
+ * there is other data, and if there is other data,
+ * there are other RRSIGs.
+ */
+ CHECK(add_nsec(log, zone, db, newver, &t->name,
+ nsecttl, &nsec_diff));
+ }
+ }
+
+ /*
+ * Minimize the set of NSEC updates so that we don't
+ * have to regenerate the RRSIG NSECs for NSECs that were
+ * replaced with identical ones.
+ */
+ while ((t = ISC_LIST_HEAD(nsec_diff.tuples)) != NULL) {
+ ISC_LIST_UNLINK(nsec_diff.tuples, t, link);
+ dns_diff_appendminimal(&nsec_mindiff, &t);
+ }
+
+ update_log(log, zone, ISC_LOG_DEBUG(3), "signing rebuilt NSEC chain");
+
+ /* Update RRSIG NSECs. */
+ for (t = ISC_LIST_HEAD(nsec_mindiff.tuples);
+ t != NULL;
+ t = ISC_LIST_NEXT(t, link))
+ {
+ if (t->op == DNS_DIFFOP_DEL) {
+ CHECK(delete_if(true_p, db, newver, &t->name,
+ dns_rdatatype_rrsig, dns_rdatatype_nsec,
+ NULL, &sig_diff));
+ } else if (t->op == DNS_DIFFOP_ADD) {
+ CHECK(add_sigs(log, zone, db, newver, &t->name,
+ dns_rdatatype_nsec, &sig_diff,
+ zone_keys, nkeys, inception, expire,
+ check_ksk, keyset_kskonly));
+ } else {
+ INSIST(0);
+ }
+ }
+
+ update_nsec3:
+
+ /* Record our changes for the journal. */
+ while ((t = ISC_LIST_HEAD(sig_diff.tuples)) != NULL) {
+ ISC_LIST_UNLINK(sig_diff.tuples, t, link);
+ dns_diff_appendminimal(diff, &t);
+ }
+ while ((t = ISC_LIST_HEAD(nsec_mindiff.tuples)) != NULL) {
+ ISC_LIST_UNLINK(nsec_mindiff.tuples, t, link);
+ dns_diff_appendminimal(diff, &t);
+ }
+
+ INSIST(ISC_LIST_EMPTY(sig_diff.tuples));
+ INSIST(ISC_LIST_EMPTY(nsec_diff.tuples));
+ INSIST(ISC_LIST_EMPTY(nsec_mindiff.tuples));
+
+ if (!build_nsec3) {
+ update_log(log, zone, ISC_LOG_DEBUG(3),
+ "no NSEC3 chains to rebuild");
+ goto failure;
+ }
+
+ update_log(log, zone, ISC_LOG_DEBUG(3), "rebuilding NSEC3 chains");
+
+ dns_diff_clear(&diffnames);
+ dns_diff_clear(&affected);
+
+ CHECK(dns_diff_sort(diff, temp_order));
+
+ /*
+ * Find names potentially affected by delegation changes
+ * (obscured by adding an NS or DNAME, or unobscured by
+ * removing one).
+ */
+ t = ISC_LIST_HEAD(diff->tuples);
+ while (t != NULL) {
+ dns_name_t *name = &t->name;
+
+ isc_boolean_t ns_existed, dname_existed;
+ isc_boolean_t ns_exists, dname_exists;
+ isc_boolean_t exists, existed;
+
+ if (t->rdata.type == dns_rdatatype_nsec ||
+ t->rdata.type == dns_rdatatype_rrsig) {
+ t = ISC_LIST_NEXT(t, link);
+ continue;
+ }
+
+ CHECK(namelist_append_name(&affected, name));
+
+ if (oldver != NULL)
+ CHECK(rrset_exists(db, oldver, name, dns_rdatatype_ns,
+ 0, &ns_existed));
+ else
+ ns_existed = ISC_FALSE;
+ if (oldver != NULL)
+ CHECK(rrset_exists(db, oldver, name,
+ dns_rdatatype_dname, 0,
+ &dname_existed));
+ else
+ dname_existed = ISC_FALSE;
+ CHECK(rrset_exists(db, newver, name, dns_rdatatype_ns, 0,
+ &ns_exists));
+ CHECK(rrset_exists(db, newver, name, dns_rdatatype_dname, 0,
+ &dname_exists));
+
+ exists = ns_exists || dname_exists;
+ existed = ns_existed || dname_existed;
+ if (exists == existed)
+ goto nextname;
+ /*
+ * There was a delegation change. Mark all subdomains
+ * of t->name as potentially needing a NSEC3 update.
+ */
+ CHECK(namelist_append_subdomain(db, name, &affected));
+
+ nextname:
+ while (t != NULL && dns_name_equal(&t->name, name))
+ t = ISC_LIST_NEXT(t, link);
+ }
+
+ for (t = ISC_LIST_HEAD(affected.tuples);
+ t != NULL;
+ t = ISC_LIST_NEXT(t, link)) {
+ dns_name_t *name = &t->name;
+
+ unsecure = ISC_FALSE; /* Silence compiler warning. */
+ CHECK(is_active(db, newver, name, &flag, &cut, &unsecure));
+
+ if (!flag) {
+ CHECK(delete_if(rrsig_p, db, newver, name,
+ dns_rdatatype_any, 0, NULL, diff));
+ CHECK(dns_nsec3_delnsec3sx(db, newver, name,
+ privatetype, &nsec_diff));
+ } else {
+ CHECK(add_exposed_sigs(log, zone, db, newver, name,
+ cut, &sig_diff, zone_keys, nkeys,
+ inception, expire, check_ksk,
+ keyset_kskonly));
+ CHECK(dns_nsec3_addnsec3sx(db, newver, name, nsecttl,
+ unsecure, privatetype,
+ &nsec_diff));
+ }
+ }
+
+ /*
+ * Minimize the set of NSEC3 updates so that we don't
+ * have to regenerate the RRSIG NSEC3s for NSEC3s that were
+ * replaced with identical ones.
+ */
+ while ((t = ISC_LIST_HEAD(nsec_diff.tuples)) != NULL) {
+ ISC_LIST_UNLINK(nsec_diff.tuples, t, link);
+ dns_diff_appendminimal(&nsec_mindiff, &t);
+ }
+
+ update_log(log, zone, ISC_LOG_DEBUG(3),
+ "signing rebuilt NSEC3 chain");
+
+ /* Update RRSIG NSEC3s. */
+ for (t = ISC_LIST_HEAD(nsec_mindiff.tuples);
+ t != NULL;
+ t = ISC_LIST_NEXT(t, link))
+ {
+ if (t->op == DNS_DIFFOP_DEL) {
+ CHECK(delete_if(true_p, db, newver, &t->name,
+ dns_rdatatype_rrsig,
+ dns_rdatatype_nsec3,
+ NULL, &sig_diff));
+ } else if (t->op == DNS_DIFFOP_ADD) {
+ CHECK(add_sigs(log, zone, db, newver, &t->name,
+ dns_rdatatype_nsec3,
+ &sig_diff, zone_keys, nkeys,
+ inception, expire, check_ksk,
+ keyset_kskonly));
+ } else {
+ INSIST(0);
+ }
+ }
+
+ /* Record our changes for the journal. */
+ while ((t = ISC_LIST_HEAD(sig_diff.tuples)) != NULL) {
+ ISC_LIST_UNLINK(sig_diff.tuples, t, link);
+ dns_diff_appendminimal(diff, &t);
+ }
+ while ((t = ISC_LIST_HEAD(nsec_mindiff.tuples)) != NULL) {
+ ISC_LIST_UNLINK(nsec_mindiff.tuples, t, link);
+ dns_diff_appendminimal(diff, &t);
+ }
+
+ INSIST(ISC_LIST_EMPTY(sig_diff.tuples));
+ INSIST(ISC_LIST_EMPTY(nsec_diff.tuples));
+ INSIST(ISC_LIST_EMPTY(nsec_mindiff.tuples));
+
+ failure:
+ dns_diff_clear(&sig_diff);
+ dns_diff_clear(&nsec_diff);
+ dns_diff_clear(&nsec_mindiff);
+
+ dns_diff_clear(&affected);
+ dns_diff_clear(&diffnames);
+
+ for (i = 0; i < nkeys; i++)
+ dst_key_free(&zone_keys[i]);
+
+ return (result);
+}
isc_uint32_t
dns_update_soaserial(isc_uint32_t serial, dns_updatemethod_t method) {
diff --git a/lib/dns/view.c b/lib/dns/view.c
index fafbae06..cd7a2be4 100644
--- a/lib/dns/view.c
+++ b/lib/dns/view.c
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: view.c,v 1.181 2011-08-02 20:36:12 each Exp $ */
+/* $Id: view.c,v 1.184 2011-09-06 22:29:33 smann Exp $ */
/*! \file */
@@ -181,7 +181,6 @@ dns_view_create(isc_mem_t *mctx, dns_rdataclass_t rdclass,
view->answeracl_exclude = NULL;
view->denyanswernames = NULL;
view->answernames_exclude = NULL;
- view->requestixfr = ISC_TRUE;
view->provideixfr = ISC_TRUE;
view->maxcachettl = 7 * 24 * 3600;
view->maxncachettl = 3 * 3600;
@@ -1418,6 +1417,7 @@ isc_result_t
dns_view_load(dns_view_t *view, isc_boolean_t stop) {
REQUIRE(DNS_VIEW_VALID(view));
+ REQUIRE(view->zonetable != NULL);
return (dns_zt_load(view->zonetable, stop));
}
@@ -1426,9 +1426,20 @@ isc_result_t
dns_view_loadnew(dns_view_t *view, isc_boolean_t stop) {
REQUIRE(DNS_VIEW_VALID(view));
+ REQUIRE(view->zonetable != NULL);
return (dns_zt_loadnew(view->zonetable, stop));
}
+
+isc_result_t
+dns_view_asyncload(dns_view_t *view, dns_zt_allloaded_t callback, void *arg) {
+ REQUIRE(DNS_VIEW_VALID(view));
+ REQUIRE(view->zonetable != NULL);
+
+ return (dns_zt_asyncload(view->zonetable, callback, arg));
+}
+
+
#endif /* BIND9 */
isc_result_t
@@ -1728,6 +1739,9 @@ isc_result_t
dns_view_issecuredomain(dns_view_t *view, dns_name_t *name,
isc_boolean_t *secure_domain) {
REQUIRE(DNS_VIEW_VALID(view));
+
+ if (view->secroots_priv == NULL)
+ return (ISC_R_NOTFOUND);
return (dns_keytable_issecuredomain(view->secroots_priv, name,
secure_domain));
}
diff --git a/lib/dns/win32/libdns.def b/lib/dns/win32/libdns.def
index 493ed6b2..6ced2e95 100644
--- a/lib/dns/win32/libdns.def
+++ b/lib/dns/win32/libdns.def
@@ -699,6 +699,7 @@ dns_tsigrcode_fromtext
dns_tsigrcode_totext
dns_ttl_fromtext
dns_ttl_totext
+dns_update_signatures
dns_update_soaserial
dns_validator_cancel
dns_validator_create
@@ -706,6 +707,7 @@ dns_validator_destroy
dns_validator_send
dns_view_adddelegationonly
dns_view_addzone
+dns_view_asyncload
dns_view_attach
dns_view_checksig
dns_view_create
@@ -801,6 +803,7 @@ dns_zone_getoptions
dns_zone_getorigin
dns_zone_getprivatetype
dns_zone_getqueryacl
+dns_zone_getraw
dns_zone_getrequeststats
dns_zone_getserial
dns_zone_getserial2
@@ -822,6 +825,7 @@ dns_zone_iattach
dns_zone_idetach
dns_zone_isdynamic
dns_zone_isforced
+dns_zone_link
dns_zone_load
dns_zone_loadandthaw
dns_zone_loadnew
@@ -881,6 +885,7 @@ dns_zone_setprivatetype
dns_zone_setqueryacl
dns_zone_setqueryonacl
dns_zone_setrefreshkeyinterval
+dns_zone_setrequestixfr
dns_zone_setrequeststats
dns_zone_setserialupdatemethod
dns_zone_setsignatures
diff --git a/lib/dns/xfrin.c b/lib/dns/xfrin.c
index 31d21891..e0a23ecc 100644
--- a/lib/dns/xfrin.c
+++ b/lib/dns/xfrin.c
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: xfrin.c,v 1.170 2011-03-11 06:11:25 marka Exp $ */
+/* $Id: xfrin.c,v 1.171 2011-08-30 05:16:14 marka Exp $ */
/*! \file */
@@ -630,7 +630,8 @@ dns_xfrin_create2(dns_zone_t *zone, dns_rdatatype_t xfrtype,
isc_sockaddr_t *masteraddr, isc_sockaddr_t *sourceaddr,
dns_tsigkey_t *tsigkey, isc_mem_t *mctx,
isc_timermgr_t *timermgr, isc_socketmgr_t *socketmgr,
- isc_task_t *task, dns_xfrindone_t done, dns_xfrin_ctx_t **xfrp)
+ isc_task_t *task, dns_xfrindone_t done,
+ dns_xfrin_ctx_t **xfrp)
{
dns_name_t *zonename = dns_zone_getorigin(zone);
dns_xfrin_ctx_t *xfr = NULL;
diff --git a/lib/dns/zone.c b/lib/dns/zone.c
index 930bbb21..e2ffeb9f 100644
--- a/lib/dns/zone.c
+++ b/lib/dns/zone.c
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: zone.c,v 1.623 2011-08-09 02:24:28 marka Exp $ */
+/* $Id: zone.c,v 1.632 2011-09-06 22:29:33 smann Exp $ */
/*! \file */
@@ -79,6 +79,7 @@
#include <dns/update.h>
#include <dns/xfrin.h>
#include <dns/zone.h>
+#include <dns/zt.h>
#include <dst/dst.h>
@@ -138,6 +139,7 @@ typedef struct dns_notify dns_notify_t;
typedef struct dns_stub dns_stub_t;
typedef struct dns_load dns_load_t;
typedef struct dns_forward dns_forward_t;
+typedef ISC_LIST(dns_forward_t) dns_forwardlist_t;
typedef struct dns_io dns_io_t;
typedef ISC_LIST(dns_io_t) dns_iolist_t;
typedef struct dns_signing dns_signing_t;
@@ -145,6 +147,7 @@ typedef ISC_LIST(dns_signing_t) dns_signinglist_t;
typedef struct dns_nsec3chain dns_nsec3chain_t;
typedef ISC_LIST(dns_nsec3chain_t) dns_nsec3chainlist_t;
typedef struct dns_keyfetch dns_keyfetch_t;
+typedef struct dns_asyncload dns_asyncload_t;
#define DNS_ZONE_CHECKLOCK
#ifdef DNS_ZONE_CHECKLOCK
@@ -244,6 +247,7 @@ struct dns_zone {
unsigned int notifycnt;
isc_sockaddr_t notifyfrom;
isc_task_t *task;
+ isc_task_t *loadtask;
isc_sockaddr_t notifysrc4;
isc_sockaddr_t notifysrc6;
isc_sockaddr_t xfrsource4;
@@ -345,6 +349,19 @@ struct dns_zone {
* Serial number update method.
*/
dns_updatemethod_t updatemethod;
+
+ /*%
+ * whether ixfr is requested
+ */
+ isc_boolean_t requestixfr;
+
+ /*%
+ * Outstanding forwarded UPDATE requests.
+ */
+ dns_forwardlist_t forwards;
+
+ dns_zone_t *raw;
+ dns_zone_t *secure;
};
#define DNS_ZONE_FLAG(z,f) (ISC_TF(((z)->flags & (f)) != 0))
@@ -393,7 +410,7 @@ struct dns_zone {
#define DNS_ZONEFLG_NEEDCOMPACT 0x02000000U
#define DNS_ZONEFLG_REFRESHING 0x04000000U /*%< Refreshing keydata */
#define DNS_ZONEFLG_THAW 0x08000000U
-/* #define DNS_ZONEFLG_XXXXX 0x10000000U XXXMPA unused. */
+#define DNS_ZONEFLG_LOADPENDING 0x10000000U /*%< Loading scheduled */
#define DNS_ZONEFLG_NODELAY 0x20000000U
#define DNS_ZONE_OPTION(z,o) (((z)->options & (o)) != 0)
@@ -427,6 +444,7 @@ struct dns_zonemgr {
isc_timermgr_t * timermgr;
isc_socketmgr_t * socketmgr;
isc_taskpool_t * zonetasks;
+ isc_taskpool_t * loadtasks;
isc_task_t * task;
isc_ratelimiter_t * rl;
isc_rwlock_t rwlock;
@@ -510,6 +528,7 @@ struct dns_forward {
isc_sockaddr_t addr;
dns_updatecallback_t callback;
void *callback_arg;
+ ISC_LINK(dns_forward_t) link;
};
/*%
@@ -583,6 +602,15 @@ struct dns_keyfetch {
dns_fetch_t *fetch;
};
+/*%
+ * Hold state for an asynchronous load
+ */
+struct dns_asyncload {
+ dns_zone_t *zone;
+ dns_zt_zoneloaded_t loaded;
+ void *loaded_arg;
+};
+
#define HOUR 3600
#define DAY (24*HOUR)
#define MONTH (30*DAY)
@@ -811,6 +839,7 @@ dns_zone_create(dns_zone_t **zonep, isc_mem_t *mctx) {
zone->notifytype = dns_notifytype_yes;
zone->notifycnt = 0;
zone->task = NULL;
+ zone->loadtask = NULL;
zone->update_acl = NULL;
zone->forward_acl = NULL;
zone->notify_acl = NULL;
@@ -863,6 +892,9 @@ dns_zone_create(dns_zone_t **zonep, isc_mem_t *mctx) {
zone->privatetype = (dns_rdatatype_t)0xffffU;
zone->added = ISC_FALSE;
zone->rpz_zone = ISC_FALSE;
+ ISC_LIST_INIT(zone->forwards);
+ zone->raw = NULL;
+ zone->secure = NULL;
zone->magic = ZONE_MAGIC;
@@ -919,6 +951,8 @@ zone_free(dns_zone_t *zone) {
if (zone->task != NULL)
isc_task_detach(&zone->task);
+ if (zone->loadtask != NULL)
+ isc_task_detach(&zone->loadtask);
if (zone->zmgr != NULL)
dns_zonemgr_releasezone(zone->zmgr, zone);
@@ -1026,6 +1060,8 @@ dns_zone_setclass(dns_zone_t *zone, dns_rdataclass_t rdclass) {
zone_rdclass_tostr(zone, namebuf, sizeof namebuf);
zone->strrdclass = isc_mem_strdup(zone->mctx, namebuf);
+ if (zone->raw != NULL)
+ dns_zone_setclass(zone->raw, rdclass);
UNLOCK_ZONE(zone);
}
@@ -1217,10 +1253,12 @@ dns_zone_setview(dns_zone_t *zone, dns_view_t *view) {
zone_viewname_tostr(zone, namebuf, sizeof namebuf);
zone->strviewname = isc_mem_strdup(zone->mctx, namebuf);
+ if (zone->raw != NULL)
+ dns_zone_setview(zone->raw, view);
+
UNLOCK_ZONE(zone);
}
-
dns_view_t *
dns_zone_getview(dns_zone_t *zone) {
REQUIRE(DNS_ZONE_VALID(zone));
@@ -1254,6 +1292,8 @@ dns_zone_setorigin(dns_zone_t *zone, const dns_name_t *origin) {
zone_name_tostr(zone, namebuf, sizeof namebuf);
zone->strname = isc_mem_strdup(zone->mctx, namebuf);
+ if (result == ISC_R_SUCCESS && zone->raw != NULL)
+ result = dns_zone_setorigin(zone->raw, origin);
UNLOCK_ZONE(zone);
return (result);
}
@@ -1424,6 +1464,12 @@ zone_load(dns_zone_t *zone, unsigned int flags) {
LOCK_ZONE(zone);
TIME_NOW(&now);
+ if (zone->raw != NULL) {
+ result = zone_load(zone->raw, flags);
+ if (result != ISC_R_SUCCESS)
+ goto cleanup;
+ }
+
INSIST(zone->type != dns_zone_none);
if (DNS_ZONE_FLAG(zone, DNS_ZONEFLG_LOADING)) {
@@ -1433,7 +1479,6 @@ zone_load(dns_zone_t *zone, unsigned int flags) {
goto cleanup;
}
-
INSIST(zone->db_argc >= 1);
rbt = strcmp(zone->db_argv[0], "rbt") == 0 ||
@@ -1592,6 +1637,82 @@ dns_zone_loadnew(dns_zone_t *zone) {
return (zone_load(zone, DNS_ZONELOADFLAG_NOSTAT));
}
+static void
+zone_asyncload(isc_task_t *task, isc_event_t *event) {
+ dns_asyncload_t *asl = event->ev_arg;
+ dns_zone_t *zone = asl->zone;
+ isc_result_t result = ISC_R_SUCCESS;
+
+ UNUSED(task);
+
+ REQUIRE(DNS_ZONE_VALID(zone));
+
+ if ((event->ev_attributes & ISC_EVENTATTR_CANCELED) != 0)
+ result = ISC_R_CANCELED;
+ isc_event_free(&event);
+ if (result == ISC_R_CANCELED ||
+ !DNS_ZONE_FLAG(zone, DNS_ZONEFLG_LOADPENDING))
+ return;
+
+ zone_load(zone, 0);
+
+ LOCK_ZONE(zone);
+ DNS_ZONE_CLRFLAG(zone, DNS_ZONEFLG_LOADPENDING);
+ UNLOCK_ZONE(zone);
+
+ /* Inform the zone table we've finished loading */
+ if (asl->loaded != NULL)
+ (asl->loaded)(asl->loaded_arg, zone, task);
+
+ isc_mem_put(zone->mctx, asl, sizeof (*asl));
+}
+
+isc_result_t
+dns_zone_asyncload(dns_zone_t *zone, dns_zt_zoneloaded_t done, void *arg) {
+ isc_event_t *e;
+ dns_asyncload_t *asl = NULL;
+ isc_result_t result = ISC_R_SUCCESS;
+
+ REQUIRE(DNS_ZONE_VALID(zone));
+
+ if (zone->zmgr == NULL)
+ return (ISC_R_FAILURE);
+
+ asl = isc_mem_get(zone->mctx, sizeof (*asl));
+ if (asl == NULL)
+ CHECK(ISC_R_NOMEMORY);
+
+ asl->zone = zone;
+ asl->loaded = done;
+ asl->loaded_arg = arg;
+
+ e = isc_event_allocate(zone->zmgr->mctx, zone->zmgr,
+ DNS_EVENT_ZONELOAD,
+ zone_asyncload, asl,
+ sizeof(isc_event_t));
+ if (e == NULL)
+ CHECK(ISC_R_NOMEMORY);
+
+ LOCK_ZONE(zone);
+ DNS_ZONE_SETFLAG(zone, DNS_ZONEFLG_LOADPENDING);
+ isc_task_send(zone->loadtask, &e);
+ UNLOCK_ZONE(zone);
+
+ return (ISC_R_SUCCESS);
+
+ failure:
+ if (asl != NULL)
+ isc_mem_put(zone->mctx, asl, sizeof (*asl));
+ return (result);
+}
+
+isc_boolean_t
+dns__zone_loadpending(dns_zone_t *zone) {
+ REQUIRE(DNS_ZONE_VALID(zone));
+
+ return (ISC_TF(DNS_ZONE_FLAG(zone, DNS_ZONEFLG_LOADPENDING)));
+}
+
isc_result_t
dns_zone_loadandthaw(dns_zone_t *zone) {
isc_result_t result;
@@ -1729,7 +1850,7 @@ zone_startload(dns_db_t *db, dns_zone_t *zone, isc_time_t loadtime) {
if (DNS_ZONE_OPTION(zone, DNS_ZONEOPT_MANYERRORS))
options |= DNS_MASTER_MANYERRORS;
- if (zone->zmgr != NULL && zone->db != NULL && zone->task != NULL) {
+ if (zone->zmgr != NULL && zone->db != NULL && zone->loadtask != NULL) {
load = isc_mem_get(zone->mctx, sizeof(*load));
if (load == NULL)
return (ISC_R_NOMEMORY);
@@ -1748,7 +1869,7 @@ zone_startload(dns_db_t *db, dns_zone_t *zone, isc_time_t loadtime) {
&load->callbacks.add_private);
if (result != ISC_R_SUCCESS)
goto cleanup;
- result = zonemgr_getio(zone->zmgr, ISC_TRUE, zone->task,
+ result = zonemgr_getio(zone->zmgr, ISC_TRUE, zone->loadtask,
zone_gotreadhandle, load,
&zone->readio);
if (result != ISC_R_SUCCESS) {
@@ -3105,7 +3226,9 @@ update_soa_serial(dns_db_t *db, dns_dbversion_t *ver, dns_diff_t *diff,
* Write all transactions in 'diff' to the zone journal file.
*/
static isc_result_t
-zone_journal(dns_zone_t *zone, dns_diff_t *diff, const char *caller) {
+zone_journal(dns_zone_t *zone, dns_diff_t *diff, isc_uint32_t *bitws,
+ const char *caller)
+{
const char me[] = "zone_journal";
const char *journalfile;
isc_result_t result = ISC_R_SUCCESS;
@@ -3115,13 +3238,15 @@ zone_journal(dns_zone_t *zone, dns_diff_t *diff, const char *caller) {
journalfile = dns_zone_getjournal(zone);
if (journalfile != NULL) {
result = dns_journal_open(zone->mctx, journalfile,
- ISC_TRUE, &journal);
+ DNS_JOURNAL_CREATE, &journal);
if (result != ISC_R_SUCCESS) {
dns_zone_log(zone, ISC_LOG_ERROR,
"%s:dns_journal_open -> %s\n",
caller, dns_result_totext(result));
return (result);
}
+ if (bitws != NULL)
+ dns_journal_set_bitws(journal, *bitws);
result = dns_journal_write_transaction(journal, diff);
dns_journal_destroy(&journal);
@@ -3314,7 +3439,7 @@ sync_keyzone(dns_zone_t *zone, dns_db_t *db) {
/* Write changes to journal file. */
CHECK(update_soa_serial(db, ver, &diff, zone->mctx,
zone->updatemethod));
- CHECK(zone_journal(zone, &diff, "sync_keyzone"));
+ CHECK(zone_journal(zone, &diff, NULL, "sync_keyzone"));
DNS_ZONE_SETFLAG(zone, DNS_ZONEFLG_LOADED);
zone_needdump(zone, 30);
@@ -3423,6 +3548,8 @@ zone_postload(dns_zone_t *zone, dns_db_t *db, isc_time_t loadtime,
"journal rollforward failed: %s",
dns_result_totext(result));
goto cleanup;
+
+
}
if (result == ISC_R_NOTFOUND || result == ISC_R_RANGE) {
dns_zone_log(zone, ISC_LOG_ERROR,
@@ -3531,7 +3658,6 @@ zone_postload(dns_zone_t *zone, dns_db_t *db, isc_time_t loadtime,
result = DNS_R_BADZONE;
goto cleanup;
}
-
if (zone->type == dns_zone_master &&
DNS_ZONE_OPTION(zone, DNS_ZONEOPT_CHECKDUPRR) &&
!zone_check_dup(zone, db)) {
@@ -3729,6 +3855,7 @@ zone_postload(dns_zone_t *zone, dns_db_t *db, isc_time_t loadtime,
dns_zone_log(zone, ISC_LOG_INFO, "loaded serial %u%s", serial,
dns_db_issecure(db) ? " (DNSSEC signed)" : "");
+ DNS_ZONE_CLRFLAG(zone, DNS_ZONEFLG_LOADPENDING);
return (result);
cleanup:
@@ -3749,6 +3876,7 @@ zone_postload(dns_zone_t *zone, dns_db_t *db, isc_time_t loadtime,
} else if (zone->type == dns_zone_master ||
zone->type == dns_zone_redirect)
dns_zone_log(zone, ISC_LOG_ERROR, "not loaded due to errors.");
+
return (result);
}
@@ -4030,6 +4158,8 @@ dns_zone_attach(dns_zone_t *source, dns_zone_t **target) {
void
dns_zone_detach(dns_zone_t **zonep) {
dns_zone_t *zone;
+ dns_zone_t *raw = NULL;
+ dns_zone_t *secure = NULL;
unsigned int refs;
isc_boolean_t free_now = ISC_FALSE;
@@ -4067,12 +4197,21 @@ dns_zone_detach(dns_zone_t **zonep) {
*/
INSIST(zone->view == NULL);
free_now = ISC_TRUE;
+ raw = zone->raw;
+ zone->raw = NULL;
+ secure = zone->secure;
+ zone->secure = NULL;
}
UNLOCK_ZONE(zone);
}
*zonep = NULL;
- if (free_now)
+ if (free_now) {
+ if (raw != NULL)
+ dns_zone_detach(&raw);
+ if (secure != NULL)
+ dns_zone_idetach(&secure);
zone_free(zone);
+ }
}
void
@@ -4350,13 +4489,14 @@ clear_addresskeylist(isc_sockaddr_t **addrsp, dns_name_t ***keynamesp,
REQUIRE(countp != NULL && addrsp != NULL && keynamesp != NULL);
count = *countp;
+ *countp = 0;
addrs = *addrsp;
+ *addrsp = NULL;
keynames = *keynamesp;
+ *keynamesp = NULL;
- if (addrs != NULL) {
+ if (addrs != NULL)
isc_mem_put(mctx, addrs, count * sizeof(isc_sockaddr_t));
- addrs = *addrsp = NULL;
- }
if (keynames != NULL) {
unsigned int i;
@@ -4369,10 +4509,7 @@ clear_addresskeylist(isc_sockaddr_t **addrsp, dns_name_t ***keynamesp,
}
}
isc_mem_put(mctx, keynames, count * sizeof(dns_name_t *));
- keynames = *keynamesp = NULL;
}
-
- count = *countp = 0;
}
static isc_result_t
@@ -5185,7 +5322,7 @@ zone_resigninc(dns_zone_t *zone) {
}
/* Write changes to journal file. */
- CHECK(zone_journal(zone, &sig_diff, "zone_resigninc"));
+ CHECK(zone_journal(zone, &sig_diff, NULL, "zone_resigninc"));
/* Everything has succeeded. Commit the changes. */
dns_db_closeversion(db, &version, ISC_TRUE);
@@ -6561,7 +6698,7 @@ zone_nsec3chain(dns_zone_t *zone) {
}
/* Write changes to journal file. */
- CHECK(zone_journal(zone, &sig_diff, "zone_nsec3chain"));
+ CHECK(zone_journal(zone, &sig_diff, NULL, "zone_nsec3chain"));
LOCK_ZONE(zone);
zone_needdump(zone, DNS_DUMP_DELAY);
@@ -7131,7 +7268,7 @@ zone_sign(dns_zone_t *zone) {
/*
* Write changes to journal file.
*/
- CHECK(zone_journal(zone, &sig_diff, "zone_sign"));
+ CHECK(zone_journal(zone, &sig_diff, NULL, "zone_sign"));
pauseall:
/*
@@ -7888,7 +8025,7 @@ keyfetch_done(isc_task_t *task, isc_event_t *event) {
/* Write changes to journal file. */
CHECK(update_soa_serial(kfetch->db, ver, &diff, mctx,
zone->updatemethod));
- CHECK(zone_journal(zone, &diff, "keyfetch_done"));
+ CHECK(zone_journal(zone, &diff, NULL, "keyfetch_done"));
commit = ISC_TRUE;
DNS_ZONE_SETFLAG(zone, DNS_ZONEFLG_LOADED);
@@ -8046,7 +8183,7 @@ zone_refreshkeys(dns_zone_t *zone) {
if (!ISC_LIST_EMPTY(diff.tuples)) {
CHECK(update_soa_serial(db, ver, &diff, zone->mctx,
zone->updatemethod));
- CHECK(zone_journal(zone, &diff, "sync_keyzone"));
+ CHECK(zone_journal(zone, &diff, NULL, "sync_keyzone"));
commit = ISC_TRUE;
DNS_ZONE_SETFLAG(zone, DNS_ZONEFLG_LOADED);
zone_needdump(zone, 30);
@@ -8074,11 +8211,17 @@ zone_maintenance(dns_zone_t *zone) {
ENTER;
/*
+ * Are we pending load/reload?
+ */
+ if (DNS_ZONE_FLAG(zone, DNS_ZONEFLG_LOADPENDING))
+ return;
+
+ /*
* Configuring the view of this zone may have
* failed, for example because the config file
* had a syntax error. In that case, the view
- * adb or resolver, and we had better not try
- * to do maintenance on it.
+ * adb or resolver will be NULL, and we had better not try
+ * to do further maintenance on it.
*/
if (zone->view == NULL || zone->view->adb == NULL)
return;
@@ -8199,6 +8342,7 @@ zone_maintenance(dns_zone_t *zone) {
set_key_expiry_warning(zone, zone->key_expiry,
isc_time_seconds(&now));
break;
+
default:
break;
}
@@ -8396,6 +8540,21 @@ dump_done(void *arg, isc_result_t result) {
tresult = dns_db_getsoaserial(db, version, &serial);
/*
+ * If there is a secure version of this zone
+ * use its serial if it is less than ours.
+ */
+ if (tresult == ISC_R_SUCCESS &&
+ zone->secure != NULL && zone->secure->db != NULL) {
+ isc_uint32_t sserial;
+ isc_result_t mresult;
+
+ mresult = dns_db_getsoaserial(zone->secure->db,
+ NULL, &sserial);
+ if (mresult == ISC_R_SUCCESS &&
+ isc_serial_lt(sserial, serial))
+ serial = sserial;
+ }
+ /*
* Note: we are task locked here so we can test
* zone->xfr safely.
*/
@@ -8616,6 +8775,24 @@ notify_cancel(dns_zone_t *zone) {
}
static void
+forward_cancel(dns_zone_t *zone) {
+ dns_forward_t *forward;
+
+ /*
+ * 'zone' locked by caller.
+ */
+
+ REQUIRE(LOCKED_ZONE(zone));
+
+ for (forward = ISC_LIST_HEAD(zone->forwards);
+ forward != NULL;
+ forward = ISC_LIST_NEXT(forward, link)) {
+ if (forward->request != NULL)
+ dns_request_cancel(forward->request);
+ }
+}
+
+static void
zone_unload(dns_zone_t *zone) {
/*
@@ -9612,7 +9789,7 @@ refresh_callback(isc_task_t *task, isc_event_t *event) {
dns_rdata_t rdata = DNS_RDATA_INIT;
dns_rdata_soa_t soa;
isc_result_t result;
- isc_uint32_t serial, oldserial;
+ isc_uint32_t serial, oldserial = 0;
unsigned int j;
zone = revent->ev_arg;
@@ -10552,11 +10729,13 @@ static void
zone_shutdown(isc_task_t *task, isc_event_t *event) {
dns_zone_t *zone = (dns_zone_t *) event->ev_arg;
isc_boolean_t free_needed, linked = ISC_FALSE;
+ dns_zone_t *raw = NULL, *secure = NULL;
UNUSED(task);
REQUIRE(DNS_ZONE_VALID(zone));
INSIST(event->ev_type == DNS_EVENT_ZONECONTROL);
INSIST(isc_refcount_current(&zone->erefs) == 0);
+
zone_debuglog(zone, "zone_shutdown", 3, "shutting down");
/*
@@ -10615,6 +10794,8 @@ zone_shutdown(isc_task_t *task, isc_event_t *event) {
notify_cancel(zone);
+ forward_cancel(zone);
+
if (zone->timer != NULL) {
isc_timer_detach(&zone->timer);
INSIST(zone->irefs > 0);
@@ -10631,7 +10812,19 @@ zone_shutdown(isc_task_t *task, isc_event_t *event) {
*/
DNS_ZONE_SETFLAG(zone, DNS_ZONEFLG_SHUTDOWN);
free_needed = exit_check(zone);
+ if (zone->raw != NULL) {
+ raw = zone->raw;
+ zone->raw = NULL;
+ }
+ if (zone->secure != NULL) {
+ secure = zone->secure;
+ zone->secure = NULL;
+ }
UNLOCK_ZONE(zone);
+ if (raw != NULL)
+ dns_zone_detach(&raw);
+ if (secure != NULL)
+ dns_zone_idetach(&secure);
if (free_needed)
zone_free(zone);
}
@@ -10991,9 +11184,17 @@ dns_zone_notifyreceive(dns_zone_t *zone, isc_sockaddr_t *from,
isc_sockaddr_format(from, fromtext, sizeof(fromtext));
/*
- * We only handle NOTIFY (SOA) at the present.
+ * Notify messages are processed by the raw zone.
*/
LOCK_ZONE(zone);
+ if (zone->raw != NULL) {
+ result = dns_zone_notifyreceive(zone->raw, from, msg);
+ UNLOCK_ZONE(zone);
+ return (result);
+ }
+ /*
+ * We only handle NOTIFY (SOA) at the present.
+ */
if (isc_sockaddr_pf(from) == PF_INET)
inc_stats(zone, dns_zonestatscounter_notifyinv4);
else
@@ -11394,6 +11595,10 @@ zone_namerd_tostr(dns_zone_t *zone, char *buf, size_t length) {
isc_buffer_putstr(&buffer, "/");
isc_buffer_putstr(&buffer, zone->view->name);
}
+ if (zone->raw != NULL && 9U < isc_buffer_availablelength(&buffer))
+ isc_buffer_putstr(&buffer, " (signed)");
+ if (zone->secure != NULL && 11U < isc_buffer_availablelength(&buffer))
+ isc_buffer_putstr(&buffer, " (unsigned)");
buf[isc_buffer_usedlength(&buffer)] = '\0';
}
@@ -11711,6 +11916,333 @@ notify_done(isc_task_t *task, isc_event_t *event) {
dns_message_destroy(&message);
}
+struct secure_serial {
+ isc_event_t e;
+ isc_uint32_t serial;
+};
+
+static void
+update_log_cb(void *arg, dns_zone_t *zone, int level, const char *message) {
+ UNUSED(arg);
+ dns_zone_log(zone, level, "%s", message);
+}
+
+static void
+receive_secure_serial(isc_task_t *task, isc_event_t *event) {
+ isc_result_t result;
+ dns_journal_t *rjournal = NULL, *sjournal = NULL;
+ isc_uint32_t start, end;
+ dns_zone_t *zone;
+ int n_soa = 0;
+ dns_db_t *db = NULL;
+ dns_dbnode_t *node = NULL;
+ dns_dbversion_t *newver = NULL, *oldver = NULL;
+ isc_uint32_t oldserial, newserial;
+ dns_diffop_t op = DNS_DIFFOP_ADD;
+ dns_diff_t diff;
+ dns_difftuple_t *tuple = NULL, *soatuple = NULL;
+ dns_update_log_t log = { update_log_cb, NULL };
+ isc_time_t timenow;
+
+ zone = event->ev_arg;
+ end = ((struct secure_serial *)event)->serial;
+
+ dns_diff_init(zone->mctx, &diff);
+
+ UNUSED(task);
+ CHECK(dns_journal_open(zone->raw->mctx, zone->raw->journal,
+ DNS_JOURNAL_WRITE, &rjournal));
+ result = dns_journal_open(zone->raw->mctx, zone->journal,
+ DNS_JOURNAL_READ, &sjournal);
+ if (result != ISC_R_SUCCESS && result != ISC_R_NOTFOUND)
+ goto failure;
+
+ start = dns_journal_get_bitws(rjournal);
+ if (sjournal != NULL) {
+ isc_uint32_t serial = dns_journal_get_bitws(sjournal);
+ /*
+ * We write the secure journal first so if that exists
+ * use its value provided it is greater that from the
+ * raw journal.
+ */
+ if (isc_serial_gt(serial, start))
+ start = serial;
+ dns_journal_destroy(&sjournal);
+ }
+
+ if (start == end)
+ goto failure;
+ CHECK(dns_journal_iter_init(rjournal, start, end));
+
+ dns_db_attach(zone->db, &db);
+ dns_db_currentversion(db, &oldver);
+ CHECK(dns_db_newversion(db, &newver));
+
+ for (result = dns_journal_first_rr(rjournal);
+ result == ISC_R_SUCCESS;
+ result = dns_journal_next_rr(rjournal)) {
+ dns_name_t *name = NULL;
+ isc_uint32_t ttl;
+ dns_rdata_t *rdata = NULL;
+ dns_journal_current_rr(rjournal, &name, &ttl, &rdata);
+
+ if (rdata->type == dns_rdatatype_soa) {
+ n_soa++;
+ if (n_soa == 2) {
+ /*
+ * Save the lastest raw SOA record.
+ */
+ if (soatuple != NULL)
+ dns_difftuple_free(&soatuple);
+ CHECK(dns_difftuple_create(diff.mctx,
+ DNS_DIFFOP_ADD,
+ name, ttl, rdata,
+ &soatuple));
+ }
+ if (n_soa == 3)
+ n_soa = 1;
+ continue;
+ }
+
+ /* Sanity. */
+ if (n_soa == 0) {
+ dns_zone_log(zone->raw, ISC_LOG_ERROR,
+ "corrupt journal file: '%s'\n",
+ zone->raw->journal);
+ goto failure;
+ }
+
+ if (zone->privatetype != 0 &&
+ rdata->type == zone->privatetype)
+ continue;
+
+ if (rdata->type == dns_rdatatype_nsec ||
+ rdata->type == dns_rdatatype_rrsig ||
+ rdata->type == dns_rdatatype_nsec3 ||
+ rdata->type == dns_rdatatype_dnskey ||
+ rdata->type == dns_rdatatype_nsec3param)
+ continue;
+
+ op = (n_soa == 1) ? DNS_DIFFOP_DEL : DNS_DIFFOP_ADD;
+
+ CHECK(dns_difftuple_create(diff.mctx, op, name, ttl, rdata,
+ &tuple));
+ dns_diff_appendminimal(&diff, &tuple);
+ }
+ if (result == ISC_R_NOMORE)
+ result = ISC_R_SUCCESS;
+ CHECK(result);
+
+ CHECK(dns_diff_apply(&diff, db, newver));
+
+ if (soatuple != NULL) {
+ isc_uint32_t desired;
+
+ CHECK(dns_db_createsoatuple(db, oldver, diff.mctx,
+ DNS_DIFFOP_DEL, &tuple));
+ oldserial = dns_soa_getserial(&tuple->rdata);
+ newserial = desired = dns_soa_getserial(&soatuple->rdata);
+ if (!isc_serial_gt(newserial, oldserial)) {
+ newserial = oldserial + 1;
+ if (newserial == 0)
+ newserial++;
+ dns_soa_setserial(newserial, &soatuple->rdata);
+ }
+ CHECK(do_one_tuple(&tuple, db, newver, &diff));
+ CHECK(do_one_tuple(&soatuple, db, newver, &diff));
+ dns_zone_log(zone, ISC_LOG_INFO, "serial %u (unsigned %u)",
+ newserial, desired);
+ } else
+ CHECK(update_soa_serial(db, newver, &diff, zone->mctx,
+ zone->updatemethod));
+
+ CHECK(dns_update_signatures(&log, zone, db, oldver, newver,
+ &diff, zone->sigvalidityinterval));
+
+ CHECK(zone_journal(zone, &diff, &end, "receive_secure_serial"));
+
+ dns_journal_set_bitws(rjournal, end);
+ dns_journal_commit(rjournal);
+
+ LOCK_ZONE(zone);
+ DNS_ZONE_SETFLAG(zone, DNS_ZONEFLG_NEEDNOTIFY);
+
+ zone_needdump(zone, DNS_DUMP_DELAY);
+
+ TIME_NOW(&timenow);
+ zone_settimer(zone, &timenow);
+
+ UNLOCK_ZONE(zone);
+
+ dns_db_closeversion(db, &oldver, ISC_FALSE);
+ dns_db_closeversion(db, &newver, ISC_TRUE);
+
+ failure:
+ if (tuple != NULL)
+ dns_difftuple_free(&tuple);
+ if (soatuple != NULL)
+ dns_difftuple_free(&soatuple);
+ if (db != NULL) {
+ if (oldver != NULL)
+ dns_db_closeversion(db, &oldver, ISC_FALSE);
+ if (newver != NULL)
+ dns_db_closeversion(db, &newver, ISC_FALSE);
+ if (node != NULL)
+ dns_db_detachnode(db, &node);
+ dns_db_detach(&db);
+ }
+ if (rjournal != NULL)
+ dns_journal_destroy(&rjournal);
+ if (sjournal != NULL)
+ dns_journal_destroy(&sjournal);
+ dns_diff_clear(&diff);
+ isc_event_free(&event);
+}
+
+static isc_result_t
+zone_send_secureserial(dns_zone_t *zone, isc_uint32_t serial) {
+ isc_event_t *e;
+
+ e = isc_event_allocate(zone->secure->mctx, zone,
+ DNS_EVENT_ZONESECURESERIAL,
+ receive_secure_serial, zone->secure,
+ sizeof(struct secure_serial));
+ if (e == NULL)
+ return (ISC_R_NOMEMORY);
+ ((struct secure_serial *)e)->serial = serial;
+
+ isc_task_send(zone->secure->task, &e);
+ return (ISC_R_SUCCESS);
+}
+
+struct secure_db {
+ isc_event_t e;
+ dns_db_t *db;
+};
+
+static void
+receive_secure_db(isc_task_t *task, isc_event_t *event) {
+ isc_result_t result;
+ dns_zone_t *zone;
+ dns_db_t *rawdb, *db = NULL;
+ dns_dbnode_t *rawnode = NULL, *node = NULL;
+ dns_fixedname_t fname;
+ dns_name_t *name;
+ dns_dbiterator_t *dbiterator = NULL;
+ dns_rdatasetiter_t *rdsit = NULL;
+ dns_rdataset_t rdataset;
+ dns_dbversion_t *version = NULL;
+ isc_time_t loadtime;
+
+ UNUSED(task);
+
+ zone = event->ev_arg;
+ rawdb = ((struct secure_db *)event)->db;
+ dns_fixedname_init(&fname);
+ name = dns_fixedname_name(&fname);
+ dns_rdataset_init(&rdataset);
+
+ TIME_NOW(&loadtime);
+
+ result = dns_db_create(zone->mctx, zone->db_argv[0],
+ &zone->origin, dns_dbtype_zone, zone->rdclass,
+ zone->db_argc - 1, zone->db_argv + 1, &db);
+ if (result != ISC_R_SUCCESS)
+ goto failure;
+
+ result = dns_db_newversion(db, &version);
+ if (result != ISC_R_SUCCESS)
+ goto failure;
+
+ result = dns_db_createiterator(rawdb, 0, &dbiterator);
+ if (result != ISC_R_SUCCESS)
+ goto failure;
+
+ for (result = dns_dbiterator_first(dbiterator);
+ result == ISC_R_SUCCESS;
+ result = dns_dbiterator_next(dbiterator)) {
+ result = dns_dbiterator_current(dbiterator, &rawnode, name);
+ if (result != ISC_R_SUCCESS)
+ continue;
+
+ result = dns_db_findnode(db, name, ISC_TRUE, &node);
+ if (result != ISC_R_SUCCESS)
+ goto failure;
+
+ result = dns_db_allrdatasets(rawdb, rawnode, NULL, 0, &rdsit);
+ if (result != ISC_R_SUCCESS)
+ goto failure;
+
+ for (result = dns_rdatasetiter_first(rdsit);
+ result == ISC_R_SUCCESS;
+ result = dns_rdatasetiter_next(rdsit)) {
+ dns_rdatasetiter_current(rdsit, &rdataset);
+ if (rdataset.type == dns_rdatatype_nsec ||
+ rdataset.type == dns_rdatatype_rrsig ||
+ rdataset.type == dns_rdatatype_nsec3 ||
+ rdataset.type == dns_rdatatype_dnskey ||
+ rdataset.type == dns_rdatatype_nsec3param) {
+ dns_rdataset_disassociate(&rdataset);
+ continue;
+ }
+
+ result = dns_db_addrdataset(db, node, version, 0,
+ &rdataset, 0, NULL);
+ if (result != ISC_R_SUCCESS)
+ goto failure;
+
+ dns_rdataset_disassociate(&rdataset);
+ }
+ dns_rdatasetiter_destroy(&rdsit);
+ dns_db_detachnode(rawdb, &rawnode);
+ dns_db_detachnode(db, &node);
+ }
+
+ dns_db_closeversion(db, &version, ISC_TRUE);
+ LOCK_ZONE(zone);
+ DNS_ZONE_SETFLAG(zone, DNS_ZONEFLG_NEEDNOTIFY);
+ result = zone_postload(zone, db, loadtime, ISC_R_SUCCESS);
+ zone_needdump(zone, 0); /* XXXMPA */
+ UNLOCK_ZONE(zone);
+
+ failure:
+ if (result != ISC_R_SUCCESS)
+ dns_zone_log(zone, ISC_LOG_ERROR, "receive_secure_db: %s",
+ dns_result_totext(result));
+
+ if (dns_rdataset_isassociated(&rdataset))
+ dns_rdataset_disassociate(&rdataset);
+ if (db != NULL) {
+ if (node != NULL)
+ dns_db_detachnode(db, &node);
+ dns_db_detach(&db);
+ }
+ if (rawnode != NULL)
+ dns_db_detachnode(rawdb, &rawnode);
+ dns_db_detach(&rawdb);
+ if (dbiterator != NULL)
+ dns_dbiterator_destroy(&dbiterator);
+ isc_event_free(&event);
+}
+
+static isc_result_t
+zone_send_securedb(dns_zone_t *zone, dns_db_t *db) {
+ isc_event_t *e;
+ dns_db_t *dummy = NULL;
+
+ e = isc_event_allocate(zone->secure->mctx, zone,
+ DNS_EVENT_ZONESECUREDB,
+ receive_secure_db, zone->secure,
+ sizeof(struct secure_db));
+ if (e == NULL)
+ return (ISC_R_NOMEMORY);
+ dns_db_attach(db, &dummy);
+ ((struct secure_db *)e)->db = dummy;
+
+ isc_task_send(zone->secure->task, &e);
+ return (ISC_R_SUCCESS);
+}
+
isc_result_t
dns_zone_replacedb(dns_zone_t *zone, dns_db_t *db, isc_boolean_t dump) {
isc_result_t result;
@@ -11831,6 +12363,10 @@ zone_replacedb(dns_zone_t *zone, dns_db_t *db, isc_boolean_t dump) {
break;
}
}
+#if 0
+ if (zone->secure != NULL)
+ zone_send_secureserial(zone, serial);
+#endif
} else {
if (dump && zone->masterfile != NULL) {
/*
@@ -11881,6 +12417,8 @@ zone_replacedb(dns_zone_t *zone, dns_db_t *db, isc_boolean_t dump) {
zone->journal, strbuf);
}
}
+ if (zone->secure != NULL)
+ zone_send_securedb(zone, db);
}
dns_db_closeversion(db, &ver, ISC_FALSE);
@@ -12032,6 +12570,8 @@ zone_xfrdone(dns_zone_t *zone, isc_result_t result) {
dns_zone_log(zone, ISC_LOG_INFO,
"transferred serial %u%s",
serial, buf);
+ if (zone->secure != NULL)
+ zone_send_secureserial(zone, serial);
}
/*
@@ -12289,7 +12829,7 @@ queue_xfrin(dns_zone_t *zone) {
*/
static void
got_transfer_quota(isc_task_t *task, isc_event_t *event) {
- isc_result_t result;
+ isc_result_t result = ISC_R_SUCCESS;
dns_peer_t *peer = NULL;
char master[ISC_SOCKADDR_FORMATSIZE];
char source[ISC_SOCKADDR_FORMATSIZE];
@@ -12337,14 +12877,6 @@ got_transfer_quota(isc_task_t *task, isc_event_t *event) {
"no database exists yet, requesting AXFR of "
"initial version from %s", master);
xfrtype = dns_rdatatype_axfr;
- } else if (DNS_ZONE_OPTION(zone, DNS_ZONEOPT_IXFRFROMDIFFS)) {
- dns_zone_log(zone, ISC_LOG_DEBUG(1), "ixfr-from-differences "
- "set, requesting %sAXFR from %s", soa_before,
- master);
- if (DNS_ZONE_FLAG(zone, DNS_ZONEFLG_SOABEFOREAXFR))
- xfrtype = dns_rdatatype_soa;
- else
- xfrtype = dns_rdatatype_axfr;
} else if (DNS_ZONE_FLAG(zone, DNS_ZONEFLG_FORCEXFER)) {
dns_zone_log(zone, ISC_LOG_DEBUG(1),
"forced reload, requesting AXFR of "
@@ -12360,13 +12892,10 @@ got_transfer_quota(isc_task_t *task, isc_event_t *event) {
UNLOCK_ZONE(zone);
} else {
isc_boolean_t use_ixfr = ISC_TRUE;
- if (peer != NULL &&
- dns_peer_getrequestixfr(peer, &use_ixfr) ==
- ISC_R_SUCCESS) {
- ; /* Using peer setting */
- } else {
- use_ixfr = zone->view->requestixfr;
- }
+ if (peer != NULL)
+ result = dns_peer_getrequestixfr(peer, &use_ixfr);
+ if (peer == NULL || result != ISC_R_SUCCESS)
+ use_ixfr = zone->requestixfr;
if (use_ixfr == ISC_FALSE) {
dns_zone_log(zone, ISC_LOG_DEBUG(1),
"IXFR disabled, requesting %sAXFR from %s",
@@ -12454,8 +12983,13 @@ forward_destroy(dns_forward_t *forward) {
dns_request_destroy(&forward->request);
if (forward->msgbuf != NULL)
isc_buffer_free(&forward->msgbuf);
- if (forward->zone != NULL)
+ if (forward->zone != NULL) {
+ LOCK(&forward->zone->lock);
+ if (ISC_LINK_LINKED(forward, link))
+ ISC_LIST_UNLINK(forward->zone->forwards, forward, link);
+ UNLOCK(&forward->zone->lock);
dns_zone_idetach(&forward->zone);
+ }
isc_mem_putanddetach(&forward->mctx, forward, sizeof(*forward));
}
@@ -12465,6 +12999,12 @@ sendtomaster(dns_forward_t *forward) {
isc_sockaddr_t src;
LOCK_ZONE(forward->zone);
+
+ if (DNS_ZONE_FLAG(forward->zone, DNS_ZONEFLG_EXITING)) {
+ UNLOCK_ZONE(forward->zone);
+ return (ISC_R_CANCELED);
+ }
+
if (forward->which >= forward->zone->masterscnt) {
UNLOCK_ZONE(forward->zone);
return (ISC_R_NOMORE);
@@ -12495,6 +13035,11 @@ sendtomaster(dns_forward_t *forward) {
forward->zone->task,
forward_callback, forward,
&forward->request);
+ if (result == ISC_R_SUCCESS) {
+ if (!ISC_LINK_LINKED(forward, link))
+ ISC_LIST_APPEND(forward->zone->forwards, forward, link);
+ }
+
unlock:
UNLOCK_ZONE(forward->zone);
return (result);
@@ -12621,6 +13166,7 @@ dns_zone_forwardupdate(dns_zone_t *zone, dns_message_t *msg,
forward->mctx = 0;
forward->callback = callback;
forward->callback_arg = callback_arg;
+ ISC_LINK_INIT(forward, link);
forward->magic = FORWARD_MAGIC;
mr = dns_message_getrawmessage(msg);
@@ -12694,6 +13240,7 @@ dns_zonemgr_create(isc_mem_t *mctx, isc_taskmgr_t *taskmgr,
zmgr->timermgr = timermgr;
zmgr->socketmgr = socketmgr;
zmgr->zonetasks = NULL;
+ zmgr->loadtasks = NULL;
zmgr->task = NULL;
zmgr->rl = NULL;
ISC_LIST_INIT(zmgr->zones);
@@ -12769,6 +13316,7 @@ dns_zonemgr_managezone(dns_zonemgr_t *zmgr, dns_zone_t *zone) {
REQUIRE(zone->zmgr == NULL);
isc_taskpool_gettask(zmgr->zonetasks, &zone->task);
+ isc_taskpool_gettask(zmgr->loadtasks, &zone->loadtask);
/*
* Set the task name. The tag will arbitrarily point to one
@@ -12776,6 +13324,7 @@ dns_zonemgr_managezone(dns_zonemgr_t *zmgr, dns_zone_t *zone) {
* to be managed last).
*/
isc_task_setname(zone->task, "zone", zone);
+ isc_task_setname(zone->loadtask, "loadzone", zone);
result = isc_timer_create(zmgr->timermgr, isc_timertype_inactive,
NULL, NULL,
@@ -12783,7 +13332,7 @@ dns_zonemgr_managezone(dns_zonemgr_t *zmgr, dns_zone_t *zone) {
&zone->timer);
if (result != ISC_R_SUCCESS)
- goto cleanup_task;
+ goto cleanup_tasks;
/*
* The timer "holds" a iref.
@@ -12797,7 +13346,8 @@ dns_zonemgr_managezone(dns_zonemgr_t *zmgr, dns_zone_t *zone) {
goto unlock;
- cleanup_task:
+ cleanup_tasks:
+ isc_task_detach(&zone->loadtask);
isc_task_detach(&zone->task);
unlock:
@@ -12903,6 +13453,8 @@ dns_zonemgr_resumexfrs(dns_zonemgr_t *zmgr) {
void
dns_zonemgr_shutdown(dns_zonemgr_t *zmgr) {
+ dns_zone_t *zone;
+
REQUIRE(DNS_ZONEMGR_VALID(zmgr));
isc_ratelimiter_shutdown(zmgr->rl);
@@ -12911,6 +13463,20 @@ dns_zonemgr_shutdown(dns_zonemgr_t *zmgr) {
isc_task_destroy(&zmgr->task);
if (zmgr->zonetasks != NULL)
isc_taskpool_destroy(&zmgr->zonetasks);
+ if (zmgr->loadtasks != NULL)
+ isc_taskpool_destroy(&zmgr->loadtasks);
+
+ RWLOCK(&zmgr->rwlock, isc_rwlocktype_read);
+ for (zone = ISC_LIST_HEAD(zmgr->zones);
+ zone != NULL;
+ zone = ISC_LIST_NEXT(zone, link))
+ {
+ LOCK_ZONE(zone);
+ forward_cancel(zone);
+ UNLOCK_ZONE(zone);
+ }
+ RWUNLOCK(&zmgr->rwlock, isc_rwlocktype_read);
+
}
isc_result_t
@@ -12923,13 +13489,13 @@ dns_zonemgr_setsize(dns_zonemgr_t *zmgr, int num_zones) {
/*
* For anything fewer than 1000 zones we use 10 tasks in
- * the task pool. More than that, and we'll scale at one
+ * the task pools. More than that, and we'll scale at one
* task per 100 zones.
*/
if (ntasks < 10)
ntasks = 10;
- /* Create or resize the zone task pool. */
+ /* Create or resize the zone task pools. */
if (zmgr->zonetasks == NULL)
result = isc_taskpool_create(zmgr->taskmgr, zmgr->mctx,
ntasks, 2, &pool);
@@ -12939,6 +13505,33 @@ dns_zonemgr_setsize(dns_zonemgr_t *zmgr, int num_zones) {
if (result == ISC_R_SUCCESS)
zmgr->zonetasks = pool;
+ pool = NULL;
+ if (zmgr->loadtasks == NULL)
+ result = isc_taskpool_create(zmgr->taskmgr, zmgr->mctx,
+ ntasks, 2, &pool);
+ else
+ result = isc_taskpool_expand(&zmgr->loadtasks, ntasks, &pool);
+
+ if (result == ISC_R_SUCCESS)
+ zmgr->loadtasks = pool;
+
+#ifdef BIND9
+ /*
+ * We always set all tasks in the zone-load task pool to
+ * privileged. This prevents other tasks in the system from
+ * running while the server task manager is in privileged
+ * mode.
+ *
+ * NOTE: If we start using task privileges for any other
+ * part of the system than zone tasks, then this will need to be
+ * revisted. In that case we'd want to turn on privileges for
+ * zone tasks only when we were loading, and turn them off the
+ * rest of the time. For now, however, it's okay to just
+ * set it and forget it.
+ */
+ isc_taskpool_setprivilege(zmgr->loadtasks, ISC_TRUE);
+#endif
+
return (result);
}
@@ -13161,12 +13754,14 @@ zonemgr_getio(dns_zonemgr_t *zmgr, isc_boolean_t high,
io = isc_mem_get(zmgr->mctx, sizeof(*io));
if (io == NULL)
return (ISC_R_NOMEMORY);
+
io->event = isc_event_allocate(zmgr->mctx, task, DNS_EVENT_IOREADY,
action, arg, sizeof(*io->event));
if (io->event == NULL) {
isc_mem_put(zmgr->mctx, io, sizeof(*io));
return (ISC_R_NOMEMORY);
}
+
io->zmgr = zmgr;
io->high = high;
io->task = NULL;
@@ -13186,9 +13781,8 @@ zonemgr_getio(dns_zonemgr_t *zmgr, isc_boolean_t high,
UNLOCK(&zmgr->iolock);
*iop = io;
- if (!queue) {
+ if (!queue)
isc_task_send(io->task, &io->event);
- }
return (ISC_R_SUCCESS);
}
@@ -14364,7 +14958,8 @@ zone_rekey(dns_zone_t *zone) {
zone->updatemethod));
CHECK(add_chains(zone, db, ver, &diff));
CHECK(sign_apex(zone, db, ver, &diff, &sig_diff));
- CHECK(zone_journal(zone, &sig_diff, "zone_rekey"));
+ CHECK(zone_journal(zone, &sig_diff, NULL,
+ "zone_rekey"));
commit = ISC_TRUE;
}
}
@@ -14654,6 +15249,18 @@ dns_zone_setrefreshkeyinterval(dns_zone_t *zone, isc_uint32_t interval) {
}
void
+dns_zone_setrequestixfr(dns_zone_t *zone, isc_boolean_t bool) {
+ REQUIRE(DNS_ZONE_VALID(zone));
+ zone->requestixfr = bool;
+}
+
+isc_boolean_t
+dns_zone_getrequestixfr(dns_zone_t *zone) {
+ REQUIRE(DNS_ZONE_VALID(zone));
+ return (zone->requestixfr);
+}
+
+void
dns_zone_setserialupdatemethod(dns_zone_t *zone, dns_updatemethod_t method) {
REQUIRE(DNS_ZONE_VALID(zone));
zone->updatemethod = method;
@@ -14664,3 +15271,32 @@ dns_zone_getserialupdatemethod(dns_zone_t *zone) {
REQUIRE(DNS_ZONE_VALID(zone));
return(zone->updatemethod);
}
+
+void
+dns_zone_link(dns_zone_t *zone, dns_zone_t *raw) {
+ REQUIRE(DNS_ZONE_VALID(zone));
+ REQUIRE(DNS_ZONE_VALID(raw));
+
+ LOCK(&zone->lock);
+ if (zone->raw != NULL)
+ dns_zone_detach(&zone->raw);
+ dns_zone_attach(raw, &zone->raw);
+ UNLOCK(&zone->lock);
+
+ LOCK(&raw->lock);
+ if (raw->secure != NULL)
+ dns_zone_idetach(&raw->secure);
+ dns_zone_iattach(zone, &raw->secure);
+ UNLOCK(&raw->lock);
+}
+
+void
+dns_zone_getraw(dns_zone_t *zone, dns_zone_t **raw) {
+ REQUIRE(DNS_ZONE_VALID(zone));
+ REQUIRE(raw != NULL && *raw == NULL);
+
+ LOCK(&zone->lock);
+ if (zone->raw != NULL)
+ dns_zone_attach(zone->raw, raw);
+ UNLOCK(&zone->lock);
+}
diff --git a/lib/dns/zt.c b/lib/dns/zt.c
index 49f6c487..0995377a 100644
--- a/lib/dns/zt.c
+++ b/lib/dns/zt.c
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: zt.c,v 1.50 2011-03-21 23:47:21 tbox Exp $ */
+/* $Id: zt.c,v 1.56 2011-09-07 00:50:06 marka Exp $ */
/*! \file */
@@ -25,6 +25,7 @@
#include <isc/magic.h>
#include <isc/mem.h>
#include <isc/string.h>
+#include <isc/task.h>
#include <isc/util.h>
#include <dns/log.h>
@@ -42,8 +43,11 @@ struct dns_zt {
isc_mem_t *mctx;
dns_rdataclass_t rdclass;
isc_rwlock_t rwlock;
+ dns_zt_allloaded_t loaddone;
+ void * loaddone_arg;
/* Locked by lock. */
isc_uint32_t references;
+ unsigned int loads_pending;
dns_rbt_t *table;
};
@@ -57,11 +61,17 @@ static isc_result_t
load(dns_zone_t *zone, void *uap);
static isc_result_t
+asyncload(dns_zone_t *zone, void *callback);
+
+static isc_result_t
loadnew(dns_zone_t *zone, void *uap);
static isc_result_t
freezezones(dns_zone_t *zone, void *uap);
+static isc_result_t
+doneloading(dns_zt_t *zt, dns_zone_t *zone, isc_task_t *task);
+
isc_result_t
dns_zt_create(isc_mem_t *mctx, dns_rdataclass_t rdclass, dns_zt_t **ztp)
{
@@ -87,6 +97,9 @@ dns_zt_create(isc_mem_t *mctx, dns_rdataclass_t rdclass, dns_zt_t **ztp)
zt->references = 1;
zt->rdclass = rdclass;
zt->magic = ZTMAGIC;
+ zt->loaddone = NULL;
+ zt->loaddone_arg = NULL;
+ zt->loads_pending = 0;
*ztp = zt;
return (ISC_R_SUCCESS);
@@ -243,13 +256,63 @@ static isc_result_t
load(dns_zone_t *zone, void *uap) {
isc_result_t result;
UNUSED(uap);
+
result = dns_zone_load(zone);
if (result == DNS_R_CONTINUE || result == DNS_R_UPTODATE)
result = ISC_R_SUCCESS;
+
return (result);
}
isc_result_t
+dns_zt_asyncload(dns_zt_t *zt, dns_zt_allloaded_t alldone, void *arg) {
+ isc_result_t result, tresult;
+ static dns_zt_zoneloaded_t dl = doneloading;
+ int pending;
+
+ REQUIRE(VALID_ZT(zt));
+
+ RWLOCK(&zt->rwlock, isc_rwlocktype_read);
+
+ INSIST(zt->loads_pending == 0);
+
+ result = dns_zt_apply2(zt, ISC_FALSE, &tresult, asyncload, &dl);
+
+ pending = zt->loads_pending;
+ if (pending != 0) {
+ zt->loaddone = alldone;
+ zt->loaddone_arg = arg;
+ }
+
+ RWUNLOCK(&zt->rwlock, isc_rwlocktype_read);
+
+ if (pending == 0)
+ alldone(arg);
+
+ return (result);
+}
+
+/*
+ * Initiates asynchronous loading of zone 'zone'. 'callback' is a
+ * pointer to a function which will be used to inform the caller when
+ * the zone loading is complete.
+ */
+static isc_result_t
+asyncload(dns_zone_t *zone, void *callback) {
+ isc_result_t result;
+ dns_zt_zoneloaded_t *loaded = callback;
+ dns_zt_t *zt;
+
+ REQUIRE(zone != NULL);
+ zt = dns_zone_getview(zone)->zonetable;
+
+ result = dns_zone_asyncload(zone, *loaded, zt);
+ if (result == ISC_R_SUCCESS)
+ zt->loads_pending++;
+ return (ISC_R_SUCCESS);
+}
+
+isc_result_t
dns_zt_loadnew(dns_zt_t *zt, isc_boolean_t stop) {
isc_result_t result;
@@ -265,6 +328,7 @@ static isc_result_t
loadnew(dns_zone_t *zone, void *uap) {
isc_result_t result;
UNUSED(uap);
+
result = dns_zone_loadnew(zone);
if (result == DNS_R_CONTINUE || result == DNS_R_UPTODATE ||
result == DNS_R_DYNAMIC)
@@ -281,6 +345,8 @@ dns_zt_freezezones(dns_zt_t *zt, isc_boolean_t freeze) {
RWLOCK(&zt->rwlock, isc_rwlocktype_read);
result = dns_zt_apply2(zt, ISC_FALSE, &tresult, freezezones, &freeze);
RWUNLOCK(&zt->rwlock, isc_rwlocktype_read);
+ if (tresult == ISC_R_NOTFOUND)
+ tresult = ISC_R_SUCCESS;
return ((result == ISC_R_SUCCESS) ? tresult : result);
}
@@ -364,6 +430,7 @@ dns_zt_apply2(dns_zt_t *zt, isc_boolean_t stop, isc_result_t *sub,
/*
* The tree is empty.
*/
+ tresult = result;
result = ISC_R_NOMORE;
}
while (result == DNS_R_NEWORIGIN || result == ISC_R_SUCCESS) {
@@ -393,6 +460,38 @@ dns_zt_apply2(dns_zt_t *zt, isc_boolean_t stop, isc_result_t *sub,
return (result);
}
+/*
+ * Decrement the loads_pending counter; when counter reaches
+ * zero, call the loaddone callback that was initially set by
+ * dns_zt_asyncload().
+ */
+static isc_result_t
+doneloading(dns_zt_t *zt, dns_zone_t *zone, isc_task_t *task) {
+ dns_zt_allloaded_t alldone = NULL;
+ void *arg = NULL;
+
+ UNUSED(zone);
+ UNUSED(task);
+
+ REQUIRE(VALID_ZT(zt));
+
+ RWLOCK(&zt->rwlock, isc_rwlocktype_write);
+ INSIST(zt->loads_pending != 0);
+ zt->loads_pending--;
+ if (zt->loads_pending == 0) {
+ alldone = zt->loaddone;
+ arg = zt->loaddone_arg;
+ zt->loaddone = NULL;
+ zt->loaddone_arg = NULL;
+ }
+ RWUNLOCK(&zt->rwlock, isc_rwlocktype_write);
+
+ if (alldone != NULL)
+ alldone(arg);
+
+ return (ISC_R_SUCCESS);
+}
+
/***
*** Private
***/
diff --git a/lib/isc/include/isc/list.h b/lib/isc/include/isc/list.h
index 69ba1c63..64dcc599 100644
--- a/lib/isc/include/isc/list.h
+++ b/lib/isc/include/isc/list.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004, 2006, 2007 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004, 2006, 2007, 2011 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 1997-2002 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: list.h,v 1.24 2007-06-19 23:47:18 tbox Exp $ */
+/* $Id: list.h,v 1.26 2011-09-02 23:46:33 tbox Exp $ */
#ifndef ISC_LIST_H
#define ISC_LIST_H 1
@@ -169,6 +169,19 @@
(list2).tail = NULL; \
} while (0)
+#define ISC_LIST_PREPENDLIST(list1, list2, link) \
+ do { \
+ if (ISC_LIST_EMPTY(list1)) \
+ (list1) = (list2); \
+ else if (!ISC_LIST_EMPTY(list2)) { \
+ (list2).tail->link.next = (list1).head; \
+ (list1).head->link.prev = (list2).tail; \
+ (list1).head = (list2).head; \
+ } \
+ (list2).head = NULL; \
+ (list2).tail = NULL; \
+ } while (0)
+
#define ISC_LIST_ENQUEUE(list, elt, link) ISC_LIST_APPEND(list, elt, link)
#define __ISC_LIST_ENQUEUEUNSAFE(list, elt, link) \
__ISC_LIST_APPENDUNSAFE(list, elt, link)
diff --git a/lib/isc/include/isc/namespace.h b/lib/isc/include/isc/namespace.h
index 11f25285..6822443b 100644
--- a/lib/isc/include/isc/namespace.h
+++ b/lib/isc/include/isc/namespace.h
@@ -14,7 +14,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: namespace.h,v 1.12 2011-08-23 17:02:53 each Exp $ */
+/* $Id: namespace.h,v 1.13 2011-09-02 21:15:38 each Exp $ */
#ifndef ISCAPI_NAMESPACE_H
#define ISCAPI_NAMESPACE_H 1
@@ -31,6 +31,7 @@
#define isc_app_run isc__app_run
#define isc_app_ctxrun isc__app_ctxrun
#define isc_app_shutdown isc__app_shutdown
+#define isc_app_ctxfinish isc__app_ctxfinish
#define isc_app_ctxshutdown isc__app_ctxshutdown
#define isc_app_ctxsuspend isc__app_ctxsuspend
#define isc_app_reload isc__app_reload
@@ -147,9 +148,13 @@
#define isc_task_gettag isc__task_gettag
#define isc_task_getcurrenttime isc__task_getcurrenttime
#define isc_taskmgr_create isc__taskmgr_create
+#define isc_taskmgr_setmode isc__taskmgr_setmode
+#define isc_taskmgr_mode isc__taskmgr_mode
#define isc_taskmgr_destroy isc__taskmgr_destroy
#define isc_task_beginexclusive isc__task_beginexclusive
#define isc_task_endexclusive isc__task_endexclusive
+#define isc_task_setprivilege isc__task_setprivilege
+#define isc_task_privilege isc__task_privilege
#define isc_timer_create isc__timer_create
#define isc_timer_reset isc__timer_reset
diff --git a/lib/isc/include/isc/task.h b/lib/isc/include/isc/task.h
index 64e531c0..c5ac5bf3 100644
--- a/lib/isc/include/isc/task.h
+++ b/lib/isc/include/isc/task.h
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: task.h,v 1.71 2011-02-03 12:18:12 tbox Exp $ */
+/* $Id: task.h,v 1.73 2011-09-02 23:46:33 tbox Exp $ */
#ifndef ISC_TASK_H
#define ISC_TASK_H 1
@@ -88,6 +88,7 @@
#define ISC_TASKEVENT_FIRSTEVENT (ISC_EVENTCLASS_TASK + 0)
#define ISC_TASKEVENT_SHUTDOWN (ISC_EVENTCLASS_TASK + 1)
+#define ISC_TASKEVENT_TEST (ISC_EVENTCLASS_TASK + 1)
#define ISC_TASKEVENT_LASTEVENT (ISC_EVENTCLASS_TASK + 65535)
/*****
@@ -100,9 +101,17 @@ ISC_LANG_BEGINDECLS
*** Types
***/
+typedef enum {
+ isc_taskmgrmode_normal = 0,
+ isc_taskmgrmode_privileged
+} isc_taskmgrmode_t;
+
/*% Task and task manager methods */
typedef struct isc_taskmgrmethods {
void (*destroy)(isc_taskmgr_t **managerp);
+ void (*setmode)(isc_taskmgr_t *manager,
+ isc_taskmgrmode_t mode);
+ isc_taskmgrmode_t (*mode)(isc_taskmgr_t *manager);
isc_result_t (*taskcreate)(isc_taskmgr_t *manager,
unsigned int quantum,
isc_task_t **taskp);
@@ -127,6 +136,8 @@ typedef struct isc_taskmethods {
void *tag);
isc_result_t (*beginexclusive)(isc_task_t *task);
void (*endexclusive)(isc_task_t *task);
+ void (*setprivilege)(isc_task_t *task, isc_boolean_t priv);
+ isc_boolean_t (*privilege)(isc_task_t *task);
} isc_taskmethods_t;
/*%
@@ -611,6 +622,32 @@ isc_task_exiting(isc_task_t *t);
*\li 'task' is a valid task.
*/
+void
+isc_task_setprivilege(isc_task_t *task, isc_boolean_t priv);
+/*%<
+ * Set or unset the task's "privileged" flag depending on the value of
+ * 'priv'.
+ *
+ * Under normal circumstances this flag has no effect on the task behavior,
+ * but when the task manager has been set to privileged exeuction mode via
+ * isc_taskmgr_setmode(), only tasks with the flag set will be executed,
+ * and all other tasks will wait until they're done. Once all privileged
+ * tasks have finished executing, the task manager will automatically
+ * return to normal execution mode and nonprivileged task can resume.
+ *
+ * Requires:
+ *\li 'task' is a valid task.
+ */
+
+isc_boolean_t
+isc_task_privilege(isc_task_t *task);
+/*%<
+ * Returns the current value of the task's privilege flag.
+ *
+ * Requires:
+ *\li 'task' is a valid task.
+ */
+
/*****
***** Task Manager.
*****/
@@ -664,6 +701,31 @@ isc_taskmgr_create(isc_mem_t *mctx, unsigned int workers,
*/
void
+isc_taskmgr_setmode(isc_taskmgr_t *manager, isc_taskmgrmode_t mode);
+
+isc_taskmgrmode_t
+isc_taskmgr_mode(isc_taskmgr_t *manager);
+/*%<
+ * Set/get the current operating mode of the task manager. Valid modes are:
+ *
+ *\li isc_taskmgrmode_normal
+ *\li isc_taskmgrmode_privileged
+ *
+ * In privileged execution mode, only tasks that have had the "privilege"
+ * flag set via isc_task_setprivilege() can be executed. When all such
+ * tasks are complete, the manager automatically returns to normal mode
+ * and proceeds with running non-privileged ready tasks. This means it is
+ * necessary to have at least one privileged task waiting on the ready
+ * queue *before* setting the manager into privileged execution mode,
+ * which in turn means the task which calls this function should be in
+ * task-exclusive mode when it does so.
+ *
+ * Requires:
+ *
+ *\li 'manager' is a valid task manager.
+ */
+
+void
isc_taskmgr_destroy(isc_taskmgr_t **managerp);
/*%<
* Destroy '*managerp'.
diff --git a/lib/isc/include/isc/taskpool.h b/lib/isc/include/isc/taskpool.h
index ec3ebbcb..fcdddc53 100644
--- a/lib/isc/include/isc/taskpool.h
+++ b/lib/isc/include/isc/taskpool.h
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: taskpool.h,v 1.17 2011-07-07 23:47:50 tbox Exp $ */
+/* $Id: taskpool.h,v 1.18 2011-09-02 21:15:38 each Exp $ */
#ifndef ISC_TASKPOOL_H
#define ISC_TASKPOOL_H 1
@@ -139,6 +139,19 @@ isc_taskpool_destroy(isc_taskpool_t **poolp);
* \li '*poolp' is a valid task pool.
*/
+void
+isc_taskpool_setprivilege(isc_taskpool_t *pool, isc_boolean_t priv);
+/*%<
+ * Set the privilege flag on all tasks in 'pool' to 'priv'. If 'priv' is
+ * true, then when the task manager is set into privileged mode, only
+ * tasks wihin this pool will be able to execute. (Note: It is important
+ * to turn the pool tasks' privilege back off before the last task finishes
+ * executing.)
+ *
+ * Requires:
+ * \li 'pool' is a valid task pool.
+ */
+
ISC_LANG_ENDDECLS
#endif /* ISC_TASKPOOL_H */
diff --git a/lib/isc/include/isc/util.h b/lib/isc/include/isc/util.h
index 8bb334ed..e7ef3dfa 100644
--- a/lib/isc/include/isc/util.h
+++ b/lib/isc/include/isc/util.h
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: util.h,v 1.34 2011-03-12 04:59:49 tbox Exp $ */
+/* $Id: util.h,v 1.35 2011-09-05 18:00:22 each Exp $ */
#ifndef ISC_UTIL_H
#define ISC_UTIL_H 1
@@ -235,14 +235,4 @@
*/
#define TIME_NOW(tp) RUNTIME_CHECK(isc_time_now((tp)) == ISC_R_SUCCESS)
-/*%
- * Prevent Linux spurious warnings
- */
-#if defined(__GNUC__) && (__GNUC__ > 3)
-#define isc_util_fwrite(a, b, c, d) \
- __builtin_expect(fwrite((a), (b), (c), (d)), (c))
-#else
-#define isc_util_fwrite(a, b, c, d) fwrite((a), (b), (c), (d))
-#endif
-
#endif /* ISC_UTIL_H */
diff --git a/lib/isc/task.c b/lib/isc/task.c
index ffe57afb..dedaf09d 100644
--- a/lib/isc/task.c
+++ b/lib/isc/task.c
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: task.c,v 1.117 2011-02-03 12:18:12 tbox Exp $ */
+/* $Id: task.c,v 1.122 2011-09-03 16:27:51 each Exp $ */
/*! \file
* \author Principal Author: Bob Halley
@@ -64,9 +64,7 @@
#endif /* ISC_PLATFORM_USETHREADS */
#endif /* BIND9 */
-#ifndef USE_WORKER_THREADS
#include "task_p.h"
-#endif /* USE_WORKER_THREADS */
#ifdef ISC_TASK_TRACE
#define XTRACE(m) fprintf(stderr, "task %p thread %lu: %s\n", \
@@ -120,9 +118,11 @@ struct isc__task {
/* Locked by task manager lock. */
LINK(isc__task_t) link;
LINK(isc__task_t) ready_link;
+ LINK(isc__task_t) ready_priority_link;
};
#define TASK_F_SHUTTINGDOWN 0x01
+#define TASK_F_PRIVILEGED 0x02
#define TASK_SHUTTINGDOWN(t) (((t)->flags & TASK_F_SHUTTINGDOWN) \
!= 0)
@@ -145,11 +145,15 @@ struct isc__taskmgr {
unsigned int default_quantum;
LIST(isc__task_t) tasks;
isc__tasklist_t ready_tasks;
+ isc__tasklist_t ready_priority_tasks;
+ isc_taskmgrmode_t mode;
#ifdef ISC_PLATFORM_USETHREADS
isc_condition_t work_available;
isc_condition_t exclusive_granted;
+ isc_condition_t paused;
#endif /* ISC_PLATFORM_USETHREADS */
unsigned int tasks_running;
+ isc_boolean_t pause_requested;
isc_boolean_t exclusive_requested;
isc_boolean_t exiting;
#ifdef USE_SHARED_MANAGER
@@ -225,6 +229,23 @@ ISC_TASKFUNC_SCOPE isc_result_t
isc__task_beginexclusive(isc_task_t *task);
ISC_TASKFUNC_SCOPE void
isc__task_endexclusive(isc_task_t *task0);
+ISC_TASKFUNC_SCOPE void
+isc__task_setprivilege(isc_task_t *task0, isc_boolean_t priv);
+ISC_TASKFUNC_SCOPE isc_boolean_t
+isc__task_privilege(isc_task_t *task0);
+ISC_TASKFUNC_SCOPE void
+isc__taskmgr_setmode(isc_taskmgr_t *manager0, isc_taskmgrmode_t mode);
+ISC_TASKFUNC_SCOPE isc_taskmgrmode_t
+isc__taskmgr_mode(isc_taskmgr_t *manager0);
+
+static inline isc_boolean_t
+empty_readyq(isc__taskmgr_t *manager);
+
+static inline isc__task_t *
+pop_readyq(isc__taskmgr_t *manager);
+
+static inline void
+push_readyq(isc__taskmgr_t *manager, isc__task_t *task);
static struct isc__taskmethods {
isc_taskmethods_t methods;
@@ -249,7 +270,9 @@ static struct isc__taskmethods {
isc__task_purge,
isc__task_purgerange,
isc__task_beginexclusive,
- isc__task_endexclusive
+ isc__task_endexclusive,
+ isc__task_setprivilege,
+ isc__task_privilege
}
#ifndef BIND9
,
@@ -261,6 +284,8 @@ static struct isc__taskmethods {
static isc_taskmgrmethods_t taskmgrmethods = {
isc__taskmgr_destroy,
+ isc__taskmgr_setmode,
+ isc__taskmgr_mode,
isc__task_create
};
@@ -333,6 +358,7 @@ isc__task_create(isc_taskmgr_t *manager0, unsigned int quantum,
task->tag = NULL;
INIT_LINK(task, link);
INIT_LINK(task, ready_link);
+ INIT_LINK(task, ready_priority_link);
exiting = ISC_FALSE;
LOCK(&manager->lock);
@@ -400,6 +426,7 @@ task_shutdown(isc__task_t *task) {
}
INSIST(task->state == task_state_ready ||
task->state == task_state_running);
+
/*
* Note that we post shutdown events LIFO.
*/
@@ -415,9 +442,17 @@ task_shutdown(isc__task_t *task) {
return (was_idle);
}
+/*
+ * Moves a task onto the appropriate run queue.
+ *
+ * Caller must NOT hold manager lock.
+ */
static inline void
task_ready(isc__task_t *task) {
isc__taskmgr_t *manager = task->manager;
+#ifdef USE_WORKER_THREADS
+ isc_boolean_t has_privilege = isc__task_privilege((isc_task_t *) task);
+#endif /* USE_WORKER_THREADS */
REQUIRE(VALID_MANAGER(manager));
REQUIRE(task->state == task_state_ready);
@@ -425,12 +460,11 @@ task_ready(isc__task_t *task) {
XTRACE("task_ready");
LOCK(&manager->lock);
-
- ENQUEUE(manager->ready_tasks, task, ready_link);
+ push_readyq(manager, task);
#ifdef USE_WORKER_THREADS
- SIGNAL(&manager->work_available);
+ if (manager->mode == isc_taskmgrmode_normal || has_privilege)
+ SIGNAL(&manager->work_available);
#endif /* USE_WORKER_THREADS */
-
UNLOCK(&manager->lock);
}
@@ -868,21 +902,81 @@ isc__task_getcurrenttime(isc_task_t *task0, isc_stdtime_t *t) {
REQUIRE(t != NULL);
LOCK(&task->lock);
-
*t = task->now;
-
UNLOCK(&task->lock);
}
/***
*** Task Manager.
***/
+
+/*
+ * Return ISC_TRUE if the current ready list for the manager, which is
+ * either ready_tasks or the ready_priority_tasks, depending on whether
+ * the manager is currently in normal or privileged execution mode.
+ *
+ * Caller must hold the task manager lock.
+ */
+static inline isc_boolean_t
+empty_readyq(isc__taskmgr_t *manager) {
+ isc__tasklist_t queue;
+
+ if (manager->mode == isc_taskmgrmode_normal)
+ queue = manager->ready_tasks;
+ else
+ queue = manager->ready_priority_tasks;
+
+ return (ISC_TF(EMPTY(queue)));
+}
+
+/*
+ * Dequeue and return a pointer to the first task on the current ready
+ * list for the manager.
+ * If the task is privileged, dequeue it from the other ready list
+ * as well.
+ *
+ * Caller must hold the task manager lock.
+ */
+static inline isc__task_t *
+pop_readyq(isc__taskmgr_t *manager) {
+ isc__task_t *task;
+
+ if (manager->mode == isc_taskmgrmode_normal)
+ task = HEAD(manager->ready_tasks);
+ else
+ task = HEAD(manager->ready_priority_tasks);
+
+ if (task != NULL) {
+ DEQUEUE(manager->ready_tasks, task, ready_link);
+ if (ISC_LINK_LINKED(task, ready_priority_link))
+ DEQUEUE(manager->ready_priority_tasks, task,
+ ready_priority_link);
+ }
+
+ return (task);
+}
+
+/*
+ * Push 'task' onto the ready_tasks queue. If 'task' has the privilege
+ * flag set, then also push it onto the ready_priority_tasks queue.
+ *
+ * Caller must hold the task manager lock.
+ */
+static inline void
+push_readyq(isc__taskmgr_t *manager, isc__task_t *task) {
+ ENQUEUE(manager->ready_tasks, task, ready_link);
+ if ((task->flags & TASK_F_PRIVILEGED) != 0)
+ ENQUEUE(manager->ready_priority_tasks, task,
+ ready_priority_link);
+}
+
static void
dispatch(isc__taskmgr_t *manager) {
isc__task_t *task;
#ifndef USE_WORKER_THREADS
unsigned int total_dispatch_count = 0;
- isc__tasklist_t ready_tasks;
+ isc__tasklist_t new_ready_tasks;
+ isc__tasklist_t new_priority_tasks;
#endif /* USE_WORKER_THREADS */
REQUIRE(VALID_MANAGER(manager));
@@ -938,9 +1032,11 @@ dispatch(isc__taskmgr_t *manager) {
*/
#ifndef USE_WORKER_THREADS
- ISC_LIST_INIT(ready_tasks);
+ ISC_LIST_INIT(new_ready_tasks);
+ ISC_LIST_INIT(new_priority_tasks);
#endif
LOCK(&manager->lock);
+
while (!FINISHED(manager)) {
#ifdef USE_WORKER_THREADS
/*
@@ -949,10 +1045,12 @@ dispatch(isc__taskmgr_t *manager) {
* the task while only holding the manager lock, and then
* change the task to running state while only holding the
* task lock.
+ *
+ * If a pause has been requested, don't do any work
+ * until it's been released.
*/
- while ((EMPTY(manager->ready_tasks) ||
- manager->exclusive_requested) &&
- !FINISHED(manager))
+ while ((empty_readyq(manager) || manager->pause_requested ||
+ manager->exclusive_requested) && !FINISHED(manager))
{
XTHREADTRACE(isc_msgcat_get(isc_msgcat,
ISC_MSGSET_GENERAL,
@@ -964,13 +1062,13 @@ dispatch(isc__taskmgr_t *manager) {
}
#else /* USE_WORKER_THREADS */
if (total_dispatch_count >= DEFAULT_TASKMGR_QUANTUM ||
- EMPTY(manager->ready_tasks))
+ empty_readyq(manager))
break;
#endif /* USE_WORKER_THREADS */
XTHREADTRACE(isc_msgcat_get(isc_msgcat, ISC_MSGSET_TASK,
ISC_MSG_WORKING, "working"));
- task = HEAD(manager->ready_tasks);
+ task = pop_readyq(manager);
if (task != NULL) {
unsigned int dispatch_count = 0;
isc_boolean_t done = ISC_FALSE;
@@ -985,7 +1083,6 @@ dispatch(isc__taskmgr_t *manager) {
* have a task to do. We must reacquire the manager
* lock before exiting the 'if (task != NULL)' block.
*/
- DEQUEUE(manager->ready_tasks, task, ready_link);
manager->tasks_running++;
UNLOCK(&manager->lock);
@@ -1106,6 +1203,9 @@ dispatch(isc__taskmgr_t *manager) {
if (manager->exclusive_requested &&
manager->tasks_running == 1) {
SIGNAL(&manager->exclusive_granted);
+ } else if (manager->pause_requested &&
+ manager->tasks_running == 0) {
+ SIGNAL(&manager->paused);
}
#endif /* USE_WORKER_THREADS */
if (requeue) {
@@ -1129,17 +1229,39 @@ dispatch(isc__taskmgr_t *manager) {
* might even hurt rather than help.
*/
#ifdef USE_WORKER_THREADS
- ENQUEUE(manager->ready_tasks, task,
- ready_link);
+ push_readyq(manager, task);
#else
- ENQUEUE(ready_tasks, task, ready_link);
+ ENQUEUE(new_ready_tasks, task, ready_link);
+ if ((task->flags & TASK_F_PRIVILEGED) != 0)
+ ENQUEUE(new_priority_tasks, task,
+ ready_priority_link);
#endif
}
}
+
+#ifdef USE_WORKER_THREADS
+ /*
+ * If we are in privileged execution mode and there are no
+ * tasks remaining on the current ready queue, then
+ * we're stuck. Automatically drop privileges at that
+ * point and continue with the regular ready queue.
+ */
+ if (manager->tasks_running == 0 && empty_readyq(manager)) {
+ manager->mode = isc_taskmgrmode_normal;
+ if (!empty_readyq(manager))
+ BROADCAST(&manager->work_available);
+ }
+#endif
}
+
#ifndef USE_WORKER_THREADS
- ISC_LIST_APPENDLIST(manager->ready_tasks, ready_tasks, ready_link);
+ ISC_LIST_APPENDLIST(manager->ready_tasks, new_ready_tasks, ready_link);
+ ISC_LIST_APPENDLIST(manager->ready_priority_tasks, new_priority_tasks,
+ ready_priority_link);
+ if (empty_readyq(manager))
+ manager->mode = isc_taskmgrmode_normal;
#endif
+
UNLOCK(&manager->lock);
}
@@ -1174,6 +1296,7 @@ manager_free(isc__taskmgr_t *manager) {
#ifdef USE_WORKER_THREADS
(void)isc_condition_destroy(&manager->exclusive_granted);
(void)isc_condition_destroy(&manager->work_available);
+ (void)isc_condition_destroy(&manager->paused);
isc_mem_free(manager->mctx, manager->threads);
#endif /* USE_WORKER_THREADS */
DESTROYLOCK(&manager->lock);
@@ -1224,6 +1347,7 @@ isc__taskmgr_create(isc_mem_t *mctx, unsigned int workers,
manager->common.methods = &taskmgrmethods;
manager->common.impmagic = TASK_MANAGER_MAGIC;
manager->common.magic = ISCAPI_TASKMGR_MAGIC;
+ manager->mode = isc_taskmgrmode_normal;
manager->mctx = NULL;
result = isc_mutex_init(&manager->lock);
if (result != ISC_R_SUCCESS)
@@ -1253,14 +1377,24 @@ isc__taskmgr_create(isc_mem_t *mctx, unsigned int workers,
result = ISC_R_UNEXPECTED;
goto cleanup_workavailable;
}
+ if (isc_condition_init(&manager->paused) != ISC_R_SUCCESS) {
+ UNEXPECTED_ERROR(__FILE__, __LINE__,
+ "isc_condition_init() %s",
+ isc_msgcat_get(isc_msgcat, ISC_MSGSET_GENERAL,
+ ISC_MSG_FAILED, "failed"));
+ result = ISC_R_UNEXPECTED;
+ goto cleanup_exclusivegranted;
+ }
#endif /* USE_WORKER_THREADS */
if (default_quantum == 0)
default_quantum = DEFAULT_DEFAULT_QUANTUM;
manager->default_quantum = default_quantum;
INIT_LIST(manager->tasks);
INIT_LIST(manager->ready_tasks);
+ INIT_LIST(manager->ready_priority_tasks);
manager->tasks_running = 0;
manager->exclusive_requested = ISC_FALSE;
+ manager->pause_requested = ISC_FALSE;
manager->exiting = ISC_FALSE;
isc_mem_attach(mctx, &manager->mctx);
@@ -1296,6 +1430,8 @@ isc__taskmgr_create(isc_mem_t *mctx, unsigned int workers,
return (ISC_R_SUCCESS);
#ifdef USE_WORKER_THREADS
+ cleanup_exclusivegranted:
+ (void)isc_condition_destroy(&manager->exclusive_granted);
cleanup_workavailable:
(void)isc_condition_destroy(&manager->work_available);
cleanup_threads:
@@ -1361,6 +1497,11 @@ isc__taskmgr_destroy(isc_taskmgr_t **managerp) {
manager->exiting = ISC_TRUE;
/*
+ * If privileged mode was on, turn it off.
+ */
+ manager->mode = isc_taskmgrmode_normal;
+
+ /*
* Post shutdown event(s) to every task (if they haven't already been
* posted).
*/
@@ -1369,7 +1510,7 @@ isc__taskmgr_destroy(isc_taskmgr_t **managerp) {
task = NEXT(task, link)) {
LOCK(&task->lock);
if (task_shutdown(task))
- ENQUEUE(manager->ready_tasks, task, ready_link);
+ push_readyq(manager, task);
UNLOCK(&task->lock);
}
#ifdef USE_WORKER_THREADS
@@ -1408,10 +1549,30 @@ isc__taskmgr_destroy(isc_taskmgr_t **managerp) {
*managerp = NULL;
}
+ISC_TASKFUNC_SCOPE void
+isc__taskmgr_setmode(isc_taskmgr_t *manager0, isc_taskmgrmode_t mode) {
+ isc__taskmgr_t *manager = (isc__taskmgr_t *)manager0;
+
+ LOCK(&manager->lock);
+ manager->mode = mode;
+ UNLOCK(&manager->lock);
+}
+
+ISC_TASKFUNC_SCOPE isc_taskmgrmode_t
+isc__taskmgr_mode(isc_taskmgr_t *manager0) {
+ isc__taskmgr_t *manager = (isc__taskmgr_t *)manager0;
+ isc_taskmgrmode_t mode;
+ LOCK(&manager->lock);
+ mode = manager->mode;
+ UNLOCK(&manager->lock);
+ return (mode);
+}
+
#ifndef USE_WORKER_THREADS
isc_boolean_t
isc__taskmgr_ready(isc_taskmgr_t *manager0) {
isc__taskmgr_t *manager = (isc__taskmgr_t *)manager0;
+ isc_boolean_t is_ready;
#ifdef USE_SHARED_MANAGER
if (manager == NULL)
@@ -1419,7 +1580,12 @@ isc__taskmgr_ready(isc_taskmgr_t *manager0) {
#endif
if (manager == NULL)
return (ISC_FALSE);
- return (ISC_TF(!ISC_LIST_EMPTY(manager->ready_tasks)));
+
+ LOCK(&manager->lock);
+ is_ready = !empty_readyq(manager);
+ UNLOCK(&manager->lock);
+
+ return (is_ready);
}
isc_result_t
@@ -1438,6 +1604,29 @@ isc__taskmgr_dispatch(isc_taskmgr_t *manager0) {
return (ISC_R_SUCCESS);
}
+#else
+ISC_TASKFUNC_SCOPE void
+isc__taskmgr_pause(isc_taskmgr_t *manager0) {
+ isc__taskmgr_t *manager = (isc__taskmgr_t *)manager0;
+ LOCK(&manager->lock);
+ while (manager->tasks_running > 0) {
+ WAIT(&manager->paused, &manager->lock);
+ }
+ manager->pause_requested = ISC_TRUE;
+ UNLOCK(&manager->lock);
+}
+
+ISC_TASKFUNC_SCOPE void
+isc__taskmgr_resume(isc_taskmgr_t *manager0) {
+ isc__taskmgr_t *manager = (isc__taskmgr_t *)manager0;
+
+ LOCK(&manager->lock);
+ if (manager->pause_requested) {
+ manager->pause_requested = ISC_FALSE;
+ BROADCAST(&manager->work_available);
+ }
+ UNLOCK(&manager->lock);
+}
#endif /* USE_WORKER_THREADS */
ISC_TASKFUNC_SCOPE isc_result_t
@@ -1479,6 +1668,44 @@ isc__task_endexclusive(isc_task_t *task0) {
#endif
}
+ISC_TASKFUNC_SCOPE void
+isc__task_setprivilege(isc_task_t *task0, isc_boolean_t priv) {
+ isc__task_t *task = (isc__task_t *)task0;
+ isc__taskmgr_t *manager = task->manager;
+ isc_boolean_t oldpriv;
+
+ LOCK(&task->lock);
+ oldpriv = ISC_TF((task->flags & TASK_F_PRIVILEGED) != 0);
+ if (priv)
+ task->flags |= TASK_F_PRIVILEGED;
+ else
+ task->flags &= ~TASK_F_PRIVILEGED;
+ UNLOCK(&task->lock);
+
+ if (priv == oldpriv)
+ return;
+
+ LOCK(&manager->lock);
+ if (priv && ISC_LINK_LINKED(task, ready_link))
+ ENQUEUE(manager->ready_priority_tasks, task,
+ ready_priority_link);
+ else if (!priv && ISC_LINK_LINKED(task, ready_priority_link))
+ DEQUEUE(manager->ready_priority_tasks, task,
+ ready_priority_link);
+ UNLOCK(&manager->lock);
+}
+
+ISC_TASKFUNC_SCOPE isc_boolean_t
+isc__task_privilege(isc_task_t *task0) {
+ isc__task_t *task = (isc__task_t *)task0;
+ isc_boolean_t priv;
+
+ LOCK(&task->lock);
+ priv = ISC_TF((task->flags & TASK_F_PRIVILEGED) != 0);
+ UNLOCK(&task->lock);
+ return (priv);
+}
+
#ifdef USE_SOCKETIMPREGISTER
isc_result_t
isc__task_register() {
diff --git a/lib/isc/task_api.c b/lib/isc/task_api.c
index 4e03db24..c1907207 100644
--- a/lib/isc/task_api.c
+++ b/lib/isc/task_api.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2009, 2010 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2009-2011 Internet Systems Consortium, Inc. ("ISC")
*
* Permission to use, copy, modify, and/or distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
@@ -14,7 +14,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: task_api.c,v 1.7 2010-12-22 23:46:59 tbox Exp $ */
+/* $Id: task_api.c,v 1.9 2011-09-02 23:46:32 tbox Exp $ */
#include <config.h>
@@ -99,6 +99,20 @@ isc_taskmgr_destroy(isc_taskmgr_t **managerp) {
ENSURE(*managerp == NULL);
}
+void
+isc_taskmgr_setmode(isc_taskmgr_t *manager, isc_taskmgrmode_t mode) {
+ REQUIRE(ISCAPI_TASKMGR_VALID(manager));
+
+ manager->methods->setmode(manager, mode);
+}
+
+isc_taskmgrmode_t
+isc_taskmgr_mode(isc_taskmgr_t *manager) {
+ REQUIRE(ISCAPI_TASKMGR_VALID(manager));
+
+ return (manager->methods->mode(manager));
+}
+
isc_result_t
isc_task_create(isc_taskmgr_t *manager, unsigned int quantum,
isc_task_t **taskp)
@@ -201,6 +215,20 @@ isc_task_endexclusive(isc_task_t *task) {
task->methods->endexclusive(task);
}
+void
+isc_task_setprivilege(isc_task_t *task, isc_boolean_t priv) {
+ REQUIRE(ISCAPI_TASK_VALID(task));
+
+ task->methods->setprivilege(task, priv);
+}
+
+isc_boolean_t
+isc_task_privilege(isc_task_t *task) {
+ REQUIRE(ISCAPI_TASK_VALID(task));
+
+ return (task->methods->privilege(task));
+}
+
/*%
* This is necessary for libisc's internal timer implementation. Other
diff --git a/lib/isc/task_p.h b/lib/isc/task_p.h
index 1bcdca65..ded69ddc 100644
--- a/lib/isc/task_p.h
+++ b/lib/isc/task_p.h
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004, 2005, 2007, 2009 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004, 2005, 2007, 2009, 2011 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 2000, 2001 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -15,17 +15,25 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: task_p.h,v 1.13 2009-09-02 23:48:02 tbox Exp $ */
+/* $Id: task_p.h,v 1.15 2011-09-02 23:46:32 tbox Exp $ */
#ifndef ISC_TASK_P_H
#define ISC_TASK_P_H
/*! \file */
+#if defined(BIND9) && defined(ISC_PLATFORM_USETHREADS)
+void
+isc__taskmgr_pause(isc_taskmgr_t *taskmgr);
+
+void
+isc__taskmgr_resume(isc_taskmgr_t *taskmgr);
+#else
isc_boolean_t
isc__taskmgr_ready(isc_taskmgr_t *taskmgr);
isc_result_t
isc__taskmgr_dispatch(isc_taskmgr_t *taskmgr);
+#endif /* !BIND9 || !ISC_PLATFORM_USETHREADS */
#endif /* ISC_TASK_P_H */
diff --git a/lib/isc/taskpool.c b/lib/isc/taskpool.c
index f8991a97..69514d6d 100644
--- a/lib/isc/taskpool.c
+++ b/lib/isc/taskpool.c
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: taskpool.c,v 1.20 2011-07-07 23:47:49 tbox Exp $ */
+/* $Id: taskpool.c,v 1.21 2011-09-02 21:15:38 each Exp $ */
/*! \file */
@@ -163,9 +163,8 @@ isc_taskpool_destroy(isc_taskpool_t **poolp) {
unsigned int i;
isc_taskpool_t *pool = *poolp;
for (i = 0; i < pool->ntasks; i++) {
- if (pool->tasks[i] != NULL) {
+ if (pool->tasks[i] != NULL)
isc_task_detach(&pool->tasks[i]);
- }
}
isc_mem_put(pool->mctx, pool->tasks,
pool->ntasks * sizeof(isc_task_t *));
@@ -173,4 +172,14 @@ isc_taskpool_destroy(isc_taskpool_t **poolp) {
*poolp = NULL;
}
+void
+isc_taskpool_setprivilege(isc_taskpool_t *pool, isc_boolean_t priv) {
+ unsigned int i;
+
+ REQUIRE(pool != NULL);
+ for (i = 0; i < pool->ntasks; i++) {
+ if (pool->tasks[i] != NULL)
+ isc_task_setprivilege(pool->tasks[i], priv);
+ }
+}
diff --git a/lib/isc/tests/Makefile.in b/lib/isc/tests/Makefile.in
index 5db6e437..8c0a088b 100644
--- a/lib/isc/tests/Makefile.in
+++ b/lib/isc/tests/Makefile.in
@@ -12,7 +12,7 @@
# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
# PERFORMANCE OF THIS SOFTWARE.
-# $Id: Makefile.in,v 1.6 2011-08-23 01:29:38 each Exp $
+# $Id: Makefile.in,v 1.7 2011-09-02 21:15:38 each Exp $
srcdir = @srcdir@
VPATH = @srcdir@
@@ -35,10 +35,12 @@ ISCDEPLIBS = ../libisc.@A@
LIBS = @LIBS@ @ATFLIBS@
OBJS = isctest.@O@
-SRCS = isctest.c taskpool_test.c socket_test.c hash_test.c
+SRCS = isctest.c taskpool_test.c socket_test.c hash_test.c \
+ task_test.c
SUBDIRS =
-TARGETS = taskpool_test@EXEEXT@ socket_test@EXEEXT@ hash_test@EXEEXT@
+TARGETS = taskpool_test@EXEEXT@ socket_test@EXEEXT@ hash_test@EXEEXT@ \
+ task_test@EXEEXT@
@BIND9_MAKE_RULES@
@@ -46,6 +48,10 @@ taskpool_test@EXEEXT@: taskpool_test.@O@ isctest.@O@ ${ISCDEPLIBS}
${LIBTOOL_MODE_LINK} ${PURIFY} ${CC} ${CFLAGS} ${LDFLAGS} -o $@ \
taskpool_test.@O@ isctest.@O@ ${ISCLIBS} ${LIBS}
+task_test@EXEEXT@: task_test.@O@ isctest.@O@ ${ISCDEPLIBS}
+ ${LIBTOOL_MODE_LINK} ${PURIFY} ${CC} ${CFLAGS} ${LDFLAGS} -o $@ \
+ task_test.@O@ isctest.@O@ ${ISCLIBS} ${LIBS}
+
socket_test@EXEEXT@: socket_test.@O@ isctest.@O@ ${ISCDEPLIBS}
${LIBTOOL_MODE_LINK} ${PURIFY} ${CC} ${CFLAGS} ${LDFLAGS} -o $@ \
socket_test.@O@ isctest.@O@ ${ISCLIBS} ${LIBS}
diff --git a/lib/isc/tests/isctest.c b/lib/isc/tests/isctest.c
index b512492b..e01f7f35 100644
--- a/lib/isc/tests/isctest.c
+++ b/lib/isc/tests/isctest.c
@@ -14,12 +14,14 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: isctest.c,v 1.3 2011-07-28 04:04:37 each Exp $ */
+/* $Id: isctest.c,v 1.4 2011-09-02 21:15:38 each Exp $ */
/*! \file */
#include <config.h>
+#include <time.h>
+
#include <isc/app.h>
#include <isc/buffer.h>
#include <isc/entropy.h>
@@ -153,3 +155,24 @@ isc_test_end() {
isc_mem_destroy(&mctx);
}
+/*
+ * Sleep for 'usec' microseconds.
+ */
+void
+isc_test_nap(isc_uint32_t usec) {
+#ifdef HAVE_NANOSLEEP
+ struct timespec ts;
+
+ ts.tv_sec = usec / 1000000;
+ ts.tv_nsec = (usec % 1000000) * 1000;
+ nanosleep(&ts, NULL);
+#elif HAVE_USLEEP
+ usleep(usec);
+#else
+ /*
+ * No fractional-second sleep function is available, so we
+ * round up to the nearest second and sleep instead
+ */
+ sleep((usec / 1000000) + 1);
+#endif
+}
diff --git a/lib/isc/tests/isctest.h b/lib/isc/tests/isctest.h
index 1d6d9645..2d5914f8 100644
--- a/lib/isc/tests/isctest.h
+++ b/lib/isc/tests/isctest.h
@@ -14,7 +14,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: isctest.h,v 1.3 2011-07-28 04:04:37 each Exp $ */
+/* $Id: isctest.h,v 1.4 2011-09-02 21:15:38 each Exp $ */
/*! \file */
@@ -52,3 +52,5 @@ isc_test_begin(FILE *logfile, isc_boolean_t start_managers);
void
isc_test_end(void);
+void
+isc_test_nap(isc_uint32_t usec);
diff --git a/lib/isc/tests/socket_test.c b/lib/isc/tests/socket_test.c
index c6f8d4b1..266ea2fc 100644
--- a/lib/isc/tests/socket_test.c
+++ b/lib/isc/tests/socket_test.c
@@ -14,7 +14,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: socket_test.c,v 1.3 2011-07-28 23:47:59 tbox Exp $ */
+/* $Id: socket_test.c,v 1.4 2011-09-02 21:15:38 each Exp $ */
/*! \file */
@@ -56,22 +56,6 @@ event_done(isc_task_t *task, isc_event_t *event) {
isc_event_free(&event);
}
-static void
-nap(isc_uint32_t usec) {
-#ifdef HAVE_NANOSLEEP
- struct timespec ts;
-
- ts.tv_sec = usec / 1000000;
- ts.tv_nsec = (usec % 1000000) * 1000;
- nanosleep(&ts, NULL);
-#elif HAVE_USLEEP
- usleep(usec);
-#else
- /* Round up to the nearest second and sleep, instead */
- sleep((usec / 1000000) + 1);
-#endif
-}
-
static isc_result_t
waitfor(completion_t *completion) {
int i = 0;
@@ -80,7 +64,7 @@ waitfor(completion_t *completion) {
while (isc__taskmgr_ready(taskmgr))
isc__taskmgr_dispatch(taskmgr);
#endif
- nap(1000);
+ isc_test_nap(1000);
}
if (completion->done)
return (ISC_R_SUCCESS);
diff --git a/lib/isc/tests/task_test.c b/lib/isc/tests/task_test.c
new file mode 100644
index 00000000..a8dfd89d
--- /dev/null
+++ b/lib/isc/tests/task_test.c
@@ -0,0 +1,411 @@
+/*
+ * Copyright (C) 2011 Internet Systems Consortium, Inc. ("ISC")
+ *
+ * Permission to use, copy, modify, and/or distribute this software for any
+ * purpose with or without fee is hereby granted, provided that the above
+ * copyright notice and this permission notice appear in all copies.
+ *
+ * THE SOFTWARE IS PROVIDED "AS IS" AND ISC DISCLAIMS ALL WARRANTIES WITH
+ * REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY
+ * AND FITNESS. IN NO EVENT SHALL ISC BE LIABLE FOR ANY SPECIAL, DIRECT,
+ * INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM
+ * LOSS OF USE, DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE
+ * OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
+ * PERFORMANCE OF THIS SOFTWARE.
+ */
+
+/* $Id: task_test.c,v 1.3 2011-09-02 23:46:33 tbox Exp $ */
+
+/*! \file */
+
+#include <config.h>
+
+#include <atf-c.h>
+
+#include <unistd.h>
+
+#include <isc/task.h>
+#include <isc/util.h>
+
+#include "../task_p.h"
+#include "isctest.h"
+
+/*
+ * Helper functions
+ */
+
+/* task event handler, sets a boolean to true */
+int counter = 0;
+isc_mutex_t set_lock;
+
+static void
+set(isc_task_t *task, isc_event_t *event) {
+ int *value = (int *) event->ev_arg;
+
+ UNUSED(task);
+
+ isc_event_free(&event);
+ LOCK(&set_lock);
+ *value = counter++;
+ UNLOCK(&set_lock);
+}
+
+static void
+set_and_drop(isc_task_t *task, isc_event_t *event) {
+ int *value = (int *) event->ev_arg;
+
+ UNUSED(task);
+
+ isc_event_free(&event);
+ LOCK(&set_lock);
+ *value = (int) isc_taskmgr_mode(taskmgr);
+ counter++;
+ UNLOCK(&set_lock);
+ isc_taskmgr_setmode(taskmgr, isc_taskmgrmode_normal);
+}
+
+/*
+ * Individual unit tests
+ */
+
+/* Create a task */
+ATF_TC(create_task);
+ATF_TC_HEAD(create_task, tc) {
+ atf_tc_set_md_var(tc, "descr", "create and destroy a task");
+}
+ATF_TC_BODY(create_task, tc) {
+ isc_result_t result;
+ isc_task_t *task = NULL;
+
+ UNUSED(tc);
+
+ result = isc_test_begin(NULL, ISC_TRUE);
+ ATF_REQUIRE_EQ(result, ISC_R_SUCCESS);
+
+ result = isc_task_create(taskmgr, 0, &task);
+ ATF_REQUIRE_EQ(result, ISC_R_SUCCESS);
+
+ isc_task_destroy(&task);
+ ATF_REQUIRE_EQ(task, NULL);
+
+ isc_test_end();
+}
+
+/* Process events */
+ATF_TC(all_events);
+ATF_TC_HEAD(all_events, tc) {
+ atf_tc_set_md_var(tc, "descr", "process task events");
+}
+ATF_TC_BODY(all_events, tc) {
+ isc_result_t result;
+ isc_task_t *task = NULL;
+ isc_event_t *event;
+ int a = 0, b = 0;
+ int i = 0;
+
+ UNUSED(tc);
+
+ counter = 1;
+
+ result = isc_test_begin(NULL, ISC_TRUE);
+ ATF_REQUIRE_EQ(result, ISC_R_SUCCESS);
+
+ result = isc_task_create(taskmgr, 0, &task);
+ ATF_REQUIRE_EQ(result, ISC_R_SUCCESS);
+
+ /* First event */
+ event = isc_event_allocate(mctx, task, ISC_TASKEVENT_TEST,
+ set, &a, sizeof (isc_event_t));
+ ATF_REQUIRE(event != NULL);
+
+ ATF_CHECK_EQ(a, 0);
+ isc_task_send(task, &event);
+
+ event = isc_event_allocate(mctx, task, ISC_TASKEVENT_TEST,
+ set, &b, sizeof (isc_event_t));
+ ATF_REQUIRE(event != NULL);
+
+ ATF_CHECK_EQ(b, 0);
+ isc_task_send(task, &event);
+
+ while (a == 0 && b == 0 && i++ < 5000) {
+#ifndef ISC_PLATFORM_USETHREADS
+ while (isc__taskmgr_ready(taskmgr))
+ isc__taskmgr_dispatch(taskmgr);
+#endif
+ isc_test_nap(1000);
+ }
+
+ ATF_CHECK(a != 0);
+ ATF_CHECK(b != 0);
+
+ isc_task_destroy(&task);
+ ATF_REQUIRE_EQ(task, NULL);
+
+ isc_test_end();
+}
+
+/* Privileged events */
+ATF_TC(privileged_events);
+ATF_TC_HEAD(privileged_events, tc) {
+ atf_tc_set_md_var(tc, "descr", "process privileged events");
+}
+ATF_TC_BODY(privileged_events, tc) {
+ isc_result_t result;
+ isc_task_t *task1 = NULL, *task2 = NULL;
+ isc_event_t *event;
+ int a = 0, b = 0, c = 0, d = 0, e = 0;
+ int i = 0;
+
+ UNUSED(tc);
+
+ counter = 1;
+ result = isc_mutex_init(&set_lock);
+ ATF_REQUIRE_EQ(result, ISC_R_SUCCESS);
+
+ result = isc_test_begin(NULL, ISC_TRUE);
+ ATF_REQUIRE_EQ(result, ISC_R_SUCCESS);
+
+#ifdef ISC_PLATFORM_USETHREADS
+ /*
+ * Pause the task manager so we can fill up the work queue
+ * without things happening while we do it.
+ */
+ isc__taskmgr_pause(taskmgr);
+#endif
+
+ result = isc_task_create(taskmgr, 0, &task1);
+ ATF_REQUIRE_EQ(result, ISC_R_SUCCESS);
+ isc_task_setname(task1, "privileged", NULL);
+ ATF_CHECK(!isc_task_privilege(task1));
+ isc_task_setprivilege(task1, ISC_TRUE);
+ ATF_CHECK(isc_task_privilege(task1));
+
+ result = isc_task_create(taskmgr, 0, &task2);
+ ATF_REQUIRE_EQ(result, ISC_R_SUCCESS);
+ isc_task_setname(task2, "normal", NULL);
+ ATF_CHECK(!isc_task_privilege(task2));
+
+ /* First event: privileged */
+ event = isc_event_allocate(mctx, task1, ISC_TASKEVENT_TEST,
+ set, &a, sizeof (isc_event_t));
+ ATF_REQUIRE(event != NULL);
+
+ ATF_CHECK_EQ(a, 0);
+ isc_task_send(task1, &event);
+
+ /* Second event: not privileged */
+ event = isc_event_allocate(mctx, task2, ISC_TASKEVENT_TEST,
+ set, &b, sizeof (isc_event_t));
+ ATF_REQUIRE(event != NULL);
+
+ ATF_CHECK_EQ(b, 0);
+ isc_task_send(task2, &event);
+
+ /* Third event: privileged */
+ event = isc_event_allocate(mctx, task1, ISC_TASKEVENT_TEST,
+ set, &c, sizeof (isc_event_t));
+ ATF_REQUIRE(event != NULL);
+
+ ATF_CHECK_EQ(c, 0);
+ isc_task_send(task1, &event);
+
+ /* Fourth event: privileged */
+ event = isc_event_allocate(mctx, task1, ISC_TASKEVENT_TEST,
+ set, &d, sizeof (isc_event_t));
+ ATF_REQUIRE(event != NULL);
+
+ ATF_CHECK_EQ(d, 0);
+ isc_task_send(task1, &event);
+
+ /* Fifth event: not privileged */
+ event = isc_event_allocate(mctx, task2, ISC_TASKEVENT_TEST,
+ set, &e, sizeof (isc_event_t));
+ ATF_REQUIRE(event != NULL);
+
+ ATF_CHECK_EQ(e, 0);
+ isc_task_send(task2, &event);
+
+ ATF_CHECK_EQ(isc_taskmgr_mode(taskmgr), isc_taskmgrmode_normal);
+ isc_taskmgr_setmode(taskmgr, isc_taskmgrmode_privileged);
+ ATF_CHECK_EQ(isc_taskmgr_mode(taskmgr), isc_taskmgrmode_privileged);
+
+#ifdef ISC_PLATFORM_USETHREADS
+ isc__taskmgr_resume(taskmgr);
+#endif
+
+ /* We're waiting for *all* variables to be set */
+ while ((a == 0 || b == 0 || c == 0 || d == 0 || e == 0) && i++ < 5000) {
+#ifndef ISC_PLATFORM_USETHREADS
+ while (isc__taskmgr_ready(taskmgr))
+ isc__taskmgr_dispatch(taskmgr);
+#endif
+ isc_test_nap(1000);
+ }
+
+ /*
+ * We can't guarantee what order the events fire, but
+ * we do know the privileged tasks that set a, c, and d
+ * would have fired first.
+ */
+ ATF_CHECK(a <= 3);
+ ATF_CHECK(c <= 3);
+ ATF_CHECK(d <= 3);
+
+ /* ...and the non-privileged tasks that set b and e, last */
+ ATF_CHECK(b >= 4);
+ ATF_CHECK(e >= 4);
+
+ ATF_CHECK_EQ(counter, 6);
+
+ isc_task_setprivilege(task1, ISC_FALSE);
+ ATF_CHECK(!isc_task_privilege(task1));
+
+ ATF_CHECK_EQ(isc_taskmgr_mode(taskmgr), isc_taskmgrmode_normal);
+
+ isc_task_destroy(&task1);
+ ATF_REQUIRE_EQ(task1, NULL);
+ isc_task_destroy(&task2);
+ ATF_REQUIRE_EQ(task2, NULL);
+
+ isc_test_end();
+}
+
+/*
+ * Edge case: this tests that the task manager behaves as expected when
+ * we explicitly set it into normal mode *while* running privileged.
+ */
+ATF_TC(privilege_drop);
+ATF_TC_HEAD(privilege_drop, tc) {
+ atf_tc_set_md_var(tc, "descr", "process privileged events");
+}
+ATF_TC_BODY(privilege_drop, tc) {
+ isc_result_t result;
+ isc_task_t *task1 = NULL, *task2 = NULL;
+ isc_event_t *event;
+ int a = 0, b = 0, c = 0, d = 0, e = 0;
+ int i = 0;
+
+ UNUSED(tc);
+
+ counter = 1;
+ result = isc_mutex_init(&set_lock);
+ ATF_REQUIRE_EQ(result, ISC_R_SUCCESS);
+
+ result = isc_test_begin(NULL, ISC_TRUE);
+ ATF_REQUIRE_EQ(result, ISC_R_SUCCESS);
+
+#ifdef ISC_PLATFORM_USETHREADS
+ /*
+ * Pause the task manager so we can fill up the work queue
+ * without things happening while we do it.
+ */
+ isc__taskmgr_pause(taskmgr);
+#endif
+
+ result = isc_task_create(taskmgr, 0, &task1);
+ ATF_REQUIRE_EQ(result, ISC_R_SUCCESS);
+ isc_task_setname(task1, "privileged", NULL);
+ ATF_CHECK(!isc_task_privilege(task1));
+ isc_task_setprivilege(task1, ISC_TRUE);
+ ATF_CHECK(isc_task_privilege(task1));
+
+ result = isc_task_create(taskmgr, 0, &task2);
+ ATF_REQUIRE_EQ(result, ISC_R_SUCCESS);
+ isc_task_setname(task2, "normal", NULL);
+ ATF_CHECK(!isc_task_privilege(task2));
+
+ /* First event: privileged */
+ event = isc_event_allocate(mctx, task1, ISC_TASKEVENT_TEST,
+ set_and_drop, &a, sizeof (isc_event_t));
+ ATF_REQUIRE(event != NULL);
+
+ ATF_CHECK_EQ(a, 0);
+ isc_task_send(task1, &event);
+
+ /* Second event: not privileged */
+ event = isc_event_allocate(mctx, task2, ISC_TASKEVENT_TEST,
+ set_and_drop, &b, sizeof (isc_event_t));
+ ATF_REQUIRE(event != NULL);
+
+ ATF_CHECK_EQ(b, 0);
+ isc_task_send(task2, &event);
+
+ /* Third event: privileged */
+ event = isc_event_allocate(mctx, task1, ISC_TASKEVENT_TEST,
+ set_and_drop, &c, sizeof (isc_event_t));
+ ATF_REQUIRE(event != NULL);
+
+ ATF_CHECK_EQ(c, 0);
+ isc_task_send(task1, &event);
+
+ /* Fourth event: privileged */
+ event = isc_event_allocate(mctx, task1, ISC_TASKEVENT_TEST,
+ set_and_drop, &d, sizeof (isc_event_t));
+ ATF_REQUIRE(event != NULL);
+
+ ATF_CHECK_EQ(d, 0);
+ isc_task_send(task1, &event);
+
+ /* Fifth event: not privileged */
+ event = isc_event_allocate(mctx, task2, ISC_TASKEVENT_TEST,
+ set_and_drop, &e, sizeof (isc_event_t));
+ ATF_REQUIRE(event != NULL);
+
+ ATF_CHECK_EQ(e, 0);
+ isc_task_send(task2, &event);
+
+ ATF_CHECK_EQ(isc_taskmgr_mode(taskmgr), isc_taskmgrmode_normal);
+ isc_taskmgr_setmode(taskmgr, isc_taskmgrmode_privileged);
+ ATF_CHECK_EQ(isc_taskmgr_mode(taskmgr), isc_taskmgrmode_privileged);
+
+#ifdef ISC_PLATFORM_USETHREADS
+ isc__taskmgr_resume(taskmgr);
+#endif
+
+ /* We're waiting for *any* variable to be set */
+ while ((a == 0 && b == 0 && c == 0 && d == 0 && e == 0) && i++ < 5000) {
+#ifndef ISC_PLATFORM_USETHREADS
+ while (isc__taskmgr_ready(taskmgr))
+ isc__taskmgr_dispatch(taskmgr);
+#endif
+ isc_test_nap(1000);
+ }
+
+ /*
+ * We can't guarantee what order the events fire, but
+ * we do know *exactly one* of the privileged tasks will
+ * have run in privileged mode...
+ */
+ ATF_CHECK(a == isc_taskmgrmode_privileged ||
+ c == isc_taskmgrmode_privileged ||
+ d == isc_taskmgrmode_privileged);
+ ATF_CHECK(a + c + d == isc_taskmgrmode_privileged);
+
+ /* ...and neither of the non-privileged tasks did... */
+ ATF_CHECK(b == isc_taskmgrmode_normal || e == isc_taskmgrmode_normal);
+
+ /* ...but all five of them did run. */
+ ATF_CHECK_EQ(counter, 6);
+
+ ATF_CHECK_EQ(isc_taskmgr_mode(taskmgr), isc_taskmgrmode_normal);
+
+ isc_task_destroy(&task1);
+ ATF_REQUIRE_EQ(task1, NULL);
+ isc_task_destroy(&task2);
+ ATF_REQUIRE_EQ(task2, NULL);
+
+ isc_test_end();
+}
+/*
+ * Main
+ */
+ATF_TP_ADD_TCS(tp) {
+ ATF_TP_ADD_TC(tp, create_task);
+ ATF_TP_ADD_TC(tp, all_events);
+ ATF_TP_ADD_TC(tp, privileged_events);
+ ATF_TP_ADD_TC(tp, privilege_drop);
+
+ return (atf_no_error());
+}
+
diff --git a/lib/isc/tests/taskpool_test.c b/lib/isc/tests/taskpool_test.c
index a582afdf..3cb9ad47 100644
--- a/lib/isc/tests/taskpool_test.c
+++ b/lib/isc/tests/taskpool_test.c
@@ -14,7 +14,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: taskpool_test.c,v 1.3 2011-07-28 04:04:37 each Exp $ */
+/* $Id: taskpool_test.c,v 1.4 2011-09-02 21:15:38 each Exp $ */
/*! \file */
@@ -148,6 +148,55 @@ ATF_TC_BODY(get_tasks, tc) {
isc_test_end();
}
+/* Get tasks */
+ATF_TC(set_privilege);
+ATF_TC_HEAD(set_privilege, tc) {
+ atf_tc_set_md_var(tc, "descr", "create a taskpool");
+}
+ATF_TC_BODY(set_privilege, tc) {
+ isc_result_t result;
+ isc_taskpool_t *pool = NULL;
+ isc_task_t *task1 = NULL, *task2 = NULL, *task3 = NULL;
+
+ UNUSED(tc);
+
+ result = isc_test_begin(NULL, ISC_TRUE);
+ ATF_REQUIRE_EQ(result, ISC_R_SUCCESS);
+
+ result = isc_taskpool_create(taskmgr, mctx, 2, 2, &pool);
+ ATF_REQUIRE_EQ(result, ISC_R_SUCCESS);
+ ATF_REQUIRE_EQ(isc_taskpool_size(pool), 2);
+
+ isc_taskpool_setprivilege(pool, ISC_TRUE);
+
+ isc_taskpool_gettask(pool, &task1);
+ isc_taskpool_gettask(pool, &task2);
+ isc_taskpool_gettask(pool, &task3);
+
+ ATF_CHECK(ISCAPI_TASK_VALID(task1));
+ ATF_CHECK(ISCAPI_TASK_VALID(task2));
+ ATF_CHECK(ISCAPI_TASK_VALID(task3));
+
+ ATF_CHECK(isc_task_privilege(task1));
+ ATF_CHECK(isc_task_privilege(task2));
+ ATF_CHECK(isc_task_privilege(task3));
+
+ isc_taskpool_setprivilege(pool, ISC_FALSE);
+
+ ATF_CHECK(!isc_task_privilege(task1));
+ ATF_CHECK(!isc_task_privilege(task2));
+ ATF_CHECK(!isc_task_privilege(task3));
+
+ isc_task_destroy(&task1);
+ isc_task_destroy(&task2);
+ isc_task_destroy(&task3);
+
+ isc_taskpool_destroy(&pool);
+ ATF_REQUIRE_EQ(pool, NULL);
+
+ isc_test_end();
+}
+
/*
* Main
*/
@@ -155,6 +204,7 @@ ATF_TP_ADD_TCS(tp) {
ATF_TP_ADD_TC(tp, create_pool);
ATF_TP_ADD_TC(tp, expand_pool);
ATF_TP_ADD_TC(tp, get_tasks);
+ ATF_TP_ADD_TC(tp, set_privilege);
return (atf_no_error());
}
diff --git a/lib/isc/unix/socket.c b/lib/isc/unix/socket.c
index 54a6d256..5e97b902 100644
--- a/lib/isc/unix/socket.c
+++ b/lib/isc/unix/socket.c
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: socket.c,v 1.346 2011-08-24 23:17:52 marka Exp $ */
+/* $Id: socket.c,v 1.348 2011-08-25 11:37:13 marka Exp $ */
/*! \file */
@@ -3784,7 +3784,6 @@ static isc_threadresult_t
watcher(void *uap) {
isc__socketmgr_t *manager = uap;
isc_boolean_t done;
- int ctlfd;
int cc;
#ifdef USE_KQUEUE
const char *fnname = "kevent()";
@@ -3796,16 +3795,19 @@ watcher(void *uap) {
#elif defined (USE_SELECT)
const char *fnname = "select()";
int maxfd;
+ int ctlfd;
#endif
char strbuf[ISC_STRERRORSIZE];
#ifdef ISC_SOCKET_USE_POLLWATCH
pollstate_t pollstate = poll_idle;
#endif
+#if defined (USE_SELECT)
/*
* Get the control fd here. This will never change.
*/
ctlfd = manager->pipe_fds[0];
+#endif
done = ISC_FALSE;
while (!done) {
do {
diff --git a/lib/isc/win32/libisc.def b/lib/isc/win32/libisc.def
index 226e0142..fb084103 100644
--- a/lib/isc/win32/libisc.def
+++ b/lib/isc/win32/libisc.def
@@ -127,17 +127,21 @@ isc__task_getcurrenttime
isc__task_getname
isc__task_gettag
isc__task_onshutdown
+isc__task_privilege
isc__task_purge
isc__task_purgeevent
isc__task_purgerange
isc__task_send
isc__task_sendanddetach
isc__task_setname
+isc__task_setprivilege
isc__task_shutdown
isc__task_unsend
isc__task_unsendrange
isc__taskmgr_create
isc__taskmgr_destroy
+isc__taskmgr_mode
+isc__taskmgr_setmode
isc__timer_attach
isc__timer_create
isc__timer_detach
@@ -535,6 +539,7 @@ isc_taskpool_create
isc_taskpool_destroy
isc_taskpool_expand
isc_taskpool_gettask
+isc_taskpool_setprivilege
isc_taskpool_size
isc_thread_create
isc_thread_join
diff --git a/lib/isccfg/aclconf.c b/lib/isccfg/aclconf.c
index 33090c77..59d309c2 100644
--- a/lib/isccfg/aclconf.c
+++ b/lib/isccfg/aclconf.c
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: aclconf.c,v 1.31 2011-06-17 23:47:49 tbox Exp $ */
+/* $Id: aclconf.c,v 1.32 2011-08-26 04:49:14 marka Exp $ */
#include <config.h>
@@ -74,13 +74,11 @@ void
cfg_aclconfctx_detach(cfg_aclconfctx_t **actxp) {
cfg_aclconfctx_t *actx;
dns_acl_t *dacl, *next;
- isc_mem_t *mctx;
unsigned int refs;
REQUIRE(actxp != NULL && *actxp != NULL);
actx = *actxp;
- mctx = actx->mctx;
isc_refcount_decrement(&actx->references, &refs);
if (refs == 0) {
diff --git a/lib/isccfg/namedconf.c b/lib/isccfg/namedconf.c
index 52f1d8a1..b66b943b 100644
--- a/lib/isccfg/namedconf.c
+++ b/lib/isccfg/namedconf.c
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: namedconf.c,v 1.139 2011-07-01 02:25:48 marka Exp $ */
+/* $Id: namedconf.c,v 1.141 2011-09-06 22:29:33 smann Exp $ */
/*! \file */
@@ -1395,10 +1395,12 @@ zone_clauses[] = {
{ "notify-to-soa", &cfg_type_boolean, 0 },
{ "nsec3-test-zone", &cfg_type_boolean, CFG_CLAUSEFLAG_TESTONLY },
{ "serial-update-method", &cfg_type_updatemethod, 0 },
+ { "request-ixfr", &cfg_type_boolean, 0 },
{ "sig-signing-nodes", &cfg_type_uint32, 0 },
{ "sig-signing-signatures", &cfg_type_uint32, 0 },
{ "sig-signing-type", &cfg_type_uint32, 0 },
{ "sig-validity-interval", &cfg_type_validityinterval, 0 },
+ { "inline-signing", &cfg_type_boolean, 0 },
{ "transfer-source", &cfg_type_sockaddr4wild, 0 },
{ "transfer-source-v6", &cfg_type_sockaddr6wild, 0 },
{ "try-tcp-refresh", &cfg_type_boolean, 0 },
diff --git a/lib/lwres/getnameinfo.c b/lib/lwres/getnameinfo.c
index b27ac407..ab72b4a2 100644
--- a/lib/lwres/getnameinfo.c
+++ b/lib/lwres/getnameinfo.c
@@ -1,5 +1,5 @@
/*
- * Portions Copyright (C) 2004, 2005, 2007 Internet Systems Consortium, Inc. ("ISC")
+ * Portions Copyright (C) 2004, 2005, 2007, 2011 Internet Systems Consortium, Inc. ("ISC")
* Portions Copyright (C) 1999-2001, 2003 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -15,7 +15,7 @@
* PERFORMANCE OF THIS SOFTWARE.
*/
-/* $Id: getnameinfo.c,v 1.39 2007-06-19 23:47:22 tbox Exp $ */
+/* $Id: getnameinfo.c,v 1.41 2011-08-30 23:46:53 tbox Exp $ */
/*! \file */
@@ -62,51 +62,51 @@
* sockaddr sa which is salen bytes long. The hostname is of length
* hostlen and is returned via *host. The maximum length of the hostname
* is 1025 bytes: #NI_MAXHOST.
- *
+ *
* The name of the service associated with the port number in sa is
* returned in *serv. It is servlen bytes long. The maximum length of the
* service name is #NI_MAXSERV - 32 bytes.
- *
+ *
* The flags argument sets the following bits:
- *
+ *
* \li #NI_NOFQDN:
* A fully qualified domain name is not required for local hosts.
* The local part of the fully qualified domain name is returned
* instead.
- *
+ *
* \li #NI_NUMERICHOST
* Return the address in numeric form, as if calling inet_ntop(),
* instead of a host name.
- *
+ *
* \li #NI_NAMEREQD
* A name is required. If the hostname cannot be found in the DNS
* and this flag is set, a non-zero error code is returned. If the
* hostname is not found and the flag is not set, the address is
* returned in numeric form.
- *
+ *
* \li #NI_NUMERICSERV
* The service name is returned as a digit string representing the
* port number.
- *
+ *
* \li #NI_DGRAM
* Specifies that the service being looked up is a datagram
* service, and causes getservbyport() to be called with a second
* argument of "udp" instead of its default of "tcp". This is
* required for the few ports (512-514) that have different
* services for UDP and TCP.
- *
+ *
* \section getnameinfo_return Return Values
- *
+ *
* lwres_getnameinfo() returns 0 on success or a non-zero error code if
* an error occurs.
- *
+ *
* \section getname_see See Also
- *
- * RFC2133, getservbyport(),
+ *
+ * RFC2133, getservbyport(),
* lwres_getnamebyaddr(). lwres_net_ntop().
- *
+ *
* \section getnameinfo_bugs Bugs
- *
+ *
* RFC2133 fails to define what the nonzero return values of
* getnameinfo() are.
*/
@@ -219,6 +219,7 @@ lwres_getnameinfo(const struct sockaddr *sa, size_t salen, char *host,
default:
port = 0;
addr = NULL;
+ POST(port); POST(addr);
INSIST(0);
}
proto = (flags & NI_DGRAM) ? "udp" : "tcp";
diff --git a/lib/lwres/lwinetpton.c b/lib/lwres/lwinetpton.c
index 55c732c3..0710f1d1 100644
--- a/lib/lwres/lwinetpton.c
+++ b/lib/lwres/lwinetpton.c
@@ -1,5 +1,5 @@
/*
- * Copyright (C) 2004, 2005, 2007 Internet Systems Consortium, Inc. ("ISC")
+ * Copyright (C) 2004, 2005, 2007, 2011 Internet Systems Consortium, Inc. ("ISC")
* Copyright (C) 1996-2001 Internet Software Consortium.
*
* Permission to use, copy, modify, and/or distribute this software for any
@@ -19,7 +19,7 @@
*/
#if defined(LIBC_SCCS) && !defined(lint)
-static char rcsid[] = "$Id: lwinetpton.c,v 1.12 2007-06-19 23:47:22 tbox Exp $";
+static char rcsid[] = "$Id: lwinetpton.c,v 1.14 2011-08-29 23:46:44 tbox Exp $";
#endif /* LIBC_SCCS and not lint */
#include <config.h>
@@ -41,7 +41,7 @@ static char rcsid[] = "$Id: lwinetpton.c,v 1.12 2007-06-19 23:47:22 tbox Exp $";
static int inet_pton4(const char *src, unsigned char *dst);
static int inet_pton6(const char *src, unsigned char *dst);
-/*!
+/*!
* int
* lwres_net_pton(af, src, dst)
* convert from presentation format (which usually means ASCII printable)
@@ -103,7 +103,12 @@ inet_pton4(const char *src, unsigned char *dst) {
} else if (ch == '.' && saw_digit) {
if (octets == 4)
return (0);
- *++tp = 0;
+ /*
+ * "clang --analyse" generates warnings using:
+ * *++tp = 0;
+ */
+ tp++;
+ *tp = 0;
saw_digit = 0;
} else
return (0);
diff --git a/make/rules.in b/make/rules.in
index a0434b1d..986b8931 100644
--- a/make/rules.in
+++ b/make/rules.in
@@ -13,7 +13,7 @@
# OR OTHER TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR
# PERFORMANCE OF THIS SOFTWARE.
-# $Id: rules.in,v 1.70 2011-03-01 23:48:07 tbox Exp $
+# $Id: rules.in,v 1.71 2011-09-02 21:15:39 each Exp $
###
### Common Makefile rules for BIND 9.
@@ -88,7 +88,7 @@ testdirs:
install:: all
install clean distclean maintainer-clean doc docclean man manclean::
- @for i in ${ALL_SUBDIRS}; do \
+ @for i in ${ALL_SUBDIRS} ${ALL_TESTDIRS}; do \
if [ "$$i" != "nulldir" -a -d $$i ]; then \
echo "making $@ in `pwd`/$$i"; \
(cd $$i; ${MAKE} ${MAKEDEFS} DESTDIR="${DESTDIR}" $@) || exit 1; \
diff --git a/unit/atf-src/Makefile.am b/unit/atf-src/Makefile.am
index 22b523b0..3eebe61a 100644
--- a/unit/atf-src/Makefile.am
+++ b/unit/atf-src/Makefile.am
@@ -103,6 +103,9 @@ BUILD_SH_TP = \
# Custom targets.
#
+.PHONY: depend
+depend:
+
.PHONY: clean-all
clean-all:
MTN="$(MTN)" $(SH) $(srcdir)/admin/clean-all.sh
diff --git a/unit/atf-src/Makefile.in b/unit/atf-src/Makefile.in
index 0fa6fbcc..f9a937d8 100644
--- a/unit/atf-src/Makefile.in
+++ b/unit/atf-src/Makefile.in
@@ -4614,6 +4614,9 @@ installcheck-atf:
# Custom targets.
#
+.PHONY: depend
+depend:
+
.PHONY: clean-all
clean-all:
MTN="$(MTN)" $(SH) $(srcdir)/admin/clean-all.sh
diff --git a/unit/unittest.sh.in b/unit/unittest.sh.in
index 0f0ea81e..488dd879 100644
--- a/unit/unittest.sh.in
+++ b/unit/unittest.sh.in
@@ -3,13 +3,22 @@
PATH="@ATFBIN@:${PATH}"
export PATH
+status=0
if [ -n "@ATFBIN@" ]
then
+ echo "I: unit tests"
atf-run > atf.out
status=$?
# | cat is there to force non-fancy output
atf-report < atf.out | cat
- [ $status -eq 0 ] && rm -f atf.out
+ if [ $status -eq 0 ]
+ then
+ rm -f atf.out
+ echo R:PASS
+ else
+ echo R:FAIL
+ fi
fi
+exit $status
diff --git a/version b/version
index df06ad27..5e1d3a7c 100644
--- a/version
+++ b/version
@@ -1,4 +1,4 @@
-# $Id: version,v 1.54 2011-03-24 21:37:27 marka Exp $
+# $Id: version,v 1.55 2011-09-13 21:38:50 marka Exp $
#
# This file must follow /bin/sh rules. It is imported directly via
# configure.
@@ -7,4 +7,4 @@ MAJORVER=9
MINORVER=9
PATCHVER=0
RELEASETYPE=a
-RELEASEVER=1
+RELEASEVER=2